diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 00000000..f7501c0d --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,4 @@ +ko_fi: shizhi + +custom: + - "https://afdian.com/a/shi-zhi" diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..8d9df7f8 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,46 @@ +version: 2 +updates: + - package-ecosystem: "npm" + directory: "/" + schedule: + interval: "weekly" + versioning-strategy: "increase" + groups: + build-tools: + patterns: + - "esbuild" + - "fontkit" + - "playwright" + - "sharp" + - "subset-font" + - "typescript" + update-types: ["minor", "patch"] + fonts-and-icons: + patterns: + - "@chinese-fonts/*" + - "@fontsource/*" + - "@fontsource-variable/*" + - "lxgw-wenkai-screen-web" + - "material-symbols" + update-types: ["minor", "patch"] + katex: + patterns: ["katex"] + update-types: ["minor", "patch"] + + - package-ecosystem: "gomod" + directory: "/" + schedule: + interval: "weekly" + groups: + go-dependencies: + patterns: ["*"] + update-types: ["minor", "patch"] + + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" + groups: + github-actions: + patterns: ["*"] + update-types: ["minor", "patch"] diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..6687070c --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,109 @@ +name: CI + +on: + push: + branches: + - main + pull_request: + +permissions: + contents: read + +jobs: + check-unix: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v7 + + - name: Setup Node.js + uses: actions/setup-node@v7 + with: + node-version: '24' + + - name: Setup Go + uses: actions/setup-go@v7 + with: + go-version-file: 'go.mod' + + - name: Install dependencies + run: npm ci + + - name: Install OG runtime and Chromium system dependencies + run: go run ./cmd/daybook setup-og --with-deps + + - name: Check POSIX syntax + run: shellcheck -s sh scripts/install.sh + + - name: Test OG rendering without root in a minimal Ubuntu image + run: bash scripts/test-og-user-deps.sh + + - name: Run checks + run: ./scripts/check.sh + + check-windows: + runs-on: windows-latest + steps: + - name: Checkout code + uses: actions/checkout@v7 + + - name: Setup Go + uses: actions/setup-go@v7 + with: + go-version-file: 'go.mod' + + - name: Build Native Binary + run: | + go build -o daybook.exe ./cmd/daybook + .\daybook.exe --version + + - name: Verify cross-build capability (arm64) + run: | + $env:GOOS = "windows" + $env:GOARCH = "arm64" + go build -o daybook_arm64.exe ./cmd/daybook + shell: powershell + + - name: Test Architecture Mapping (WOW64) + shell: powershell + run: | + $ScriptCode = Get-Content -Raw -Path scripts\install.ps1 + $FunctionOnly = ($ScriptCode -split "# 1. Detect OS & Architecture")[0] + + # Simulate WOW64 (x86 PowerShell on x64 Windows) + $env:PROCESSOR_ARCHITECTURE = "x86" + $env:PROCESSOR_ARCHITEW6432 = "AMD64" + + $ArchResult = Invoke-Command -ScriptBlock ([scriptblock]::Create($FunctionOnly + "`nGet-DaybookArchitecture")) + if ($ArchResult -ne "amd64") { + throw "WOW64 Simulation failed. Expected amd64, got $ArchResult" + } + + # Simulate ARM64 + $env:PROCESSOR_ARCHITECTURE = "ARM64" + Remove-Item Env:\PROCESSOR_ARCHITEW6432 -ErrorAction SilentlyContinue + + $ArchResult2 = Invoke-Command -ScriptBlock ([scriptblock]::Create($FunctionOnly + "`nGet-DaybookArchitecture")) + if ($ArchResult2 -ne "arm64") { + throw "ARM64 Simulation failed. Expected arm64, got $ArchResult2" + } + + - name: Test Installer (PowerShell 5.1) + shell: powershell + run: | + $env:DAYBOOK_INSTALL_DIR = "$env:RUNNER_TEMP\daybook-test-ps5" + & .\scripts\install.ps1 + + if (-not (Test-Path "$env:DAYBOOK_INSTALL_DIR\daybook.exe")) { + throw "Executable not found in install dir" + } + + - name: Test Installer (PowerShell 7) + shell: pwsh + run: | + $env:DAYBOOK_INSTALL_DIR = "$env:RUNNER_TEMP\daybook-test-pwsh" + & .\scripts\install.ps1 + + if (-not (Test-Path "$env:DAYBOOK_INSTALL_DIR\daybook.exe")) { + throw "Executable not found in install dir" + } diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..aa4f1323 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,108 @@ +name: Release + +on: + push: + tags: + - 'v*' + +jobs: + build-and-release: + name: Build and Release + runs-on: ubuntu-latest + permissions: + contents: write + actions: read + + steps: + - name: Checkout Code + uses: actions/checkout@v7 + + - name: Require successful CI for this commit + env: + GH_TOKEN: ${{ github.token }} + run: | + successful_runs=$(gh api --method GET "repos/$GITHUB_REPOSITORY/actions/workflows/ci.yml/runs" \ + -f head_sha="$GITHUB_SHA" -f event=push -f branch=main -f status=success \ + --jq '.workflow_runs | length') + if [ "$successful_runs" -eq 0 ]; then + echo "::error::This release commit has no successful main-branch CI run. Wait for its CI to pass, then rerun this release workflow." + exit 1 + fi + + - name: Setup Node.js + uses: actions/setup-node@v7 + with: + node-version: '24' + cache: 'npm' + + - name: Setup Go + uses: actions/setup-go@v7 + with: + go-version-file: 'go.mod' + cache: true + + - name: Build Frontend Assets + run: | + npm ci + npm run typecheck + npm run build:js + npm run build:vendor + + - name: Build Binaries + env: + CGO_ENABLED: 0 + run: | + VERSION=${GITHUB_REF_NAME} + LDFLAGS="-s -w -X 'main.Version=daybook ${VERSION}'" + + build_target() { + local os=$1 + local arch=$2 + local ext=$3 + local outdir="release/${os}_${arch}" + mkdir -p "$outdir" + cp LICENSE "$outdir/" + + local bin_name="daybook" + if [ "$os" = "windows" ]; then + bin_name="daybook.exe" + fi + + GOOS=$os GOARCH=$arch go build -ldflags "${LDFLAGS}" -o "$outdir/$bin_name" ./cmd/daybook + + cd "$outdir" + if [ "$ext" = "zip" ]; then + zip -q "../../daybook_${VERSION}_${os}_${arch}.zip" "$bin_name" LICENSE + else + tar -czf "../../daybook_${VERSION}_${os}_${arch}.tar.gz" "$bin_name" LICENSE + fi + cd ../.. + } + + # Matrix targets + build_target linux amd64 tar.gz + build_target linux arm64 tar.gz + build_target darwin amd64 tar.gz + build_target darwin arm64 tar.gz + build_target windows amd64 zip + build_target windows arm64 zip + build_target freebsd amd64 tar.gz + build_target openbsd amd64 tar.gz + build_target openbsd arm64 tar.gz + build_target netbsd amd64 tar.gz + build_target dragonfly amd64 tar.gz + + - name: Generate Checksums + run: | + sha256sum daybook_*.tar.gz daybook_*.zip > checksums.txt + + - name: Release + uses: softprops/action-gh-release@v3 + with: + files: | + daybook_*.tar.gz + daybook_*.zip + checksums.txt + scripts/install.sh + scripts/install.ps1 + generate_release_notes: true diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..04aa2685 --- /dev/null +++ b/.gitignore @@ -0,0 +1,50 @@ +# Build output +/public/ +/daybook +/bin/ +/.preview/ + +# Go generated files +*.test +coverage.out +*.prof + +# Future search output +/.pagefind/ + +# Local caches +/.cache/ +/tmp/ +/temp/ + +# Temporary files +*.tmp +*.log + +# macOS +.DS_Store + +# Obsidian +**/.obsidian/* +!**/.obsidian/app.json + +# Keep directory placeholders +Thumbs.db + +# Local environment +.env +.env.* +!.env.example +/config.yaml + +# Editors +.vscode/ +.idea/ + +# Dependencies +node_modules/ + +# README files in subdirectories +[Rr][Ee][Aa][Dd][Mm][Ee].* +!/README.md +!/readme.md diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 00000000..a1eb2a59 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,49 @@ +# AGENTS.md + +## Project Overview + +`daybook` is a minimalist static blog generator for Go and HTML beginners. The project is currently in the **Maintenance and Refactoring Phase**. The architecture has been migrated to a fully standalone CLI model. + +## Standalone Architecture + +**CRITICAL**: `StatIndet/daybook` is the Daybook CLI source repository. It is **NOT** a blog vault. There is no `content/` folder, no root `daybook.yaml`, and no Cloudflare Pages Functions in this repository. + +The directory structure is strictly separated into source code and embedded assets: + +* `assets/ts/`: First-party TypeScript source code. +* `internal/embedded/`: The root directory for embedded templates and static assets. + * `internal/embedded/templates/`: Go HTML templates (`layouts/`, `pages/`, `partials/`). + * `internal/embedded/static/css/`: Global CSS and page-specific styles. + * `internal/embedded/static/js/`: **Generated** JavaScript files. + * `internal/embedded/static/vendor/`: **Generated** third-party runtime assets (Fonts, KaTeX). +* `cmd/daybook/`: The CLI entry point. +* `internal/`: Core Go application logic. + +### User Vaults +The CLI operates on a user's Vault, which is an external working directory independent of this repository. A user vault contains `daybook.yaml` and `notes/`. +The `daybook build` command reads the current working directory as the vault and outputs to `public/`. + +## Development Guidelines + +### Frontend & Vendors +* **Do not directly modify files in `internal/embedded/static/js/`.** Modify `assets/ts/*.ts` and run `npm run build:js`. +* **Do not directly modify files in `internal/embedded/static/vendor/`.** npm packages in `package.json` are the single source of truth. Updates to vendors should be done by bumping npm versions and running `npm run build:vendor`. +* Release builds will strictly rebuild vendor assets from `node_modules`. + +### Workflow +When making changes, follow this pipeline: +1. Source code changes (Go, TS, HTML, CSS). +2. `npm run build:js` or `npm run build:vendor` if applicable. +3. `go build` to verify compilation. +4. Run `./scripts/check.sh` to perform integrity checks and a temporary external vault smoke test. + +### Protected Layout & Design +The UI/UX is considered stable. Do not modify the existing UI layout, View Transitions, side navigation, persistent logos, or typography unless explicitly requested by the user. Ensure CSS modifications only target the specific components intended. + +### Cloudflare Deployment +Cloudflare deployment is a concern of the user's vault and output deployment workflow, not this source repository. There is no longer a Cloudflare Pages Functions architecture embedded within the Daybook source tree. + +## Commit & PR Rules +* Provide clean, logical commits. At the end of requested implementation work, commit completed changes in logical batches and leave the working tree clean; do not discard unrelated changes or push unless requested. +* Make sure `npm ci && npm run typecheck && npm run build:js && npm run build:vendor` pass locally before pushing. +* `check.sh` is the definitive gating script for PRs and local validation. diff --git a/README.md b/README.md new file mode 100644 index 00000000..d8960e96 --- /dev/null +++ b/README.md @@ -0,0 +1,345 @@ +# Daybook + +Daybook is a minimalist static blog generator for Go and HTML beginners, featuring native Obsidian Markdown compatibility, zero-framework TypeScript interactions, and a clean, reading-focused design. + +[![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/StatIndet/daybook-vault) + +If you enjoy Daybook, consider supporting its development. + +[![Ko-fi](https://img.shields.io/badge/Ko--fi-Support%20Daybook-FF6433?style=for-the-badge&logo=kofi&logoColor=white)](https://ko-fi.com/shizhi) +[![爱�电](https://img.shields.io/badge/爱�电-Support%20Daybook-946CE6?style=for-the-badge&logo=afdian&logoColor=white)](https://afdian.com/a/shi-zhi) + +## Desktop + +| Homepage | Notes | Reading Mode | Footnotes | +| :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | +| ![Daybook homepage](https://raw.githubusercontent.com/StatIndet/picture/main/daybook/%E9%A6%96%E9%A1%B5.png) | ![Daybook notes page](https://raw.githubusercontent.com/StatIndet/picture/main/daybook/%E7%AC%94%E8%AE%B0.png) | ![Daybook reading mode](https://raw.githubusercontent.com/StatIndet/picture/main/daybook/%E9%98%85%E8%AF%BB%E6%A8%A1%E5%BC%8F.png) | ![Daybook footnotes](https://raw.githubusercontent.com/StatIndet/picture/main/daybook/%E6%B3%A8%E9%87%8A.png) | +| Attachments | Knowledge Graph | Archive & Statistics | About | +| ![Daybook attachments](https://raw.githubusercontent.com/StatIndet/picture/main/daybook/%E9%99%84%E4%BB%B6.png) | ![Daybook knowledge graph](https://raw.githubusercontent.com/StatIndet/picture/main/daybook/%E5%85%B3%E7%B3%BB%E5%9B%BE%E8%B0%B1.png) | ![Daybook archive and statistics](https://raw.githubusercontent.com/StatIndet/picture/main/daybook/%E5%BD%92%E6%A1%A3%E7%95%8C%E9%9D%A2%E4%B8%8E%E7%BB%9F%E8%AE%A1.png) | ![Daybook about page](https://raw.githubusercontent.com/StatIndet/picture/main/daybook/about%E7%95%8C%E9%9D%A2.png) | + +## Mobile + +| Mobile Layout | Mobile Drawer | Reading Progress | +| :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | +| ![Daybook mobile layout](https://raw.githubusercontent.com/StatIndet/picture/main/daybook/%E7%A7%BB%E5%8A%A8%E7%AB%AF%E5%B8%83%E5%B1%80.png) | ![Daybook mobile drawer](https://raw.githubusercontent.com/StatIndet/picture/main/daybook/%E7%A7%BB%E5%8A%A8%E7%AB%AF%E6%8A%BD%E5%B1%89.png) | ![Daybook reading progress bar](https://raw.githubusercontent.com/StatIndet/picture/main/daybook/%E9%A1%B6%E9%83%A8%E8%BF%9B%E5%BA%A6%E6%9D%A1.png) | + + + +## Architecture + +This repository (`StatIndet/daybook`) contains the Daybook CLI source code. It includes: +* **Go runtime**: Core CLI application and build engine. +* **Embedded assets**: Templates, CSS, and generated static files (`internal/embedded/`). +* **Frontend source**: TypeScript source files (`assets/ts/`). +* **Vendor pipeline**: npm-based asset generation for fonts and KaTeX. +* **Release workflow**: GitHub Actions for building cross-platform standalone binaries. + +### The Vault +Your blog content lives in an independent directory called a **Vault**, which is completely separated from this source repository. + +The CLI runs inside your Vault and expects the following structure: +``` +my-vault/ +├── daybook.yaml +└── vault/ # Open this directory in Obsidian + ├── notes/ # Long-form articles + ├── memos/ # Short, title-free entries (optional) + ├── pages/ # About pages + └── attachments/ +``` + +## Installation + +### Prebuilt Binaries (Recommended) + +The easiest way to install Daybook is using our release installer. This script will automatically detect your OS and architecture, download the latest prebuilt CLI, verify its checksum, and install it without requiring Go. Building social preview images also requires Node.js (>=24) and the local browser setup described below. + +#### Linux / macOS / BSD + +```sh +curl -fsSL https://install.daybook.page | sh +``` + +By default, the executable is installed to `~/.local/bin/daybook`. You do not need root/sudo privileges. Ensure `~/.local/bin` is in your `$PATH`. + +#### Windows + +Open PowerShell and run: + +```powershell +irm https://install.daybook.page/windows | iex +``` + +By default, the executable is installed to `%LOCALAPPDATA%\Programs\Daybook\bin\daybook.exe`. The installer will automatically add this directory to your User PATH. No administrator privileges or WSL are required. + +### Platform Support + +| Operating System | Architectures | Status | +|---|---|---| +| Linux | amd64, arm64 | Native tested | +| macOS | amd64, arm64 | Build-supported / experimental | +| Windows | amd64, arm64 | Native tested | +| FreeBSD | amd64 | Build-supported / experimental | +| OpenBSD | amd64, arm64 | Build-supported / experimental | +| NetBSD | amd64 | Build-supported / experimental | +| DragonFly BSD | amd64 | Build-supported / experimental | + +Alternatively, you can manually download the binaries from [GitHub Releases](https://github.com/StatIndet/daybook/releases). + +Static social-card generation requires a platform supported by [Playwright Chromium](https://playwright.dev/docs/intro#system-requirements). The Go CLI can still be compiled on the other platforms listed above, but full site builds need the browser runtime; use a supported build machine to generate the static site. + +### Build from Source +Building from source is recommended for development. Ensure you have **Go**, **Node.js** (>=24), and **npm** installed. + +```bash +git clone https://github.com/StatIndet/daybook.git +cd daybook +./scripts/install-cli.sh +``` +This script installs npm dependencies, builds frontend assets, and installs the `daybook` executable to your Go bin path (`$GOBIN` or `$(go env GOPATH)/bin`). + +## CLI Commands + +Run these commands inside your Vault directory: + +* `daybook build`: Reads `daybook.yaml`, `vault/notes/` and `vault/memos/`, compiles your site, and outputs static HTML to `public/`. At least one of the two content directories must exist. +* `daybook build --verbose`: Prints timestamped stages, completed files and stage durations without animation. +* `daybook setup-og [--with-deps | --user-deps]`: Installs the pinned Playwright package and Chromium in the current user's caches. Requires Node.js (>=24), npm and network access. Run once before the first build, and again when a CLI update changes the bundled Playwright version. This command can run outside a vault. Add `--with-deps` on a fresh Linux build machine to install Chromium system libraries as well; this uses Playwright's OS dependency installer and requires root or sudo. On Debian/Ubuntu hosts without those privileges, use `--user-deps` to download authenticated APT packages and extract the needed libraries into the user cache; only Chromium loads those libraries, and system packages remain unchanged. +* `daybook serve`: Starts a local web server at `http://localhost:1313` to preview your site. Use `daybook serve --addr 127.0.0.1:1415` to select another address or port. +* `daybook version`: Prints the current CLI version. + +Interactive builds keep two live lines: the current task, completed count and elapsed time above a terminal-width Pac-Man bar. Its mouth animates while waiting; its position moves only when work completes. The percentage is weighted overall work, not an estimate of remaining time. Social cards report each completed image and then validate the generated PNGs. Warnings remain in terminal history; the final summary includes content, social-card and warning counts. + +Redirected output, CI (`CI=true`) and unsupported terminals (`TERM=dumb` or unset) use plain stage start/end logs with no cursor controls. `NO_COLOR=1` disables color while keeping interactive progress. Use `--verbose` to diagnose an individual file or compare stage timings. + +## Development + +If you are modifying the Daybook CLI itself, follow this workflow: + +```bash +# Install npm dependencies +npm ci + +# Build first-party TypeScript files +npm run build:js + +# Build third-party vendor assets (KaTeX, Fonts) +npm run build:vendor + +# Install the local browser and select this checkout's Playwright package +npx playwright install chromium +export DAYBOOK_OG_PLAYWRIGHT_MODULE="$PWD/node_modules/playwright/index.mjs" + +# Run Go tests (including real PNG generation in temporary vaults) +go test ./... + +# Build the temporary binary for local testing +go build -o daybook-cli ./cmd/daybook + +# Run required integrity and functional browser checks (excludes optional TOC diagnostics) +./scripts/check.sh +``` + +TOC geometry, screenshots and desktop/mobile outline checks are opt-in: +`npm run test:toc`. They are not run by `check.sh`, CI or Release. See +[the TOC diagnostics guide](scripts/manual/toc/GUIDE.md) for prerequisites and +checks against a served article or external vault. + +The required checks retain generated-output, privacy, navigation, search and OG +rendering coverage. `check.sh` builds the CLI once and shares that binary with +the isolated memo and article-action fixtures through `DAYBOOK_TEST_BINARY`; +those scripts still compile their own binary when run separately. Browser smoke +tests do not save unasserted screenshots or scan the RSS animation frame by frame. +Release requires a successful main-branch CI run for the exact tagged commit, then +rebuilds and packages the assets and binaries without rerunning browser tests. If +CI is still running when the tag is pushed, rerun Release after CI succeeds. + +> **Note**: Do not modify generated files in `internal/embedded/static/js/` or `internal/embedded/static/vendor/` directly. Always modify the source TypeScript or update the npm package and run the corresponding build scripts. + +### Static social preview images + +Install Node.js (>=24) and npm on the **build machine**, then run: + +```sh +daybook setup-og +cd /path/to/my-vault +daybook build +``` + +Set `site.url` in `daybook.yaml` to your public origin (for example `https://blog.example`) so image metadata contains absolute URLs. Each published note and memo gets a **1200 × 630 PNG** at `public/generated/og/notes/.png` or `public/generated/og/memos/.png`. The hash comes from the canonical page URL, so filenames remain safe and stable for Chinese titles, nested paths and language variants. Builds regenerate the files; social platforms may retain an older preview until their cache refreshes. + +Notes use the filename title, a cleaned `summary` (or a body excerpt), publication date, reading time, optional update date and up to three tags. Memos use the existing author/avatar configuration, date, body text and up to four images; additional images appear as a `+N` overlay. Memo social titles use the author and date instead of the filename. Long text is truncated to fit. Drafts and invalid entries produce no images. Both `og:image` and `twitter:image`, plus structured data, reference the generated PNG. + +Dedicated embedded HTML/CSS templates are rendered in one local Playwright Chromium session per build. The renderer waits for fonts and images, uses a fixed light canvas and disables page JavaScript. It reads bundled fonts and local attachments from the generated site. Remote memo images and configured avatars are fetched **during the build** and must be reachable; use local attachments for offline builds. Missing resources, browser setup problems and screenshot failures stop the build with the affected page/resource in the error. No remote browser or image-generation service is used, and hosting the resulting site needs only static files. + +`setup-og` stores the pinned npm runtime under the OS user cache directory in `daybook/og/`; Chromium uses Playwright's browser cache (including `PLAYWRIGHT_BROWSERS_PATH` when set). Linux machines missing browser system libraries can run `daybook setup-og --with-deps` or follow [Playwright's system-dependency instructions](https://playwright.dev/docs/browsers#install-system-dependencies). For CI or source development, `DAYBOOK_OG_PLAYWRIGHT_MODULE` can point to an absolute installed `playwright` package directory or its `index.mjs` file. `./scripts/check.sh` selects the checkout's package automatically; CI installs Chromium before running it. Keep the pinned runtime version in `internal/og/runtime.go` aligned with `package-lock.json` when updating Playwright. + +For an external vault deployed through Cloudflare Workers Builds, install the renderer after downloading the CLI and before building. With a vault-local CLI installer, the npm build script should run: + +```sh +npm run daybook:setup && ./.daybook/bin/daybook setup-og --user-deps && ./.daybook/bin/daybook build +``` + +Use Node.js 24 or newer. Run `setup-og --user-deps` on every fresh Cloudflare build environment (its build user cannot install system packages with root/sudo), even when the CLI binary is cached: the Playwright package and Chromium have separate caches, and cached downloads do not provide Linux system libraries such as `libatk-1.0.so.0`. Repeating setup is safe and also selects the runtime required by an updated CLI. The release archive contains the CLI and embedded site assets, not Playwright or Chromium. + +## Acknowledge + +[Retypeset](https://github.com/radishzzz/astro-theme-retypeset) + +## License + +This project is open-sourced under the [MIT License](LICENSE). + +## GitHub homepage + +The homepage is a public GitHub profile rendered with Daybook's existing themes. Configure the upstream account in the **external vault's** `daybook.yaml`: + +```yaml +github: + username: StatIndet + tokenEnv: GITHUB_TOKEN +profile: + author: + logoText: Daybook +``` + +Each `daybook build` requests fresh official GitHub data: name, login, avatar, Bio, contacts, followers, public repositories and stars, profile README, organizations and public activity. `GITHUB_TOKEN` is optional; a token enables GraphQL pronouns, pinned repositories, status and contribution calendar, and REST public profile email (GitHub omits email for anonymous requests). Use a token with access to public information only. It is read from the environment and is never written to HTML, JSON or the cache. GitHub local time/timezone visibility and achievements are omitted because the official APIs do not expose them. + +The GitHub Bio supplies homepage description, Open Graph, Twitter and JSON-LD metadata. Manual author names, avatars, slogans and home SEO values are no longer used for a configured GitHub homepage. The persistent logo and footer preferences remain configurable. `profile.author.logoText` also supplies the site name used by SEO and RSS; `site.name` and `profile.author.aboutUrl` are no longer used. Omit `profile.social` when GitHub supplies the social links. A last-successful snapshot in `.daybook-cache/github/` supports offline rebuilds. A first build without accessible upstream data fails with a clear error. Generated `public/github-profile.json` contains only public profile data. + +For scheduled updates, use the external vault's Worker with a KV binding and a Cron Trigger. It serves a build snapshot until KV is refreshed, rewrites the homepage HTML and SEO together, and retains the last success during upstream failures. Deployment configuration belongs to the vault, not this CLI source repository. + +### Articles and interface language + +Every non-draft note is published in Notes, Archive, tags, search, RSS, the sitemap and the graph. Memos have their own timeline at `/memos/` and share RSS, links, search and the graph with notes, but do not appear in Archive. Set `draft: true` to keep unfinished content out of the build. There is no separate listing or discoverability setting. + +Notes and memos use the Markdown filename (without `.md`) as their title. The `title` frontmatter property is no longer used. Keep existing filenames when migrating to preserve published URLs. A valid `date` is required: use `YYYY-MM-DD`, or RFC 3339 when the time matters, for example `2026-10-02T18:30:00+08:00`. Entries with missing or invalid dates are skipped and reported during the build. + +Chinese and English article versions both appear in Notes, Archive, tags, search and the graph. Each article keeps its canonical URL and original text. The global language button changes the interface; on an article it uses `?ui=zh_CN` or `?ui=en_US`. The separate `translate` icon in article metadata opens the corresponding translation. Existing `/en_US/` URL paths remain unchanged; HTML language and `hreflang` values use BCP 47 (`zh-CN`, `en-US`). + +### Interactive graph + +The upper-left toolbar on `/graph/` provides search, orphans, tags, attachments, existing notes only, growth animation, recentering and graph settings. Search opens a compact query field below the toolbar; Graph settings opens the always-expanded Display and Forces sections. On narrow screens the toolbar uses two rows and settings open as a fullscreen layer. Settings stay in the current browser and are shared across interface languages; they do not change the vault or other visitors’ settings. Recenter only moves the camera. Restore defaults clears queries and tuning while keeping a local graph’s scope; use Full graph to leave that scope. + +Use the search field for plain text or the query syntax below. Matching is case-insensitive; an empty query shows all nodes allowed by the toolbar filters. + +| Query | Example | Matches | +| --- | --- | --- | +| Plain words | `项目 计划` | Filename/title or published body containing both words | +| Quoted phrase | `"Hello World"` | The complete phrase | +| Relative path | `path:"notes/My Project"` | Published Vault-relative paths, including spaces; never local absolute paths | +| Filename | `file:.md` | Filenames including the extension | +| Tag | `tag:work` | The tag itself and descendants such as `work/project` | +| Same line | `line:(甲 乙)` | Both terms within one published line | +| Same section | `section:(甲 乙)` | Both terms within one heading section; headings inside code blocks do not split sections | +| Property exists | `[status]` | A public property is present | +| Property value | `[status:done]` | A public scalar value or an item in its scalar list matches | + +Combine conditions with spaces (AND), `OR`, `-` (exclude), and parentheses. Exclusion has the highest precedence, followed by AND, then OR. For example, `path:"notes/My Project" (tag:work OR tag:study) -file:archive` matches that path and either tag while excluding filenames containing `archive`. Custom properties must be included in `graph.searchProperties`; see **Graph search data** below. + +Regular expressions, numeric comparisons, task and block operators are not supported. Invalid syntax shows an error below the field and keeps the previous valid result. If the content index cannot load, `path:`, `file:` and `tag:` remain available. Syntax help is documented here rather than displayed in the graph UI. + +Tags and attachments are added for matching notes; attachments can also match filename/path queries directly. Orphans are determined after filtering, using the currently visible links. Missing-note placeholders can be displayed but cannot create files. Arrows preserve both citation directions while reciprocal citations contribute only one physical link. + +Animation reveals notes in `date` order, grouping the authored calendar day, over 8 seconds. Tags, attachments and missing targets appear with related notes. The toolbar animation button toggles playback: click to start, then click again to stop and restore all filtered nodes. Completion resets the button; the next play starts from the beginning. Changing a filter stops playback. Display settings and forces can change during playback. Reduced-motion preferences replace moving layouts with settled batches. Force values are multipliers of Daybook’s defaults; link distance is measured in graph coordinates. SVG is retained for this first version and is not intended as a guarantee of smooth graphs with tens of thousands of nodes. + +### Graph search data + +The static build publishes a versioned `graph.json` with vault-relative paths and directed citations, plus an independently loaded `graph-search.json` beside it in each interface language. Search text comes from the published article HTML: hidden comments, frontmatter, scripts and generated controls are excluded, while visible code remains searchable. Lines and heading sections are retained; a `#` inside a code fence does not start a section. Draft notes are excluded. Both language routes contain all published note and memo versions, matching the graph. + +Public note metadata (`title`, `date`, `updated`, `tags`, `summary`, `lang`, `slug`, `pinned`, `section`, `location`, `url`, `i18n_key`) is searchable by default. To publish additional custom frontmatter values for property queries, opt in explicitly in the **external vault's** `daybook.yaml`: + +```yaml +graph: + searchProperties: [status, aliases] # Default: [] +``` + +Only the named properties are added to the public JSON. Supported values are strings, numbers, booleans, null, timestamps and lists of these scalars; nested objects and nested lists are omitted. The canonical filename-derived title takes precedence over obsolete `title` frontmatter. File metadata exposes only vault-relative paths, never the build machine's absolute paths. Treat allowlisted values as published content; browser filtering does not make indexed data private. + +### Reading and image viewing + +Notes retain their outline in reader mode: a desktop sidebar or a compact-screen TOC drawer. The image viewer groups photos from the current article or memo, with previous/next buttons and a position counter. Use Left/Right or Home/End to navigate, the wheel or +/- to zoom, 0 to fit, and Escape to close. Double-click to toggle zoom, drag to pan an enlarged photo, or swipe horizontally on touch to change photos. Linked images and images marked `no-lightbox` keep their authored behavior. + +### Memos + +Create Markdown files in `vault/memos/`. The timeline displays each entry's body directly, with its date, optional tags and optional location. Search covers body text, filenames, dates, locations and tags, and combines with calendar and tag filters. Click to select one tag/date; Ctrl-click (or Command-click) or long-press on touch to add or remove selections. Selections within each category are combined with OR, while tags, dates and search are combined with AND. Repeated `tag` and `date` URL parameters preserve and share multiple selections. The timeline shows the full text and up to four images; captions overlay the bottom of each image, and a +N badge at the top-right of the fourth image expands on hover or keyboard focus to open the remaining images in the detail page. Each feed image fits within the size of one responsive 4:3 grid cell. Detail pages retain normal Markdown image rendering. Memos use the same Markdown, Obsidian links and attachment syntax as notes. + +For example, save `vault/memos/Evening walk.md`: + +```markdown +--- +date: 2026-10-02T18:30:00+08:00 +tags: [daily, reading] +location: Riverside +pinned: false +draft: false +--- +An idea from today's walk: leave some room for unfinished thoughts. + +This connects to [[notes/My reading note|my reading note]]. +``` + +Only `date` is required; a date without a time is also valid. `location` is a plain-text label. The filename provides the entry's search/link label and its stable detail URL (`/memos/Evening%20walk/` in this example), while the timeline does not add an article title. Prefix cross-collection Obsidian links with `notes/` or `memos/` when the filename is ambiguous. + +Set `pinned: true` to place a memo at the top of the timeline with a pin marker. Pinned and unpinned entries each remain newest first. Set `pinned: false` or omit it to unpin; rebuild the site to apply the change. Search, calendar and tag filters still apply to pinned entries. + +Memos use a shared post layout in the timeline and detail view, with comment, like, view, share and site-wide RSS actions. Comment counts include replies and are read lazily from giscus; likes remain independent. View counts in the timeline are read without recording visits to each memo. Unavailable counts display a dash. + +Memos support an optional `updated` property (a date or RFC 3339 timestamp), shown in the timeline and detail page without changing publication-date ordering. Memos do not calculate word counts or reading time, and their detail pages do not offer reader mode. The old `pin` frontmatter property has been renamed to `pinned` for both notes and memos; rename it in existing files. + +### Asset builds + +`npm run build:js` also builds flattened common, homepage and other-page CSS bundles. The router waits for destination styles before swapping pages, and loads article modules on demand. Code fonts are requested when code is present. Material Symbols are subset from template, TypeScript and Go callout sources; their `FILL` axis remains variable. The original settings paper lives in `assets/images/` and `npm run build:images` generates a WebP requested only when a settings or share panel opens. CSS, scripts, fonts and their dependent resources receive content-hash names; `_headers` uses immutable caching for those names and revalidation for HTML and unversioned resources. + +Route requests taking more than 400ms show loading feedback: the native desktop `progress` cursor, an expanding Liquid Loop for the default desktop custom cursor (the “Use System Cursor� preference starts unchecked), or an italic `Waiting...` logo with a 2px indeterminate bar at mobile widths (≤960px). The pending state ends when the target HTML and page assets are ready, before the existing transition. An already-visible liquid cursor completes its 300ms entrance before shrinking away, without delaying the page swap; images and comments load independently. System and in-app reduced-motion preferences disable the liquid motion and use static mobile feedback. Liquid contours are generated from `assets/motion/liquid-loop.mjs` by `npm run build:js`, so the browser does not calculate the contour grid. + +To inspect slow navigation locally, serve an external vault, open browser DevTools → Network, select Slow 4G/3G and Disable cache, then click a page link. SPA page requests appear under Fetch/XHR. Test again with throttling off and caching enabled to check fast navigation. `DAYBOOK_TEST_URL=http://localhost:1313 node scripts/navigation-loading-browser-test.mjs` exercises controlled delays, cancellation, timeout, responsive cursors and mobile feedback against a built vault with at least one note and an About page; `check.sh` runs it against its temporary smoke vault. + +### Comments with giscus + +Enable Discussions and install the [giscus GitHub App](https://github.com/apps/giscus) on a public comments repository. Use the repository and category IDs shown by [giscus](https://giscus.app), then configure the **external vault's** `daybook.yaml`: + +```yaml +comment: + enabled: true + provider: giscus + giscus: + repo: StatIndet/giscus + repoId: R_kgDOU4xqeQ + category: Announcements + categoryId: DIC_kwDOU4xqec4DG4Zb +``` + +Replace these repository values for your own blog. Incomplete settings disable comments. Each article maps its canonical comment path to a discussion with strict matching within the selected category. The input appears above comments; article reactions and metadata output are disabled. Articles with `comment: false`, and the reader's Disable Comments preference, suppress the widget. Comment loading starts when the section approaches the viewport. Reading public comments requires no login; posting uses GitHub authorization. The old Waline configuration and vendor assets are no longer used; this change does not import old comments. + +In the comments repository's default branch, add `giscus.json` to allow your production and preview origins and select the default order. For example: + +```json +{ + "origins": [ + "https://daybook.page", + "https://giscus.app", + "http://localhost:1313", + "http://127.0.0.1:1313" + ], + "defaultCommentOrder": "newest" +} +``` + +The four giscus themes are generated from `tokens.css`, existing font declarations and `components/giscus-theme.css` by `npm run build:css`. Palette, light/dark mode and interface language update the existing iframe. Theme and font URLs use the current build's asset manifest and the current page's origin, so local previews do not request unpublished hashes from production. Generated `_headers` and `daybook serve` allow cross-origin requests for the public theme and font assets. + +For local review, build the updated CLI, run it in your vault, and start `daybook serve`. Open an article at `http://localhost:1313`, scroll to comments, and test the language and palette controls. Preview comments are real GitHub Discussions: use a dedicated test article for posting. Browsers may request permission for the giscus iframe to fetch local theme resources. If local network access is blocked, review the same build through a public HTTPS preview; do not substitute production theme URLs with new local hashes. See the [official advanced configuration](https://github.com/giscus/giscus/blob/main/ADVANCED-USAGE.md) for the origin, theme and runtime configuration protocol. + +### 喜欢与 RSS 入� + +开� `stats.enabled` �,文章与�记详情��记时间线会显示匿�喜欢按钮。�端对接模�仓库的 Worker `/api/likes`,支��消�回访���失败�试;�使用 giscus 计数,也�增加 Markdown 笔记属性。模�仓库需先应用 `0002_likes.sql` �移。首次点赞�建立一年有效期的 `daybook_engagement` Cookie,仅用于��或�消点赞;清除 Cookie 或�设备会�为新的点赞身份。 + +�上角工具��手机导航抽屉和文章 metadata �供「订阅本站更新(RSS)�入�,�打开或�制 `/rss.xml`。所有入�都订阅已�布的 notes 与 memos;当� feed �供标题�链接�日期和�选摘�,��供�篇修改或评论通知。纯��部署�使用 RSS;喜欢功能需模�仓库的 Worker 与 D1。交互回归包�在 `scripts/check.sh` 中。 + +### ��设置 + +�用统计的站点首次访问时显示��纸张��,�用设置/分享的裂�纸张和 Checkbox 动画。匿�统计默认关闭;关闭按钮�Escape 和背景关闭��授予��。选择�存在 `daybook:privacy:v1`,�从站点 Logo → 设置 → ���新修改。存储被�用时,选择在当�页�� SPA 导航中�生效。纯���未�用统计的站点�主动弹出。 + +页��览���赖�久身份;仅用户�许时建立 `daybook_analytics` Cookie 统计独立访客和回访。撤回时由�端删除 HttpOnly Cookie,历�计数�留,修改选择���累计�览�。点赞使用独立功能 Cookie,在线人数�标记当�连接。外观�好和 giscus 的按需加载/�用评论设置��影�。 + +**需��时更新 vault Worker。** �端先通过 `PUT /api/privacy` �� `{ "analytics": false }` 或用户已�存的选择,等待 `{ "version": 1, "analytics": false }`(对应所选值)� Cookie 清�完�,��用�行时 API。旧版或��用的 Worker 会使统计�点赞�在线人数暂�,页���阅读;�存��显示��试状�,�会回退到旧版自动建立身份的接�。`POST /api/hit` ��显� `analytics` 和 `countView` 标志,撤回或授�刷新使用 `countView: false`。部署模�中的新 Worker 已实现该�议�旧点赞�移,无需新增数�库�移。�� `daybook serve` �预览 UI,完整验�应使用 vault 的本地 Worker。 diff --git a/assets/images/settings-paper.png b/assets/images/settings-paper.png new file mode 100644 index 00000000..0dcbbe2b Binary files /dev/null and b/assets/images/settings-paper.png differ diff --git a/assets/motion/liquid-loop.mjs b/assets/motion/liquid-loop.mjs new file mode 100644 index 00000000..5b75585a --- /dev/null +++ b/assets/motion/liquid-loop.mjs @@ -0,0 +1,153 @@ +// Geometry adapted from the user-supplied liquid-loop.html motion study. +// Build-time only: marching squares never runs on the browser main thread. +const STEP = 0.95; +const clamp = (x, a, b) => Math.max(a, Math.min(b, x)); +// frame, center x/y, main radii x/y, angle, satellite distance/radius, blend width +const POSES = [ + [0, 199.788, 149.997, 37.435, 37.26, 0, 0.0, 0.0, 1.2], + [8, 199.368, 150.005, 37.522, 37.273, 0, 0.0, 0.0, 1.2], + [16, 195.865, 150.007, 37.406, 37.244, 0, 0.0, 0.0, 1.2], + [20, 191.86, 149.998, 37.403, 37.257, 0, 0.0, 0.0, 1.2], + [24, 185.071, 149.545, 37.352, 37.389, 0, 0.0, 0.0, 1.2], + [25, 182.874, 149.209, 37.658, 37.245, 2, 0.0, 0.0, 1.2], + [26, 179.945, 148.713, 37.313, 37.261, 3.925, 31.099, 0.145, 32.143], + [27, 176.85, 148.0, 37.406, 35.602, 4.994, 37.718, 20.133, 12.133], + [28, 173.074, 147.024, 37.325, 32.863, 6.372, 44.772, 17.593, 16.14], + [29, 168.514, 145.705, 37.257, 31.41, 7.887, 52.693, 16.326, 19.862], + [30, 162.869, 143.879, 36.817, 31.419, 9.425, 64.783, 12.012, 33.6], + [31, 157.471, 141.703, 36.976, 31.424, 11.069, 68.657, 13.449, 1.8], + [32, 151.661, 139.071, 36.868, 31.658, 12.708, 72.939, 13.262, 1.8], + [34, 141.402, 132.667, 36.961, 33.051, 16.604, 81.918, 13.221, 1.8], + [36, 134.126, 125.36, 37.917, 34.481, 20.548, 65.725, 11.514, 1.8], + [37, 131.479, 121.534, 37.492, 35.512, 22.591, 41.784, 17.301, 14.281], + [38, 130.76, 118.097, 37.367, 36.269, 23.001, 0.0, 0.0, 1.2], + [40, 136.901, 114.842, 37.394, 37.205, 50.965, 0.0, 0.0, 1.2], + [41, 142.757, 115.0, 37.308, 36.421, 33.323, 0.0, 0.0, 1.2], + [42, 148.789, 115.817, 38.228, 35.007, 34.498, 0.0, 0.0, 1.2], + [43, 156.154, 118.059, 37.531, 33.89, 36.096, -42.811, 20.029, 13.492], + [44, 163.524, 121.139, 37.303, 32.661, 38.464, -54.965, 18.218, 23.015], + [45, 170.765, 124.895, 37.185, 31.645, 40.835, -66.927, 17.193, 28.8], + [46, 177.825, 129.309, 36.888, 31.336, 43.173, -77.362, 18.392, 1.8], + [48, 189.058, 138.126, 36.826, 31.495, 47.98700000000002, -95.147, 21.403, 1.8], + [50, 194.78, 143.475, 36.79, 31.584, 52.73399999999998, -105.623, 26.36, 1.8], + [52, 197.599, 146.671, 37.035, 33.254, 57.27499999999998, -110.122, 26.673, 1.8], + [54, 198.955, 148.474, 37.185, 35.261, 61.56200000000001, -109.321, 21.717, 1.8], + [56, 199.58, 149.562, 37.385, 37.03, 65.43400000000003, -106.058, 18.617, 1.8], + [58, 199.879, 150.236, 37.4, 36.784, 68.59500000000003, -99.858, 16.529, 1.8], + [59, 200.019, 150.554, 37.339, 35.972, 69.56, -95.33, 15.724, 1.8], + [60, 200.156, 150.971, 37.277, 35.163, 69.97000000000003, -89.673, 15.038, 1.8], + [61, 200.317, 151.47, 37.119, 34.336, 70.29700000000003, -81.981, 14.327, 1.8], + [62, 200.497, 152.048, 37.276, 33.405, 71.098, -71.575, 13.785, 10.865], + [63, 200.632, 152.601, 37.489, 32.668, 72.226, -55.182, 14.323, 22.85], + [64, 200.967, 154.094, 36.992, 31.91, 73.806, -31.054, 21.75, 8.434], + [66, 201.519, 157.4, 36.887, 31.49, 76.6, 0.0, 0.0, 1.2], + [68, 202.044, 163.22, 36.882, 31.56, 80.101, 0.0, 0.0, 1.2], + [70, 202.189, 172.473, 36.85, 31.505, 84.403, 0.0, 0.0, 1.2], + [71, 201.671, 177.437, 36.679, 31.704, 85.711, 20.885, 17.4, 15.079], + [72, 200.845, 182.557, 37.265, 32.63, 88.309, 33.267, 20.3, 9.002], + [73, 199.664, 187.312, 37.455, 33.864, 90.164, 40.959, 19.205, 12.817], + [74, 198.128, 191.291, 37.491, 35.129, 92.312, 44.959, 18.026, 17.61], + [75, 196.341, 194.6, 37.595, 36.359, 94.446, 46.876, 18.737, 17.926], + [76, 194.415, 196.688, 37.707, 37.316, 96.668, 48.839, 18.567, 20.128], + [77, 192.547, 196.865, 37.729, 37.115, 98.777, 51.463, 18.957, 21.775], + [78, 190.99, 195.165, 37.69, 36.2, 101.082, 55.693, 19.198, 24.715], + [79, 189.922, 192.075, 37.642, 35.161, 103.306, 60.689, 19.958, 26.209], + [80, 189.249, 188.064, 37.499, 34.215, 105.439, 66.552, 21.343, 27.9], + [81, 189.007, 183.582, 37.18, 33.322, 107.74, 72.91, 23.135, 28.8], + [82, 189.154, 179.097, 37.324, 32.292, 110.019, 78.458, 26.11, 6.113], + [84, 190.691, 169.81, 36.943, 31.586, 114.595, 88.742, 27.132, 1.8], + [86, 192.846, 162.445, 36.922, 31.592, 119.242, 95.056, 22.547, 1.8], + [88, 194.553, 157.771, 37.005, 31.628, 123.839, 98.873, 19.276, 1.8], + [90, 195.926, 154.809, 37.008, 31.883, 128.501, 100.624, 17.127, 1.8], + [92, 197.085, 152.88, 37.124, 32.851, 133.096, 100.853, 15.643, 1.8], + [94, 198.031, 151.535, 37.242, 33.932, 137.611, 99.671, 14.401, 1.8], + [96, 198.735, 150.792, 37.351, 35.002, 142.247, 96.88, 13.637, 1.8], + [98, 199.194, 150.347, 37.409, 36.103, 146.778, 92.327, 13.05, 1.8], + [100, 199.55, 150.118, 37.552, 37.033, 151.276, 85.299, 13.178, 1.8], + [101, 199.637, 150.034, 37.572, 37.313, 153.463, 80.302, 13.415, 1.8], + [102, 199.627, 150.035, 37.581, 37.358, 155.56, 73.89, 13.24, 1.8], + [103, 199.363, 150.137, 37.985, 37.25, 157.79, 64.732, 13.555, 15.494], + [104, 199.498, 150.064, 37.767, 37.331, 159.622, 51.88, 16.341, 20.994], + [105, 199.63, 150.032, 37.593, 37.333, 161.859, 36.829, 14.458, 17.701], + [106, 199.736, 149.989, 37.51, 37.294, 172.973, 0.0, 0.0, 1.2], + [110, 199.738, 150.004, 37.479, 37.298, 175.202, 0.0, 0.0, 1.2], + [114, 199.783, 150.001, 37.441, 37.26, 170.106, 0.0, 0.0, 1.2], + [118, 199.788, 149.997, 37.435, 37.26, 180, 0.0, 0.0, 1.2], +]; +function makeTrack(rows){ + const slopes=rows.map(r=>r.map(()=>0)); + for(let j=1;j(r[j]-rows[i][j])/(r[0]-rows[i][0])); + slopes[0][j]=d[0];slopes.at(-1)[j]=d.at(-1); + for(let i=1;i{ + let i=0;while(i{j++;return (2*w-3*v+1)*x+(w-2*v+u)*h*slopes[i][j]+(-2*w+3*v)*b[j]+(w-v)*h*slopes[i+1][j];}); + }; +} +const poseAt = makeTrack(POSES); +const fmt=n=>Math.abs(n)<.0001?'0':n.toFixed(2); +function ellipsePath(x,y,a,b,angle){ + const t=angle*Math.PI/180,dx=a*Math.cos(t),dy=a*Math.sin(t); + return `M${fmt(x+dx)},${fmt(y+dy)}A${fmt(a)},${fmt(b)} ${fmt(angle)} 1 0 ${fmt(x-dx)},${fmt(y-dy)}A${fmt(a)},${fmt(b)} ${fmt(angle)} 1 0 ${fmt(x+dx)},${fmt(y+dy)}Z`; +} +function contour(p){ + const [cx,cy,a,b,angle,d,r,k]=p,t=angle*Math.PI/180,cs=Math.cos(t),sn=Math.sin(t),sx=cx+d*cs,sy=cy+d*sn; + if(r<0.01)return ellipsePath(cx,cy,a,b,angle); + // An exact analytic path is cheaper when the two fields cannot touch. + if(Math.abs(d)>a+r+k*.6+2)return ellipsePath(cx,cy,a,b,angle)+ellipsePath(sx,sy,r,r,0); + const field=(x,y)=>{ + const dx=x-cx,dy=y-cy,u=dx*cs+dy*sn,v=-dx*sn+dy*cs; + const q=(Math.hypot(u/a,v/b)-1)*b,z=Math.hypot(u-d,v)-r,h=Math.max(k-Math.abs(q-z),0)/k; + return Math.min(q,z)-h*h*k*.25; + }; + // Marching squares evaluates an analytic smooth union, at arbitrary time. + // It produces vector outlines, including separate islands after a pinch. + const pad=7,extent=Math.max(a,b),x0=Math.floor(Math.min(cx-extent,sx-r)-pad),y0=Math.floor(Math.min(cy-extent,sy-r)-pad); + const nx=Math.ceil((Math.max(cx+extent,sx+r)+pad-x0)/STEP),ny=Math.ceil((Math.max(cy+extent,sy+r)+pad-y0)/STEP),stride=nx+1; + const values=new Float32Array(stride*(ny+1)); + for(let y=0;y<=ny;y++)for(let x=0;x<=nx;x++)values[y*stride+x]=field(x0+x*STEP,y0+y*STEP); + const nodes=new Map(); + const edge=(x,y,e,v)=>{ + let key,x1=x,y1=y,x2=x,y2=y,n1,n2; + if(e===0){key=`h${x},${y}`;x2++;n1=v[0];n2=v[1];} + else if(e===1){key=`v${x+1},${y}`;x1++;x2++;y2++;n1=v[1];n2=v[2];} + else if(e===2){key=`h${x},${y+1}`;y1++;x2++;y2++;n1=v[3];n2=v[2];} + else{key=`v${x},${y}`;y2++;n1=v[0];n2=v[3];} + if(!nodes.has(key)){const u=n1/(n1-n2);nodes.set(key,{x:x0+(x1+(x2-x1)*u)*STEP,y:y0+(y1+(y2-y1)*u)*STEP,to:[],used:false});} + return key; + }; + for(let y=0;yq!==previous);previous=key;key=next; + }while(key&&key!==start&&count<=nodes.size); + path+='Z'; + } + return path; +} +export function cursorPath(frame) { + const pose = poseAt(frame); + // Anchor the main blob to the actual pointer; retain squash and droplets. + pose[0] = 0; + pose[1] = 0; + return contour(pose); +} diff --git a/assets/ts/archive.ts b/assets/ts/archive.ts new file mode 100644 index 00000000..f7b5cccd --- /dev/null +++ b/assets/ts/archive.ts @@ -0,0 +1,681 @@ +(() => { + // ========================================== + // 1. Dataset Cache (Cross-visit) + // ========================================== + interface ArchiveRow { + type: "year" | "note"; + id: string; + year?: string; + date?: string; + dateShort?: string; + title?: string; + readingTime?: string; + summary?: string; + url?: string; + isFirstYear?: boolean; + } + + interface ArchiveDataset { + rows: ArchiveRow[]; + rowById: Map; + rowIndexById: Map; + } + + const dataCache = new Map>(); + + function resolveArchiveDataURL(): string { + return window.location.pathname.startsWith("/en_US/") + ? "/en_US/archive/data.json" : "/archive/data.json"; + } + + function loadArchiveDataset(url: string): Promise { + if (dataCache.has(url)) { + return dataCache.get(url)!; + } + const promise = fetch(url).then(res => { + if (!res.ok) throw new Error("Fetch failed"); + return res.json(); + }).then(data => { + const rows = data.rows || []; + const rowById = new Map(); + const rowIndexById = new Map(); + rows.forEach((r: ArchiveRow, idx: number) => { + rowById.set(r.id, r); + rowIndexById.set(r.id, idx); + }); + return { rows, rowById, rowIndexById }; + }).catch(err => { + console.error("Failed to load archive data:", err); + return { rows: [], rowById: new Map(), rowIndexById: new Map() }; + }); + dataCache.set(url, promise); + return promise; + } + + // ========================================== + // 2. Archive Visit Session + // ========================================== + const sessionSeenRows = new Set(); + const sessionMeasurements = new Map(); + + // ========================================== + // 3. Archive Page Instance + // ========================================== + function createArchiveInstance(navType: "initial" | "push" | "traverse") { + let destroyed = false; + let revealEnabled = false; + let framePending = false; + let frameId: number | null = null; + let scrollGroupResetTimeout: number | null = null; + let saveTimeout: number | null = null; + + let scrollGroupIndex = 0; + let anchorCorrectionPending = false; + + const MAX_INTRO_STAGGER_INDEX = 15; + const MAX_SCROLL_STAGGER_INDEX = 10; + + const OVERSCAN_BEFORE = 800; + const OVERSCAN_AFTER = 1200; + + let isMobile = window.innerWidth <= 640; + let defaultYearHeight = isMobile ? 50 : 80; + let defaultNoteHeight = isMobile ? 90 : 130; + + let dataset: ArchiveDataset | null = null; + let prefixSums: number[] = []; + let totalHeight = 0; + + const mountedNodes = new Map(); + + let resizeObserver: ResizeObserver | null = null; + let revealObserver: IntersectionObserver | null = null; + + const listEl = document.querySelector(".archive-virtual-list") as HTMLElement; + const windowEl = document.querySelector(".archive-virtual-window") as HTMLElement; + const topSpacer = document.querySelector(".archive-virtual-spacer-top") as HTMLElement; + const bottomSpacer = document.querySelector(".archive-virtual-spacer-bottom") as HTMLElement; + + function getScrollY() { return window.scrollY; } + + function getListTop() { + if (!listEl) return 0; + return listEl.getBoundingClientRect().top + getScrollY(); + } + + function estimateHeight(row: ArchiveRow) { + if (sessionMeasurements.has(row.id)) { + return sessionMeasurements.get(row.id)!; + } + return row.type === "year" ? defaultYearHeight : defaultNoteHeight; + } + + function calculatePrefixSums() { + if (!dataset) return; + const rows = dataset.rows; + prefixSums = new Array(rows.length + 1); + prefixSums[0] = 0; + let sum = 0; + for (let i = 0; i < rows.length; i++) { + sum += estimateHeight(rows[i]!); + prefixSums[i + 1] = sum; + } + totalHeight = sum; + } + + function findRowIndex(offset: number): number { + if (!dataset || dataset.rows.length === 0) return 0; + let low = 0; + let high = dataset.rows.length; + while (low < high) { + let mid = Math.floor((low + high) / 2); + if (prefixSums[mid]! <= offset && prefixSums[mid + 1]! > offset) { + return mid; + } + if (prefixSums[mid]! > offset) { + high = mid; + } else { + low = mid + 1; + } + } + return Math.min(low, dataset.rows.length - 1); + } + + function createRowElement(row: ArchiveRow): HTMLElement { + const div = document.createElement("div"); + div.className = row.type === "year" ? "archive-virtual-row archive-year-row" : "archive-virtual-row archive-item-row"; + if (row.isFirstYear) div.classList.add("is-first-year"); + div.dataset.archiveRowId = row.id; + div.dataset.archiveRowType = row.type; + + if (row.type === "year") { + const h2 = document.createElement("h2"); + h2.id = `archive-year-${row.year}`; + h2.textContent = row.year || ""; + div.appendChild(h2); + const empty = document.createElement("div"); + div.appendChild(empty); + } else { + const empty = document.createElement("div"); + empty.setAttribute("aria-hidden", "true"); + div.appendChild(empty); + + const track = document.createElement("div"); + track.className = "archive-item-track"; + + const item = document.createElement("div"); + item.className = "archive-item"; + + const time = document.createElement("time"); + if (row.date) time.setAttribute("datetime", row.date); + time.textContent = row.dateShort || ""; + item.appendChild(time); + + const entry = document.createElement("div"); + entry.className = "archive-entry"; + + const a = document.createElement("a"); + if (row.url) a.href = row.url; + a.textContent = row.title || ""; + entry.appendChild(a); + + if (row.readingTime) { + const rt = document.createElement("span"); + rt.className = "archive-reading-time"; + rt.textContent = row.readingTime; + entry.appendChild(rt); + } + + if (row.summary) { + const p = document.createElement("p"); + p.textContent = row.summary; + entry.appendChild(p); + } + + item.appendChild(entry); + track.appendChild(item); + div.appendChild(track); + } + return div; + } + + function syncRevealState(el: HTMLElement, row: ArchiveRow) { + if (row.type !== "note") return; + + if ( + el.classList.contains("is-intro-revealing") || + el.classList.contains("reveal-trigger") || + el.classList.contains("is-seen") + ) { + return; + } + + if (sessionSeenRows.has(row.id)) { + el.classList.add("is-seen"); + el.classList.remove("is-pending-reveal"); + revealObserver?.unobserve(el); + return; + } + + el.classList.add("is-pending-reveal"); + el.classList.remove("is-seen"); + + if (revealEnabled) { + revealObserver?.observe(el); + } + } + + function triggerReveal(el: HTMLElement, staggerIndex: number, mode: 'intro' | 'scroll') { + const id = el.dataset.archiveRowId; + if (!id) return; + + if (el.classList.contains("is-intro-revealing") || el.classList.contains("reveal-trigger") || el.classList.contains("is-seen")) { + return; + } + + sessionSeenRows.add(id); + el.classList.remove("is-pending-reveal"); + revealObserver?.unobserve(el); + + if (document.documentElement.dataset.reducedMotion === "true") { + el.classList.add("is-seen"); + return; + } + + const animClass = mode === 'intro' ? "is-intro-revealing" : "reveal-trigger"; + el.classList.add(animClass); + el.style.setProperty("--stagger-index", String(staggerIndex)); + + el.addEventListener("animationend", function handler(e) { + if (destroyed) return; + if (e.target !== el && !(e.target as HTMLElement).classList.contains("archive-item")) return; + el.classList.remove(animClass); + el.classList.add("is-seen"); + el.removeEventListener("animationend", handler); + }, { once: true }); + } + + function updateVirtualWindow() { + if (destroyed || !listEl || !windowEl || !topSpacer || !bottomSpacer || !dataset) return; + + const viewportHeight = window.innerHeight; + const scrollY = getScrollY(); + const listTop = getListTop(); + + const localTop = scrollY - listTop; + const renderStartY = Math.max(0, localTop - OVERSCAN_BEFORE); + const renderEndY = localTop + viewportHeight + OVERSCAN_AFTER; + + const startIdx = findRowIndex(renderStartY); + const endIdx = findRowIndex(renderEndY); + + const topHeight = prefixSums[startIdx]!; + const bottomHeight = totalHeight - prefixSums[endIdx + 1]!; + + topSpacer.style.height = `${topHeight}px`; + bottomSpacer.style.height = `${bottomHeight}px`; + + const toKeep = new Set(); + const requiredIds: string[] = []; + for (let i = startIdx; i <= endIdx; i++) { + if (i < 0 || i >= dataset.rows.length) continue; + toKeep.add(dataset.rows[i]!.id); + requiredIds.push(dataset.rows[i]!.id); + } + + for (const [id, el] of mountedNodes.entries()) { + if (!toKeep.has(id)) { + if (resizeObserver) resizeObserver.unobserve(el); + if (revealObserver) revealObserver.unobserve(el); + el.remove(); + mountedNodes.delete(id); + } + } + + let currentDomNode = windowEl.firstElementChild; + + for (let i = 0; i < requiredIds.length; i++) { + const id = requiredIds[i]!; + const row = dataset.rowById.get(id); + if (!row) continue; + + let el = mountedNodes.get(id); + let isNew = false; + + if (!el) { + el = createRowElement(row); + mountedNodes.set(id, el); + isNew = true; + } + + if (currentDomNode === el) { + currentDomNode = currentDomNode.nextElementSibling; + } else { + windowEl.insertBefore(el, currentDomNode); + } + + syncRevealState(el, row); + + if (isNew && resizeObserver) { + resizeObserver.observe(el); + } + } + + while (currentDomNode) { + const next = currentDomNode.nextElementSibling; + if (currentDomNode.classList.contains("archive-virtual-row")) { + currentDomNode.remove(); + } + currentDomNode = next; + } + } + + function initRevealObserver() { + revealObserver = new IntersectionObserver((entries) => { + let anyRevealed = false; + + entries.forEach(entry => { + if (entry.isIntersecting) { + const el = entry.target as HTMLElement; + const id = el.dataset.archiveRowId; + if (id && !sessionSeenRows.has(id)) { + const stagger = Math.min(scrollGroupIndex, MAX_SCROLL_STAGGER_INDEX); + scrollGroupIndex++; + anyRevealed = true; + triggerReveal(el, stagger, 'scroll'); + } + } + }); + + if (anyRevealed) { + if (scrollGroupResetTimeout !== null) clearTimeout(scrollGroupResetTimeout); + scrollGroupResetTimeout = window.setTimeout(() => { + scrollGroupIndex = 0; + }, 300); + } + }, { rootMargin: "-40px 0px" }); + } + + function initResizeObserver() { + resizeObserver = new ResizeObserver((entries) => { + let changed = false; + let anchorIdx = -1; + let anchorOffset = 0; + + if (dataset && listEl) { + const localTop = getScrollY() - getListTop(); + anchorIdx = findRowIndex(localTop); + if (anchorIdx >= 0) { + anchorOffset = localTop - prefixSums[anchorIdx]!; + } + } + + for (const entry of entries) { + const el = entry.target as HTMLElement; + const id = el.dataset.archiveRowId; + if (!id) continue; + + const currentHeight = entry.borderBoxSize?.[0]?.blockSize || entry.contentRect.height; + const prevHeight = sessionMeasurements.get(id); + if (prevHeight === undefined || Math.abs(prevHeight - currentHeight) > 0.5) { + if (currentHeight > 0) { + sessionMeasurements.set(id, currentHeight); + changed = true; + } + } + } + + if (changed) { + calculatePrefixSums(); + if (anchorIdx >= 0 && !anchorCorrectionPending) { + const newLocalTop = prefixSums[anchorIdx]! + anchorOffset; + const newScrollY = newLocalTop + getListTop(); + const diff = newScrollY - getScrollY(); + + if (Math.abs(diff) > 1) { + anchorCorrectionPending = true; + window.scrollBy(0, diff); + requestAnimationFrame(() => { + anchorCorrectionPending = false; + }); + } + } + + if (!framePending) { + framePending = true; + frameId = requestAnimationFrame(() => { + if (destroyed) return; + updateVirtualWindow(); + framePending = false; + }); + } + } + }); + } + + function measureGlobalResize() { + const wasMobile = window.innerWidth <= 640; + if (wasMobile !== isMobile) { + isMobile = wasMobile; + defaultYearHeight = isMobile ? 50 : 80; + defaultNoteHeight = isMobile ? 90 : 130; + sessionMeasurements.clear(); + calculatePrefixSums(); + if (!framePending) { + framePending = true; + frameId = requestAnimationFrame(() => { + if (destroyed) return; + updateVirtualWindow(); + framePending = false; + }); + } + } + } + + function onScroll() { + if (!framePending) { + framePending = true; + frameId = requestAnimationFrame(() => { + if (destroyed) return; + updateVirtualWindow(); + framePending = false; + }); + } + debouncedSaveAnchor(); + } + + function saveAnchor() { + if (destroyed || !dataset || !listEl) return; + const localTop = getScrollY() - getListTop(); + const idx = findRowIndex(localTop); + if (idx >= 0 && idx < dataset.rows.length) { + const row = dataset.rows[idx]!; + const offset = localTop - prefixSums[idx]!; + + const currentState = history.state || {}; + const newArchiveState = { anchorId: row.id, anchorOffset: offset }; + + if (!currentState.daybookArchive || currentState.daybookArchive.anchorId !== row.id || Math.abs(currentState.daybookArchive.anchorOffset - offset) > 10) { + history.replaceState({ ...currentState, daybookArchive: newArchiveState }, ""); + } + } + } + + function debouncedSaveAnchor() { + if (saveTimeout !== null) clearTimeout(saveTimeout); + saveTimeout = window.setTimeout(saveAnchor, 200); + } + + function syncAllMountedRevealStates() { + if (!dataset || destroyed) return; + for (const [id, el] of mountedNodes.entries()) { + const row = dataset.rowById.get(id); + if (row) syncRevealState(el, row); + } + } + + function runInitialIntro() { + if (!dataset || destroyed || !windowEl) return; + let introIndex = 0; + const vh = window.innerHeight; + + const rows = Array.from(windowEl.children); + for (const el of rows) { + const htmlEl = el as HTMLElement; + const id = htmlEl.dataset.archiveRowId; + if (!id) continue; + + const row = dataset.rowById.get(id); + if (!row || row.type !== "note") continue; + if (sessionSeenRows.has(id)) continue; + + const rect = htmlEl.getBoundingClientRect(); + if (rect.bottom > 0 && rect.top < vh) { + const stagger = Math.min(introIndex, MAX_INTRO_STAGGER_INDEX); + triggerReveal(htmlEl, stagger, 'intro'); + introIndex++; + } + } + } + + async function init() { + if (!listEl || !windowEl) return; + + if (navType === "initial" || navType === "push") { + sessionSeenRows.clear(); + } + + let isReload = false; + let isNavigate = false; + if (navType === "initial") { + const navEntries = performance.getEntriesByType("navigation"); + if (navEntries.length > 0) { + const navTiming = navEntries[0] as PerformanceNavigationTiming; + if (navTiming.type === "reload") isReload = true; + if (navTiming.type === "navigate") isNavigate = true; + } + } + + const preMounted = windowEl.querySelectorAll(".archive-virtual-row"); + preMounted.forEach((el) => { + const htmlEl = el as HTMLElement; + const id = htmlEl.dataset.archiveRowId; + if (id) mountedNodes.set(id, htmlEl); + }); + + const dataUrl = resolveArchiveDataURL(); + dataset = await loadArchiveDataset(dataUrl); + + if (destroyed) return; + if (!dataset || dataset.rows.length === 0) return; + + calculatePrefixSums(); + initRevealObserver(); + initResizeObserver(); + window.addEventListener("resize", measureGlobalResize); + window.addEventListener("scroll", onScroll, { passive: true }); + + preMounted.forEach((el) => { + const htmlEl = el as HTMLElement; + const id = htmlEl.dataset.archiveRowId; + if (id) { + sessionMeasurements.set(id, htmlEl.getBoundingClientRect().height); + resizeObserver?.observe(htmlEl); + } + }); + calculatePrefixSums(); + + let willRestore = false; + if (isReload || (navType === "initial" && isNavigate)) { + if (history.state && history.state.daybookArchive) { + const newState = Object.assign({}, history.state); + delete newState.daybookArchive; + history.replaceState(newState, ""); + } + window.scrollTo(0, 0); + } else if (navType === "traverse" && history.state && history.state.daybookArchive) { + const state = history.state.daybookArchive; + if (state.anchorId) { + const idx = dataset.rowIndexById.get(state.anchorId); + if (idx !== undefined) { + const estimatedLocalTop = prefixSums[idx]! + (state.anchorOffset || 0); + topSpacer!.style.height = `${estimatedLocalTop}px`; + bottomSpacer!.style.height = `${totalHeight - estimatedLocalTop}px`; + window.scrollTo(0, getListTop() + estimatedLocalTop); + willRestore = true; + } + } + } + + updateVirtualWindow(); + + if (willRestore) { + revealEnabled = true; + syncAllMountedRevealStates(); + } else { + frameId = requestAnimationFrame(() => { + if (destroyed) return; + runInitialIntro(); + revealEnabled = true; + syncAllMountedRevealStates(); + }); + } + } + + function destroy() { + destroyed = true; + window.removeEventListener("scroll", onScroll); + window.removeEventListener("resize", measureGlobalResize); + if (resizeObserver) resizeObserver.disconnect(); + if (revealObserver) revealObserver.disconnect(); + if (frameId !== null) cancelAnimationFrame(frameId); + if (scrollGroupResetTimeout !== null) clearTimeout(scrollGroupResetTimeout); + if (saveTimeout !== null) clearTimeout(saveTimeout); + + mountedNodes.clear(); + } + + return { init, destroy }; + } + + // ========================================== + // 4. Global Controller + // ========================================== + let activeArchiveInstance: ReturnType | null = null; + + function initStatsAnimation() { + const nums = document.querySelectorAll(".archive-stat-num:not(.anim-done)"); + nums.forEach(el => { + const startedAt = el.getAttribute("data-started-at"); + if (startedAt) { + const started = Date.parse(startedAt); + if (Number.isFinite(started)) { + const days = Math.max(0, Math.floor((Date.now() - started) / 86400000)); + el.setAttribute("data-target", String(days)); + } + } + const targetAttr = el.getAttribute("data-target"); + if (!targetAttr) return; + const target = parseInt(targetAttr, 10); + if (isNaN(target)) return; + + el.classList.add("anim-done"); + + const isKFormat = el.getAttribute("data-format") === "k"; + const displayTarget = isKFormat ? target / 1000 : target; + + if (matchMedia('(prefers-reduced-motion: reduce)').matches || document.documentElement.dataset.reducedMotion === 'true') { + el.textContent = isKFormat ? displayTarget.toFixed(1) : displayTarget.toLocaleString(); + return; + } + const duration = 1200; // 1.2s for quick count + const startTime = performance.now(); + + const update = (currentTime: number) => { + if (!el.isConnected) return; + const elapsed = currentTime - startTime; + let progress = Math.min(elapsed / duration, 1); + // easeOutExpo + progress = progress === 1 ? 1 : 1 - Math.pow(2, -10 * progress); + + const current = progress * displayTarget; + + if (isKFormat) { + el.textContent = current.toFixed(1); + } else { + el.textContent = Math.floor(current).toLocaleString(); + } + + if (progress < 1) { + requestAnimationFrame(update); + } else { + el.textContent = isKFormat ? displayTarget.toFixed(1) : displayTarget.toLocaleString(); + } + }; + requestAnimationFrame(update); + }); + } + + document.addEventListener("daybook:page-load", (e: Event) => { + if (activeArchiveInstance) { + activeArchiveInstance.destroy(); + activeArchiveInstance = null; + } + + if (!document.querySelector(".archive-page")) { + return; + } + + const detail = (e as CustomEvent).detail || {}; + const navigationType = detail.navigationType || "initial"; + + activeArchiveInstance = createArchiveInstance(navigationType as any); + activeArchiveInstance.init(); + + initStatsAnimation(); + }); + + document.addEventListener("daybook:stats-loaded", () => { + initStatsAnimation(); + }); +})(); diff --git a/assets/ts/article-actions.ts b/assets/ts/article-actions.ts new file mode 100644 index 00000000..95fc6dc3 --- /dev/null +++ b/assets/ts/article-actions.ts @@ -0,0 +1,211 @@ +import { updateNumber } from "./number-flip"; +import { privacyReady } from "./privacy-store"; +import { animateTextChange } from "./text-roll"; +type LikeState = { path: string; count: number; liked: boolean }; + +function text(key: string): string { + const language = document.documentElement.lang.toLowerCase().startsWith('en') ? 'en_US' : 'zh_CN'; + const dictionary = JSON.parse(document.getElementById('daybook-ui-translations')?.textContent || '{}'); + return dictionary[language]?.[key] || key; +} + +function likeButtons(path?: string): HTMLButtonElement[] { + return [...document.querySelectorAll('[data-like-path]')] + .filter(button => !path || button.dataset.likePath === path); +} + +function paint(state: LikeState): void { + for (const button of likeButtons(state.path)) { + button.dataset.likeReady = 'true'; + button.setAttribute('aria-pressed', String(state.liked)); + updateNumber(button.querySelector('[data-like-count]')!, state.count.toLocaleString()); + button.dataset.uiAria = state.liked ? 'likes.unlike' : 'likes.like'; + button.dataset.uiTooltip = button.dataset.uiAria; + button.setAttribute('aria-label', text(button.dataset.uiAria)); + button.dataset.tooltip = text(button.dataset.uiAria); + } +} + +const feedbackTimers = new WeakMap>(); + +function clearFeedback(button: HTMLButtonElement): void { + clearTimeout(feedbackTimers.get(button)); + feedbackTimers.delete(button); + delete button.dataset.likeFeedback; + button.dataset.uiAria = button.getAttribute('aria-pressed') === 'true' ? 'likes.unlike' : 'likes.like'; + button.setAttribute('aria-label', text(button.dataset.uiAria)); +} + +function feedback(path: string, result: 'success' | 'error'): void { + for (const button of likeButtons(path)) { + clearFeedback(button); + // Restart feedback even when another response arrives during the animation. + const icon = button.querySelector('.material-symbol'); + if (icon) void icon.offsetWidth; + button.dataset.likeFeedback = result; + if (result === 'error') { + // Keep the failure available to assistive technology without adding text + // to the metadata row or changing the button's confirmed liked state. + button.dataset.uiAria = 'likes.failed'; + button.setAttribute('aria-label', text('likes.failed')); + } + feedbackTimers.set(button, setTimeout(() => clearFeedback(button), 700)); + } +} + +async function requestLikes(paths: string[], desired?: boolean): Promise { + if (!await privacyReady()) throw new Error('Privacy API unavailable'); + const query = new URLSearchParams(); + for (const path of paths) query.append('path', path); + const response = await fetch(desired === undefined ? `/api/likes?${query}` : '/api/likes', { + method: desired === undefined ? 'GET' : 'PUT', + credentials: 'same-origin', cache: 'no-store', signal: AbortSignal.timeout(12000), + ...(desired === undefined ? {} : { + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ path: paths[0], liked: desired }), + }), + }); + if (!response.ok) throw new Error('Likes unavailable'); + const data = await response.json(); + if (!Array.isArray(data.items) || data.items.length !== paths.length || data.items.some((item: LikeState) => + !paths.includes(item.path) || typeof item.liked !== 'boolean' || !Number.isSafeInteger(item.count) || item.count < 0)) { + throw new Error('Invalid likes response'); + } + return data.items; +} + +// Serialize mutations so the first like establishes its functional Cookie. +// Reading counts never creates an identity. +let queue: Promise = Promise.resolve(); +function enqueue(work: () => Promise): void { + queue = queue.then(work).catch(() => {}); +} +const pending = new Set(); + +function busy(path: string, value: boolean): void { + for (const button of likeButtons(path)) { + button.disabled = value; + button.setAttribute('aria-busy', String(value)); + } +} + +export function initLikes(visitorReady: Promise | null): void { + const buttons = likeButtons(); + for (const button of buttons) { + try { button.dataset.likePath = decodeURI(new URL(button.dataset.likePath!, location.origin).pathname).replace(/\/+$/, '') + '/'; } catch {} + } + if (!buttons.length || document.body.dataset.statsEnabled !== 'true') return; + const paths = [...new Set(buttons.map(button => button.dataset.likePath!))]; + enqueue(async () => { + // Wait for initial privacy synchronization and legacy cookie migration. + await visitorReady?.catch(() => {}); + if (!buttons.some(button => button.isConnected)) return; + for (let i = 0; i < paths.length; i += 10) { + const batch = paths.slice(i, i + 10); + try { (await requestLikes(batch)).forEach(paint); } + catch { + for (const path of batch) for (const button of likeButtons(path)) { + button.dataset.tooltip = text('likes.unavailable'); + } + } finally { + batch.forEach(path => busy(path, pending.has(path))); + } + } + }); +} + +document.addEventListener('click', event => { + const button = (event.target as Element | null)?.closest('[data-like-path]'); + if (!button || button.disabled) return; + const path = button.dataset.likePath!; + if (pending.has(path)) return; + pending.add(path); + likeButtons(path).forEach(clearFeedback); + busy(path, true); + enqueue(async () => { + try { + let liked = button.getAttribute('aria-pressed') === 'true'; + if (button.dataset.likeReady !== 'true') { + const [state] = await requestLikes([path]); + if (!state) throw new Error("Missing like state"); + paint(state); + liked = state.liked; + } + const desired = !liked; + (await requestLikes([path], desired)).forEach(paint); + feedback(path, 'success'); + } catch { + feedback(path, 'error'); + } finally { + pending.delete(path); + busy(path, false); + } + }); +}); + +function setupRSS(): void { + const dialog = document.querySelector('#rss-dialog'); + if (!dialog || dialog.dataset.bound) return; + dialog.dataset.bound = 'true'; + const address = dialog.querySelector('[data-rss-address]')!; + const open = dialog.querySelector('[data-rss-feed]')!; + const status = dialog.querySelector('[role="status"]')!; + const copyButton = dialog.querySelector('[data-rss-copy]')!; + const copyText = copyButton.querySelector('[data-rss-copy-text]')!; + let resetTimer = 0; + let copyRequest = 0; + function resetCopy(): void { + copyRequest++; + clearTimeout(resetTimer); + copyButton.dataset.uiAria = 'rss.copy'; + copyButton.setAttribute('aria-label', text('rss.copy')); + animateTextChange(copyText, text('rss.copy'), true); + status.textContent = ''; + } + document.addEventListener('click', event => { + const link = (event.target as Element | null)?.closest('[data-rss-open]'); + if (!link || event.button !== 0 || event.ctrlKey || event.metaKey || event.shiftKey || event.altKey) return; + event.preventDefault(); + address.value = link.href; + open.href = link.href; + resetCopy(); + if (!dialog.open) { + dialog.classList.add('is-open'); + dialog.showModal(); + } + }, true); + copyButton.addEventListener('click', async () => { + const value = address.value; + const request = ++copyRequest; + clearTimeout(resetTimer); + status.textContent = ''; + try { + await navigator.clipboard.writeText(value); + if (!dialog.open || request !== copyRequest) return; + copyButton.dataset.uiAria = 'action.copied'; + copyButton.setAttribute('aria-label', text('action.copied')); + animateTextChange(copyText, text('action.copied')); + resetTimer = window.setTimeout(() => { + copyButton.dataset.uiAria = 'rss.copy'; + copyButton.setAttribute('aria-label', text('rss.copy')); + animateTextChange(copyText, text('rss.copy')); + }, 1500); + } catch { + if (!dialog.open || request !== copyRequest) return; + resetCopy(); + address.focus(); + address.select(); + status.textContent = text('rss.copy_fallback'); + } + }); + dialog.addEventListener('keydown', event => { if (event.key === 'Escape') event.stopPropagation(); }); + dialog.querySelector('[data-rss-close]')!.addEventListener('click', () => dialog.close()); + dialog.addEventListener('close', () => { + dialog.classList.remove('is-open'); + resetCopy(); + }); + document.addEventListener('daybook:before-swap', () => dialog.close()); + document.addEventListener('daybook:lang-change', resetCopy); +} +if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', setupRSS, { once: true }); +else setupRSS(); diff --git a/assets/ts/code-copy.ts b/assets/ts/code-copy.ts new file mode 100644 index 00000000..eed92db3 --- /dev/null +++ b/assets/ts/code-copy.ts @@ -0,0 +1,69 @@ +(function () { + var resetDelay = 1400; + + interface CopyButton extends HTMLElement { + _daybookCopyTimer?: number; + } + + function setButtonState(button: CopyButton, iconName: string): void { + const icon = button.querySelector(".material-symbol"); + if (icon) { + icon.textContent = iconName; + } + } + + function fallbackCopy(text: string): boolean { + const textarea = document.createElement("textarea"); + textarea.value = text; + textarea.setAttribute("readonly", ""); + textarea.style.position = "fixed"; + textarea.style.left = "-9999px"; + textarea.style.top = "0"; + document.body.appendChild(textarea); + textarea.select(); + + try { + document.execCommand("copy"); + return true; + } finally { + textarea.remove(); + } + } + + async function copyText(text: string): Promise { + if (navigator.clipboard && window.isSecureContext) { + await navigator.clipboard.writeText(text); + return true; + } + + return fallbackCopy(text); + } + + document.addEventListener("click", async function (event: MouseEvent) { + const target = event.target as HTMLElement; + const button = target.closest(".code-copy-button") as CopyButton | null; + if (!button) { + return; + } + + const block = button.closest(".highlight"); + const code = block && block.querySelector("pre code"); + if (!code) { + return; + } + + try { + await copyText(code.textContent); + } catch (error) { + return; + } + + window.clearTimeout(button._daybookCopyTimer); + button.classList.add("is-copied"); + setButtonState(button, "check"); + button._daybookCopyTimer = window.setTimeout(function () { + button.classList.remove("is-copied"); + setButtonState(button, "content_copy"); + }, resetDelay); + }); +})(); diff --git a/assets/ts/custom-cursor-clock.ts b/assets/ts/custom-cursor-clock.ts new file mode 100644 index 00000000..be53f47c --- /dev/null +++ b/assets/ts/custom-cursor-clock.ts @@ -0,0 +1,336 @@ +// @ts-nocheck +export class IdleClockController { + private canvas: HTMLCanvasElement; + private ctx: CanvasRenderingContext2D; + private fontFamily: string; + private rafId: number | null = null; + private onResizeBound: () => void; + + private state: 'hidden' | 'entering' | 'active' | 'exiting' | 'snapped' = 'hidden'; + + private width: number = 0; + private height: number = 0; + + private cursor = { x: window.innerWidth / 2, y: window.innerHeight / 2 }; + + // Physics & Animation Arrays + private dy = new Float64Array(200); + private dx = new Float64Array(200); + private zy = new Float64Array(200); + private zx = new Float64Array(200); + + private pscale = new Float64Array(200); + private popacity = new Float64Array(200); + private pradiusOffset = new Float64Array(200); + private pdx = new Float64Array(200); + private pdy = new Float64Array(200); + private vx = new Float64Array(200); + private vy = new Float64Array(200); + + private sum: number = 0; + + private theDays = ["SUNDAY", "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY"]; + private theMonths = ["JANUARY", "FEBRUARY", "MARCH", "APRIL", "MAY", "JUNE", "JULY", "AUGUST", "SEPTEMBER", "OCTOBER", "NOVEMBER", "DECEMBER"]; + + private dateInWords: string[] = []; + private clockNumbers = ["3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "1", "2"]; + private hourHand = ["•", "•", "•"]; + private minuteHand = ["•", "•", "•", "•"]; + private secondHand = ["•", "•", "•", "•", "•"]; + + private F = this.clockNumbers.length; + private siz = 70; // Increased size for new hand geometry + private eqf = 360 / this.F; + private eqd: number = 0; + private han = 12; // Fixed 12px gap between 8px dots + + private colors = { + main: "", + text: "", + muted: "" + }; + + private lastDateString = ""; + + constructor() { + this.canvas = document.createElement("canvas"); + this.canvas.className = "daybook-cursor-clock"; + this.canvas.setAttribute("aria-hidden", "true"); + this.ctx = this.canvas.getContext("2d")!; + this.fontFamily = getComputedStyle(document.documentElement).getPropertyValue("--font-mono"); + + document.body.appendChild(this.canvas); + + this.sum = this.dateInWords.length + this.F + this.hourHand.length + this.minuteHand.length + this.secondHand.length + 1; + for (let i = 0; i < 200; i++) { + this.dy[i] = 0; + this.dx[i] = 0; + this.zy[i] = 0; + this.zx[i] = 0; + this.pscale[i] = 0; + this.popacity[i] = 0; + this.pradiusOffset[i] = -15; + this.vx[i] = 0; + this.vy[i] = 0; + } + + this.onResizeBound = () => this.onResize(); + this.onResize(); + window.addEventListener("resize", this.onResizeBound, { passive: true }); + this.updateDateWords(); + } + + private onResize() { + this.width = window.innerWidth; + this.height = window.innerHeight; + const dpr = window.devicePixelRatio || 1; + this.canvas.width = this.width * dpr; + this.canvas.height = this.height * dpr; + this.canvas.style.width = `${this.width}px`; + this.canvas.style.height = `${this.height}px`; + this.ctx.scale(dpr, dpr); + } + + public updateColors() { + const computed = getComputedStyle(document.body); + this.colors.main = computed.getPropertyValue("--color-accent").trim() || "blue"; + this.colors.text = computed.getPropertyValue("--color-text").trim() || "black"; + this.colors.muted = computed.getPropertyValue("--color-muted").trim() || "gray"; + } + + private updateDateWords() { + const date = new Date(); + const day = date.getDate(); + const year = date.getFullYear(); + const newDateString = ` ${this.theDays[date.getDay()]} ${this.theMonths[date.getMonth()]} ${day} ${year} `; + + if (newDateString !== this.lastDateString) { + this.lastDateString = newDateString; + this.dateInWords = newDateString.split(""); + this.eqd = 360 / this.dateInWords.length; + this.sum = this.dateInWords.length + this.F + this.hourHand.length + this.minuteHand.length + this.secondHand.length + 1; + } + } + + public updateTarget(x: number, y: number) { + this.cursor.x = x; + this.cursor.y = y; + } + + public start(x: number, y: number) { + if (this.state === 'entering' || this.state === 'active') return; + document.dispatchEvent(new Event("daybook:code-font-needed")); + this.updateTarget(x, y); + + // Reset inertia array to (0, 0) for the original whip effect + if (this.state === 'hidden' || this.state === 'snapped') { + for (let i = 0; i < this.sum; i++) { + this.dx[i] = 0; + this.dy[i] = 0; + this.pdx[i] = 0; + this.pdy[i] = 0; + this.zx[i] = 0; + this.zy[i] = 0; + this.pscale[i] = 1; + this.popacity[i] = 0; + this.pradiusOffset[i] = 0; + } + } + + this.updateColors(); + this.updateDateWords(); + this.canvas.classList.add("is-visible"); + this.state = 'entering'; + + if (!this.rafId) { + this.loop(); + } + } + + public stop() { + if (this.state === 'hidden' || this.state === 'exiting' || this.state === 'snapped') return; + this.state = 'exiting'; + } + + public destroy() { + this.state = 'hidden'; + if (this.rafId !== null) { + cancelAnimationFrame(this.rafId); + this.rafId = null; + } + if (this.canvas && this.canvas.parentNode) { + this.canvas.parentNode.removeChild(this.canvas); + } + window.removeEventListener("resize", this.onResizeBound); + } + + public snap() { + if (this.state === 'hidden' || this.state === 'snapped') return; + this.state = 'snapped'; + + // Inherit real momentum from the previous frame for true inertia + for (let i = 0; i < this.sum; i++) { + this.vx[i] = this.dx[i] - this.pdx[i]; + this.vy[i] = this.dy[i] - this.pdy[i]; + } + } + + private loop() { + let allDone = true; + + if (this.state === 'entering') { + for (let i = 0; i < this.sum; i++) { + this.popacity[i] += (1 - this.popacity[i]) * 0.3; + } + + // Keep physics running until the last particle catches up + if (Math.abs(this.dy[this.sum - 1] - this.cursor.y) < 2) { + allDone = true; + } else { + allDone = false; + } + if (allDone) this.state = 'active'; + } else if (this.state === 'exiting') { + for (let i = 0; i < this.sum; i++) { + // Reverse sequential scale fade out + if (i === this.sum - 1 || this.pscale[i + 1] < 0.8) { + this.pscale[i] += (0 - this.pscale[i]) * 0.08; + this.popacity[i] += (0 - this.popacity[i]) * 0.08; + } + if (this.pscale[i] > 0.01) allDone = false; + } + if (allDone) { + this.state = 'hidden'; + this.canvas.classList.remove("is-visible"); + } + } else if (this.state === 'snapped') { + for (let i = 0; i < this.sum; i++) { + // True inertia sliding with air friction + this.dx[i] += this.vx[i]; + this.dy[i] += this.vy[i]; + this.vx[i] *= 0.96; + this.vy[i] *= 0.96; + + this.popacity[i] -= 0.01; // fade out in ~100 frames (1.6s) + if (this.popacity[i]! > 0) allDone = false; + else this.popacity[i] = 0; + } + if (allDone) { + this.state = 'hidden'; + this.canvas.classList.remove("is-visible"); + } + } else if (this.state === 'active') { + allDone = false; // keep running + } + + if (this.state === 'hidden') { + this.rafId = null; + this.ctx.clearRect(0, 0, this.width, this.height); + return; + } + + if (this.state !== 'snapped') { + this.updatePositions(); + } + + this.draw(); + this.rafId = requestAnimationFrame(() => this.loop()); + } + + private updatePositions() { + const del = 0.4; + + // Save previous frame state for momentum calculation + for (let i = 0; i < this.sum; i++) { + this.pdx[i] = this.dx[i]; + this.pdy[i] = this.dy[i]; + } + + this.zy[0] = this.dy[0] += (this.cursor.y - this.dy[0]) * del; + this.zx[0] = this.dx[0] += (this.cursor.x - this.dx[0]) * del; + + for (let i = 1; i < this.sum; i++) { + this.zy[i] = this.dy[i] += (this.zy[i - 1] - this.dy[i]) * del; + this.zx[i] = this.dx[i] += (this.zx[i - 1] - this.dx[i]) * del; + } + } + + private drawParticle(idx: number, x: number, y: number, text: string, color: string) { + if (this.popacity[idx]! <= 0) return; + this.ctx.save(); + this.ctx.translate(x, y); + this.ctx.scale(this.pscale[idx]!, this.pscale[idx]!); + this.ctx.globalAlpha = this.popacity[idx]!; + this.ctx.fillStyle = color; + + if (text === "•") { + this.ctx.beginPath(); + this.ctx.arc(0, 0, 4, 0, Math.PI * 2); + this.ctx.fill(); + } else { + this.ctx.fillText(text, 0, 0); + } + + this.ctx.restore(); + } + + private draw() { + this.ctx.clearRect(0, 0, this.width, this.height); + + const time = new Date(); + const secs = time.getSeconds(); + const sec = (Math.PI * (secs - 15)) / 30; + const mins = time.getMinutes(); + const min = (Math.PI * (mins - 15)) / 30; + const hrs = time.getHours(); + const hr = (Math.PI * (hrs - 3)) / 6 + (Math.PI * time.getMinutes()) / 360; + + this.ctx.font = `normal 14px ${this.fontFamily}`; + this.ctx.textAlign = "center"; + this.ctx.textBaseline = "middle"; + + // 1. Date + for (let i = 0; i < this.dateInWords.length; i++) { + const rad = this.siz * 1.5 + this.pradiusOffset[i]; + const y = this.dy[i] + rad * Math.sin(-sec + (i * this.eqd * Math.PI) / 180); + const x = this.dx[i] + rad * Math.cos(-sec + (i * this.eqd * Math.PI) / 180); + this.drawParticle(i, x, y, this.dateInWords[i]!, this.colors.muted); + } + + // 2. Face (Numbers) + for (let i = 0; i < this.clockNumbers.length; i++) { + const idx = this.dateInWords.length + i; + const rad = this.siz + this.pradiusOffset[idx]; + const y = this.dy[idx] + rad * Math.sin((i * this.eqf * Math.PI) / 180); + const x = this.dx[idx] + rad * Math.cos((i * this.eqf * Math.PI) / 180); + this.drawParticle(idx, x, y, this.clockNumbers[i]!, this.colors.text); + } + + // 3. Hours + for (let i = 0; i < this.hourHand.length; i++) { + const idx = this.dateInWords.length + this.F + i; + const rad = i * this.han + this.pradiusOffset[idx]; + const y = this.dy[idx] + rad * Math.sin(hr); + const x = this.dx[idx] + rad * Math.cos(hr); + this.drawParticle(idx, x, y, this.hourHand[i]!, this.colors.text); + } + + // 4. Minutes + for (let i = 0; i < this.minuteHand.length; i++) { + const idx = this.dateInWords.length + this.F + this.hourHand.length + i; + const rad = i * this.han + this.pradiusOffset[idx]; + const y = this.dy[idx] + rad * Math.sin(min); + const x = this.dx[idx] + rad * Math.cos(min); + this.drawParticle(idx, x, y, this.minuteHand[i]!, this.colors.text); + } + + // 5. Seconds + for (let i = 0; i < this.secondHand.length; i++) { + const idx = this.dateInWords.length + this.F + this.hourHand.length + this.minuteHand.length + i; + const rad = i * this.han + this.pradiusOffset[idx]; + const y = this.dy[idx] + rad * Math.sin(sec); + const x = this.dx[idx] + rad * Math.cos(sec); + this.drawParticle(idx, x, y, this.secondHand[i]!, this.colors.main); + } + } +} diff --git a/assets/ts/custom-cursor.ts b/assets/ts/custom-cursor.ts new file mode 100644 index 00000000..eacfd0ff --- /dev/null +++ b/assets/ts/custom-cursor.ts @@ -0,0 +1,323 @@ +import { IdleClockController } from "./custom-cursor-clock.js"; +import { LiquidCursor } from './liquid-cursor'; +import { reducedMotion } from './text-roll'; + +let isInitialized = false; +let cursorEl: HTMLDivElement | null = null; +let rafId: number | null = null; +let clockController: IdleClockController | null = null; +let liquid: LiquidCursor | null = null; +let isBusy = false; +let pointerInside = false; +const eligiblePointer = matchMedia('(min-width: 961px) and (hover: hover) and (pointer: fine)'); +const motionPreference = matchMedia('(prefers-reduced-motion: reduce)'); + +let mouseX = window.innerWidth / 2; +let mouseY = window.innerHeight / 2; +let cursorX = mouseX; +let cursorY = mouseY; +let isMoving = false; +let currentState = "default"; +let isClockActive = false; +let lastMoveTime = performance.now(); +let lastMoveX = mouseX; +let lastMoveY = mouseY; +const BREAK_SPEED = 3.0; + +const selectors = { + hover: 'a, button, [role="button"], summary, .note-card, .memo-card[data-memo-card], .nav-link, .theme-toggle, .mobile-drawer-button, .graph-toolbar button, .copy-button', + text: 'p, li, blockquote, .post-content, input, textarea, select, [contenteditable="true"], pre, code, .search-input', + zoom: '.post-content img:not(.no-lightbox):not([data-no-lightbox="true"]), .gallery-image, .zoom-img' +}; + +function updateCursorPosition() { + cursorX = mouseX; + cursorY = mouseY; + + if (cursorEl) { + cursorEl.style.transform = `translate3d(${cursorX}px, ${cursorY}px, 0)`; + } + + isMoving = false; + rafId = null; +} + +function breakIdleClock(snap = false) { + isClockActive = false; + if (!clockController) return; + if (snap) { + clockController.snap(); + } else { + clockController.stop(); + } +} + +function handlePointerMove(e: PointerEvent) { + if (e.pointerType === 'touch') return; + pointerInside = true; + mouseX = e.clientX; + mouseY = e.clientY; + updateStateFromTarget(e.target); + + const now = performance.now(); + const dt = Math.max(now - lastMoveTime, 16); + const dx = mouseX - lastMoveX; + const dy = mouseY - lastMoveY; + const distSq = dx * dx + dy * dy; + + if (isClockActive && clockController) { + let speed = 0; + if (dt > 0) speed = Math.sqrt(distSq) / dt; + + if (speed > BREAK_SPEED) { + breakIdleClock(true); + } else { + clockController.updateTarget(mouseX, mouseY); + } + } + + lastMoveTime = now; + lastMoveX = mouseX; + lastMoveY = mouseY; + + if (!isMoving) { + isMoving = true; + rafId = requestAnimationFrame(updateCursorPosition); + } +} + +function setState(state: string) { + if (currentState === state || !cursorEl) return; + currentState = state; + cursorEl.dataset.cursorState = state; + syncLoading(); + + if (state !== "default" && state !== "hidden") { + isClockActive = false; + if (clockController) clockController.stop(); + } +} + +function updateStateFromTarget(target: EventTarget | null) { + if (!pointerInside) { setState('hidden'); return; } + if (!(target instanceof Element)) { + setState("default"); + return; + } + if (target.closest('.settings-overlay')) { + setState("hidden"); + return; + } + const zoomMatch = target.closest(selectors.zoom); + if (zoomMatch) { + setState("zoom"); + return; + } + const hoverMatch = target.closest(selectors.hover); + if (hoverMatch) { + setState("hover"); + return; + } + const textMatch = target.closest(selectors.text); + if (textMatch) { + setState("text"); + return; + } + setState("default"); +} + +function handleMouseOver(e: MouseEvent) { + updateStateFromTarget(e.target); +} + +function handleMouseDown() { + if (cursorEl) cursorEl.classList.add("is-active"); +} + +function handleMouseUp() { + if (cursorEl) cursorEl.classList.remove("is-active"); +} + +function handleMouseLeave(e: MouseEvent) { + if (e.relatedTarget === null) { + pointerInside = false; + setState("hidden"); + } +} + +function handleMouseEnter(e: MouseEvent) { + pointerInside = true; + updateStateFromTarget(e.target); +} + +function handleClick(e: MouseEvent) { + if (document.documentElement.dataset.navigationPending === 'true') return; + if (document.documentElement.getAttribute('data-clock-cursor') !== 'true') { + return; + } + if (isClockActive) { + breakIdleClock(false); + } else { + if (currentState === "default") { + clockController ||= new IdleClockController(); + isClockActive = true; + clockController.start(cursorX, cursorY); + } + } +} + +function handleVisibilityChange() { + if (document.hidden) breakIdleClock(false); + else if (clockController) clockController.updateColors(); + syncLoading(); +} + +function handlePageLoad() { + breakIdleClock(false); + updateStateFromTarget(document.elementFromPoint(mouseX, mouseY)); +} + +function syncLoading() { + if (!cursorEl || !liquid) return; + const busy = document.documentElement.dataset.navigationLoading === 'true' && + currentState !== 'hidden' && !document.hidden; + if (busy === isBusy) return; + isBusy = busy; + if (busy) { + isClockActive = false; + clockController?.destroy(); + clockController = null; + liquid.start(); + } else { + liquid.stop(currentState === 'hidden' || document.hidden); + } +} + +function setupCustomCursor() { + if (typeof window === "undefined" || isInitialized) return; + + if (!eligiblePointer.matches || reducedMotion()) return; + if (document.documentElement.getAttribute('data-use-system-cursor') === 'true') return; + + if (!cursorEl) { + cursorEl = document.createElement("div"); + cursorEl.className = "daybook-cursor"; + cursorEl.setAttribute("aria-hidden", "true"); + cursorEl.dataset.cursorState = "default"; + + const coreEl = document.createElement("div"); + coreEl.className = "daybook-cursor__core"; + cursorEl.appendChild(coreEl); + + const viewfinderEl = document.createElement("div"); + viewfinderEl.className = "daybook-cursor__viewfinder"; + for (let i = 0; i < 4; i++) { + const corner = document.createElement("div"); + corner.className = "daybook-cursor__corner"; + viewfinderEl.appendChild(corner); + } + cursorEl.appendChild(viewfinderEl); + liquid = new LiquidCursor(); + cursorEl.append(liquid.element); + } + + if (!document.body.contains(cursorEl)) { + document.body.appendChild(cursorEl); + } + + document.documentElement.classList.add("has-custom-cursor"); + + if (!clockController) { + clockController = new IdleClockController(); + } + + cursorX = mouseX; + cursorY = mouseY; + isMoving = false; + currentState = pointerInside ? 'default' : 'hidden'; + cursorEl.dataset.cursorState = currentState; + isBusy = false; + isClockActive = false; + lastMoveTime = performance.now(); + lastMoveX = mouseX; + lastMoveY = mouseY; + + document.addEventListener("mouseover", handleMouseOver, { passive: true }); + document.addEventListener("mousedown", handleMouseDown, { passive: true }); + document.addEventListener("mouseup", handleMouseUp, { passive: true }); + document.addEventListener("mouseleave", handleMouseLeave); + document.addEventListener("mouseenter", handleMouseEnter); + document.addEventListener("click", handleClick, { passive: true }); + document.addEventListener("visibilitychange", handleVisibilityChange); + document.addEventListener("daybook:page-load", handlePageLoad); + document.addEventListener('daybook:navigation-loading', syncLoading); + + isInitialized = true; + updateStateFromTarget(document.elementFromPoint(mouseX, mouseY)); + updateCursorPosition(); + syncLoading(); +} + +function teardownCustomCursor() { + if (!isInitialized) return; + + document.removeEventListener("mouseover", handleMouseOver); + document.removeEventListener("mousedown", handleMouseDown); + document.removeEventListener("mouseup", handleMouseUp); + document.removeEventListener("mouseleave", handleMouseLeave); + document.removeEventListener("mouseenter", handleMouseEnter); + document.removeEventListener("click", handleClick); + document.removeEventListener("visibilitychange", handleVisibilityChange); + document.removeEventListener("daybook:page-load", handlePageLoad); + document.removeEventListener('daybook:navigation-loading', syncLoading); + liquid?.destroy(); + liquid = null; + isBusy = false; + + if (rafId !== null) { + cancelAnimationFrame(rafId); + rafId = null; + } + + if (clockController) { + clockController.destroy(); + clockController = null; + } + + if (cursorEl) { + if (cursorEl.parentNode) { + cursorEl.parentNode.removeChild(cursorEl); + } + cursorEl = null; + } + + document.documentElement.classList.remove("has-custom-cursor"); + isInitialized = false; +} + +function syncCursorAvailability() { + if (!eligiblePointer.matches || reducedMotion() || document.documentElement.dataset.useSystemCursor === 'true') { + teardownCustomCursor(); + } else { + setupCustomCursor(); + } +} + +syncCursorAvailability(); +// Remember the hotspot while the native cursor is in use as well. Re-enabling +// the custom cursor must not jump it to the middle of the screen. +document.addEventListener('pointermove', event => { + if (event.pointerType === 'touch') return; + if (isInitialized) handlePointerMove(event); + else { + mouseX = event.clientX; + mouseY = event.clientY; + pointerInside = true; + } +}, { passive: true }); +eligiblePointer.addEventListener('change', syncCursorAvailability); +motionPreference.addEventListener('change', syncCursorAvailability); +document.addEventListener('daybook:settings-change', syncCursorAvailability); +new MutationObserver(syncCursorAvailability).observe(document.documentElement, { + attributes: true, attributeFilter: ['data-use-system-cursor', 'data-reduced-motion'] +}); diff --git a/assets/ts/daybook-router.ts b/assets/ts/daybook-router.ts new file mode 100644 index 00000000..e115e44c --- /dev/null +++ b/assets/ts/daybook-router.ts @@ -0,0 +1,652 @@ +import { initMemoEngagement } from "./memo-engagement"; +import { initLikes } from "./article-actions"; +import { initSiteStats, initSiteUptime } from "./site-stats"; +import { initSitePresence } from "./site-presence"; +import { initPrivacyOverlay } from "./privacy-overlay"; +import { initHomeTooltips } from "./home-tooltips"; +import { NavigationLoading } from "./navigation-loading"; + +interface RouterState { + __daybook: boolean; + index: number; + url: string; + fromUrl: string | null; + scrollX: number; + scrollY: number; +} + +type DaybookNavigationType = "initial" | "push" | "traverse"; + +interface DaybookBeforeSwapDetail { + oldUrl: string; + newUrl: string; +} + +interface DaybookPageLoadDetail { + url: URL; + navigationType: DaybookNavigationType; + oldUrl: string; + newUrl: string; +} + +interface DaybookTransitionFinishedDetail { + oldUrl: string; + newUrl: string; +} + + + +(() => { + const ROUTER_STATE_KEY = "daybook-router"; + let currentIndex = 0; + let abortController: AbortController | null = null; + let navigationId = 0; + let activeTransition: ReturnType> | null = null; + const loading = new NavigationLoading(); + let currentRouterUrl = location.href; + const stylesheetLoads = new Map>(); + const pageScriptLoads = new Map>(); + let githubAvatarURL = ""; + + function syncGitHubAvatar(source: Document): void { + const home = source.querySelector("[data-github-login]"); + const profileImage = home?.querySelector("[data-site-avatar] img"); + if (profileImage) githubAvatarURL = profileImage.src; + if (!githubAvatarURL) return; + source.querySelectorAll(".side-avatar").forEach(img => { + const url = new URL(githubAvatarURL, location.origin); + url.searchParams.set("s", "96"); + img.src = url.href; + }); + } + + function isRouterState(state: any): state is RouterState { + return state && state.__daybook === true; + } + + function initRouter() { + initHomeTooltips(); + syncGitHubAvatar(document); + if (!isRouterState(history.state)) { + history.replaceState({ + __daybook: true, + index: currentIndex, + url: location.href, + fromUrl: null, + scrollX: window.scrollX, + scrollY: window.scrollY + } as RouterState, ""); + } else { + currentIndex = history.state.index; + } + + history.scrollRestoration = "manual"; + + document.addEventListener("click", handleGlobalClick); + window.addEventListener("popstate", handlePopState); + + const triggerInitialLoad = () => { + setTimeout(() => { + initPrivacyOverlay(); + emitPageLoad("initial", location.href, location.href); + const hitPromise = initSiteStats(); + initLikes(hitPromise); + initMemoEngagement(); + if (hitPromise) { + hitPromise.finally(() => initSitePresence()); + } else { + initSitePresence(); + } + initSiteUptime(); + }, 0); + }; + + if (document.readyState === "loading") { + window.addEventListener("DOMContentLoaded", triggerInitialLoad); + } else { + triggerInitialLoad(); + } + } + + function isNotesUrl(urlStr: string): boolean { + try { + const u = new URL(urlStr, location.origin); + return u.pathname === "/notes/" || u.pathname === "/notes"; + } catch { + return false; + } + } + + function handleGlobalClick(event: MouseEvent) { + if (event.defaultPrevented) return; + if (event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) { + return; + } + + const target = (event.target as HTMLElement).closest("a"); + if (!target) return; + + if (target.classList.contains("note-back-link")) { + event.preventDefault(); + const state = history.state; + if ( + state && + state.__daybook === true && + state.fromUrl && + state.index > 0 + ) { + try { + const fromUrl = new URL(state.fromUrl, location.origin); + const currentUrl = new URL(location.href); + + const extMatch = fromUrl.pathname.match(/\.([a-z0-9]+)$/i); + let isResource = false; + if (extMatch && extMatch[1]) { + const excluded = ["pdf", "zip", "mp3", "png", "jpg", "jpeg", "webp", "svg", "gif", "xml", "json"]; + isResource = excluded.includes(extMatch[1].toLowerCase()); + } + + if ( + fromUrl.origin === currentUrl.origin && + fromUrl.pathname !== currentUrl.pathname && + !isResource + ) { + history.back(); + return; + } + } catch (e) { + // silent fallback + } + } + navigate(target.href, false, null, target); + return; + } + + if (!shouldInterceptLink(target)) return; + + event.preventDefault(); + navigate(target.href, false, null, target); + } + + function shouldInterceptLink(link: HTMLAnchorElement): boolean { + if (!link.href) return false; + if (link.target && link.target !== "_self") return false; + if (link.hasAttribute("download")) return false; + if (link.rel && link.rel.includes("external")) return false; + if (link.hasAttribute("data-daybook-reload")) return false; + if (link.href.startsWith("mailto:")) return false; + if (link.href.startsWith("tel:")) return false; + if (link.href.startsWith("javascript:")) return false; + + const url = new URL(link.href, location.href); + if (url.origin !== location.origin) return false; + if (url.protocol !== "http:" && url.protocol !== "https:") return false; + + // Extension check for resources + const extMatch = url.pathname.match(/\.([a-z0-9]+)$/i); + if (extMatch && extMatch[1]) { + const ext = extMatch[1].toLowerCase(); + const excluded = ["pdf", "zip", "mp3", "png", "jpg", "jpeg", "webp", "svg", "gif", "xml", "json"]; + if (excluded.includes(ext)) return false; + } + + // Pure hash jump on same page + if (url.pathname === location.pathname && url.search === location.search && url.hash) { + return false; + } + + return true; + } + + function getElementByHash(hash: string): HTMLElement | null { + if (!hash || hash === "#") return null; + let id = hash.slice(1); + try { + id = decodeURIComponent(id); + } catch { + // ignore malformed + } + return document.getElementById(id); + } + + function saveCurrentScroll() { + // During a pending back/forward request, the URL/history already identify + // the destination but the visible DOM still belongs to the previous page. + if (isRouterState(history.state) && history.state.url === currentRouterUrl) { + history.replaceState({ + ...history.state, + scrollX: window.scrollX, + scrollY: window.scrollY + } as RouterState, ""); + } + } + + function closeOverlays() { + window.daybookCloseMobileOverlays?.(); + document.body.classList.remove("is-mobile-drawer-open"); + document.body.classList.remove("is-search-overlay-open"); + document.body.classList.remove("is-tags-overlay-open"); + document.body.classList.remove("is-media-overlay-open"); + document.body.classList.remove("is-mobile-scroll-locked"); + document.getElementById("daybook-media-manager")?.classList.remove("is-mobile-active"); + } + + async function navigate(urlStr: string, isTraverse = false, targetState: RouterState | null = null, sourceLink: HTMLElement | null = null) { + const targetUrl = new URL(urlStr, location.origin); + const displayedUrl = new URL(currentRouterUrl); + const id = ++navigationId; + abortController?.abort(); + activeTransition?.skipTransition(); + activeTransition = null; + window.DaybookTransitionEngine?.clearTransitionClasses(); + window.DaybookTransitionEngine?.clearArticleSharedTransitions(document); + // Transfer indicator ownership before cancelling or starting this request. + loading.start(id); + + // If pure hash jump on same page handled programmatically + if (!isTraverse && targetUrl.pathname === location.pathname && targetUrl.search === location.search && + targetUrl.pathname === displayedUrl.pathname && targetUrl.search === displayedUrl.search) { + loading.finish(id); + window.location.hash = targetUrl.hash; + return; + } + + const controller = new AbortController(); + abortController = controller; + const signal = controller.signal; + let timedOut = false; + const timeout = window.setTimeout(() => { timedOut = true; controller.abort(); }, 15000); + const ensureCurrent = () => { + if (id !== navigationId || signal.aborted) throw new DOMException('Navigation aborted', 'AbortError'); + }; + + const oldUrl = currentRouterUrl; + + try { + if (!isTraverse) { + saveCurrentScroll(); + } + + closeOverlays(); + + const response = await fetch(targetUrl.href, { signal }); + if (!response.ok) throw new Error("Fetch failed"); + + const contentType = response.headers.get("content-type") || ""; + if (!contentType.includes("text/html")) { + throw new Error("Not HTML"); + } + + const html = await response.text(); + ensureCurrent(); + const parser = new DOMParser(); + const newDocument = parser.parseFromString(html, "text/html"); + syncGitHubAvatar(newDocument); + + + const currentContainer = document.querySelector("[data-daybook-page]"); + const newContainer = newDocument.querySelector("[data-daybook-page]"); + + await withAbort(Promise.all([prepareStylesheets(newDocument), preparePageScripts(newDocument)]), signal); + ensureCurrent(); + + + if (!currentContainer || !newContainer) { + throw new Error("Missing data-daybook-page"); + } + clearTimeout(timeout); + loading.finish(id); + + // Prepare state + let newState: RouterState; + if (!isTraverse) { + newState = { + __daybook: true, + index: (isRouterState(history.state) ? history.state.index : currentIndex) + 1, + url: targetUrl.href, + fromUrl: oldUrl, + scrollX: 0, + scrollY: 0 + }; + } else { + newState = targetState!; + } + + const doSwap = () => { + ensureCurrent(); + currentIndex = newState.index; + emitBeforeSwap(oldUrl, targetUrl.href); + updateHead(newDocument); + syncShellFragments(newDocument); + swapPage(currentContainer, newContainer, newDocument.body); + + if (!isTraverse) { + history.pushState(newState, "", targetUrl.href); + } + + if (isTraverse) { + window.scrollTo({ left: newState.scrollX, top: newState.scrollY, behavior: "instant" }); + } else if (targetUrl.hash) { + const el = getElementByHash(targetUrl.hash); + if (el) el.scrollIntoView({ behavior: "instant" }); + else window.scrollTo({ left: 0, top: 0, behavior: "instant" }); + } else { + window.scrollTo({ left: 0, top: 0, behavior: "instant" }); + } + + // Force layout calculation to ensure synchronous scroll and layout are applied before view transition snapshots + void document.body.offsetHeight; + + currentRouterUrl = targetUrl.href; + emitPageLoad(isTraverse ? "traverse" : "push", oldUrl, targetUrl.href); + const hitPromise = initSiteStats(); + initLikes(hitPromise); + initMemoEngagement(); + if (hitPromise) { + hitPromise.finally(() => initSitePresence()); + } else { + initSitePresence(); + } + initSiteUptime(); + }; + + const engine = window.DaybookTransitionEngine; + const useMotion = engine && !engine.reducedMotion(); + const articleTransition = engine && engine.isArticleTransition(oldUrl, targetUrl.href); + if (engine) { + engine.clearTransitionClasses(); + engine.clearArticleSharedTransitions(document); + } + + let transitionInfo: any = null; + if (useMotion) { + document.documentElement.classList.add("is-transitioning"); + if (articleTransition) { + document.documentElement.classList.add("article-transition"); + transitionInfo = engine.prepareArticleTransitionSource(oldUrl, targetUrl.href, sourceLink); + } else if (!isTraverse) { // Push transition + engine.resolveStableRegions(document, newDocument); + document.body.classList.add(engine.exitClassName(document.body)); + + await withAbort(new Promise(r => setTimeout(r, engine.cssDuration("--transition-exit-delay", 260))), signal); + ensureCurrent(); + } + } + + if (useMotion && document.startViewTransition) { + const transition = document.startViewTransition(() => { + // skipTransition still invokes the update callback. A stale callback + // must never swap a page or add a history entry. + if (id !== navigationId || signal.aborted) return; + doSwap(); + if (articleTransition && transitionInfo) { + engine.prepareArticleTransitionTarget(transitionInfo); + } + if (!articleTransition && !isTraverse && engine) { + document.body.classList.add(engine.enterClassName(document.body)); + } + }); + activeTransition = transition; + + transition.finished.catch(() => {}).finally(() => { + if (id !== navigationId) return; + activeTransition = null; + if (engine) { + engine.clearTransitionClasses(); + engine.clearArticleSharedTransitions(document); + } + emitTransitionFinished(oldUrl, targetUrl.href); + }); + await transition.updateCallbackDone; + } else { + doSwap(); + if (engine) { + engine.clearTransitionClasses(); + engine.clearArticleSharedTransitions(document); + } + emitTransitionFinished(oldUrl, targetUrl.href); + } + + } catch (err: any) { + if (id !== navigationId || (err?.name === "AbortError" && !timedOut)) return; + loading.finish(id, true); + console.error("Router navigation failed:", err); + if (window.DaybookTransitionEngine) { + window.DaybookTransitionEngine.clearTransitionClasses(); + window.DaybookTransitionEngine.clearArticleSharedTransitions(document); + } + fallbackToNative(targetUrl); + } finally { + clearTimeout(timeout); + loading.finish(id); + if (abortController && abortController.signal === signal) { + abortController = null; + } + } + } + + // Shared stylesheet/script downloads may outlive an individual navigation. + // Stop waiting immediately on cancellation without cancelling those assets. + function withAbort(promise: Promise, signal: AbortSignal): Promise { + return new Promise((resolve, reject) => { + const abort = () => reject(new DOMException('Navigation aborted', 'AbortError')); + if (signal.aborted) { abort(); return; } + signal.addEventListener('abort', abort, { once: true }); + promise.then(resolve, reject).finally(() => signal.removeEventListener('abort', abort)); + }); + } + + function fallbackToNative(url: URL) { + window.location.href = url.href; + } + + function swapPage(currentContainer: Element, newContainer: Element, newBody: HTMLElement) { + for (const attr of Array.from(currentContainer.attributes)) { + if (attr.name !== "id" && attr.name !== "data-daybook-page") { + currentContainer.removeAttribute(attr.name); + } + } + for (const attr of Array.from(newContainer.attributes)) { + if (attr.name !== "id" && attr.name !== "data-daybook-page") { + currentContainer.setAttribute(attr.name, attr.value); + } + } + + currentContainer.innerHTML = newContainer.innerHTML; + + const currentBody = document.body; + + if (newBody.hasAttribute("data-page-kind")) { + currentBody.setAttribute("data-page-kind", newBody.getAttribute("data-page-kind")!); + } else { + currentBody.removeAttribute("data-page-kind"); + } + + const oldClasses = Array.from(currentBody.classList); + const newClasses = Array.from(newBody.classList); + + oldClasses.forEach(c => { + if (c.endsWith("-body") || c === "page-body") { + currentBody.classList.remove(c); + } + }); + + newClasses.forEach(c => { + if (c.endsWith("-body") || c === "page-body") { + currentBody.classList.add(c); + } + }); + } + + function syncShellFragments(newDocument: Document) { + const fragmentsToSync = ["#mobile-drawer", "#mobile-overlay-container", "#mobile-drawer-mask"]; + for (const selector of fragmentsToSync) { + const oldEl = document.querySelector(selector); + const newEl = newDocument.querySelector(selector); + if (oldEl && newEl) { + oldEl.replaceWith(newEl.cloneNode(true)); + } + } + } + + function prepareStylesheets(newDocument: Document): Promise { + const newLinks = Array.from(newDocument.head.querySelectorAll('link[rel="stylesheet"]')); + return Promise.all(newLinks.map(newLink => { + const href = newLink.getAttribute("href"); + if (!href) return Promise.resolve(); + const newUrl = new URL(href, location.href).href; + const pending = stylesheetLoads.get(newUrl); + if (pending) return pending; + const exists = Array.from(document.head.querySelectorAll('link[rel="stylesheet"]')) + .some(link => link.href && new URL(link.href, location.href).href === newUrl); + if (exists) return Promise.resolve(); + // Install and await the real stylesheet before the transition snapshot. + // A preload alone can finish before CSS is parsed and applied. + const promise = new Promise((resolve, reject) => { + const stylesheet = newLink.cloneNode(true) as HTMLLinkElement; + const timeout = window.setTimeout(() => { stylesheet.remove(); reject(new Error(`Stylesheet timed out: ${href}`)); }, 10000); + stylesheet.onload = () => { clearTimeout(timeout); resolve(); }; + stylesheet.onerror = () => { clearTimeout(timeout); stylesheet.remove(); reject(new Error(`Stylesheet failed: ${href}`)); }; + // Keep the same cascade regardless of the direction of SPA navigation. + const pages = document.head.querySelector('link[data-daybook-style="pages"]'); + if (stylesheet.dataset.daybookStyle === "home" && pages) pages.before(stylesheet); + else document.head.appendChild(stylesheet); + }); + stylesheetLoads.set(newUrl, promise); + promise.catch(() => stylesheetLoads.delete(newUrl)); + return promise; + })).then(() => {}); + } + + function preparePageScripts(newDocument: Document): Promise { + const scripts = Array.from(newDocument.head.querySelectorAll('script[data-daybook-page-script][src]')); + return Promise.all(scripts.map(newScript => { + const url = new URL(newScript.getAttribute("src")!, location.href).href; + const pending = pageScriptLoads.get(url); + if (pending) return pending; + if (Array.from(document.scripts).some(script => script.src === url)) return Promise.resolve(); + const promise = new Promise((resolve, reject) => { + const script = document.createElement("script"); + script.src = url; + script.dataset.daybookPageScript = ""; + const timeout = window.setTimeout(() => { script.remove(); reject(new Error(`Page script timed out: ${url}`)); }, 10000); + script.onload = () => { clearTimeout(timeout); resolve(); }; + script.onerror = () => { clearTimeout(timeout); script.remove(); reject(new Error(`Page script failed: ${url}`)); }; + document.head.appendChild(script); + }); + pageScriptLoads.set(url, promise); + promise.catch(() => pageScriptLoads.delete(url)); + return promise; + })).then(() => {}); + } + + function updateHead(newDocument: Document) { + if (newDocument.title) document.title = newDocument.title; + + const newLang = newDocument.documentElement.lang; + const oldLang = document.documentElement.lang; + if (newLang && newLang !== oldLang) { + document.documentElement.lang = newLang; + document.dispatchEvent(new CustomEvent("daybook:lang-change", { + detail: { + lang: newLang, + previousLang: oldLang + } + })); + } + + const headSelectors = [ + 'meta[name="description"]', + 'link[rel="canonical"]', + 'link[rel="alternate"][hreflang]', + 'link[rel="alternate"][type="application/rss+xml"]', + 'script[type="application/ld+json"]', + 'meta[property^="og:"]', + 'meta[name^="twitter:"]' + ]; + + headSelectors.forEach(selector => { + const oldEls = document.head.querySelectorAll(selector); + oldEls.forEach(el => el.remove()); + + const newEls = newDocument.head.querySelectorAll(selector); + newEls.forEach(el => { + document.head.appendChild(el.cloneNode(true)); + }); + }); + + const newStylesheets = Array.from(newDocument.head.querySelectorAll('link[rel="stylesheet"]')); + newStylesheets.forEach(newLink => { + const href = newLink.getAttribute("href"); + if (!href) return; + const newUrl = new URL(href, location.href).href; + const exists = Array.from(document.head.querySelectorAll('link[rel="stylesheet"]')) + .some(link => link.href && new URL(link.href, location.href).href === newUrl); + + if (!exists) { + document.head.appendChild(newLink.cloneNode(true)); + } + }); + } + + async function handlePopState(event: PopStateEvent) { + if (!isRouterState(event.state)) { + fallbackToNative(new URL(location.href)); + return; + } + await navigate(location.href, true, event.state); + } + + function emitBeforeSwap(oldUrl: string, newUrl: string) { + document.dispatchEvent(new CustomEvent("daybook:before-swap", { + detail: { oldUrl, newUrl } + })); + } + + function emitPageLoad(navigationType: DaybookNavigationType, oldUrl: string, newUrl: string) { + document.dispatchEvent(new CustomEvent("daybook:page-load", { + detail: { + url: new URL(location.href), + navigationType, + oldUrl, + newUrl + } + })); + } + + function emitTransitionFinished(oldUrl: string, newUrl: string) { + document.dispatchEvent(new CustomEvent("daybook:transition-finished", { + detail: { oldUrl, newUrl } + })); + } + + (window as any).daybookNavigate = (url: string) => navigate(url); + (window as any).daybookNavigateTo = (url: string) => navigate(url); + + (window as any).daybookReplaceURL = (urlStr: string) => { + const url = new URL(urlStr, location.origin); + const current = history.state; + if (isRouterState(current)) { + history.replaceState( + { + ...current, + url: url.href + }, + "", + url.href + ); + } else { + history.replaceState({ + __daybook: true, + index: currentIndex, + url: url.href, + fromUrl: null, + scrollX: window.scrollX, + scrollY: window.scrollY + } as RouterState, "", url.href); + } + currentRouterUrl = url.href; + }; + + initRouter(); +})(); diff --git a/assets/ts/embed-loading.ts b/assets/ts/embed-loading.ts new file mode 100644 index 00000000..a6aa7f94 --- /dev/null +++ b/assets/ts/embed-loading.ts @@ -0,0 +1,80 @@ +export interface EmbedFallbackOptions { + message?: string; + linkText?: string; + linkUrl?: string; +} + +export function createFallbackElement(options: EmbedFallbackOptions): HTMLElement { + const wrapper = document.createElement("div"); + wrapper.className = "embed-fallback"; + + const icon = document.createElement("div"); + icon.innerHTML = ``; + wrapper.appendChild(icon); + + if (options.message) { + const msg = document.createElement("span"); + msg.textContent = options.message; + wrapper.appendChild(msg); + } + + if (options.linkText && options.linkUrl) { + const link = document.createElement("a"); + link.href = options.linkUrl; + link.textContent = options.linkText; + link.target = "_blank"; + link.rel = "noopener noreferrer"; + wrapper.appendChild(link); + } + + return wrapper; +} + +export function setupIframeEmbeds() { + const iframes = document.querySelectorAll(".embed-frame iframe"); + iframes.forEach((iframeEl) => { + const iframe = iframeEl as HTMLIFrameElement; + const container = iframe.parentElement; + if (!container || !container.classList.contains("embed-frame")) return; + + if (container.dataset.embedStatus === "loading" || container.dataset.embedStatus === "ready" || container.dataset.embedStatus === "error") { + return; // Idempotent check + } + + // Set initial state + container.dataset.embedStatus = "loading"; + + let isFinished = false; + let timer: number | null = null; + + const finalize = (status: "ready" | "error") => { + if (isFinished) return; + isFinished = true; + if (timer) window.clearTimeout(timer); + container.dataset.embedStatus = status; + + if (status === "error") { + let platformName = "外链"; + let url = iframe.src; + if (url.includes("youtube") || url.includes("youtu.be")) platformName = "YouTube"; + else if (url.includes("bilibili")) platformName = "Bilibili"; + else if (url.includes("spotify")) platformName = "Spotify"; + else if (url.includes("codepen")) platformName = "CodePen"; + + iframe.style.display = "none"; + const fallback = createFallbackElement({ + message: `无法加载 ${platformName} 嵌入内容`, + linkText: `�往 ${platformName} 查看`, + linkUrl: url + }); + container.appendChild(fallback); + } + }; + + iframe.addEventListener("load", () => finalize("ready")); + iframe.addEventListener("error", () => finalize("error")); + + // 15s timeout + timer = window.setTimeout(() => finalize("error"), 15000); + }); +} diff --git a/assets/ts/embeds.ts b/assets/ts/embeds.ts new file mode 100644 index 00000000..35da66f1 --- /dev/null +++ b/assets/ts/embeds.ts @@ -0,0 +1,473 @@ +import { createFallbackElement, setupIframeEmbeds } from "./embed-loading.js"; +import { setupImages } from "./image-loader.js"; + +(function () { + var compactNumberFormat = new Intl.NumberFormat("en-US", { + notation: "compact", + maximumFractionDigits: 1, + }); + + interface RepoData { + owner: { avatar_url: string }; + description: string; + stargazers_count: number; + forks_count: number; + license: { spdx_id: string } | null; + } + + // Fetch repository data from GitHub API with caching + async function fetchRepoData(repo: string): Promise { + var cacheKey = "github-repo-" + repo; + + // Check session storage for cached data + try { + var cachedData = sessionStorage.getItem(cacheKey); + if (cachedData) { + return JSON.parse(cachedData); + } + } catch (e) { + try { + sessionStorage.removeItem(cacheKey); + } catch (err) {} + } + + // Fetch from API if not cached + try { + var response = await fetch("https://api.github.com/repos/" + repo); + if (!response.ok) { + console.warn( + "[GithubCard] Failed to fetch " + + repo + + ": " + + response.status + + " " + + response.statusText + ); + return null; + } + + var raw = await response.json(); + var data = { + owner: { avatar_url: raw.owner && raw.owner.avatar_url }, + description: raw.description, + stargazers_count: raw.stargazers_count, + forks_count: raw.forks_count, + license: raw.license ? { spdx_id: raw.license.spdx_id } : null, + }; + + // Cache the successful response + try { + sessionStorage.setItem(cacheKey, JSON.stringify(data)); + } catch (err) {} + + return data; + } catch (error) { + console.error("[GithubCard] Failed to fetch " + repo + ":", error); + return null; + } + } + + // Update card UI with repository data + function updateCardUI(card: HTMLElement, data: RepoData | null) { + var setText = function (selector: string, text: string | number) { + var el = card.querySelector(selector); + if (el) { + el.textContent = String(text); + } + }; + + if (!data) { + setText(".gc-repo-description", "Failed to load data"); + return; + } + + var avatar = card.querySelector(".gc-owner-avatar"); + if (avatar && data.owner && data.owner.avatar_url) { + (avatar as HTMLElement).style.backgroundImage = "url(" + data.owner.avatar_url + ")"; + (avatar as HTMLElement).style.backgroundSize = "cover"; + (avatar as HTMLElement).style.backgroundPosition = "center"; + } + + setText(".gc-repo-description", data.description || "No description"); + setText(".gc-stars-count", compactNumberFormat.format(data.stargazers_count || 0)); + setText(".gc-forks-count", compactNumberFormat.format(data.forks_count || 0)); + setText(".gc-license-info", (data.license && data.license.spdx_id) || "No License"); + } + + // Load data for a specific card element + async function loadRepoData(card: HTMLElement) { + var repo = card.getAttribute("data-repo"); + if (!repo) { + return; + } + + card.dataset.embedStatus = "loading"; + + // 10s timeout for GitHub API + let isFinished = false; + let timer = window.setTimeout(() => { + if (isFinished) return; + isFinished = true; + card.dataset.embedStatus = "error"; + card.innerHTML = ""; + card.appendChild(createFallbackElement({ + message: "加载 GitHub 仓库信�超时", + linkText: "�往 GitHub 查看", + linkUrl: "https://github.com/" + repo + })); + }, 10000); + + var data = await fetchRepoData(repo); + if (isFinished) return; + isFinished = true; + window.clearTimeout(timer); + + if (!data) { + card.dataset.embedStatus = "error"; + card.innerHTML = ""; + card.appendChild(createFallbackElement({ + message: "无法加载 GitHub 仓库信�", + linkText: "�往 GitHub 查看", + linkUrl: "https://github.com/" + repo + })); + return; + } + + card.dataset.embedStatus = "ready"; + updateCardUI(card, data); + } + + // Initialize all GitHub cards on the page + function setupGithubCards() { + var cards = document.querySelectorAll(".gc-container"); + cards.forEach(function (card) { + const htmlCard = card as HTMLElement; + if (htmlCard.dataset.embedStatus === "loading" || htmlCard.dataset.embedStatus === "ready" || htmlCard.dataset.embedStatus === "error") return; + loadRepoData(htmlCard); + }); + } + + // Setup Twitter Widgets + function setupTweets() { + var tweets = document.querySelectorAll(".twitter-tweet"); + if (tweets.length === 0) { + return; + } + + let needsScript = false; + + tweets.forEach(function (tweetEl) { + const tweet = tweetEl as HTMLElement; + if (tweet.dataset.embedStatus === "loading" || tweet.dataset.embedStatus === "ready" || tweet.dataset.embedStatus === "error") return; + + tweet.setAttribute("data-theme", "light"); + tweet.dataset.embedStatus = "loading"; + needsScript = true; + + // Wrap tweet in a skeleton structure if it's just the blockquote + const skeleton = document.createElement("div"); + skeleton.className = "tweet-skeleton"; + skeleton.innerHTML = ` +
+
+
+
+
+
+ `; + tweet.appendChild(skeleton); + + let isFinished = false; + + // 15s timeout + const timer = window.setTimeout(() => { + if (isFinished) return; + isFinished = true; + tweet.dataset.embedStatus = "error"; + tweet.innerHTML = ""; + const href = tweet.querySelector("a")?.href || "https://x.com/"; + tweet.parentElement?.appendChild(createFallbackElement({ + message: "无法加载推文", + linkText: "�往 X / Twitter 查看", + linkUrl: href + })); + tweet.style.display = "none"; + }, 15000); + + // We rely on window.twttr events to mark it as ready + // If twttr is not available, the timeout will handle it. + if (window.twttr && window.twttr.events) { + window.twttr.events.bind('rendered', function (event: any) { + if (event.target === tweet) { + isFinished = true; + window.clearTimeout(timer); + tweet.dataset.embedStatus = "ready"; + } + }); + } + }); + + if (!needsScript) return; + + if (window.twttr && window.twttr.widgets) { + window.twttr.widgets.load(); + } else if (!document.getElementById("twitter-wjs")) { + var script = document.createElement("script"); + script.id = "twitter-wjs"; + script.src = "https://platform.twitter.com/widgets.js"; + script.async = true; + document.head.appendChild(script); + } + } + + function setupMusicPlayers() { + var players = document.querySelectorAll(".music-custom-player"); + if (players.length === 0) return; + + function formatTime(seconds: number) { + if (isNaN(seconds)) return "0:00"; + var m = Math.floor(seconds / 60); + var s = Math.floor(seconds % 60); + return m + ":" + (s < 10 ? "0" : "") + s; + } + + players.forEach(function(containerEl) { + const container = containerEl as HTMLElement; + if (container.dataset.tsbound === "true") return; + container.dataset.tsbound = "true"; + + var playerWrapper = container.querySelector(".music-player") as HTMLElement; + var audio = container.querySelector("audio") as HTMLAudioElement; + var playBtn = container.querySelector(".music-playbtn") as HTMLButtonElement; + var iconSpan = container.querySelector(".music-icon") as HTMLElement; + var timeDiv = container.querySelector(".music-time") as HTMLElement; + var canvas = container.querySelector(".music-canvas") as HTMLCanvasElement; + + if (!playerWrapper || !audio || !playBtn || !iconSpan || !timeDiv || !canvas) return; + var ctx = canvas.getContext("2d") as CanvasRenderingContext2D; + if (!ctx) return; + + var isPlaying = false; + var reqId: number | null = null; + var drag = false; + var smoothedProgress = 0; + var wavePhase = 0; + var lastTime = 0; + var rewinding = false; + var rewindTime = 0; + var rewindStart = 0; + + function swapIcon(name: string) { + if (iconSpan.textContent === name) return; + iconSpan.style.transition = "transform 200ms cubic-bezier(0.3, 0, 1, 1), color 400ms cubic-bezier(0.2, 0, 0, 1)"; + iconSpan.style.transform = "scale(0)"; + setTimeout(function() { + iconSpan.textContent = name; + iconSpan.style.transition = "transform 200ms cubic-bezier(0, 0, 0, 1), color 400ms cubic-bezier(0.2, 0, 0, 1)"; + iconSpan.style.transform = "scale(1)"; + }, 200); + } + + playBtn.addEventListener("click", function() { + if (audio.paused) audio.play(); + else audio.pause(); + }); + + audio.addEventListener("play", function() { + isPlaying = true; + playerWrapper.classList.add("is-playing"); + swapIcon("pause"); + + document.dispatchEvent(new CustomEvent('daybook:embed-play', { + detail: { audio: audio } + })); + + lastTime = performance.now(); + if (!reqId) loop(lastTime); + }); + + audio.addEventListener("pause", function() { + isPlaying = false; + playerWrapper.classList.remove("is-playing"); + swapIcon("play_arrow"); + }); + + audio.addEventListener("ended", function() { + isPlaying = false; + playerWrapper.classList.remove("is-playing"); + swapIcon("play_arrow"); + rewinding = true; + rewindTime = 0; + rewindStart = smoothedProgress; + audio.currentTime = 0; + if (!reqId) { + lastTime = performance.now(); + loop(lastTime); + } + }); + + audio.addEventListener("timeupdate", function() { + if (!drag) timeDiv.textContent = formatTime(audio.currentTime) + " / " + formatTime(audio.duration); + }); + + audio.addEventListener("loadedmetadata", function() { + timeDiv.textContent = formatTime(audio.currentTime) + " / " + formatTime(audio.duration); + drawWave(audio.duration ? audio.currentTime / audio.duration : 0, wavePhase); + }); + + if (audio.readyState >= 1) { + timeDiv.textContent = formatTime(audio.currentTime) + " / " + formatTime(audio.duration); + smoothedProgress = audio.duration ? audio.currentTime / audio.duration : 0; + drawWave(smoothedProgress, wavePhase); + } + + canvas.addEventListener("pointerdown", function(e: PointerEvent) { + drag = true; + rewinding = false; + updateSeek(e); + }); + window.addEventListener("pointermove", function(e: PointerEvent) { + if (drag) updateSeek(e); + }); + window.addEventListener("pointerup", function(e: PointerEvent) { + if (drag) { + drag = false; + var rect = canvas.getBoundingClientRect(); + var p = Math.max(0, Math.min(e.clientX - rect.left, rect.width)) / rect.width; + if (audio.duration) audio.currentTime = p * audio.duration; + if (!reqId) { + lastTime = performance.now(); + loop(lastTime); + } + } + }); + + function updateSeek(e: PointerEvent) { + var rect = canvas.getBoundingClientRect(); + var p = Math.max(0, Math.min(e.clientX - rect.left, rect.width)) / rect.width; + if (audio.duration) timeDiv.textContent = formatTime(p * audio.duration) + " / " + formatTime(audio.duration); + smoothedProgress = p; + drawWave(p, wavePhase); + } + + function drawWave(progress: number, time: number) { + var rect = canvas.getBoundingClientRect(); + var w = rect.width * 2; + var h = rect.height * 2; + if (w === 0 || h === 0) return; + if (canvas.width !== w) canvas.width = w; + if (canvas.height !== h) canvas.height = h; + + ctx.clearRect(0, 0, w, h); + + var gap = 10; + var lineWidth = 10; + var waveAmp = 5; + var waveFreq = 0.08; + var phase = (time % 1200) / 1200 * Math.PI * 2; + var progressX = w * progress; + + ctx.beginPath(); + ctx.lineWidth = lineWidth; + ctx.lineCap = "round"; + ctx.lineJoin = "round"; + ctx.strokeStyle = "rgba(255, 255, 255, 1)"; + + var startX = lineWidth / 2; + var endX = Math.max(startX, progressX - (gap + lineWidth / 2)); + + if (endX > startX) { + for (var x = startX; x <= endX; x++) { + var y = h/2 + Math.sin((x - startX) * waveFreq + phase) * waveAmp; + if (x === startX) ctx.moveTo(x, y); + else ctx.lineTo(x, y); + } + ctx.stroke(); + } + + var trackStartX = Math.min(w - lineWidth / 2, progressX + gap); + ctx.beginPath(); + ctx.moveTo(trackStartX, h/2); + ctx.lineTo(w - lineWidth / 2, h/2); + ctx.strokeStyle = "rgba(255, 255, 255, 0.3)"; + ctx.stroke(); + + ctx.beginPath(); + ctx.arc(w - lineWidth / 2, h/2, 3, 0, Math.PI * 2); + ctx.fillStyle = "rgba(255, 255, 255, 1)"; + ctx.fill(); + } + + function loop(t: number) { + var dt = t - (lastTime || t); + lastTime = t; + if (isPlaying) { + wavePhase += dt; + } + + if (rewinding) { + rewindTime += dt; + var p = Math.min(1, rewindTime / 1000); + var ease = Math.pow(p, 3); // Ease-in: slow at start, fast at end + smoothedProgress = rewindStart * (1 - ease); + drawWave(smoothedProgress, wavePhase); + if (p >= 1) { + rewinding = false; + reqId = null; + } else { + reqId = requestAnimationFrame(loop); + } + return; + } + + var targetProgress = audio.duration ? audio.currentTime / audio.duration : 0; + if (!drag) { + smoothedProgress += (targetProgress - smoothedProgress) * 0.15; + } else { + smoothedProgress = targetProgress; + } + drawWave(smoothedProgress, wavePhase); + + if (isPlaying || Math.abs(smoothedProgress - targetProgress) > 0.001) { + reqId = requestAnimationFrame(loop); + } else { + reqId = null; + } + } + + document.addEventListener('daybook:global-play', () => { + if (!audio.paused) { + audio.pause(); + } + }); + + audio.addEventListener('error', () => { + console.error("Music audio error for url:", audio.src); + container.dataset.status = "error"; + }); + }); + } + + window.daybookSyncEmbeds = function () { + setupGithubCards(); + setupTweets(); + setupMusicPlayers(); + setupIframeEmbeds(); + setupImages(); + }; + + + + document.addEventListener("daybook:page-load", function () { + window.daybookSyncEmbeds(); + }); + + document.addEventListener("daybook:article-content-swapped", function () { + window.daybookSyncEmbeds(); + }); + + document.addEventListener("daybook:before-swap", function () { + // The MediaManager now handles audio takeover or stopping logic. + }); + +})(); diff --git a/assets/ts/gallery.ts b/assets/ts/gallery.ts new file mode 100644 index 00000000..e8f5b564 --- /dev/null +++ b/assets/ts/gallery.ts @@ -0,0 +1,305 @@ +(() => { + const clamp = (value: number, min: number, max: number) => Math.min(max, Math.max(min, value)); + const mix = (from: number, to: number, amount: number) => from + (to - from) * amount; + const controllers = new Map(); + const motionQuery = window.matchMedia("(prefers-reduced-motion: reduce)"); + + class GalleryCarousel { + private track = document.createElement("div"); + private stage = document.createElement("div"); + private resizeObserver: ResizeObserver; + private width = 0; + private gap = 12; + private large = 0; + private sizes: number[] = []; + private step = 1; + private maxScroll = 0; + private frame = 0; + private timer = 0; + private target: number | null = null; + private lastTime = 0; + private drag: { id: number; x: number; scroll: number; moved: boolean } | null = null; + private suppressClick = false; + private destroyed = false; + + constructor(private container: HTMLElement, private items: HTMLElement[]) { + this.track.className = "md-carousel-track"; + this.stage.className = "md-carousel-stage"; + this.items.forEach(item => { + item.classList.add("md-carousel-item"); + item.setAttribute("role", "group"); + item.querySelectorAll("img").forEach(image => { + image.draggable = false; + if (!image.closest("a[href]") && !image.matches('.no-lightbox, [data-no-lightbox="true"]')) { + image.tabIndex = 0; + image.setAttribute("role", "button"); + } + }); + this.stage.appendChild(item); + }); + this.track.appendChild(this.stage); + container.appendChild(this.track); + container.classList.add("is-carousel"); + container.tabIndex = 0; + container.setAttribute("role", "region"); + this.localize(); + container.addEventListener("scroll", this.onScroll, { passive: true }); + container.addEventListener("wheel", this.onWheel, { passive: false }); + container.addEventListener("keydown", this.onKeyDown); + container.addEventListener("focusin", this.onFocus); + container.addEventListener("pointerdown", this.onPointerDown); + container.addEventListener("pointermove", this.onPointerMove); + window.addEventListener("pointerup", this.onPointerEnd); + window.addEventListener("pointercancel", this.onPointerEnd); + container.addEventListener("lostpointercapture", this.onPointerEnd); + container.addEventListener("click", this.onClick, true); + this.resizeObserver = new ResizeObserver(this.measure); + this.resizeObserver.observe(container); + this.measure(); + } + + private reducedMotion = () => motionQuery.matches || document.documentElement.dataset.reducedMotion === "true"; + + syncMotion = () => { + if (this.reducedMotion() && this.target !== null) this.moveTo(this.target, false); + }; + + localize = () => { + const english = document.documentElement.lang.startsWith("en"); + this.container.setAttribute("aria-label", english ? "Image gallery" : "图片画廊"); + this.container.setAttribute("aria-roledescription", english ? "Carousel" : "轮播"); + this.items.forEach((item, index) => { + item.setAttribute("aria-roledescription", english ? "Slide" : "图片"); + item.setAttribute("aria-label", `${index + 1} / ${this.items.length}`); + }); + }; + + private measure = () => { + if (this.destroyed) return; + const width = this.container.clientWidth; + if (!width || width === this.width) return; + const progress = this.container.scrollLeft / this.step; + this.stop(); + this.width = width; + const count = Math.min(3, this.items.length); + this.gap = width < 480 ? 8 : 12; + const available = width - this.gap * (count - 1); + this.sizes = count === 1 ? [available] : count === 2 + ? [available * 0.62, available * 0.38] + : [available * 0.54, available * 0.34, available * 0.12]; + this.large = this.sizes[0]!; + this.step = this.large + this.gap; + this.maxScroll = (this.items.length - 1) * this.step; + this.track.style.width = `${width + this.maxScroll}px`; + this.stage.style.width = `${width}px`; + this.container.style.setProperty("--gallery-image-width", `${this.large}px`); + this.container.scrollLeft = clamp(progress * this.step, 0, this.maxScroll); + this.render(); + }; + + private render() { + const progress = clamp(this.container.scrollLeft / this.step, 0, this.items.length - 1); + const lastWindow = this.items.length - this.sizes.length; + const start = Math.min(progress, lastWindow); + // At the end, move the focal keyline through the remaining images. Every + // image can expand fully without leaving an empty trailing viewport. + const focal = Math.max(0, progress - lastWindow); + const order = (index: number) => index === 0 ? this.sizes : this.sizes.map((_, slot) => { + if (slot === index) return this.large; + return this.sizes[slot < index ? index - slot : slot]!; + }); + const from = order(Math.floor(focal)); + const to = order(Math.min(this.sizes.length - 1, Math.ceil(focal))); + const sizes = from.map((size, index) => mix(size, to[index]!, focal % 1)); + const centers: number[] = []; + let edge = 0; + sizes.forEach(size => { centers.push(edge + size / 2); edge += size + this.gap; }); + const small = this.sizes[this.sizes.length - 1]!; + const keyline = (index: number) => { + if (index < 0) return { center: -this.gap - small / 2 + (index + 1) * (small + this.gap), size: small }; + if (index >= sizes.length) return { center: this.width + this.gap + small / 2 + (index - sizes.length) * (small + this.gap), size: small }; + return { center: centers[index]!, size: sizes[index]! }; + }; + this.items.forEach((item, index) => { + const position = index - start; + const left = keyline(Math.floor(position)); + const right = keyline(Math.ceil(position)); + const fraction = position - Math.floor(position); + const size = mix(left.size, right.size, fraction); + const center = mix(left.center, right.center, fraction); + item.style.width = `${size}px`; + item.style.transform = `translate3d(${center - size / 2}px, 0, 0)`; + item.style.setProperty("--gallery-caption-opacity", `${clamp((size - 90) / 24, 0, 1)}`); + }); + } + + private stop() { + cancelAnimationFrame(this.frame); + window.clearTimeout(this.timer); + this.frame = 0; + this.timer = 0; + this.target = null; + } + + private animate = (time: number) => { + this.frame = 0; + if (this.target === null || this.destroyed) return; + const distance = this.target - this.container.scrollLeft; + const elapsed = Math.min(32, time - this.lastTime); + this.lastTime = time; + this.container.scrollLeft += distance * (1 - Math.exp(-elapsed / 65)); + this.render(); + if (Math.abs(distance) > 2.5) this.frame = requestAnimationFrame(this.animate); + else { + this.container.scrollLeft = this.target; + this.target = null; + this.render(); + this.scheduleSnap(); + } + }; + + private moveTo(position: number, smooth = true) { + this.target = clamp(position, 0, this.maxScroll); + if (!smooth || this.reducedMotion()) { + const target = this.target; + this.stop(); + this.container.scrollLeft = target; + this.render(); + } else if (!this.frame) { + this.lastTime = performance.now(); + this.frame = requestAnimationFrame(this.animate); + } + } + + private scheduleSnap() { + window.clearTimeout(this.timer); + this.timer = window.setTimeout(() => { + if (this.drag || this.target !== null) return; + const destination = Math.round(this.container.scrollLeft / this.step) * this.step; + if (Math.abs(destination - this.container.scrollLeft) > 1) this.moveTo(destination); + }, 160); + } + + private onScroll = () => { this.render(); if (this.target === null) this.scheduleSnap(); }; + + private onWheel = (event: WheelEvent) => { + if (event.ctrlKey || !this.maxScroll) return; + // Trackpads retain native horizontal momentum. Convert a vertical wheel + // only while this gallery has room to move; release page scrolling at ends. + if (Math.abs(event.deltaX) > Math.abs(event.deltaY)) { this.stop(); return; } + const unit = event.deltaMode === 1 ? 20 : event.deltaMode === 2 ? this.width : 1; + const delta = event.deltaY * unit; + const position = this.target ?? this.container.scrollLeft; + // scrollLeft is rounded by some browsers; fractional layout widths must + // not trap the page wheel at either end of the native scroll range. + if ((delta > 0 && position >= this.maxScroll - 1) || (delta < 0 && position <= 1)) return; + const destination = clamp(position + delta, 0, this.maxScroll); + if (destination === position) return; + event.preventDefault(); + this.moveTo(destination); + }; + + private onKeyDown = (event: KeyboardEvent) => { + const element = event.target as HTMLElement; + if (element !== this.container && element.tagName !== "IMG") return; + let index = Math.round((this.target ?? this.container.scrollLeft) / this.step); + if (event.key === "ArrowRight") index++; + else if (event.key === "ArrowLeft") index--; + else if (event.key === "Home") index = 0; + else if (event.key === "End") index = this.items.length - 1; + else if (event.key === "Enter" || event.key === " ") { + const image = element.tagName === "IMG" ? element : this.items[index]?.querySelector("img"); + if (image) { event.preventDefault(); image.click(); } + return; + } else return; + event.preventDefault(); + this.moveTo(index * this.step); + }; + + private onFocus = (event: FocusEvent) => { + const element = event.target as HTMLElement; + if (!element.matches(":focus-visible")) return; + const index = this.items.findIndex(item => item.contains(element)); + if (index >= 0) this.moveTo(index * this.step, false); + }; + + private onPointerDown = (event: PointerEvent) => { + this.suppressClick = false; + this.stop(); + if (event.pointerType !== "mouse" || event.button !== 0 || !this.maxScroll) return; + this.drag = { id: event.pointerId, x: event.clientX, scroll: this.container.scrollLeft, moved: false }; + }; + + private onPointerMove = (event: PointerEvent) => { + if (!this.drag || event.pointerId !== this.drag.id) return; + const distance = this.drag.x - event.clientX; + if (!this.drag.moved && Math.abs(distance) < 5) return; + this.drag.moved = true; + this.container.classList.add("is-dragging"); + this.container.setPointerCapture(event.pointerId); + this.container.scrollLeft = clamp(this.drag.scroll + distance, 0, this.maxScroll); + this.render(); + event.preventDefault(); + }; + + private onPointerEnd = (event: PointerEvent) => { + if (!this.drag || event.pointerId !== this.drag.id) return; + this.suppressClick = this.drag.moved; + this.drag = null; + this.container.classList.remove("is-dragging"); + if (this.container.hasPointerCapture(event.pointerId)) this.container.releasePointerCapture(event.pointerId); + this.scheduleSnap(); + }; + + private onClick = (event: MouseEvent) => { + this.stop(); + if (!this.suppressClick) return; + this.suppressClick = false; + event.preventDefault(); + event.stopImmediatePropagation(); + }; + + destroy() { + this.destroyed = true; + this.stop(); + this.resizeObserver.disconnect(); + this.container.removeEventListener("scroll", this.onScroll); + this.container.removeEventListener("wheel", this.onWheel); + this.container.removeEventListener("keydown", this.onKeyDown); + this.container.removeEventListener("focusin", this.onFocus); + this.container.removeEventListener("pointerdown", this.onPointerDown); + this.container.removeEventListener("pointermove", this.onPointerMove); + window.removeEventListener("pointerup", this.onPointerEnd); + window.removeEventListener("pointercancel", this.onPointerEnd); + this.container.removeEventListener("lostpointercapture", this.onPointerEnd); + this.container.removeEventListener("click", this.onClick, true); + } + } + + function sync() { + controllers.forEach((controller, container) => { + if (!container.isConnected) { controller.destroy(); controllers.delete(container); } + }); + document.querySelectorAll(".md-gallery").forEach(container => { + if (container.closest("[data-memo-card]")) return; + if (controllers.has(container)) return; + const items = Array.from(container.children).filter((item): item is HTMLElement => + item instanceof HTMLElement && item.matches("figure, p") && item.querySelectorAll("img").length === 1); + // Keep mixed-content galleries readable using the native overflow fallback. + if (!items.length || items.length !== container.children.length) return; + controllers.set(container, new GalleryCarousel(container, items)); + }); + } + + document.addEventListener("daybook:page-load", sync); + document.addEventListener("daybook:article-content-swapped", sync); + document.addEventListener("daybook:lang-change", () => controllers.forEach(controller => controller.localize())); + document.addEventListener("daybook:settings-change", () => controllers.forEach(controller => controller.syncMotion())); + motionQuery.addEventListener("change", () => controllers.forEach(controller => controller.syncMotion())); + document.addEventListener("daybook:before-swap", () => { + controllers.forEach(controller => controller.destroy()); + controllers.clear(); + }); + if (document.readyState === "loading") document.addEventListener("DOMContentLoaded", sync, { once: true }); + else sync(); +})(); diff --git a/assets/ts/generated/liquid-loop-frames.ts b/assets/ts/generated/liquid-loop-frames.ts new file mode 100644 index 00000000..21f32d46 --- /dev/null +++ b/assets/ts/generated/liquid-loop-frames.ts @@ -0,0 +1,2 @@ +// Generated by scripts/build-cursor-motion.mjs from assets/motion/liquid-loop.mjs. +export const liquidLoopFrames: readonly string[] = ["M37.44,0A37.44,37.26 0 1 0 -37.44,0A37.44,37.26 0 1 0 37.44,0Z","M37.45,0A37.45,37.26 0 1 0 -37.45,0A37.45,37.26 0 1 0 37.45,0Z","M37.46,0A37.46,37.26 0 1 0 -37.46,0A37.46,37.26 0 1 0 37.46,0Z","M37.48,0A37.48,37.27 0 1 0 -37.48,0A37.48,37.27 0 1 0 37.48,0Z","M37.49,0A37.49,37.27 0 1 0 -37.49,0A37.49,37.27 0 1 0 37.49,0Z","M37.50,0A37.50,37.27 0 1 0 -37.50,0A37.50,37.27 0 1 0 37.50,0Z","M37.51,0A37.51,37.27 0 1 0 -37.51,0A37.51,37.27 0 1 0 37.51,0Z","M37.52,0A37.52,37.27 0 1 0 -37.52,0A37.52,37.27 0 1 0 37.52,0Z","M37.52,0A37.52,37.27 0 1 0 -37.52,0A37.52,37.27 0 1 0 37.52,0Z","M37.52,0A37.52,37.27 0 1 0 -37.52,0A37.52,37.27 0 1 0 37.52,0Z","M37.50,0A37.50,37.27 0 1 0 -37.50,0A37.50,37.27 0 1 0 37.50,0Z","M37.49,0A37.49,37.26 0 1 0 -37.49,0A37.49,37.26 0 1 0 37.49,0Z","M37.47,0A37.47,37.26 0 1 0 -37.47,0A37.47,37.26 0 1 0 37.47,0Z","M37.44,0A37.44,37.25 0 1 0 -37.44,0A37.44,37.25 0 1 0 37.44,0Z","M37.43,0A37.43,37.25 0 1 0 -37.43,0A37.43,37.25 0 1 0 37.43,0Z","M37.41,0A37.41,37.25 0 1 0 -37.41,0A37.41,37.25 0 1 0 37.41,0Z","M37.41,0A37.41,37.24 0 1 0 -37.41,0A37.41,37.24 0 1 0 37.41,0Z","M37.41,0A37.41,37.24 0 1 0 -37.41,0A37.41,37.24 0 1 0 37.41,0Z","M37.40,0A37.40,37.25 0 1 0 -37.40,0A37.40,37.25 0 1 0 37.40,0Z","M37.40,0A37.40,37.25 0 1 0 -37.40,0A37.40,37.25 0 1 0 37.40,0Z","M37.40,0A37.40,37.26 0 1 0 -37.40,0A37.40,37.26 0 1 0 37.40,0Z","M37.39,0A37.39,37.28 0 1 0 -37.39,0A37.39,37.28 0 1 0 37.39,0Z","M37.38,0A37.38,37.33 0 1 0 -37.38,0A37.38,37.33 0 1 0 37.38,0Z","M37.36,0A37.36,37.37 0 1 0 -37.36,0A37.36,37.37 0 1 0 37.36,0Z","M37.35,0A37.35,37.39 0 1 0 -37.35,0A37.35,37.39 0 1 0 37.35,0Z","M37.64,1.31A37.66,37.24 2.00 1 0 -37.64,-1.31A37.66,37.24 2.00 1 0 37.64,1.31Z","M-7,-36.6L-13.65,-34.68L-20.3,-31.27L-26,-26.73L-30.75,-21.11L-34.33,-14.6L-36.46,-7.95L-37.31,-0.35L-36.6,7.25L-34.62,13.9L-31.12,20.55L-26.47,26.25L-21.25,30.62L-14.6,34.29L-7.95,36.4L-1.3,37.24L6.3,36.73L12.95,34.95L19.6,31.71L27.2,26.3L33.85,20.05L38.04,14.85L41.09,9.15L42.46,3.45L42.21,-2.25L40.01,-8.9L35.75,-15.97L29.1,-23.85L21.5,-30.45L14.85,-34.18L8.2,-36.35L0.6,-37.26L-6.05,-36.77Z","M-3.2,-35.51L-13.65,-33.27L-22.19,-28.85L-30.2,-21.25L-35.05,-12.7L-37.34,-2.25L-36.45,7.64L-32.85,16.75L-26.09,25.3L-19.35,30.32L-11.75,33.71L-3.2,35.46L4.4,35.4L13.9,33.18L29.1,25.92L44.3,22.26L48.1,20.45L51.9,17.43L56.15,11.05L57.71,3.45L56.28,-4.15L51.9,-10.86L46.2,-14.94L31.78,-21.25L21.5,-28.96L15.8,-32.15L7.25,-34.88L-2.25,-35.57Z","M-5.1,-32.73L-15.55,-30.29L-24.1,-25.7L-31.48,-18.4L-35.87,-9.85L-37.27,-0.35L-35.5,9.15L-30.85,17.7L-24.3,24.35L-18.42,28.15L-10.8,31.23L-3.2,32.71L5.35,32.7L14.85,30.55L30.05,23.91L44.3,22.89L50,21.68L54.75,19.26L58.36,15.8L61.58,9.15L61.91,2.5L59.54,-4.15L55.31,-8.9L49.05,-12.28L33.85,-17.08L21.5,-26.35L14.89,-29.8L6.3,-32.28L-4.15,-32.81Z","M-9.85,-30.76L-19.35,-27.65L-27.57,-22.2L-33.14,-15.55L-36.57,-7L-36.99,1.55L-34.55,10.22L-28.85,18.71L-21.25,25L-15.17,28.15L-7.95,30.45L-1.3,31.43L6.3,31.29L16.75,28.78L28.15,22.98L32.9,21.41L37.65,21.37L49.05,23.55L56.65,22.94L62.35,20.01L66.09,15.8L68.27,10.1L68.08,3.45L65.2,-2.63L60.45,-6.85L53.8,-9.29L42.4,-10.28L37.65,-11.58L33.85,-14.03L22.61,-24.1L12.95,-29.01L2.5,-31.33L-8.9,-30.93Z","M-9.8,-30.82L-19.3,-27.67L-27.43,-22.15L-33.38,-14.55L-36.32,-6L-36.2,3.5L-33.14,12.05L-27.5,19.65L-19.3,25.96L-13.6,28.68L-6.95,30.66L-0.3,31.52L6.35,31.34L13,30.06L19.65,27.5L36.75,16.41L40.55,14.75L44.35,15.08L54.8,21.28L61.45,23.02L65.25,22.81L69.05,21.55L74.2,16.8L75.83,12.05L75.46,7.3L72.89,2.55L69.05,-0.55L65.25,-2.02L60.5,-2.53L48.15,-0.09L44.35,-0.28L40.53,-3.15L27.84,-19.3L19.65,-25.76L13.3,-28.8L6.35,-30.78L-1.25,-31.57L-8.85,-30.99Z","M36.29,7.10A36.98,31.42 11.07 1 0 -36.29,-7.10A36.98,31.42 11.07 1 0 36.29,7.10ZM80.83,13.18A13.45,13.45 0 1 0 53.93,13.18A13.45,13.45 0 1 0 80.83,13.18Z","M35.96,8.11A36.87,31.66 12.71 1 0 -35.96,-8.11A36.87,31.66 12.71 1 0 35.96,8.11ZM84.41,16.05A13.26,13.26 0 1 0 57.89,16.05A13.26,13.26 0 1 0 84.41,16.05Z","M35.70,9.30A36.89,32.26 14.61 1 0 -35.70,-9.30A36.89,32.26 14.61 1 0 35.70,9.30ZM89.22,19.80A13.24,13.24 0 1 0 62.74,19.80A13.24,13.24 0 1 0 89.22,19.80Z","M35.42,10.56A36.96,33.05 16.60 1 0 -35.42,-10.56A36.96,33.05 16.60 1 0 35.42,10.56ZM91.72,23.41A13.22,13.22 0 1 0 65.28,23.41A13.22,13.22 0 1 0 91.72,23.41Z","M35.51,11.93A37.46,33.73 18.56 1 0 -35.51,-11.93A37.46,33.73 18.56 1 0 35.51,11.93ZM85.37,24.52A12.36,12.36 0 1 0 60.66,24.52A12.36,12.36 0 1 0 85.37,24.52Z","M35.50,13.31A37.92,34.48 20.55 1 0 -35.50,-13.31A37.92,34.48 20.55 1 0 35.50,13.31ZM73.06,23.07A11.51,11.51 0 1 0 50.03,23.07A11.51,11.51 0 1 0 73.06,23.07Z","M-6.05,-35.53L-15.55,-33.08L-23.18,-28.85L-30.06,-22.2L-34.92,-13.65L-37.09,-4.15L-36.55,5.35L-33.24,14.85L-28.07,22.45L-23.1,27.2L-16.5,31.46L-8.9,34.42L-2.25,35.64L7.25,35.37L22.45,32.01L40.5,33.25L45.39,31.95L50,29.05L53.76,24.35L55.8,17.7L55.14,11.05L51.9,5.01L38.6,-6.56L29.08,-21.25L21.5,-28.41L16.03,-31.7L9.15,-34.35L1.55,-35.7L-5.1,-35.64Z","M34.40,14.60A37.37,36.27 23.00 1 0 -34.40,-14.60A37.37,36.27 23.00 1 0 34.40,14.60Z","M29.79,22.58A37.38,36.89 37.16 1 0 -29.79,-22.58A37.38,36.89 37.16 1 0 29.79,22.58Z","M23.55,29.05A37.39,37.20 50.97 1 0 -23.55,-29.05A37.39,37.20 50.97 1 0 23.55,29.05Z","M31.17,20.50A37.31,36.42 33.32 1 0 -31.17,-20.50A37.31,36.42 33.32 1 0 31.17,20.50Z","M31.51,21.65A38.23,35.01 34.50 1 0 -31.51,-21.65A38.23,35.01 34.50 1 0 31.51,21.65Z","M-40.15,-44.46L-46.8,-41.1L-52.1,-34.95L-54.4,-28.18L-54.1,-20.7L-50.54,-13.1L-37.93,0.2L-31.51,14.45L-25.9,22.12L-20.2,27.21L-13.55,31.23L-6.9,33.74L-0.25,35.01L7.35,35L14,33.64L20.65,30.75L26.1,26.8L30.37,22.05L33.64,16.35L35.71,9.7L36.31,3.05L35.59,-3.6L33.55,-10.25L30.62,-15.95L26.35,-21.63L18.66,-28.3L9.25,-33.01L2.6,-34.7L-12.6,-36.52L-29.7,-44.64L-34.45,-45.25L-39.2,-44.71Z","M-43.35,-52.4L-51.15,-50.5L-57.6,-45.13L-60.82,-38.15L-61.24,-33.4L-60.67,-29.6L-58.68,-24.85L-55.7,-20.96L-43.01,-11.55L-39.34,-7.75L-36.89,-3L-31.87,11.25L-26.28,19.8L-20.55,25.39L-14.85,29.26L-8.2,32.3L-1.55,34.02L5.1,34.53L12.7,33.57L19.26,31.2L25.11,27.4L29.64,22.65L32.99,16.95L34.85,11.25L35.58,4.6L34.95,-2.05L32.99,-8.7L30.16,-14.4L26,-20.13L20.03,-25.8L12.39,-30.55L3.2,-33.71L-11.54,-35.3L-16.75,-36.69L-20.55,-38.94L-32.9,-49.45L-37.65,-51.59L-42.81,-52.4Z","M-54.1,-60.6L-60.75,-57.67L-65.81,-51.85L-67.77,-45.2L-66.69,-37.6L-63.6,-32.47L-58.22,-28.1L-52.2,-25.47L-40.8,-22.63L-37.9,-20.5L-36.19,-15.75L-34.57,-0.55L-32.94,6.1L-29.4,13.64L-24.38,20.35L-18.95,25.37L-12.3,29.63L-5.65,32.38L1,33.83L7.65,34.06L14.3,32.95L20.95,30.2L25.7,26.79L29.75,22.25L32.44,17.5L34.27,11.8L34.92,5.15L34.21,-1.5L32.17,-8.15L29.27,-13.85L24.75,-19.94L15.25,-27.95L4.8,-32.63L-3.75,-34.08L-20.85,-33.52L-25.6,-34.44L-28.45,-37.33L-33.29,-49L-38.15,-55.65L-41.78,-58.5L-45.55,-60.19L-53.15,-60.77Z","M26.90,25.24A36.89,31.34 43.17 1 0 -26.90,-25.24A36.89,31.34 43.17 1 0 26.90,25.24ZM-38.03,-52.93A18.39,18.39 0 1 0 -74.81,-52.93A18.39,18.39 0 1 0 -38.03,-52.93Z","M25.79,26.31A36.85,31.40 45.57 1 0 -25.79,-26.31A36.85,31.40 45.57 1 0 25.79,26.31ZM-41.16,-62.15A19.76,19.76 0 1 0 -80.68,-62.15A19.76,19.76 0 1 0 -41.16,-62.15Z","M24.65,27.36A36.83,31.50 47.99 1 0 -24.65,-27.36A36.83,31.50 47.99 1 0 24.65,27.36ZM-42.28,-70.69A21.40,21.40 0 1 0 -85.08,-70.69A21.40,21.40 0 1 0 -42.28,-70.69Z","M23.47,28.35A36.80,31.53 50.38 1 0 -23.47,-28.35A36.80,31.53 50.38 1 0 23.47,28.35ZM-40.29,-77.99A24.28,24.28 0 1 0 -88.84,-77.99A24.28,24.28 0 1 0 -40.29,-77.99Z","M22.28,29.28A36.79,31.58 52.73 1 0 -22.28,-29.28A36.79,31.58 52.73 1 0 22.28,29.28ZM-37.60,-84.06A26.36,26.36 0 1 0 -90.32,-84.06A26.36,26.36 0 1 0 -37.60,-84.06Z","M21.14,30.23A36.89,32.21 55.03 1 0 -21.14,-30.23A36.89,32.21 55.03 1 0 21.14,30.23ZM-35.68,-89.04A26.59,26.59 0 1 0 -88.86,-89.04A26.59,26.59 0 1 0 -35.68,-89.04Z","M20.02,31.16A37.03,33.25 57.27 1 0 -20.02,-31.16A37.03,33.25 57.27 1 0 20.02,31.16ZM-32.86,-92.64A26.67,26.67 0 1 0 -86.21,-92.64A26.67,26.67 0 1 0 -32.86,-92.64Z","M18.86,31.96A37.11,34.25 59.46 1 0 -18.86,-31.96A37.11,34.25 59.46 1 0 18.86,31.96ZM-31.16,-94.64A24.67,24.67 0 1 0 -80.51,-94.64A24.67,24.67 0 1 0 -31.16,-94.64Z","M17.71,32.70A37.19,35.26 61.56 1 0 -17.71,-32.70A37.19,35.26 61.56 1 0 17.71,32.70ZM-30.34,-96.13A21.72,21.72 0 1 0 -73.78,-96.13A21.72,21.72 0 1 0 -30.34,-96.13Z","M16.60,33.40A37.30,36.38 63.57 1 0 -16.60,-33.40A37.30,36.38 63.57 1 0 16.60,33.40ZM-28.09,-96.77A20.00,20.00 0 1 0 -68.10,-96.77A20.00,20.00 0 1 0 -28.09,-96.77Z","M15.54,34.00A37.38,37.03 65.43 1 0 -15.54,-34.00A37.38,37.03 65.43 1 0 15.54,34.00ZM-25.48,-96.46A18.62,18.62 0 1 0 -62.71,-96.46A18.62,18.62 0 1 0 -25.48,-96.46Z","M14.52,34.46A37.40,36.97 67.16 1 0 -14.52,-34.46A37.40,36.97 67.16 1 0 14.52,34.46ZM-22.64,-95.26A17.49,17.49 0 1 0 -57.61,-95.26A17.49,17.49 0 1 0 -22.64,-95.26Z","M13.65,34.82A37.40,36.78 68.60 1 0 -13.65,-34.82A37.40,36.78 68.60 1 0 13.65,34.82ZM-19.91,-92.97A16.53,16.53 0 1 0 -52.97,-92.97A16.53,16.53 0 1 0 -19.91,-92.97Z","M13.04,34.99A37.34,35.97 69.56 1 0 -13.04,-34.99A37.34,35.97 69.56 1 0 13.04,34.99ZM-17.57,-89.33A15.72,15.72 0 1 0 -49.02,-89.33A15.72,15.72 0 1 0 -17.57,-89.33Z","M12.77,35.02A37.28,35.16 69.97 1 0 -12.77,-35.02A37.28,35.16 69.97 1 0 12.77,35.02ZM-15.68,-84.25A15.04,15.04 0 1 0 -45.75,-84.25A15.04,15.04 0 1 0 -15.68,-84.25Z","M12.51,34.95A37.12,34.34 70.30 1 0 -12.51,-34.95A37.12,34.34 70.30 1 0 12.51,34.95ZM-13.31,-77.18A14.33,14.33 0 1 0 -41.97,-77.18A14.33,14.33 0 1 0 -13.31,-77.18Z","M12.08,35.27A37.28,33.41 71.10 1 0 -12.08,-35.27A37.28,33.41 71.10 1 0 12.08,35.27ZM-9.40,-67.72A13.79,13.79 0 1 0 -36.97,-67.72A13.79,13.79 0 1 0 -9.40,-67.72Z","M-20.3,-66.45L-24.1,-64.9L-27.9,-61.65L-30.15,-57.85L-31.1,-54.05L-30.66,-47.4L-26.29,-36L-25.65,-32.2L-26.42,-27.45L-31.25,-15.1L-32.78,-8.45L-32.95,1.05L-31.23,9.6L-28.04,17.2L-24.34,22.9L-19.35,28.27L-13.65,32.45L-7.95,35.16L-1.3,36.8L5.35,36.94L11.05,35.82L16.81,33.35L22.45,29.19L27,23.85L30.11,18.15L32.23,11.5L33.1,4.85L32.75,-2.75L31.29,-9.4L27.62,-17.95L22.11,-25.55L16.86,-30.3L6.53,-36.95L2.41,-40.75L0.47,-44.55L-2.43,-55.95L-6.05,-61.97L-11.75,-65.93L-15.55,-66.81L-19.35,-66.65Z","M-10.75,-51.47L-16.45,-50.13L-22.15,-46.88L-26.08,-42.85L-29.14,-37.15L-30.4,-31.45L-30.82,-16.25L-32.29,-4.85L-31.46,5.6L-29.52,12.25L-26.29,18.9L-22.16,24.6L-16.45,29.95L-10.75,33.47L-5.05,35.61L1.6,36.61L8.25,36.04L13.95,34.19L19.65,30.75L24.1,26.5L27.98,20.8L30.42,15.1L32,8.08L32.32,1.8L31.42,-5.8L29.44,-12.45L26.17,-19.1L7.3,-44.6L-0.3,-49.9L-5.05,-51.27L-9.8,-51.54Z","M-5.05,-36.47L-10.75,-35.3L-16.67,-32.6L-21.6,-28.8L-25.95,-23.6L-29.22,-17.4L-31.2,-10.75L-31.97,-4.1L-31.51,3.5L-29.75,10.78L-26.7,17.75L-22.91,23.45L-18.35,28.27L-12.65,32.4L-6,35.31L-0.3,36.46L6.35,36.31L12.06,34.85L17.75,31.91L22.21,28.2L26.3,23.07L29.08,17.75L31.13,11.1L31.98,3.5L31.56,-3.15L30.07,-9.8L27.25,-16.71L23.45,-22.75L18.82,-27.85L13.95,-31.61L8.25,-34.53L1.6,-36.3L-4.1,-36.54Z","M8.55,35.88A36.89,31.49 76.60 1 0 -8.55,-35.88A36.89,31.49 76.60 1 0 8.55,35.88Z","M7.51,36.11A36.88,31.52 78.26 1 0 -7.51,-36.11A36.88,31.52 78.26 1 0 7.51,36.11Z","M6.34,36.33A36.88,31.56 80.10 1 0 -6.34,-36.33A36.88,31.56 80.10 1 0 6.34,36.33Z","M4.92,36.54A36.87,31.53 82.34 1 0 -4.92,-36.54A36.87,31.53 82.34 1 0 4.92,36.54Z","M3.59,36.67A36.85,31.50 84.40 1 0 -3.59,-36.67A36.85,31.50 84.40 1 0 3.59,36.67Z","M-4.1,-36.44L-9.8,-35.1L-15.5,-32.37L-20.17,-28.8L-25.07,-23.1L-28.25,-17.4L-30.53,-10.75L-31.67,-3.15L-31.52,3.5L-30.03,11.1L-27.22,18.7L-23.1,26.45L-18.86,32L-13.6,36.67L-8.31,39.6L-2.2,41.3L3.5,41.45L9.2,40.23L14.9,37.43L20.17,32.95L24.43,27.25L27.67,20.6L30.08,13L31.58,4.45L31.55,-3.15L30.39,-9.8L28.04,-16.45L24.2,-23.1L20.1,-27.85L14.9,-31.98L9.2,-34.84L3,-36.4L-3.15,-36.54Z","M-7,-36.46L-12.7,-34.44L-18.4,-30.94L-23.15,-26.47L-26.95,-21.25L-30.12,-14.6L-31.94,-7.95L-32.62,-1.3L-32.26,5.35L-29.44,15.8L-23.17,27.2L-18.49,39.55L-15.39,45.25L-11.77,49.05L-7,51.92L-2.25,53.29L3.45,53.4L8.2,52.23L12.95,49.65L16.62,46.2L19.1,42.4L24.35,26.75L30.98,12L32.44,4.4L32.4,-4.15L30.89,-11.75L28.25,-18.4L24.35,-24.59L19.38,-29.8L13.9,-33.59L7.25,-36.26L0.6,-37.25L-6.05,-36.67Z","M-1.3,-37.43L-7.76,-36.45L-13.65,-34.27L-19.35,-30.73L-24.36,-26L-28.45,-20.3L-31.53,-13.65L-33.42,-6.05L-33.86,0.6L-33.23,7.25L-31.7,13.19L-28.87,19.6L-22.2,30.82L-18.89,45.25L-16.52,50.95L-13.48,54.75L-8.9,58.04L-4.15,59.74L0.6,60.15L5.35,59.37L10.1,57.22L13.9,54.08L16.83,50L18.65,45.3L22,31L28.85,19.6L31.77,12.95L33.38,6.3L33.86,-0.35L33.1,-7.95L31,-15.09L27.9,-21.25L23.53,-26.95L18.65,-31.27L12.95,-34.62L6.3,-36.81L-0.35,-37.45Z","M-1.3,-37.45L-7,-36.7L-13.65,-34.47L-19.94,-30.75L-25.18,-26L-28.84,-21.25L-32.29,-14.6L-34.48,-7L-35.13,-0.35L-33.34,12L-30.57,18.65L-22.99,31.95L-20.01,47.15L-18,52.85L-15.5,56.65L-11.75,59.96L-7,62.19L-2.25,62.94L2.77,62.35L7.34,60.45L11.05,57.55L13.88,53.8L16.31,48.1L20.26,33.85L29.28,20.55L32.56,13.9L34.43,7.25L35.13,0.6L34.55,-7L32.79,-13.65L29.63,-20.3L25.44,-26L20.24,-30.75L13.9,-34.51L7.25,-36.72L-0.35,-37.48Z","M-3.2,-37.42L-9.85,-36.13L-16.5,-33.41L-22.2,-29.65L-26.99,-25.05L-31.08,-19.35L-33.81,-13.65L-35.69,-7L-36.36,-0.35L-35.72,7.25L-33.86,13.9L-23.89,32.9L-22.29,49.05L-20.3,55.29L-17.35,59.5L-13.65,62.57L-8.9,64.72L-3.2,65.47L1.55,64.74L5.35,63.18L9.13,60.45L12.26,56.65L14.74,50.95L18.73,35.75L29.1,22.39L33.33,14.85L35.65,7.25L36.37,-0.35L35.58,-7.95L33.19,-15.55L29.46,-22.2L24.51,-27.9L18.65,-32.37L12,-35.55L5.35,-37.21L-2.25,-37.5Z","M-4.15,-37.46L-10.8,-36.06L-16.5,-33.78L-22.79,-29.8L-27.83,-25.05L-31.7,-19.82L-34.76,-13.65L-36.66,-7L-37.32,-0.35L-36.81,6.3L-35.08,12.95L-26.96,28.15L-25.19,32.9L-24.37,49.05L-22.36,56.65L-19.35,61.06L-15.52,64.25L-10.8,66.35L-6.05,67.07L-1.3,66.55L3.45,64.68L7.25,61.84L9.95,58.55L12.57,52.85L15.45,41.45L17.55,36.7L29.21,23.4L33.85,15.8L36.41,8.2L37.32,0.6L36.5,-7.95L34.04,-15.55L30.22,-22.2L25.3,-27.78L18.74,-32.65L12,-35.73L4.4,-37.45L-3.2,-37.56Z","M-4.15,-37.46L-10.8,-36.03L-16.7,-33.6L-22.2,-30.12L-26.95,-25.81L-31.19,-20.3L-34.16,-14.6L-36.26,-7.95L-37.1,-1.3L-36.78,5.35L-35.26,12L-26.27,31.95L-25.88,37.65L-26.9,50L-25.57,57.6L-22.93,62.35L-19.05,66.15L-14.6,68.58L-8.9,69.79L-4.15,69.45L0.6,67.83L4.54,65.2L7.9,61.4L10.59,55.7L14.8,39.55L17.98,34.8L27.41,25.3L31.62,19.6L35.45,11.05L37.04,2.5L36.68,-6.05L34.68,-13.65L31,-20.91L26.1,-26.95L20.27,-31.7L12.95,-35.41L5.35,-37.35L-3.2,-37.56Z","M-3.2,-37.43L-9.85,-36.06L-15.55,-33.75L-21.25,-30.15L-25.83,-26L-32.65,-15.84L-34.84,-9.85L-36.07,-3.2L-36.15,3.45L-35.07,10.1L-27.97,27.2L-26.58,32.9L-26.81,37.65L-29.8,51.75L-29.01,60.45L-26.75,65.2L-23.15,69.27L-18.4,72.24L-12.7,73.75L-7,73.49L-2.25,71.89L2.05,69L5.34,65.2L8.26,58.55L10.56,45.25L12.21,40.5L15.63,35.75L25.59,26.25L30.07,20.55L34.18,12L36.14,2.5L35.87,-6.05L33.98,-13.65L30.23,-21.25L25.7,-26.95L19.6,-31.97L12.95,-35.35L5.35,-37.3L-2.25,-37.52Z","M-1.3,-37.43L-7.95,-36.28L-13.65,-34.14L-19.33,-30.75L-23.77,-26.95L-27.9,-22.06L-31.21,-16.5L-33.48,-10.8L-34.94,-4.15L-35.23,3.45L-34.27,10.1L-27.12,28.15L-26.07,33.85L-27,38.6L-33.26,53.8L-33.92,58.55L-33.47,63.3L-31.27,69L-27.47,73.75L-22.2,77.24L-16.5,78.86L-10.8,78.76L-6.05,77.38L-1.3,74.48L2.5,70.33L5.78,62.35L6.9,46.2L8.4,41.45L11.3,37.65L22.45,28.21L28.15,21.71L32.37,13.9L34.91,4.4L35.18,-4.15L33.85,-11.72L30.78,-19.35L26.25,-25.92L20.55,-31.15L13.9,-34.92L7.25,-36.93L-0.35,-37.48Z","M-5.2,-36.54L-15.65,-32.38L-24.4,-25.05L-30.61,-15.55L-32.77,-9.85L-34.15,-3.2L-34.37,4.4L-33.35,11.05L-26.02,29.1L-24.91,34.8L-26.43,39.55L-34.22,50L-37.32,55.7L-38.88,61.4L-38.86,67.1L-36.78,73.75L-32.6,79.45L-27.24,83.25L-20.4,85.32L-14.7,85.28L-9,83.63L-3.88,80.4L0.26,75.65L2.53,70.9L3.64,65.2L2.39,48.1L3.19,43.35L6.2,39.37L20.45,28.93L26.15,22.91L31.33,13.9L34.12,3.45L34.32,-5.1L32.62,-13.65L29.2,-21.25L24.25,-27.69L17.6,-32.91L10.95,-35.86L3.35,-37.23L-4.25,-36.73Z","M-2.65,-36.47L-13.1,-32.96L-22.31,-26L-29.11,-16.5L-33.01,-5.1L-33.68,3.45L-32.49,12L-30.09,18.65L-22.76,32.9L-21.77,37.65L-24.12,41.45L-34.95,49.5L-40.82,55.7L-44.45,63.06L-45.3,70.9L-43.5,78.51L-39.7,84.59L-34,89.35L-26.4,92.2L-19.75,92.45L-13.1,90.71L-7.4,87.21L-2.98,82.3L0.07,75.65L0.92,69L-0.31,60.45L-4.53,47.15L-4.16,43.35L0.21,39.55L16.37,31L22.07,26.25L28.98,16.75L32.96,5.35L33.69,-3.2L32.56,-11.75L29.65,-19.53L25.34,-26L20.15,-30.87L13.5,-34.62L5.9,-36.61L-1.7,-36.6Z","M-12.78,35.07A37.32,32.29 110.02 1 0 12.78,-35.07A37.32,32.29 110.02 1 0 -12.78,35.07ZM-0.75,73.72A26.11,26.11 0 1 0 -52.97,73.72A26.11,26.11 0 1 0 -0.75,73.72Z","M-14.09,34.36A37.14,31.80 112.30 1 0 14.09,-34.36A37.14,31.80 112.30 1 0 -14.09,34.36ZM-5.00,77.68A26.86,26.86 0 1 0 -58.72,77.68A26.86,26.86 0 1 0 -5.00,77.68Z","M-15.38,33.59A36.94,31.59 114.59 1 0 15.38,-33.59A36.94,31.59 114.59 1 0 -15.38,33.59ZM-9.80,80.69A27.13,27.13 0 1 0 -64.07,80.69A27.13,27.13 0 1 0 -9.80,80.69Z","M-16.72,32.93A36.93,31.59 116.92 1 0 16.72,-32.93A36.93,31.59 116.92 1 0 -16.72,32.93ZM-16.46,82.28A25.32,25.32 0 1 0 -67.09,82.28A25.32,25.32 0 1 0 -16.46,82.28Z","M-18.04,32.22A36.92,31.59 119.24 1 0 18.04,-32.22A36.92,31.59 119.24 1 0 -18.04,32.22ZM-23.89,82.94A22.55,22.55 0 1 0 -68.98,82.94A22.55,22.55 0 1 0 -23.89,82.94Z","M-19.33,31.50A36.96,31.60 121.54 1 0 19.33,-31.50A36.96,31.60 121.54 1 0 -19.33,31.50ZM-30.12,82.89A20.76,20.76 0 1 0 -71.63,82.89A20.76,20.76 0 1 0 -30.12,82.89Z","M-20.61,30.74A37.01,31.63 123.84 1 0 20.61,-30.74A37.01,31.63 123.84 1 0 -20.61,30.74ZM-35.78,82.12A19.28,19.28 0 1 0 -74.33,82.12A19.28,19.28 0 1 0 -35.78,82.12Z","M-21.84,29.87A37.01,31.71 126.17 1 0 21.84,-29.87A37.01,31.71 126.17 1 0 -21.84,29.87ZM-40.92,80.73A18.10,18.10 0 1 0 -77.11,80.73A18.10,18.10 0 1 0 -40.92,80.73Z","M-23.04,28.96A37.01,31.88 128.50 1 0 23.04,-28.96A37.01,31.88 128.50 1 0 -23.04,28.96ZM-45.51,78.75A17.13,17.13 0 1 0 -79.77,78.75A17.13,17.13 0 1 0 -45.51,78.75Z","M-24.21,28.05A37.05,32.29 130.81 1 0 24.21,-28.05A37.05,32.29 130.81 1 0 -24.21,28.05ZM-49.53,76.29A16.33,16.33 0 1 0 -82.20,76.29A16.33,16.33 0 1 0 -49.53,76.29Z","M-25.36,27.11A37.12,32.85 133.10 1 0 25.36,-27.11A37.12,32.85 133.10 1 0 -25.36,27.11ZM-53.26,73.64A15.64,15.64 0 1 0 -84.55,73.64A15.64,15.64 0 1 0 -53.26,73.64Z","M-26.45,26.13A37.18,33.38 135.35 1 0 26.45,-26.13A37.18,33.38 135.35 1 0 -26.45,26.13ZM-56.51,70.61A14.97,14.97 0 1 0 -86.45,70.61A14.97,14.97 0 1 0 -56.51,70.61Z","M-27.51,25.11A37.24,33.93 137.61 1 0 27.51,-25.11A37.24,33.93 137.61 1 0 -27.51,25.11ZM-59.21,67.19A14.40,14.40 0 1 0 -88.02,67.19A14.40,14.40 0 1 0 -59.21,67.19Z","M-28.54,24.01A37.30,34.47 139.93 1 0 28.54,-24.01A37.30,34.47 139.93 1 0 -28.54,24.01ZM-61.39,63.41A13.98,13.98 0 1 0 -89.36,63.41A13.98,13.98 0 1 0 -61.39,63.41Z","M-29.53,22.87A37.35,35.00 142.25 1 0 29.53,-22.87A37.35,35.00 142.25 1 0 -29.53,22.87ZM-62.96,59.32A13.64,13.64 0 1 0 -90.24,59.32A13.64,13.64 0 1 0 -62.96,59.32Z","M-30.44,21.69A37.38,35.56 144.52 1 0 30.44,-21.69A37.38,35.56 144.52 1 0 -30.44,21.69ZM-63.99,55.06A13.26,13.26 0 1 0 -90.51,55.06A13.26,13.26 0 1 0 -63.99,55.06Z","M-31.29,20.50A37.41,36.10 146.78 1 0 31.29,-20.50A37.41,36.10 146.78 1 0 -31.29,20.50ZM-64.19,50.58A13.05,13.05 0 1 0 -90.29,50.58A13.05,13.05 0 1 0 -64.19,50.58Z","M-32.14,19.28A37.48,36.61 149.04 1 0 32.14,-19.28A37.48,36.61 149.04 1 0 -32.14,19.28ZM-63.38,45.88A13.09,13.09 0 1 0 -89.55,45.88A13.09,13.09 0 1 0 -63.38,45.88Z","M-32.93,18.05A37.55,37.03 151.28 1 0 32.93,-18.05A37.55,37.03 151.28 1 0 -32.93,18.05ZM-61.62,40.99A13.18,13.18 0 1 0 -87.98,40.99A13.18,13.18 0 1 0 -61.62,40.99Z","M-33.61,16.79A37.57,37.31 153.46 1 0 33.61,-16.79A37.57,37.31 153.46 1 0 -33.61,16.79ZM-58.43,35.88A13.41,13.41 0 1 0 -85.26,35.88A13.41,13.41 0 1 0 -58.43,35.88Z","M-34.21,15.55A37.58,37.36 155.56 1 0 34.21,-15.55A37.58,37.36 155.56 1 0 -34.21,15.55ZM-54.03,30.57A13.24,13.24 0 1 0 -80.51,30.57A13.24,13.24 0 1 0 -54.03,30.57Z","M-35.17,14.36A37.98,37.25 157.79 1 0 35.17,-14.36A37.98,37.25 157.79 1 0 -35.17,14.36ZM-46.37,24.47A13.55,13.55 0 1 0 -73.48,24.47A13.55,13.55 0 1 0 -46.37,24.47Z","M-7.4,-36.6L-15.95,-33.76L-24.5,-28.24L-31.15,-20.84L-37.8,-8.58L-41.2,-4.15L-45.4,-1.31L-56.14,3.45L-61.66,8.2L-64.4,13.78L-64.78,20.55L-62.77,26.25L-58.7,30.94L-53.95,33.52L-48.25,34.4L-42.55,33.55L-32.1,30.3L-27.35,30.14L-9.3,36.3L-3.6,37.24L3.05,37.24L10.75,35.75L18.25,32.58L24.6,28.15L29.65,22.88L35.28,12.95L37.61,2.5L36.7,-8.9L32.42,-19.35L24.9,-28.26L15.4,-34.24L4.95,-37.1L-6.45,-36.78Z","M-7.6,-36.55L-14.25,-34.51L-19.74,-31.7L-24.87,-27.9L-29.39,-23.15L-47.17,1.55L-49.54,8.2L-49.51,13.9L-48.32,17.7L-45.6,21.85L-41.8,25.09L-37.71,27.2L-7.6,36.62L0,37.36L6.86,36.7L14.25,34.51L20.84,31L26.6,26.27L31.29,20.55L34.81,13.9L36.82,7.25L37.57,-0.35L36.93,-7L35.03,-13.65L31.62,-20.3L27.08,-26L21.46,-30.75L15.2,-34.23L7.6,-36.62L0,-37.36L-6.65,-36.74Z","M-37.23,4.59A37.51,37.29 172.97 1 0 37.23,-4.59A37.51,37.29 172.97 1 0 -37.23,4.59Z","M-37.30,3.89A37.50,37.29 174.05 1 0 37.30,-3.89A37.50,37.29 174.05 1 0 -37.30,3.89Z","M-37.33,3.44A37.49,37.30 174.74 1 0 37.33,-3.44A37.49,37.30 174.74 1 0 -37.33,3.44Z","M-37.35,3.20A37.49,37.30 175.10 1 0 37.35,-3.20A37.49,37.30 175.10 1 0 -37.35,3.20Z","M-37.35,3.13A37.48,37.30 175.20 1 0 37.35,-3.13A37.48,37.30 175.20 1 0 -37.35,3.13Z","M-37.29,3.65A37.47,37.29 174.41 1 0 37.29,-3.65A37.47,37.29 174.41 1 0 -37.29,3.65Z","M-37.15,4.79A37.46,37.28 172.65 1 0 37.15,-4.79A37.46,37.28 172.65 1 0 -37.15,4.79Z","M-36.98,5.92A37.45,37.27 170.90 1 0 36.98,-5.92A37.45,37.27 170.90 1 0 -36.98,5.92Z","M-36.88,6.43A37.44,37.26 170.11 1 0 36.88,-6.43A37.44,37.26 170.11 1 0 -36.88,6.43Z","M-37.00,5.74A37.44,37.26 171.19 1 0 37.00,-5.74A37.44,37.26 171.19 1 0 -37.00,5.74Z","M-37.22,4.03A37.44,37.26 173.82 1 0 37.22,-4.03A37.44,37.26 173.82 1 0 -37.22,4.03Z","M-37.39,1.92A37.44,37.26 177.06 1 0 37.39,-1.92A37.44,37.26 177.06 1 0 -37.39,1.92Z"]; diff --git a/assets/ts/giscus-loader.ts b/assets/ts/giscus-loader.ts new file mode 100644 index 00000000..aaeffb0d --- /dev/null +++ b/assets/ts/giscus-loader.ts @@ -0,0 +1,248 @@ +// A lifecycle-managed adapter for giscus's official widget protocol. Keeping the +// iframe here avoids client.js installing a new permanent listener on every SPA +// visit. Protocol: https://github.com/giscus/giscus/blob/main/ADVANCED-USAGE.md +const GISCUS_ORIGIN = 'https://giscus.app'; +const SESSION_KEY = 'giscus-session'; + +type Appearance = { theme: string; lang: 'en' | 'zh-CN' }; +type GiscusMessage = { resizeHeight?: unknown; signOut?: unknown; error?: unknown; discussion?: unknown }; + +function clearSavedSession(): void { + try { localStorage.removeItem(SESSION_KEY); } catch {} +} + +function acceptSession(): string { + const url = new URL(location.href); + const callbackSession = url.searchParams.get('giscus'); + let session = callbackSession || ''; + if (session) { + try { localStorage.setItem(SESSION_KEY, JSON.stringify(session)); } catch {} + } else { + try { + const saved = localStorage.getItem(SESSION_KEY); + if (saved) { + const parsed: unknown = JSON.parse(saved); + if (typeof parsed === 'string') session = parsed; + else clearSavedSession(); + } + } catch { clearSavedSession(); } + } + if (url.searchParams.has('giscus')) { + url.searchParams.delete('giscus'); + // Preserve the router's state and the reader's existing fragment. + if (window.daybookReplaceURL) window.daybookReplaceURL(url.href); + else history.replaceState(history.state, '', url.href); + } + return session; +} + +let session = acceptSession(); +let current: GiscusController | null = null; +let swapping = false; + +function commentsDisabled(): boolean { + return document.documentElement.dataset.commentsDisabled === 'true'; +} + +class GiscusController { + private readonly lifetime = new AbortController(); + private intersection: IntersectionObserver | null = null; + private readonly attributes: MutationObserver; + private frame: HTMLIFrameElement | null = null; + private loaded = false; + private acknowledged = false; + private sentAppearance = ''; + + constructor(readonly container: HTMLElement) { + this.attributes = new MutationObserver(() => { + if (commentsDisabled()) setupGiscus(); + else this.syncAppearance(); + }); + this.attributes.observe(document.documentElement, { + attributes: true, + attributeFilter: ['data-theme', 'data-palette', 'lang', 'data-comments-disabled'], + }); + + if ('IntersectionObserver' in window) { + this.intersection = new IntersectionObserver(entries => { + if (entries.some(entry => entry.isIntersecting)) this.mount(); + }); + this.intersection.observe(container); + } else { + this.mount(); + } + } + + private active(): boolean { + return !this.lifetime.signal.aborted && !swapping && + !commentsDisabled() && this.container.isConnected && + document.getElementById('giscus') === this.container; + } + + private appearance(): Appearance { + const root = document.documentElement; + const dark = root.dataset.theme === 'dark'; + const palette = root.dataset.palette === 'warm' ? 'Warm' : 'Default'; + const customTheme = this.container.dataset[`theme${palette}${dark ? 'Dark' : 'Light'}`]; + return { + theme: customTheme ? new URL(customTheme, location.href).href : (dark ? 'dark' : 'light'), + lang: root.lang.toLowerCase().startsWith('en') ? 'en' : 'zh-CN', + }; + } + + private source(): string { + const data = this.container.dataset; + const { theme, lang } = this.appearance(); + const page = new URL(location.href); + page.searchParams.delete('giscus'); + page.hash = ''; + const params = new URLSearchParams({ + origin: `${page.href}#${this.container.id}`, + session, + repo: data.repo || '', + repoId: data.repoId || '', + category: data.category || '', + categoryId: data.categoryId || '', + // The generator supplies a stable Note.CommentPath shared by UI languages. + term: data.path || '', + strict: '1', + reactionsEnabled: '0', + emitMetadata: data.commentCounts === 'true' ? '1' : '0', + inputPosition: 'top', + theme, + description: document.querySelector('meta[name="description"]')?.content || '', + backLink: page.href, + }); + return `${GISCUS_ORIGIN}/${lang}/widget?${params}`; + } + + private mount(): void { + if (!this.active() || this.frame) return; + this.intersection?.disconnect(); + this.intersection = null; + const frame = document.createElement('iframe'); + this.frame = frame; + frame.className = 'giscus-frame giscus-frame--loading'; + frame.title = this.appearance().lang === 'en' ? 'Comments' : '评论'; + frame.setAttribute('scrolling', 'no'); + // Chromium needs delegation to fetch the preview's custom CSS and fonts + // from inside a public-origin iframe. Production pages need no delegation. + const loopback = ['localhost', '127.0.0.1', '[::1]'].includes(location.hostname); + frame.setAttribute('allow', loopback + ? 'clipboard-write; local-network-access; loopback-network' + : 'clipboard-write'); + frame.addEventListener('load', () => { + if (!this.active()) return; + frame.classList.remove('giscus-frame--loading'); + this.loaded = true; + // Replay changes made while the widget was still loading. + this.syncAppearance(true); + }, { signal: this.lifetime.signal }); + window.addEventListener('message', this.handleMessage, { signal: this.lifetime.signal }); + frame.src = this.source(); + this.container.appendChild(frame); + } + + syncAppearance(force = false): void { + if (!this.active() || !this.frame) return; + const appearance = this.appearance(); + this.frame.title = appearance.lang === 'en' ? 'Comments' : '评论'; + const key = JSON.stringify(appearance); + if (!this.loaded || (!force && key === this.sentAppearance)) return; + this.frame.contentWindow?.postMessage({ giscus: { setConfig: appearance } }, GISCUS_ORIGIN); + this.sentAppearance = key; + } + + private signOut(): void { + if (!session || !this.frame) return; + session = ''; + clearSavedSession(); + this.loaded = false; + this.acknowledged = false; + this.sentAppearance = ''; + // Authentication is established by the widget URL, so logout needs a reload. + this.frame.src = this.source(); + } + + private handleMessage = (event: MessageEvent): void => { + if (!this.active() || event.origin !== GISCUS_ORIGIN || + event.source !== this.frame?.contentWindow) return; + const data: unknown = event.data; + if (!data || typeof data !== 'object' || !('giscus' in data) || + !data.giscus || typeof data.giscus !== 'object') return; + const message = data.giscus as GiscusMessage; + if (typeof message.resizeHeight === 'number' && Number.isFinite(message.resizeHeight) && + message.resizeHeight > 0) { + this.frame!.style.height = `${Math.ceil(message.resizeHeight)}px`; + // The widget's first resize is emitted after it mounts. Replay once here + // too, because its message receiver can become ready after iframe load. + if (!this.acknowledged) { + this.acknowledged = true; + this.loaded = true; + this.syncAppearance(true); + } + } + if (message.discussion && typeof message.discussion === 'object') { + const discussion = message.discussion as { totalCommentCount?: unknown; totalReplyCount?: unknown }; + const { totalCommentCount: count, totalReplyCount: replies } = discussion; + if (typeof count === 'number' && Number.isSafeInteger(count) && count >= 0 && + typeof replies === 'number' && Number.isSafeInteger(replies) && replies >= 0) { + document.dispatchEvent(new CustomEvent('daybook:comments-loaded', { + detail: { path: this.container.dataset.path, count: count + replies }, + })); + } + } + if (message.signOut === true) { + this.signOut(); + return; + } + if (typeof message.error !== 'string') return; + if (/Bad credentials|Invalid state value|State has expired/.test(message.error) && session) { + this.signOut(); + console.warn('[giscus] Session has expired and was cleared.'); + } else if (message.error.includes('Discussion not found')) { + console.info('[giscus] A discussion will be created when the first comment is submitted.'); + } else { + console.error('[giscus]', message.error); + } + }; + + destroy(): void { + this.lifetime.abort(); + this.intersection?.disconnect(); + this.attributes.disconnect(); + this.frame?.remove(); + this.frame = null; + } +} + +export function setupGiscus(): void { + const container = document.getElementById('giscus'); + const disabled = commentsDisabled(); + if (container) container.hidden = disabled; + if (swapping || !container || disabled) { + current?.destroy(); + current = null; + return; + } + if (current?.container === container) { + current.syncAppearance(); + return; + } + current?.destroy(); + current = new GiscusController(container); +} + +document.addEventListener('daybook:before-swap', () => { + swapping = true; + current?.destroy(); + current = null; +}); +document.addEventListener('daybook:page-load', () => { + swapping = false; + if (new URL(location.href).searchParams.has('giscus')) session = acceptSession(); + setupGiscus(); +}); +document.addEventListener('daybook:settings-change', setupGiscus); +document.addEventListener('daybook:lang-change', () => current?.syncAppearance()); +setupGiscus(); diff --git a/assets/ts/graph-loader.ts b/assets/ts/graph-loader.ts new file mode 100644 index 00000000..441a6d81 --- /dev/null +++ b/assets/ts/graph-loader.ts @@ -0,0 +1,139 @@ +(function () { + const d3AssetPath = "/js/vendor/d3.min.js"; + const graphAssetPath = "/js/graph.js"; + const manifestPath = "/assets-manifest.json"; + let manifestPromise: Promise> | null = null; + let d3Promise: Promise | null = null; + let graphPromise: Promise | null = null; + + function loadManifest(): Promise> { + if (!manifestPromise) { + manifestPromise = fetch(manifestPath, { credentials: "same-origin" }) + .then(function (response) { + if (!response.ok) { + throw new Error("assets manifest not found"); + } + return response.json(); + }) + .catch(function () { + return {}; + }); + } + return manifestPromise; + } + + function assetPath(originalPath: string): Promise { + return loadManifest().then(function (manifest) { + return manifest[originalPath] || originalPath; + }); + } + + function loadScript(assetPathKey: string, dataAttr: string, globalCheck: () => boolean): Promise { + return assetPath(assetPathKey).then(function (src) { + return new Promise(function (resolve, reject) { + const existing = document.querySelector("script[" + dataAttr + "]"); + if (existing) { + if (globalCheck()) { + resolve(); + return; + } + existing.addEventListener("load", function () { + if (globalCheck()) { + resolve(); + } else { + reject(new Error("Script did not initialize: " + src)); + } + }, { once: true }); + existing.addEventListener("error", function () { + reject(new Error("Script failed to load: " + src)); + }, { once: true }); + return; + } + + const script = document.createElement("script"); + script.async = true; + script.src = src; + script.setAttribute(dataAttr, "true"); + script.addEventListener("load", function () { + if (globalCheck()) { + resolve(); + } else { + reject(new Error("Script did not initialize: " + src)); + } + }, { once: true }); + script.addEventListener("error", function () { + reject(new Error("Script failed to load: " + src)); + }, { once: true }); + document.head.appendChild(script); + }); + }); + } + + function loadD3(): Promise { + if (window.d3) return Promise.resolve(); + if (!d3Promise) { + d3Promise = loadScript(d3AssetPath, "data-daybook-d3", function () { return !!window.d3; }) + .catch(function(err) { d3Promise = null; throw err; }); + } + return d3Promise; + } + + function loadGraph(): Promise { + if (window.DaybookGraph) return Promise.resolve(); + if (!graphPromise) { + graphPromise = loadScript(graphAssetPath, "data-daybook-graph", function () { return !!window.DaybookGraph; }) + .catch(function(err) { graphPromise = null; throw err; }); + } + return graphPromise; + } + + function checkAndInit() { + const graphShell = document.querySelector(".graph-shell") as HTMLElement | null; + if (!graphShell) { + if (window.DaybookGraph && typeof window.DaybookGraph.destroy === "function") { + window.DaybookGraph.destroy(); + } + return; + } + + if (graphShell.dataset['graphInitialized'] === "true" || graphShell.dataset['graphInitializing'] === "true") { + return; + } + + graphShell.dataset['graphInitializing'] = "true"; + const revision = navigationRevision; + Promise.all([loadD3(), loadGraph()]).then(async function () { + if (revision !== navigationRevision || !graphShell.isConnected || document.querySelector(".graph-shell") !== graphShell) return; + if (window.DaybookGraph && typeof window.DaybookGraph.init === "function") { + await window.DaybookGraph.init(document); + graphShell.dataset['graphInitialized'] = "true"; + } + }).catch(function (error) { + console.error("Failed to load graph dependencies", error); + }).finally(function () { + delete graphShell.dataset['graphInitializing']; + }); + } + + let initTimer = 0; + let navigationRevision = 0; + function scheduleCheck() { + if (initTimer) window.clearTimeout(initTimer); + initTimer = window.setTimeout(function () { + initTimer = 0; + checkAndInit(); + }, 10); + } + + document.addEventListener("daybook:page-load", scheduleCheck); + + document.addEventListener("daybook:before-swap", function () { + navigationRevision++; + window.clearTimeout(initTimer); + const shell = document.querySelector(".graph-shell"); + if (shell) { delete shell.dataset['graphInitialized']; delete shell.dataset['graphInitializing']; } + if (window.DaybookGraph && typeof window.DaybookGraph.destroy === "function") { + window.DaybookGraph.destroy(); + } + }); +})(); diff --git a/assets/ts/graph-panel.ts b/assets/ts/graph-panel.ts new file mode 100644 index 00000000..a9e96a8d --- /dev/null +++ b/assets/ts/graph-panel.ts @@ -0,0 +1,378 @@ +import type { GraphSettings } from "./graph-settings"; + +const words = { + settings: ["图谱设置", "Graph settings"], + center: ["回到中心", "Recenter"], + full: ["返回完整图谱", "Full graph"], + close: ["关闭", "Close"], + reset: ["��默认", "Restore defaults"], + appearance: ["外观", "Display"], + forces: ["力度", "Forces"], + search: ["�索", "Search"], + query: ["�索文件或正文…", "Search files or content…"], + tags: ["标签", "Tags"], + attachments: ["附件", "Attachments"], + existing: ["仅显示已创建的笔记", "Existing notes only"], + orphans: ["孤立节点", "Orphans"], + arrows: ["箭头", "Arrows"], + textFade: ["文字淡出阈值", "Text fade threshold"], + nodeSize: ["节点大�", "Node size"], + lineWidth: ["连线粗细", "Link thickness"], + centerForce: ["图谱�心力", "Center force"], + repelForce: ["节点排斥力", "Repel force"], + linkForce: ["连接�引力", "Link force"], + linkDistance: ["连线长度", "Link distance"], + play: ["播放生长动画", "Growth animation"], + retry: ["�试", "Retry"], + empty: [ + "没有匹�的节点,请调整筛选。", + "No matching nodes. Adjust your filters.", + ], + loading: ["正在加载�索索引…", "Loading search index…"], + loadError: [ + "�索索引加载失败,��试或使用 path/file/tag 筛选。", + "Search index unavailable. Retry or use path/file/tag filters.", + ], + graphError: ["图谱加载失败,请�试。", "Unable to load graph. Please retry."], + noDates: ["当�筛选没有�用于动画的日期", "No dated notes in this selection"], +} as const; +export function graphText(key: keyof typeof words): string { + return words[key][ + document.documentElement.lang.toLowerCase().startsWith("en") ? 1 : 0 + ]; +} +export type Panel = ReturnType; +export function createGraphPanel( + host: HTMLElement, + get: () => GraphSettings, + change: (key: keyof GraphSettings) => void, + actions: { + center(): void; + reset(): void; + full(): void; + play(): void; + retry(): void; + }, +) { + const disposers: (() => void)[] = []; + const el = ( + tag: K, + cls = "", + text = "", + ) => { + const n = document.createElement(tag); + n.className = cls; + n.textContent = text; + return n; + }; + const button = (text: string, action: () => void, cls = "graph-button") => { + const b = el("button", cls, text); + b.type = "button"; + b.onclick = action; + return b; + }; + host.replaceChildren(); + const toolbar = el("div", "graph-toolbar"); + const panel = el("dialog", "graph-panel"); + panel.id = "graph-settings-panel"; + panel.hidden = true; + panel.setAttribute("aria-label", graphText("settings")); + const iconButton = ( + label: keyof typeof words, + icon: string, + action: () => void, + ) => { + const control = button("", action, "notes-action-button"); + control.setAttribute("aria-label", graphText(label)); + control.setAttribute("data-tooltip", graphText(label)); + const symbol = el("span", "material-symbol", icon); + symbol.setAttribute("aria-hidden", "true"); + control.append(symbol, el("span", "graph-action-text", graphText(label))); + return control; + }; + const toggle = iconButton("settings", "tune", () => setOpen(!!panel.hidden)); + toggle.id = "graph-settings-btn"; + toggle.setAttribute("aria-controls", panel.id); + toggle.setAttribute("aria-expanded", "false"); + const center = iconButton("center", "center_focus_strong", actions.center); + center.id = "graph-reset"; + const full = iconButton("full", "zoom_out_map", actions.full); + full.id = "graph-full-btn"; + full.hidden = !new URLSearchParams(location.search).has("node"); + const search = iconButton("search", "search", () => + setSearchOpen(searchPanel.inert), + ); + search.id = "graph-search-btn"; + search.setAttribute("aria-controls", "graph-local-search-panel"); + search.setAttribute("aria-expanded", "false"); + const shortcuts = new Map< + "showOrphans" | "showTags" | "showAttachments" | "existingOnly", + HTMLButtonElement + >(); + toolbar.append(search); + for (const [key, label, icon, id] of [ + ["showOrphans", "orphans", "scatter_plot", "graph-orphan-btn"], + ["showTags", "tags", "sell", "graph-tags-btn"], + ["showAttachments", "attachments", "attach_file", "graph-attachments-btn"], + ["existingOnly", "existing", "description", "graph-existing-btn"], + ] as const) { + const shortcut = iconButton(label, icon, () => { + get()[key] = !get()[key]; + syncToggles(); + change(key); + }); + shortcut.id = id; + shortcuts.set(key, shortcut); + toolbar.append(shortcut); + } + const play = iconButton("play", "play_arrow", actions.play); + play.id = "graph-play"; + play.setAttribute("aria-pressed", "false"); + play.disabled = true; + toolbar.append(play, center, toggle, full); + const searchPanel = el("div", "graph-search-panel"); + searchPanel.id = "graph-local-search-panel"; + searchPanel.inert = true; + searchPanel.setAttribute("aria-hidden", "true"); + const header = el("div", "graph-panel-header"); + const headerActions = el("div", "graph-panel-actions"); + const reset = iconButton("reset", "restart_alt", actions.reset); + reset.id = "graph-defaults"; + const closeButton = iconButton("close", "close", () => setOpen(false)); + for (const control of [reset, closeButton]) { + control.className = "graph-panel-action"; + control.querySelector(".graph-action-text")?.remove(); + } + closeButton.classList.add("graph-close"); + headerActions.append(reset, closeButton); + header.append(el("strong", "", graphText("settings")), headerActions); + panel.append(header); + const sections = new Map(); + for (const name of ["appearance", "forces"] as const) { + const section = el("section", "graph-section"); + const title = el("h2", "graph-section-title"); + const icon = el("span", "material-symbol", name === "appearance" ? "palette" : "hub"); + icon.setAttribute("aria-hidden", "true"); + title.append(icon, el("span", "", graphText(name))); + title.id = `graph-${name}-title`; + section.setAttribute("aria-labelledby", title.id); + const body = el("div", "graph-section-body"); + section.append(title, body); + panel.append(section); + sections.set(name, body); + } + const query = el("input", "notes-search-input graph-query"); + query.id = "graph-search-input"; + query.type = "search"; + query.placeholder = graphText("query"); + query.setAttribute("aria-label", graphText("query")); + query.autocomplete = "off"; + query.spellcheck = false; + query.oninput = () => { + get().query = query.value; + change("query"); + }; + const queryError = el("p", "graph-error"); + queryError.id = "graph-query-error"; + queryError.setAttribute("role", "status"); + query.setAttribute("aria-describedby", queryError.id); + searchPanel.append(query, queryError); + const fields = new Map(); + const arrowRow = el("label", "graph-switch-row"); + const arrows = button("", () => { + get().arrows = !get().arrows; + arrows.setAttribute("aria-checked", String(get().arrows)); + change("arrows"); + }, "material-switch graph-switch"); + arrows.id = "graph-arrows"; + arrows.setAttribute("role", "switch"); + arrows.setAttribute("aria-label", graphText("arrows")); + for (const cls of ["switch-track", "switch-thumb"]) { + const shape = el("span", cls); + shape.setAttribute("aria-hidden", "true"); + arrows.append(shape); + } + arrows.onpointerdown = (event) => { + if (event.button !== 0) return; + arrows.setPointerCapture(event.pointerId); + arrows.classList.add("is-pressed"); + }; + const releaseSwitch = () => arrows.classList.remove("is-pressed"); + arrows.onpointerup = releaseSwitch; + arrows.onpointercancel = releaseSwitch; + arrows.onlostpointercapture = releaseSwitch; + arrows.onkeydown = (event) => { + if (event.key === " " || event.key === "Enter") arrows.classList.add("is-pressed"); + }; + arrows.onkeyup = releaseSwitch; + arrows.onblur = releaseSwitch; + arrowRow.append(el("span", "", graphText("arrows")), arrows); + sections.get("appearance")!.append(arrowRow); + function updateSlider(range: HTMLInputElement) { + const slider = range.closest(".graph-slider")!; + slider.style.setProperty("--graph-progress", + `${((range.valueAsNumber - Number(range.min)) / (Number(range.max) - Number(range.min))) * 100}%`); + slider.querySelector(".graph-slider-value")!.textContent = range.value; + } + for (const [key, min, max, step] of [ + ["textFade", -1, 1, 0.05], + ["nodeSize", 0.25, 3, 0.05], + ["lineWidth", 0.25, 3, 0.05], + ["centerForce", 0, 3, 0.05], + ["repelForce", 0, 3, 0.05], + ["linkForce", 0, 3, 0.05], + ["linkDistance", 30, 400, 1], + ] as const) { + const row = el("div", "graph-slider-row"); + const label = el("label", "", graphText(key)); + label.htmlFor = `graph-${key}`; + const range = el("input"); + range.type = "range"; + range.id = label.htmlFor; + const slider = el("div", "graph-slider"); + const visual = el("div", "graph-slider-visual"); + visual.setAttribute("aria-hidden", "true"); + const activeTrack = el("span", "graph-slider-active"); + const inactiveTrack = el("span", "graph-slider-inactive"); + inactiveTrack.append(el("span", "graph-slider-end")); + visual.append(activeTrack, inactiveTrack, el("span", "graph-slider-handle"), el("span", "graph-slider-value")); + slider.append(visual, range); + range.onpointerdown = (event) => { + if (event.button !== 0) return; + range.setPointerCapture(event.pointerId); + slider.classList.add("is-dragging"); + }; + const releaseSlider = () => slider.classList.remove("is-dragging"); + range.onpointerup = releaseSlider; + range.onpointercancel = releaseSlider; + range.onlostpointercapture = releaseSlider; + range.onblur = releaseSlider; + range.min = String(min); + range.max = String(max); + range.step = String(step); + range.dataset.setting = key; + range.oninput = () => { + get()[key] = range.valueAsNumber; + updateSlider(range); + change(key); + }; + row.append(label, slider); + (key.endsWith("Force") || key === "linkDistance" + ? sections.get("forces")! + : sections.get("appearance")! + ).append(row); + fields.set(key, range); + } + const status = el("div", "graph-status"); + status.setAttribute("role", "status"); + const empty = el("span", "", graphText("empty")); + empty.hidden = true; + const error = el("span", "graph-error"); + const retry = button(graphText("retry"), actions.retry); + retry.hidden = true; + status.append(empty, error, retry); + status.hidden = true; + toolbar.append(searchPanel); + host.append(toolbar, panel, status); + const narrow = window.matchMedia("(max-width: 960px)"); + function presentPanel() { + const focused = panel.contains(document.activeElement) ? document.activeElement as HTMLElement : null; + panel.close(); + if (narrow.matches) panel.showModal(); + else panel.show(); + document.body.classList.toggle("graph-modal-open", narrow.matches); + focused?.focus({ preventScroll: true }); + } + const resizedPanel = () => { + if (!panel.hidden) presentPanel(); + }; + narrow.addEventListener("change", resizedPanel); + disposers.push(() => narrow.removeEventListener("change", resizedPanel)); + panel.oncancel = (event) => { + event.preventDefault(); + setOpen(false); + }; + function setOpen(open: boolean) { + panel.hidden = !open; + toggle.setAttribute("aria-expanded", String(open)); + if (open) { + if (!searchPanel.inert) setSearchOpen(false); + presentPanel(); + closeButton.focus({ preventScroll: true }); + } else { + panel.close(); + document.body.classList.remove("graph-modal-open"); + toggle.focus({ preventScroll: true }); + } + } + function setSearchOpen(open: boolean) { + searchPanel.inert = !open; + searchPanel.setAttribute("aria-hidden", String(!open)); + toolbar.classList.toggle("is-search-open", open); + search.setAttribute("aria-expanded", String(open)); + if (open) { + if (!panel.hidden) setOpen(false); + query.focus(); + } else search.focus(); + } + const escape = (event: KeyboardEvent) => { + if (event.key !== "Escape") return; + if (!searchPanel.inert) { + event.stopPropagation(); + setSearchOpen(false); + } else if (!panel.hidden) { + event.preventDefault(); + event.stopPropagation(); + setOpen(false); + } + }; + host.addEventListener("keydown", escape); + disposers.push(() => host.removeEventListener("keydown", escape)); + function sync() { + query.value = get().query; + arrows.setAttribute("aria-checked", String(get().arrows)); + for (const [key, range] of fields) { + range.value = String(get()[key]); + updateSlider(range); + } + syncToggles(); + } + function syncToggles() { + for (const [key, shortcut] of shortcuts) { + shortcut.setAttribute("aria-pressed", String(get()[key])); + } + } + sync(); + return { + sync, + fullButton: full, + setEmpty(isEmpty: boolean) { + empty.hidden = !isEmpty; + status.hidden = !isEmpty && !error.textContent; + }, + setError(message: string, retryable = false) { + error.textContent = message; + retry.hidden = !retryable; + status.hidden = empty.hidden && !message; + }, + queryError(message: string) { + queryError.textContent = message; + query.setAttribute("aria-invalid", String(!!message)); + }, + animationAvailable(available: boolean) { + play.disabled = !available; + play.setAttribute("data-tooltip", graphText(available ? "play" : "noDates")); + }, + animation(state: "idle" | "playing") { + play.setAttribute("aria-pressed", String(state === "playing")); + play.querySelector(".material-symbol")!.textContent = + state === "playing" ? "stop" : "play_arrow"; + }, + destroy() { + panel.close(); + document.body.classList.remove("graph-modal-open"); + disposers.forEach((d) => d()); + host.replaceChildren(); + }, + }; +} diff --git a/assets/ts/graph-query.ts b/assets/ts/graph-query.ts new file mode 100644 index 00000000..abc16461 --- /dev/null +++ b/assets/ts/graph-query.ts @@ -0,0 +1,247 @@ +/** The public, published fields that the graph is allowed to search. */ +export interface SearchDocument { + id?: string; + title?: string; + file?: string; + path?: string; + tags?: string[]; + text?: string; + lines?: string[]; + sections?: string[]; + properties?: Record; +} + +export interface CompiledQuery { + matches(document: SearchDocument): boolean; + /** False means that the query can run before graph-search.json is loaded. */ + needsIndex: boolean; +} + +type Field = 'path' | 'file' | 'tag' | 'line' | 'section'; +type Expression = + | { kind: 'all' } + | { kind: 'text'; value: string } + | { kind: 'property'; key: string; value?: string } + | { kind: 'field'; field: Field; expression: Expression } + | { kind: 'not'; expression: Expression } + | { kind: 'and' | 'or'; expressions: Expression[] }; +type TokenKind = 'word' | 'quoted' | 'property' | 'or' | '(' | ')' | ':' | '-' | 'end'; +interface Token { kind: TokenKind; value: string; position: number } + +const fields = new Set(['path', 'file', 'tag', 'line', 'section']); +const lower = (value: string): string => value.toLowerCase(); +const syntaxError = (message: string, position: number): Error => new Error(`${message}(�置 ${position + 1})`); + +function readQuoted(input: string, start: number): { value: string; end: number } { + let value = ''; + for (let position = start + 1; position < input.length; position++) { + const char = input[position]!; + if (char === '"') return { value, end: position + 1 }; + if (char === '\\') { + if (position + 1 >= input.length) throw syntaxError('引�内的转义字符�完整', position); + value += input[++position]!; + } else value += char; + } + throw syntaxError('缺少结�引�', start); +} + +function tokenize(input: string): Token[] { + const tokens: Token[] = []; + let position = 0; + while (position < input.length) { + const char = input[position]!; + if (/\s/.test(char)) { position++; continue; } + const start = position; + if (char === '"') { + const quoted = readQuoted(input, position); + tokens.push({ kind: 'quoted', value: quoted.value, position }); + position = quoted.end; + } else if (char === '[') { + position++; + while (position < input.length && input[position] !== ']') { + if (input[position] === '"') position = readQuoted(input, position).end; + else if (input[position] === '[') throw syntaxError('属性�件�能嵌套方括�', position); + else if (input[position] === '\\') position += 2; + else position++; + } + if (input[position] !== ']') throw syntaxError('缺少结�方括� ]', start); + tokens.push({ kind: 'property', value: input.slice(start + 1, position), position: start }); + position++; + } else if (char === ']') throw syntaxError('没有对应的开始方括� [', position); + else if (char === '(' || char === ')' || char === ':' || char === '-') { + tokens.push({ kind: char, value: char, position }); + position++; + } else { + let value = ''; + while (position < input.length && !/[\s()[\]":]/.test(input[position]!)) { + if (input[position] === '\\') { + if (position + 1 >= input.length) throw syntaxError('转义字符�完整', position); + position++; + } + value += input[position++]!; + } + tokens.push({ kind: /^OR$/i.test(value) ? 'or' : 'word', value, position: start }); + } + } + tokens.push({ kind: 'end', value: '', position: input.length }); + return tokens; +} + +function validateLiteral(value: string, quoted: boolean, position: number): string { + if (!value.length) throw syntaxError('�索�件�能为空', position); + if (!quoted && /^\/.*\/[a-z]*$/i.test(value)) throw syntaxError('暂�支�正则表达�,请使用普通�或引�短语', position); + if (!quoted && /^[<>=]/.test(value)) throw syntaxError('暂�支�数值比较', position); + return lower(value); +} + +function parseProperty(token: Token): Expression { + let separator = -1; + for (let position = 0; position < token.value.length; position++) { + if (token.value[position] === '"') position = readQuoted(token.value, position).end - 1; + else if (token.value[position] === '\\') position++; + else if (token.value[position] === ':') { separator = position; break; } + } + function part(raw: string): string { + const value = raw.trim(); + if (value.startsWith('"')) { + const quoted = readQuoted(value, 0); + if (quoted.end !== value.length) throw syntaxError('属性�称或值的引��有多余内容', token.position); + return validateLiteral(quoted.value, true, token.position); + } + if (value.includes('"')) throw syntaxError('请用引�包�整个属性�称或值', token.position); + return validateLiteral(value.replace(/\\(.)/g, '$1'), false, token.position); + } + return { + kind: 'property', + key: part(separator < 0 ? token.value : token.value.slice(0, separator)), + ...(separator < 0 ? {} : { value: part(token.value.slice(separator + 1)) }), + }; +} + +class Parser { + private position = 0; + constructor(private readonly tokens: Token[]) {} + private current(): Token { return this.tokens[this.position]!; } + private consume(): Token { return this.tokens[this.position++]!; } + + parse(): Expression { + if (this.current().kind === 'end') return { kind: 'all' }; + const expression = this.parseOr(0); + if (this.current().kind !== 'end') throw syntaxError('此处有多余的符�或括�', this.current().position); + return expression; + } + + private parseOr(depth: number): Expression { + const expressions = [this.parseAnd(depth)]; + while (this.current().kind === 'or') { + this.consume(); + expressions.push(this.parseAnd(depth)); + } + return expressions.length === 1 ? expressions[0]! : { kind: 'or', expressions }; + } + + private parseAnd(depth: number): Expression { + const expressions = [this.parseUnary(depth)]; + while (!['end', ')', 'or'].includes(this.current().kind)) expressions.push(this.parseUnary(depth)); + return expressions.length === 1 ? expressions[0]! : { kind: 'and', expressions }; + } + + private parseUnary(depth: number): Expression { + const token = this.current(); + if (depth > 64) throw syntaxError('�件嵌套过深,请简化查询', token.position); + if (token.kind === '-') { + this.consume(); + return { kind: 'not', expression: this.parseUnary(depth + 1) }; + } + if (token.kind === '(') { + this.consume(); + const expression = this.parseOr(depth + 1); + if (this.current().kind !== ')') throw syntaxError('缺少结�括� )', token.position); + this.consume(); + return expression; + } + if (token.kind === 'property') { this.consume(); return parseProperty(token); } + if (token.kind !== 'word' && token.kind !== 'quoted') throw syntaxError('此处需��索�或�件', token.position); + this.consume(); + if (token.kind === 'word' && this.current().kind === ':') { + this.consume(); + const field = lower(token.value) as Field; + if (!fields.has(field)) throw syntaxError(`�支�的�索�作符 ${token.value}:`, token.position); + return { kind: 'field', field, expression: this.parseUnary(depth + 1) }; + } + return { kind: 'text', value: validateLiteral(token.value, token.kind === 'quoted', token.position) }; + } +} + +function needsIndex(expression: Expression, metadata = false): boolean { + switch (expression.kind) { + case 'all': return false; + case 'text': return !metadata; + case 'property': return true; + case 'field': + return expression.field === 'line' || expression.field === 'section' + || needsIndex(expression.expression, true); + case 'not': return needsIndex(expression.expression, metadata); + case 'and': case 'or': return expression.expressions.some(child => needsIndex(child, metadata)); + } +} + +type MatchText = (value: string) => boolean; + +/** Compile once and reuse for every graph node. */ +export function compileQuery(input: string): CompiledQuery { + if (input.length > 16_384) throw syntaxError('查询过长,请控制在 16384 个字符以内', 16_384); + const expression = new Parser(tokenize(input)).parse(); + return { + needsIndex: needsIndex(expression), + matches(document: SearchDocument): boolean { + const file = lower(document.file ?? document.title ?? ''); + const title = lower(document.title ?? ''); + let text: string | undefined; + let tags: string[] | undefined; + let properties: Map | undefined; + const plain: MatchText = value => { + if (file.includes(value) || title.includes(value)) return true; + text ??= lower(document.text ?? document.lines?.join('\n') ?? document.sections?.join('\n') ?? ''); + return text.includes(value); + }; + const within = (value: string): MatchText => { + const normalized = lower(value); + return needle => normalized.includes(needle); + }; + const evaluate = (node: Expression, match: MatchText): boolean => { + switch (node.kind) { + case 'all': return true; + case 'text': return match(node.value); + case 'not': return !evaluate(node.expression, match); + case 'and': return node.expressions.every(child => evaluate(child, match)); + case 'or': return node.expressions.some(child => evaluate(child, match)); + case 'property': { + properties ??= new Map(Object.entries(document.properties ?? {}).map(([key, value]) => [lower(key), value])); + if (!properties.has(node.key)) return false; + if (node.value === undefined) return true; + const value = properties.get(node.key); + return (Array.isArray(value) ? value : [value]).some(item => item !== null && item !== undefined + && lower(String(item)).includes(node.value!)); + } + case 'field': { + if (node.field === 'file') return evaluate(node.expression, within(document.file ?? document.title ?? '')); + if (node.field === 'path') return evaluate(node.expression, within(document.path ?? '')); + if (node.field === 'tag') { + tags ??= (document.tags ?? []).map(tag => lower(tag.replace(/^#/, ''))); + return evaluate(node.expression, value => { + const tag = value.replace(/^#/, ''); + return tags!.some(candidate => candidate === tag || candidate.startsWith(`${tag}/`)); + }); + } + const parts = node.field === 'line' + ? document.lines ?? document.text?.split(/\r?\n/) ?? [] + : document.sections ?? (document.text === undefined ? [] : [document.text]); + return parts.some(part => evaluate(node.expression, within(part))); + } + } + }; + return evaluate(expression, plain); + }, + }; +} diff --git a/assets/ts/graph-settings.ts b/assets/ts/graph-settings.ts new file mode 100644 index 00000000..56d82b3f --- /dev/null +++ b/assets/ts/graph-settings.ts @@ -0,0 +1,87 @@ +export interface GraphSettings { + query: string; + showTags: boolean; + showAttachments: boolean; + existingOnly: boolean; + showOrphans: boolean; + arrows: boolean; + textFade: number; + nodeSize: number; + lineWidth: number; + centerForce: number; + repelForce: number; + linkForce: number; + linkDistance: number; +} + +const SETTINGS_VERSION = 1; + +export function defaultSettings(): GraphSettings { + return { + query: '', + showTags: false, + showAttachments: false, + existingOnly: true, + showOrphans: true, + arrows: false, + textFade: 0, + nodeSize: 1, + lineWidth: 1, + centerForce: 1, + repelForce: 1, + linkForce: 1, + linkDistance: 120, + }; +} + +/** Share preferences across graph locales, but never across site subdirectories. */ +export function settingsStorageKey(pathname: string = window.location.pathname): string { + const sitePath = pathname.replace(/\/graph\/?$/, '').replace(/\/(?:en_US|zh_CN)$/, '').replace(/\/$/, ''); + return `daybook:graph:${sitePath || '/'}`; +} + +function isRecord(value: unknown): value is Record { + return value !== null && typeof value === 'object' && !Array.isArray(value); +} + +/** Treat stored data as untrusted: stale or malformed values cannot reach D3. */ +export function validateSettings(value: unknown): GraphSettings { + const settings = defaultSettings(); + if (!isRecord(value)) return settings; + if (typeof value.query === 'string') settings.query = value.query; + for (const key of ['showTags', 'showAttachments', 'existingOnly', 'showOrphans', 'arrows'] as const) { + if (typeof value[key] === 'boolean') settings[key] = value[key]; + } + const ranges = { + textFade: [-1, 1], nodeSize: [0.25, 3], lineWidth: [0.25, 3], + centerForce: [0, 3], repelForce: [0, 3], linkForce: [0, 3], linkDistance: [30, 400], + } as const; + for (const key of Object.keys(ranges) as (keyof typeof ranges)[]) { + const candidate = value[key]; + if (typeof candidate === 'number' && Number.isFinite(candidate)) { + settings[key] = Math.min(ranges[key][1], Math.max(ranges[key][0], candidate)); + } + } + return settings; +} + +export function loadSettings(key: string): GraphSettings { + try { + const raw = localStorage.getItem(key); + if (!raw) return defaultSettings(); + const record: unknown = JSON.parse(raw); + if (!isRecord(record) || record.version !== SETTINGS_VERSION) return defaultSettings(); + return validateSettings(record.settings); + } catch { + // Private browsing, disabled storage, and malformed JSON still allow using the graph. + return defaultSettings(); + } +} + +export function saveSettings(key: string, state: GraphSettings): void { + try { + localStorage.setItem(key, JSON.stringify({ version: SETTINGS_VERSION, settings: validateSettings(state) })); + } catch { + // Persistence is optional; the caller's in-memory state remains authoritative. + } +} diff --git a/assets/ts/graph.ts b/assets/ts/graph.ts new file mode 100644 index 00000000..ed431356 --- /dev/null +++ b/assets/ts/graph.ts @@ -0,0 +1,864 @@ +import { + compileQuery, + type CompiledQuery, + type SearchDocument, +} from "./graph-query"; +import { + defaultSettings, + loadSettings, + saveSettings, + settingsStorageKey, + type GraphSettings, +} from "./graph-settings"; +import { createGraphPanel, graphText, type Panel } from "./graph-panel"; + +export interface TagNode { + id: string; + title: string; +} +export interface AttachmentNode { + id: string; + title: string; + url: string; + path?: string; + file?: string; +} +interface RawNode { + id: string; + title: string; + url?: string; + path?: string; + file?: string; + date?: string; + exists: boolean; + degree: number; + tags?: TagNode[]; + attachments?: AttachmentNode[]; + isTag?: boolean; + isAttachment?: boolean; +} +interface GraphNode extends RawNode { + x?: number; + y?: number; + vx?: number; + vy?: number; + fx?: number | null; + fy?: number | null; + radius: number; +} +interface RawLink { + source: string; + target: string; + type?: string; +} +interface GraphLink { + source: string | GraphNode; + target: string | GraphNode; + forward: boolean; + reverse: boolean; + type?: string; +} +interface GraphData { + version?: number; + nodes: RawNode[]; + links: RawLink[]; + meta?: { layoutDiameter?: number; nodeCount?: number; linkCount?: number }; +} +const ANIMATION_DURATION_MS = 8000; +const endpoint = (n: string | GraphNode) => (typeof n === "string" ? n : n.id); + +(() => { + let container: HTMLElement | null = null, + controls: HTMLElement | null = null, + panel: Panel | null = null; + let raw: GraphData = { nodes: [], links: [] }; + let settings = defaultSettings(), + storageKey = "", + basePath = ""; + let activeQuery: CompiledQuery = compileQuery(""); + let index: Map | null = null; + let indexPromise: Promise | null = null; + let abort: AbortController | null = null, + generation = 0, + queryRevision = 0; + let svg: any = null, + g: any = null, + simulation: any = null, + zoom: any = null, + nodeSelection: any = null, + linkSelection: any = null; + let resize: ResizeObserver | null = null, + inputTimer = 0; + const cache = new Map(); + let fullNodes: RawNode[] = [], + fullLinks: GraphLink[] = [], + currentNodes: GraphNode[] = [], + currentLinks: GraphLink[] = []; + let animation: "idle" | "playing" = "idle", + frame = 0, + elapsed = 0, + started = 0, + days: string[] = [], + lastBatch = -1; + const reduce = () => + window.matchMedia("(prefers-reduced-motion: reduce)").matches; + const radius = (degree: number) => + (5 + Math.sqrt(degree) * 1.5) * settings.nodeSize; + const dimensions = () => ({ + w: container?.clientWidth || 800, + h: container?.clientHeight || 600, + }); + const documentFor = (n: RawNode): SearchDocument => ({ + ...index?.get(n.id), + id: n.id, + title: n.title, + file: n.file || n.title, + path: n.path || n.id, + tags: n.isTag ? [n.title.replace(/^#/, "")] : n.tags?.map((t) => t.title), + }); + + async function init(root: Document | HTMLElement = document) { + destroy(); + container = root.querySelector("#graph-container"); + if (!container) return; + controls = root.querySelector("#graph-controls"); + if (!controls) { + controls = document.createElement("div"); + controls.id = "graph-controls"; + container.before(controls); + } + const epoch = generation; + abort = new AbortController(); + basePath = location.pathname.replace(/\/graph\/?$/, ""); + storageKey = settingsStorageKey(location.pathname); + settings = loadSettings(storageKey); + panel = createGraphPanel(controls, () => settings, changed, { + center: recenter, + reset: restore, + full: fullGraph, + play: toggleAnimation, + retry: () => { + if (raw.nodes.length) void applyQuery(); + else void init(root); + }, + }); + panel.setError(graphText("loading")); + try { + const response = await fetch(`${basePath}/graph.json`, { + signal: abort.signal, + }); + if (!response.ok) throw Error("graph"); + const data = (await response.json()) as GraphData; + if (epoch !== generation) return; + if (!Array.isArray(data.nodes) || !Array.isArray(data.links)) + throw Error("graph"); + raw = data; + activeQuery = compileQuery(""); + panel?.setError(""); + recompute(); + await applyQuery(); + if (epoch !== generation) return; + resize = new ResizeObserver(() => { + const { w, h } = dimensions(); + svg?.attr("viewBox", [0, 0, w, h]); + if (simulation) { + simulation.force("x").x(w / 2); + simulation.force("y").y(h / 2); + } + }); + resize.observe(container!); + window.addEventListener("popstate", routeChanged); + document.addEventListener("daybook:lang-change", languageChanged); + } catch (error) { + if (epoch === generation && (error as Error).name !== "AbortError") + panel?.setError(graphText("graphError"), true); + } + } + function destroy() { + generation++; + queryRevision++; + abort?.abort(); + abort = null; + window.clearTimeout(inputTimer); + cancelAnimationFrame(frame); + frame = 0; + window.removeEventListener("popstate", routeChanged); + document.removeEventListener("daybook:lang-change", languageChanged); + resize?.disconnect(); + resize = null; + panel?.destroy(); + panel = null; + simulation?.on("tick", null).stop(); + simulation = null; + if (svg) { + window.d3.select(window).on(".drag", null).on(".zoom", null); + window.d3.dragEnable(window); + } + svg?.interrupt(); + svg?.selectAll("*").interrupt().interrupt("hover"); + if (container) { + container.replaceChildren(); + container.classList.remove("graph-dimmed"); + } + container = null; + controls = null; + svg = null; + g = null; + zoom = null; + nodeSelection = null; + linkSelection = null; + cache.clear(); + raw = { nodes: [], links: [] }; + fullNodes = []; + fullLinks = []; + currentNodes = []; + currentLinks = []; + index = null; + indexPromise = null; + animation = "idle"; + elapsed = 0; + days = []; + lastBatch = -1; + appliedQuery = ""; + (window as any).__graphNodes = null; + } + function languageChanged() { + if (!controls) return; + panel?.destroy(); + panel = createGraphPanel(controls, () => settings, changed, { + center: recenter, + reset: restore, + full: fullGraph, + play: toggleAnimation, + retry: () => void applyQuery(), + }); + panel.setEmpty(currentNodes.length === 0); + panel.animation(animation); + void applyQuery(); + } + function routeChanged() { + stopAnimation(false); + recompute(); + if (panel) + panel.fullButton.hidden = !new URLSearchParams(location.search).has( + "node", + ); + } + function fullGraph() { + const url = new URL(location.href); + url.searchParams.delete("node"); + url.searchParams.delete("depth"); + history.pushState({}, "", url); + routeChanged(); + recenter(); + } + function recenter() { + if (!svg || !zoom) return; + svg.interrupt(); + if (reduce()) svg.call(zoom.transform, defaultTransform()); + else + svg.transition().duration(500).call(zoom.transform, defaultTransform()); + } + function defaultTransform() { + const { w, h } = dimensions(); + const scale = Math.max( + 0.1, + Math.min( + 1.8, + (Math.min(w, h) * 0.82) / ((raw.meta?.layoutDiameter || 10) * 120), + ), + ); + return window.d3.zoomIdentity + .translate(w / 2, h / 2) + .scale(scale) + .translate(-w / 2, -h / 2); + } + function restore() { + stopAnimation(false); + window.clearTimeout(inputTimer); + queryRevision++; + settings = defaultSettings(); + activeQuery = compileQuery(""); + appliedQuery = ""; + saveSettings(storageKey, settings); + panel?.sync(); + panel?.queryError(""); + panel?.setError(""); + recompute(); + recenter(); + } + function changed(key: keyof GraphSettings) { + saveSettings(storageKey, settings); + if (key === "query") { + queryRevision++; + stopAnimation(true); + window.clearTimeout(inputTimer); + inputTimer = window.setTimeout(() => void applyQuery(), 180); + return; + } + if ( + ["showTags", "showAttachments", "showOrphans", "existingOnly"].includes( + key, + ) + ) { + stopAnimation(false); + recompute(); + return; + } + if ( + ["centerForce", "repelForce", "linkForce", "linkDistance"].includes(key) + ) { + updateForces(); + return; + } + updateAppearance(); + if (key === "nodeSize") { + simulation?.force("collide").radius((n: GraphNode) => n.radius + 6); + reheat(0.12); + } + } + async function loadIndex() { + if (index) return; + if (indexPromise) return indexPromise; + const epoch = generation; + const signal = abort?.signal; + const promise = (async () => { + const res = await fetch(`${basePath}/graph-search.json`, { signal }); + if (!res.ok) throw Error("index"); + const data = await res.json(); + if (data.version !== 1 || !Array.isArray(data.documents)) + throw Error("index"); + if (epoch === generation) + index = new Map(data.documents.map((d: SearchDocument) => [d.id, d])); + })(); + indexPromise = promise; + try { + await promise; + } finally { + if (epoch === generation) indexPromise = null; + } + } + async function applyQuery() { + const revision = ++queryRevision, + epoch = generation; + let query: CompiledQuery; + try { + query = compileQuery(settings.query); + panel?.queryError(""); + } catch (error) { + panel?.queryError((error as Error).message); + return; + } + if (query.needsIndex && !index) { + panel?.setError(graphText("loading")); + try { + await loadIndex(); + } catch { + if (epoch === generation && revision === queryRevision) + panel?.setError(graphText("loadError"), true); + return; + } + } + if (epoch !== generation || revision !== queryRevision) return; + panel?.setError(""); + activeQuery = query; + if (settings.query !== appliedQuery) { + appliedQuery = settings.query; + stopAnimation(false); + recompute(); + } + } + let appliedQuery = ""; + function localIDs(): Set | null { + const params = new URLSearchParams(location.search), + center = params.get("node"); + if (!center || !raw.nodes.some((n) => n.id === center)) return null; + const depth = Math.max( + 1, + Math.min( + raw.nodes.length, + Number.parseInt(params.get("depth") || "1", 10) || 1, + ), + ); + const adj = new Map>(); + for (const l of raw.links) { + if (!adj.has(l.source)) adj.set(l.source, new Set()); + if (!adj.has(l.target)) adj.set(l.target, new Set()); + adj.get(l.source)!.add(l.target); + adj.get(l.target)!.add(l.source); + } + const ids = new Set([center]); + let frontier = [center]; + for (let i = 0; i < depth; i++) { + const next: string[] = []; + for (const id of frontier) + for (const neighbor of adj.get(id) || []) + if (!ids.has(neighbor)) { + ids.add(neighbor); + next.push(neighbor); + } + frontier = next; + if (!next.length) break; + } + return ids; + } + function recompute() { + const local = localIDs(); + const eligible = raw.nodes.filter( + (n) => + (!settings.existingOnly || n.exists) && (!local || local.has(n.id)), + ); + const visible = new Map(); + for (const n of eligible) + if (activeQuery.matches(documentFor(n))) visible.set(n.id, n); + const extra: RawLink[] = []; + for (const n of eligible) { + const matched = visible.has(n.id); + if (settings.showTags && matched) + for (const t of n.tags || []) { + visible.set(t.id, { + ...t, + title: "#" + t.title, + exists: true, + degree: 0, + isTag: true, + }); + extra.push({ source: n.id, target: t.id, type: "tag" }); + } + if (settings.showAttachments) + for (const a of n.attachments || []) { + const att: RawNode = { + ...a, + exists: true, + degree: 0, + isAttachment: true, + }; + if (matched || activeQuery.matches(documentFor(att))) + visible.set(a.id, att); + if (matched) + extra.push({ source: n.id, target: a.id, type: "attachment" }); + } + } + const pairs = new Map(); + for (const l of [...raw.links, ...extra]) { + if ( + l.source === l.target || + !visible.has(l.source) || + !visible.has(l.target) + ) + continue; + const [a, b] = [l.source, l.target].sort() as [string, string]; + const key = JSON.stringify([a, b]); + let edge = pairs.get(key); + if (!edge) { + edge = { + source: a, + target: b, + forward: false, + reverse: false, + type: l.type || "wikilink", + }; + pairs.set(key, edge); + } + if (l.source === a) edge.forward = true; + else edge.reverse = true; + } + const degrees = new Map(); + for (const l of pairs.values()) { + degrees.set( + endpoint(l.source), + (degrees.get(endpoint(l.source)) || 0) + 1, + ); + degrees.set( + endpoint(l.target), + (degrees.get(endpoint(l.target)) || 0) + 1, + ); + } + fullNodes = [...visible.values()] + .filter((n) => settings.showOrphans || (degrees.get(n.id) || 0) > 0) + .map((n) => ({ ...n, degree: degrees.get(n.id) || 0 })); + fullLinks = [...pairs.values()]; + panel?.animationAvailable(fullNodes.some((n) => !!n.date)); + showGraph(fullNodes, fullLinks, 0.12); + } + function showGraph(rawNodes: RawNode[], links: GraphLink[], alpha = 0.12) { + if (!container) return; + const { w, h } = dimensions(); + const initialRadius = Math.max(50, Math.sqrt(rawNodes.length) * 15); + currentNodes = rawNodes.map((n, i) => { + let cached = cache.get(n.id); + if (!cached) { + const angle = (i * Math.PI * 2) / Math.max(1, rawNodes.length); + cached = { + ...n, + radius: radius(n.degree), + x: w / 2 + Math.cos(angle) * initialRadius, + y: h / 2 + Math.sin(angle) * initialRadius, + }; + cache.set(n.id, cached); + } + Object.assign(cached, n, { radius: radius(n.degree) }); + return cached; + }); + const ids = new Set(currentNodes.map((n) => n.id)); + currentLinks = links + .filter((l) => ids.has(endpoint(l.source)) && ids.has(endpoint(l.target))) + .map((l) => ({ + ...l, + source: endpoint(l.source), + target: endpoint(l.target), + })); + for (const [id, n] of cache) + if (!ids.has(id)) { + n.vx = 0; + n.vy = 0; + n.fx = null; + n.fy = null; + } + draw(alpha); + panel?.setEmpty(currentNodes.length === 0); + } + function draw(alpha: number) { + const d3 = window.d3; + const { w, h } = dimensions(); + if (!svg) { + svg = d3 + .select(container) + .append("svg") + .attr("width", "100%") + .attr("height", "100%") + .attr("viewBox", [0, 0, w, h]); + const defs = svg.append("defs"); + for (const [id, path, ref] of [ + ["end", "M0,-3L6,0L0,3", 6], + ["start", "M6,-3L0,0L6,3", 0], + ]) + defs + .append("marker") + .attr("id", `graph-arrow-${id}`) + .attr("viewBox", "0 -4 8 8") + .attr("markerWidth", 8) + .attr("markerHeight", 8) + .attr("refX", ref) + .attr("refY", 0) + .attr("orient", "auto") + .attr("markerUnits", "userSpaceOnUse") + .append("path") + .attr("d", path) + .attr("class", "graph-arrow"); + g = svg.append("g"); + g.append("g").attr("class", "graph-links"); + g.append("g").attr("class", "graph-nodes"); + zoom = d3 + .zoom() + .scaleExtent([0.1, 5]) + .on("zoom", (e: any) => { + g.attr("transform", e.transform); + updateLabels(); + }); + svg.call(zoom); + svg.call(zoom.transform, defaultTransform()); + } + container?.classList.remove("graph-dimmed"); + const initialLayout = !simulation; + if (!simulation) { + simulation = d3 + .forceSimulation(currentNodes) + .alpha(1) + .force( + "link", + d3.forceLink([]).id((n: GraphNode) => n.id), + ) + .force("charge", d3.forceManyBody()) + .force("x", d3.forceX(w / 2)) + .force("y", d3.forceY(h / 2)) + .force( + "collide", + d3.forceCollide().radius((n: GraphNode) => n.radius + 6), + ); + } + simulation.force("link").links([]); + simulation.nodes(currentNodes); + simulation.force("link").links(currentLinks); + updateForces(false); + linkSelection = g + .select(".graph-links") + .selectAll("line") + .data(currentLinks, (l: GraphLink) => + JSON.stringify([endpoint(l.source), endpoint(l.target)]), + ) + .join("line") + .attr("class", "graph-link"); + nodeSelection = g + .select(".graph-nodes") + .selectAll("g") + .data(currentNodes, (n: GraphNode) => n.id) + .join( + (enter: any) => { + const node = enter.append("g"); + node.append("circle"); + node.append("text"); + return node; + }, + (update: any) => update, + (exit: any) => { + exit.selectAll("*").interrupt("hover"); + return exit.remove(); + }, + ) + .on("mouseover", (_: any, n: GraphNode) => hover(n.id)) + .on("mouseout", () => hover(null)) + .on("click", (e: any, n: GraphNode) => { + if (e.defaultPrevented || !n.url) return; + if (n.isAttachment) window.open(n.url, "_blank", "noopener"); + else if (window.daybookNavigateTo) window.daybookNavigateTo(n.url); + else location.href = n.url; + }) + .call( + d3 + .drag() + .on("start", (e: any, n: GraphNode) => { + if (!simulation) return; + if (!e.active && !reduce()) simulation.alphaTarget(0.3).restart(); + n.fx = n.x; + n.fy = n.y; + }) + .on("drag", (e: any, n: GraphNode) => { + if (!simulation) return; + n.x = n.fx = e.x; + n.y = n.fy = e.y; + tick(); + }) + .on("end", (e: any, n: GraphNode) => { + if (!simulation) return; + if (!e.active) simulation.alphaTarget(0); + n.fx = null; + n.fy = null; + hover(null); + }), + ); + const center = new URLSearchParams(location.search).get("node"); + nodeSelection + .select("circle") + .attr( + "class", + (n: GraphNode) => + `graph-node${n.isTag ? " is-tag" : ""}${n.isAttachment ? " is-attachment" : ""}${!n.exists ? " is-missing" : ""}${n.id === center ? " is-center" : ""}`, + ); + nodeSelection + .select("text") + .attr("class", "graph-label") + .attr("text-anchor", "middle") + .text((n: GraphNode) => n.title); + (window as any).__graphNodes = nodeSelection; + simulation.on("tick", tick); + updateAppearance(); + if (reduce()) { + simulation.stop(); + if (initialLayout) simulation.alpha(1).tick(100); + tick(); + } else reheat(alpha); + } + function tick() { + if (!linkSelection) return; + linkSelection.each(function (this: SVGLineElement, l: GraphLink) { + const s = l.source as GraphNode, + t = l.target as GraphNode; + const dx = (t.x || 0) - (s.x || 0), + dy = (t.y || 0) - (s.y || 0), + length = Math.hypot(dx, dy) || 1; + const a = Math.min(length / 2, s.radius + 2), + b = Math.min(length / 2, t.radius + 2); + this.setAttribute("x1", String((s.x || 0) + (dx * a) / length)); + this.setAttribute("y1", String((s.y || 0) + (dy * a) / length)); + this.setAttribute("x2", String((t.x || 0) - (dx * b) / length)); + this.setAttribute("y2", String((t.y || 0) - (dy * b) / length)); + }); + nodeSelection.attr( + "transform", + (n: GraphNode) => `translate(${n.fx ?? n.x},${n.fy ?? n.y})`, + ); + } + function reheat(alpha: number) { + if (!simulation) return; + if (reduce()) { + simulation.stop(); + tick(); + } else simulation.alpha(Math.max(simulation.alpha(), alpha)).restart(); + } + function updateForces(restart = true) { + if (!simulation) return; + const counts = new Map(); + for (const l of currentLinks) + for (const n of [l.source, l.target]) + counts.set(endpoint(n), (counts.get(endpoint(n)) || 0) + 1); + simulation + .force("link") + .distance(settings.linkDistance) + .strength( + (l: GraphLink) => + settings.linkForce / + Math.max( + 1, + Math.min( + counts.get(endpoint(l.source)) || 1, + counts.get(endpoint(l.target)) || 1, + ), + ), + ); + simulation.force("charge").strength(-280 * settings.repelForce); + simulation.force("x").strength(0.05 * settings.centerForce); + simulation.force("y").strength(0.05 * settings.centerForce); + if (restart) { + if (reduce()) { + simulation.alpha(1).stop().tick(100); + tick(); + } else reheat(0.3); + } + } + function updateAppearance() { + if (!nodeSelection) return; + for (const n of currentNodes) n.radius = radius(n.degree); + updateNodeSize(nodeSelection); + linkSelection + .attr("stroke-width", settings.lineWidth) + .attr("marker-end", (l: GraphLink) => + settings.arrows && l.type === "wikilink" && l.forward + ? "url(#graph-arrow-end)" + : null, + ) + .attr("marker-start", (l: GraphLink) => + settings.arrows && l.type === "wikilink" && l.reverse + ? "url(#graph-arrow-start)" + : null, + ); + updateLabels(); + tick(); + } + function updateLabels() { + if (!svg || !nodeSelection) return; + const relative = + window.d3.zoomTransform(svg.node()).k / defaultTransform().k; + const threshold = 0.8 + settings.textFade * 0.6; + const important = Math.max( + 3, + (((raw.meta?.linkCount || 1) * 2) / + Math.max(1, raw.meta?.nodeCount || 1)) * + 1.5, + ); + nodeSelection + .select("text") + .style("opacity", function (this: Element, n: GraphNode) { + if (this.classList.contains("is-highlight")) return 1; + return relative >= threshold + ? 1 + : relative >= threshold * 0.6875 && n.degree >= important + ? 1 + : 0; + }); + } + function updateNodeSize(selection: any, animate = false) { + for (const [tag, attribute] of [["circle", "r"], ["text", "dy"]]) { + let elements = selection.select(tag).interrupt("hover"); + if (animate && !reduce()) + elements = elements + .transition("hover") + .duration(250) + .ease(window.d3.easeCubicOut); + elements.attr(attribute, function (this: Element, n: GraphNode) { + const hovered = this.classList.contains("is-hovered"); + const size = n.radius * (hovered ? 1.5 : 1); + return tag === "circle" ? size : size + (hovered ? 15 : 12); + }); + } + } + function hover(id: string | null) { + if (!nodeSelection) return; + container?.classList.toggle("graph-dimmed", id !== null); + const neighbors = new Set(); + if (id) { + neighbors.add(id); + for (const l of currentLinks) { + if (endpoint(l.source) === id) neighbors.add(endpoint(l.target)); + if (endpoint(l.target) === id) neighbors.add(endpoint(l.source)); + } + } + const resized = nodeSelection.filter(function (this: Element, n: GraphNode) { + return n.id === id || !!this.querySelector(".is-hovered"); + }); + nodeSelection + .selectAll("circle,text") + .classed("is-highlight", (n: GraphNode) => neighbors.has(n.id)) + .classed("is-hovered", (n: GraphNode) => n.id === id); + linkSelection.classed( + "is-highlight", + (l: GraphLink) => endpoint(l.source) === id || endpoint(l.target) === id, + ); + updateNodeSize(resized, true); + updateLabels(); + } + function stopAnimation(restoreGraph: boolean) { + const wasActive = animation !== "idle"; + cancelAnimationFrame(frame); + frame = 0; + animation = "idle"; + elapsed = 0; + lastBatch = -1; + panel?.animation("idle"); + if (restoreGraph && wasActive) showGraph(fullNodes, fullLinks); + } + function toggleAnimation() { + if (animation === "playing") { + stopAnimation(true); + return; + } + days = [ + ...new Set( + fullNodes.filter((n) => n.date).map((n) => n.date!.slice(0, 10)), + ), + ].sort(); + if (!days.length) return; + elapsed = 0; + lastBatch = -1; + animation = "playing"; + started = performance.now(); + panel?.animation(animation); + animationFrame(); + } + function animationFrame() { + if (animation !== "playing") return; + elapsed = Math.min(ANIMATION_DURATION_MS, performance.now() - started); + const batch = Math.min( + days.length - 1, + Math.floor((elapsed / ANIMATION_DURATION_MS) * days.length), + ); + if (batch !== lastBatch) { + lastBatch = batch; + const day = days[batch]!; + const ids = new Set( + fullNodes + .filter((n) => n.date && n.date.slice(0, 10) <= day) + .map((n) => n.id), + ); + const dated = new Set(ids); + const byID = new Map(fullNodes.map((n) => [n.id, n])); + for (const l of fullLinks) { + const a = endpoint(l.source), + b = endpoint(l.target); + if (dated.has(a) && !byID.get(b)?.date) ids.add(b); + if (dated.has(b) && !byID.get(a)?.date) ids.add(a); + } + showGraph( + fullNodes.filter((n) => ids.has(n.id)), + fullLinks, + ); + } + if (elapsed >= ANIMATION_DURATION_MS) { + animation = "idle"; + showGraph(fullNodes, fullLinks); + panel?.animation("idle"); + frame = 0; + } else frame = requestAnimationFrame(animationFrame); + } + window.DaybookGraph = { init, destroy }; +})(); diff --git a/assets/ts/heading-anchors.ts b/assets/ts/heading-anchors.ts new file mode 100644 index 00000000..04188e19 --- /dev/null +++ b/assets/ts/heading-anchors.ts @@ -0,0 +1,38 @@ +(function () { + function syncHeadingAnchors(root: Document | HTMLElement | null) { + (root || document).querySelectorAll(".post-content h1, .post-content h2, .post-content h3, .post-content h4, .memo-content h1, .memo-content h2, .memo-content h3, .memo-content h4").forEach(function (headingEl) { + const heading = headingEl as HTMLElement; + if (heading.dataset.headingAnchorReady === "true" || !heading.id) { + return; + } + + var label = heading.textContent?.trim() || "section"; + var anchor = document.createElement("a"); + anchor.className = "heading-anchor"; + anchor.href = "#" + heading.id; + + const lang = document.documentElement.lang; + if (lang.toLowerCase().startsWith("en")) { + anchor.setAttribute("aria-label", "Link to " + label); + } else { + anchor.setAttribute("aria-label", label + " 的永久链接"); + } + + var icon = document.createElement("span"); + icon.className = "material-symbol"; + icon.setAttribute("aria-hidden", "true"); + icon.textContent = "link_2"; + + anchor.appendChild(icon); + heading.appendChild(anchor); + heading.dataset.headingAnchorReady = "true"; + }); + } + + window.daybookSyncHeadingAnchors = function () { + syncHeadingAnchors(document); + }; + + document.addEventListener("daybook:page-load", window.daybookSyncHeadingAnchors); + document.addEventListener("daybook:article-content-swapped", window.daybookSyncHeadingAnchors); +})(); diff --git a/assets/ts/home-tooltips.ts b/assets/ts/home-tooltips.ts new file mode 100644 index 00000000..a8c53293 --- /dev/null +++ b/assets/ts/home-tooltips.ts @@ -0,0 +1,87 @@ +// Use the site's tooltip skin outside the home's scrolling cards so hints are +// never clipped by the README or contribution calendar. +export function initHomeTooltips(): void { + const tooltip = document.createElement("span"); + tooltip.id = "home-tooltip"; + tooltip.className = "floating-tooltip"; + tooltip.setAttribute("role", "tooltip"); + tooltip.setAttribute("aria-hidden", "true"); + document.body.append(tooltip); + let active: HTMLElement | null = null; + let previousDescription: string | null = null; + + function hide(): void { + tooltip.classList.remove("is-visible"); + tooltip.setAttribute("aria-hidden", "true"); + if (active) { + if (previousDescription === null) active.removeAttribute("aria-describedby"); + else active.setAttribute("aria-describedby", previousDescription); + } + active = null; + } + + function normalize(): void { + hide(); + // Upstream Markdown can contain native title attributes too. + document.querySelectorAll("[data-github-home] [title]").forEach(element => { + element.dataset.tooltip = element.getAttribute("title") || ""; + element.removeAttribute("title"); + }); + } + + function position(element: HTMLElement): void { + const target = element.getBoundingClientRect(); + if (target.bottom < 0 || target.top > innerHeight || target.right < 0 || target.left > innerWidth) { + hide(); + return; + } + const width = tooltip.offsetWidth; + const height = tooltip.offsetHeight; + const x = Math.max(8, Math.min(target.left + target.width / 2 - width / 2, innerWidth - width - 8)); + const below = target.bottom + 9; + const y = below + height <= innerHeight - 8 ? below : Math.max(8, target.top - height - 9); + tooltip.style.left = `${x}px`; + tooltip.style.top = `${y}px`; + } + + function show(element: HTMLElement): void { + const text = element.dataset.tooltip; + if (!text || element === active) return; + hide(); + active = element; + previousDescription = element.getAttribute("aria-describedby"); + element.setAttribute("aria-describedby", [previousDescription, tooltip.id].filter(Boolean).join(" ")); + tooltip.textContent = text; + position(element); + if (!active) return; + tooltip.setAttribute("aria-hidden", "false"); + tooltip.classList.add("is-visible"); + } + + const source = (target: EventTarget | null) => target instanceof Element + ? target.closest("[data-github-home] [data-tooltip]") : null; + document.addEventListener("pointerover", event => { + if (event.pointerType === "touch") return; + const element = source(event.target); + if (element) show(element); + }); + document.addEventListener("pointerout", event => { + if (active && source(event.target) === active && source(event.relatedTarget) !== active) hide(); + }); + document.addEventListener("focusin", event => { + const element = source(event.target); + if (element) show(element); + }); + document.addEventListener("focusout", event => { if (source(event.target) === active) hide(); }); + document.addEventListener("keydown", event => { if (event.key === "Escape") hide(); }); + const reposition = () => { + if (!active) return; + if (active.matches(":hover") || document.activeElement === active) position(active); + else hide(); + }; + document.addEventListener("scroll", reposition, true); + window.addEventListener("resize", reposition); + document.addEventListener("daybook:before-swap", hide); + document.addEventListener("daybook:page-load", normalize); + normalize(); +} diff --git a/assets/ts/image-loader.ts b/assets/ts/image-loader.ts new file mode 100644 index 00000000..0db22d7e --- /dev/null +++ b/assets/ts/image-loader.ts @@ -0,0 +1,56 @@ +// image-loader.ts + +export function setupImages() { + // Only target images inside article content or gallery, + // exclude Music cover images, logos, avatars + const contentImages = document.querySelectorAll('.markdown img, .gallery img'); + + contentImages.forEach((imgEl) => { + const img = imgEl as HTMLImageElement; + + // Ignore specific images we don't want to skeleton-load + if (img.classList.contains("music-cover")) return; + if (img.closest('.persistent-logo')) return; + if (img.closest('.side-nav-avatar')) return; + + if (img.dataset.embedStatus === "loading" || img.dataset.embedStatus === "ready" || img.dataset.embedStatus === "error") { + return; + } + + // If it's already completely loaded by the browser (e.g. from cache) + if (img.complete && img.naturalHeight > 0) { + img.dataset.embedStatus = "ready"; + return; + } + + img.dataset.embedStatus = "loading"; + + let isFinished = false; + + // We use a generous timeout for remote images + const timer = window.setTimeout(() => { + if (isFinished) return; + isFinished = true; + img.dataset.embedStatus = "error"; + // We don't want to hide the image if it times out, the browser broken image icon is okay, + // but we could set an error SVG if we wanted. For now, just mark it error. + }, 20000); + + const onReady = () => { + if (isFinished) return; + isFinished = true; + window.clearTimeout(timer); + img.dataset.embedStatus = "ready"; + }; + + const onError = () => { + if (isFinished) return; + isFinished = true; + window.clearTimeout(timer); + img.dataset.embedStatus = "error"; + }; + + img.addEventListener("load", onReady); + img.addEventListener("error", onError); + }); +} diff --git a/assets/ts/katex-loader.ts b/assets/ts/katex-loader.ts new file mode 100644 index 00000000..037a4b00 --- /dev/null +++ b/assets/ts/katex-loader.ts @@ -0,0 +1,54 @@ +function setupKatex() { + const mathElements = document.querySelectorAll('.math-inline, .math-display'); + if (mathElements.length === 0) return; + + if (!(window as any).katex) { + if ((window as any).katexLoading) return; + (window as any).katexLoading = true; + const script = document.createElement('script'); + script.src = '/vendor/katex/katex.js'; + script.onload = () => { + (window as any).katexLoading = false; + renderAllMath(document.querySelectorAll('.math-inline, .math-display')); + }; + document.head.appendChild(script); + + // Initial rendering and SPA navigation already install the hashed sheet. + // Keep the fallback for math inserted dynamically without a page stylesheet. + if (!document.querySelector('link[rel="stylesheet"][href*="/vendor/katex/katex.min."]')) { + const link = document.createElement('link'); + link.rel = 'stylesheet'; + link.href = '/vendor/katex/katex.min.css'; + document.head.appendChild(link); + } + } else { + renderAllMath(mathElements); + } +} + +function renderAllMath(elements: NodeListOf) { + const katex = (window as any).katex; + elements.forEach((el) => { + if (el.getAttribute('data-rendered') === 'true') return; + const tex = el.textContent || ''; + const isDisplay = el.classList.contains('math-display'); + const rawTex = isDisplay ? tex.replace(/^\$\$/, '').replace(/\$\$$/, '') : tex.replace(/^\\\(/, '').replace(/\\\)$/, ''); + try { + katex.render(rawTex, el as HTMLElement, { + displayMode: isDisplay, + throwOnError: false + }); + el.setAttribute('data-rendered', 'true'); + } catch (e) { + console.error('KaTeX render error:', e); + } + }); +} + +document.addEventListener('daybook:page-load', () => { + setupKatex(); +}); + +document.addEventListener('daybook:article-content-swapped', () => { + setupKatex(); +}); diff --git a/assets/ts/lightbox.ts b/assets/ts/lightbox.ts new file mode 100644 index 00000000..b52278bd --- /dev/null +++ b/assets/ts/lightbox.ts @@ -0,0 +1,275 @@ +(function () { + type State = "idle" | "opening" | "open" | "switching" | "closing"; + type Frame = { left: number; top: number; width: number; height: number }; + + class LightboxController { + private state: State = "idle"; + private overlay = document.createElement("div"); + private image: HTMLImageElement | null = null; + private original: HTMLImageElement | null = null; + private originalVisibility = ""; + private images: HTMLImageElement[] = []; + private index = 0; + private generation = 0; + private previousOverflow = ""; + private returnFocus: HTMLElement | null = null; + private inertElements: HTMLElement[] = []; + private frame: Frame = { left: 0, top: 0, width: 0, height: 0 }; + private zoom = 1; + private pan = { x: 0, y: 0 }; + private pointer: { id: number; x: number; y: number; panX: number; panY: number } | null = null; + private prev: HTMLButtonElement; + private next: HTMLButtonElement; + private closer: HTMLButtonElement; + private zoomButton: HTMLButtonElement; + private status = document.createElement("div"); + private caption = document.createElement("div"); + private failed = false; + private tap: { id: number; x: number; y: number; image: HTMLImageElement } | null = null; + + constructor() { + this.overlay.className = "zoom-overlay"; + this.overlay.setAttribute("role", "dialog"); + this.overlay.setAttribute("aria-modal", "true"); + this.overlay.tabIndex = -1; + const button = (name: string, icon: string, action: () => void) => { + const el = document.createElement("button"); + el.type = "button"; el.className = `zoom-control zoom-${name}`; + const symbol = document.createElement("span"); + symbol.className = "material-symbol"; symbol.setAttribute("aria-hidden", "true"); symbol.textContent = icon; + el.append(symbol); el.addEventListener("click", action); this.overlay.append(el); return el; + }; + this.prev = button("previous", "chevron_left", () => void this.navigate(this.index - 1)); + this.next = button("next", "chevron_right", () => void this.navigate(this.index + 1)); + this.closer = button("close", "close", () => void this.close()); + this.zoomButton = button("toggle", "zoom_in", () => this.setZoom(this.zoom > 1 ? 1 : 2)); + this.status.className = "zoom-status"; + this.status.setAttribute("role", "status"); this.status.setAttribute("aria-live", "polite"); + this.caption.className = "zoom-caption"; + this.overlay.append(this.status, this.caption); + document.body.append(this.overlay); + this.labels(); + document.addEventListener("click", event => this.openFromClick(event)); + // Touch taps should not depend on a browser-delayed compatibility click. + document.addEventListener("pointerdown", event => { + this.tap = this.state === "idle" && event.pointerType === "touch" && event.isPrimary && event.target instanceof HTMLImageElement + ? { id: event.pointerId, x: event.clientX, y: event.clientY, image: event.target } : null; + }); + document.addEventListener("pointermove", event => { + if (this.tap?.id === event.pointerId && Math.hypot(event.clientX - this.tap.x, event.clientY - this.tap.y) > 10) this.tap = null; + }, { passive: true }); + document.addEventListener("pointercancel", () => { this.tap = null; }); + document.addEventListener("pointerup", event => { + const tap = this.tap; this.tap = null; + if (tap?.id === event.pointerId && tap.image === event.target) this.openFromClick(event); + }); + document.addEventListener("keydown", event => this.keydown(event), true); + this.overlay.addEventListener("click", event => { if (event.target === this.overlay) void this.close(); }); + this.overlay.addEventListener("dblclick", event => { if (event.target === this.image) { event.preventDefault(); this.setZoom(this.zoom > 1 ? 1 : 2); } }); + this.overlay.addEventListener("wheel", event => { + event.preventDefault(); + if (this.state === "open") this.setZoom(this.zoom * Math.exp(-event.deltaY * .002)); + }, { passive: false }); + this.overlay.addEventListener("pointerdown", event => { + if (event.target !== this.image || this.state !== "open" || event.button !== 0 || !event.isPrimary) return; + this.pointer = { id: event.pointerId, x: event.clientX, y: event.clientY, panX: this.pan.x, panY: this.pan.y }; + this.image!.setPointerCapture(event.pointerId); + }); + this.overlay.addEventListener("pointermove", event => { + if (!this.pointer || this.pointer.id !== event.pointerId || this.zoom === 1) return; + this.pan = { x: this.pointer.panX + event.clientX - this.pointer.x, y: this.pointer.panY + event.clientY - this.pointer.y }; + this.applyZoom(); + }); + this.overlay.addEventListener("pointerup", event => { + const pointer = this.pointer; this.pointer = null; + if (!pointer || pointer.id !== event.pointerId) return; + if (this.image?.hasPointerCapture(event.pointerId)) this.image.releasePointerCapture(event.pointerId); + const dx = event.clientX - pointer.x, dy = event.clientY - pointer.y; + if (this.zoom === 1 && Math.abs(dx) > 50 && Math.abs(dx) > Math.abs(dy) * 1.5) void this.navigate(this.index + (dx < 0 ? 1 : -1)); + }); + this.overlay.addEventListener("pointercancel", () => { this.pointer = null; }); + window.addEventListener("resize", () => { + if (this.state === "open" && this.original) { this.frame = this.fit(this.original); this.place(this.frame); this.setZoom(1); } + else if (this.state !== "idle") this.cleanup(); + }); + for (const name of ["daybook:before-swap", "daybook:page-load", "daybook:article-content-swapped"]) document.addEventListener(name, () => this.cleanup()); + document.addEventListener("daybook:lang-change", () => this.labels()); + window.addEventListener("beforeunload", () => this.cleanup()); + } + + private english() { return document.documentElement.lang.startsWith("en"); } + private labels() { + const en = this.english(); + this.overlay.setAttribute("aria-label", en ? "Image viewer" : "图片�览器"); + for (const [button, label] of [[this.prev, en ? "Previous image (�)" : "上一张(�)"], [this.next, en ? "Next image (→)" : "下一张(→)"], [this.closer, en ? "Close (Esc)" : "关闭(Esc)"], [this.zoomButton, this.zoom > 1 ? (en ? "Fit image (0)" : "适应窗�(0)") : (en ? "Zoom in (+)" : "放大(+)")]] as const) { + button.setAttribute("aria-label", label); button.dataset.tooltip = label; + } + this.zoomButton.firstElementChild!.textContent = this.zoom > 1 ? "zoom_out" : "zoom_in"; + this.zoomButton.setAttribute("aria-pressed", String(this.zoom > 1)); + this.prev.disabled = this.index <= 0; + this.next.disabled = this.index >= this.images.length - 1; + this.status.textContent = this.failed ? (en ? "Image unavailable. Try another image." : "图片暂时无法加载,�切�其他图片。") : `${this.index + 1} / ${this.images.length}`; + } + private eligible(img: HTMLImageElement) { + return !img.closest('a[href], .embed-card, .music-custom-player, .katex') && !img.matches('.no-lightbox, [data-no-lightbox="true"]'); + } + private openFromClick(event: MouseEvent) { + const img = event.target; + if (this.state !== "idle" || !(img instanceof HTMLImageElement) || !img.closest(".post-content, .memo-content") || !this.eligible(img)) return; + if (!img.complete || img.naturalWidth < 100 || img.naturalHeight < 100) return; + event.preventDefault(); void this.open(img); + } + private reducedMotion() { + return document.documentElement.dataset.reducedMotion === "true" || matchMedia("(prefers-reduced-motion: reduce)").matches; + } + private async animate(element: HTMLElement, frames: Keyframe[], duration = 260) { + try { + const animation = element.animate(frames, { duration: this.reducedMotion() ? 0 : duration, easing: "cubic-bezier(.22, .61, .36, 1)", fill: "forwards" }); + await animation.finished.catch(() => {}); + } catch { /* The caller applies the final frame when animations are unavailable. */ } + } + private fit(img: HTMLImageElement): Frame { + const width = innerWidth < 768 ? innerWidth - 24 : innerWidth * .8; + const height = Math.min(innerHeight * .8, innerHeight - 144); + const scale = Math.min(width / img.naturalWidth, Math.max(80, height) / img.naturalHeight); + return { width: img.naturalWidth * scale, height: img.naturalHeight * scale, left: (innerWidth - img.naturalWidth * scale) / 2, top: (innerHeight - img.naturalHeight * scale) / 2 }; + } + private styleFrame(frame: Frame): Record { + return { left: `${frame.left}px`, top: `${frame.top}px`, width: `${frame.width}px`, height: `${frame.height}px` }; + } + private place(frame: Frame) { + if (!this.image) return; + this.image.getAnimations().forEach(animation => animation.cancel()); + Object.assign(this.image.style, this.styleFrame(frame), { clipPath: "none", objectFit: "contain", transform: "none" }); + } + private restoreOriginal() { + if (this.original) this.original.style.visibility = this.originalVisibility; + } + private clone(img: HTMLImageElement) { + this.restoreOriginal(); this.image?.remove(); + this.original = img; this.originalVisibility = img.style.visibility; + this.image = img.cloneNode() as HTMLImageElement; + for (const attr of ["id", "style", "width", "height", "loading", "tabindex", "role"]) this.image.removeAttribute(attr); + this.image.className = "zoom-img"; this.image.draggable = false; + this.overlay.append(this.image); img.style.visibility = "hidden"; + this.zoom = 1; this.pan = { x: 0, y: 0 }; this.pointer = null; this.failed = false; + this.caption.textContent = img.closest("figure")?.querySelector("figcaption")?.textContent || img.alt; + this.labels(); + } + private async open(img: HTMLImageElement) { + if (!this.overlay.isConnected) document.body.append(this.overlay); + this.state = "opening"; const generation = ++this.generation; + this.images = Array.from(img.closest(".post-content, .memo-content")!.querySelectorAll("img")).filter(image => this.eligible(image) && (!image.complete || (image.naturalWidth >= 100 && image.naturalHeight >= 100))); + this.index = this.images.indexOf(img); + this.returnFocus = document.activeElement instanceof HTMLElement ? document.activeElement : img; + if (this.returnFocus === document.body) this.returnFocus = img; + this.previousOverflow = document.body.style.overflow; + document.body.style.overflow = "hidden"; + for (const child of document.body.children) { + if (child instanceof HTMLElement && child !== this.overlay && !child.inert) { child.inert = true; this.inertElements.push(child); } + } + const rect = img.getBoundingClientRect(); + const gallery = img.closest(".md-carousel-item"); + const mask = gallery ? Math.max(0, (rect.width - gallery.getBoundingClientRect().width) / 2) : 0; + const crop = `inset(0 ${mask}px round ${gallery ? getComputedStyle(gallery).borderRadius : "0px"})`; + this.clone(img); + Object.assign(this.image!.style, this.styleFrame(rect), { clipPath: crop, objectFit: "cover" }); + this.overlay.style.display = "block"; this.overlay.style.opacity = "1"; + this.overlay.setAttribute("aria-busy", "true"); + this.overlay.focus({ preventScroll: true }); + this.frame = this.fit(img); + // Preserve the cropped gallery surface during the opening transition. + await this.animate(this.image!, [{ ...this.styleFrame(rect), clipPath: crop }, { ...this.styleFrame(this.frame), clipPath: "inset(0 0px round 0px)" }]); + if (generation !== this.generation || this.state !== "opening") return; + this.place(this.frame); this.state = "open"; this.overlay.setAttribute("aria-busy", "false"); + } + private async navigate(index: number) { + if (this.state !== "open" || index < 0 || index >= this.images.length || index === this.index) return; + this.state = "switching"; const generation = ++this.generation; + const img = this.images[index]!; + this.overlay.setAttribute("aria-busy", "true"); + let timer = 0; + try { + img.loading = "eager"; + await Promise.race([img.decode(), new Promise((_, reject) => { timer = window.setTimeout(() => reject(new Error("Image loading timed out")), 10000); })]); + } catch { + if (generation === this.generation && this.state === "switching") { this.index = index; this.failed = true; this.labels(); this.state = "open"; this.overlay.setAttribute("aria-busy", "false"); } + return; + } finally { clearTimeout(timer); } + if (generation !== this.generation || this.state !== "switching") return; + this.index = index; this.clone(img); this.frame = this.fit(img); this.place(this.frame); + await this.animate(this.image!, [{ opacity: 0 }, { opacity: 1 }], 160); + if (generation !== this.generation || this.state !== "switching") return; + this.image!.getAnimations().forEach(animation => animation.cancel()); + this.state = "open"; this.overlay.setAttribute("aria-busy", "false"); + } + private setZoom(value: number) { + if (this.state !== "open") return; + this.zoom = Math.max(1, Math.min(4, value)); + this.applyZoom(); this.labels(); + } + private applyZoom() { + const limitX = Math.max(0, (this.frame.width * this.zoom - innerWidth + 24) / 2); + const limitY = Math.max(0, (this.frame.height * this.zoom - innerHeight + 100) / 2); + this.pan.x = Math.max(-limitX, Math.min(limitX, this.pan.x)); + this.pan.y = Math.max(-limitY, Math.min(limitY, this.pan.y)); + if (this.image) { + this.image.style.transform = `translate3d(${this.pan.x}px, ${this.pan.y}px, 0) scale(${this.zoom})`; + this.image.style.cursor = this.zoom > 1 ? "grab" : "zoom-in"; + } + } + private async close() { + if (this.state === "idle" || this.state === "closing") return; + this.state = "closing"; const generation = ++this.generation; + if (this.image && this.original) { + const from = this.image.getBoundingClientRect(); + const to = this.original.getBoundingClientRect(); + const visible = to.width > 0 && to.height > 0 && to.bottom > 0 && to.top < innerHeight; + const gallery = this.original.closest(".md-carousel-item"); + const mask = gallery ? Math.max(0, (to.width - gallery.getBoundingClientRect().width) / 2) : 0; + const crop = `inset(0 ${mask}px round ${gallery ? getComputedStyle(gallery).borderRadius : "0px"})`; + this.place(from); + if (visible) await this.animate(this.image, [{ ...this.styleFrame(from), clipPath: "inset(0 0px round 0px)" }, { ...this.styleFrame(to), clipPath: crop }]); + else await this.animate(this.image, [{ opacity: 1 }, { opacity: 0 }], 160); + } + if (generation === this.generation) this.cleanup(); + } + private cleanup() { + if (this.state === "idle") return; + ++this.generation; + this.image?.getAnimations().forEach(animation => animation.cancel()); + this.image?.remove(); this.restoreOriginal(); + this.overlay.style.display = "none"; this.overlay.style.opacity = "0"; this.overlay.removeAttribute("aria-busy"); + for (const element of this.inertElements) element.inert = false; + this.inertElements = []; document.body.style.overflow = this.previousOverflow; + const target = this.returnFocus; + if (target?.isConnected) { + const tabindex = target.getAttribute("tabindex"); + if (tabindex === null) target.tabIndex = -1; + target.focus({ preventScroll: true }); + if (tabindex === null) target.removeAttribute("tabindex"); + } + this.image = null; this.original = null; this.pointer = null; this.tap = null; this.images = []; this.state = "idle"; + } + private keydown(event: KeyboardEvent) { + if (this.state === "idle") return; + if (["Escape", "ArrowLeft", "ArrowRight", "Home", "End", "+", "=", "-", "0", "Tab"].includes(event.key)) { + event.preventDefault(); event.stopImmediatePropagation(); + if (event.key === "Escape") void this.close(); + else if (event.key === "ArrowLeft") void this.navigate(this.index - 1); + else if (event.key === "ArrowRight") void this.navigate(this.index + 1); + else if (event.key === "Home") void this.navigate(0); + else if (event.key === "End") void this.navigate(this.images.length - 1); + else if (event.key === "+" || event.key === "=") this.setZoom(this.zoom + .5); + else if (event.key === "-") this.setZoom(this.zoom - .5); + else if (event.key === "0") this.setZoom(1); + else { + const buttons = Array.from(this.overlay.querySelectorAll("button:not(:disabled)")); + const current = buttons.indexOf(document.activeElement as HTMLButtonElement); + buttons[(current + (event.shiftKey ? -1 : 1) + buttons.length) % buttons.length]?.focus(); + } + } + } + } + new LightboxController(); +})(); diff --git a/assets/ts/liquid-cursor.ts b/assets/ts/liquid-cursor.ts new file mode 100644 index 00000000..c29e8ffb --- /dev/null +++ b/assets/ts/liquid-cursor.ts @@ -0,0 +1,93 @@ +import { liquidLoopFrames } from './generated/liquid-loop-frames'; + +// Matches the liquid/core transitions in custom-cursor.css. +const TRANSITION_MS = 300; + +/** Plays while busy or fading out. Pointer movement uses a separate RAF. */ +export class LiquidCursor { + readonly element: SVGSVGElement; + private path: SVGPathElement; + private raf = 0; + private started = 0; + private lastFrame = -1; + private exitTimer = 0; + private settleTimer = 0; + private enteredAt = 0; + + constructor() { + this.element = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); + this.element.classList.add('daybook-cursor__liquid'); + this.element.setAttribute('viewBox', '-140 -140 280 280'); + this.element.setAttribute('aria-hidden', 'true'); + this.path = document.createElementNS(this.element.namespaceURI, 'path') as SVGPathElement; + this.element.append(this.path); + this.reset(); + } + + start() { + window.clearTimeout(this.settleTimer); + this.settleTimer = 0; + window.clearTimeout(this.exitTimer); + this.exitTimer = 0; + const cursor = this.element.parentElement; + if (!cursor?.classList.contains('is-loading')) { + this.enteredAt = performance.now(); + cursor?.classList.add('is-loading'); + } + if (this.raf) return; + this.started = performance.now(); + this.lastFrame = -1; + this.raf = requestAnimationFrame(this.tick); + } + + private tick = (now: number) => { + const elapsed = now - this.started; + // Grow the resting dot first; begin at the first active pose afterwards. + const frame = elapsed < TRANSITION_MS ? 0 : (24 + Math.floor((elapsed - TRANSITION_MS) / 30)) % liquidLoopFrames.length; + if (frame !== this.lastFrame) { + this.path.setAttribute('d', liquidLoopFrames[frame]!); + this.lastFrame = frame; + } + this.raf = requestAnimationFrame(this.tick); + }; + + stop(immediate = false) { + if (immediate) { + this.reset(); + return; + } + window.clearTimeout(this.settleTimer); + // Finish an already-visible entrance without holding up navigation. + const remaining = Math.max(0, TRANSITION_MS - (performance.now() - this.enteredAt)); + if (remaining > 0) { + this.settleTimer = window.setTimeout(() => this.fadeOut(), remaining); + } else { + this.fadeOut(); + } + } + + private fadeOut() { + this.settleTimer = 0; + this.element.parentElement?.classList.remove('is-loading'); + // Keep the current loop alive through the CSS shrink/fade. A new request + // can reverse that transition without resetting the visible silhouette. + window.clearTimeout(this.exitTimer); + this.exitTimer = window.setTimeout(() => this.reset(), TRANSITION_MS); + } + + reset() { + window.clearTimeout(this.settleTimer); + this.settleTimer = 0; + window.clearTimeout(this.exitTimer); + this.exitTimer = 0; + cancelAnimationFrame(this.raf); + this.raf = 0; + this.element.parentElement?.classList.remove('is-loading'); + this.path.setAttribute('d', liquidLoopFrames[0]!); + } + + destroy() { + this.reset(); + this.element.remove(); + } +} diff --git a/assets/ts/memo-engagement.ts b/assets/ts/memo-engagement.ts new file mode 100644 index 00000000..81fa982e --- /dev/null +++ b/assets/ts/memo-engagement.ts @@ -0,0 +1,110 @@ +import { updateNumber } from "./number-flip"; +// Read-only counts for visible posts. Likes remain independent of giscus. +type CommentCount = { count: number; expires: number }; +const comments = new Map(); +let lifetime: AbortController | null = null; +let observer: IntersectionObserver | null = null; +const normalize = (path: string) => decodeURI(new URL(path, location.origin).pathname); +const keyFor = (link: HTMLElement) => JSON.stringify([link.dataset.commentRepo, link.dataset.commentCategory, link.dataset.commentPath]); +const validCount = (value: unknown): value is number => Number.isSafeInteger(value) && Number(value) >= 0; + +async function loadComments(link: HTMLElement, signal: AbortSignal): Promise { + if (document.documentElement.dataset.commentsDisabled === 'true') return; + const key = keyFor(link); + let cached = comments.get(key); + if (!cached || cached.expires <= Date.now()) { + // This is giscus's public read endpoint, using the same strict path mapping + // as the widget. No session, credentials, reactions or write calls are sent. + const query = new URLSearchParams({ + repo: link.dataset.commentRepo || '', category: link.dataset.commentCategory || '', + term: link.dataset.commentPath || '', strict: 'true', number: '0', first: '1', + }); + const response = await fetch(`https://giscus.app/api/discussions?${query}`, { + credentials: 'omit', signal: AbortSignal.any([signal, AbortSignal.timeout(8000)]), + }); + const data = await response.json(); + let count; + if (response.status === 404 && data.error === 'Discussion not found') count = 0; + else if (response.ok && validCount(data.discussion?.totalCommentCount) && validCount(data.discussion?.totalReplyCount)) { + count = data.discussion.totalCommentCount + data.discussion.totalReplyCount; + } else return; // Unknown is displayed as a dash, never a fabricated zero. + if (signal.aborted) return; + // Metadata from the live widget may be newer than this in-flight read. + cached = comments.get(key) !== cached ? comments.get(key) : { count, expires: Date.now() + 60000 }; + if (!cached) cached = { count, expires: Date.now() + 60000 }; + if (comments.size >= 500) comments.clear(); + comments.set(key, cached); + } + if (!signal.aborted && link.isConnected) updateNumber(link.querySelector('[data-comment-count]')!, cached.count.toLocaleString()); +} + +async function loadViews(element: HTMLElement, signal: AbortSignal): Promise { + const query = new URLSearchParams({ path: element.dataset.path || '' }); + const response = await fetch(`/api/stats?${query}`, { signal: AbortSignal.any([signal, AbortSignal.timeout(8000)]) }); + if (!response.ok) return; + const data = await response.json(); + if (!signal.aborted && element.isConnected && validCount(data.pageViews) && normalize(data.path) === normalize(element.dataset.path!)) { + updateNumber(element, data.pageViews.toLocaleString()); + } +} + +export function initMemoEngagement(): void { + lifetime?.abort(); + observer?.disconnect(); + const controller = new AbortController(); + lifetime = controller; + const tasks: (() => Promise)[] = []; + let active = 0; + const drain = () => { + if (controller.signal.aborted) return; + while (active < 3 && tasks.length) { + const task = tasks.shift()!; + active++; + void task().catch(() => {}).finally(() => { active--; drain(); }); + } + }; + const schedule = (post: Element) => { + const link = post.querySelector('[data-comment-path]'); + if (link) tasks.push(() => loadComments(link, controller.signal)); + // Detail views are populated by the existing page-hit response. Reading + // timeline counts must not record a hit on every visible memo. + if (post.hasAttribute('data-memo-card')) { + const views = post.querySelector('[data-memo-views]'); + if (views) tasks.push(() => loadViews(views, controller.signal)); + } + drain(); + }; + observer = new IntersectionObserver(entries => { + for (const entry of entries) if (entry.isIntersecting) { observer?.unobserve(entry.target); schedule(entry.target); } + }, { rootMargin: '160px' }); + document.querySelectorAll('.memo-card, .note-header').forEach(post => observer!.observe(post)); +} + +document.addEventListener('daybook:before-swap', () => { lifetime?.abort(); observer?.disconnect(); }); +document.addEventListener('daybook:settings-change', initMemoEngagement); +document.addEventListener('daybook:comments-loaded', event => { + const { path, count } = (event as CustomEvent<{ path: string; count: number }>).detail; + if (!validCount(count)) return; + for (const link of document.querySelectorAll('[data-comment-path]')) { + if (link.dataset.commentPath !== path) continue; + comments.set(keyFor(link), { count, expires: Date.now() + 60000 }); + updateNumber(link.querySelector('[data-comment-count]')!, count.toLocaleString()); + } +}); + +// On the detail page, jump to comments without creating a native hash history +// entry outside the SPA router (the same convention as the mobile TOC). +document.addEventListener('click', event => { + if (event.defaultPrevented || event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return; + const link = (event.target as Element).closest('a[data-comment-path]'); + if (!link) return; + const url = new URL(link.href); + if (url.pathname !== location.pathname || url.search !== location.search) return; + const section = document.getElementById('comments'); + if (!section) return; + event.preventDefault(); + if (window.daybookReplaceURL) window.daybookReplaceURL(url.href); + else history.replaceState(history.state, '', url.href); + section.scrollIntoView({ behavior: 'instant' }); + section.focus({ preventScroll: true }); +}); diff --git a/assets/ts/memos.ts b/assets/ts/memos.ts new file mode 100644 index 00000000..516a8a02 --- /dev/null +++ b/assets/ts/memos.ts @@ -0,0 +1,336 @@ +import { updateNumber } from "./number-flip"; +(() => { + interface Memo { + element: HTMLElement; + date: string; + search: string; + tags: string[]; + } + interface Filters { q: string; tag: string[]; date: string[]; month: string; } + let page: HTMLElement | null = null; + let memos: Memo[] = []; + let filters: Filters = { q: '', tag: [], date: [], month: '' }; + let calendarMonth = ''; + let inputTimer = 0; + const english = () => document.documentElement.lang.startsWith('en'); + const storageKey = () => `daybook:memos:${location.pathname}`; + const monthOf = (date: string) => date.slice(0, 7); + const monthDate = (month: string) => new Date(Number(month.slice(0, 4)), Number(month.slice(5, 7)) - 1, 1); + const monthString = (date: Date) => `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}`; + const normalize = (text: string) => text.toLocaleLowerCase(); + + function readFilters(): Filters { + const params = new URLSearchParams(location.search); + return { q: params.get('q') || '', tag: [...new Set(params.getAll('tag').filter(Boolean))], date: [...new Set(params.getAll('date').filter(Boolean))], month: params.get('month') || '' }; + } + function saveFilters() { + const url = new URL(location.href); + Object.entries(filters).forEach(([key, value]) => { + url.searchParams.delete(key); + (Array.isArray(value) ? value : [value]).filter(Boolean).forEach(item => url.searchParams.append(key, item)); + }); + if (window.daybookReplaceURL) window.daybookReplaceURL(url.href); + else history.replaceState(history.state, '', url); + try { sessionStorage.setItem(storageKey(), JSON.stringify({ ...filters, calendarMonth })); } catch { /* Storage may be unavailable. */ } + } + function includesQuery(memo: Memo) { + return !filters.q || memo.search.includes(normalize(filters.q.trim())); + } + function matches(memo: Memo, includeDate = true) { + return includesQuery(memo) && (!filters.tag.length || filters.tag.some(tag => memo.tags.includes(tag))) && + (!includeDate || ((!filters.date.length || filters.date.includes(memo.date)) && (!filters.month || monthOf(memo.date) === filters.month))); + } + + // Ranges highlight text in place, preserving embeds, links, and Markdown DOM. + function highlightMatches() { + document.querySelectorAll('mark.memo-search-highlight').forEach(mark => { + const parent = mark.parentNode; + mark.replaceWith(document.createTextNode(mark.textContent || '')); + parent?.normalize(); + }); + const css = CSS as unknown as { highlights?: Map }; + css.highlights?.delete('memo-search'); + const query = normalize(filters.q.trim()); + if (!query) return; + const ranges: Range[] = []; + const fallbacks: { node: Text; start: number; end: number }[] = []; + memos.filter(memo => !memo.element.hidden).forEach(memo => { + const walker = document.createTreeWalker(memo.element, NodeFilter.SHOW_TEXT, { + acceptNode(node) { + const parent = node.parentElement; + return parent && !parent.closest('script, style, textarea, [hidden], [data-memo-overflow], .katex, .mermaid-block, svg') + ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT; + } + }); + const nodes: { node: Text; offset: number }[] = []; + let text = ''; + while (walker.nextNode()) { + const node = walker.currentNode as Text; + nodes.push({ node, offset: text.length }); + text += node.data; + } + const lowerText = normalize(text); + let start = lowerText.indexOf(query); + while (start !== -1) { + const end = start + query.length; + const first = nodes.find(item => item.offset + item.node.length > start); + const last = nodes.find(item => item.offset + item.node.length >= end); + if (first && last) { + const range = document.createRange(); + range.setStart(first.node, start - first.offset); + range.setEnd(last.node, end - last.offset); + ranges.push(range); + nodes.filter(item => item.offset < end && item.offset + item.node.length > start).forEach(item => { + fallbacks.push({ node: item.node, start: Math.max(0, start - item.offset), end: Math.min(item.node.length, end - item.offset) }); + }); + } + start = lowerText.indexOf(query, end); + } + }); + const HighlightConstructor = (window as unknown as { Highlight?: new (...ranges: Range[]) => unknown }).Highlight; + if (css.highlights && HighlightConstructor) css.highlights.set('memo-search', new HighlightConstructor(...ranges)); + else fallbacks.reverse().forEach(({ node, start, end }) => { + const text = node.splitText(start); + text.splitText(end - start); + const mark = document.createElement('mark'); + mark.className = 'memo-search-highlight'; + text.replaceWith(mark); + mark.append(text); + }); + } + + function renderCalendar() { + if (!calendarMonth) return; + const date = monthDate(calendarMonth); + const counts = new Map(); + memos.filter(memo => matches(memo, false)).forEach(memo => counts.set(memo.date, (counts.get(memo.date) || 0) + 1)); + const allMonths = memos.map(memo => monthOf(memo.date)).filter(Boolean).sort(); + const firstMonth = allMonths[0] || calendarMonth; + const lastMonth = allMonths[allMonths.length - 1] || calendarMonth; + document.querySelectorAll('[data-memos-filters]').forEach(panel => { + const label = panel.querySelector('[data-memos-month-label]'); + if (label) { + label.textContent = date.toLocaleDateString(english() ? 'en-US' : 'zh-CN', { year: 'numeric', month: 'long' }); + label.setAttribute('aria-pressed', String(filters.month === calendarMonth)); + } + panel.querySelectorAll('[data-memos-month]').forEach(button => { + button.disabled = Number(button.dataset.memosMonth) < 0 ? calendarMonth <= firstMonth : calendarMonth >= lastMonth; + }); + const grid = panel.querySelector('[data-memos-calendar]'); + if (!grid) return; + grid.replaceChildren(); + const weekdays = english() ? ['S', 'M', 'T', 'W', 'T', 'F', 'S'] : ['日', '一', '二', '三', '四', '五', '六']; + weekdays.forEach(day => { const el = document.createElement('span'); el.className = 'memos-weekday'; el.textContent = day; grid.append(el); }); + for (let i = 0; i < date.getDay(); i++) { const el = document.createElement('span'); el.setAttribute('aria-hidden', 'true'); grid.append(el); } + const days = new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate(); + for (let day = 1; day <= days; day++) { + const key = `${calendarMonth}-${String(day).padStart(2, '0')}`; + const count = counts.get(key) || 0; + const el = document.createElement(count ? 'button' : 'span'); + el.textContent = String(day); + if (el instanceof HTMLButtonElement) { + el.type = 'button'; + el.dataset.memosDate = key; + el.setAttribute('aria-pressed', String(filters.date.includes(key))); + el.setAttribute('aria-label', english() ? `${key}, ${count} memos` : `${key},${count} ��记`); + el.title = el.getAttribute('aria-label') || ''; + } + grid.append(el); + } + }); + } + function renderTags() { + const counts = new Map(); + memos.forEach(memo => memo.tags.forEach(tag => counts.set(tag, (counts.get(tag) || 0) + 1))); + document.querySelectorAll('[data-memos-tags]').forEach(container => { + container.replaceChildren(); + if (!counts.size) { container.textContent = english() ? 'No tags' : '暂无标签'; return; } + [...counts].sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0])).forEach(([tag, count]) => { + const button = document.createElement('button'); + button.type = 'button'; button.dataset.memoTag = tag; button.setAttribute('aria-pressed', String(filters.tag.includes(tag))); + const label = document.createElement('span'); label.textContent = `#${tag}`; + const number = document.createElement('small'); number.textContent = String(count); + button.append(label, number); container.append(button); + }); + }); + } + function applyFilters(persist = true) { + if (!page) return; + const focused = document.activeElement as HTMLElement | null; + const focusPanel = focused?.closest('[data-memos-filters]'); + const focusAttribute = focused?.hasAttribute('data-memo-tag') ? 'data-memo-tag' : focused?.hasAttribute('data-memos-date') ? 'data-memos-date' : ''; + const focusValue = focusAttribute ? focused?.getAttribute(focusAttribute) : null; + let visible = 0; + memos.forEach(memo => { memo.element.hidden = !matches(memo); if (!memo.element.hidden) visible++; }); + const count = page.querySelector('[data-memos-count]'); + if (count) { + let value = count.querySelector('.memo-number'); + if (!value) { value = document.createElement('span'); value.className = 'memo-number'; count.replaceChildren(value, document.createTextNode('')); } + updateNumber(value, String(visible)); + count.lastChild!.textContent = english() ? ' memos' : ' �'; + } + const empty = page.querySelector('[data-memos-empty]'); + if (empty) empty.hidden = visible > 0 || memos.length === 0; + const active = page.querySelector('[data-memos-active]'); + if (active) active.hidden = !(filters.q || filters.tag.length || filters.date.length || filters.month); + const label = page.querySelector('[data-memos-active-label]'); + if (label) label.textContent = [filters.q ? `“${filters.q}�` : '', ...filters.tag.map(tag => `#${tag}`), ...filters.date, filters.month].filter(Boolean).join(' / '); + page.querySelectorAll('[data-memos-search]').forEach(input => { if (input.value !== filters.q) input.value = filters.q; }); + document.querySelectorAll('.memo-card [data-memo-tag]').forEach(button => button.setAttribute('aria-pressed', String(filters.tag.includes(button.dataset.memoTag || '')))); + page.querySelectorAll('[data-memo-more-count]').forEach(link => { + const count = link.dataset.memoMoreCount; + const label = english() ? `View ${count} more photos` : `查看剩余 ${count} 张图片`; + link.setAttribute('aria-label', label); + const hint = link.querySelector('.memo-photo-hint'); + if (hint) hint.textContent = english() ? `View ${count} more` : `查看剩余${count}张`; + }); + renderCalendar(); renderTags(); highlightMatches(); + if (focusPanel && focusAttribute && focusValue) focusPanel.querySelector(`[${focusAttribute}="${CSS.escape(focusValue)}"]`)?.focus({ preventScroll: true }); + if (persist) saveFilters(); + } + + function prepareImages(memo: HTMLElement) { + const content = memo.querySelector('.memo-content'); + if (!content || content.dataset.memoImagesReady) return; + content.dataset.memoImagesReady = 'true'; + const images = Array.from(content.querySelectorAll('img')).filter(image => !image.closest('.embed-card, .music-custom-player, .katex')); + images.slice(4).forEach(image => { + const wrapper = image.closest('figure, picture'); + const parent = image.parentElement; + const target = wrapper && wrapper.querySelectorAll('img').length === 1 ? wrapper : parent?.tagName === 'P' && parent.querySelectorAll('img').length === 1 && !parent.textContent?.trim() ? parent : image; + target.setAttribute('data-memo-overflow', ''); + target.setAttribute('hidden', ''); + }); + const tiles = images.slice(0, 4).map(image => { + const figure = image.closest('figure'); + const paragraph = image.parentElement; + let tile = figure && figure.querySelectorAll('img').length === 1 ? figure + : paragraph?.tagName === 'P' && paragraph.querySelectorAll('img').length === 1 && !paragraph.textContent?.trim() ? paragraph : null; + if (!tile) { + const picture = image.closest('picture'); + tile = document.createElement('span'); + const media = image.closest('a') || picture || image; + media.before(tile); tile.append(media); + } + tile.classList.add('memo-photo-tile'); + return tile; + }); + content.querySelectorAll('.md-gallery').forEach(gallery => gallery.classList.add('memo-photo-grid')); + content.querySelectorAll('p').forEach(paragraph => { + if (!paragraph.textContent?.trim() && paragraph.querySelectorAll('img').length > 1) paragraph.classList.add('memo-photo-grid'); + }); + // Group only adjacent image-only paragraphs/figures; leave prose in its authored order. + let group: HTMLElement[] = []; + const flush = () => { + if (group.length > 1) { const grid = document.createElement('div'); grid.className = 'memo-photo-grid'; group[0]?.before(grid); group.forEach(item => grid.append(item)); } + group = []; + }; + Array.from(content.children).forEach(child => { + if (child instanceof HTMLElement && child.matches('p, figure') && child.querySelectorAll('img').length === 1 && (child.tagName === 'FIGURE' || !child.textContent?.trim())) group.push(child); + else flush(); + }); + flush(); + if (images.length > 4) { + const tile = tiles[3]!; + tile.classList.add('has-more-photos'); + const link = document.createElement('a'); + link.className = 'memo-more-photos'; link.href = memo.dataset.memoUrl || '#'; + link.dataset.memoMoreCount = String(images.length - 4); + const count = document.createElement('span'); count.className = 'memo-photo-count memo-number'; count.textContent = `+${images.length - 4}`; + const hint = document.createElement('span'); hint.className = 'memo-photo-hint'; + count.setAttribute('aria-hidden', 'true'); hint.setAttribute('aria-hidden', 'true'); + link.append(count, hint); tile.append(link); + } + } + function init() { + clearTimeout(inputTimer); + page = document.querySelector('[data-memos-page]'); + if (!page) { memos = []; (CSS as unknown as { highlights?: Map }).highlights?.delete('memo-search'); return; } + memos = Array.from(page.querySelectorAll('[data-memo-card]')).map(element => { + prepareImages(element); + return { element, date: element.dataset.memoDate || '', search: normalize(element.dataset.memoSearch || ''), tags: Array.from(element.querySelectorAll('[data-memo-tag]')).map(tag => tag.dataset.memoTag || '') }; + }); + filters = readFilters(); + calendarMonth = filters.month || monthOf(filters.date[0] || '') || memos.map(memo => monthOf(memo.date)).filter(Boolean).sort().pop() || monthString(new Date()); + if (!location.search) { + try { + const cached = JSON.parse(sessionStorage.getItem(storageKey()) || 'null'); + if (cached && typeof cached.q === 'string' && typeof cached.month === 'string') { + const list = (value: unknown): string[] => Array.isArray(value) ? [...new Set(value.filter((item): item is string => typeof item === 'string' && !!item))] : typeof value === 'string' && value ? [value] : []; + filters = { q: cached.q, tag: list(cached.tag), date: list(cached.date), month: cached.month }; + if (/^\d{4}-\d{2}$/.test(cached.calendarMonth)) calendarMonth = cached.calendarMonth; + } + } catch { /* Invalid or unavailable persisted filters are ignored. */ } + } + if (!/^\d{4}-(0[1-9]|1[0-2])$/.test(calendarMonth)) calendarMonth = monthString(new Date()); + applyFilters(); + } + function selectFilter(target: HTMLElement, additive: boolean) { + const type = target.hasAttribute('data-memo-tag') ? 'tag' : 'date'; + const value = type === 'tag' ? target.dataset.memoTag! : target.dataset.memosDate!; + const selected = filters[type]; + filters[type] = additive + ? selected.includes(value) ? selected.filter(item => item !== value) : [...selected, value] + : selected.length === 1 && selected[0] === value ? [] : [value]; + if (type === 'date') filters.month = ''; + applyFilters(); + } + + let hold: { id: number; x: number; y: number; timer: number; target: HTMLElement } | null = null; + let suppressTouchClickUntil = 0; + const cancelHold = () => { if (hold) clearTimeout(hold.timer); hold = null; }; + document.addEventListener('pointerdown', event => { + cancelHold(); + suppressTouchClickUntil = 0; + if (!page || event.pointerType !== 'touch' || !event.isPrimary) return; + const target = (event.target as Element).closest('button[data-memo-tag], button[data-memos-date]'); + if (!target) return; + hold = { id: event.pointerId, x: event.clientX, y: event.clientY, target, timer: window.setTimeout(() => { + suppressTouchClickUntil = Date.now() + 60000; + selectFilter(target, true); + }, 500) }; + }); + document.addEventListener('pointermove', event => { + if (hold?.id === event.pointerId && Math.hypot(event.clientX - hold.x, event.clientY - hold.y) > 10) cancelHold(); + }, { passive: true }); + document.addEventListener('pointerup', () => { + if (suppressTouchClickUntil) suppressTouchClickUntil = Date.now() + 800; + cancelHold(); + }); + document.addEventListener('pointercancel', cancelHold); + document.addEventListener('contextmenu', event => { + if (hold || Date.now() < suppressTouchClickUntil) event.preventDefault(); + }); + document.addEventListener('daybook:before-swap', () => { cancelHold(); suppressTouchClickUntil = 0; }); + document.addEventListener('input', event => { + const target = event.target; + if (!(target instanceof HTMLInputElement) || !target.matches('[data-memos-search]')) return; + clearTimeout(inputTimer); + inputTimer = window.setTimeout(() => { filters.q = target.value; applyFilters(); }, 100); + }); + document.addEventListener('click', event => { + if (!page) return; + if (Date.now() < suppressTouchClickUntil) { event.preventDefault(); return; } + const target = event.target instanceof Element ? event.target : null; + if (!target) return; + const tag = target.closest('[data-memo-tag]'); + const day = target.closest('[data-memos-date]'); + const month = target.closest('[data-memos-month]'); + if (tag || day) { event.preventDefault(); selectFilter((tag || day)!, event.ctrlKey || event.metaKey); } + else if (month) { const date = monthDate(calendarMonth); date.setMonth(date.getMonth() + Number(month.dataset.memosMonth)); calendarMonth = monthString(date); renderCalendar(); saveFilters(); } + else if (target.closest('[data-memos-select-month]')) { filters.month = filters.month === calendarMonth ? '' : calendarMonth; filters.date = []; applyFilters(); } + else if (target.closest('[data-memos-clear-date]')) { filters.date = []; filters.month = ''; applyFilters(); } + else if (target.closest('[data-memos-reset]')) { filters = { q: '', tag: [], date: [], month: '' }; applyFilters(); } + else { + const card = target.closest('[data-memo-card]'); + if (card && event.button === 0 && !target.closest('a, button, input, textarea, select, label, summary, audio, video, iframe, img, [contenteditable], [role="button"], .memo-actions, .mermaid-block, .music-custom-player, .media-embed') && !window.getSelection()?.toString() && !event.ctrlKey && !event.metaKey && !event.shiftKey && !event.altKey) { + const url = card.dataset.memoUrl; + if (url) window.daybookNavigateTo ? window.daybookNavigateTo(url) : location.assign(url); + } + } + }); + window.addEventListener('popstate', () => { if (page) { filters = readFilters(); calendarMonth = filters.month || monthOf(filters.date[0] || '') || calendarMonth; applyFilters(false); } }); + document.addEventListener('daybook:page-load', init); + document.addEventListener('daybook:lang-change', () => { if (page) applyFilters(false); }); + if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', init); else init(); +})(); diff --git a/assets/ts/mermaid-loader.ts b/assets/ts/mermaid-loader.ts new file mode 100644 index 00000000..cca9a593 --- /dev/null +++ b/assets/ts/mermaid-loader.ts @@ -0,0 +1,267 @@ +(function () { + var mermaidAssetPath = "/js/vendor/mermaid.min.js"; + var manifestPath = "/assets-manifest.json"; + var manifestPromise: Promise | null = null; + var mermaidPromise: Promise | null = null; + var renderRun = 0; + var observedTheme = currentTheme(); + + function mermaidBlocks(root: Document | HTMLElement | null): HTMLElement[] { + return Array.prototype.slice.call((root || document).querySelectorAll(".mermaid-block")) as HTMLElement[]; + } + + function currentTheme() { + return document.documentElement.dataset.theme === "dark" ? "dark" : "default"; + } + + function loadManifest(): Promise { + if (!manifestPromise) { + manifestPromise = fetch(manifestPath, { credentials: "same-origin" }) + .then(function (response) { + if (!response.ok) { + throw new Error("assets manifest not found"); + } + return response.json(); + }) + .catch(function () { + return {}; + }); + } + return manifestPromise; + } + + function assetPath(originalPath: string): Promise { + return loadManifest().then(function (manifest: any) { + return manifest[originalPath] || originalPath; + }); + } + + function loadMermaid() { + if (window.mermaid) { + return Promise.resolve(window.mermaid); + } + if (mermaidPromise) { + return mermaidPromise; + } + + mermaidPromise = assetPath(mermaidAssetPath).then(function (src) { + return new Promise(function (resolve, reject) { + var existing = document.querySelector("script[data-daybook-mermaid-lib]"); + if (existing) { + if (window.mermaid) { + resolve(window.mermaid); + return; + } + existing.addEventListener( + "load", + function () { + if (window.mermaid) { + resolve(window.mermaid); + } else { + reject(new Error("Mermaid library did not initialize.")); + } + }, + { once: true }, + ); + existing.addEventListener( + "error", + function () { + reject(new Error("Mermaid library failed to load.")); + }, + { once: true }, + ); + return; + } + + var script = document.createElement("script"); + script.async = true; + script.src = src; + script.dataset.daybookMermaidLib = "true"; + script.addEventListener( + "load", + function () { + if (window.mermaid) { + resolve(window.mermaid); + } else { + reject(new Error("Mermaid library did not initialize.")); + } + }, + { once: true }, + ); + script.addEventListener( + "error", + function () { + reject(new Error("Mermaid library failed to load.")); + }, + { once: true }, + ); + document.head.appendChild(script); + }); + }); + + mermaidPromise = mermaidPromise.catch(function (error) { + mermaidPromise = null; + throw error; + }); + return mermaidPromise; + } + + function blockSource(block: HTMLElement): string { + var code = block.querySelector(".mermaid-source code"); + return code ? code.textContent || "" : ""; + } + + function markError(block: HTMLElement, message: string) { + var diagram = block.querySelector(".mermaid-diagram"); + var error = block.querySelector(".mermaid-error") as HTMLElement; + + block.classList.remove("is-rendered"); + block.classList.add("is-error"); + block.dataset.mermaidStatus = "error"; + + if (diagram) { + if(diagram) diagram.innerHTML = ""; + diagram.setAttribute("aria-hidden", "true"); + } + if (error) { + error.hidden = false; + error.textContent = message; + } + } + + function clearError(block: HTMLElement) { + var error = block.querySelector(".mermaid-error") as HTMLElement; + block.classList.remove("is-error"); + if (error) { + error.hidden = true; + error.textContent = ""; + } + } + + function renderBlock(mermaid: any, block: HTMLElement, index: number, theme: string, force: boolean) { + if (!force && block.dataset.mermaidStatus === "rendered" && block.dataset.mermaidTheme === theme) { + return Promise.resolve(); + } + + var source = blockSource(block); + if (source.trim() === "") { + markError(block, "Mermaid source is empty."); + return Promise.resolve(); + } + + var diagram = block.querySelector(".mermaid-diagram"); + if (!diagram) { + markError(block, "Mermaid diagram container is missing."); + return Promise.resolve(); + } + + var token = String(renderRun) + "-" + String(index); + var id = "daybook-mermaid-" + token; + block.dataset.mermaidToken = token; + block.dataset.mermaidStatus = "rendering"; + block.classList.remove("is-rendered"); + clearError(block); + if(diagram) diagram.innerHTML = ""; + diagram.setAttribute("aria-hidden", "true"); + + return Promise.resolve(mermaid.render(id, source)) + .then(function (result: any) { + if (block.dataset.mermaidToken !== token) { + return; + } + + if(diagram) diagram.innerHTML = result.svg || ""; + if (typeof result.bindFunctions === "function") { + result.bindFunctions(diagram); + } + if(diagram) diagram.removeAttribute("aria-hidden"); + block.classList.add("is-rendered"); + block.dataset.mermaidStatus = "rendered"; + block.dataset.mermaidTheme = theme; + }) + .catch(function (error: any) { + var message = error && error.message ? error.message : "Mermaid render failed."; + markError(block, message); + }); + } + + function init(options?: { force?: boolean }) { + var blocks = mermaidBlocks(document); + if (blocks.length === 0) { + return Promise.resolve(); + } + + var theme = currentTheme(); + var force = Boolean(options && options.force); + renderRun += 1; + + return loadMermaid() + .then(async function (mermaid) { + if (!mermaid || typeof mermaid.initialize !== "function" || typeof mermaid.render !== "function") { + throw new Error("Mermaid library is not available."); + } + + await document.fonts.ready; + mermaid.initialize({ + startOnLoad: false, + theme: theme, + securityLevel: "strict", + fontFamily: getComputedStyle(document.documentElement).getPropertyValue("--font-body").trim(), + }); + + return Promise.all( + blocks.map(function (block, index) { + return renderBlock(mermaid, block, index, theme, force); + }), + ); + }) + .catch(function (error: any) { + var message = error && error.message ? error.message : "Mermaid failed to load."; + blocks.forEach(function (block) { + markError(block, message); + }); + }); + } + + var initTimer = 0; + + function scheduleInit(options?: { force?: boolean }) { + if (initTimer) { + window.clearTimeout(initTimer); + } + initTimer = window.setTimeout(function () { + initTimer = 0; + init(options); + }, 10); + } + + window.DaybookMermaid = { + init: scheduleInit, + }; + + if (window.MutationObserver) { + new MutationObserver(function () { + var nextTheme = currentTheme(); + if (nextTheme === observedTheme) { + return; + } + observedTheme = nextTheme; + scheduleInit({ force: true }); + }).observe(document.documentElement, { + attributes: true, + attributeFilter: ["data-theme"], + }); + } + + document.addEventListener("daybook:page-load", function () { + scheduleInit(); + }); + + document.addEventListener("daybook:article-content-swapped", function () { + scheduleInit(); + }); + + document.addEventListener("daybook:lang-change", function () { + scheduleInit({ force: true }); + }); +})(); diff --git a/assets/ts/mobile-drawer.ts b/assets/ts/mobile-drawer.ts new file mode 100644 index 00000000..cf21c48b --- /dev/null +++ b/assets/ts/mobile-drawer.ts @@ -0,0 +1,212 @@ +(function () { + let overlayOpener: HTMLElement | null = null; + function getDrawerToggle() { + return document.getElementById("mobile-menu-toggle"); + } + + function getDrawer() { + return document.getElementById("mobile-drawer"); + } + + function getDrawerMask() { + return document.getElementById("mobile-drawer-mask"); + } + + function getOverlayMask() { + return document.getElementById("mobile-overlay-mask"); + } + + function updateScrollLock() { + var isDrawerOpen = document.body.classList.contains("is-mobile-drawer-open"); + var isTagsOpen = document.body.classList.contains("is-tags-overlay-open"); + var isSearchOpen = document.body.classList.contains("is-search-overlay-open"); + + const overlay = document.getElementById("mobile-overlay-container"); + overlay?.setAttribute("aria-hidden", String(!isTagsOpen && !isSearchOpen)); + document.querySelectorAll("[data-mobile-overlay-target]").forEach(button => { + button.setAttribute("aria-expanded", String(button.dataset.mobileOverlayTarget === "tags" ? isTagsOpen : isSearchOpen)); + }); + const main = document.querySelector(".page-frame main"); + if (main) main.inert = isTagsOpen && (window.matchMedia("(min-width: 961px)").matches || document.body.dataset.pageKind === "memos"); + + if (isDrawerOpen || isTagsOpen || isSearchOpen) { + document.body.style.overflow = "hidden"; + } else { + document.body.style.overflow = ""; + } + } + + function setDrawerOpen(isOpen: boolean) { + var drawerToggle = getDrawerToggle(); + var drawer = getDrawer(); + var drawerMask = getDrawerMask(); + + var expanded = isOpen ? "true" : "false"; + if (drawerToggle) drawerToggle.setAttribute("aria-expanded", expanded); + if (drawer) drawer.setAttribute("aria-hidden", !isOpen ? "true" : "false"); + if (drawerMask) drawerMask.setAttribute("aria-hidden", !isOpen ? "true" : "false"); + + if (isOpen) { + document.body.classList.add("is-mobile-drawer-open"); + } else { + document.body.classList.remove("is-mobile-drawer-open"); + } + updateScrollLock(); + } + + function openOverlay(overlayTarget: string) { + var overlayClass = "is-" + overlayTarget + "-overlay-open"; + + document.body.classList.remove("is-tags-overlay-open", "is-search-overlay-open"); + document.body.classList.add(overlayClass); + updateScrollLock(); + + if (overlayTarget === "tags") { + // Reduced-motion CSS gives even visibility a 1ms transition. The first + // frame can still be hidden, so focus only after the sheet is visible. + const focusVisibleSheet = () => { + if (!document.body.classList.contains("is-tags-overlay-open")) return; + const close = document.querySelector("#mobile-tags-overlay [data-overlay-close]"); + if (!close) return; + if (getComputedStyle(close).visibility !== "visible") { + requestAnimationFrame(focusVisibleSheet); + return; + } + close.focus({ preventScroll: true }); + }; + requestAnimationFrame(focusVisibleSheet); + } + if (overlayTarget === "search") { + var searchInput = document.getElementById("mobile-search-input"); + if (searchInput) { + window.setTimeout(function() { + if(searchInput) searchInput.focus(); + }, 50); + } + } + } + + function closeOverlays() { + document.body.classList.remove("is-tags-overlay-open", "is-search-overlay-open"); + updateScrollLock(); + if (overlayOpener?.isConnected) { + const returnTarget = document.body.dataset.pageKind === "memos" && overlayOpener.closest("#mobile-drawer") && !document.body.classList.contains("is-mobile-drawer-open") ? getDrawerToggle() : overlayOpener; + returnTarget?.focus({ preventScroll: true }); + } + overlayOpener = null; + } + + document.addEventListener("keydown", function (event: KeyboardEvent) { + if (event.key === "Tab" && document.body.dataset.pageKind === "memos" && document.body.classList.contains("is-tags-overlay-open")) { + const panel = document.getElementById("mobile-tags-overlay"); + const controls = Array.from(panel?.querySelectorAll('button:not(:disabled), a[href], input:not(:disabled), [tabindex="0"]') || []).filter(el => el.getClientRects().length > 0); + const first = controls[0]; + const last = controls[controls.length - 1]; + if (first && last) { + if (event.shiftKey && (document.activeElement === first || !panel?.contains(document.activeElement))) { event.preventDefault(); last.focus(); } + else if (!event.shiftKey && (document.activeElement === last || !panel?.contains(document.activeElement))) { event.preventDefault(); first.focus(); } + } + return; + } + if (event.key !== "Escape") return; + + if (document.body.classList.contains("is-tags-overlay-open") || document.body.classList.contains("is-search-overlay-open")) { + closeOverlays(); + return; + } + + if (document.body.classList.contains("is-mobile-drawer-open")) { + setDrawerOpen(false); + } + }); + + document.addEventListener("click", function (event: MouseEvent) { + var evTarget = event.target as HTMLElement; + + var toggleBtn = evTarget.closest("#mobile-menu-toggle"); + if (toggleBtn) { + var isOpen = document.body.classList.contains("is-mobile-drawer-open"); + setDrawerOpen(!isOpen); + return; + } + + if (evTarget.closest("#mobile-drawer-mask")) { + setDrawerOpen(false); + return; + } + + if (evTarget.closest("#mobile-overlay-mask")) { + closeOverlays(); + return; + } + + if (evTarget.closest(".drawer-nav-link[href]:not([data-rss-open]), .drawer-footer-row a")) { + setDrawerOpen(false); + return; + } + + var overlayBtn = evTarget.closest("[data-mobile-overlay-target]") as HTMLElement | null; + if (overlayBtn) { + if (overlayBtn.tagName === "A") { + event.preventDefault(); + } + var target = overlayBtn.dataset.mobileOverlayTarget; + if (!target) return; + if (document.body.classList.contains("is-" + target + "-overlay-open")) { + closeOverlays(); + return; + } + overlayOpener = overlayBtn; + + if (document.body.classList.contains("is-mobile-drawer-open")) { + setDrawerOpen(false); + + var motionQuery = window.matchMedia("(prefers-reduced-motion: reduce)"); + if (motionQuery && motionQuery.matches) { + openOverlay(target || ""); + } else { + var opened = false; + var drawer = getDrawer(); + var onTransitionEnd = function(e: TransitionEvent) { + if (e && e.target !== drawer || e.propertyName !== "transform") return; + if (drawer) drawer.removeEventListener("transitionend", onTransitionEnd); + if (!opened) { + opened = true; + openOverlay(target || ""); + } + }; + if (drawer) drawer.addEventListener("transitionend", onTransitionEnd); + window.setTimeout(function() { + if (!opened) { + if (drawer) drawer.removeEventListener("transitionend", onTransitionEnd); + opened = true; + openOverlay(target || ""); + } + }, 450); + } + } else { + openOverlay(target || ""); + } + return; + } + + if (evTarget.closest("[data-overlay-close]")) { + closeOverlays(); + return; + } + + var tagLink = evTarget.closest("[data-mobile-tag]"); + if (tagLink) { + closeOverlays(); + } + }); + + window.addEventListener("resize", () => { + if (document.body.classList.contains("is-tags-overlay-open") || document.body.classList.contains("is-search-overlay-open")) { + updateScrollLock(); + } + }); + document.addEventListener("daybook:page-load", updateScrollLock); + window.daybookCloseMobileOverlays = closeOverlays; + +})(); diff --git a/assets/ts/mobile-toc.ts b/assets/ts/mobile-toc.ts new file mode 100644 index 00000000..08076f39 --- /dev/null +++ b/assets/ts/mobile-toc.ts @@ -0,0 +1,369 @@ +/** + * Mobile TOC Controller + * Manages the floating action button (FAB) and the bottom sheet for the Table of Contents on small screens. + */ +class MobileTocController { + private readonly fab: HTMLElement; + private readonly sheet: HTMLElement; + private readonly backdrop: HTMLElement; + private readonly panel: HTMLElement; + private readonly dragHandle: HTMLElement; + private readonly tocNav: HTMLElement; + private readonly indicator: HTMLElement; + private readonly listItems: NodeListOf; + + private readonly postContent: HTMLElement; + private headings: { element: HTMLElement, id: string }[] = []; + private observer: IntersectionObserver | null = null; + private readonly events = new AbortController(); + private previousOverflow = ""; + private isOpen = false; + private lastScrollY: number = window.scrollY; + private activeIndex = -1; + private endActiveIndex = -1; + + // Drag state + private startY = 0; + private currentY = 0; + private isDragging = false; + + constructor( + fab: HTMLElement, + sheet: HTMLElement, + backdrop: HTMLElement, + panel: HTMLElement, + dragHandle: HTMLElement, + tocNav: HTMLElement, + indicator: HTMLElement, + listItems: NodeListOf, + postContent: HTMLElement + ) { + this.fab = fab; + this.sheet = sheet; + this.backdrop = backdrop; + this.panel = panel; + this.dragHandle = dragHandle; + this.tocNav = tocNav; + this.indicator = indicator; + this.listItems = listItems; + this.postContent = postContent; + + this.init(); + } + + private init(): void { + // Fixed overlays must live outside animated article containers. Otherwise + // their transform creates a containing block and absorbs taps/scrolling. + document.body.append(this.fab, this.sheet); + const signal = this.events.signal; + // Collect headings + this.listItems.forEach(item => { + const link = item.querySelector("a"); + if (link) { + const id = this.headingID(link); + if (id) { + const element = document.getElementById(id); + if (element) { + this.headings.push({ id, element }); + } + } + } + }); + + // Bind events + this.fab.addEventListener("click", () => this.openSheet(), { signal }); + this.backdrop.addEventListener("click", () => this.closeSheet(), { signal }); + + // Smooth scrolling for links + this.listItems.forEach(item => { + const link = item.querySelector("a"); + link?.addEventListener("click", (e) => { + e.preventDefault(); + const id = this.headingID(link); + const target = document.getElementById(id || ""); + if (target) { + this.closeSheet(); + requestAnimationFrame(() => { + const reduced = document.documentElement.dataset.reducedMotion === "true" + || window.matchMedia("(prefers-reduced-motion: reduce)").matches; + const offset = Number.parseFloat(getComputedStyle(document.documentElement).getPropertyValue("--mobile-topbar-height")) || 64; + window.scrollTo({ top: Math.max(0, target.getBoundingClientRect().top + window.scrollY - offset - 16), behavior: reduced ? "instant" : "smooth" }); + const url = new URL(location.href); + url.hash = encodeURIComponent(id || ""); + if (window.daybookReplaceURL) window.daybookReplaceURL(url.href); + else history.replaceState(history.state, "", url.href); + }); + } + }, { signal }); + }); + + // Drag to close events + this.dragHandle.addEventListener("touchstart", this.handleTouchStart, { passive: true, signal }); + document.addEventListener("touchmove", this.handleTouchMove, { passive: false, signal }); + document.addEventListener("touchend", this.handleTouchEnd, { signal }); + document.addEventListener("keydown", event => { + if (event.key === "Escape" && this.isOpen) { event.preventDefault(); this.closeSheet(); } + }, { signal }); + + // Scroll event for FAB + window.addEventListener("scroll", () => this.handleScroll(), { passive: true, signal }); + + // Intersection observer for headings + this.setupIntersectionObserver(); + + // Initial scroll check + this.handleScroll(); + } + + private headingID(link: HTMLAnchorElement): string { + const hash = link.getAttribute("href")?.slice(1) || ""; + try { return decodeURIComponent(hash); } catch { return hash; } + } + + public isForContent(content: HTMLElement | null): boolean { + return this.postContent === content; + } + + private handleScroll(): void { + const currentScrollY = window.scrollY; + // Show FAB when scrolling up, hide when scrolling down + // Also show if at the very top + if (currentScrollY < 100 || currentScrollY < this.lastScrollY) { + this.fab.classList.remove("is-hidden"); + } else if (currentScrollY > this.lastScrollY + 10) { + this.fab.classList.add("is-hidden"); + } + this.lastScrollY = currentScrollY; + } + + private openSheet(): void { + if (this.isOpen) return; + this.isOpen = true; + this.sheet.classList.add("is-open"); + this.sheet.removeAttribute("inert"); + this.sheet.setAttribute("aria-hidden", "false"); + this.fab.setAttribute("aria-expanded", "true"); + this.previousOverflow = document.body.style.overflow; + document.body.style.overflow = "hidden"; // Prevent background scrolling + this.syncIndicator(); + } + + private closeSheet(): void { + if (!this.isOpen) return; + this.isOpen = false; + this.sheet.classList.remove("is-open"); + this.sheet.setAttribute("inert", ""); + this.sheet.setAttribute("aria-hidden", "true"); + this.fab.setAttribute("aria-expanded", "false"); + document.body.style.overflow = this.previousOverflow; + + // Reset any drag transforms + this.panel.style.transform = ""; + } + + // --- Drag Handling --- + + private handleTouchStart = (e: TouchEvent): void => { + const touch = e.touches[0]; + if (!this.isOpen || !touch) return; + this.isDragging = true; + this.startY = touch.clientY; + this.currentY = this.startY; + this.sheet.classList.add("is-dragging"); + }; + + private handleTouchMove = (e: TouchEvent): void => { + const touch = e.touches[0]; + if (!this.isDragging || !touch) return; + this.currentY = touch.clientY; + const deltaY = Math.max(0, this.currentY - this.startY); // Only allow dragging down + + if (deltaY > 0) { + // Prevent default scrolling on the panel if we are dragging the handle + e.preventDefault(); + this.panel.style.transform = `translateY(${deltaY}px)`; + } + }; + + private handleTouchEnd = (): void => { + if (!this.isDragging) return; + this.isDragging = false; + this.sheet.classList.remove("is-dragging"); + + const deltaY = this.currentY - this.startY; + const threshold = 100; // pixels to drag down before closing + + if (deltaY > threshold) { + this.closeSheet(); + } else { + // Snap back + this.panel.style.transform = ""; + } + }; + + // --- Active Heading Tracking --- + + private setupIntersectionObserver(): void { + if (this.headings.length === 0) return; + + // Create an observer to track which headings are in view + this.observer = new IntersectionObserver((entries) => { + // A simplified approach is just to recalculate based on scroll position on ANY intersection change + this.updateActiveHeading(); + }, { + rootMargin: "-10% 0px -80% 0px", // Trigger when heading is near the top + threshold: 0 + }); + + this.headings.forEach(h => this.observer?.observe(h.element)); + window.addEventListener("scroll", () => this.updateActiveHeading(), { passive: true, signal: this.events.signal }); + + // Initial check + this.updateActiveHeading(); + } + + private updateActiveHeading(): void { + if (this.headings.length === 0) return; + + const viewportTop = window.scrollY; + const viewportBottom = viewportTop + window.innerHeight; + + let activeIndex = -1; + const scrollYWithOffset = window.scrollY + 120; // Offset for fixed headers + + // Find the last heading that is above the current scroll position for the base active index + for (let i = 0; i < this.headings.length; i++) { + const heading = this.headings[i]; + if (!heading) continue; + const offsetTop = heading.element.getBoundingClientRect().top + window.scrollY; + if (offsetTop <= scrollYWithOffset) { + activeIndex = i; + } else { + break; + } + } + + if (activeIndex === -1 && this.headings.length > 0) { + activeIndex = 0; // Default to first if we are above it + } + + // Now find visible range + let firstVis = -1; + let lastVis = -1; + for (let i = 0; i < this.headings.length; i++) { + const heading = this.headings[i]; + if (!heading) continue; + const offsetTop = heading.element.getBoundingClientRect().top + window.scrollY; + if (offsetTop >= viewportTop && offsetTop <= viewportBottom) { + if (firstVis === -1) firstVis = i; + lastVis = i; + } + } + + const endActiveIndex = firstVis !== -1 ? Math.max(activeIndex, lastVis) : activeIndex; + + this.setActiveIndex(activeIndex, endActiveIndex); + } + + private setActiveIndex(index: number, endIndex: number): void { + if (index < 0 || index >= this.listItems.length) return; + + this.activeIndex = index; + this.endActiveIndex = endIndex; + + let hasChanged = false; + this.listItems.forEach((item, i) => { + const isActive = i === index; + if (isActive !== item.classList.contains("is-active")) { + hasChanged = true; + item.classList.toggle("is-active", isActive); + } + }); + + if (hasChanged || this.isOpen) { + this.syncIndicator(); + } + } + + private syncIndicator(): void { + if (this.activeIndex === -1 || this.endActiveIndex === -1) { + this.tocNav.classList.remove("has-active"); + return; + } + + this.tocNav.classList.add("has-active"); + + // We need to wait for layout if it was just opened + requestAnimationFrame(() => { + const startItem = this.listItems[this.activeIndex]; + const endItem = this.listItems[this.endActiveIndex]; + if (!startItem || !endItem) return; + + const navRect = this.tocNav.getBoundingClientRect(); + const startItemRect = startItem.getBoundingClientRect(); + const endItemRect = endItem.getBoundingClientRect(); + + // Calculate relative position + const relativeTop = startItemRect.top - navRect.top + this.tocNav.scrollTop; + const indicatorHeight = 18; // From CSS (base height) + + const totalHeight = Math.max(1, endItemRect.bottom - startItemRect.top); + + // We want to scale the indicator vertically to cover the total height + const scale = totalHeight / indicatorHeight; + const yOffset = relativeTop + (totalHeight - indicatorHeight * scale) / 2; + + this.indicator.style.setProperty("--indicator-y", `${yOffset}px`); + this.indicator.style.setProperty("--indicator-scale", `${scale}`); + }); + } + + public destroy(): void { + this.closeSheet(); + this.events.abort(); + this.observer?.disconnect(); + this.fab.remove(); + this.sheet.remove(); + } +} + +let currentMobileTocController: MobileTocController | null = null; + +// Initialization +function initMobileToc(): void { + if (currentMobileTocController?.isForContent(document.querySelector(".post-content"))) return; + if (currentMobileTocController) { + currentMobileTocController.destroy(); + currentMobileTocController = null; + } + + const fab = document.querySelector("[data-mobile-toc-fab]"); + const sheet = document.querySelector("[data-mobile-toc-sheet]"); + const backdrop = document.querySelector("[data-mobile-toc-backdrop]"); + const panel = sheet?.querySelector(".mobile-toc-panel"); + const dragHandle = sheet?.querySelector("[data-mobile-toc-drag-handle]"); + const tocNav = sheet?.querySelector(".mobile-toc-nav"); + const indicator = tocNav?.querySelector("[data-mobile-toc-indicator]"); + const listItems = tocNav?.querySelectorAll("li"); + const postContent = document.querySelector(".post-content"); + + if (fab && sheet && backdrop && panel && dragHandle && tocNav && indicator && listItems && postContent) { + currentMobileTocController = new MobileTocController( + fab, sheet, backdrop, panel, dragHandle, tocNav, indicator, listItems, postContent + ); + } +} + +// Initialize on DOM load and after page transitions +if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", initMobileToc); +} else { + initMobileToc(); +} + +// Hook into page transitions if applicable +document.addEventListener("daybook:page-load", initMobileToc); +document.addEventListener("daybook:before-swap", () => { + currentMobileTocController?.destroy(); + currentMobileTocController = null; +}); diff --git a/assets/ts/navigation-loading.ts b/assets/ts/navigation-loading.ts new file mode 100644 index 00000000..99cc407d --- /dev/null +++ b/assets/ts/navigation-loading.ts @@ -0,0 +1,77 @@ +import { animateTextChange, reducedMotion } from './text-roll'; + +/** Owns presentation only. The router owns request cancellation and identity. */ +export class NavigationLoading { + private id = 0; + private timer = 0; + private visible = false; + private mobile = matchMedia('(max-width: 960px)'); + private motion = matchMedia('(prefers-reduced-motion: reduce)'); + private logo = document.querySelector('[data-navigation-logo]'); + private logoText = this.logo?.textContent ?? ''; + private logoWaiting = false; + private status = document.getElementById('navigation-status'); + + constructor() { + this.mobile.addEventListener('change', () => this.syncLogo(true)); + this.motion.addEventListener('change', () => this.syncLogo(true)); + document.addEventListener('daybook:settings-change', () => this.syncLogo(true)); + // BFCache restores must not revive a stale pending indicator. + window.addEventListener('pagehide', () => this.finish(this.id, true)); + } + + start(id: number) { + this.id = id; + clearTimeout(this.timer); + document.documentElement.dataset.navigationPending = 'true'; + if (this.visible) return; + this.timer = window.setTimeout(() => { + if (id !== this.id) return; + this.visible = true; + document.documentElement.dataset.navigationLoading = 'true'; + document.querySelector('[data-daybook-page]')?.setAttribute('aria-busy', 'true'); + if (this.status) this.status.textContent = document.documentElement.lang.startsWith('en') ? 'Loading page…' : '正在载入页�…'; + this.syncLogo(); + document.dispatchEvent(new CustomEvent('daybook:navigation-loading')); + }, 400); + } + + finish(id: number, immediate = false) { + if (id !== this.id) return; + clearTimeout(this.timer); + delete document.documentElement.dataset.navigationPending; + if (!this.visible) { + if (immediate) this.syncLogo(true); + return; + } + this.visible = false; + delete document.documentElement.dataset.navigationLoading; + document.querySelector('[data-daybook-page]')?.removeAttribute('aria-busy'); + if (this.status) this.status.textContent = ''; + this.syncLogo(immediate); + document.dispatchEvent(new CustomEvent('daybook:navigation-loading')); + } + + private syncLogo(immediate = false) { + if (!this.logo) return; + const waiting = this.visible && this.mobile.matches; + if (waiting === this.logoWaiting && !immediate) return; + this.logoWaiting = waiting; + // Measure both labels without moving the menu. + if (waiting && !this.logo.style.minWidth) { + const measure = this.logo.cloneNode(false) as HTMLElement; + measure.removeAttribute('data-navigation-logo'); + measure.style.cssText = 'position:absolute;visibility:hidden;white-space:nowrap;pointer-events:none'; + this.logo.parentElement?.append(measure); + measure.textContent = this.logoText; + const original = measure.getBoundingClientRect().width; + measure.textContent = 'Waiting...'; + this.logo.style.minWidth = `${Math.ceil(Math.max(original, measure.getBoundingClientRect().width))}px`; + measure.remove(); + } + animateTextChange(this.logo, waiting ? 'Waiting...' : this.logoText, immediate || reducedMotion(), () => { + if (!this.logoWaiting) this.logo?.style.removeProperty('min-width'); + }); + if (!this.mobile.matches) this.logo.style.removeProperty('min-width'); + } +} diff --git a/assets/ts/note-filters.ts b/assets/ts/note-filters.ts new file mode 100644 index 00000000..190f31eb --- /dev/null +++ b/assets/ts/note-filters.ts @@ -0,0 +1,228 @@ +(() => { + type DesktopTool = "search" | null; + + let currentDesktopTool: DesktopTool = null; + let pendingSearchFocus = false; + + function isNotesPage() { + // Both notes and tags page have notes-page class usually, but let's just check for notes-tools + return Boolean(document.querySelector("[data-notes-tools]")); + } + + function setDesktopTool(tool: DesktopTool, shouldFocus: boolean = false) { + const toolsContainer = document.querySelector("[data-notes-tools]"); + if (!toolsContainer) return; + + currentDesktopTool = tool; + + // Reset all tool buttons and panels + document.querySelectorAll("[data-notes-tool]").forEach(btn => { + btn.setAttribute("aria-expanded", "false"); + }); + + document.querySelectorAll("[data-notes-panel]").forEach(panel => { + panel.setAttribute("aria-hidden", "true"); + panel.classList.remove("is-active"); + }); + + toolsContainer.classList.remove("is-search-open", "is-tags-open", "has-open-panel"); + + if (tool) { + toolsContainer.classList.add(`is-${tool}-open`, "has-open-panel"); + + const btn = document.querySelector(`[data-notes-tool="${tool}"]`); + if (btn) btn.setAttribute("aria-expanded", "true"); + + const panel = document.querySelector(`[data-notes-panel="${tool}"]`); + if (panel) { + panel.setAttribute("aria-hidden", "false"); + panel.classList.add("is-active"); + } + + if (tool === "search" && shouldFocus) { + const input = document.querySelector("[data-notes-search]") as HTMLInputElement; + if (input) input.focus(); + } + } + } + + function renderNoteCard(item: any, keyword: string): string { + const engine = window.daybookSearchEngine; + const titleHtml = engine.highlightMatches(item.title, keyword); + const summaryHtml = item.summary ? `

${engine.highlightMatches(item.summary, keyword)}

` : ''; + + let indicators = ''; + if (item.pinned) indicators += ``; + if (item.hasMusic) indicators += ``; + if (item.hasTranslation) indicators += ``; + + let meta = ``; + if (item.section !== "memos") { + meta += ` ${item.readingMinutes} min`; + } + if (item.updated) { + meta += ` • updated `; + } + + const hasTitleMatch = keyword && titleHtml !== engine.escapeHTML(item.title); + const titleLayout = (keyword && hasTitleMatch) ? titleHtml : (item.titleLayout || titleHtml); + + return ` +`; + } + + async function applySearchUI() { + const engine = window.daybookSearchEngine; + if (!engine) return; + + const ctx = engine.getCollectionContext(); + if (!document.querySelector(".notes-list")) { + const input = document.querySelector("[data-notes-search]"); + const results = document.querySelector("[data-desktop-search-results]"); + if (!input || !results) return; + const query = input.value.trim(); + const matches = query ? await engine.searchNotes(query) : []; + // Ignore a response from an input that has since changed or left the page. + if (!input.isConnected || input.value.trim() !== query) return; + results.hidden = !query; + results.innerHTML = matches.map((item: any) => renderNoteCard(item, query)).join(""); + if (query && !matches.length) { + const empty = document.createElement("p"); + empty.className = "notes-tool-empty"; + empty.textContent = document.documentElement.lang.startsWith("en") ? "No results found" : "没有找到相关内容"; + results.append(empty); + } + return; + } + + const query = engine.getCurrentQuery(); + + // Sync input value + const input = document.querySelector("[data-notes-search]") as HTMLInputElement | null; + if (input) { + input.value = query; + } + + const staticElements = document.querySelectorAll(".notes-pinned, .notes-divider, .notes-month, .pagination, .notes-empty:not(.notes-filter-empty)"); + const resultsContainer = document.querySelector(".notes-search-results"); + const emptyMessage = document.querySelector(".notes-filter-empty"); + + if (!query) { + staticElements.forEach(el => (el as HTMLElement).hidden = false); + if (resultsContainer) { + resultsContainer.innerHTML = ""; + (resultsContainer as HTMLElement).hidden = true; + } + if (emptyMessage) (emptyMessage as HTMLElement).hidden = true; + + // Do NOT auto-close the search panel just because query is empty. + return; + } + + staticElements.forEach(el => (el as HTMLElement).hidden = true); + + // Auto-open panel if we have a query + if (currentDesktopTool !== "search") { + setDesktopTool("search", false); + } + + const matches = await engine.searchNotes(query, ctx.tagSlug); + const results = ctx.kind === "notes" ? matches.filter((item: any) => item.section !== "memos") : matches; + + if (resultsContainer) { + (resultsContainer as HTMLElement).hidden = false; + resultsContainer.innerHTML = results.map((item: any) => renderNoteCard(item, query)).join(""); + } + + if (emptyMessage) { + (emptyMessage as HTMLElement).hidden = results.length === 0; + } + } + + let debounceTimer: number; + function handleSearchInput(input: HTMLInputElement) { + clearTimeout(debounceTimer); + debounceTimer = window.setTimeout(() => { + const query = input.value.trim(); + const engine = window.daybookSearchEngine; + if (engine && isNotesPage()) { + if (document.querySelector(".notes-list")) engine.updateSearchURL(query); + applySearchUI(); + } + }, 150); + } + + document.addEventListener("click", function (event: MouseEvent) { + const target = event.target as HTMLElement; + + if (target.closest('[data-mobile-overlay-target="tags"]')) { + setDesktopTool(null); + } + + const toolButton = target.closest("[data-notes-tool]") as HTMLElement | null; + if (toolButton) { + const toolName = toolButton.dataset.notesTool as DesktopTool; + if (toolName === "search") { + window.daybookCloseMobileOverlays?.(); + if (currentDesktopTool === toolName) { + // Toggle off + setDesktopTool(null); + } else { + // Toggle on + setDesktopTool(toolName, toolName === "search"); + } + } + } + }); + + document.addEventListener("input", function (event: Event) { + const target = event.target as HTMLElement; + if (target.matches("[data-notes-search]")) { + handleSearchInput(target as HTMLInputElement); + } + }); + + document.addEventListener("keydown", function (event: KeyboardEvent) { + if (event.key === "Escape") { + if (currentDesktopTool === "search" || currentDesktopTool === "tags") { + setDesktopTool(null); + } + } + }); + + document.addEventListener("daybook:page-load", function () { + clearTimeout(debounceTimer); + currentDesktopTool = null; + if (isNotesPage()) { + applySearchUI(); + } + }); + + if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", function () { + if (isNotesPage()) { + applySearchUI(); + } + }); + } else { + if (isNotesPage()) { + applySearchUI(); + } + } + +})(); diff --git a/assets/ts/number-flip.ts b/assets/ts/number-flip.ts new file mode 100644 index 00000000..8642ed8b --- /dev/null +++ b/assets/ts/number-flip.ts @@ -0,0 +1,26 @@ +// All counter writers share the same transition: update the real value at once, +// then flip the previous visual away. Repeated values never restart the motion. +const timers = new WeakMap>(); +export function updateNumber(element: Element, value: string): void { + if (!(element instanceof HTMLElement) || element.textContent === value) return; + const previous = element.textContent || ''; + clearTimeout(timers.get(element)); + element.classList.remove('is-number-flipping'); + element.removeAttribute('data-number-previous'); + element.classList.add('number-flip'); + const current = document.createElement('span'); + current.className = 'number-flip-current'; + current.textContent = value; + element.replaceChildren(current); + if (!previous || !element.isConnected || matchMedia('(prefers-reduced-motion: reduce)').matches || + document.documentElement.dataset.reducedMotion === 'true') return; + element.dataset.numberPrevious = previous; + // Restart cleanly when updates arrive before the last flip has completed. + void element.offsetWidth; + element.classList.add('is-number-flipping'); + timers.set(element, setTimeout(() => { + element.classList.remove('is-number-flipping'); + element.removeAttribute('data-number-previous'); + timers.delete(element); + }, 440)); +} diff --git a/assets/ts/page-transition-engine.ts b/assets/ts/page-transition-engine.ts new file mode 100644 index 00000000..f8035d7d --- /dev/null +++ b/assets/ts/page-transition-engine.ts @@ -0,0 +1,209 @@ + +(() => { + const ARTICLE_MOBILE_QUERY = "(max-width: 1280px)"; + + function reducedMotion(): boolean { + return document.documentElement.getAttribute('data-reduced-motion') === 'true' || + (window.matchMedia && window.matchMedia("(prefers-reduced-motion: reduce)").matches); + } + + function cssDuration(name: string, fallback: number): number { + const rawValue = window.getComputedStyle(document.documentElement).getPropertyValue(name).trim(); + const value = Number.parseFloat(rawValue); + if (!Number.isFinite(value)) return fallback; + if (rawValue.endsWith("s") && !rawValue.endsWith("ms")) return value * 1000; + return value; + } + + function cleanPath(url: URL): string { + let path = url.pathname; + if (path.length > 1 && path.endsWith("/")) path = path.slice(0, -1); + if (path.endsWith("/index.html")) path = path.slice(0, -11) || "/"; + return path; + } + + function noteSlugFromURL(url: URL): string | null { + let p = cleanPath(url); + if (p.endsWith('/index.html')) p = p.substring(0, p.length - 11); + if (p.endsWith('/')) p = p.substring(0, p.length - 1); + + // Canonical article paths distinguish versions with the same source slug. + if (/^(?:\/en_US)?\/notes\/.+/.test(p)) return decodeURIComponent(p) + '/'; + return null; + } + + function isNotesIndex(url: URL): boolean { + let p = cleanPath(url); + if (p.endsWith('/index.html')) p = p.substring(0, p.length - 11); + if (p.endsWith('/')) p = p.substring(0, p.length - 1); + if (p.startsWith('/en_US/')) p = '/' + p.substring(7); + return p === '/notes'; + } + + function articleTransitionInfo(currentUrlStr: string, targetUrlStr: string): { direction: "to-detail" | "to-list", slug: string } | null { + try { + const currentURL = new URL(currentUrlStr, location.origin); + const targetURL = new URL(targetUrlStr, location.origin); + + const currentSlug = noteSlugFromURL(currentURL); + const targetSlug = noteSlugFromURL(targetURL); + + const currentIsIndex = isNotesIndex(currentURL); + const targetIsIndex = isNotesIndex(targetURL); + + if (currentIsIndex && targetSlug) { + return { direction: "to-detail", slug: targetSlug }; + } + if (currentSlug && targetIsIndex) { + return { direction: "to-list", slug: currentSlug }; + } + } catch { + return null; + } + return null; + } + + function isArticleTransition(currentUrlStr: string, targetUrlStr: string): boolean { + if (reducedMotion()) return false; + return Boolean(articleTransitionInfo(currentUrlStr, targetUrlStr)); + } + + function findDataElement(root: Document | HTMLElement, attributeName: string, value: string): HTMLElement | null { + if (!root || !value) return null; + const elements = root.querySelectorAll(`[${attributeName}]`); + for (const element of Array.from(elements)) { + if (element.getAttribute(attributeName) === value) { + return element as HTMLElement; + } + } + return null; + } + + function findTitleBySlug(root: Document | HTMLElement, slug: string): HTMLElement | null { + return findDataElement(root, "data-title-transition-key", slug) || findDataElement(root, "data-title-id", slug); + } + + function clearArticleSharedTransitions(root: Document | HTMLElement | null) { + if (!root) return; + root.querySelectorAll(".title-glyph").forEach(el => { + (el as HTMLElement).style.removeProperty("view-transition-name"); + }); + root.querySelectorAll("[data-title-transition-key]").forEach(el => { + (el as HTMLElement).style.removeProperty("view-transition-name"); + }); + root.querySelectorAll("[data-article-shared]").forEach(el => { + (el as HTMLElement).style.removeProperty("view-transition-name"); + }); + } + + function prepareArticleTransitionSource(currentUrlStr: string, targetUrlStr: string, sourceLink?: HTMLElement | null): any { + clearArticleSharedTransitions(document); + + const info = articleTransitionInfo(currentUrlStr, targetUrlStr); + if (!info || !info.slug) return null; + + let sourceTitle = findTitleBySlug(document, info.slug); + if (sourceLink && sourceLink.matches("[data-title-transition-key]")) { + sourceTitle = sourceLink; + } + + if (sourceTitle) { + const sourceGlyphs = sourceTitle.querySelectorAll(".title-glyph"); + sourceGlyphs.forEach((el) => { + const sg = el as HTMLElement; + sg.style.viewTransitionName = `title-glyph-${sg.dataset.glyphIndex}`; + }); + } + + const sourceScope = findDataElement(document, "data-transition-scope", info.slug); + if (sourceScope) { + const sharedElements = sourceScope.querySelectorAll("[data-article-shared]"); + sharedElements.forEach(el => { + const name = el.getAttribute("data-article-shared"); + (el as HTMLElement).style.viewTransitionName = `article-shared-${name}`; + }); + document.documentElement.classList.add("meta-shared-transition"); + } + + return info; + } + + function prepareArticleTransitionTarget(info: any) { + if (!info || !info.slug) return; + + let targetTitle = findTitleBySlug(document, info.slug); + if (targetTitle) { + const targetGlyphs = targetTitle.querySelectorAll(".title-glyph"); + targetGlyphs.forEach((el) => { + const tg = el as HTMLElement; + tg.style.viewTransitionName = `title-glyph-${tg.dataset.glyphIndex}`; + }); + } + + const targetScope = findDataElement(document, "data-transition-scope", info.slug); + if (targetScope) { + const sharedElements = targetScope.querySelectorAll("[data-article-shared]"); + sharedElements.forEach(el => { + const name = el.getAttribute("data-article-shared"); + (el as HTMLElement).style.viewTransitionName = `article-shared-${name}`; + }); + targetScope.classList.add("meta-shared-target"); + } + } + + function exitClassName(body: HTMLElement): string { + if (body.classList.contains("home-body")) return "home-exiting"; + return "page-exiting"; + } + + function enterClassName(body: HTMLElement): string { + if (body.classList.contains("home-body")) return "home-entering"; + return "page-entering"; + } + + function clearTransitionClasses() { + document.documentElement.classList.remove( + "is-transitioning", + "article-transition", + "meta-shared-transition" + ); + if (document.body) { + document.body.classList.remove("home-exiting", "page-exiting", "home-entering", "page-entering"); + } + } + + function resolveStableRegions(oldDoc: Document, newDoc: Document) { + const oldRegions = oldDoc.querySelectorAll("[data-transition-region]"); + const newRegions = newDoc.querySelectorAll("[data-transition-region]"); + const oldMap = new Map(); + + oldRegions.forEach(el => { + oldMap.set(el.getAttribute("data-transition-region"), el); + el.classList.remove("transition-stable"); + }); + + newRegions.forEach(newEl => { + const region = newEl.getAttribute("data-transition-region"); + const oldEl = oldMap.get(region); + newEl.classList.remove("transition-stable"); + if (oldEl) { + oldEl.classList.add("transition-stable"); + newEl.classList.add("transition-stable"); + } + }); + } + + window.DaybookTransitionEngine = { + reducedMotion, + cssDuration, + isArticleTransition, + prepareArticleTransitionSource, + prepareArticleTransitionTarget, + clearArticleSharedTransitions, + exitClassName, + enterClassName, + clearTransitionClasses, + resolveStableRegions + }; + +})(); diff --git a/assets/ts/privacy-overlay.ts b/assets/ts/privacy-overlay.ts new file mode 100644 index 00000000..ea016f3c --- /dev/null +++ b/assets/ts/privacy-overlay.ts @@ -0,0 +1,165 @@ +import { analyticsAllowed, getPrivacyChoice, savePrivacyChoice } from './privacy-store'; + +export function initPrivacyOverlay(): void { + const dialog = document.querySelector('#privacy-overlay'); + if (!dialog || dialog.dataset.bound) return; + dialog.dataset.bound = 'true'; + const checkbox = dialog.querySelector('#privacy-analytics')!; + const necessary = dialog.querySelector('#privacy-necessary')!; + const main = dialog.querySelector('[data-privacy-main]')!; + const details = dialog.querySelector('[data-privacy-detail-page]')!; + const detailsLink = dialog.querySelector('[data-privacy-details]')!; + const save = dialog.querySelector('[data-privacy-save]')!; + const status = dialog.querySelector('[role="status"]')!; + const content = dialog.querySelector('.privacy-content')!; + const home = content.parentElement!; + const settings = document.getElementById('settings-overlay')!; + const settingsPage = settings.querySelector('[data-settings-page]')!; + const settingsPaper = settings.querySelector('.settings-paper')!; + const backToSettings = content.querySelector('[data-privacy-settings-back]')!; + let hosted = false; + let animation: Animation | null = null; + let busy = false; + let failed = false; + let previousOverflow = ''; + let opener: HTMLElement | null = null; + + function animateContent(element: HTMLElement): void { + animation?.cancel(); + if (matchMedia('(prefers-reduced-motion: reduce)').matches || document.documentElement.dataset.reducedMotion === 'true') return; + animation = element.animate([ + { opacity: 0, transform: 'scale(0.95)' }, + { opacity: 1, transform: 'scale(1)' }, + ], { duration: 320, easing: 'cubic-bezier(0.32, 0.72, 0, 1)' }); + } + + function restoreSettings(focus = true): void { + if (!hosted) return; + animation?.cancel(); + home.append(content); + backToSettings.hidden = true; + settingsPage.hidden = false; + settingsPaper.classList.remove('has-privacy-page'); + settingsPaper.style.height = ''; + settings.setAttribute('aria-labelledby', 'settings-title'); + settings.removeAttribute('aria-describedby'); + hosted = false; + if (focus) { + animateContent(settingsPage); + settings.querySelector('[data-privacy-open]')!.focus({ preventScroll: true }); + } + } + + function syncText(): void { + const en = document.documentElement.lang.toLowerCase().startsWith('en'); + save.textContent = busy ? (en ? 'Saving…' : 'ä¿�存中…') : (en ? 'Save selection' : 'ä¿�存选择'); + status.textContent = failed ? (en + ? 'Could not confirm Cookie cleanup. Please try again.' + : '暂时无法确认 Cookie 已清ç�†ï¼Œè¯·é‡�试。') : ''; + } + + function showPage(detail: boolean, focus = true): void { + main.hidden = detail; + details.hidden = !detail; + const activeOverlay = hosted ? settings : dialog!; + activeOverlay.setAttribute('aria-labelledby', detail ? 'privacy-details-title' : 'privacy-title'); + activeOverlay.setAttribute('aria-describedby', detail ? 'privacy-details-intro' : 'privacy-intro'); + content.scrollTop = 0; + if (focus) { + animateContent(detail ? details : main); + if (detail) details.querySelector('h2')!.focus(); + else detailsLink.focus(); + } + } + + function syncChoice(): void { + checkbox.checked = analyticsAllowed(); + necessary.checked = !checkbox.checked; + } + + function open(withinSettings = false): void { + if (dialog!.open || hosted) return; + opener = document.activeElement instanceof HTMLElement ? document.activeElement : null; + syncChoice(); + if (withinSettings) { + settingsPaper.style.height = `${settingsPaper.offsetHeight}px`; + settingsPaper.classList.add('has-privacy-page'); + settingsPage.hidden = true; + settingsPaper.append(content); + backToSettings.hidden = false; + hosted = true; + } + showPage(false, false); + failed = false; + syncText(); + if (hosted) { + animateContent(content); + main.querySelector('h2')!.focus({ preventScroll: true }); + return; + } + previousOverflow = document.body.style.overflow; + dialog!.classList.add('is-open'); + dialog!.showModal(); + document.body.style.overflow = 'hidden'; + } + + function close(): void { + if (busy) return; + if (hosted) document.dispatchEvent(new CustomEvent('daybook:settings-dismiss')); + else dialog!.close(); + } + + dialog.addEventListener('close', () => { + dialog.classList.remove('is-open'); + document.body.style.overflow = previousOverflow; + opener?.focus({ preventScroll: true }); + }); + dialog.addEventListener('cancel', event => { if (busy) event.preventDefault(); }); + dialog.querySelectorAll('[data-privacy-close]').forEach(button => button.addEventListener('click', close)); + // These are two exclusive choices. Only selecting analytics can opt in. + checkbox.addEventListener('change', () => { necessary.checked = !checkbox.checked; }); + necessary.addEventListener('change', () => { necessary.checked = true; checkbox.checked = false; }); + detailsLink.addEventListener('click', () => showPage(true)); + dialog.querySelector('[data-privacy-back]')!.addEventListener('click', () => showPage(false)); + document.addEventListener('daybook:lang-change', syncText); + backToSettings.addEventListener('click', () => { if (!busy) restoreSettings(); }); + document.addEventListener('daybook:privacy-open', event => open((event as CustomEvent).detail?.withinSettings === true)); + document.addEventListener('daybook:settings-close', event => { + if (busy && hosted) { event.preventDefault(); return; } + restoreSettings(false); + }); + document.addEventListener('keydown', event => { + if (!hosted || event.key !== 'Tab') return; + const controls = [...settings.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex="0"]')].filter(el => el.getClientRects().length > 0); + const first = controls[0]; + const last = controls[controls.length - 1]; + if (event.shiftKey && (document.activeElement === first || document.activeElement?.tagName === 'H2')) { + event.preventDefault(); last?.focus(); + } else if (!event.shiftKey && document.activeElement === last) { + event.preventDefault(); first?.focus(); + } + }); + document.addEventListener('daybook:privacy-change', () => { + if (!busy && (dialog.open || hosted)) { syncChoice(); syncText(); } + }); + + async function choose(analytics: boolean): Promise { + if (busy) return; + busy = true; + failed = false; + const controls = (hosted ? settings : dialog!).querySelectorAll('button, input'); + const disabledStates = [...controls].map(control => control.disabled); + controls.forEach(control => { control.disabled = true; }); + syncText(); + const saved = await savePrivacyChoice(analytics); + busy = false; + controls.forEach((control, index) => { control.disabled = disabledStates[index]!; }); + syncChoice(); + failed = !saved; + syncText(); + if (saved) close(); + } + + save.addEventListener('click', () => { void choose(checkbox.checked); }); + if (document.body.dataset.statsEnabled === 'true' && !getPrivacyChoice()) open(); +} diff --git a/assets/ts/privacy-store.ts b/assets/ts/privacy-store.ts new file mode 100644 index 00000000..f5ff602b --- /dev/null +++ b/assets/ts/privacy-store.ts @@ -0,0 +1,62 @@ +export interface PrivacyChoice { analytics: boolean } +export const PRIVACY_KEY = 'daybook:privacy:v1'; + +function readChoice(): PrivacyChoice | null { + try { + const value = JSON.parse(localStorage.getItem(PRIVACY_KEY) || 'null'); + return typeof value?.analytics === 'boolean' ? { analytics: value.analytics } : null; + } catch { return null; } +} + +let choice = readChoice(); +let synchronization: Promise | null = null; + +export function getPrivacyChoice(): PrivacyChoice | null { return choice; } +export function analyticsAllowed(): boolean { return choice?.analytics === true; } + +function synchronize(): Promise { + const previous = synchronization; + const analytics = analyticsAllowed(); + synchronization = (async () => { + await previous; + if (document.body.dataset.statsEnabled !== 'true') return true; + try { + const response = await fetch('/api/privacy', { + method: 'PUT', credentials: 'same-origin', cache: 'no-store', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ analytics }), signal: AbortSignal.timeout(12000), + }); + if (!response.ok) return false; + const result = await response.json(); + return result.version === 1 && result.analytics === analytics; + } catch { return false; } + })(); + return synchronization; +} + +// Every runtime API waits for cookie cleanup/consent synchronization. Older +// Workers without this protocol fail closed instead of creating visitor IDs. +export async function privacyReady(): Promise { + if (!synchronization) synchronize(); + let pending: Promise | null; + let ready: boolean; + do { + pending = synchronization; + ready = await pending!; + } while (pending !== synchronization); + return ready; +} + +export async function savePrivacyChoice(analytics: boolean): Promise { + choice = { analytics }; + try { localStorage.setItem(PRIVACY_KEY, JSON.stringify(choice)); } catch {} + const ready = await synchronize(); + document.dispatchEvent(new CustomEvent('daybook:privacy-change')); + return ready; +} + +window.addEventListener('storage', event => { + if (event.key !== PRIVACY_KEY && event.key !== null) return; + choice = readChoice(); + void synchronize().then(() => document.dispatchEvent(new CustomEvent('daybook:privacy-change'))); +}); diff --git a/assets/ts/reader-mode.ts b/assets/ts/reader-mode.ts new file mode 100644 index 00000000..70fa0ac7 --- /dev/null +++ b/assets/ts/reader-mode.ts @@ -0,0 +1,80 @@ +let isBound = false; + +function toggleReaderMode() { + const isImmersive = document.body.dataset.readerMode === "immersive"; + setReaderMode(!isImmersive); +} + +function setReaderMode(enabled: boolean) { + if (enabled) { + document.body.dataset.readerMode = "immersive"; + } else { + delete document.body.dataset.readerMode; + } + syncReaderControls(); + document.dispatchEvent(new CustomEvent("daybook:reader-mode-change", { detail: { enabled } })); +} + +function clearReaderMode() { + if (document.body.dataset.readerMode === "immersive") { + delete document.body.dataset.readerMode; + } +} + +function syncReaderControls() { + const isImmersive = document.body.dataset.readerMode === "immersive"; + + const toggleBtns = document.querySelectorAll("[data-reader-toggle]"); + toggleBtns.forEach(btn => { + btn.setAttribute("aria-pressed", isImmersive.toString()); + }); + + const exitBtns = document.querySelectorAll("[data-reader-exit]"); + exitBtns.forEach(btn => { + if (isImmersive) { + btn.removeAttribute("hidden"); + } else { + btn.setAttribute("hidden", "true"); + } + }); +} + +function handleKeyDown(e: KeyboardEvent) { + if (e.key === "Escape" && !e.defaultPrevented && !document.querySelector(".mobile-toc-sheet.is-open") && document.body.dataset.readerMode === "immersive") { + e.preventDefault(); + setReaderMode(false); + } +} + +function bindEvents() { + if (isBound) return; + isBound = true; + + document.addEventListener("click", (e) => { + const target = e.target as HTMLElement; + + const toggleBtn = target.closest("[data-reader-toggle]"); + if (toggleBtn) { + e.preventDefault(); + toggleReaderMode(); + return; + } + + const exitBtn = target.closest("[data-reader-exit]"); + if (exitBtn) { + e.preventDefault(); + setReaderMode(false); + return; + } + }); + + document.addEventListener("keydown", handleKeyDown); + + document.addEventListener("daybook:before-swap", clearReaderMode); + document.addEventListener("daybook:page-load", syncReaderControls); +} + +export function initReaderMode() { + bindEvents(); + syncReaderControls(); +} diff --git a/assets/ts/reading-controls.ts b/assets/ts/reading-controls.ts new file mode 100644 index 00000000..f9ee5cc2 --- /dev/null +++ b/assets/ts/reading-controls.ts @@ -0,0 +1,198 @@ +let scrollListenerAdded = false; +let ticking = false; +let isHidden = false; +let lastScrollY = window.scrollY; + +let viewportOffsetTicking = false; +let lastReaderProgressVisualTop: number | null = null; + +export function initReadingControls() { + const isNotePage = document.body.dataset.pageKind !== 'memo' && document.querySelector('.note') !== null; + + if (!scrollListenerAdded) { + window.addEventListener('scroll', onScroll, { passive: true }); + + document.addEventListener('daybook:reader-mode-change', (e: Event) => { + const customEvent = e as CustomEvent; + requestAnimationFrame(() => { + updateReadingControls(); + }); + if (customEvent.detail && customEvent.detail.enabled) { + requestReaderProgressVisualSync(); + } + }); + + if (window.visualViewport) { + window.visualViewport.addEventListener('scroll', requestReaderProgressVisualSync, { passive: true }); + window.visualViewport.addEventListener('resize', requestReaderProgressVisualSync, { passive: true }); + } + + scrollListenerAdded = true; + } + + // Initial update + if (isNotePage) { + requestAnimationFrame(() => { + updateReadingControls(); + }); + requestReaderProgressVisualSync(); + } else { + // Reset if leaving note page + document.body.classList.remove('mobile-top-bar-hidden'); + isHidden = false; + } +} + +function requestReaderProgressVisualSync() { + if (viewportOffsetTicking) return; + viewportOffsetTicking = true; + requestAnimationFrame(() => { + syncReaderProgressVisualTop(); + viewportOffsetTicking = false; + }); +} + +function syncReaderProgressVisualTop() { + const isReaderMode = document.body.dataset.readerMode === 'immersive'; + const isMobile = window.innerWidth <= 960; + if (!isReaderMode || !isMobile) return; + + const rawOffset = window.visualViewport ? window.visualViewport.offsetTop : 0; + + if (lastReaderProgressVisualTop === null || Math.abs(rawOffset - lastReaderProgressVisualTop) > 0.05) { + document.body.style.setProperty('--reader-progress-visual-top', `${rawOffset}px`); + lastReaderProgressVisualTop = rawOffset; + } +} + + + +function onScroll() { + if (!ticking) { + window.requestAnimationFrame(() => { + updateReadingControls(); + ticking = false; + }); + ticking = true; + } +} + +function updateReadingControls() { + const isNotePage = document.body.dataset.pageKind !== 'memo' && document.querySelector('.note') !== null; + if (!isNotePage) return; + + const topBar = document.getElementById('mobile-top-bar'); + const desktopTexts = document.querySelectorAll('[data-desktop-progress-text]'); + const mobileTexts = document.querySelectorAll('[data-mobile-progress-text]'); + const backToTopBtns = document.querySelectorAll('.back-to-top-btn, .mobile-top-btn'); + const goToBottomBtns = document.querySelectorAll('.go-to-bottom-btn, .mobile-bottom-btn, .reading-progress-btn'); + + // Ensure click handlers are attached once per element + backToTopBtns.forEach(btn => { + const htmlBtn = btn as HTMLElement; + if (!htmlBtn.dataset.rcBound) { + htmlBtn.addEventListener('click', () => window.scrollTo({ top: 0, behavior: 'smooth' })); + htmlBtn.dataset.rcBound = 'true'; + } + }); + + goToBottomBtns.forEach(btn => { + const htmlBtn = btn as HTMLElement; + if (!htmlBtn.dataset.rcBound) { + htmlBtn.addEventListener('click', () => { + const headings = document.querySelectorAll('.post-content h1, .post-content h2, .post-content h3, .post-content h4, .post-content h5, .post-content h6'); + if (headings.length > 0) { + const lastHeading = headings[headings.length - 1]; + if (lastHeading) { + const y = lastHeading.getBoundingClientRect().top + window.scrollY - 100; + window.scrollTo({ top: y, behavior: 'smooth' }); + return; + } + } + window.scrollTo({ top: document.documentElement.scrollHeight, behavior: 'smooth' }); + }); + htmlBtn.dataset.rcBound = 'true'; + } + }); + + const currentScrollY = window.scrollY; + const SCROLL_THRESHOLD = 80; + + if (currentScrollY <= 0) { + document.body.classList.add('is-at-top'); + } else { + document.body.classList.remove('is-at-top'); + } + + // 1. Calculate reading progress + const scrollHeight = document.documentElement.scrollHeight; + const innerHeight = window.innerHeight; + const scrollRange = scrollHeight - innerHeight; + + let progress = 0; + if (scrollRange > 0) { + progress = Math.round((currentScrollY / scrollRange) * 100); + progress = Math.max(0, Math.min(100, progress)); + } + + desktopTexts.forEach(el => el.textContent = `${progress}%`); + mobileTexts.forEach(el => el.textContent = `${progress}%`); + + const progressCircles = document.querySelectorAll('[data-progress-circle]'); + const CIRCLE_CIRCUMFERENCE = 62.8318; + progressCircles.forEach(circle => { + const offset = CIRCLE_CIRCUMFERENCE - (progress / 100) * CIRCLE_CIRCUMFERENCE; + (circle as SVGElement).style.strokeDashoffset = offset.toString(); + }); + + const progressStr = `${progress}%`; + document.body.style.setProperty('--reading-progress', progressStr); + + // 2. Auto-hide mobile top bar logic + const isReaderMode = document.body.dataset.readerMode === 'immersive'; + const isMobile = window.innerWidth <= 960; + + if (isMobile) { + if (!isReaderMode && topBar) { + const overlaysOpen = document.body.classList.contains('is-mobile-drawer-open') || + document.body.classList.contains('is-search-overlay-open') || + document.body.classList.contains('is-tags-overlay-open'); + + if (overlaysOpen) { + if (isHidden) { + document.body.classList.remove('mobile-top-bar-hidden'); + isHidden = false; + } + } else { + if (currentScrollY <= 0) { + if (isHidden) { + document.body.classList.remove('mobile-top-bar-hidden'); + isHidden = false; + } + } else if (currentScrollY > lastScrollY) { + document.body.classList.add('is-scrolling-down'); + document.body.classList.remove('is-scrolling-up'); + if (currentScrollY > SCROLL_THRESHOLD && !isHidden) { + document.body.classList.add('mobile-top-bar-hidden'); + isHidden = true; + } + } else if (currentScrollY < lastScrollY) { + document.body.classList.add('is-scrolling-up'); + document.body.classList.remove('is-scrolling-down'); + if (isHidden) { + document.body.classList.remove('mobile-top-bar-hidden'); + isHidden = false; + } + } + } + } + } else { + if (isHidden) { + document.body.classList.remove('mobile-top-bar-hidden'); + isHidden = false; + } + } + + lastScrollY = currentScrollY; +} + diff --git a/assets/ts/search-engine.ts b/assets/ts/search-engine.ts new file mode 100644 index 00000000..dc0ef743 --- /dev/null +++ b/assets/ts/search-engine.ts @@ -0,0 +1,198 @@ +(() => { + interface SearchDataset { + flattened: any[]; + } + + let searchPromise: Promise | null = null; + + function lower(str: string): string { + return (str || "").toLowerCase(); + } + + function loadSearchIndex(): Promise { + if (searchPromise) return searchPromise; + + searchPromise = fetch("/search.json") + .then(res => { + if (!res.ok) throw new Error("Search index fetch failed"); + return res.json(); + }) + .then(data => { + const flattened: any[] = []; + for (const item of data) { + for (const lang of ["zh_CN", "en_US"]) { + const version = item.versions[lang]; + if (version) flattened.push(version); + } + } + return { flattened }; + }) + .catch(err => { + console.error("Failed to load search index:", err); + searchPromise = null; // allow retry + return { flattened: [] }; + }); + + return searchPromise; + } + + function searchNotes(query: string, tagSlug?: string): Promise { + return loadSearchIndex().then(dataset => { + if (!query && !tagSlug) return dataset.flattened; + const kw = lower(query); + return dataset.flattened.filter((item: any) => { + if (tagSlug) { + let hasTag = false; + for (const tag of (item.tags || [])) { + if (tag.toLowerCase().replace(/\s+/g, '-') === tagSlug.toLowerCase()) { + hasTag = true; + break; + } + } + if (!hasTag && (!item.tagIDs || !item.tagIDs.includes(tagSlug))) { + return false; + } + } + if (kw) { + const text = lower(item.title + " " + (item.summary || "") + " " + (item.date || "") + " " + (item.location || "") + " " + (item.tags || []).join(" ")); + if (!text.includes(kw)) { + return false; + } + } + return true; + }); + }); + } + + interface CollectionContext { + kind: "notes" | "tag" | "global"; + rootURL: URL; + tagSlug?: string; + } + + function getCollectionContext(pathname: string = window.location.pathname): CollectionContext { + const url = new URL(pathname, window.location.origin); + let path = url.pathname; + + // Normalize pagination + path = path.replace(/\/page\/\d+\/?$/, '/'); + + const parts = path.split("/").filter(Boolean); + const tagIdx = parts.indexOf("tags"); + if (tagIdx !== -1 && tagIdx + 1 < parts.length) { + const tagSlug = decodeURIComponent(parts[tagIdx + 1] || ''); + const rootPath = path.substring(0, path.indexOf(`/tags/${parts[tagIdx + 1]}`)) + `/tags/${parts[tagIdx + 1]}/`; + return { + kind: "tag", + tagSlug, + rootURL: new URL(rootPath, window.location.origin) + }; + } + + const notesIdx = parts.indexOf("notes"); + if (notesIdx !== -1) { + const rootPath = path.substring(0, path.indexOf("/notes/")) + "/notes/"; + return { + kind: "notes", + rootURL: new URL(rootPath, window.location.origin) + }; + } + + return { + kind: "global", + rootURL: new URL("/", window.location.origin) + }; + } + + function buildSearchURL(query: string): URL { + const ctx = getCollectionContext(); + let targetURL: URL; + + if (ctx.kind === "global") { + targetURL = new URL(window.location.pathname, window.location.origin); + } else { + targetURL = new URL(ctx.rootURL.href); + } + + const params = new URLSearchParams(window.location.search); + if (query) { + params.set("q", query); + } else { + params.delete("q"); + } + + const paramsStr = params.toString(); + if (paramsStr) { + targetURL.search = paramsStr; + } + + return targetURL; + } + + function getCurrentQuery(): string { + return new URLSearchParams(window.location.search).get("q") || ""; + } + + function updateSearchURL(query: string) { + if (window.daybookReplaceURL) { + window.daybookReplaceURL(buildSearchURL(query).href); + } + } + + function escapeHTML(str: string): string { + if (!str) return ""; + return str.replace(/[&<>'"]/g, + tag => ({ + '&': '&', + '<': '<', + '>': '>', + "'": ''', + '"': '"' + }[tag] || tag) + ); + } + + function highlightMatches(text: string, kw: string): string { + if (!kw || !text) return escapeHTML(text); + const lowerText = text.toLowerCase(); + const lowerKw = kw.toLowerCase(); + const idx = lowerText.indexOf(lowerKw); + if (idx === -1) return escapeHTML(text); + + const before = escapeHTML(text.substring(0, idx)); + const match = escapeHTML(text.substring(idx, idx + kw.length)); + const after = escapeHTML(text.substring(idx + kw.length)); + return `${before}${match}${after}`; + } + + window.daybookSearchEngine = { + loadSearchIndex, + searchNotes, + getCollectionContext, + buildSearchURL, + getCurrentQuery, + updateSearchURL, + escapeHTML, + highlightMatches + }; + + function normalizeURL() { + const params = new URLSearchParams(window.location.search); + if (params.has("tag") && window.location.pathname.includes("/notes/")) { + const tag = params.get("tag"); + const newPath = window.location.pathname.replace("/notes/", `/tags/${encodeURIComponent(tag || "")}/`); + if (window.daybookNavigateTo) { + window.daybookNavigateTo(newPath); + } + } + } + + document.addEventListener("daybook:page-load", () => { + normalizeURL(); + }); + if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", normalizeURL); + } else { + normalizeURL(); + } +})(); diff --git a/assets/ts/search-overlay.ts b/assets/ts/search-overlay.ts new file mode 100644 index 00000000..4d3bc5e6 --- /dev/null +++ b/assets/ts/search-overlay.ts @@ -0,0 +1,147 @@ +(() => { + function getMobileInput(): HTMLInputElement | null { + return document.getElementById("mobile-search-input") as HTMLInputElement | null; + } + + function getMobileResults(): HTMLElement | null { + return document.getElementById("mobile-search-results"); + } + + function getMobileEmpty(): HTMLElement | null { + return document.getElementById("mobile-search-empty"); + } + + function getMobileLoading(): HTMLElement | null { + return document.getElementById("mobile-search-loading"); + } + + function renderNoteCard(item: any, keyword: string): string { + const engine = window.daybookSearchEngine; + if (!engine) return ""; + + const titleHtml = engine.highlightMatches(item.title, keyword); + const summaryHtml = item.summary ? `

${engine.highlightMatches(item.summary, keyword)}

` : ''; + + let indicators = ''; + if (item.pinned) indicators += ``; + if (item.hasMusic) indicators += ``; + if (item.hasTranslation) indicators += ``; + + let meta = ``; + if (item.section !== "memos") { + meta += ` ${item.readingMinutes} min`; + } + if (item.updated) { + meta += ` • updated `; + } + + const hasTitleMatch = keyword && titleHtml !== engine.escapeHTML(item.title); + const titleLayout = (keyword && hasTitleMatch) ? titleHtml : (item.titleLayout || titleHtml); + + return ` +`; + } + + async function applyGlobalSearchUI() { + const engine = window.daybookSearchEngine; + if (!engine) return; + + const query = engine.getCurrentQuery(); + + // 1. Sync Mobile Input and Render Mobile Results + const mobileInput = getMobileInput(); + if (mobileInput && mobileInput.value !== query) { + mobileInput.value = query; + } + + if (query && mobileInput) { + // Mobile Overlay rendering + const ctx = engine.getCollectionContext(); + const matches = await engine.searchNotes(query, ctx.tagSlug); + const results = ctx.kind === "notes" ? matches.filter((item: any) => item.section !== "memos") : matches; + const resultsContainer = getMobileResults(); + const emptyState = getMobileEmpty(); + + if (resultsContainer) { + resultsContainer.innerHTML = results.map((item: any) => renderNoteCard(item, query)).join(""); + } + + if (emptyState) { + emptyState.hidden = results.length > 0; + } + } else { + const resultsContainer = getMobileResults(); + const emptyState = getMobileEmpty(); + if (resultsContainer) resultsContainer.innerHTML = ""; + if (emptyState) emptyState.hidden = true; + } + + } + + let debounceTimer: number; + function handleInputEvent(input: HTMLInputElement) { + const engine = window.daybookSearchEngine; + if (!engine) return; + + clearTimeout(debounceTimer); + debounceTimer = window.setTimeout(() => { + const query = input.value.trim(); + engine.updateSearchURL(query); + applyGlobalSearchUI(); + }, 150); + } + + document.addEventListener("input", function(event) { + const target = event.target as HTMLElement; + if (!target) return; + + if (target.id === "mobile-search-input") { + handleInputEvent(target as HTMLInputElement); + } + }); + + document.addEventListener("focusin", function(event) { + const target = event.target as HTMLElement; + if (!target) return; + if (target.closest("[data-notes-search]")) { + const engine = window.daybookSearchEngine; + if (engine) engine.loadSearchIndex(); + } + }); + + document.addEventListener("click", function(event) { + const target = event.target as HTMLElement | null; + if (!target) return; + const btn = target.closest('[data-mobile-overlay-target="search"]'); + if (btn) { + const engine = window.daybookSearchEngine; + if (engine) engine.loadSearchIndex(); + } + }); + + document.addEventListener("daybook:page-load", () => { + clearTimeout(debounceTimer); + applyGlobalSearchUI(); + }); + + if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", applyGlobalSearchUI); + } else { + applyGlobalSearchUI(); + } +})(); diff --git a/assets/ts/settings-overlay.ts b/assets/ts/settings-overlay.ts new file mode 100644 index 00000000..a33491b2 --- /dev/null +++ b/assets/ts/settings-overlay.ts @@ -0,0 +1,130 @@ +import { loadSettings, updateSetting, DaybookSettings } from './settings-store.js'; + +export function initSettingsOverlay() { + const persistentLogo = document.querySelector('.persistent-logo'); + if (!persistentLogo) return; + + // Bind to logo once (since it's outside page-frame) + persistentLogo.addEventListener('click', (e: Event) => { + e.preventDefault(); + const overlay = document.getElementById('settings-overlay'); + if (!overlay) return; + overlay.removeAttribute('inert'); + overlay.setAttribute('aria-hidden', 'false'); + overlay.classList.add('is-open'); + document.body.style.overflow = 'hidden'; + }); + + const closeOverlay = (overlay: HTMLElement) => { + if (!document.dispatchEvent(new CustomEvent('daybook:settings-close', { cancelable: true }))) return; + overlay.setAttribute('inert', ''); + overlay.setAttribute('aria-hidden', 'true'); + overlay.classList.remove('is-open'); + document.body.style.overflow = ''; + (persistentLogo as HTMLElement).focus({ preventScroll: true }); + }; + + document.addEventListener('daybook:settings-dismiss', () => { + const overlay = document.getElementById('settings-overlay'); + if (overlay) closeOverlay(overlay); + }); + + document.addEventListener('click', (e) => { + const target = e.target as HTMLElement; + const overlay = document.getElementById('settings-overlay'); + if (!overlay || !overlay.classList.contains('is-open')) return; + + if (target.closest('[data-privacy-open]')) { + document.dispatchEvent(new CustomEvent('daybook:privacy-open', { detail: { withinSettings: true } })); + return; + } + + if (target.closest('[data-settings-close]')) { + closeOverlay(overlay); + } + }); + + document.addEventListener('pointerdown', (e) => { + if ((e.target as HTMLElement).closest('.settings-overlay')) e.stopPropagation(); + }); + + document.addEventListener('mousedown', (e) => { + if ((e.target as HTMLElement).closest('.settings-overlay')) e.stopPropagation(); + }); + + document.addEventListener('touchstart', (e) => { + if ((e.target as HTMLElement).closest('.settings-overlay')) e.stopPropagation(); + }); + + document.addEventListener('keydown', (e) => { + const overlay = document.getElementById('settings-overlay'); + if (e.key === 'Escape' && overlay && overlay.classList.contains('is-open')) { + closeOverlay(overlay); + } + }); + + const settings = loadSettings(); + + const setupCheckbox = (id: string, key: keyof DaybookSettings) => { + const checkbox = document.getElementById(id) as HTMLInputElement | null; + if (checkbox) { + checkbox.checked = settings[key]; + checkbox.addEventListener('change', (e) => { + const checked = (e.target as HTMLInputElement).checked; + updateSetting(key, checked); + }); + } + }; + + setupCheckbox('setting-custom-cursor', 'useCustomCursor'); + setupCheckbox('setting-clock-cursor', 'enableClockCursor'); + setupCheckbox('setting-disable-comments', 'disableComments'); + setupCheckbox('setting-reduced-motion', 'reducedMotion'); + + const customCursorCheckbox = document.getElementById('setting-custom-cursor') as HTMLInputElement | null; + const clockCursorCheckbox = document.getElementById('setting-clock-cursor') as HTMLInputElement | null; + const clockCursorLabel = document.querySelector('.setting-item-clock-cursor') as HTMLElement | null; + + if (customCursorCheckbox && clockCursorCheckbox && clockCursorLabel) { + const updateClockCursorState = () => { + if (!customCursorCheckbox.checked) { + clockCursorLabel.style.opacity = '0.5'; + clockCursorLabel.style.pointerEvents = 'none'; + clockCursorCheckbox.disabled = true; + } else { + clockCursorLabel.style.opacity = '1'; + clockCursorLabel.style.pointerEvents = 'auto'; + clockCursorCheckbox.disabled = false; + } + }; + customCursorCheckbox.addEventListener('change', updateClockCursorState); + updateClockCursorState(); + } + + const syncLanguage = (lang: string) => { + // Normalize language string + const isEn = lang.toLowerCase().startsWith('en'); + const textAttr = isEn ? 'data-i18n-en' : 'data-i18n-zh'; + const ariaAttr = isEn ? 'data-i18n-aria-en' : 'data-i18n-aria-zh'; + + document.body.querySelectorAll(`[${textAttr}]`).forEach((el) => { + const translation = el.getAttribute(textAttr); + if (translation) el.textContent = translation; + }); + + document.body.querySelectorAll(`[${ariaAttr}]`).forEach((el) => { + const translation = el.getAttribute(ariaAttr); + if (translation) el.setAttribute('aria-label', translation); + }); + }; + + // Sync on initialization + syncLanguage(document.documentElement.lang); + + // Sync on dynamic SPA language change + document.addEventListener('daybook:lang-change', (e: any) => { + if (e.detail && e.detail.lang) { + syncLanguage(e.detail.lang); + } + }); +} diff --git a/assets/ts/settings-store.ts b/assets/ts/settings-store.ts new file mode 100644 index 00000000..1e279c73 --- /dev/null +++ b/assets/ts/settings-store.ts @@ -0,0 +1,90 @@ +export interface DaybookSettings { + useCustomCursor: boolean; + enableClockCursor: boolean; + disableComments: boolean; + reducedMotion: boolean; +} + +const STORAGE_KEY = 'daybook:user-settings'; + +const DEFAULT_SETTINGS: DaybookSettings = { + useCustomCursor: false, + enableClockCursor: false, + disableComments: false, + reducedMotion: false +}; + +let currentSettings: DaybookSettings = { ...DEFAULT_SETTINGS }; + +export function loadSettings(): DaybookSettings { + try { + const raw = localStorage.getItem(STORAGE_KEY); + if (raw) { + const { useSystemCursor, ...saved } = JSON.parse(raw); + currentSettings = { + ...DEFAULT_SETTINGS, + ...saved, + // Preserve existing choices stored under the old, inverted preference. + useCustomCursor: typeof saved.useCustomCursor === 'boolean' ? saved.useCustomCursor : useSystemCursor === false, + }; + } + } catch (e) { + console.error('[Daybook] Failed to parse settings from localStorage', e); + } + return currentSettings; +} + +export function getSettings(): DaybookSettings { + return currentSettings; +} + +export function updateSetting(key: K, value: DaybookSettings[K]) { + currentSettings[key] = value; + try { + localStorage.setItem(STORAGE_KEY, JSON.stringify(currentSettings)); + } catch (e) { + console.error('[Daybook] Failed to save settings to localStorage', e); + } + + syncSettingsToDOM(); + document.dispatchEvent(new CustomEvent('daybook:settings-change', { detail: currentSettings })); +} + +export function syncSettingsToDOM() { + const html = document.documentElement; + if (!currentSettings.useCustomCursor) { + html.setAttribute('data-use-system-cursor', 'true'); + } else { + html.removeAttribute('data-use-system-cursor'); + } + + if (currentSettings.enableClockCursor) { + html.setAttribute('data-clock-cursor', 'true'); + } else { + html.removeAttribute('data-clock-cursor'); + } + + if (currentSettings.disableComments) { + html.setAttribute('data-comments-disabled', 'true'); + } else { + html.removeAttribute('data-comments-disabled'); + } + + if (currentSettings.reducedMotion) { + html.setAttribute('data-reduced-motion', 'true'); + } else { + html.removeAttribute('data-reduced-motion'); + } +} + +// Ensure state is loaded and synced when module initializes +loadSettings(); +syncSettingsToDOM(); + +// Keep state synced across different ES modules if they are bundled separately +document.addEventListener('daybook:settings-change', (e: Event) => { + const customEvent = e as CustomEvent; + if (customEvent.detail) { + currentSettings = { ...currentSettings, ...customEvent.detail }; + } +}); diff --git a/assets/ts/share-overlay.ts b/assets/ts/share-overlay.ts new file mode 100644 index 00000000..3de1fe03 --- /dev/null +++ b/assets/ts/share-overlay.ts @@ -0,0 +1,122 @@ +import { animateTextChange } from "./text-roll"; + +export function initShareOverlay() { + const overlay = document.getElementById('share-overlay'); + if (!overlay) return; + + const closeBtns = overlay.querySelectorAll('[data-share-close]'); + const textarea = overlay.querySelector('#share-textarea') as HTMLTextAreaElement; + const xBtn = overlay.querySelector('[data-share-x]'); + const tgBtn = overlay.querySelector('[data-share-tg]'); + const copyBtn = overlay.querySelector('[data-share-copy]'); + const copyText = overlay.querySelector('.share-copy-text'); + + // Prevent multiple bindings + if (overlay.dataset.shareBound === 'true') { + return; + } + overlay.dataset.shareBound = 'true'; + + let currentShareURL = ''; + + function openShare(title: string, url: string, shareText: string) { + if (!overlay || !textarea) return; + + currentShareURL = url; + // The backend provides shareText with {Title} already replaced. + // We just need to append the URL on a new line. + const defaultText = shareText + '\n' + url; + textarea.value = defaultText; + + overlay.removeAttribute('inert'); + overlay.setAttribute('aria-hidden', 'false'); + overlay.classList.add('is-open'); + document.body.style.overflow = 'hidden'; + } + + function closeShare() { + if (!overlay) return; + overlay.setAttribute('inert', ''); + overlay.setAttribute('aria-hidden', 'true'); + overlay.classList.remove('is-open'); + document.body.style.overflow = ''; + } + + // Delegated click handler on document to open share dialogs + document.addEventListener('click', (e) => { + const target = e.target as HTMLElement; + const btn = target.closest('[data-share-open]'); + if (btn) { + const title = btn.getAttribute('data-share-title') || ''; + const url = btn.getAttribute('data-share-link') || ''; + const shareText = btn.getAttribute('data-share-text') || ''; + openShare(title, url, shareText); + } + }); + + closeBtns.forEach(btn => { + btn.addEventListener('click', closeShare); + }); + + document.addEventListener('keydown', (e) => { + if (e.key === 'Escape' && overlay.classList.contains('is-open')) { + closeShare(); + } + }); + + if (xBtn) { + xBtn.addEventListener('click', () => { + const text = textarea.value; + const url = `https://twitter.com/intent/tweet?text=${encodeURIComponent(text)}`; + window.open(url, '_blank', 'noopener,noreferrer'); + }); + } + + function buildTelegramPayload(text: string, shareURL: string) { + if (!shareURL || !text.includes(shareURL)) { + return text; + } + + const idx = text.indexOf(shareURL); + let before = text.substring(0, idx); + let after = text.substring(idx + shareURL.length); + + if (before.endsWith('\n') && after.startsWith('\n')) { + before = before.substring(0, before.length - 1); + } else if (before.trim() === '' && after.startsWith('\n')) { + after = after.substring(1); + } else if (after.trim() === '' && before.endsWith('\n')) { + before = before.substring(0, before.length - 1); + } + + return (before + after).trim(); + } + + if (tgBtn) { + tgBtn.addEventListener('click', () => { + const text = textarea.value; + const tgText = buildTelegramPayload(text, currentShareURL); + const url = `https://t.me/share/url?url=${encodeURIComponent(currentShareURL)}&text=${encodeURIComponent(tgText)}`; + window.open(url, '_blank', 'noopener,noreferrer'); + }); + } + + if (copyBtn && copyText) { + copyBtn.addEventListener('click', () => { + const text = textarea.value; + navigator.clipboard.writeText(text).then(() => { + const lang = document.documentElement.lang.toLowerCase().startsWith('en') ? 'en_US' : 'zh'; + const copiedText = copyText.getAttribute(`data-text-copied-${lang}`) || 'Copied'; + + animateTextChange(copyText, copiedText); + + setTimeout(() => { + // Re-fetch language in case user changed it during the timeout + const currentLang = document.documentElement.lang.toLowerCase().startsWith('en') ? 'en_US' : 'zh'; + const freshOriginal = copyText.getAttribute(`data-text-copy-${currentLang}`) || 'Copy'; + animateTextChange(copyText, freshOriginal); + }, 1500); + }); + }); + } +} diff --git a/assets/ts/site-presence.ts b/assets/ts/site-presence.ts new file mode 100644 index 00000000..72f710ff --- /dev/null +++ b/assets/ts/site-presence.ts @@ -0,0 +1,135 @@ +import { updateNumber } from "./number-flip"; +import { privacyReady } from "./privacy-store"; +function normalizePath(p: string): string { + try { + const url = new URL(p, window.location.origin); + let pathname = decodeURI(url.pathname); + + pathname = pathname.replace(/\/+/g, '/'); + if (!pathname.startsWith('/')) pathname = '/' + pathname; + if (pathname !== '/' && !pathname.endsWith('/')) { + pathname += '/'; + } + return pathname; + } catch { + return '/'; + } +} + +let ws: WebSocket | null = null; +let isConnecting = false; +let reconnectTimer: any = null; +let reconnectAttempts = 0; +const MAX_RECONNECT_ATTEMPTS = 10; +let currentPresencePath = ""; +let isStatsEnabled = true; + +function updatePresenceDOM(path: string, pageViewers: number, siteViewers: number) { + const siteEls = document.querySelectorAll("[data-site-viewers]"); + siteEls.forEach(el => { + if (el.classList.contains('archive-stat-num')) { + if (!el.classList.contains('anim-done')) { + el.setAttribute('data-target', siteViewers.toString()); + document.dispatchEvent(new CustomEvent('daybook:stats-loaded')); + } else { + el.textContent = siteViewers.toLocaleString(); + } + } else { + updateNumber(el, siteViewers.toLocaleString()); + } + }); + + const pageEls = document.querySelectorAll("[data-page-viewers]"); + pageEls.forEach(el => { + const pathAttr = el.getAttribute("data-path"); + if (pathAttr && normalizePath(pathAttr) === path) { + updateNumber(el, pageViewers.toLocaleString()); + } + }); +} + +function connectWebSocket() { + if (ws && (ws.readyState === WebSocket.OPEN || ws.readyState === WebSocket.CONNECTING)) { + return; + } + + if (reconnectAttempts > MAX_RECONNECT_ATTEMPTS) { + return; + } + + isConnecting = true; + currentPresencePath = normalizePath(window.location.pathname); + + const protocol = window.location.protocol === "https:" ? "wss:" : "ws:"; + const wsUrl = `${protocol}//${window.location.host}/api/presence?path=${encodeURIComponent(currentPresencePath)}`; + + try { + ws = new WebSocket(wsUrl); + } catch (e) { + isConnecting = false; + scheduleReconnect(); + return; + } + + ws.onopen = () => { + isConnecting = false; + reconnectAttempts = 0; + }; + + ws.onmessage = (event) => { + try { + const data = JSON.parse(event.data); + if (data.type === "presence") { + updatePresenceDOM(data.path, data.pageViewers, data.siteViewers); + } + } catch (e) {} + }; + + ws.onclose = () => { + ws = null; + isConnecting = false; + scheduleReconnect(); + }; +} + +function scheduleReconnect() { + if (!isStatsEnabled) return; + if (reconnectTimer) clearTimeout(reconnectTimer); + + reconnectAttempts++; + const delay = Math.min(1000 * Math.pow(2, reconnectAttempts), 30000); + reconnectTimer = setTimeout(() => { + connectWebSocket(); + }, delay); +} + +export async function initSitePresence() { + const statsEnabledAttr = document.body.dataset.statsEnabled; + isStatsEnabled = statsEnabledAttr === "true" && await privacyReady(); + + if (!isStatsEnabled) { + clearTimeout(reconnectTimer); + if (ws) { + ws.close(); + ws = null; + } + return; + } + + const newPath = normalizePath(window.location.pathname); + + if (!ws || ws.readyState === WebSocket.CLOSED || ws.readyState === WebSocket.CLOSING) { + currentPresencePath = newPath; + reconnectAttempts = 0; + connectWebSocket(); + } else if (ws.readyState === WebSocket.OPEN) { + if (currentPresencePath !== newPath) { + currentPresencePath = newPath; + ws.send(JSON.stringify({ type: "navigate", path: currentPresencePath })); + } + } else { + currentPresencePath = newPath; + } +} + +document.addEventListener('daybook:privacy-change', () => { void initSitePresence(); }); diff --git a/assets/ts/site-stats.ts b/assets/ts/site-stats.ts new file mode 100644 index 00000000..631434de --- /dev/null +++ b/assets/ts/site-stats.ts @@ -0,0 +1,149 @@ +import { updateNumber } from "./number-flip"; +import { analyticsAllowed, privacyReady } from "./privacy-store"; +interface StatsResponse { + path: string; + pageViews: number; + totalViews: number; + visitors: number; +} + +function normalizePath(p: string): string { + try { + const url = new URL(p, window.location.origin); + let pathname = decodeURI(url.pathname); + + pathname = pathname.replace(/\/+/g, '/'); + if (!pathname.startsWith('/')) pathname = '/' + pathname; + if (pathname !== '/' && !pathname.endsWith('/')) { + pathname += '/'; + } + return pathname; + } catch { + return '/'; + } +} + +let hitPromise: Promise | null = null; +let lastHitPath = ""; + +async function hitPath(path: string, countView: boolean): Promise { + const normalized = normalizePath(path); + + const statsEnabled = document.body.dataset.statsEnabled === "true"; + if (!statsEnabled) { + return null; + } + const apiBase = "/api"; + + // Prevent multiple simultaneous hits for the same navigation (e.g. strict mode or duplicate events) + if (countView && hitPromise && lastHitPath === normalized) { + return hitPromise; + } + lastHitPath = normalized; + + const previousHit = hitPromise; + hitPromise = (async () => { + await previousHit; + if (!await privacyReady()) return null; + try { + const res = await fetch(`${apiBase}/hit`, { + method: "POST", + headers: { + "Content-Type": "application/json" + }, + // Omit cookies entirely for aggregate-only visits. + credentials: analyticsAllowed() ? 'same-origin' : 'omit', + body: JSON.stringify({ path: normalized, analytics: analyticsAllowed(), countView }), + signal: AbortSignal.timeout(12000), + }); + if (res.ok) { + return (await res.json()) as StatsResponse; + } + } catch (e) { + console.error("[Site Stats] Post hit failed", e); + } + return null; + })(); + + return hitPromise; +} + +export function initSiteStats(root: Document | HTMLElement = document, countView = true): Promise | null { + const promise = hitPath(window.location.pathname, countView); + if (!promise) return null; + + promise.then(stats => { + if (!stats) return; + + // Update DOM + const visitorsEls = root.querySelectorAll("[data-site-visitors]"); + visitorsEls.forEach(el => { + updateNumber(el, stats.visitors.toLocaleString()); + }); + + const viewsEls = root.querySelectorAll("[data-site-views]"); + viewsEls.forEach(el => { + updateNumber(el, stats.totalViews.toLocaleString()); + }); + + const pageViewsEls = root.querySelectorAll("[data-page-views]"); + pageViewsEls.forEach(el => { + const pathAttr = el.getAttribute("data-path"); + if (pathAttr && normalizePath(pathAttr) === stats.path) { + updateNumber(el, stats.pageViews.toLocaleString()); + } + }); + + const pageViewsLabelEls = root.querySelectorAll("[data-page-views-label]"); + pageViewsLabelEls.forEach(el => { + const pathAttr = el.getAttribute("data-path"); + if (pathAttr && normalizePath(pathAttr) === stats.path) { + el.textContent = stats.pageViews === 1 ? "view" : "views"; + } + }); + + // For archive page stats animation + const uvAnimEls = root.querySelectorAll("[data-site-visitors-anim]"); + uvAnimEls.forEach(el => { + el.setAttribute("data-target", stats.visitors.toString()); + }); + const uvLabelEls = root.querySelectorAll("[data-site-visitors-label]"); + uvLabelEls.forEach(el => { + el.textContent = stats.visitors === 1 ? "visitor" : "visitors"; + }); + + const pvAnimEls = root.querySelectorAll("[data-site-views-anim]"); + pvAnimEls.forEach(el => { + el.setAttribute("data-target", stats.totalViews.toString()); + }); + const pvLabelEls = root.querySelectorAll("[data-site-views-label]"); + pvLabelEls.forEach(el => { + el.textContent = stats.totalViews === 1 ? "k view" : "k views"; + }); + + document.dispatchEvent(new CustomEvent("daybook:stats-loaded")); + }); + + return promise; +} + +// Apply consent to this page without counting a second view. +document.addEventListener('daybook:privacy-change', () => { void initSiteStats(document, false); }); + +export function initSiteUptime(root: Document | HTMLElement = document) { + const uptimeEls = root.querySelectorAll("[data-site-uptime]"); + uptimeEls.forEach(el => { + const startedAt = el.getAttribute("data-started-at"); + if (!startedAt) return; + + const startTime = new Date(startedAt).getTime(); + const now = new Date().getTime(); + if (isNaN(startTime) || startTime > now) { + el.textContent = "--"; + return; + } + + const diffDays = Math.floor((now - startTime) / (1000 * 60 * 60 * 24)); + el.textContent = `${diffDays} 天`; + }); +} diff --git a/assets/ts/text-roll.ts b/assets/ts/text-roll.ts new file mode 100644 index 00000000..5d36d8c1 --- /dev/null +++ b/assets/ts/text-roll.ts @@ -0,0 +1,50 @@ +const rolls = new WeakMap(); + +export function reducedMotion(): boolean { + return document.documentElement.dataset.reducedMotion === 'true' || + window.matchMedia('(prefers-reduced-motion: reduce)').matches; +} + +/** The shared Copy → Copied motion, with cancellation for rapid state changes. */ +export function animateTextChange(container: HTMLElement, text: string, immediate = false, onFinish?: () => void) { + const pending = rolls.get(container); + const oldText = pending?.text ?? container.textContent?.trim() ?? ''; + if (pending) clearTimeout(pending.timer); + rolls.delete(container); + + const settle = () => { + container.textContent = text; + container.classList.remove('text-roll-active'); + rolls.delete(container); + onFinish?.(); + }; + if (immediate || reducedMotion() || oldText === text) { + settle(); + return; + } + + const oldChars = Array.from(oldText), newChars = Array.from(text); + const length = Math.max(oldChars.length, newChars.length); + container.replaceChildren(); + container.classList.add('text-roll-active'); + for (let i = 0; i < length; i++) { + const wrapper = document.createElement('span'); + wrapper.className = 'text-roll-char'; + wrapper.style.setProperty('--roll-delay', `${i * 30}ms`); + if (oldChars[i]) { + const old = document.createElement('span'); + old.textContent = oldChars[i]!; + old.className = 'text-roll-old'; + if (newChars[i]) old.classList.add('text-roll-overlap'); + wrapper.append(old); + } + if (newChars[i]) { + const next = document.createElement('span'); + next.textContent = newChars[i]!; + next.className = 'text-roll-new'; + wrapper.append(next); + } + container.append(wrapper); + } + rolls.set(container, { text, timer: window.setTimeout(settle, 450 + length * 30) }); +} diff --git a/assets/ts/theme.ts b/assets/ts/theme.ts new file mode 100644 index 00000000..c900498b --- /dev/null +++ b/assets/ts/theme.ts @@ -0,0 +1,392 @@ +(function () { + const root = document.documentElement; + + // Polyfill translation lookup on client-side for dynamic updates + // Since we don't have a JS i18n bundle, we'll derive translation from language + + const translations = { + 'zh_CN': { + 'theme.light': '浅色', + 'theme.dark': '深色', + 'theme.system': 'è·Ÿéš�系统', + 'theme.system_light': 'è·Ÿéš�系统(浅色)', + 'theme.system_dark': 'è·Ÿéš�系统(深色)', + 'palette.cool': '冷色', + 'palette.warm': '暖色', + }, + 'en_US': { + 'theme.light': 'Light', + 'theme.dark': 'Dark', + 'theme.system': 'System', + 'theme.system_light': 'System (Light)', + 'theme.system_dark': 'System (Dark)', + 'palette.cool': 'Cool', + 'palette.warm': 'Warm', + } + }; + + function T(key: keyof typeof translations['en_US']): string { + const lang = root.lang.toLowerCase().startsWith('en') ? 'en_US' : 'zh_CN'; + return translations[lang][key] || key; + } + + function savedThemeMode(): string { + try { + return localStorage.getItem("theme-mode") || ""; + } catch (error) { + return ""; + } + } + + function savedLegacyTheme(): string { + try { + return localStorage.getItem("theme") || ""; + } catch (error) { + return ""; + } + } + + function savedPalette(): string { + try { + return localStorage.getItem("palette") || ""; + } catch (error) { + return ""; + } + } + + function savedEyeCare(): string { + try { + return localStorage.getItem("eyeCare") || ""; + } catch (error) { + return ""; + } + } + + function storeThemeMode(mode: string) { + try { + localStorage.setItem("theme-mode", mode); + } catch (error) { + } + } + + function storePalette(palette: string) { + try { + localStorage.setItem("palette", palette); + } catch (error) {} + } + + function getSystemPreferredTheme(): string { + if (window.matchMedia && window.matchMedia("(prefers-color-scheme: dark)").matches) { + return "dark"; + } + return "light"; + } + + function resolveInitialThemeMode(): string { + const mode = savedThemeMode(); + if (mode === "system" || mode === "light" || mode === "dark") { + return mode; + } + + // Legacy migration + const legacy = savedLegacyTheme(); + if (legacy === "light" || legacy === "dark") { + storeThemeMode(legacy); + try { localStorage.removeItem("theme"); } catch(e) {} + return legacy; + } + + return "system"; + } + + function preferredPalette(): string { + const palette = savedPalette(); + if (palette === "warm" || palette === "default") return palette; + + // Legacy migration + const legacy = savedEyeCare(); + if (legacy === "true") { + storePalette("warm"); + try { localStorage.removeItem("eyeCare"); } catch(e) {} + return "warm"; + } else if (legacy === "false") { + storePalette("default"); + try { localStorage.removeItem("eyeCare"); } catch(e) {} + return "default"; + } + return "default"; + } + + function applyThemeMode(mode: string, remember: boolean) { + const resolvedTheme = mode === "system" ? getSystemPreferredTheme() : mode; + + root.dataset['themeMode'] = mode; + root.dataset['theme'] = resolvedTheme; + + if (remember) { + storeThemeMode(mode); + } + + syncThemeButtons(); + } + + function syncThemeButtons() { + const mode = root.dataset['themeMode'] || "system"; + const resolved = root.dataset['theme'] || "light"; + + // Desktop Buttons + document.querySelectorAll(".theme-toggle").forEach(function (button) { + if (button.tagName.toLowerCase() === "button") { + if (mode === "system") { + button.setAttribute("aria-label", T(`theme.system_${resolved}` as any)); + if (button.hasAttribute("data-tooltip")) { + button.setAttribute("data-tooltip", T(`theme.system_${resolved}` as any)); + } + } else { + button.setAttribute("aria-label", T(`theme.${mode}` as any)); + if (button.hasAttribute("data-tooltip")) { + button.setAttribute("data-tooltip", T(`theme.${mode}` as any)); + } + } + } + }); + + // Mobile Radiogroup + const modes = ["light", "system", "dark"]; + document.querySelectorAll(".mobile-theme-selector").forEach(function(selector) { + const previous = selector.dataset['mode']; + if (previous && previous !== mode) { + selector.dataset['direction'] = modes.indexOf(mode) > modes.indexOf(previous) ? "right" : "left"; + } + selector.dataset['mode'] = mode; + }); + document.querySelectorAll(".theme-selector-btn").forEach(function(btn) { + if (btn.getAttribute("data-mode") === mode) { + btn.setAttribute("aria-checked", "true"); + } else { + btn.setAttribute("aria-checked", "false"); + } + }); + } + + function applyPalette(palette: string, remember: boolean) { + const nextPalette = palette === "warm" ? "warm" : "default"; + root.dataset['palette'] = nextPalette; + + if (remember) { + storePalette(nextPalette); + } + + document.querySelectorAll(".palette-toggle").forEach(function (button) { + button.setAttribute("aria-pressed", nextPalette === "warm" ? "true" : "false"); + + if (button.hasAttribute("data-tooltip")) { + button.setAttribute("data-tooltip", T(nextPalette === "warm" ? 'palette.warm' : 'palette.cool')); + } + button.setAttribute("aria-label", T(nextPalette === "warm" ? 'palette.warm' : 'palette.cool')); + + if (button.getAttribute("role") === "switch") { + button.setAttribute("aria-checked", nextPalette === "warm" ? "true" : "false"); + } + }); + } + + function shouldAnimateTheme(): boolean { + if (!document.startViewTransition) { + return false; + } + if (!window.matchMedia) { + return true; + } + return !window.matchMedia("(prefers-reduced-motion: reduce)").matches; + } + + function clearThemeTransition(attributeName: string) { + root.style.removeProperty("view-transition-name"); + delete root.dataset[attributeName]; + } + + const initialThemeMode = resolveInitialThemeMode(); + applyThemeMode(initialThemeMode, false); + + const resolvedPalette = preferredPalette(); + applyPalette(resolvedPalette, false); + + window.daybookSyncThemeButtons = function () { + syncThemeButtons(); + applyPalette(root.dataset['palette'] || "default", false); + }; + + // Deprecated usage, but mapping for legacy callers + window.daybookSetTheme = function(theme: string, remember: boolean) { + applyThemeMode(theme, remember); + }; + window.daybookSetPalette = applyPalette; + window.daybookShouldAnimateTheme = shouldAnimateTheme; + window.daybookClearThemeTransition = clearThemeTransition; + + document.addEventListener("daybook:page-load", function () { + applyThemeMode(root.dataset['themeMode'] || "system", false); + applyPalette(root.dataset['palette'] || "default", false); + }); + + if (window.matchMedia) { + window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", function(e) { + if (root.dataset['themeMode'] === "system") { + const newResolved = e.matches ? "dark" : "light"; + if (!shouldAnimateTheme()) { + root.dataset['theme'] = newResolved; + syncThemeButtons(); + return; + } + + root.style.setProperty("view-transition-name", "theme-toggle-transition"); + root.dataset['themeChanging'] = "true"; + + const transition = document.startViewTransition!(function() { + root.dataset['theme'] = newResolved; + syncThemeButtons(); + }); + + transition.finished.then(function() { + clearThemeTransition("themeChanging"); + }, function() { + clearThemeTransition("themeChanging"); + }); + } + }); + } + + document.addEventListener("pointerdown", function (event: PointerEvent) { + const target = event.target as HTMLElement | null; + if (!target) return; + const switchEl = target.closest(".material-switch"); + if (switchEl) { + switchEl.classList.add("is-pressed"); + } + }); + + function removePressedState() { + document.querySelectorAll(".material-switch.is-pressed").forEach(function (el) { + el.classList.remove("is-pressed"); + }); + } + + document.addEventListener("pointerup", removePressedState); + document.addEventListener("pointercancel", removePressedState); + + let isTransitioning = false; + + document.addEventListener("click", function (event: MouseEvent) { + if (isTransitioning) return; + + const target = event.target as HTMLElement | null; + if (!target) return; + + // Mobile radio buttons + const selectorBtn = target.closest(".theme-selector-btn"); + if (selectorBtn) { + const mode = selectorBtn.getAttribute("data-mode"); + if (mode && mode !== root.dataset['themeMode']) { + const nextResolved = mode === "system" ? getSystemPreferredTheme() : mode; + const currentResolved = root.dataset['theme']; + + if (nextResolved === currentResolved || !shouldAnimateTheme()) { + applyThemeMode(mode, true); + return; + } + + isTransitioning = true; + // 1. Move the indicator immediately + root.dataset['themeMode'] = mode; + storeThemeMode(mode); + syncThemeButtons(); + + // 2. Wait for indicator animation to complete before changing theme + setTimeout(function() { + root.style.setProperty("view-transition-name", "theme-toggle-transition"); + root.dataset['themeChanging'] = "true"; + const transition = document.startViewTransition!(function() { + root.dataset['theme'] = nextResolved; + syncThemeButtons(); + }); + transition.finished.then(function() { + clearThemeTransition("themeChanging"); + isTransitioning = false; + }, function() { + clearThemeTransition("themeChanging"); + isTransitioning = false; + }); + }, 350); + } + return; + } + + // Desktop toggle button + const themeButton = target.closest(".theme-toggle"); + if (themeButton) { + const currentMode = root.dataset['themeMode'] || "system"; + // cycle logic: system -> light -> dark -> system + const nextMode = currentMode === "system" ? "light" : (currentMode === "light" ? "dark" : "system"); + const nextResolved = nextMode === "system" ? getSystemPreferredTheme() : nextMode; + const currentResolved = root.dataset['theme']; + + if (nextResolved === currentResolved || !shouldAnimateTheme()) { + applyThemeMode(nextMode, true); + return; + } + + isTransitioning = true; + // Start view transition immediately for desktop, active state gives physical feedback + root.style.setProperty("view-transition-name", "theme-toggle-transition"); + root.dataset['themeChanging'] = "true"; + + const themeTransition = document.startViewTransition!(function () { + applyThemeMode(nextMode, true); + }); + + themeTransition.finished.then(function () { + clearThemeTransition("themeChanging"); + isTransitioning = false; + }, function () { + clearThemeTransition("themeChanging"); + isTransitioning = false; + }); + + return; + } + + const paletteButton = target.closest(".palette-toggle"); + if (paletteButton) { + const currentPalette = root.dataset['palette'] === "warm" ? "warm" : "default"; + const nextPalette = currentPalette === "warm" ? "default" : "warm"; + + if (!shouldAnimateTheme()) { + applyPalette(nextPalette, true); + return; + } + + isTransitioning = true; + if (paletteButton.getAttribute("role") === "switch") { + paletteButton.setAttribute("aria-checked", nextPalette === "warm" ? "true" : "false"); + } + + setTimeout(function () { + root.style.setProperty("view-transition-name", "palette-toggle-transition"); + root.dataset['paletteChanging'] = nextPalette === "warm" ? "to-warm" : "from-warm"; + + const paletteTransition = document.startViewTransition!(function () { + applyPalette(nextPalette, true); + }); + + paletteTransition.finished.then(function () { + clearThemeTransition("paletteChanging"); + isTransitioning = false; + }, function () { + clearThemeTransition("paletteChanging"); + isTransitioning = false; + }); + }, 350); + } + }); +})(); diff --git a/assets/ts/toc.ts b/assets/ts/toc.ts new file mode 100644 index 00000000..e4fde8c4 --- /dev/null +++ b/assets/ts/toc.ts @@ -0,0 +1,808 @@ +import { + ReadingTocRail, + type ReadingTocRailGeometry, + type ReadingTocRailHeading, +} from "./toc/reading-toc-rail"; + +const RAIL_MEDIA_QUERY = "(min-width: 1200px)"; +const MOTION_MEDIA_QUERY = "(prefers-reduced-motion: reduce)"; +const DEFAULT_ACTIVATION_LINE = 96; +const DEFAULT_BOTTOM_INSET = 96; +const MIN_HEADING_COUNT = 2; +const MIN_READING_TRAVEL = 240; +const MIN_RAIL_HEIGHT = 320; +const MIN_RAIL_WIDTH = 160; +const MODE_HYSTERESIS = 8; +const MAX_SCROLL_SPEED = 5000; +const GEOMETRY_EPSILON = 1; + +interface TocHeadingEntry { + id: string; + text: string; + level: number; + element: HTMLElement; + link: HTMLAnchorElement; + item: HTMLElement; + documentY: number; + railRatio: number; + tocTop: number; + tocHeight: number; +} + +interface TocMetrics { + activationLine: number; + contentHeight: number; + contentTop: number; + headerBottom: number; + railEligible: boolean; + railGeometry: ReadingTocRailGeometry | null; + readingTravel: number; + tocListScrollTop: number; + tocListTop: number; + tocVisible: boolean; +} + +function clamp(value: number, min: number, max: number): number { + return Math.min(max, Math.max(min, value)); +} + +function finiteOr(value: number, fallback: number): number { + return Number.isFinite(value) ? value : fallback; +} + +function cssNumber(style: CSSStyleDeclaration, name: string, fallback: number): number { + const value = Number.parseFloat(style.getPropertyValue(name)); + return finiteOr(value, fallback); +} + +function layoutDocumentTop(element: HTMLElement): number { + let top = 0; + let current: HTMLElement | null = element; + + while (current) { + top += current.offsetTop; + current = current.offsetParent as HTMLElement | null; + } + + return top; +} + +function upperBoundHeading(headings: TocHeadingEntry[], documentY: number): number { + let low = 0; + let high = headings.length; + + while (low < high) { + const middle = low + Math.floor((high - low) / 2); + const heading = headings[middle]; + if (heading && heading.documentY <= documentY) { + low = middle + 1; + } else { + high = middle; + } + } + + return Math.max(0, low - 1); +} + +function syncNoteToc(toc: HTMLElement): void { + const button = toc.querySelector(".note-toc-toggle"); + const icon = button?.querySelector(".material-symbol"); + const isOpen = toc.classList.contains("is-open"); + + button?.setAttribute("aria-expanded", isOpen ? "true" : "false"); + if (icon) { + icon.textContent = isOpen ? "menu_open" : "menu"; + } +} + +function ensureTocIndicator(tocPanel: HTMLElement): HTMLElement { + let indicator = tocPanel.querySelector(".note-toc-indicator"); + if (!indicator) { + indicator = document.createElement("div"); + indicator.className = "note-toc-indicator"; + } + indicator.setAttribute("aria-hidden", "true"); + + if (indicator.parentElement !== tocPanel) { + tocPanel.insertBefore(indicator, tocPanel.firstChild); + } + + indicator.style.height = "1px"; + return indicator; +} + +function headingIdFromLink(link: HTMLAnchorElement): string { + const href = link.getAttribute("href") || ""; + if (!href.startsWith("#")) return ""; + + try { + return decodeURIComponent(href.slice(1)); + } catch { + return href.slice(1); + } +} + +class NoteTocController { + private readonly abortController = new AbortController(); + private readonly railMediaQuery = window.matchMedia(RAIL_MEDIA_QUERY); + private readonly motionMediaQuery = window.matchMedia(MOTION_MEDIA_QUERY); + private readonly stage: HTMLElement; + private readonly toc: HTMLElement; + private readonly tocPanel: HTMLElement; + private readonly tocList: HTMLOListElement; + private readonly tocIndicator: HTMLElement; + private readonly railRoot: HTMLElement; + private readonly note: HTMLElement; + private readonly noteHeader: HTMLElement; + private readonly postContent: HTMLElement; + private readonly tocWrapper: HTMLElement; + private headings: TocHeadingEntry[]; + private rail: ReadingTocRail | null = null; + private resizeObserver: ResizeObserver | null = null; + private frameId = 0; + private needsMeasure = true; + private destroyed = false; + private generation = 0; + private metrics: TocMetrics | null = null; + private activeIndex = -1; + private endActiveIndex = -1; + private isReadingMode = false; + private reducedMotion = false; + private latestScrollY = window.scrollY; + private lastScrollY = window.scrollY; + private lastScrollTime = performance.now(); + private pendingScrollSpeed: number | null = null; + private snapOnNextFrame = true; + private railHeadingsReady = false; + private readingStateDirty = true; + private isStageHovered = false; + private indicatorDirty = true; + private indicatorTop = Number.NaN; + private indicatorHeight = Number.NaN; + + constructor( + stage: HTMLElement, + toc: HTMLElement, + tocPanel: HTMLElement, + tocList: HTMLOListElement, + railRoot: HTMLElement, + note: HTMLElement, + noteHeader: HTMLElement, + postContent: HTMLElement, + tocWrapper: HTMLElement, + headings: TocHeadingEntry[], + ) { + this.stage = stage; + this.toc = toc; + this.tocPanel = tocPanel; + this.tocList = tocList; + this.tocIndicator = ensureTocIndicator(tocPanel); + this.railRoot = railRoot; + this.note = note; + this.noteHeader = noteHeader; + this.postContent = postContent; + this.tocWrapper = tocWrapper; + this.headings = headings; + } + + init(): void { + syncNoteToc(this.toc); + this.reducedMotion = this.motionDisabled(); + this.bindPageListeners(); + this.setupHoverEvents(); + this.observeLayout(); + this.waitForFonts(); + this.requestMeasure(true); + } + + private setupHoverEvents(): void { + // hover logic is now fully handled by handleStageMouseEnter/Leave via bindPageListeners + } + + requestMeasure(snap = false): void { + if (this.destroyed) return; + this.needsMeasure = true; + this.readingStateDirty = true; + this.snapOnNextFrame ||= snap; + this.ensureFrame(); + } + + destroy(): void { + if (this.destroyed) return; + this.destroyed = true; + this.generation += 1; + this.abortController.abort(); + this.resizeObserver?.disconnect(); + this.resizeObserver = null; + this.railMediaQuery.removeEventListener("change", this.handleRailMediaChange); + this.motionMediaQuery.removeEventListener("change", this.handleMotionChange); + + if (this.frameId) { + window.cancelAnimationFrame(this.frameId); + this.frameId = 0; + } + + this.disableRail(true); + this.rail?.destroy(); + this.rail = null; + this.headings = []; + this.metrics = null; + } + + private bindPageListeners(): void { + const signal = this.abortController.signal; + + window.addEventListener("scroll", this.handleScroll, { passive: true, signal }); + window.addEventListener("resize", this.handleResize, { passive: true, signal }); + this.tocList.addEventListener("scroll", this.handleTocListScroll, { passive: true, signal }); + this.stage.addEventListener("click", this.handleStageClick, { signal }); + this.stage.addEventListener("mouseenter", this.handleStageMouseEnter, { signal }); + this.stage.addEventListener("mouseleave", this.handleStageMouseLeave, { signal }); + this.postContent.addEventListener("load", this.handleContentLoad, { capture: true, signal }); + document.addEventListener("visibilitychange", this.handleVisibilityChange, { signal }); + document.addEventListener("daybook:settings-change", this.handleMotionChange, { signal }); + document.fonts?.addEventListener("loadingdone", this.handleFontLoad, { signal }); + + this.railMediaQuery.addEventListener("change", this.handleRailMediaChange); + this.motionMediaQuery.addEventListener("change", this.handleMotionChange); + } + + private observeLayout(): void { + if (!("ResizeObserver" in window)) return; + + this.resizeObserver = new ResizeObserver(() => { + this.requestMeasure(); + }); + this.resizeObserver.observe(this.noteHeader); + this.resizeObserver.observe(this.postContent); + } + + private waitForFonts(): void { + if (!document.fonts) return; + const generation = this.generation; + + document.fonts.ready.then(() => { + if (!this.destroyed && generation === this.generation) { + this.requestMeasure(true); + } + }).catch(() => { + // Font loading failure does not prevent the cached layout from working. + }); + } + + private readonly handleScroll = (): void => { + if (this.destroyed || document.hidden) return; + if (this.metrics && !this.metrics.tocVisible && !this.metrics.railEligible) return; + + const now = performance.now(); + const scrollY = window.scrollY; + const elapsed = now - this.lastScrollTime; + let speed = 0; + + if (elapsed > 0 && elapsed < 180) { + speed = Math.abs(scrollY - this.lastScrollY) / elapsed * 1000; + } + + this.pendingScrollSpeed = Math.max( + this.pendingScrollSpeed || 0, + clamp(finiteOr(speed, 0), 0, MAX_SCROLL_SPEED), + ); + this.latestScrollY = scrollY; + this.lastScrollY = scrollY; + this.lastScrollTime = now; + this.readingStateDirty = true; + this.ensureFrame(); + }; + + private readonly handleResize = (): void => { + this.latestScrollY = window.scrollY; + this.lastScrollY = window.scrollY; + this.lastScrollTime = performance.now(); + this.pendingScrollSpeed = 0; + this.requestMeasure(true); + }; + + private readonly handleTocListScroll = (): void => { + this.indicatorDirty = true; + this.readingStateDirty = true; + this.ensureFrame(); + }; + + private setStageHovered(hovered: boolean): void { + if (this.isStageHovered === hovered) return; + this.isStageHovered = hovered; + this.stage.classList.toggle("is-hovered", hovered); + this.rail?.setHovered(hovered); + this.syncReadingPresentation(); + this.ensureFrame(); + } + + private readonly handleStageMouseEnter = (): void => { + this.setStageHovered(true); + }; + + private readonly handleStageMouseLeave = (): void => { + this.setStageHovered(false); + }; + + private readonly handleContentLoad = (): void => { + this.requestMeasure(); + }; + + private readonly handleFontLoad = (): void => { + this.requestMeasure(true); + }; + + private readonly handleRailMediaChange = (): void => { + this.requestMeasure(true); + }; + + private readonly handleMotionChange = (): void => { + const reducedMotion = this.motionDisabled(); + if (reducedMotion === this.reducedMotion) return; + + this.reducedMotion = reducedMotion; + this.rail?.setReducedMotion(reducedMotion); + this.snapOnNextFrame = reducedMotion; + this.ensureFrame(); + }; + + private readonly handleVisibilityChange = (): void => { + if (document.hidden) { + if (this.frameId) { + window.cancelAnimationFrame(this.frameId); + this.frameId = 0; + } + this.pendingScrollSpeed = null; + return; + } + + this.latestScrollY = window.scrollY; + this.lastScrollY = window.scrollY; + this.lastScrollTime = performance.now(); + this.pendingScrollSpeed = 0; + this.readingStateDirty = true; + this.snapOnNextFrame = true; + this.requestMeasure(true); + }; + + private readonly handleStageClick = (event: MouseEvent): void => { + const target = event.target as HTMLElement; + + if (event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return; + const currentLink = target.closest("[data-reading-toc-rail-link]"); + const outlineLink = target.closest('.note-toc-panel a[href^="#"]'); + if (currentLink) { + event.preventDefault(); + this.jumpToHeading(this.activeIndex); + } else if (outlineLink) { + let id = outlineLink.hash.slice(1); + try { id = decodeURIComponent(id); } catch { /* Keep malformed fragments literal. */ } + const index = this.headings.findIndex(heading => heading.id === id); + if (index >= 0) { event.preventDefault(); this.jumpToHeading(index); } + } + }; + + private jumpToHeading(index: number): void { + const heading = this.headings[index]; + const metrics = this.metrics; + if (!heading || !metrics) return; + + const top = Math.max(0, heading.documentY - metrics.activationLine); + window.scrollTo({ + top, + behavior: this.reducedMotion ? "instant" : "smooth", + }); + + const url = new URL(window.location.href); + url.hash = encodeURIComponent(heading.id); + if (window.daybookReplaceURL) window.daybookReplaceURL(url.href); + else { + const state = history.state; + const nextState = state && typeof state === "object" ? { ...state, url: url.href } : state; + history.replaceState(nextState, "", `${url.pathname}${url.search}${url.hash}`); + } + } + + private motionDisabled(): boolean { + return document.documentElement.getAttribute("data-reduced-motion") === "true" + || this.motionMediaQuery.matches; + } + + private ensureFrame(): void { + if (this.destroyed || this.frameId) return; + this.frameId = window.requestAnimationFrame(this.runFrame); + } + + private readonly runFrame = (timestamp: number): void => { + this.frameId = 0; + if (this.destroyed || document.hidden) return; + + const measuredThisFrame = this.needsMeasure; + if (measuredThisFrame) { + this.measure(); + } + + const metrics = this.metrics; + if (!metrics || this.headings.length === 0) return; + + let railAnimating = false; + if (measuredThisFrame || this.readingStateDirty) { + this.readingStateDirty = false; + const activationY = this.latestScrollY + metrics.activationLine; + const activeIndex = upperBoundHeading(this.headings, activationY); + const shouldRead = this.readingModeFor(activationY, metrics); + const tocScrollTop = metrics.tocVisible + ? (measuredThisFrame ? metrics.tocListScrollTop : this.tocList.scrollTop) + : 0; + + const viewportTop = this.latestScrollY; + const viewportBottom = viewportTop + window.innerHeight; + let firstVis = -1; + let lastVis = -1; + for (let i = 0; i < this.headings.length; i++) { + const h = this.headings[i]; + if (!h) continue; + if (h.documentY >= viewportTop && h.documentY <= viewportBottom) { + if (firstVis === -1) firstVis = i; + lastVis = i; + } + } + const endActiveIndex = firstVis !== -1 ? Math.max(activeIndex, lastVis) : activeIndex; + + if (metrics.railEligible && this.rail) { + const progress = clamp( + (activationY - metrics.contentTop) / metrics.readingTravel, + 0, + 1, + ); + const speed = this.pendingScrollSpeed; + this.pendingScrollSpeed = null; + + this.rail.setTargets(progress, activeIndex, endActiveIndex, speed); + if (this.snapOnNextFrame) { + this.rail.snapToTargets(); + this.snapOnNextFrame = false; + } + } else { + this.pendingScrollSpeed = null; + this.snapOnNextFrame = false; + } + + this.updateActiveHeading( + activeIndex, + endActiveIndex, + metrics.tocListTop, + tocScrollTop, + metrics.tocVisible, + ); + this.setReadingMode(shouldRead); + } + + if (metrics.railEligible && this.rail) { + railAnimating = this.rail.advance(timestamp); + } + + if (railAnimating || this.needsMeasure || this.readingStateDirty) { + this.ensureFrame(); + } + }; + + private measure(): void { + this.needsMeasure = false; + + const railStyle = window.getComputedStyle(this.railRoot); + const stageStyle = window.getComputedStyle(this.stage); + const wrapperStyle = window.getComputedStyle(this.tocWrapper); + const railRect = this.railRoot.getBoundingClientRect(); + const wrapperRect = this.tocWrapper.getBoundingClientRect(); + const noteRect = this.note.getBoundingClientRect(); + const contentTop = layoutDocumentTop(this.postContent); + const contentHeight = this.postContent.offsetHeight; + const headerBottom = layoutDocumentTop(this.noteHeader) + this.noteHeader.offsetHeight; + const activationLine = cssNumber(stageStyle, "--reading-toc-activation-line", DEFAULT_ACTIVATION_LINE); + const bottomInset = cssNumber(stageStyle, "--reading-toc-bottom-inset", DEFAULT_BOTTOM_INSET); + const readableViewport = window.innerHeight - activationLine - bottomInset; + const readingTravel = contentHeight - readableViewport; + const direction = cssNumber(stageStyle, "--reading-toc-rail-direction", 1) < 0 ? -1 : 1; + const cssEligible = cssNumber(stageStyle, "--reading-toc-rail-eligible", 0) === 1; + const hasHorizontalRoom = wrapperRect.left + GEOMETRY_EPSILON >= noteRect.right + && wrapperRect.right <= window.innerWidth + GEOMETRY_EPSILON; + const hasVerticalRoom = readableViewport > 0 && railRect.height >= MIN_RAIL_HEIGHT; + const railEligible = this.railMediaQuery.matches + && cssEligible + && railRect.width >= MIN_RAIL_WIDTH + && hasHorizontalRoom + && hasVerticalRoom + && this.headings.length >= MIN_HEADING_COUNT + && readingTravel >= MIN_READING_TRAVEL; + const tocVisible = wrapperStyle.display !== "none" + && wrapperRect.width > 0 + && wrapperRect.height > 0; + + this.headings.forEach((heading) => { + heading.documentY = layoutDocumentTop(heading.element); + heading.railRatio = contentHeight > 0 + ? clamp((heading.documentY - contentTop) / contentHeight, 0, 1) + : 0; + heading.tocTop = heading.item.offsetTop; + heading.tocHeight = Math.max(1, heading.item.offsetHeight); + }); + + const railGeometry: ReadingTocRailGeometry | null = railEligible ? { + width: railRect.width, + height: railRect.height, + direction, + lineInset: cssNumber(railStyle, "--reading-toc-rail-line-inset", 6), + idleAmplitude: cssNumber(railStyle, "--reading-toc-rail-idle-amplitude", 10.4), + maxExtraAmplitude: cssNumber(railStyle, "--reading-toc-rail-max-extra-amplitude", 14), + bulgeHalfHeight: cssNumber(railStyle, "--reading-toc-rail-bulge-half-height", 56), + labelGap: cssNumber(railStyle, "--reading-toc-rail-label-gap", 12), + } : null; + + this.metrics = { + activationLine, + contentHeight, + contentTop, + headerBottom, + railEligible, + railGeometry, + readingTravel, + tocListScrollTop: this.tocList.scrollTop, + tocListTop: this.tocList.offsetTop, + tocVisible, + }; + this.indicatorDirty = true; + + if (railEligible && railGeometry) { + this.enableRail(railGeometry); + } else { + this.disableRail(true); + } + } + + private enableRail(geometry: ReadingTocRailGeometry): void { + if (!this.rail) { + this.rail = new ReadingTocRail(this.railRoot); + this.rail.setReducedMotion(this.reducedMotion); + this.railHeadingsReady = false; + } + + this.stage.dataset.railDirection = String(geometry.direction); + this.stage.classList.add("has-reading-rail"); + this.rail.setGeometry(geometry); + + const language = (this.postContent.lang || document.documentElement.lang).toLowerCase(); + const english = language.startsWith("en"); + if (!this.railHeadingsReady) { + const railHeadings: ReadingTocRailHeading[] = this.headings.map((heading) => ({ + id: heading.id, + text: heading.text, + level: heading.level, + ratio: heading.railRatio, + ariaLabel: english ? `Jump to section: ${heading.text}` : `跳转到章节:${heading.text}`, + })); + this.rail.setHeadings(railHeadings); + this.railHeadingsReady = true; + } else { + this.rail.updateHeadingRatios(this.headings.map((heading) => heading.railRatio)); + } + + this.railRoot.setAttribute("aria-label", english ? "Reading outline" : "阅读目录"); + this.syncReadingPresentation(); + } + + private disableRail(clear: boolean): void { + this.stage.classList.remove("has-reading-rail", "is-reading"); + this.stage.removeAttribute("data-rail-direction"); + this.isReadingMode = false; + this.toc.removeAttribute("aria-hidden"); + this.toc.inert = false; + this.railRoot.setAttribute("aria-hidden", "true"); + this.rail?.setInteractive(false); + + if (clear && this.rail) { + this.rail.destroy(); + this.rail = null; + this.railHeadingsReady = false; + } + } + + private readingModeFor(activationY: number, metrics: TocMetrics): boolean { + if (!metrics.railEligible) return false; + if (this.isReadingMode) { + return activationY >= metrics.headerBottom - MODE_HYSTERESIS; + } + return activationY >= metrics.headerBottom + MODE_HYSTERESIS; + } + + private setReadingMode(reading: boolean): void { + if (reading !== this.isReadingMode) { + this.isReadingMode = reading; + this.stage.classList.toggle("is-reading", reading); + + // Resync hover state in case the mouse is already over the stage + // but mouseenter hasn't fired (or fired before we cared). + this.setStageHovered(this.stage.matches(":hover")); + } + this.syncReadingPresentation(); + } + + private syncReadingPresentation(): void { + const showRail = this.isReadingMode && !this.isStageHovered; + if (showRail) { + this.toc.setAttribute("aria-hidden", "true"); + this.toc.inert = true; + } else { + this.toc.removeAttribute("aria-hidden"); + this.toc.inert = false; + } + + this.railRoot.setAttribute("aria-hidden", showRail ? "false" : "true"); + this.rail?.setInteractive(showRail); + } + + private updateActiveHeading( + index: number, + endIndex: number, + tocListTop: number, + tocScrollTop: number, + showIndicator: boolean, + ): void { + const heading = this.headings[index]; + if (!heading) return; + + let activeChanged = false; + if (index !== this.activeIndex || endIndex !== this.endActiveIndex) { + this.headings.forEach((entry, entryIndex) => { + const active = entryIndex === index; + entry.link.classList.toggle("is-active", active); + if (active) { + entry.link.setAttribute("aria-current", "location"); + } else { + entry.link.removeAttribute("aria-current"); + } + }); + this.activeIndex = index; + this.endActiveIndex = endIndex; + activeChanged = true; + } + + if (!showIndicator) { + this.indicatorDirty = true; + return; + } + + const startIdx = index; + const endIdx = endIndex; + + const startHeading = this.headings[startIdx]; + const endHeading = this.headings[endIdx]; + + if (!startHeading || !endHeading) return; + + const indicatorTop = tocListTop + startHeading.tocTop - tocScrollTop; + const indicatorHeight = Math.max(1, endHeading.tocTop + endHeading.tocHeight - startHeading.tocTop); + + if ( + !activeChanged + && !this.indicatorDirty + && indicatorTop === this.indicatorTop + && indicatorHeight === this.indicatorHeight + ) { + return; + } + + this.indicatorDirty = false; + this.indicatorTop = indicatorTop; + this.indicatorHeight = indicatorHeight; + this.tocIndicator.style.setProperty("--indicator-opacity", "1"); + this.tocIndicator.style.setProperty("--indicator-y", `${indicatorTop}px`); + this.tocIndicator.style.setProperty("--indicator-scale", `${indicatorHeight}`); + } +} + +let activeController: NoteTocController | null = null; + +function collectHeadingEntries( + postContent: HTMLElement, + tocPanel: HTMLElement, +): TocHeadingEntry[] { + const links = Array.from(tocPanel.querySelectorAll('a[href^="#"]')); + const linksById = new Map(); + + links.forEach((link) => { + const id = headingIdFromLink(link); + if (id) linksById.set(id, link); + }); + + return Array.from(postContent.querySelectorAll("h1, h2, h3, h4, h5, h6")) + .map((element): TocHeadingEntry | null => { + const link = linksById.get(element.id); + const item = link?.closest("li"); + if (!element.id || !link || !item) return null; + + return { + id: element.id, + text: (link.textContent || "").trim(), + level: Number.parseInt(element.tagName.slice(1), 10) || 2, + element, + link, + item, + documentY: 0, + railRatio: 0, + tocTop: 0, + tocHeight: 1, + }; + }) + .filter((entry): entry is TocHeadingEntry => entry !== null); +} + +function initNoteTocController(): void { + activeController?.destroy(); + activeController = null; + + document.querySelectorAll(".note-toc").forEach(syncNoteToc); + + const stage = document.querySelector("[data-note-toc-stage]"); + const toc = stage?.querySelector("[data-note-toc]"); + const tocPanel = toc?.querySelector(".note-toc-panel"); + const tocList = tocPanel?.querySelector("ol"); + const railRoot = stage?.querySelector("[data-reading-toc-rail]"); + const note = document.querySelector(".note"); + const noteHeader = note?.querySelector(".note-header"); + const postContent = note?.querySelector(".post-content"); + const tocWrapper = stage?.closest(".note-toc-wrapper"); + + if (!stage || !toc || !tocPanel || !tocList || !railRoot || !note || !noteHeader || !postContent || !tocWrapper) { + return; + } + + const headings = collectHeadingEntries(postContent, tocPanel); + if (headings.length === 0) return; + + activeController = new NoteTocController( + stage, + toc, + tocPanel, + tocList, + railRoot, + note, + noteHeader, + postContent, + tocWrapper, + headings, + ); + activeController.init(); +} + +window.daybookSyncNoteTocs = initNoteTocController; + +document.addEventListener("daybook:before-swap", () => { + activeController?.destroy(); + activeController = null; +}); + +document.addEventListener("daybook:reader-mode-change", () => { + activeController?.requestMeasure(true); +}); +document.addEventListener("daybook:page-load", initNoteTocController); +document.addEventListener("daybook:article-content-swapped", initNoteTocController); +document.addEventListener("daybook:transition-finished", () => { + activeController?.requestMeasure(true); +}); + +document.addEventListener("click", (event: MouseEvent) => { + const target = event.target as HTMLElement; + const tocToggle = target.closest(".note-toc-toggle"); + if (!tocToggle) return; + + const toc = tocToggle.closest(".note-toc"); + if (!toc) return; + + toc.classList.toggle("is-open"); + syncNoteToc(toc); + activeController?.requestMeasure(); +}); + +initNoteTocController(); diff --git a/assets/ts/toc/reading-toc-rail.ts b/assets/ts/toc/reading-toc-rail.ts new file mode 100644 index 00000000..bc57ed0f --- /dev/null +++ b/assets/ts/toc/reading-toc-rail.ts @@ -0,0 +1,890 @@ +export type ReadingTocRailDirection = -1 | 1; + +export interface ReadingTocRailHeading { + readonly id: string; + readonly text: string; + readonly level: number; + readonly ratio: number; + readonly ariaLabel: string; +} + +export interface ReadingTocRailGeometry { + readonly width: number; + readonly height: number; + readonly direction: ReadingTocRailDirection; + readonly lineInset: number; + readonly idleAmplitude: number; + readonly maxExtraAmplitude: number; + readonly bulgeHalfHeight: number; + readonly labelGap: number; +} + +interface MutableRailHeading { + id: string; + text: string; + level: number; + ratio: number; + ariaLabel: string; +} + +interface SpringValue { + current: number; + target: number; + velocity: number; +} + +export interface ReadingTocRailCurve { + basePath: string; + accentPath: string; + peakX: number; + effectiveAmplitude: number; + effectiveHalfHeight: number; + topY: number; + bottomY: number; + markerLength: number; + totalLength: number; +} + +const DEFAULT_GEOMETRY: ReadingTocRailGeometry = { + width: 208, + height: 640, + direction: 1, + lineInset: 12, + idleAmplitude: 10.4, + maxExtraAmplitude: 14, + bulgeHalfHeight: 56, + labelGap: 12, +}; + +const AMPLITUDE_STIFFNESS = 90; +const AMPLITUDE_DAMPING = 2 * Math.sqrt(AMPLITUDE_STIFFNESS) * 0.75; + +const MAX_FRAME_STEP = 0.064; +const MAX_SUBSTEP = 0.016; +const POSITION_EPSILON = 0.035; +const VELOCITY_EPSILON = 0.05; +const AMPLITUDE_EPSILON = 0.025; +const SPEED_EPSILON = 0.5; +const PROGRESS_RESPONSE_SECONDS = 0.14; +const SPEED_RESPONSE_SECONDS = 0.08; +const SPEED_TO_AMPLITUDE = 0.012; +const HALF_HEIGHT_SPEED_GAIN = 2.2; +const BREATH_AMPLITUDE = 0.6; +const BREATH_PERIOD_MS = 9000; +const MIN_AMPLITUDE_REBOUND = -4; +const MAX_SCROLL_SPEED = 5000; +const MIN_DIMENSION = 1; + +function clamp(value: number, min: number, max: number): number { + if (!Number.isFinite(value)) return min; + return Math.min(max, Math.max(min, value)); +} + +function finiteOr(value: number, fallback: number): number { + return Number.isFinite(value) ? value : fallback; +} + +function approximatelyEqual(a: number, b: number, epsilon = 0.001): boolean { + return Math.abs(a - b) <= epsilon; +} + +function formatNumber(value: number): string { + if (!Number.isFinite(value)) return "0"; + return String(Math.round(value * 1000) / 1000); +} + +function requiredElement(root: ParentNode, selector: string): T { + const element = root.querySelector(selector); + if (!element) { + throw new Error(`[Daybook] Reading TOC rail is missing ${selector}`); + } + return element; +} + +function makeSpring(initial: number): SpringValue { + return { + current: initial, + target: initial, + velocity: 0, + }; +} + +function snapSpring(spring: SpringValue): void { + spring.current = spring.target; + spring.velocity = 0; +} + +function stepSpring( + spring: SpringValue, + stiffness: number, + damping: number, + deltaTime: number, +): void { + const acceleration = stiffness * (spring.target - spring.current) - damping * spring.velocity; + spring.velocity += acceleration * deltaTime; + spring.current += spring.velocity * deltaTime; + + if (!Number.isFinite(spring.current) || !Number.isFinite(spring.velocity)) { + snapSpring(spring); + } +} + +function springIsSettled( + spring: SpringValue, + positionEpsilon: number, + velocityEpsilon = VELOCITY_EPSILON, +): boolean { + return Math.abs(spring.target - spring.current) <= positionEpsilon + && Math.abs(spring.velocity) <= velocityEpsilon; +} + +function geometryIsEqual(a: ReadingTocRailGeometry, b: ReadingTocRailGeometry): boolean { + return a.direction === b.direction + && approximatelyEqual(a.width, b.width) + && approximatelyEqual(a.height, b.height) + && approximatelyEqual(a.lineInset, b.lineInset) + && approximatelyEqual(a.idleAmplitude, b.idleAmplitude) + && approximatelyEqual(a.maxExtraAmplitude, b.maxExtraAmplitude) + && approximatelyEqual(a.bulgeHalfHeight, b.bulgeHalfHeight) + && approximatelyEqual(a.labelGap, b.labelGap); +} + +function normalizeGeometry(geometry: ReadingTocRailGeometry): ReadingTocRailGeometry { + const width = Math.max(MIN_DIMENSION, finiteOr(geometry.width, DEFAULT_GEOMETRY.width)); + const height = Math.max(MIN_DIMENSION, finiteOr(geometry.height, DEFAULT_GEOMETRY.height)); + + return { + width, + height, + direction: geometry.direction < 0 ? -1 : 1, + lineInset: clamp(finiteOr(geometry.lineInset, DEFAULT_GEOMETRY.lineInset), 0, width), + idleAmplitude: Math.max(0, finiteOr(geometry.idleAmplitude, DEFAULT_GEOMETRY.idleAmplitude)), + maxExtraAmplitude: Math.max( + 0, + finiteOr(geometry.maxExtraAmplitude, DEFAULT_GEOMETRY.maxExtraAmplitude), + ), + bulgeHalfHeight: Math.max( + 1, + finiteOr(geometry.bulgeHalfHeight, DEFAULT_GEOMETRY.bulgeHalfHeight), + ), + labelGap: Math.max(0, finiteOr(geometry.labelGap, DEFAULT_GEOMETRY.labelGap)), + }; +} + +type RailPoint = readonly [number, number]; + +function cubicLength(a: RailPoint, b: RailPoint, c: RailPoint, d: RailPoint, depth = 0): number { + const distance = (p: RailPoint, q: RailPoint): number => Math.hypot(q[0] - p[0], q[1] - p[1]); + const chord = distance(a, d); + const polygon = distance(a, b) + distance(b, c) + distance(c, d); + // Subdivide even collinear folds: their travelled length exceeds the chord. + if (polygon - chord <= 0.001 || depth >= 12) return (polygon + chord) / 2; + const midpoint = (p: RailPoint, q: RailPoint): RailPoint => [(p[0] + q[0]) / 2, (p[1] + q[1]) / 2]; + const ab = midpoint(a, b); + const bc = midpoint(b, c); + const cd = midpoint(c, d); + const abc = midpoint(ab, bc); + const bcd = midpoint(bc, cd); + const middle = midpoint(abc, bcd); + return cubicLength(a, ab, abc, middle, depth + 1) + cubicLength(middle, bcd, cd, d, depth + 1); +} + +type RailCubic = readonly [RailPoint, RailPoint, RailPoint, RailPoint]; + +function splitCubic(curve: RailCubic, t: number): readonly [RailCubic, RailCubic] { + const lerp = (a: RailPoint, b: RailPoint): RailPoint => [ + a[0] + (b[0] - a[0]) * t, a[1] + (b[1] - a[1]) * t, + ]; + const ab = lerp(curve[0], curve[1]); + const bc = lerp(curve[1], curve[2]); + const cd = lerp(curve[2], curve[3]); + const abc = lerp(ab, bc); + const bcd = lerp(bc, cd); + const point = lerp(abc, bcd); + return [[curve[0], ab, abc, point], [point, bcd, cd, curve[3]]]; +} + +function cubicParameterAtLength(curve: RailCubic, distance: number, length: number): number { + if (distance <= 0) return 0; + if (distance >= length) return 1; + let low = 0; + let high = 1; + for (let iteration = 0; iteration < 18; iteration++) { + const t = (low + high) / 2; + if (cubicLength(...splitCubic(curve, t)[0]) < distance) low = t; + else high = t; + } + return (low + high) / 2; +} + +// Draw the highlighted section explicitly. SVG dash placement can jump when +// the folded cubic becomes collinear, even when getTotalLength stays continuous. +function buildAccentPath( + upper: RailCubic, lower: RailCubic, upperLength: number, lowerLength: number, height: number, +): string { + const topY = upper[0][1]; + const bottomY = lower[3][1]; + const baselineX = upper[0][0]; + const markerLength = topY + upperLength; + const totalLength = markerLength + lowerLength + height - bottomY; + const start = Math.max(0, markerLength - 0.06 * height); + const end = Math.min(totalLength, markerLength + 0.06 * height); + const commands: string[] = []; + const point = (p: RailPoint): string => `${formatNumber(p[0])} ${formatNumber(p[1])}`; + const move = (p: RailPoint): void => { + if (commands.length === 0) commands.push(`M ${point(p)}`); + }; + if (start < topY) { + move([baselineX, start]); + commands.push(`L ${point([baselineX, Math.min(end, topY)])}`); + } + let segmentStart = topY; + for (const [curve, length] of [[upper, upperLength], [lower, lowerLength]] as const) { + const from = Math.max(0, start - segmentStart); + const to = Math.min(length, end - segmentStart); + if (to > from) { + const t0 = cubicParameterAtLength(curve, from, length); + const t1 = cubicParameterAtLength(curve, to, length); + const prefix = splitCubic(curve, t1)[0]; + const slice = splitCubic(prefix, t0 / t1)[1]; + move(slice[0]); + commands.push(`C ${point(slice[1])} ${point(slice[2])} ${point(slice[3])}`); + } + segmentStart += length; + } + if (end > segmentStart) { + move([baselineX, bottomY + Math.max(0, start - segmentStart)]); + commands.push(`L ${point([baselineX, bottomY + end - segmentStart])}`); + } + return commands.join(" "); +} + +/** + * Builds the whole rail path. Near an edge only the path endpoints are clipped; + * the control points keep their full wave positions, which creates the short + * hook visible before the wave settles into a straight line at 0% or 100%. + */ +export function buildReadingTocRailCurve( + geometry: ReadingTocRailGeometry, + markerY: number, + amplitude: number, + halfHeight = geometry.bulgeHalfHeight, +): ReadingTocRailCurve { + const normalized = normalizeGeometry(geometry); + const height = normalized.height; + const baselineX = normalized.lineInset; + const safeMarkerY = clamp(finiteOr(markerY, 0), 0, height); + const safeHalfHeight = Math.max(1, finiteOr(halfHeight, normalized.bulgeHalfHeight)); + const topY = Math.max(0, safeMarkerY - safeHalfHeight); + const bottomY = Math.min(height, safeMarkerY + safeHalfHeight); + const edgeFactor = clamp( + Math.min(safeMarkerY / safeHalfHeight, (height - safeMarkerY) / safeHalfHeight), + 0, + 1, + ); + const availableAmplitude = normalized.direction > 0 + ? Math.max(0, normalized.width - baselineX) + : Math.max(0, baselineX); + const effectiveAmplitude = Math.min( + availableAmplitude, + Math.max(0, finiteOr(amplitude, normalized.idleAmplitude)) * edgeFactor, + ); + const peakX = baselineX + normalized.direction * effectiveAmplitude; + + const curve = [ + `C ${formatNumber(baselineX)} ${formatNumber(safeMarkerY - 0.6 * safeHalfHeight)}`, + `${formatNumber(peakX)} ${formatNumber(safeMarkerY - 0.3 * safeHalfHeight)}`, + `${formatNumber(peakX)} ${formatNumber(safeMarkerY)}`, + `C ${formatNumber(peakX)} ${formatNumber(safeMarkerY + 0.3 * safeHalfHeight)}`, + `${formatNumber(baselineX)} ${formatNumber(safeMarkerY + 0.6 * safeHalfHeight)}`, + `${formatNumber(baselineX)} ${formatNumber(bottomY)}`, + ].join(" "); + + const upper: RailCubic = [ + [baselineX, topY], + [baselineX, safeMarkerY - 0.6 * safeHalfHeight], + [peakX, safeMarkerY - 0.3 * safeHalfHeight], + [peakX, safeMarkerY], + ]; + const lower: RailCubic = [ + [peakX, safeMarkerY], + [peakX, safeMarkerY + 0.3 * safeHalfHeight], + [baselineX, safeMarkerY + 0.6 * safeHalfHeight], + [baselineX, bottomY], + ]; + const upperLength = cubicLength(...upper); + const lowerLength = cubicLength(...lower); + const markerLength = topY + upperLength; + + return { + basePath: [ + `M ${formatNumber(baselineX)} ${formatNumber(Math.min(0, topY))}`, + `L ${formatNumber(baselineX)} ${formatNumber(topY)}`, + curve, + `L ${formatNumber(baselineX)} ${formatNumber(Math.max(height, bottomY))}`, + ].join(" "), + accentPath: buildAccentPath(upper, lower, upperLength, lowerLength, height), + peakX, + effectiveAmplitude, + effectiveHalfHeight: safeHalfHeight, + topY, + bottomY, + markerLength, + totalLength: markerLength + lowerLength + height - bottomY, + }; +} + +export function readingTocRailDotOffset( + dotY: number, + markerY: number, + halfHeight: number, + amplitude: number, + direction: ReadingTocRailDirection, +): number { + const safeHalfHeight = Math.max(1, finiteOr(halfHeight, 1)); + const ratio = Math.abs(finiteOr(dotY, 0) - finiteOr(markerY, 0)) / safeHalfHeight; + if (ratio >= 1) return 0; + + const envelope = Math.cos(ratio * Math.PI / 2) ** 2; + return direction * Math.max(0, finiteOr(amplitude, 0)) * envelope; +} + +function normalizeHeading(heading: ReadingTocRailHeading): MutableRailHeading { + const text = String(heading.text || "").trim(); + return { + id: String(heading.id || ""), + text, + level: Math.round(clamp(finiteOr(heading.level, 2), 1, 6)), + ratio: clamp(finiteOr(heading.ratio, 0), 0, 1), + ariaLabel: String(heading.ariaLabel || text), + }; +} + +/** + * Pure renderer for the desktop reading rail. Its owner supplies measurements, + * targets, lifecycle, events, and animation frames. + */ +export class ReadingTocRail { + private readonly root: HTMLElement; + private readonly svg: SVGSVGElement; + private readonly basePath: SVGPathElement; + private readonly accentPath: SVGPathElement; + private readonly reflections: SVGGElement; + private readonly baseTop: SVGPathElement; + private readonly baseBottom: SVGPathElement; + private readonly accentTop: SVGPathElement; + private readonly accentBottom: SVGPathElement; + private readonly dotsRoot: HTMLElement; + private readonly label: HTMLElement; + private readonly currentLink: HTMLAnchorElement; + private readonly titleSlots: readonly [HTMLElement, HTMLElement]; + private readonly percent: HTMLElement; + + private geometry: ReadingTocRailGeometry = DEFAULT_GEOMETRY; + private headings: MutableRailHeading[] = []; + private dotButtons: HTMLElement[] = []; + private markerY = makeSpring(0); + private amplitude = makeSpring(0); + private hoverSpring = makeSpring(0); + private progressTarget = 0; + private activeIndex = -1; + private endActiveIndex = -1; + private renderedActiveIndex = -2; + private renderedEndActiveIndex = -2; + private renderedPercent = -1; + private renderedTitle = ""; + private visibleTitleSlot: 0 | 1 = 0; + private speedTarget = 0; + private smoothedSpeed = 0; + private lastTimestamp: number | null = null; + private frameInitialized = false; + private reducedMotion = false; + private interactive = false; + private destroyed = false; + private snapRequested = true; + private geometryDirty = true; + private dotsDirty = true; + private interactionDirty = true; + + constructor(root: HTMLElement) { + this.root = root; + this.svg = requiredElement(root, "[data-reading-toc-rail-svg]"); + this.basePath = requiredElement(root, "[data-reading-toc-rail-base]"); + this.accentPath = requiredElement(root, "[data-reading-toc-rail-accent]"); + this.dotsRoot = requiredElement(root, "[data-reading-toc-rail-dots]"); + this.label = requiredElement(root, "[data-reading-toc-rail-label]"); + this.currentLink = requiredElement(root, "[data-reading-toc-rail-link]"); + this.percent = requiredElement(root, "[data-reading-toc-rail-percent]"); + + const titleSlots = Array.from(root.querySelectorAll("[data-reading-toc-rail-title]")); + const firstTitle = titleSlots[0]; + const secondTitle = titleSlots[1]; + if (!firstTitle || !secondTitle) { + throw new Error("[Daybook] Reading TOC rail requires two title slots"); + } + this.titleSlots = [firstTitle, secondTitle]; + + this.baseTop = this.basePath.cloneNode() as SVGPathElement; + this.baseBottom = this.basePath.cloneNode() as SVGPathElement; + this.accentTop = this.accentPath.cloneNode() as SVGPathElement; + this.accentBottom = this.accentPath.cloneNode() as SVGPathElement; + + // Keep the reflected rails inside the original viewport, while the main + // curve is free to fold beyond either endpoint without being clipped. + this.reflections = document.createElementNS("http://www.w3.org/2000/svg", "g"); + this.reflections.setAttribute("clip-path", "inset(0) view-box"); + this.reflections.append(this.baseTop, this.baseBottom, this.accentTop, this.accentBottom); + this.svg.appendChild(this.reflections); + + this.refreshPositionTargets(); + } + + setHeadings(entries: readonly ReadingTocRailHeading[]): void { + if (this.destroyed) return; + + this.headings = entries.map(normalizeHeading); + const fragment = document.createDocumentFragment(); + this.dotButtons = this.headings.map((heading) => { + const dot = document.createElement("div"); + dot.setAttribute("data-reading-toc-rail-dot", ""); + dot.setAttribute("data-heading-level", String(heading.level)); + dot.setAttribute("aria-hidden", "true"); + fragment.appendChild(dot); + return dot; + }); + this.dotsRoot.replaceChildren(fragment); + + this.activeIndex = this.normalizeActiveIndex(this.activeIndex); + this.endActiveIndex = this.normalizeActiveIndex(this.endActiveIndex); + this.renderedActiveIndex = -2; + this.renderedEndActiveIndex = -2; + this.renderedTitle = ""; + this.renderedPercent = -1; + this.dotsDirty = true; + this.interactionDirty = true; + } + + updateHeadingRatios(ratios: readonly number[]): void { + if (this.destroyed) return; + + let changed = false; + this.headings.forEach((heading, index) => { + const ratio = ratios[index]; + if (ratio === undefined) return; + const normalized = clamp(finiteOr(ratio, heading.ratio), 0, 1); + if (!approximatelyEqual(normalized, heading.ratio)) { + heading.ratio = normalized; + changed = true; + } + }); + + if (changed) { + this.dotsDirty = true; + } + } + + setGeometry(geometry: ReadingTocRailGeometry): void { + if (this.destroyed) return; + + const nextGeometry = normalizeGeometry(geometry); + + if (geometryIsEqual(nextGeometry, this.geometry)) return; + + this.geometry = nextGeometry; + this.refreshPositionTargets(); + this.clampSpringPositions(); + this.amplitude.target = this.targetAmplitude(); + this.geometryDirty = true; + this.dotsDirty = true; + } + + /** Updates only in-memory targets and is safe to call directly from scroll handlers. */ + setTargets(progress: number, activeIndex: number, endActiveIndex: number, scrollSpeed: number | null = null): void { + if (this.destroyed) return; + + const nextProgress = clamp(finiteOr(progress, this.progressTarget), 0, 1); + if (!approximatelyEqual(nextProgress, this.progressTarget, 0.00001)) { + this.progressTarget = nextProgress; + this.refreshPositionTargets(); + } + + const nextActiveIndex = this.normalizeActiveIndex(activeIndex); + const nextEndActiveIndex = this.normalizeActiveIndex(endActiveIndex); + if (nextActiveIndex !== this.activeIndex || nextEndActiveIndex !== this.endActiveIndex) { + this.activeIndex = nextActiveIndex; + this.endActiveIndex = nextEndActiveIndex; + this.interactionDirty = true; + } + + this.speedTarget = !this.reducedMotion && scrollSpeed !== null + ? clamp(Math.abs(finiteOr(scrollSpeed, 0)), 0, MAX_SCROLL_SPEED) + : 0; + } + + setReducedMotion(reduced: boolean): void { + if (this.destroyed || reduced === this.reducedMotion) return; + this.reducedMotion = reduced; + if (reduced) { + this.snapToTargets(); + } else { + this.lastTimestamp = null; + this.frameInitialized = true; + } + } + + setInteractive(interactive: boolean): void { + if (this.destroyed || interactive === this.interactive) return; + this.interactive = interactive; + this.root.inert = !interactive; + if (!interactive) { + this.speedTarget = 0; + this.amplitude.target = 0; + } + this.interactionDirty = true; + } + + setHovered(hovered: boolean): void { + if (this.destroyed) return; + this.hoverSpring.target = hovered ? 1 : 0; + } + + /** + * Advances springs and performs every continuous DOM write. The owner should + * request another frame only when this method returns true. + */ + advance(timestamp: number): boolean { + if (this.destroyed) return false; + + const safeTimestamp = finiteOr(timestamp, this.lastTimestamp ?? 0); + let deltaTime = this.lastTimestamp === null + ? 0 + : clamp((safeTimestamp - this.lastTimestamp) / 1000, 0, MAX_FRAME_STEP); + this.lastTimestamp = safeTimestamp; + + if (!this.frameInitialized || this.snapRequested || this.reducedMotion) { + this.applySnap(); + deltaTime = 0; + } else if (deltaTime > 0) { + this.stepAnimation(deltaTime); + } + + const animating = !this.reducedMotion + && (this.interactive || !this.animationIsSettled()); + if (!animating) { + this.speedTarget = 0; + this.smoothedSpeed = 0; + this.amplitude.target = 0; + snapSpring(this.markerY); + snapSpring(this.amplitude); + } + + this.writeDOM(safeTimestamp); + + return animating; + } + + /** Snaps state in memory; the following advance() commits it to the DOM. */ + snapToTargets(): void { + if (this.destroyed) return; + this.speedTarget = 0; + this.smoothedSpeed = 0; + this.amplitude.target = 0; + this.snapRequested = true; + this.lastTimestamp = null; + } + + resumeAfterVisibility(): void { + if (this.destroyed) return; + this.snapToTargets(); + } + + destroy(): void { + if (this.destroyed) return; + this.destroyed = true; + this.dotsRoot.replaceChildren(); + this.dotButtons = []; + this.headings = []; + this.basePath.setAttribute("d", "M 0 0"); + this.accentPath.setAttribute("d", "M 0 0"); + this.reflections.remove(); + this.label.style.left = ""; + this.label.style.top = ""; + this.label.style.transform = ""; + this.label.style.maxWidth = ""; + this.currentLink.setAttribute("href", "#"); + this.currentLink.removeAttribute("aria-current"); + this.currentLink.tabIndex = -1; + this.titleSlots.forEach((slot) => { + slot.textContent = ""; + slot.classList.remove("is-active", "is-leaving"); + slot.setAttribute("aria-hidden", "true"); + }); + this.percent.textContent = "0%"; + this.root.inert = true; + this.root.dataset.interactive = "false"; + this.root.style.removeProperty("--reading-toc-rail-direction"); + this.root.style.removeProperty("--reading-toc-rail-overflow"); + this.lastTimestamp = null; + this.speedTarget = 0; + this.smoothedSpeed = 0; + } + + private refreshPositionTargets(): void { + const markerTarget = this.mapRatioToY(this.progressTarget); + this.markerY.target = markerTarget; + } + + private mapRatioToY(ratio: number): number { + return this.geometry.height * clamp(ratio, 0, 1); + } + + private normalizeActiveIndex(index: number): number { + if (this.headings.length === 0 || !Number.isFinite(index)) return -1; + return Math.round(clamp(index, 0, this.headings.length - 1)); + } + + private targetAmplitude(): number { + if (this.reducedMotion || !this.interactive) return 0; + return Math.min( + this.geometry.maxExtraAmplitude, + SPEED_TO_AMPLITUDE * Math.abs(this.smoothedSpeed), + ); + } + + private clampSpringPositions(): void { + this.markerY.target = clamp(this.markerY.target, 0, this.geometry.height); + const clampedCurrent = clamp(this.markerY.current, 0, this.geometry.height); + if (!approximatelyEqual(clampedCurrent, this.markerY.current)) { + this.markerY.current = clampedCurrent; + this.markerY.velocity = 0; + } + } + + private applySnap(): void { + this.refreshPositionTargets(); + this.speedTarget = 0; + this.smoothedSpeed = 0; + this.amplitude.target = 0; + snapSpring(this.markerY); + snapSpring(this.amplitude); + this.frameInitialized = true; + this.snapRequested = false; + } + + private stepAnimation(deltaTime: number): void { + const progressResponse = Math.min( + 1, + 1.4 * (1 - Math.exp(-deltaTime / PROGRESS_RESPONSE_SECONDS)), + ); + this.markerY.current += (this.markerY.target - this.markerY.current) * progressResponse; + if (Math.abs(this.markerY.target - this.markerY.current) <= POSITION_EPSILON) { + this.markerY.current = this.markerY.target; + } + + const speedResponse = Math.min(1, deltaTime / SPEED_RESPONSE_SECONDS); + this.smoothedSpeed += (this.speedTarget - this.smoothedSpeed) * speedResponse; + this.speedTarget = 0; + if (Math.abs(this.smoothedSpeed) <= SPEED_EPSILON && this.speedTarget === 0) { + this.smoothedSpeed = 0; + } + this.amplitude.target = this.targetAmplitude(); + + const substeps = Math.max(1, Math.ceil(deltaTime / MAX_SUBSTEP)); + const step = deltaTime / substeps; + + for (let index = 0; index < substeps; index += 1) { + stepSpring(this.amplitude, AMPLITUDE_STIFFNESS, AMPLITUDE_DAMPING, step); + if (this.amplitude.current < MIN_AMPLITUDE_REBOUND) { + this.amplitude.current = MIN_AMPLITUDE_REBOUND; + if (this.amplitude.velocity < 0) { + this.amplitude.velocity = 0; + } + } + if (!Number.isFinite(this.amplitude.current)) { + this.amplitude.current = this.amplitude.target; + this.amplitude.velocity = 0; + } + stepSpring(this.hoverSpring, 300, 25, step); + } + + this.clampSpringPositions(); + } + + private animationIsSettled(): boolean { + return springIsSettled(this.markerY, POSITION_EPSILON) + && springIsSettled(this.amplitude, AMPLITUDE_EPSILON) + && springIsSettled(this.hoverSpring, AMPLITUDE_EPSILON) + && Math.abs(this.speedTarget) <= SPEED_EPSILON + && Math.abs(this.smoothedSpeed) <= SPEED_EPSILON; + } + + private baselineX(): number { + return this.geometry.lineInset; + } + + private writeDOM(timestamp: number): void { + if (this.geometryDirty) { + this.svg.setAttribute( + "viewBox", + `0 0 ${formatNumber(this.geometry.width)} ${formatNumber(this.geometry.height)}`, + ); + this.root.style.setProperty("--reading-toc-rail-direction", String(this.geometry.direction)); + this.geometryDirty = false; + } + + if (this.dotsDirty) { + const dotX = this.baselineX(); + this.dotButtons.forEach((button, index) => { + const heading = this.headings[index]; + if (!heading) return; + button.style.left = `${formatNumber(dotX)}px`; + button.style.top = `${formatNumber(this.mapRatioToY(heading.ratio))}px`; + }); + this.dotsDirty = false; + } + + const markerY = clamp( + finiteOr(this.markerY.current, this.markerY.target), + 0, + this.geometry.height, + ); + const hoverState = Math.max(0, Math.min(1, this.hoverSpring.current)); + const boost = this.amplitude.current; + const breath = !this.reducedMotion + ? BREATH_AMPLITUDE * Math.sin(timestamp / BREATH_PERIOD_MS * Math.PI * 2) + : 0; + + // Wave amplitude remains constant when hovered, only opacity fades + const waveAmplitude = Math.max(0, this.geometry.idleAmplitude + breath + boost); + const halfHeight = Math.max( + 1, + this.geometry.bulgeHalfHeight + HALF_HEIGHT_SPEED_GAIN * boost, + ); + + // Opacity fades out based on hoverState, using CSS variable to avoid overriding base CSS + this.root.style.setProperty("--hover-opacity", `${1 - Math.pow(hoverState, 2)}`); + this.root.style.pointerEvents = hoverState > 0.5 ? "none" : "auto"; + + const path = buildReadingTocRailCurve( + this.geometry, + markerY, + waveAmplitude, + halfHeight, + ); + // Control points extend by less than halfHeight, including at scroll speed. + this.root.style.setProperty("--reading-toc-rail-overflow", `${formatNumber(halfHeight + 2)}px`); + this.basePath.setAttribute("d", path.basePath); + this.accentPath.setAttribute("d", path.accentPath); + + this.baseTop.setAttribute("d", path.basePath); + this.baseTop.setAttribute("transform", "scale(1, -1)"); + this.accentTop.setAttribute("d", path.accentPath); + this.accentTop.setAttribute("transform", "scale(1, -1)"); + + const bottomTransform = `scale(1, -1) translate(0, -${formatNumber(2 * this.geometry.height)})`; + this.baseBottom.setAttribute("d", path.basePath); + this.baseBottom.setAttribute("transform", bottomTransform); + this.accentBottom.setAttribute("d", path.accentPath); + this.accentBottom.setAttribute("transform", bottomTransform); + + this.dotButtons.forEach((button, index) => { + const heading = this.headings[index]; + if (!heading) return; + const dotY = this.mapRatioToY(heading.ratio); + const offsetX = readingTocRailDotOffset( + dotY, + markerY, + path.effectiveHalfHeight, + path.effectiveAmplitude, + this.geometry.direction, + ); + button.style.transform = `translate3d(calc(-50% + ${formatNumber(offsetX)}px), -50%, 0)`; + }); + + const labelX = path.peakX + this.geometry.direction * this.geometry.labelGap; + const labelSpace = this.geometry.direction > 0 ? this.geometry.width - labelX : labelX; + this.label.style.maxWidth = `min(var(--reading-toc-rail-title-max-width), ${formatNumber(Math.max(0, labelSpace))}px)`; + this.label.style.left = "0"; + this.label.style.top = `clamp(var(--reading-toc-rail-label-edge-inset), ${formatNumber(markerY)}px, calc(100% - var(--reading-toc-rail-label-edge-inset)))`; + this.label.style.transform = [ + `translate3d(${formatNumber(labelX)}px, 0, 0)`, + this.geometry.direction > 0 ? "translate(0, -50%)" : "translate(-100%, -50%)", + ].join(" "); + + this.writeLabelContent(); + this.writeInteractionState(); + } + + private writeLabelContent(): void { + const percentage = Math.round(clamp(this.progressTarget, 0, 1) * 100); + const heading = this.headings[this.activeIndex]; + if (percentage !== this.renderedPercent) { + this.percent.textContent = `${percentage}%`; + if (heading) { + this.currentLink.setAttribute("aria-label", `${heading.ariaLabel}, ${percentage}%`); + } + this.renderedPercent = percentage; + } + + if (!heading) { + if (this.renderedActiveIndex !== -1) { + this.titleSlots.forEach((slot) => { + slot.classList.remove("is-active", "is-leaving"); + slot.setAttribute("aria-hidden", "true"); + }); + this.currentLink.setAttribute("href", "#"); + this.currentLink.removeAttribute("aria-current"); + this.renderedActiveIndex = -1; + this.renderedTitle = ""; + } + return; + } + + if (this.activeIndex === this.renderedActiveIndex) return; + + this.currentLink.setAttribute("href", `#${encodeURIComponent(heading.id)}`); + this.currentLink.setAttribute("aria-label", `${heading.ariaLabel}, ${percentage}%`); + this.currentLink.setAttribute("aria-current", "location"); + + if (heading.text !== this.renderedTitle) { + if (this.renderedTitle === "") { + const initialSlot = this.titleSlots[this.visibleTitleSlot]; + initialSlot.textContent = heading.text; + initialSlot.classList.remove("is-leaving"); + initialSlot.classList.add("is-active"); + initialSlot.removeAttribute("aria-hidden"); + } else { + const previousSlot = this.titleSlots[this.visibleTitleSlot]; + const nextSlotIndex: 0 | 1 = this.visibleTitleSlot === 0 ? 1 : 0; + const nextSlot = this.titleSlots[nextSlotIndex]; + + nextSlot.textContent = heading.text; + nextSlot.classList.remove("is-leaving"); + nextSlot.classList.add("is-active"); + nextSlot.removeAttribute("aria-hidden"); + + previousSlot.classList.remove("is-active"); + previousSlot.classList.add("is-leaving"); + previousSlot.setAttribute("aria-hidden", "true"); + this.visibleTitleSlot = nextSlotIndex; + } + this.renderedTitle = heading.text; + } + + this.renderedActiveIndex = this.activeIndex; + this.renderedEndActiveIndex = this.endActiveIndex; + } + + private writeInteractionState(): void { + if (!this.interactionDirty && this.renderedActiveIndex === this.activeIndex && this.renderedEndActiveIndex === this.endActiveIndex) return; + + this.dotButtons.forEach((button, index) => { + const active = index >= this.activeIndex && index <= this.endActiveIndex; + button.classList.toggle("is-active", active); + }); + + this.currentLink.tabIndex = this.interactive && this.activeIndex >= 0 ? 0 : -1; + this.root.dataset.interactive = this.interactive ? "true" : "false"; + this.interactionDirty = false; + } +} diff --git a/assets/ts/types/global.d.ts b/assets/ts/types/global.d.ts new file mode 100644 index 00000000..953034df --- /dev/null +++ b/assets/ts/types/global.d.ts @@ -0,0 +1,46 @@ +export {}; + +declare global { + interface Window { + DaybookTransitionEngine: any; + DaybookRouter: any; + DaybookGraph: any; + d3: any; + ThemeSettings: any; + daybookSyncThemeButtons: () => void; + daybookSetTheme: (theme: string, remember: boolean) => void; + daybookSetPalette: (palette: string, remember: boolean) => void; + daybookShouldAnimateTheme: () => boolean; + daybookClearThemeTransition: (attributeName: string) => void; + daybookSyncNoteTocs: (toc?: any) => void; + daybookSyncHeadingAnchors: () => void; + daybookSyncNoteFilters: () => void; + daybookSyncEmbeds: () => void; + DaybookMermaid: any; + daybookNavigateTo: (url: string) => void; + daybookReplaceURL: (url: string) => void; + daybookSearchEngine: any; + daybookSyncPageKey: (url: string) => void; + daybookNavigate: (url: string) => void; + daybookInitSearch: () => void; + daybookInitTagsFilters: () => void; + daybookCloseMobileOverlays: () => void; + mermaid: any; + twttr: any; + } + + interface DocumentEventMap { + "daybook:before-swap": CustomEvent<{ oldUrl: string, newUrl: string }>; + "daybook:page-load": CustomEvent<{ url: URL, navigationType: string, oldUrl: string, newUrl: string }>; + "daybook:transition-finished": CustomEvent<{ oldUrl: string, newUrl: string }>; + } + + interface Document { + startViewTransition?: (callback: () => void) => { + finished: Promise; + ready: Promise; + updateCallbackDone: Promise; + skipTransition: () => void; + }; + } +} diff --git a/assets/ts/ui-language.ts b/assets/ts/ui-language.ts new file mode 100644 index 00000000..270b200a --- /dev/null +++ b/assets/ts/ui-language.ts @@ -0,0 +1,102 @@ +(() => { + type UILanguage = "zh_CN" | "en_US"; + const preferenceKey = "daybook-ui-language"; + + function normalizeLanguage(value: string | null): UILanguage | null { + if (!value) return null; + const language = value.replace("-", "_").toLowerCase(); + if (language === "en_us") return "en_US"; + if (language === "zh_cn") return "zh_CN"; + return null; + } + + function savedLanguage(): UILanguage | null { + try { return normalizeLanguage(sessionStorage.getItem(preferenceKey)); } + catch { return null; } + } + + function rememberLanguage(language: UILanguage): void { + try { sessionStorage.setItem(preferenceKey, language); } catch {} + } + + function isArticle(): boolean { + return document.body.dataset.pageKind === "note" || document.body.dataset.pageKind === "memo"; + } + + function applyLanguage(language: UILanguage): void { + const previousLang = document.documentElement.lang; + const translations = document.getElementById("daybook-ui-translations"); + let dictionary: Record = {}; + try { + dictionary = JSON.parse(translations?.textContent || "{}")[language] || {}; + } catch {} + + document.documentElement.lang = language.replace("_", "-"); + document.documentElement.dataset.uiLanguage = language; + const attributes: Record = { + "data-ui-aria": "aria-label", + "data-ui-tooltip": "data-tooltip", + "data-ui-placeholder": "placeholder", + }; + document.querySelectorAll("[data-ui-text]").forEach(element => { + const text = dictionary[element.dataset.uiText || ""]; + if (text) element.textContent = text; + }); + for (const [marker, attribute] of Object.entries(attributes)) { + document.querySelectorAll(`[${marker}]`).forEach(element => { + const text = dictionary[element.getAttribute(marker) || ""]; + if (text) element.setAttribute(attribute, text); + }); + } + + const prefix = language === "en_US" ? "/en_US" : ""; + document.querySelectorAll( + ".side-nav a:not(.lang-toggle), .site-nav a:not(.lang-toggle), .mobile-drawer-nav a:not(.lang-toggle), .side-avatar-link, .note-back-link, .memo-detail-back, .tag-back-btn, .notes-tag-link, .note-tag-capsule", + ).forEach(link => { + const url = new URL(link.href, location.href); + if (url.origin !== location.origin) return; + const path = url.pathname.replace(/^\/en_US(?=\/)/, ""); + link.href = prefix + path + url.search + url.hash; + }); + + if (isArticle()) { + const nextLanguage = language === "en_US" ? "zh_CN" : "en_US"; + const url = new URL(location.href); + url.searchParams.set("ui", nextLanguage); + document.querySelectorAll(".lang-toggle").forEach(link => { + link.href = url.pathname + url.search + url.hash; + }); + } + rememberLanguage(language); + window.daybookSyncThemeButtons?.(); + document.dispatchEvent(new CustomEvent("daybook:lang-change", { + detail: { lang: document.documentElement.lang, previousLang }, + })); + } + + function syncLanguage(): void { + const explicit = normalizeLanguage(new URL(location.href).searchParams.get("ui")); + const routeLanguage: UILanguage = location.pathname.startsWith("/en_US/") ? "en_US" : "zh_CN"; + applyLanguage(isArticle() ? (explicit || savedLanguage() || routeLanguage) : routeLanguage); + } + + // Capture the interface switch before the SPA router sees it. Translation + // links in article metadata remain ordinary links to the counterpart article. + document.addEventListener("click", event => { + const target = event.target as Element | null; + const link = target?.closest(".lang-toggle"); + if (!link || !isArticle() || event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return; + event.preventDefault(); + event.stopImmediatePropagation(); + const language = normalizeLanguage(document.documentElement.lang) === "en_US" ? "zh_CN" : "en_US"; + const url = new URL(location.href); + url.searchParams.set("ui", language); + if (window.daybookReplaceURL) window.daybookReplaceURL(url.href); + else history.replaceState(history.state, "", url.href); + applyLanguage(language); + }, true); + + document.addEventListener("daybook:page-load", syncLanguage); + if (document.readyState === "loading") document.addEventListener("DOMContentLoaded", syncLanguage, { once: true }); + else syncLanguage(); +})(); diff --git a/cmd/daybook/main.go b/cmd/daybook/main.go new file mode 100644 index 00000000..9481e90a --- /dev/null +++ b/cmd/daybook/main.go @@ -0,0 +1,171 @@ +package main + +import ( + "context" + "errors" + "flag" + "fmt" + "os" + "path/filepath" + "time" + + "github.com/StatIndet/daybook/internal/config" + "github.com/StatIndet/daybook/internal/og" + "github.com/StatIndet/daybook/internal/progress" + "github.com/StatIndet/daybook/internal/site" +) + +var Version = "daybook dev" + +type reportedError struct{ error } + +func main() { + if err := run(); err != nil { + var reported *reportedError + if !errors.As(err, &reported) { + fmt.Fprintln(os.Stderr, err) + } + os.Exit(1) + } +} + +func printHelp() { + fmt.Println("Usage:") + fmt.Println(" daybook build [--verbose] Build the current Daybook vault into ./public") + fmt.Println(" daybook setup-og [--with-deps | --user-deps] Install Playwright and Chromium (optionally OS libraries)") + fmt.Println(" daybook serve [--addr :1313] Serve the existing ./public directory locally") + fmt.Println(" daybook version Print Daybook version") +} + +func run() error { + if len(os.Args) < 2 { + printHelp() + return nil + } + + command := os.Args[1] + if command == "setup-og" { + flags := flag.NewFlagSet("setup-og", flag.ContinueOnError) + withDeps := flags.Bool("with-deps", false, "Install Chromium system libraries too (Linux requires root or sudo)") + userDeps := flags.Bool("user-deps", false, "Download Linux system libraries into the user cache (Debian/Ubuntu, no root required)") + if err := flags.Parse(os.Args[2:]); err != nil { + if err == flag.ErrHelp { + return nil + } + return err + } + if flags.NArg() > 0 { + return fmt.Errorf("daybook setup-og: unexpected argument: %s", flags.Arg(0)) + } + if *withDeps && *userDeps { + return fmt.Errorf("daybook setup-og: --with-deps and --user-deps are mutually exclusive") + } + ctx, cancel := context.WithTimeout(context.Background(), 15*time.Minute) + defer cancel() + return og.Setup(ctx, og.SetupOptions{WithDeps: *withDeps, UserDeps: *userDeps}) + } + + if command == "version" || command == "--version" || command == "-v" { + fmt.Println(Version) + return nil + } + + if command != "build" && command != "serve" { + printHelp() + return fmt.Errorf("unknown command: %s", command) + } + serveAddr := ":1313" + verbose := false + if command == "build" { + flags := flag.NewFlagSet("build", flag.ContinueOnError) + flags.BoolVar(&verbose, "verbose", false, "Print stage timings and file details without animation") + if err := flags.Parse(os.Args[2:]); err != nil { + if err == flag.ErrHelp { + return nil + } + return err + } + if flags.NArg() > 0 { + return fmt.Errorf("daybook build: unexpected argument: %s", flags.Arg(0)) + } + } + if command == "serve" { + flags := flag.NewFlagSet("serve", flag.ContinueOnError) + flags.StringVar(&serveAddr, "addr", serveAddr, "HTTP listen address") + if err := flags.Parse(os.Args[2:]); err != nil { + if err == flag.ErrHelp { + return nil + } + return err + } + if flags.NArg() > 0 { + return fmt.Errorf("daybook serve: unexpected argument: %s", flags.Arg(0)) + } + } + + var configWarnings []string + cfg, err := config.LoadWithWarnings(func(message string) { configWarnings = append(configWarnings, message) }) + if err != nil { + return err + } + + cwd, err := os.Getwd() + if err != nil { + return fmt.Errorf("failed to get current working directory: %w", err) + } + + contentDir := filepath.Join(cwd, "vault") + notesDir := filepath.Join(cwd, "vault", "notes") + memosDir := filepath.Join(cwd, "vault", "memos") + publicDir := filepath.Join(cwd, "public") + + if command == "build" { + if stat, err := os.Stat(contentDir); err != nil || !stat.IsDir() { + return fmt.Errorf("daybook: vault directory not found: ./vault") + } + notesStat, notesErr := os.Stat(notesDir) + memosStat, memosErr := os.Stat(memosDir) + if (notesErr != nil || !notesStat.IsDir()) && (memosErr != nil || !memosStat.IsDir()) { + return fmt.Errorf("daybook: content directory not found: create ./vault/notes or ./vault/memos") + } + } + + var reporter *progress.Reporter + if command == "build" { + reporter = progress.NewReporter(site.BuildStages(cfg), progress.Options{Verbose: verbose}) + defer reporter.Close() + for _, warning := range configWarnings { + reporter.Warnf("%s", warning) + } + } + + options := site.Options{ + Config: cfg, + ContentDir: contentDir, + NotesDir: notesDir, + MemosDir: memosDir, + PublicDir: publicDir, + Reporter: reporter, + } + + if command == "build" { + reporter.Verbosef("stats: enabled=%t", cfg.Stats.Enabled) + + result, err := site.Build(options) + if err != nil { + reporter.Fail(err) + return &reportedError{err} + } + + reporter.Done(fmt.Sprintf("Built %d notes and %d memos → public/", len(result.Notes), len(result.Memos)), fmt.Sprintf("%d social cards", result.SocialCards)) + } + + if command == "serve" { + for _, warning := range configWarnings { + fmt.Fprintln(os.Stderr, "WARN "+warning) + } + return site.Serve(options.PublicDir, serveAddr) + } + + return nil +} diff --git a/cmd/daybook/main_test.go b/cmd/daybook/main_test.go new file mode 100644 index 00000000..139862c6 --- /dev/null +++ b/cmd/daybook/main_test.go @@ -0,0 +1,108 @@ +package main + +import ( + "bytes" + "errors" + "io" + "os" + "path/filepath" + "strings" + "testing" +) + +func runCaptured(t *testing.T, args ...string) (string, error) { + t.Helper() + oldArgs, oldOut := os.Args, os.Stdout + defer func() { os.Args, os.Stdout = oldArgs, oldOut }() + os.Args = append([]string{"daybook"}, args...) + reader, writer, err := os.Pipe() + if err != nil { + t.Fatal(err) + } + os.Stdout = writer + var output bytes.Buffer + drained := make(chan struct{}) + go func() { _, _ = io.Copy(&output, reader); close(drained) }() + result := run() + writer.Close() + <-drained + reader.Close() + return output.String(), result +} + +func TestBuildFlagsAreValidatedBeforeLoadingVault(t *testing.T) { + t.Chdir(t.TempDir()) + for _, args := range [][]string{{"build", "unexpected"}, {"build", "--unknown"}} { + _, err := runCaptured(t, args...) + if err == nil || strings.Contains(err.Error(), "daybook.yaml") { + t.Fatalf("%v: %v", args, err) + } + } + if _, err := runCaptured(t, "build", "--help"); err != nil { + t.Fatal(err) + } +} + +func TestSetupOGFlagsAreValidatedBeforeInstalling(t *testing.T) { + t.Chdir(t.TempDir()) + t.Setenv("PATH", "") + for _, args := range [][]string{ + {"setup-og", "unexpected"}, + {"setup-og", "--unknown"}, + {"setup-og", "--with-deps", "unexpected"}, + {"setup-og", "--user-deps", "--with-deps"}, + } { + _, err := runCaptured(t, args...) + if err == nil || strings.Contains(err.Error(), "Node.js") { + t.Fatalf("%v: must reject invalid flags before installing: %v", args, err) + } + } + if _, err := runCaptured(t, "setup-og", "--help"); err != nil { + t.Fatal(err) + } + if _, err := runCaptured(t, "setup-og", "--with-deps"); err == nil || !strings.Contains(err.Error(), "Node.js") { + t.Fatalf("valid setup flag should reach runtime setup: %v", err) + } +} + +func TestBuildSummaryAndFailureOutput(t *testing.T) { + t.Chdir(t.TempDir()) + if err := os.MkdirAll("vault/notes", 0755); err != nil { + t.Fatal(err) + } + if err := os.MkdirAll("vault/pages", 0755); err != nil { + t.Fatal(err) + } + if err := os.WriteFile("daybook.yaml", []byte("comment:\n enabled: true\n provider: unsupported\n"), 0600); err != nil { + t.Fatal(err) + } + if err := os.WriteFile("vault/pages/about.md", []byte("---\ntitle: About\n---\nHello"), 0600); err != nil { + t.Fatal(err) + } + for _, verbose := range []bool{false, true} { + args := []string{"build"} + if verbose { + args = append(args, "--verbose") + } + output, err := runCaptured(t, args...) + if err != nil { + t.Fatal(err) + } + if strings.Count(output, "✓ Built") != 1 || !strings.Contains(output, "0 social cards · 1 warnings") || strings.Count(output, "WARN unsupported comment provider") != 1 { + t.Fatal(output) + } + if strings.Contains(output, "stats:") != verbose || strings.ContainsAny(output, "\x1b\r") { + t.Fatal(output) + } + } + // Failure after a real build stage preserves its location, leaves no success + // summary and returns the marker main uses to avoid printing the error twice. + if err := os.Remove(filepath.Join("vault", "pages", "about.md")); err != nil { + t.Fatal(err) + } + output, err := runCaptured(t, "build") + var reported *reportedError + if !errors.As(err, &reported) || strings.Contains(output, "✓") || strings.Count(output, "✗ Build failed") != 1 || !strings.Contains(output, "pages/about.md") { + t.Fatalf("error=%v\n%s", err, output) + } +} diff --git a/go.mod b/go.mod new file mode 100644 index 00000000..323e461e --- /dev/null +++ b/go.mod @@ -0,0 +1,21 @@ +module github.com/StatIndet/daybook + +go 1.26.4 + +require ( + github.com/alecthomas/chroma/v2 v2.27.0 + github.com/microcosm-cc/bluemonday v1.0.27 + github.com/rivo/uniseg v0.4.7 + github.com/yuin/goldmark v1.8.6 + github.com/yuin/goldmark-highlighting/v2 v2.0.0-20230729083705-37449abec8cc + golang.org/x/net v0.61.0 + golang.org/x/term v0.47.0 + gopkg.in/yaml.v3 v3.0.1 +) + +require ( + github.com/aymerick/douceur v0.2.0 // indirect + github.com/dlclark/regexp2/v2 v2.2.1 // indirect + github.com/gorilla/css v1.0.1 // indirect + golang.org/x/sys v0.49.0 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 00000000..ec024d3c --- /dev/null +++ b/go.sum @@ -0,0 +1,43 @@ +github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0= +github.com/alecthomas/assert/v2 v2.11.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= +github.com/alecthomas/chroma/v2 v2.2.0/go.mod h1:vf4zrexSH54oEjJ7EdB65tGNHmH3pGZmVkgTP5RHvAs= +github.com/alecthomas/chroma/v2 v2.27.0 h1:FodwmyOBgJULFYmDqibcp9pvfDLWdtPRh9v/r5BXYZs= +github.com/alecthomas/chroma/v2 v2.27.0/go.mod h1:NjJ3ciIgrqBNeIkWZ4e46nseoLDslxU1LmfCoL+wcY8= +github.com/alecthomas/repr v0.0.0-20220113201626-b1b626ac65ae/go.mod h1:2kn6fqh/zIyPLmm3ugklbEi5hg5wS435eygvNfaDQL8= +github.com/alecthomas/repr v0.5.2 h1:SU73FTI9D1P5UNtvseffFSGmdNci/O6RsqzeXJtP0Qs= +github.com/alecthomas/repr v0.5.2/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= +github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk= +github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dlclark/regexp2 v1.4.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= +github.com/dlclark/regexp2 v1.7.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= +github.com/dlclark/regexp2/v2 v2.2.1 h1:mf4KkFUj0gJuarK8P+LgiS+Lit7m9N1yAwEfPbee7R0= +github.com/dlclark/regexp2/v2 v2.2.1/go.mod h1:avUrQvPaLz2DrFNHJF0taWAFFX2C1GMSSoeiqFjcBmU= +github.com/gorilla/css v1.0.1 h1:ntNaBIghp6JmvWnxbZKANoLyuXTPZ4cAMlo6RyhlbO8= +github.com/gorilla/css v1.0.1/go.mod h1:BvnYkspnSzMmwRK+b8/xgNPLiIuNZr6vbZBTPQ2A3b0= +github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= +github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= +github.com/microcosm-cc/bluemonday v1.0.27 h1:MpEUotklkwCSLeH+Qdx1VJgNqLlpY2KXwXFM08ygZfk= +github.com/microcosm-cc/bluemonday v1.0.27/go.mod h1:jFi9vgW+H7c3V0lb6nR74Ib/DIB5OBs92Dimizgw2cA= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= +github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/yuin/goldmark v1.4.15/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/yuin/goldmark v1.8.6 h1:d0VcaP1sx9GkFVkoW+KtggpGi2KZ965i14b0+bDQST4= +github.com/yuin/goldmark v1.8.6/go.mod h1:ip/1k0VRfGynBgxOz0yCqHrbZXhcjxyuS66Brc7iBKg= +github.com/yuin/goldmark-highlighting/v2 v2.0.0-20230729083705-37449abec8cc h1:+IAOyRda+RLrxa1WC7umKOZRsGq4QrFFMYApOeHzQwQ= +github.com/yuin/goldmark-highlighting/v2 v2.0.0-20230729083705-37449abec8cc/go.mod h1:ovIvrum6DQJA4QsJSovrkC4saKHQVs7TvcaeO8AIl5I= +golang.org/x/net v0.61.0 h1:RR+6j/BTBCrggOLugxa+66R8FvoN6MHlzDlZIbN9YFw= +golang.org/x/net v0.61.0/go.mod h1:WgDCOTH8iwtB66T4/GfI94AHo/hhdb7Hah9NDseQfiI= +golang.org/x/sys v0.49.0 h1:XbzkgYJHdqh/8m2Uu0W/dQv8nktxx4BFHp1M0gROTXA= +golang.org/x/sys v0.49.0/go.mod h1:hNLxWAXmnKAxqDtdwIYC4bM9oQPEecfsnNMuSxOs3og= +golang.org/x/term v0.47.0 h1:cpyOwQkr2Nzxe2p6KnrTG7Ei2wtzjsuSjhpXXepZ/BM= +golang.org/x/term v0.47.0/go.mod h1:efAfAuG6RKABvg1ArGebRkvX6LXul14SM67o2e4mUCY= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/internal/config/comment_test.go b/internal/config/comment_test.go new file mode 100644 index 00000000..01b0f916 --- /dev/null +++ b/internal/config/comment_test.go @@ -0,0 +1,53 @@ +package config + +import ( + "os" + "path/filepath" + "strings" + "testing" +) + +func TestLoadGiscusConfig(t *testing.T) { + complete := `comment: + enabled: true + provider: " giscus " + giscus: + repo: " owner/blog " + repoId: " R_repo " + category: " Announcements " + categoryId: " DIC_category " +` + for _, test := range []struct { + name string + config string + enabled bool + }{ + {name: "complete", config: complete, enabled: true}, + {name: "globally disabled", config: strings.Replace(complete, "enabled: true", "enabled: false", 1)}, + {name: "missing repository", config: strings.Replace(complete, `repo: " owner/blog "`, `repo: " "`, 1)}, + {name: "missing repository ID", config: strings.Replace(complete, `repoId: " R_repo "`, `repoId: " "`, 1)}, + {name: "missing category", config: strings.Replace(complete, `category: " Announcements "`, `category: " "`, 1)}, + {name: "missing category ID", config: strings.Replace(complete, `categoryId: " DIC_category "`, `categoryId: " "`, 1)}, + {name: "unknown provider", config: strings.Replace(complete, `provider: " giscus "`, `provider: other`, 1)}, + {name: "missing provider", config: strings.Replace(complete, `provider: " giscus "`, `provider: ""`, 1)}, + {name: "legacy Waline", config: "comment:\n enabled: true\n provider: waline\n waline:\n serverURL: https://comments.example.com\n"}, + } { + t.Run(test.name, func(t *testing.T) { + vault := t.TempDir() + t.Chdir(vault) + if err := os.WriteFile(filepath.Join(vault, "daybook.yaml"), []byte(test.config), 0644); err != nil { + t.Fatal(err) + } + cfg, err := Load() + if err != nil { + t.Fatal(err) + } + if cfg.Comment.Enabled != test.enabled || cfg.Comment.Available() != test.enabled { + t.Fatalf("comment enabled = %v, available = %v, want %v", cfg.Comment.Enabled, cfg.Comment.Available(), test.enabled) + } + if test.name == "complete" && cfg.Comment.Giscus != (GiscusConfig{Repo: "owner/blog", RepoID: "R_repo", Category: "Announcements", CategoryID: "DIC_category"}) { + t.Fatalf("giscus fields were not normalized: %#v", cfg.Comment.Giscus) + } + }) + } +} diff --git a/internal/config/config.go b/internal/config/config.go new file mode 100644 index 00000000..397c6b25 --- /dev/null +++ b/internal/config/config.go @@ -0,0 +1,251 @@ +package config + +import ( + "fmt" + "os" + "regexp" + "strings" + + "gopkg.in/yaml.v3" +) + +type SocialLinkConfig struct { + Type string `yaml:"type"` + URL string `yaml:"url"` +} + +type SocialLink struct { + Type string + Label string + URL string + Icon string +} + +type AuthorConfig struct { + Name string `yaml:"name"` + NameEn string `yaml:"nameEn"` + LogoText string `yaml:"logoText"` + Avatar string `yaml:"avatar"` +} + +type ProfileConfig struct { + Author AuthorConfig `yaml:"author"` + Slogan map[string]string `yaml:"slogan"` + Social []SocialLinkConfig `yaml:"social"` + ParsedSocial []SocialLink `yaml:"-"` +} + +func (p ProfileConfig) HasSignatureFont() bool { + return p.Author.Name == "å�²å¸™" +} + +func (p ProfileConfig) GetLogoText() string { + if p.Author.LogoText != "" { + return p.Author.LogoText + } + if p.Author.NameEn != "" { + return p.Author.NameEn + } + if p.Author.Name != "" { + return p.Author.Name + } + return "Daybook" +} + +func getMultilingualString(dict map[string]string, lang string) string { + if val, ok := dict[lang]; ok && val != "" { + return val + } + if val, ok := dict["zh"]; ok && val != "" { + return val + } + return "" +} + +func (p ProfileConfig) GetSlogan(lang string) string { + return getMultilingualString(p.Slogan, lang) +} + +type SEOConfig struct { + HomeTitle map[string]string `yaml:"homeTitle"` + HomeDescription map[string]string `yaml:"homeDescription"` +} + +type GiscusConfig struct { + Repo string `yaml:"repo"` + RepoID string `yaml:"repoId"` + Category string `yaml:"category"` + CategoryID string `yaml:"categoryId"` +} + +type CommentConfig struct { + Enabled bool `yaml:"enabled"` + Provider string `yaml:"provider"` + Giscus GiscusConfig `yaml:"giscus"` +} + +// Available also protects callers that construct Config directly instead of +// loading daybook.yaml. A note may opt out, but cannot bypass this global gate. +func (c CommentConfig) Available() bool { + return c.Enabled && c.Provider == "giscus" && + strings.TrimSpace(c.Giscus.Repo) != "" && + strings.TrimSpace(c.Giscus.RepoID) != "" && + strings.TrimSpace(c.Giscus.Category) != "" && + strings.TrimSpace(c.Giscus.CategoryID) != "" +} + +type StatsConfig struct { + Enabled bool `yaml:"enabled"` +} + +type ShareConfig struct { + Text string `yaml:"text"` +} + +// SearchProperties explicitly opts custom note properties into the public +// graph search index. All other frontmatter remains build-time data only. +type GraphConfig struct { + SearchProperties []string `yaml:"searchProperties"` +} + +// GitHubConfig selects the public profile used by the homepage. Credentials are +// read from the environment at build time and are never included in output. +type GitHubConfig struct { + Username string `yaml:"username"` + TokenEnv string `yaml:"tokenEnv"` +} + +type SiteConfig struct { + URL string `yaml:"url"` + StartedAt string `yaml:"startedAt"` + Favicon string `yaml:"favicon"` + Copyright string `yaml:"copyright"` +} + +type Config struct { + Site SiteConfig `yaml:"site"` + Profile ProfileConfig `yaml:"profile"` + SEO SEOConfig `yaml:"seo"` + Comment CommentConfig `yaml:"comment"` + Stats StatsConfig `yaml:"stats"` + Share ShareConfig `yaml:"share"` + GitHub GitHubConfig `yaml:"github"` + Graph GraphConfig `yaml:"graph"` +} + +func (c Config) GetSiteName(_ string) string { + return c.Profile.GetLogoText() +} + +func (c Config) GetHomeTitle(lang string) string { + return getMultilingualString(c.SEO.HomeTitle, lang) +} + +func (c Config) GetHomeDescription(lang string) string { + return getMultilingualString(c.SEO.HomeDescription, lang) +} + +func (c Config) GetSocialLinks(lang string) []SocialLink { + links := make([]SocialLink, len(c.Profile.ParsedSocial)) + copy(links, c.Profile.ParsedSocial) + + rssURL := "/rss.xml" + if lang != "zh_CN" && lang != "zh" { + rssURL = "/" + lang + "/rss.xml" + } + + links = append(links, SocialLink{ + Type: "rss", + Label: "RSS", + URL: rssURL, + Icon: "/icons/social/rss.svg", + }) + + return links +} + +func parseSocialLinks(configs []SocialLinkConfig) []SocialLink { + var links []SocialLink + for _, c := range configs { + if strings.TrimSpace(c.URL) == "" { + continue + } + if c.Type == "rss" { + continue + } + + link := (Config{}).ResolveSocialLink(c.URL, c.Type) + if link.URL != "" { + links = append(links, link) + } + } + return links +} + +func Load() (Config, error) { + return LoadWithWarnings(func(message string) { fmt.Println("WARN " + message) }) +} + +// LoadWithWarnings lets the CLI coordinate configuration warnings with build output. +func LoadWithWarnings(warn func(string)) (Config, error) { + data, err := os.ReadFile("daybook.yaml") + if err != nil { + return Config{}, fmt.Errorf("config error: daybook.yaml not found: %w", err) + } + + var cfg Config + if err := yaml.Unmarshal(data, &cfg); err != nil { + return Config{}, fmt.Errorf("config error: invalid daybook.yaml: %w", err) + } + + // Defaults and Fallbacks + cfg.Profile.ParsedSocial = parseSocialLinks(cfg.Profile.Social) + if strings.TrimSpace(cfg.Site.StartedAt) == "" { + cfg.Site.StartedAt = "2026-06-08" + } + if cfg.Share.Text == "" { + cfg.Share.Text = `"{Title}"` + } + properties := make([]string, 0, len(cfg.Graph.SearchProperties)) + seenProperties := make(map[string]bool) + for _, property := range cfg.Graph.SearchProperties { + property = strings.TrimSpace(property) + if property != "" && !seenProperties[property] { + properties = append(properties, property) + seenProperties[property] = true + } + } + cfg.Graph.SearchProperties = properties + + cfg.Comment.Provider = strings.TrimSpace(cfg.Comment.Provider) + cfg.Comment.Giscus.Repo = strings.TrimSpace(cfg.Comment.Giscus.Repo) + cfg.Comment.Giscus.RepoID = strings.TrimSpace(cfg.Comment.Giscus.RepoID) + cfg.Comment.Giscus.Category = strings.TrimSpace(cfg.Comment.Giscus.Category) + cfg.Comment.Giscus.CategoryID = strings.TrimSpace(cfg.Comment.Giscus.CategoryID) + if cfg.Comment.Enabled && !cfg.Comment.Available() { + if cfg.Comment.Provider != "giscus" { + if warn != nil { + warn(fmt.Sprintf("unsupported comment provider %q; use giscus, disabling comments", cfg.Comment.Provider)) + } + } else { + if warn != nil { + warn("giscus requires repo, repoId, category and categoryId, disabling comments") + } + } + cfg.Comment.Enabled = false + } + + if cfg.Site.URL != "" && !strings.HasPrefix(cfg.Site.URL, "http://") && !strings.HasPrefix(cfg.Site.URL, "https://") { + return Config{}, fmt.Errorf("config error: site.url must be a valid http/https URL") + } + + cfg.GitHub.Username = strings.TrimSpace(cfg.GitHub.Username) + if cfg.GitHub.Username != "" && !regexp.MustCompile(`^[A-Za-z0-9](?:[A-Za-z0-9-]{0,37}[A-Za-z0-9])?$`).MatchString(cfg.GitHub.Username) { + return Config{}, fmt.Errorf("config error: github.username must be a GitHub username") + } + if cfg.GitHub.TokenEnv == "" { + cfg.GitHub.TokenEnv = "GITHUB_TOKEN" + } + + return cfg, nil +} diff --git a/internal/config/config_test.go b/internal/config/config_test.go new file mode 100644 index 00000000..362035ce --- /dev/null +++ b/internal/config/config_test.go @@ -0,0 +1,25 @@ +package config + +import ( + "testing" +) + +func TestParseSocialLinks(t *testing.T) { + configs := []SocialLinkConfig{ + {Type: "github", URL: "https://github.com/foo"}, + {Type: "bilibili", URL: "https://bilibili.com/foo"}, + } + + links := parseSocialLinks(configs) + if len(links) != 2 { + t.Fatalf("Expected 2 links, got %d", len(links)) + } + + if links[0].Type != "github" || links[0].Label != "GitHub" { + t.Errorf("Expected GitHub, got %v", links[0]) + } + + if links[1].Type != "bilibili" || links[1].Label != "Bilibili" { + t.Errorf("Expected Bilibili, got %v", links[1]) + } +} diff --git a/internal/config/graph_test.go b/internal/config/graph_test.go new file mode 100644 index 00000000..e1586de0 --- /dev/null +++ b/internal/config/graph_test.go @@ -0,0 +1,31 @@ +package config + +import ( + "os" + "reflect" + "testing" +) + +func TestGraphSearchPropertiesDefaultAndNormalization(t *testing.T) { + for _, test := range []struct { + name, input string + want []string + }{ + {"default", "site: {}\n", []string{}}, + {"explicit", "graph:\n searchProperties: [\" status \", status, aliases, \"\"]\n", []string{"status", "aliases"}}, + } { + t.Run(test.name, func(t *testing.T) { + t.Chdir(t.TempDir()) + if err := os.WriteFile("daybook.yaml", []byte(test.input), 0644); err != nil { + t.Fatal(err) + } + cfg, err := Load() + if err != nil { + t.Fatal(err) + } + if !reflect.DeepEqual(cfg.Graph.SearchProperties, test.want) { + t.Fatalf("searchProperties = %#v, want %#v", cfg.Graph.SearchProperties, test.want) + } + }) + } +} diff --git a/internal/config/seo_test.go b/internal/config/seo_test.go new file mode 100644 index 00000000..ffcc162a --- /dev/null +++ b/internal/config/seo_test.go @@ -0,0 +1,26 @@ +package config_test + +import ( + "testing" + + "github.com/StatIndet/daybook/internal/config" +) + +func TestGetSiteName(t *testing.T) { + cfg := config.Config{ + Profile: config.ProfileConfig{Author: config.AuthorConfig{LogoText: "My Blog"}}, + } + + if name := cfg.GetSiteName("zh_CN"); name != "My Blog" { + t.Errorf("expected 'My Blog', got '%s'", name) + } + + if name := cfg.GetSiteName("en_US"); name != "My Blog" { + t.Errorf("expected 'My Blog', got '%s'", name) + } + + cfgEmpty := config.Config{} + if name := cfgEmpty.GetSiteName("zh_CN"); name != "Daybook" { + t.Errorf("expected 'Daybook', got '%s'", name) + } +} diff --git a/internal/config/social.go b/internal/config/social.go new file mode 100644 index 00000000..f9c3dfc1 --- /dev/null +++ b/internal/config/social.go @@ -0,0 +1,103 @@ +package config + +import ( + "net/url" + "strings" +) + +type socialPlatform struct { + Label string + Icon string + Domains []string +} + +var supportedSocialPlatforms = map[string]socialPlatform{ + "afdian": {"AFDIAN", "/icons/social/afdian.svg", []string{"afdian.com", "afdian.net", "ifdian.net", "ifdian.com"}}, + "bilibili": {"Bilibili", "/icons/social/bilibili.svg", []string{"bilibili.com", "b23.tv"}}, + "bluesky": {"Bluesky", "/icons/social/bluesky.svg", []string{"bsky.app"}}, + "buymeacoffee": {"Buy Me a Coffee", "/icons/social/buymeacoffee.svg", []string{"buymeacoffee.com"}}, + "discord": {"Discord", "/icons/social/discord.svg", []string{"discord.com", "discord.gg"}}, + "email": {"Email", "/icons/social/gmail.svg", nil}, + "github": {"GitHub", "/icons/social/github.svg", []string{"github.com"}}, + "gitlab": {"GitLab", "/icons/social/gitlab.svg", []string{"gitlab.com"}}, + "instagram": {"Instagram", "/icons/social/instagram.svg", []string{"instagram.com"}}, + "kofi": {"Ko-fi", "/icons/social/kofi.svg", []string{"ko-fi.com"}}, + "mastodon": {"Mastodon", "/icons/social/mastodon.svg", []string{"mastodon.social", "mastodon.online"}}, + "qq": {"QQ", "/icons/social/qq.svg", []string{"qq.com"}}, + "reddit": {"Reddit", "/icons/social/reddit.svg", []string{"reddit.com", "redd.it"}}, + "telegram": {"Telegram", "/icons/social/telegram.svg", []string{"t.me", "telegram.me", "telegram.org"}}, + "threads": {"Threads", "/icons/social/threads.svg", []string{"threads.net", "threads.com"}}, + "twitch": {"Twitch", "/icons/social/twitch.svg", []string{"twitch.tv"}}, + "x": {"X (Twitter)", "/icons/social/x.svg", []string{"x.com", "twitter.com"}}, + "youtube": {"YouTube", "/icons/social/youtube.svg", []string{"youtube.com", "youtu.be"}}, +} + +func socialType(provider string) string { + switch provider = strings.ToLower(strings.TrimSpace(provider)); provider { + case "twitter": + return "x" + case "ko-fi", "ko_fi": + return "kofi" + case "buy-me-a-coffee", "buy_me_a_coffee": + return "buymeacoffee" + case "ifdian", "aifadian": + return "afdian" + case "gmail": + return "email" + default: + return provider + } +} + +func socialHost(u *url.URL) string { + return strings.TrimPrefix(strings.TrimSuffix(strings.ToLower(u.Hostname()), "."), "www.") +} + +// ResolveSocialLink uses the destination before the provider: GitHub labels +// many supported services as "generic". Only known brands get local icons. +func (c Config) ResolveSocialLink(rawURL, provider string) SocialLink { + rawURL = strings.TrimSpace(rawURL) + link := SocialLink{Type: "website", Label: "Website", URL: rawURL} + if rawURL == "" { + return link + } + if strings.HasPrefix(rawURL, "//") { + rawURL = "https:" + rawURL + } else if !strings.Contains(rawURL, ":") { + rawURL = "https://" + rawURL + } + u, err := url.Parse(rawURL) + if err != nil || (u.Scheme != "https" && u.Scheme != "http" && u.Scheme != "mailto") { + link.URL = "" + return link + } + link.URL = u.String() + kind := socialType(provider) + if u.Scheme == "mailto" { + kind = "email" + } else { + host := socialHost(u) + if host == "" { + link.URL = "" + return link + } + if site, err := url.Parse(c.Site.URL); err == nil && socialHost(site) != "" && host == socialHost(site) { + link.Type, link.Label, link.Icon = "website", c.GetSiteName("en_US"), "/favicon.svg" + if c.Site.Favicon != "" { + link.Icon = "/" + strings.TrimPrefix(c.Site.Favicon, "/") + } + return link + } + for candidate, platform := range supportedSocialPlatforms { + for _, domain := range platform.Domains { + if host == domain || strings.HasSuffix(host, "."+domain) { + kind = candidate + } + } + } + } + if platform, ok := supportedSocialPlatforms[kind]; ok { + link.Type, link.Label, link.Icon = kind, platform.Label, platform.Icon + } + return link +} diff --git a/internal/config/social_test.go b/internal/config/social_test.go new file mode 100644 index 00000000..62f9e0d5 --- /dev/null +++ b/internal/config/social_test.go @@ -0,0 +1,52 @@ +package config + +import ( + "github.com/StatIndet/daybook/internal/embedded" + "strings" + "testing" +) + +func TestResolveSocialLinkByDestination(t *testing.T) { + cfg := Config{Site: SiteConfig{URL: "https://daybook.page"}} + for _, tc := range []struct{ url, provider, kind, label, icon string }{ + {"https://space.bilibili.com/123", "generic", "bilibili", "Bilibili", "/icons/social/bilibili.svg"}, + {"https://ko-fi.com/author", "generic", "kofi", "Ko-fi", "/icons/social/kofi.svg"}, + {"https://buymeacoffee.com/author", "generic", "buymeacoffee", "Buy Me a Coffee", "/icons/social/buymeacoffee.svg"}, + {"https://ifdian.net/a/author", "generic", "afdian", "AFDIAN", "/icons/social/afdian.svg"}, + {"https://afdian.com/a/author", "generic", "afdian", "AFDIAN", "/icons/social/afdian.svg"}, + {"https://twitter.com/author", "generic", "x", "X (Twitter)", "/icons/social/x.svg"}, + {"https://social.example/@author", "mastodon", "mastodon", "Mastodon", "/icons/social/mastodon.svg"}, + {"https://www.daybook.page/about/", "generic", "website", "Daybook", "/favicon.svg"}, + {"https://unknown.example/profile", "generic", "website", "Website", ""}, + {"https://ko-fi.com.evil.example/profile", "generic", "website", "Website", ""}, + {"https://ko-fi.com@evil.example/profile", "generic", "website", "Website", ""}, + {"mailto:author@example.com", "generic", "email", "Email", "/icons/social/gmail.svg"}, + {"//ko-fi.com/author", "generic", "kofi", "Ko-fi", "/icons/social/kofi.svg"}, + } { + t.Run(tc.url, func(t *testing.T) { + link := cfg.ResolveSocialLink(tc.url, tc.provider) + if link.Type != tc.kind || link.Label != tc.label || link.Icon != tc.icon || link.URL == "" { + t.Fatalf("wrong social identity: %+v", link) + } + }) + } + cfg.Site.Favicon = "attachments/custom.svg" + if got := cfg.ResolveSocialLink("https://daybook.page", "").Icon; got != "/attachments/custom.svg" { + t.Fatalf("custom site favicon ignored: %q", got) + } +} + +func TestUnknownConfiguredSocialLinkKeepsReadableFallback(t *testing.T) { + links := parseSocialLinks([]SocialLinkConfig{{Type: "generic", URL: "https://unknown.example"}, {Type: "generic", URL: "https://ko-fi.com/author"}}) + if len(links) != 2 || links[0].Label != "Website" || links[1].Label != "Ko-fi" { + t.Fatalf("unknown providers must not hide valid links or leak generic labels: %+v", links) + } +} + +func TestSocialPlatformIconsAreSelfHosted(t *testing.T) { + for name, platform := range supportedSocialPlatforms { + if _, err := embedded.FS.ReadFile("static/" + strings.TrimPrefix(platform.Icon, "/")); err != nil { + t.Errorf("%s has no embedded icon: %v", name, err) + } + } +} diff --git a/internal/content/group.go b/internal/content/group.go new file mode 100644 index 00000000..da2f7a91 --- /dev/null +++ b/internal/content/group.go @@ -0,0 +1,107 @@ +package content + +import ( + "fmt" + "sort" +) + +type ArticleGroup struct { + Key string + I18nKey string + Versions map[string]*Note +} + +// PublishedVersions returns every published version in a stable order. UI +// language chooses interface labels, never which article versions are listed. +func (g *ArticleGroup) PublishedVersions() []*Note { + var notes []*Note + for _, lang := range []string{"zh_CN", "en_US"} { + if note := g.Versions[lang]; note != nil && !note.Draft { + notes = append(notes, note) + } + } + return notes +} + +func (g *ArticleGroup) HasVersion(lang string) bool { + _, ok := g.Versions[lang] + return ok +} + +// SelectVersion selects the note for the given language environment. +// It prioritizes the requested lang. If not found, it falls back to an available version. +// The boolean return indicates if this is a fallback. +func (g *ArticleGroup) SelectVersion(lang string) (*Note, bool) { + if note, ok := g.Versions[lang]; ok { + return note, false + } + // Fallback logic + // Prefer zh_CN if it exists + if note, ok := g.Versions["zh_CN"]; ok { + return note, true + } + // Prefer en if it exists + if note, ok := g.Versions["en_US"]; ok { + return note, true + } + // Pick whatever is first + for _, note := range g.Versions { + return note, true + } + return nil, false +} + +// GroupNotes takes a flat slice of Notes and groups them into ArticleGroups. +func GroupNotes(notes []Note) ([]*ArticleGroup, error) { + groupsMap := make(map[string]*ArticleGroup) + + for i := range notes { + note := ¬es[i] + + groupKey := note.I18nKey + if groupKey == "" { + groupKey = "single:" + note.Lang + ":" + note.Slug + } + if note.Section != "" { + groupKey = note.Section + ":" + groupKey + } + + group, ok := groupsMap[groupKey] + if !ok { + group = &ArticleGroup{ + Key: groupKey, + I18nKey: note.I18nKey, // might be empty + Versions: make(map[string]*Note), + } + groupsMap[groupKey] = group + } + + if _, exists := group.Versions[note.Lang]; exists { + return nil, fmt.Errorf("GroupKey %s 包å�«å¤šä¸ª %s 语言版本", groupKey, note.Lang) + } + + group.Versions[note.Lang] = note + } + + var groups []*ArticleGroup + for _, g := range groupsMap { + groups = append(groups, g) + } + + sort.SliceStable(groups, func(i, j int) bool { + // Use zh_CN date to sort, or fallback + noteI, _ := groups[i].SelectVersion("zh_CN") + noteJ, _ := groups[j].SelectVersion("zh_CN") + + if noteI == nil || noteJ == nil { + return false + } + + if CompareDates(noteI.Date, noteJ.Date) == 0 { + return noteI.Title < noteJ.Title + } + return CompareDates(noteI.Date, noteJ.Date) > 0 + }) + + return groups, nil +} diff --git a/internal/content/group_test.go b/internal/content/group_test.go new file mode 100644 index 00000000..ca1893f6 --- /dev/null +++ b/internal/content/group_test.go @@ -0,0 +1,83 @@ +package content + +import "testing" + +func TestGroupNotes(t *testing.T) { + notes := []Note{ + {Slug: "foo", Lang: "zh_CN", I18nKey: "my-group"}, + {Slug: "foo-en", Lang: "en_US", I18nKey: "my-group"}, + {Slug: "bar", Lang: "zh_CN"}, // no i18n_key + {Slug: "baz", Lang: "en_US"}, // no i18n_key + } + + groups, err := GroupNotes(notes) + if err != nil { + t.Fatalf("GroupNotes error: %v", err) + } + + if len(groups) != 3 { + t.Fatalf("Expected 3 groups, got %d", len(groups)) + } + + groupsMap := make(map[string]*ArticleGroup) + for _, g := range groups { + groupsMap[g.Key] = g + } + + // Bilingual article + myGroup := groupsMap["my-group"] + if myGroup == nil { + t.Fatalf("my-group not found") + } + if len(myGroup.Versions) != 2 { + t.Fatalf("my-group should have 2 versions") + } + if myGroup.Key != "my-group" { + t.Fatalf("my-group key should be my-group") + } + if myGroup.I18nKey != "my-group" { + t.Fatalf("my-group i18n_key should be my-group") + } + + // Single language zh_CN + barKey := "single:zh_CN:bar" + barGroup := groupsMap[barKey] + if barGroup == nil { + t.Fatalf("bar group not found") + } + if barGroup.Key != barKey { + t.Errorf("Expected Key %s, got %s", barKey, barGroup.Key) + } + if barGroup.I18nKey != "" { + t.Errorf("Expected I18nKey empty, got %s", barGroup.I18nKey) + } + + // Single language en_US + bazKey := "single:en_US:baz" + bazGroup := groupsMap[bazKey] + if bazGroup == nil { + t.Fatalf("baz group not found") + } + if bazGroup.Key != bazKey { + t.Errorf("Expected Key %s, got %s", bazKey, bazGroup.Key) + } + if bazGroup.I18nKey != "" { + t.Errorf("Expected I18nKey empty, got %s", bazGroup.I18nKey) + } + + if barGroup.Key == bazGroup.Key { + t.Errorf("Two different single-language notes should have different keys") + } +} + +func TestGroupNotesKeepsSectionsDistinct(t *testing.T) { + groups, err := GroupNotes([]Note{ + {Section: "notes", Slug: "same", Lang: "zh_CN", I18nKey: "same-translation"}, + {Section: "memos", Slug: "same", Lang: "zh_CN", I18nKey: "same-translation"}, + {Section: "notes", Slug: "standalone", Lang: "zh_CN"}, + {Section: "memos", Slug: "standalone", Lang: "zh_CN"}, + }) + if err != nil || len(groups) != 4 { + t.Fatalf("sections must not share translation or slug groups: %d, %v", len(groups), err) + } +} diff --git a/internal/content/note.go b/internal/content/note.go new file mode 100644 index 00000000..84500e0a --- /dev/null +++ b/internal/content/note.go @@ -0,0 +1,350 @@ +package content + +import ( + "fmt" + "math" + "os" + "path/filepath" + "regexp" + "strings" + "time" + "unicode" + + "gopkg.in/yaml.v3" +) + +type Note struct { + Title string + Date string + Updated string + Slug string + Tags []string + Summary string + Draft bool + Math bool + Pinned bool + HasMusic bool + Body string + BodyStartLine int + URL string + SourcePath string + Toc *bool + Comment *bool + WordCount int + ReadingMinutes int + Lang string + I18nKey string + CanonicalPath string + Section string + Location string + // Frontmatter is retained only for explicit graph search property exports. + // It must never be serialized wholesale into a public artifact. + Frontmatter map[string]any `json:"-"` +} + +type frontmatter struct { + Date string `yaml:"date"` + Updated string `yaml:"updated"` + Lang string `yaml:"lang"` + I18nKey string `yaml:"i18n_key"` + Tags []string `yaml:"tags"` + Summary string `yaml:"summary"` + Draft bool `yaml:"draft"` + Math bool `yaml:"math"` + Pinned bool `yaml:"pinned"` + Toc *bool `yaml:"toc"` + Comment *bool `yaml:"comment"` + Location string `yaml:"location"` +} + +func LoadNotes(dir string) ([]*ArticleGroup, []string, error) { + return loadSection(dir, "notes") +} + +func LoadNotesWithProgress(dir string, onFile func(string, int)) ([]*ArticleGroup, []string, error) { + return loadSection(dir, "notes", onFile) +} + +// LoadMemos loads the optional memos directory with the same publishing rules +// as notes. Existing vaults without memos continue to build unchanged. +func LoadMemos(dir string) ([]*ArticleGroup, []string, error) { + return loadSection(dir, "memos") +} + +func LoadMemosWithProgress(dir string, onFile func(string, int)) ([]*ArticleGroup, []string, error) { + return loadSection(dir, "memos", onFile) +} + +func loadSection(dir, section string, onFile ...func(string, int)) ([]*ArticleGroup, []string, error) { + if _, err := os.Stat(dir); os.IsNotExist(err) { + return nil, nil, nil + } + var notes []Note + var skipped []string + seenSlugs := make(map[string]string) // "lang:slug" -> path + + err := filepath.WalkDir(dir, func(path string, entry os.DirEntry, err error) error { + if err != nil { + return fmt.Errorf("读å�–路径 %s: %w", path, err) + } + if entry.IsDir() || !strings.EqualFold(filepath.Ext(path), ".md") { + return nil + } + + rel, err := filepath.Rel(dir, path) + if err != nil { + return fmt.Errorf("计算相对路径 %s: %w", path, err) + } + rel = filepath.ToSlash(rel) + + slug := strings.TrimSuffix(rel, filepath.Ext(rel)) + + if strings.HasPrefix(slug, "page/") || slug == "page" { + return fmt.Errorf("\"page\" is reserved for Daybook pagination. Conflict: %s", path) + } + + for _, report := range onFile { + if report != nil { + report(path, len(notes)) + } + } + note, err := parseSectionFile(path, slug, section) + if err != nil { + skipped = append(skipped, fmt.Sprintf("%s (%v)", path, err)) + return nil + } + if note.Draft { + return nil + } + + key := note.Lang + ":" + note.Slug + if otherPath, ok := seenSlugs[key]; ok { + return fmt.Errorf("URL 冲çª�: %s 环境下 slug %s å�Œæ—¶å‡ºçŽ°åœ¨ %s å’Œ %s", note.Lang, note.Slug, otherPath, path) + } + seenSlugs[key] = path + + notes = append(notes, note) + for _, report := range onFile { + if report != nil { + report(path, len(notes)) + } + } + return nil + }) + if err != nil { + return nil, nil, fmt.Errorf("é��历笔记目录: %w", err) + } + + groups, err := GroupNotes(notes) + if err != nil { + return nil, nil, err + } + + return groups, skipped, nil +} + +func ParseFile(path string, slug string) (Note, error) { + return parseSectionFile(path, slug, "notes") +} + +func parseSectionFile(path, slug, section string) (Note, error) { + data, err := os.ReadFile(path) + if err != nil { + return Note{}, fmt.Errorf("读å�–笔记文件: %w", err) + } + + return ParseSection(path, string(data), slug, section) +} + +func Parse(sourcePath, text string, slug string) (Note, error) { + return ParseSection(sourcePath, text, slug, "notes") +} + +func ParseMemo(sourcePath, text, slug string) (Note, error) { + return ParseSection(sourcePath, text, slug, "memos") +} + +func ParseSection(sourcePath, text, slug, section string) (Note, error) { + if section != "notes" && section != "memos" { + return Note{}, fmt.Errorf("未知内容目录: %s", section) + } + yamlText, body, bodyStartLine, ok := splitFrontmatter(text) + if !ok { + return Note{}, fmt.Errorf("缺少 YAML frontmatter") + } + + var meta frontmatter + if err := yaml.Unmarshal([]byte(yamlText), &meta); err != nil { + return Note{}, fmt.Errorf("è§£æž� YAML frontmatter: %w", err) + } + var properties map[string]any + if err := yaml.Unmarshal([]byte(yamlText), &properties); err != nil { + return Note{}, fmt.Errorf("è§£æž� YAML frontmatter: %w", err) + } + + note := Note{ + Title: titleFromFilename(sourcePath, slug), + Date: strings.TrimSpace(meta.Date), + Updated: strings.TrimSpace(meta.Updated), + Slug: slug, + Lang: strings.TrimSpace(meta.Lang), + I18nKey: strings.TrimSpace(meta.I18nKey), + Tags: meta.Tags, + Summary: strings.TrimSpace(meta.Summary), + Draft: meta.Draft, + Math: meta.Math, + Pinned: meta.Pinned, + HasMusic: strings.Contains(cleanBody(body), "::music{"), + Toc: meta.Toc, + Comment: meta.Comment, + Body: body, + BodyStartLine: bodyStartLine, + SourcePath: sourcePath, + Section: section, + Location: strings.TrimSpace(meta.Location), + Frontmatter: properties, + } + + if note.Draft { + return note, nil + } + + if note.Lang == "" { + note.Lang = "zh_CN" + } + + prefix := "" + if note.Lang == "en_US" { + prefix = "/en_US" + } + note.URL = prefix + "/" + section + "/" + note.Slug + "/" + note.CanonicalPath = note.URL + + if section != "memos" { + note.WordCount = countWords(note.Body) + note.ReadingMinutes = int(math.Max(1, math.Ceil(float64(note.WordCount)/300.0))) + } + + if err := validate(note); err != nil { + return Note{}, err + } + + return note, nil +} + +func titleFromFilename(sourcePath, slug string) string { + name := filepath.Base(sourcePath) + if sourcePath == "" || name == "." { + name = filepath.Base(slug) + return name + } + return strings.TrimSuffix(name, filepath.Ext(name)) +} + +// ParseDate accepts a calendar date or an RFC3339 timestamp with an explicit +// timezone. Keeping the original string preserves the author's local time. +func ParseDate(value string) (time.Time, error) { + if date, err := time.Parse(time.DateOnly, value); err == nil { + return date, nil + } + return time.Parse(time.RFC3339, value) +} + +// CompareDates orders publication instants, including timestamps with different +// UTC offsets. The lexical fallback also supports optional legacy updated values. +func CompareDates(a, b string) int { + ta, errA := ParseDate(a) + tb, errB := ParseDate(b) + if errA != nil || errB != nil { + return strings.Compare(a, b) + } + return ta.Compare(tb) +} + +func splitFrontmatter(text string) (string, string, int, bool) { + // split on "\n" directly will lose \r, let's just split by "\n" + lines := strings.Split(text, "\n") + if len(lines) < 3 || strings.TrimSpace(lines[0]) != "---" { + return "", strings.TrimSpace(text), 1, false + } + + for i := 1; i < len(lines); i++ { + if strings.TrimSpace(lines[i]) == "---" { + // Find actual start line of body by skipping leading blank lines + startLineOffset := 0 + bodyLines := lines[i+1:] + for startLineOffset < len(bodyLines) && strings.TrimSpace(bodyLines[startLineOffset]) == "" { + startLineOffset++ + } + body := strings.Join(bodyLines[startLineOffset:], "\n") + body = strings.TrimRight(body, " \t\r\n") // Only trim trailing, leading is already handled + + // body starts at line i+2+startLineOffset (1-based index) + return strings.Join(lines[1:i], "\n"), body, i + 2 + startLineOffset, true + } + } + + return "", strings.TrimSpace(text), 1, false +} + +func validate(note Note) error { + if note.Date == "" { + return fmt.Errorf("缺少必填字段 date") + } + if _, err := ParseDate(note.Date); err != nil { + return fmt.Errorf("date 必须是有效的 YYYY-MM-DD 日期或带时区的 RFC3339 时间,当å‰�为 %q", note.Date) + } + if note.Lang != "zh_CN" && note.Lang != "en_US" { + return fmt.Errorf("lang 必须是 zh_CN 或 en_US,当å‰�为 %s", note.Lang) + } + if note.Section == "memos" && note.Updated != "" { + if _, err := ParseDate(note.Updated); err != nil { + return fmt.Errorf("updated 必须是有效的 YYYY-MM-DD 日期或带时区的 RFC3339 时间,当å‰�为 %q", note.Updated) + } + } + + return nil +} + +func cleanBody(text string) string { + reCodeBlock := regexp.MustCompile("(?s)```.*?```") + text = reCodeBlock.ReplaceAllString(text, "") + + reMathBlock := regexp.MustCompile(`(?s)\$\$.*?\$\$`) + text = reMathBlock.ReplaceAllString(text, "") + + reInlineCode := regexp.MustCompile("(?s)`.*?`") + text = reInlineCode.ReplaceAllString(text, "") + + reHTML := regexp.MustCompile(`(?s)<.*?>`) + text = reHTML.ReplaceAllString(text, "") + + return text +} + +func countWords(text string) int { + text = cleanBody(text) + + reLink := regexp.MustCompile(`!?\[(.*?)\]\(.*?\)`) + text = reLink.ReplaceAllString(text, "$1") + + reFormat := regexp.MustCompile(`[#*_=~>|-]+`) + text = reFormat.ReplaceAllString(text, " ") + + count := 0 + inWord := false + for _, r := range text { + if unicode.Is(unicode.Han, r) || unicode.Is(unicode.Hiragana, r) || unicode.Is(unicode.Katakana, r) || unicode.Is(unicode.Hangul, r) { + count++ + inWord = false + } else if unicode.IsLetter(r) || unicode.IsNumber(r) { + if !inWord { + count++ + inWord = true + } + } else { + inWord = false + } + } + return count +} diff --git a/internal/content/note_test.go b/internal/content/note_test.go new file mode 100644 index 00000000..ffe4b723 --- /dev/null +++ b/internal/content/note_test.go @@ -0,0 +1,178 @@ +package content + +import ( + "os" + "path/filepath" + "strings" + "testing" +) + +func TestParseNote(t *testing.T) { + text := `--- +title: "示例笔记" +date: "2026-06-08" +slug: "example-note" +tags: ["Go", "Blog"] +summary: "一段简短摘è¦�。" +draft: false +--- + +这里是笔记正文。` + + note, err := Parse("example.md", text, "example") + if err != nil { + t.Fatalf("Parse returned error: %v", err) + } + + if note.Title != "example" { + t.Fatalf("Title = %q, want filename-derived title %q", note.Title, "example") + } + if note.URL != "/notes/example/" { + t.Fatalf("URL = %q, want %q", note.URL, "/notes/example/") + } + if len(note.Tags) != 2 { + t.Fatalf("Tags length = %d, want 2", len(note.Tags)) + } +} + +func TestMemoMetadata(t *testing.T) { + for _, parse := range []func(string, string, string) (Note, error){Parse, ParseMemo} { + note, err := parse("entry.md", "---\ndate: 2026-10-02\npinned: true\nupdated: 2026-10-03T09:30:00+08:00\n---\nA small thought.", "entry") + if err != nil || !note.Pinned || note.Updated != "2026-10-03T09:30:00+08:00" { + t.Fatalf("metadata: %+v, %v", note, err) + } + if note.Section == "memos" { + if note.WordCount != 0 || note.ReadingMinutes != 0 { + t.Fatal("memos must not calculate reading statistics") + } + } else if note.WordCount == 0 || note.ReadingMinutes == 0 { + t.Fatal("notes must retain reading statistics") + } + } + for _, value := range []string{"", "2026-10-03", "2026-10-03T09:30:00+08:00"} { + if _, err := ParseMemo("entry.md", "---\ndate: 2026-10-02\nupdated: "+value+"\n---\nBody", "entry"); err != nil { + t.Fatal(err) + } + } + if _, err := ParseMemo("entry.md", "---\ndate: 2026-10-02\nupdated: yesterday\n---\nBody", "entry"); err == nil { + t.Fatal("invalid memo updated date accepted") + } +} + +func TestFilenameIsTheOnlyNoteTitle(t *testing.T) { + for _, parse := range []func(string, string, string) (Note, error){Parse, ParseMemo} { + note, err := parse("/vault/memos/旅行/雨å�Žçš„.è¡—é�“.md", "---\ndate: 2026-10-02\ntitle: {ignored: true}\n---\nä¸�用标题属性。", "旅行/雨å�Žçš„.è¡—é�“") + if err != nil { + t.Fatal(err) + } + if note.Title != "雨å�Žçš„.è¡—é�“" { + t.Fatalf("Title = %q", note.Title) + } + } +} + +func TestNoteDateValidation(t *testing.T) { + for _, date := range []string{"2026-10-02", "2026-10-02T23:55:42+08:00", "2026-10-02T15:55:42Z", "2026-10-02T15:55:42.123Z"} { + t.Run(date, func(t *testing.T) { + if _, err := Parse("date.md", "---\ndate: "+date+"\n---\nBody", "date"); err != nil { + t.Fatalf("valid date rejected: %v", err) + } + }) + } + for _, date := range []string{"", "yesterday", "2026-02-30", "2026-10-02T23:55:42", "2026-10-02 23:55"} { + t.Run("invalid-"+date, func(t *testing.T) { + if _, err := Parse("date.md", "---\ndate: \""+date+"\"\n---\nBody", "date"); err == nil || !strings.Contains(err.Error(), "date") { + t.Fatalf("invalid date %q accepted or wrong error: %v", date, err) + } + }) + } + if _, err := ParseMemo("draft.md", "---\ndate: invalid\nlang: invalid\ndraft: true\n---\nBody", "draft"); err != nil { + t.Fatalf("draft should skip publication validation: %v", err) + } +} + +func TestLoadMemosPreservesPathsLanguagesAndLocation(t *testing.T) { + dir := t.TempDir() + if err := os.MkdirAll(filepath.Join(dir, "旅行"), 0755); err != nil { + t.Fatal(err) + } + files := map[string]string{ + "旅行/河边.md": "---\ndate: 2026-10-02T23:55:00+08:00\nlocation: 上海\n---\n河边散步。", + "evening.md": "---\ndate: 2026-10-02T17:00:00Z\nlang: en_US\n---\nAn evening walk.", + "draft.md": "---\ndraft: true\n---\nNot published.", + "bad.md": "---\ndate: invalid\n---\nSkipped.", + } + for name, body := range files { + if err := os.WriteFile(filepath.Join(dir, name), []byte(body), 0644); err != nil { + t.Fatal(err) + } + } + groups, skipped, err := LoadMemos(dir) + if err != nil { + t.Fatal(err) + } + if len(groups) != 2 || len(skipped) != 1 || !strings.Contains(skipped[0], "bad.md") { + t.Fatalf("groups = %d, skipped = %v", len(groups), skipped) + } + first, _ := groups[0].SelectVersion("en_US") + if first.Title != "evening" || first.URL != "/en_US/memos/evening/" || first.CanonicalPath != first.URL { + t.Fatalf("newest memo = %+v", first) + } + second, _ := groups[1].SelectVersion("zh_CN") + if second.Title != "河边" || second.Slug != "旅行/河边" || second.URL != "/memos/旅行/河边/" || second.Section != "memos" || second.Location != "上海" { + t.Fatalf("nested memo = %+v", second) + } +} + +func TestMissingContentDirectoriesAreEmpty(t *testing.T) { + missing := filepath.Join(t.TempDir(), "missing") + for _, load := range []func(string) ([]*ArticleGroup, []string, error){LoadNotes, LoadMemos} { + groups, skipped, err := load(missing) + if err != nil || len(groups) != 0 || len(skipped) != 0 { + t.Fatalf("missing directory: groups = %v, skipped = %v, err = %v", groups, skipped, err) + } + } +} + +func TestCompareDatesUsesInstants(t *testing.T) { + if CompareDates("2026-10-02T23:55:00+08:00", "2026-10-02T17:00:00Z") >= 0 { + t.Fatal("date ordering ignored timezone offsets") + } + if CompareDates("2026-10-02T23:55:00+08:00", "2026-10-02T15:55:00Z") != 0 { + t.Fatal("equivalent publication instants differ") + } +} + +func TestParseNoteRequiresFrontmatter(t *testing.T) { + _, err := Parse("missing.md", "没有 frontmatter 的正文", "missing") + if err == nil { + t.Fatal("Parse returned nil error") + } +} + +func TestEnglishNoteKeepsCanonicalLanguagePath(t *testing.T) { + note, err := Parse("shared.md", "---\ntitle: English\ndate: 2026-01-01\nlang: en_US\n---\nEnglish content", "shared") + if err != nil { + t.Fatal(err) + } + if note.URL != "/en_US/notes/shared/" || note.CanonicalPath != note.URL { + t.Fatalf("English canonical paths = %q, %q", note.URL, note.CanonicalPath) + } +} + +func TestParseDraftNote(t *testing.T) { + text := `--- +draft: true +--- +这里是笔记正文。` + note, err := Parse("draft.md", text, "draft") + if err != nil { + t.Fatalf("Parse returned error: %v", err) + } + if !note.Draft { + t.Fatalf("Draft = %v, want true", note.Draft) + } + if note.WordCount != 0 { + t.Fatalf("WordCount = %d, want 0 for draft", note.WordCount) + } +} diff --git a/internal/content/page.go b/internal/content/page.go new file mode 100644 index 00000000..eb9ab46f --- /dev/null +++ b/internal/content/page.go @@ -0,0 +1,76 @@ +package content + +import ( + "fmt" + "math" + "os" + "strings" + + "gopkg.in/yaml.v3" +) + +type Page struct { + Title string + Date string + Updated string + Summary string + Draft bool + Body string + BodyStartLine int + SourcePath string + WordCount int + ReadingMinutes int +} + +type pageFrontmatter struct { + Title string `yaml:"title"` + Date string `yaml:"date"` + Updated string `yaml:"updated"` + Summary string `yaml:"summary"` + Draft bool `yaml:"draft"` +} + +func ParsePageFile(path string) (Page, error) { + data, err := os.ReadFile(path) + if err != nil { + return Page{}, fmt.Errorf("读å�–页é�¢æ–‡ä»¶: %w", err) + } + + return ParsePage(path, string(data)) +} + +func ParsePage(sourcePath, text string) (Page, error) { + yamlText, body, bodyStartLine, ok := splitFrontmatter(text) + if !ok { + return Page{}, fmt.Errorf("缺少 YAML frontmatter") + } + + var meta pageFrontmatter + if err := yaml.Unmarshal([]byte(yamlText), &meta); err != nil { + return Page{}, fmt.Errorf("è§£æž� YAML frontmatter: %w", err) + } + + page := Page{ + Title: strings.TrimSpace(meta.Title), + Date: strings.TrimSpace(meta.Date), + Updated: strings.TrimSpace(meta.Updated), + Summary: strings.TrimSpace(meta.Summary), + Draft: meta.Draft, + Body: body, + BodyStartLine: bodyStartLine, + SourcePath: sourcePath, + } + + if page.Draft { + return page, nil + } + + page.WordCount = countWords(page.Body) + page.ReadingMinutes = int(math.Max(1, math.Ceil(float64(page.WordCount)/300.0))) + + if page.Title == "" { + return Page{}, fmt.Errorf("缺少必填字段 title") + } + + return page, nil +} diff --git a/internal/content/page_test.go b/internal/content/page_test.go new file mode 100644 index 00000000..b5de573d --- /dev/null +++ b/internal/content/page_test.go @@ -0,0 +1,45 @@ +package content + +import "testing" + +func TestParsePageAllowsEmptySlug(t *testing.T) { + text := `--- +title: About / 关于 +summary: Welcome. +slug: +--- + +页é�¢æ­£æ–‡ã€‚` + + page, err := ParsePage("about.md", text) + if err != nil { + t.Fatalf("ParsePage returned error: %v", err) + } + + if page.Title != "About / 关于" { + t.Fatalf("Title = %q, want %q", page.Title, "About / 关于") + } + if page.Summary != "Welcome." { + t.Fatalf("Summary = %q, want %q", page.Summary, "Welcome.") + } + if page.Body != "页é�¢æ­£æ–‡ã€‚" { + t.Fatalf("Body = %q, want page body", page.Body) + } +} + +func TestParseDraftPage(t *testing.T) { + text := `--- +draft: true +--- +这里是页é�¢æ­£æ–‡ã€‚` + page, err := ParsePage("draft.md", text) + if err != nil { + t.Fatalf("ParsePage returned error: %v", err) + } + if !page.Draft { + t.Fatalf("Draft = %v, want true", page.Draft) + } + if page.WordCount != 0 { + t.Fatalf("WordCount = %d, want 0 for draft", page.WordCount) + } +} diff --git a/internal/content/tag_registry.go b/internal/content/tag_registry.go new file mode 100644 index 00000000..5ec3e0de --- /dev/null +++ b/internal/content/tag_registry.go @@ -0,0 +1,55 @@ +package content + +import ( + "strings" +) + +type TagRegistry struct { + displayNames map[string]string +} + +func NewTagRegistry(notes []Note) (*TagRegistry, error) { + reg := &TagRegistry{ + displayNames: make(map[string]string), + } + + for _, note := range notes { + for _, rawTag := range note.Tags { + rawTag = strings.TrimSpace(rawTag) + if rawTag == "" { + continue + } + + canonicalID := slugifyTag(rawTag) + if reg.displayNames[canonicalID] == "" { + reg.displayNames[canonicalID] = rawTag + } + } + } + + return reg, nil +} + +func slugifyTag(text string) string { + text = strings.ToLower(strings.TrimSpace(text)) + text = strings.ReplaceAll(text, " ", "-") + text = strings.ReplaceAll(text, "/", "-") + return text +} + +func (reg *TagRegistry) GetID(rawTag string) string { + return slugifyTag(rawTag) +} + +func (reg *TagRegistry) GetTitle(canonicalID string) string { + if name, ok := reg.displayNames[canonicalID]; ok && name != "" { + return name + } + return canonicalID +} + +func (reg *TagRegistry) Resolve(rawTag string) (string, string) { + id := reg.GetID(rawTag) + title := reg.GetTitle(id) + return id, title +} diff --git a/internal/embedded/embedded.go b/internal/embedded/embedded.go new file mode 100644 index 00000000..8d193174 --- /dev/null +++ b/internal/embedded/embedded.go @@ -0,0 +1,8 @@ +package embedded + +import ( + "embed" +) + +//go:embed templates static static/_headers og +var FS embed.FS diff --git a/internal/embedded/og/render.cjs b/internal/embedded/og/render.cjs new file mode 100644 index 00000000..215cc58f --- /dev/null +++ b/internal/embedded/og/render.cjs @@ -0,0 +1,166 @@ +// Local build-time renderer. This file is embedded into the standalone CLI. +const fs = require('node:fs/promises'); +const path = require('node:path'); +const { randomUUID } = require('node:crypto'); +const { pathToFileURL } = require('node:url'); + +const ORIGIN = 'https://daybook-og.invalid'; +const CARD_TIMEOUT = 30_000; +const CONTENT_TYPES = { + '.css': 'text/css', '.woff2': 'font/woff2', '.woff': 'font/woff', + '.ttf': 'font/ttf', '.otf': 'font/otf', '.png': 'image/png', + '.jpg': 'image/jpeg', '.jpeg': 'image/jpeg', '.gif': 'image/gif', + '.webp': 'image/webp', '.avif': 'image/avif', '.svg': 'image/svg+xml', +}; + +function within(root, filename) { + const relative = path.relative(root, filename); + return relative !== '' && !relative.startsWith(`..${path.sep}`) && relative !== '..' && !path.isAbsolute(relative); +} + +async function assetPath(root, pathname) { + const decoded = decodeURIComponent(pathname); + if (!decoded.startsWith('/') || decoded.includes('\0') || decoded.includes('\\') || decoded.split('/').includes('..')) { + throw new Error(`unsafe local asset path: ${pathname}`); + } + const filename = path.resolve(root, `.${decoded}`); + if (!within(root, filename)) throw new Error(`asset is outside public directory: ${pathname}`); + const resolved = await fs.realpath(filename); + if (!within(root, resolved)) throw new Error(`asset symlink is outside public directory: ${pathname}`); + return resolved; +} + +async function outputPath(root, card) { + if (!['notes', 'memos'].includes(card.section) || !new RegExp(`^/generated/og/${card.section}/[a-zA-Z0-9][a-zA-Z0-9_-]*\\.png$`).test(card.outputPath)) { + throw new Error(`unsafe output path: ${card.outputPath}`); + } + // Resolve each parent before creating the next so an existing symlink cannot + // redirect either directory creation or image writes outside public/. + let parent = root; + for (const component of ['generated', 'og', card.section]) { + parent = path.join(parent, component); + await fs.mkdir(parent, { recursive: true }); + parent = await fs.realpath(parent); + if (!within(root, parent)) throw new Error(`output symlink is outside public directory: ${card.outputPath}`); + } + return path.join(parent, path.basename(card.outputPath)); +} + +async function renderCard(browser, root, card, assets) { + const context = await browser.newContext({ + viewport: { width: 1200, height: 630 }, deviceScaleFactor: 1, + colorScheme: 'light', reducedMotion: 'reduce', locale: 'zh-CN', + timezoneId: 'UTC', javaScriptEnabled: false, serviceWorkers: 'block', + }); + const page = await context.newPage(); + page.setDefaultTimeout(CARD_TIMEOUT); + const failures = new Set(); + const documentURL = new URL(card.pageURL, ORIGIN).href; + await page.route('**/*', async (route, request) => { + try { + const url = new URL(request.url()); + if (request.isNavigationRequest() && request.url() === documentURL) { + await route.fulfill({ contentType: 'text/html; charset=utf-8', body: card.html }); + } else if (url.origin === ORIGIN) { + if (!assets.has(request.url())) { + assets.set(request.url(), (async () => { + const filename = await assetPath(root, url.pathname); + return { body: await fs.readFile(filename), contentType: CONTENT_TYPES[path.extname(filename).toLowerCase()] || 'application/octet-stream' }; + })()); + } + await route.fulfill(await assets.get(request.url())); + } else if (request.resourceType() === 'image' && ['http:', 'https:'].includes(url.protocol)) { + if (!assets.has(request.url())) { + assets.set(request.url(), (async () => { + const response = await route.fetch({ timeout: 15_000, maxRedirects: 5 }); + try { + if (!response.ok()) throw new Error(`HTTP ${response.status()}`); + return { body: await response.body(), contentType: response.headers()['content-type'] || 'application/octet-stream' }; + } finally { + await response.dispose(); + } + })()); + } + await route.fulfill(await assets.get(request.url())); + } else { + throw new Error(`unsupported external ${request.resourceType()} request`); + } + } catch (error) { + failures.add(`${request.url()}: ${error.message}`); + await route.abort().catch(() => {}); + } + }); + page.on('requestfailed', request => failures.add(`${request.url()}: ${request.failure()?.errorText || 'request failed'}`)); + let timer; + try { + const work = async () => { + await page.goto(documentURL, { waitUntil: 'load', timeout: CARD_TIMEOUT }); + await page.evaluate(async () => { + await document.fonts.ready; + const brokenFonts = [...document.fonts].filter(font => font.status === 'error'); + if (brokenFonts.length) throw new Error(`font failed to load: ${brokenFonts.map(font => font.family).join(', ')}`); + await Promise.all([...document.images].map(async image => { + try { await image.decode(); } + catch { throw new Error(`image failed to decode: ${image.currentSrc || image.src}`); } + if (!image.naturalWidth) throw new Error(`image has no pixels: ${image.currentSrc || image.src}`); + })); + }); + if (failures.size) throw new Error([...failures].join('\n')); + const filename = await outputPath(root, card); + const png = await page.screenshot({ type: 'png', fullPage: false, animations: 'disabled', caret: 'hide', timeout: CARD_TIMEOUT }); + const temporary = `${filename}.${randomUUID()}.tmp`; + try { + await fs.writeFile(temporary, png, { flag: 'wx', mode: 0o644 }); + await fs.rename(temporary, filename); + } finally { + await fs.rm(temporary, { force: true }); + } + }; + await Promise.race([ + work(), + new Promise((_, reject) => { timer = setTimeout(() => reject(new Error(`card exceeded ${CARD_TIMEOUT / 1000}s time limit`)), CARD_TIMEOUT); }), + ]); + } catch (error) { + throw new Error(`OG ${card.pageURL} (${card.outputPath}): ${error.message}${failures.size ? `\nAssets: ${[...failures].join('\n')}` : ''}`); + } finally { + clearTimeout(timer); + await context.close(); + } +} + +async function main() { + const manifest = JSON.parse(await fs.readFile(process.argv[2], 'utf8')); + const root = await fs.realpath(manifest.publicDir); + const loaded = await import(pathToFileURL(manifest.module).href); + const chromium = loaded.chromium || loaded.default?.chromium; + if (!chromium) throw new Error(`Playwright module has no Chromium renderer: ${manifest.module}`); + let browser; + try { + // Playwright's host-only preflight cannot see launch-specific library + // paths. The actual browser launch below still verifies they work. + if (manifest.libraryPath) process.env.PLAYWRIGHT_SKIP_VALIDATE_HOST_REQUIREMENTS = '1'; + // Scope downloaded libraries to Chromium; Node uses the host's libraries. + const env = { ...process.env }; + if (manifest.libraryPath) env.LD_LIBRARY_PATH = [manifest.libraryPath, process.env.LD_LIBRARY_PATH].filter(Boolean).join(':'); + if (manifest.fontConfig) env.FONTCONFIG_FILE = manifest.fontConfig; + browser = await chromium.launch({ headless: true, timeout: 30_000, env }); + } catch (error) { + throw new Error(`Cannot launch OG Chromium. Run \`daybook setup-og\`; on Linux with missing OS libraries, use \`daybook setup-og --with-deps\` (root/sudo) or \`daybook setup-og --user-deps\` (Debian/Ubuntu without root). ${error.message}`); + } + try { + const assets = new Map(); + process.stdout.write(`${JSON.stringify({ event: 'ready' })}\n`); + for (const [index, card] of manifest.cards.entries()) { + process.stdout.write(`${JSON.stringify({ event: 'start', index })}\n`); + await renderCard(browser, root, card, assets); + process.stdout.write(`${JSON.stringify({ event: 'done', index })}\n`); + } + } finally { + await browser.close(); + } +} + +module.exports = { assetPath, outputPath }; +if (require.main === module) { + main().catch(error => { process.stderr.write(`${error.message}\n`); process.exitCode = 1; }); +} diff --git a/internal/embedded/static/_headers b/internal/embedded/static/_headers new file mode 100644 index 00000000..7bc39c32 --- /dev/null +++ b/internal/embedded/static/_headers @@ -0,0 +1,32 @@ +/immutable/* + Cache-Control: public, max-age=31536000, immutable + +/immutable/css/components/giscus-* + Access-Control-Allow-Origin: * + +/immutable/vendor/fonts/* + Access-Control-Allow-Origin: * + +/ + Cache-Control: public, max-age=0, must-revalidate + +/*/ + Cache-Control: public, max-age=0, must-revalidate + +/*.html + Cache-Control: public, max-age=0, must-revalidate + +/vendor/* + Cache-Control: public, max-age=0, must-revalidate + +/images/* + Cache-Control: public, max-age=0, must-revalidate + +/assets-manifest.json + Cache-Control: public, max-age=0, must-revalidate + +/github-profile.json + Cache-Control: public, max-age=0, must-revalidate + +/* + X-Content-Type-Options: nosniff diff --git a/internal/embedded/static/css/base.css b/internal/embedded/static/css/base.css new file mode 100644 index 00000000..e730e55f --- /dev/null +++ b/internal/embedded/static/css/base.css @@ -0,0 +1,75 @@ +*, +*::before, +*::after { + box-sizing: border-box; +} + +::selection { + background: var(--color-accent); + color: var(--color-page); +} + +body { + margin: 0; + color: var(--color-text); + background: var(--color-page); + display: flex; + flex-direction: column; + font-family: var(--font-ui); + line-height: 1.7; + min-height: 100vh; +} + +.page-frame { + display: contents; +} + +h1, h2, h3, h4, h5, h6 { + font-family: var(--font-serif); +} + +button, input, select, textarea { + font-family: var(--font-ui); +} + +pre, code, kbd, samp { + font-family: var(--font-mono); +} + +html { + background: var(--color-page); + scroll-behavior: smooth; + scrollbar-width: thin; + scrollbar-color: color-mix(in srgb, var(--color-text) 25%, transparent) transparent; +} + +@media (hover: hover) and (pointer: fine) { + html { + scrollbar-gutter: stable; + } +} + +a { + color: var(--color-text); +} + +.material-symbol { + direction: ltr; + display: inline-block; + width: 1em; + height: 1em; + flex-shrink: 0; + overflow: hidden; + font-family: var(--font-icon); + font-feature-settings: "liga"; + font-size: 1.15rem; + font-style: normal; + font-weight: normal; + font-variation-settings: "FILL" 0, "wght" 400, "GRAD" 0, "opsz" 24; + letter-spacing: 0; + line-height: 1; + text-transform: none; + transition: font-variation-settings 180ms ease; + white-space: nowrap; + word-wrap: normal; +} diff --git a/internal/embedded/static/css/bundles/common.css b/internal/embedded/static/css/bundles/common.css new file mode 100644 index 00000000..163ee913 --- /dev/null +++ b/internal/embedded/static/css/bundles/common.css @@ -0,0 +1 @@ +:root{--font-logo: "Daybook Fraunces", serif;--font-body: "LXGW WenKai Screen", "PingFang SC", "Microsoft YaHei", serif;--font-ui: var(--font-body);--font-serif: "Noto Serif SC Variable", "Songti SC", "STSong", serif;--font-mono: "Maple Mono CN", "Maple Mono", "SFMono-Regular", "Cascadia Code", "JetBrains Mono", ui-monospace, monospace;--font-icon: "Material Symbols Rounded";--font-meta: var(--font-body);--font-cormorant: "Cormorant Garamond", "LXGW WenKai Screen", "Times New Roman", serif;--side-rail-width: 220px;--persistent-logo-left: 40px;--persistent-logo-top: 23px;--side-rail-top: calc(var(--persistent-logo-top) + 4.5rem);--hero-avatar-size: clamp(190px, 22vw, 260px);--hero-avatar-size-mobile: clamp(148px, 44vw, 178px);--home-hero-top: clamp(8rem, 20vh, 13rem);--ease-out: cubic-bezier(.22, 1, .36, 1);--ease-page: cubic-bezier(.165, .84, .44, 1);--ease-golden: cubic-bezier(.146, .854, .382, 1);--article-enter-ease: cubic-bezier(.165, .84, .44, 1);--motion-expressive-fast-spatial-duration: .35s;--motion-expressive-fast-spatial-easing: cubic-bezier(.42, 1.67, .21, .9);--motion-expressive-effects-duration: .2s;--motion-expressive-effects-easing: cubic-bezier(.34, .8, .34, 1);--duration-fast: .24s;--duration-normal: .42s;--duration-shared: .72s;--duration-article-enter: .5s;--post-enter-duration: .5s;--post-enter-y: 3rem;--post-stagger-step: 45ms;--transition-exit-delay: .32s;--transition-cleanup-delay: 1.12s;--notes-content-width: 44rem;--notes-aside-width: 300px;--notes-page-gap: clamp(72px, 9vw, 132px);--note-body-width: 44rem;--note-toc-width: clamp(11rem, 14vw, 13rem);--note-toc-top: clamp(2.25rem, 5vh, 4rem);--note-toc-hide-y: 1.75rem;--toc-collapse-duration: .28s;--reading-toc-rail-eligible: 0;--reading-toc-rail-direction: -1;--reading-toc-rail-controls-reserve: 9rem;--reading-toc-rail-height: min(70vh, calc(100dvh - var(--note-toc-top) - var(--reading-toc-rail-controls-reserve)));--reading-toc-rail-line-width: 1.2px;--reading-toc-rail-accent-line-width: 1.6px;--reading-toc-rail-line-inset: 188px;--reading-toc-rail-dot-size: 4px;--reading-toc-rail-dot-hit-size: 24px;--reading-toc-rail-idle-amplitude: 10.4px;--reading-toc-rail-max-extra-amplitude: 14px;--reading-toc-rail-bulge-half-height: 56px;--reading-toc-rail-label-gap: 12px;--reading-toc-rail-label-edge-inset: 26px;--reading-toc-rail-title-max-width: 9.5rem;--reading-toc-activation-line: 96px;--reading-toc-bottom-inset: 96px;--reading-toc-rail-state-duration: .36s;--reading-toc-rail-label-duration: .18s;--reading-toc-rail-state-ease: var(--ease-out);--reading-toc-rail-label-ease: var(--ease-out);--reading-toc-rail-label-shift: 6px;--reading-toc-rail-collapse-shift: 10px;--note-title-size: clamp(1.55rem, 2vw, 1.625rem);--note-text-size: 15px;--color-page: oklch(96% .005 298);--color-text: oklch(25% .005 298);--color-muted: oklch(40% .005 298);--color-line: oklch(25% .005 298 / .16);--color-accent: #6750a4;--color-marker: #cfb7f9;--color-hover-text: var(--color-accent);--graph-node-attachment: #c7b34b;--color-paper: oklch(98% .004 298);--color-faint: oklch(40% .005 298 / .36);--color-accent-soft: rgba(103, 80, 164, .1);--color-accent-soft-strong: rgba(103, 80, 164, .18);--color-tooltip-bg: oklch(25% .005 298);--color-tooltip-text: oklch(96% .005 298);--color-code-bg: oklch(40% .005 298 / .05);--color-code-border: oklch(40% .005 298 / .15);--color-code-inline-bg: oklch(40% .005 298 / .05);--color-golden-rect: oklch(25% .005 298 / .16);--color-golden-diagonal: oklch(25% .005 298 / .12);--color-golden-curve: oklch(25% .005 298 / .28);--shadow-code: inset 0 1px 0 oklch(100% 0 0 / .52);--syntax-text: #24292f;--syntax-comment: #6e7781;--syntax-keyword: #cf222e;--syntax-string: #0a3069;--syntax-number: #0550ae;--syntax-function: #8250df;--syntax-tag: #116329;--syntax-attr: #0550ae;--syntax-operator: #24292f;--syntax-error: #82071e;--syntax-inserted: #116329;--syntax-deleted: #82071e;--image-icon-filter: none;--shadow-avatar: 0 18px 48px oklch(25% .005 298 / .12), 0 4px 16px oklch(25% .005 298 / .07);--shadow-avatar-small: 0 10px 28px oklch(25% .005 298 / .1), 0 3px 10px oklch(25% .005 298 / .07);color-scheme:light}:root:lang(en){--font-body: "Cormorant Garamond", "LXGW WenKai Screen", "Times New Roman", serif}:root[data-theme=dark]{--color-page: oklch(22% .005 298);--color-text: oklch(92% .005 298);--color-muted: oklch(77% .005 298);--color-line: oklch(92% .005 298 / .14);--color-accent: #d0bcff;--color-marker: #8063a6;--color-hover-text: var(--color-accent);--graph-node-attachment: #d6c776;--color-paper: oklch(25% .005 298);--color-faint: oklch(77% .005 298 / .34);--color-accent-soft: rgba(208, 188, 255, .12);--color-accent-soft-strong: rgba(208, 188, 255, .22);--color-tooltip-bg: oklch(92% .005 298);--color-tooltip-text: oklch(22% .005 298);--color-code-bg: oklch(77% .005 298 / .05);--color-code-border: oklch(77% .005 298 / .15);--color-code-inline-bg: oklch(77% .005 298 / .05);--color-golden-rect: oklch(.93 .195089 103.2532 / .18);--color-golden-diagonal: oklch(92% .005 298 / .12);--color-golden-curve: oklch(92% .005 298 / .28);--shadow-code: inset 0 1px 0 oklch(100% 0 0 / .035);--syntax-text: #c9d1d9;--syntax-comment: #8b949e;--syntax-keyword: #ff7b72;--syntax-string: #a5d6ff;--syntax-number: #79c0ff;--syntax-function: #d2a8ff;--syntax-tag: #7ee787;--syntax-attr: #79c0ff;--syntax-operator: #c9d1d9;--syntax-error: #ffdcd7;--syntax-inserted: #aff5b4;--syntax-deleted: #ffdcd7;--image-icon-filter: invert(96%) sepia(6%) saturate(80%) hue-rotate(210deg) brightness(96%) contrast(92%);--shadow-avatar: 0 18px 48px oklch(0% 0 0 / .32), 0 4px 16px oklch(0% 0 0 / .22);--shadow-avatar-small: 0 10px 28px oklch(0% 0 0 / .28), 0 3px 10px oklch(0% 0 0 / .18);color-scheme:dark}:root[data-palette=warm]{--color-page: #f6f1e6;--color-text: #25201b;--color-muted: #4a4239;--color-line: #d9cfb9;--color-accent: #8a4423;--color-marker: #f1b880;--color-hover-text: var(--color-accent);--graph-node-attachment: #d4b856;--color-paper: #fbf6ec;--color-faint: #b8ad9b;--color-accent-soft: rgba(138, 68, 35, .1);--color-accent-soft-strong: rgba(138, 68, 35, .18);--color-tooltip-bg: #25201b;--color-tooltip-text: #fbf6ec;--color-code-bg: #f0e9d6;--color-code-border: #d9cfb9;--color-code-inline-bg: #ebe3cd;--color-golden-rect: rgba(138, 68, 35, .18);--color-golden-diagonal: rgba(138, 68, 35, .11);--color-golden-curve: rgba(37, 32, 27, .32);--shadow-code: inset 0 1px 0 rgba(255, 255, 255, .48);--syntax-text: #25201b;--syntax-comment: #7d7165;--syntax-keyword: #a54a3e;--syntax-string: #7d6028;--syntax-number: #aa5c2b;--syntax-function: #7b5982;--syntax-tag: #557243;--syntax-attr: #3a7575;--syntax-operator: #5f554c;--syntax-error: #9b392f;--syntax-inserted: #4f6c3f;--syntax-deleted: #9b392f;--image-icon-filter: none;--shadow-avatar: 0 18px 48px rgba(38, 35, 31, .14), 0 4px 16px rgba(38, 35, 31, .08);--shadow-avatar-small: 0 10px 28px rgba(38, 35, 31, .12), 0 3px 10px rgba(38, 35, 31, .08);color-scheme:light}:root[data-palette=warm][data-theme=dark]{--color-page: #131110;--color-text: #f4f0e3;--color-muted: #c8c1ae;--color-line: #2a2622;--color-accent: #c89761;--color-marker: #89582e;--color-hover-text: var(--color-accent);--graph-node-attachment: #d6c776;--color-paper: #1a1715;--color-faint: #4f4a42;--color-accent-soft: rgba(200, 151, 97, .12);--color-accent-soft-strong: rgba(200, 151, 97, .22);--color-tooltip-bg: #f4f0e3;--color-tooltip-text: #131110;--color-code-bg: #1a1715;--color-code-border: #2a2622;--color-code-inline-bg: #201c19;--color-golden-rect: rgba(200, 151, 97, .22);--color-golden-diagonal: rgba(200, 151, 97, .14);--color-golden-curve: rgba(244, 240, 227, .3);--shadow-code: inset 0 1px 0 rgba(255, 255, 255, .035);--syntax-text: #f4f0e3;--syntax-comment: #9d9484;--syntax-keyword: #d47b71;--syntax-string: #dcb378;--syntax-number: #df9862;--syntax-function: #bba1c9;--syntax-tag: #96af87;--syntax-attr: #81a3a3;--syntax-operator: #c8c1ae;--syntax-error: #ee8f7a;--syntax-inserted: #9bb978;--syntax-deleted: #ee8f7a;--image-icon-filter: invert(94%) sepia(8%) saturate(530%) hue-rotate(333deg) brightness(96%) contrast(88%);--shadow-avatar: 0 18px 48px rgba(0, 0, 0, .32), 0 4px 16px rgba(0, 0, 0, .22);--shadow-avatar-small: 0 10px 28px rgba(0, 0, 0, .28), 0 3px 10px rgba(0, 0, 0, .18);color-scheme:dark}@font-face{font-family:Material Symbols Rounded;src:url(/vendor/fonts/material-symbols/material-symbols-rounded.woff2) format("woff2");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Cormorant Garamond;size-adjust:127%;src:url(/vendor/fonts/cormorant-garamond/cormorant-garamond-latin-400-normal.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Cormorant Garamond;size-adjust:127%;src:url(/vendor/fonts/cormorant-garamond/cormorant-garamond-latin-500-normal.woff2) format("woff2");font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:Cormorant Garamond;size-adjust:127%;src:url(/vendor/fonts/cormorant-garamond/cormorant-garamond-latin-600-normal.woff2) format("woff2");font-weight:600;font-style:normal;font-display:swap}@font-face{font-family:Cormorant Garamond;size-adjust:127%;src:url(/vendor/fonts/cormorant-garamond/cormorant-garamond-latin-700-normal.woff2) format("woff2");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:Cormorant Garamond;size-adjust:127%;src:url(/vendor/fonts/cormorant-garamond/cormorant-garamond-latin-400-italic.woff2) format("woff2");font-weight:400;font-style:italic;font-display:swap}@font-face{font-family:Cormorant Garamond;size-adjust:127%;src:url(/vendor/fonts/cormorant-garamond/cormorant-garamond-latin-500-italic.woff2) format("woff2");font-weight:500;font-style:italic;font-display:swap}@font-face{font-family:Cormorant Garamond;size-adjust:127%;src:url(/vendor/fonts/cormorant-garamond/cormorant-garamond-latin-600-italic.woff2) format("woff2");font-weight:600;font-style:italic;font-display:swap}@font-face{font-family:Cormorant Garamond;size-adjust:127%;src:url(/vendor/fonts/cormorant-garamond/cormorant-garamond-latin-700-italic.woff2) format("woff2");font-weight:700;font-style:italic;font-display:swap}@font-face{font-family:Cormorant Garamond Meta;src:url(/vendor/fonts/cormorant-garamond/cormorant-garamond-latin-600-italic.woff2) format("woff2");font-weight:600;font-style:italic;font-display:swap}*,*:before,*:after{box-sizing:border-box}::selection{background:var(--color-accent);color:var(--color-page)}body{margin:0;color:var(--color-text);background:var(--color-page);display:flex;flex-direction:column;font-family:var(--font-ui);line-height:1.7;min-height:100vh}.page-frame{display:contents}h1,h2,h3,h4,h5,h6{font-family:var(--font-serif)}button,input,select,textarea{font-family:var(--font-ui)}pre,code,kbd,samp{font-family:var(--font-mono)}html{background:var(--color-page);scroll-behavior:smooth;scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--color-text) 25%,transparent) transparent}@media(hover:hover)and (pointer:fine){html{scrollbar-gutter:stable}}a{color:var(--color-text)}.material-symbol{direction:ltr;display:inline-block;width:1em;height:1em;flex-shrink:0;overflow:hidden;font-family:var(--font-icon);font-feature-settings:"liga";font-size:1.15rem;font-style:normal;font-weight:400;font-variation-settings:"FILL" 0,"wght" 400,"GRAD" 0,"opsz" 24;letter-spacing:0;line-height:1;text-transform:none;transition:font-variation-settings .18s ease;white-space:nowrap;word-wrap:normal}.site-logo{align-items:baseline;color:var(--color-text);display:inline-flex;font-family:var(--font-logo);font-size:1.32rem;font-style:italic;font-weight:580;font-variation-settings:"opsz" 72;gap:.28em;letter-spacing:0;text-decoration:none;transition:color .18s ease;width:max-content}.persistent-logo{animation:none!important;left:var(--persistent-logo-left);opacity:1!important;position:fixed;top:var(--persistent-logo-top);transform:none!important;z-index:1000}.site-header{align-items:center;display:grid;gap:24px;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);min-height:72px;padding:0 40px}.site-header .site-nav{grid-column:2}.site-main{flex:1 0 auto;margin:0 auto;max-width:960px;padding:56px 24px 72px;width:100%}.page-shell{display:grid;flex:1 0 auto;grid-template-columns:var(--side-rail-width) minmax(0,1fr);min-height:100vh;width:100%}.side-rail{align-self:start;display:flex;flex-direction:column;left:var(--persistent-logo-left);padding:0;position:fixed;top:var(--side-rail-top);width:calc(var(--side-rail-width) - var(--persistent-logo-left));z-index:900}.side-avatar-link{display:block;margin-bottom:34px;width:max-content}.side-avatar-wrap{aspect-ratio:1;border-radius:50%;height:76px;width:76px;background-color:var(--color-surface-variant);box-shadow:var(--shadow-avatar-small);overflow:hidden;view-transition-name:site-avatar}.side-avatar{border-radius:inherit;display:block;height:100%;object-fit:cover;width:100%}.side-nav{align-items:flex-start;display:flex;flex-direction:column;gap:16px}.page-main{grid-column:1 / -1;margin:0;max-width:none;min-width:0;padding:clamp(56px,7vw,88px) clamp(32px,6vw,84px)}@media(max-width:960px){.page-shell{display:block}.side-rail{display:none}.page-main{padding:34px 20px 56px}:root{--mobile-topbar-height: 64px}.persistent-logo-container{position:sticky;top:0;z-index:2010;transition:transform .3s cubic-bezier(.4,0,.2,1)}.persistent-logo-main{align-items:center;background:var(--color-page);border-bottom:1px solid var(--color-line);display:flex;height:var(--mobile-topbar-height);justify-content:space-between;padding:0 20px;position:relative;width:100%;z-index:2}body.mobile-top-bar-hidden .persistent-logo-container{pointer-events:none;transform:translateY(-100%);transition:transform .3s cubic-bezier(.4,0,.2,1) .3s}.persistent-logo{position:static!important}}@media(max-width:640px){.site-header{align-items:flex-start;display:flex;flex-direction:column;min-height:auto;padding:1.5rem 20px 20px}.site-nav{justify-content:flex-start}.site-main{padding:36px 20px 56px}}.site-tools{position:fixed;top:20px;right:32px;width:232px;z-index:950}body[data-reader-mode=immersive] .site-tools{display:none}.site-tools .notes-footer-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px;margin:0}.site-tools .notes-tools{margin:0;position:absolute;top:48px;right:0;width:min(360px,calc(100vw - 64px))}.site-tools .notes-search-panel{background:var(--color-page)}.site-tools .notes-search-input{width:100%}.site-tools .notes-tools.is-search-open .notes-search-panel{max-height:min(65vh,560px);overflow-y:auto}.desktop-search-results{margin-top:16px}.desktop-search-results .notes-item{padding-bottom:16px}.desktop-search-results .notes-item-title{font-size:1rem}.desktop-search-results .notes-item-summary{font-size:.85rem;margin-top:6px}.desktop-search-results .notes-item-meta,.desktop-search-results .notes-item-indicators{display:none}.home-footer{padding:32px 24px;text-align:center;color:var(--color-muted);font-family:var(--font-ui);font-size:.82rem}.home-footer p{margin:0}@media(min-width:961px){.about-body .page-main{grid-column:2}.site-header{padding-right:280px;padding-left:280px}}@media(max-width:1199px)and (min-width:961px){.site-header .site-nav{gap:16px}}@media(max-width:960px){.site-tools{display:none}}.site-nav{align-items:center;display:flex;flex-wrap:wrap;gap:10px 24px;justify-content:center;justify-self:center}.nav-link{font-family:var(--font-serif);isolation:isolate;align-items:center;color:var(--color-muted);display:inline-flex;font-size:.92rem;gap:.38rem;line-height:1;padding:.25rem 0;position:relative;text-decoration:none;transition:color .18s ease}:is(.github-repository-heading a,.github-followers a,.notes-footer-links a,.pagination-btn:not(.is-disabled),.note-rc-btn){isolation:isolate;position:relative}.nav-link:after,:is(.github-repository-heading a,.github-followers a,.notes-footer-links a,.pagination-btn:not(.is-disabled),.note-rc-btn):before{background:var(--color-marker);bottom:.06em;content:"";height:.65em;left:0;pointer-events:none;position:absolute;clip-path:inset(0 100% 0 0);transition:clip-path .35s cubic-bezier(.4,0,.6,1);width:100%;z-index:-1}.nav-link:hover,.nav-link:focus-visible,.github-home a:hover,.github-home a:focus-visible,:is(.github-followers a,.notes-footer-links a,.pagination-btn:not(.is-disabled),.note-rc-btn):hover,:is(.github-followers a,.notes-footer-links a,.pagination-btn:not(.is-disabled),.note-rc-btn):focus-visible,.site-logo:hover,.site-logo:focus-visible{color:var(--color-hover-text)}.nav-link:hover:after,.nav-link:focus-visible:after,:is(.github-repository-heading a,.github-followers a,.notes-footer-links a,.pagination-btn:not(.is-disabled),.note-rc-btn):hover:before,:is(.github-repository-heading a,.github-followers a,.notes-footer-links a,.pagination-btn:not(.is-disabled),.note-rc-btn):focus-visible:before{clip-path:inset(0);transition:clip-path .4s cubic-bezier(.22,1,.36,1)}@media(prefers-reduced-motion:reduce){.nav-link:after,:is(.github-repository-heading a,.github-followers a,.notes-footer-links a,.pagination-btn:not(.is-disabled),.note-rc-btn):before{transition:none}}html[data-reduced-motion=true] .nav-link:after,html[data-reduced-motion=true] :is(.github-repository-heading a,.github-followers a,.notes-footer-links a,.pagination-btn:not(.is-disabled),.note-rc-btn):before{transition:none}.nav-link:hover .nav-icon,.nav-link:focus-visible .nav-icon,.github-home a:hover .material-symbol,.github-home a:focus-visible .material-symbol,:is(.pagination-btn:not(.is-disabled),.note-rc-btn):hover .material-symbol,:is(.pagination-btn:not(.is-disabled),.note-rc-btn):focus-visible .material-symbol{color:inherit;font-variation-settings:"FILL" 1,"wght" 400,"GRAD" 0,"opsz" 24}.nav-link:focus-visible,.site-logo:focus-visible{outline:1px solid currentColor;outline-offset:6px}.header-theme-toggle{height:28px;margin-left:2px;width:28px}.header-theme-toggle .material-symbol{font-size:1.15rem}.notes-action-button{align-items:center;background:transparent;border:0;border-radius:50%;color:var(--color-muted);cursor:pointer;display:inline-flex;height:32px;justify-content:center;padding:0;position:relative;text-decoration:none;transition:color .16s ease,transform .16s ease;width:32px}.notes-action-button .material-symbol{font-size:1.28rem}[data-tooltip]{position:relative}[data-tooltip]:after{content:attr(data-tooltip)}[data-tooltip]:after,.floating-tooltip{background:var(--color-tooltip-bg);border-radius:8px;top:calc(100% + 9px);color:var(--color-tooltip-text);font-family:var(--font-ui);font-size:.72rem;font-style:normal;left:50%;line-height:1;opacity:0;padding:5px 10px;pointer-events:none;position:absolute;transform:translate(-50%);clip-path:inset(100% 50% 0 50% round 8px);transition:opacity var(--motion-expressive-effects-duration) var(--motion-expressive-effects-easing),clip-path var(--motion-expressive-effects-duration) var(--motion-expressive-effects-easing);white-space:nowrap;z-index:100}[data-tooltip]:hover:after,[data-tooltip]:focus-visible:after,.floating-tooltip.is-visible{opacity:1;clip-path:inset(0 0 0 0 round 8px)}@media(prefers-reduced-motion:reduce){[data-tooltip]:after,.floating-tooltip{clip-path:none!important;transition:opacity .16s ease!important}}html[data-reduced-motion=true] [data-tooltip]:after,html[data-reduced-motion=true] .floating-tooltip{clip-path:none!important;transition:opacity .16s ease!important}.floating-tooltip{position:fixed;top:0;left:0;transform:none;max-width:calc(100vw - 16px);white-space:normal;overflow-wrap:anywhere;line-height:1.35;z-index:2100}.notes-action-button:hover,.notes-action-button:focus-visible{color:var(--color-hover-text);transform:translateY(-2px)}.notes-action-button[aria-expanded=true],.notes-action-button[aria-pressed=true]{color:var(--color-accent)}.notes-action-button .material-symbol{font-variation-settings:"FILL" 0,"wght" 400,"GRAD" 0,"opsz" 24}.notes-action-button:hover .material-symbol,.notes-action-button:focus-visible .material-symbol{font-variation-settings:"FILL" 1,"wght" 400,"GRAD" 0,"opsz" 24}.notes-action-button[aria-expanded=true] .material-symbol,.notes-action-button[aria-pressed=true] .material-symbol{color:var(--color-accent)}.notes-action-button:focus-visible{outline:1px solid var(--color-accent);outline-offset:4px}.notes-action-button.header-theme-toggle{height:28px;width:28px}.notes-action-button.header-theme-toggle:after{content:none;display:none}.notes-action-button.header-theme-toggle:hover,.notes-action-button.header-theme-toggle:focus-visible{transform:none}.notes-tools{--notes-tool-shift-ease: cubic-bezier(.2, .78, .24, 1);display:grid;gap:.65rem;margin:0;min-width:0;opacity:0;transition:margin .3s var(--ease-out),opacity .18s ease}.notes-tools.has-open-panel{margin:0 0 clamp(1rem,2.2vw,1.35rem);opacity:1}.notes-tool-panel{max-height:0;min-height:0;opacity:0;overflow:hidden;pointer-events:none;transform:translateY(6px);transition:max-height .36s var(--notes-tool-shift-ease),opacity .18s ease,transform .32s var(--ease-out),visibility 0ms linear .36s;visibility:hidden}.notes-tools.is-search-open .notes-search-panel{max-height:4.25rem;opacity:1;pointer-events:auto;transform:translateY(0);transition:max-height .36s var(--notes-tool-shift-ease),opacity .22s ease,transform .32s var(--ease-out),visibility 0ms linear 0ms;visibility:visible}.notes-tools.is-tags-open .notes-tags-panel{max-height:clamp(15rem,50vh,25rem);opacity:1;pointer-events:auto;transform:translateY(0);transition:max-height .36s var(--notes-tool-shift-ease),opacity .22s ease,transform .36s var(--notes-tool-shift-ease),visibility 0ms linear 0ms;visibility:visible}.notes-tags-panel{position:relative;overflow:hidden}.notes-tags-scroll-viewport{height:100%;max-height:inherit;overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;scrollbar-width:none;padding-right:.25rem}.notes-tags-scroll-viewport::-webkit-scrollbar{display:none}.notes-tags-scrollbar{position:absolute;right:0;top:0;bottom:0;width:6px;pointer-events:none;opacity:0;transition:opacity .22s ease;visibility:hidden}.notes-tags-scrollbar.is-visible{opacity:1;visibility:visible}.notes-tags-scrollbar-thumb{position:absolute;right:0;top:0;width:100%;background:color-mix(in srgb,var(--color-muted) 35%,transparent);border-radius:999px;will-change:transform,height}.notes-search-input{background:color-mix(in srgb,var(--color-paper) 72%,transparent);border:1px solid var(--color-line);border-radius:6px;color:var(--color-text);font:.84rem/1.4 var(--font-ui);max-width:100%;opacity:0;padding:.62rem .72rem;transform:translate(12px,-4px);transition:border-color .16s ease,color .16s ease,opacity .22s ease,transform .3s var(--ease-out);width:min(100%,18rem)}.notes-search-input::placeholder{color:var(--color-muted);opacity:.74}.notes-search-input:focus{border-color:var(--color-accent);outline:0}.notes-tools.is-search-open .notes-search-input{opacity:1;transform:translate(0)}.notes-tag-list{display:flex;flex-wrap:wrap;gap:.8rem;max-width:100%}.notes-tag-link{border:1px solid color-mix(in srgb,var(--color-muted) 25%,transparent);border-radius:999px;color:var(--color-muted);display:inline-grid;font-family:var(--font-ui);font-size:.85rem;line-height:1.35;max-width:100%;opacity:0;padding:.35rem .9rem;position:relative;text-decoration:none;transform:translateY(7px);transition-property:border-color,color,opacity,transform;transition-duration:.16s,.16s,.18s,.32s;transition-timing-function:ease,ease,ease,var(--ease-out);transition-delay:0ms}.notes-tag-link span{grid-area:1 / 1;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.notes-tools.is-tags-open .notes-tag-link,body.is-tags-overlay-open .mobile-tags-overlay .notes-tag-link{opacity:1;transform:translateY(0);transition-delay:0ms,0ms,calc(var(--tag-index, 0) * 42ms),calc(var(--tag-index, 0) * 42ms)}.notes-tag-link:hover,.notes-tag-link:focus-visible,.notes-tag-link.is-active{border-color:color-mix(in srgb,var(--color-muted) 80%,transparent);color:var(--color-hover-text)}.notes-tag-link:focus-visible{outline:1px solid var(--color-accent);outline-offset:4px}.notes-tool-empty{color:var(--color-muted);font-family:var(--font-ui);font-size:.82rem;margin:0}@media(prefers-reduced-motion:reduce){.notes-tools,.notes-tool-panel,.notes-search-input,.notes-tag-link{transition-delay:0ms!important}.notes-tool-panel,.notes-search-input,.notes-tag-link{transform:none!important}}.notes-footer-links{display:grid;gap:2px}.footer-link-row{align-items:center;display:flex;flex-wrap:wrap;gap:.35rem}.search-highlight{background-color:var(--color-accent);border-radius:2px;color:var(--color-page)}.notes-footer-links a{color:var(--color-muted);text-decoration:none;transition:color .18s ease}.notes-footer-links a:hover,.notes-footer-links a:focus-visible{color:var(--color-hover-text)}.footer-separator{color:var(--color-muted);text-decoration:none;user-select:none}.note-toc-header{align-items:center;display:inline-flex;gap:.5rem;margin-bottom:.65rem}.note-toc-toggle{align-items:center;background:transparent;border:0;border-radius:50%;color:var(--color-muted);cursor:pointer;display:inline-flex;height:2rem;justify-content:center;padding:0;transition:color .16s ease,transform .16s ease;width:2rem}.note-toc-toggle .material-symbol{font-size:1.25rem;transition:transform .35s cubic-bezier(.42,1.67,.21,.9)}.note-toc:not(.is-open) .note-toc-toggle .material-symbol{transform:rotate(-180deg)}.note-toc-title{font-family:var(--font-serif);color:var(--color-muted);font-size:.78rem;line-height:1}.note-toc-toggle:hover,.note-toc-toggle:focus-visible{color:var(--color-hover-text)}.note-toc-toggle:hover .material-symbol,.note-toc-toggle:focus-visible .material-symbol{font-variation-settings:"FILL" 1,"wght" 400,"GRAD" 0,"opsz" 24}.note-toc-toggle:focus-visible{outline:1px solid var(--color-accent);outline-offset:4px}.note-toc-panel{display:grid;grid-template-rows:1fr;max-height:calc(100vh - 176px);opacity:1;overflow:hidden;position:relative;transition:grid-template-rows var(--toc-collapse-duration) var(--ease-out),opacity var(--toc-collapse-duration) ease,transform var(--toc-collapse-duration) var(--ease-out),visibility var(--toc-collapse-duration) ease;visibility:visible}.note-toc:not(.is-open) .note-toc-panel{grid-template-rows:0fr;opacity:0;pointer-events:none;transform:translateY(-.45rem);visibility:hidden}.note-toc-panel ol{display:grid;gap:.55rem;list-style:none;margin:0;min-height:0;overflow:auto;padding:0 0 0 14px;position:relative;scrollbar-width:none;-ms-overflow-style:none}.note-toc-indicator{position:absolute;left:0;top:0;width:2px;background-color:var(--color-accent);transition:transform .4s cubic-bezier(.25,1,.5,1),opacity .3s ease;transform-origin:top;opacity:var(--indicator-opacity, 0);transform:translateY(var(--indicator-y, 0)) scaleY(var(--indicator-scale, 1));pointer-events:none;z-index:1}.note-toc-panel ol::-webkit-scrollbar{display:none}.note-toc-panel a{color:var(--color-muted);display:inline-block;text-decoration:none;transition:color .16s ease}.note-toc-panel a:hover,.note-toc-panel a:focus-visible{color:var(--color-hover-text)}.note-toc-panel a.is-active{color:var(--color-accent)}.note-toc-depth-3{margin-left:1rem}.note-toc-depth-4{margin-left:2rem}.reading-toc-rail{--reading-toc-rail-direction: 1;clip-path:inset(0 100% 0 0);color:var(--color-muted);font-family:var(--font-ui);height:var(--reading-toc-rail-height);left:0;opacity:0;filter:opacity(var(--hover-opacity, 1));pointer-events:none;position:absolute;top:0;transform:translate3d(calc(var(--reading-toc-rail-collapse-shift) * -1),0,0);transition:opacity var(--reading-toc-rail-state-duration) ease,transform var(--reading-toc-rail-state-duration) var(--reading-toc-rail-state-ease),clip-path var(--reading-toc-rail-state-duration) var(--reading-toc-rail-state-ease);width:100%}.reading-toc-rail-svg,.reading-toc-rail-dots{height:100%;inset:0;pointer-events:none;position:absolute;width:100%}.reading-toc-rail-svg{display:block;overflow:visible}.reading-toc-rail-base,.reading-toc-rail-accent{fill:none;stroke-linecap:round;stroke-dasharray:.12 2;stroke-linejoin:round;vector-effect:non-scaling-stroke}.reading-toc-rail-base{stroke:color-mix(in srgb,var(--color-line) 82%,var(--color-muted));stroke-width:var(--reading-toc-rail-line-width)}.reading-toc-rail-accent{stroke-dasharray:none;stroke:var(--color-accent);stroke-width:var(--reading-toc-rail-accent-line-width)}[data-reading-toc-rail-dot]{--reading-toc-rail-dot-opacity: .72;--reading-toc-rail-dot-scale: 1;appearance:none;background:transparent;border:0;border-radius:50%;height:var(--reading-toc-rail-dot-hit-size);margin:0;padding:0;pointer-events:none;position:absolute;transform:translate(-50%,-50%);width:var(--reading-toc-rail-dot-hit-size)}[data-reading-toc-rail-dot]:before{background:color-mix(in srgb,var(--color-line) 64%,var(--color-muted));border-radius:50%;content:"";height:var(--reading-toc-rail-dot-size);left:50%;opacity:var(--reading-toc-rail-dot-opacity);position:absolute;top:50%;transform:translate(-50%,-50%) scale(var(--reading-toc-rail-dot-scale));transition:background-color .16s ease,opacity .16s ease,transform .16s var(--ease-out);width:var(--reading-toc-rail-dot-size)}[data-reading-toc-rail-dot][data-heading-level="3"]{--reading-toc-rail-dot-opacity: .62;--reading-toc-rail-dot-scale: .84}[data-reading-toc-rail-dot][data-heading-level="4"],[data-reading-toc-rail-dot][data-heading-level="5"],[data-reading-toc-rail-dot][data-heading-level="6"]{--reading-toc-rail-dot-opacity: .5;--reading-toc-rail-dot-scale: .7}[data-reading-toc-rail-dot].is-active:before,[data-reading-toc-rail-dot][aria-current=true]:before{--reading-toc-rail-dot-opacity: 1;--reading-toc-rail-dot-scale: 1;background:var(--color-accent)}.reading-toc-rail-current{align-items:flex-end;color:var(--color-muted);display:flex;flex-direction:column;font-size:.72rem;line-height:1.35;max-width:var(--reading-toc-rail-title-max-width);min-width:0;pointer-events:auto;position:absolute;text-align:right;text-decoration:none;transform:translateZ(0);transform-origin:right center;width:max-content;will-change:transform}[data-note-toc-stage][data-rail-direction="1"] .reading-toc-rail-current{align-items:flex-start;text-align:left;transform-origin:left center}.reading-toc-rail-current:hover,.reading-toc-rail-current:focus-visible{color:var(--color-accent)}.reading-toc-rail-current:focus-visible{border-radius:2px;outline:1px solid var(--color-accent);outline-offset:4px}.reading-toc-rail-title-stage{display:grid;height:2.7em;max-width:100%;min-height:2.7em}.reading-toc-rail-title{-webkit-box-orient:vertical;-webkit-line-clamp:2;display:-webkit-box;grid-area:1 / 1;line-clamp:2;max-width:100%;opacity:0;overflow:hidden;overflow-wrap:anywhere;transform:translate3d(0,var(--reading-toc-rail-label-shift),0);transition:opacity var(--reading-toc-rail-label-duration) ease,transform var(--reading-toc-rail-label-duration) var(--reading-toc-rail-label-ease)}.reading-toc-rail-title.is-active,.reading-toc-rail-title:not([aria-hidden=true]){opacity:1;transform:translateZ(0)}.reading-toc-rail-title[aria-hidden=true]{opacity:0;transform:translate3d(0,var(--reading-toc-rail-label-shift),0)}.reading-toc-rail-title.is-leaving[aria-hidden=true]{transform:translate3d(0,calc(var(--reading-toc-rail-label-shift) * -1),0)}.reading-toc-rail-percent{color:var(--color-accent);font-size:.68rem;font-variant-numeric:tabular-nums;margin-top:.12rem}html[data-reduced-motion=true] .reading-toc-rail,html[data-reduced-motion=true] .reading-toc-rail-title,html[data-reduced-motion=true] [data-reading-toc-rail-dot]:before{transition:none!important}@media(prefers-reduced-motion:reduce){.reading-toc-rail,.reading-toc-rail-title,[data-reading-toc-rail-dot]:before{transition:none!important}}.zoom-overlay{background-color:color-mix(in srgb,var(--color-page) 95%,transparent);cursor:default;touch-action:none;overscroll-behavior:contain;display:none;height:100%;left:0;opacity:0;position:fixed;top:0;transition:opacity .3s cubic-bezier(.4,0,.2,1);width:100%;z-index:3000}.zoom-img{cursor:zoom-in;margin:0!important;position:fixed;max-width:none;max-height:none;user-select:none;touch-action:none;z-index:3001}.zoom-control{position:fixed;z-index:3002;display:grid;place-items:center;width:44px;height:44px;padding:0;border:0;border-radius:10px;background:color-mix(in srgb,var(--color-page) 88%,transparent);color:var(--color-text);cursor:pointer}.zoom-control:hover{background:var(--color-accent-soft, var(--color-paper))}.zoom-control:focus-visible{outline:2px solid var(--color-accent);outline-offset:3px}.zoom-control:disabled{opacity:.25;cursor:default}.zoom-control .material-symbol{font-size:26px;width:26px;height:26px;overflow:hidden;pointer-events:none}.zoom-previous{left:max(12px,env(safe-area-inset-left));top:calc(50% - 22px)}.zoom-next{right:max(12px,env(safe-area-inset-right));top:calc(50% - 22px)}.zoom-close{right:max(16px,env(safe-area-inset-right));top:max(16px,env(safe-area-inset-top))}.zoom-toggle{right:max(68px,calc(env(safe-area-inset-right) + 52px));top:max(16px,env(safe-area-inset-top))}.zoom-status,.zoom-caption{position:fixed;z-index:3002;left:50%;transform:translate(-50%);max-width:calc(100% - 140px);color:var(--color-text);font-family:var(--font-ui);font-size:.88rem;text-align:center;pointer-events:none}.zoom-status{top:max(28px,env(safe-area-inset-top));font-variant-numeric:tabular-nums}.zoom-caption{bottom:max(20px,env(safe-area-inset-bottom));max-height:3.2em;overflow:hidden}.zoom-overlay[aria-busy=true] .zoom-img{cursor:progress}.zoom-previous[data-tooltip]:after{left:0;transform:none}.zoom-next[data-tooltip]:after,.zoom-close[data-tooltip]:after{left:auto;right:0;transform:none}@media(max-width:767px){.zoom-previous,.zoom-next{top:auto;bottom:max(12px,env(safe-area-inset-bottom))}.zoom-previous[data-tooltip]:after,.zoom-next[data-tooltip]:after{top:auto;bottom:calc(100% + 9px)}.zoom-status{left:20px;transform:none;max-width:calc(100% - 140px)}}.mobile-menu-toggle{align-items:center;background:transparent;border:0;border-radius:50%;color:var(--color-text);cursor:pointer;display:none;height:40px;justify-content:center;margin-left:0;padding:0;position:relative;width:40px}@media(max-width:960px){.mobile-menu-toggle{display:inline-flex}}.mobile-menu-toggle .material-symbol{font-size:1.5rem;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%) rotate(0);transition:opacity .35s cubic-bezier(.42,1.67,.21,.9),transform .35s cubic-bezier(.42,1.67,.21,.9)}.mobile-menu-toggle .icon-close{opacity:0;transform:translate(-50%,-50%) rotate(-90deg)}body.is-mobile-drawer-open .mobile-menu-toggle .icon-menu{opacity:0;transform:translate(-50%,-50%) rotate(90deg)}body.is-mobile-drawer-open .mobile-menu-toggle .icon-close{opacity:1;transform:translate(-50%,-50%) rotate(0)}.mobile-drawer-mask{background:color-mix(in srgb,var(--color-page) 60%,transparent);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);display:none;inset:0;opacity:0;pointer-events:none;position:fixed;transition:opacity .32s cubic-bezier(.2,.78,.24,1);z-index:2005}@media(max-width:960px){.mobile-drawer-mask{display:block;pointer-events:none}body.is-mobile-drawer-open .mobile-drawer-mask{opacity:1;pointer-events:auto}}.mobile-drawer{background:var(--color-page);border-left:1px solid var(--color-line);bottom:0;display:none;height:calc(100dvh - var(--mobile-topbar-height, 0));max-width:400px;position:fixed;right:0;top:var(--mobile-topbar-height, 0);transform:translate(100%);transition:transform .32s cubic-bezier(.2,.78,.24,1),visibility 0s linear .32s;visibility:hidden;width:82vw;z-index:2006}@media(max-width:960px){.mobile-drawer{display:block}body.is-mobile-drawer-open .mobile-drawer{transform:translate(0);transition:transform .42s cubic-bezier(.2,.78,.24,1),visibility 0s linear 0s;visibility:visible}}.mobile-drawer-content{display:flex;flex-direction:column;height:100%;overflow-y:auto;padding:24px 24px calc(24px + env(safe-area-inset-bottom));scrollbar-width:none}.mobile-drawer-content::-webkit-scrollbar{display:none}.mobile-drawer-nav,.mobile-drawer-funcs,.mobile-drawer-switches{display:flex;flex-direction:column;gap:8px}.mobile-drawer-divider{background:var(--color-line);height:1px;margin:20px 0;width:100%}.drawer-nav-link{align-items:center;background:transparent;border:none;border-radius:12px;color:var(--color-text);cursor:pointer;display:flex;gap:16px;min-height:48px;padding:0 12px;text-decoration:none;transition:background .16s ease,color .16s ease;width:100%}.drawer-nav-link:focus-visible,.drawer-footer-row a:focus-visible{outline:1px solid var(--color-accent);outline-offset:4px}.drawer-nav-link .material-symbol{font-size:1.35rem}.drawer-nav-label{font-family:var(--font-serif);font-size:1.05rem}.drawer-switch-item{align-items:center;cursor:pointer;display:flex;justify-content:space-between;min-height:48px;padding:0 12px}.drawer-switch-label{align-items:center;display:flex;gap:16px}.drawer-switch-label .material-symbol{color:var(--color-text);font-size:1.35rem}.drawer-switch-text{color:var(--color-text);font-family:var(--font-ui);font-size:1.05rem}.material-switch{align-items:center;background:transparent;border:0;cursor:pointer;display:inline-flex;height:32px;padding:0;position:relative;width:52px}.switch-track{background:var(--color-paper);border:2px solid var(--color-muted);border-radius:16px;height:100%;transition:background .2s cubic-bezier(.34,.8,.34,1),border-color .2s cubic-bezier(.34,.8,.34,1);width:100%}.switch-thumb{background:var(--color-muted);border-radius:50%;height:16px;left:16px;position:absolute;top:50%;transform:translate(-50%,-50%);transition:background .2s cubic-bezier(.34,.8,.34,1),width .35s cubic-bezier(.42,1.67,.21,.9),height .35s cubic-bezier(.42,1.67,.21,.9),left .35s cubic-bezier(.42,1.67,.21,.9);width:16px}.material-switch[aria-checked=true] .switch-track{background:var(--color-accent);border-color:var(--color-accent)}.material-switch[aria-checked=true] .switch-thumb{background:var(--color-page);height:24px;left:36px;width:24px}.material-switch.is-pressed .switch-thumb{height:28px;width:28px}.mobile-drawer-footer{margin-top:auto;padding-top:24px}.drawer-footer-row{align-items:center;display:flex;flex-wrap:wrap;gap:.35rem;margin-bottom:4px}.drawer-footer-row a{color:var(--color-muted);font-family:var(--font-ui);font-size:.82rem;text-decoration:none;transition:color .18s ease}.drawer-copyright{color:var(--color-muted);font-family:var(--font-ui);font-size:.82rem;margin:12px 0 0}.mobile-overlay-container{bottom:0;display:none;left:0;pointer-events:none;position:fixed;right:0;top:var(--mobile-topbar-height, 0);z-index:1905}@media(max-width:960px){.mobile-overlay-container{display:block}}.mobile-overlay-mask{background:color-mix(in srgb,var(--color-page) 85%,transparent);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);inset:0;opacity:0;position:absolute;transition:opacity .3s cubic-bezier(.2,.78,.24,1)}body.is-tags-overlay-open .mobile-overlay-container,body.is-search-overlay-open .mobile-overlay-container{pointer-events:auto}body.is-tags-overlay-open .mobile-overlay-mask,body.is-search-overlay-open .mobile-overlay-mask{opacity:1;transition:opacity .3s cubic-bezier(.2,.78,.24,1) 0ms}.mobile-overlay{display:flex;flex-direction:column;inset:0;opacity:0;position:absolute;max-height:none;overflow:hidden;background:var(--color-page);border-radius:0;transform:translateY(10px);transition:opacity .3s cubic-bezier(.2,.78,.24,1),transform .3s cubic-bezier(.2,.78,.24,1),visibility 0s linear .3s;visibility:hidden}body.is-tags-overlay-open .mobile-tags-overlay,body.is-search-overlay-open .mobile-search-overlay{opacity:1;transform:translateY(0);transition:opacity .3s cubic-bezier(.2,.78,.24,1),transform .3s cubic-bezier(.2,.78,.24,1),visibility 0s linear 0s;visibility:visible}.mobile-overlay-header{align-items:center;display:flex;flex-shrink:0;gap:16px;min-height:72px;padding:16px 24px 0}.mobile-overlay-title{color:var(--color-text);flex:1;font-family:var(--font-serif);font-size:1.3rem;margin:0}.mobile-overlay-close{flex-shrink:0;align-items:center;background:transparent;border:none;border-radius:50%;color:var(--color-muted);cursor:pointer;display:flex;height:40px;justify-content:center;margin-left:auto;padding:0;transition:color .16s ease;width:40px}.mobile-overlay-close:hover,.mobile-overlay-close:focus-visible{color:var(--color-hover-text)}.mobile-overlay-close:focus-visible{outline:1px solid var(--color-accent)}.mobile-overlay-close .material-symbol{font-size:1.5rem}.mobile-search-input-wrapper{min-width:0;align-items:center;background:color-mix(in srgb,var(--color-paper) 72%,transparent);border:1px solid var(--color-line);border-radius:8px;display:flex;flex:1;padding:0 12px;transition:border-color .16s ease}.mobile-search-input-wrapper:focus-within{border-color:var(--color-accent)}.mobile-search-icon{color:var(--color-muted);font-size:1.25rem}.mobile-search-input{background:transparent;border:none;color:var(--color-text);flex:1;font:.95rem/1.4 var(--font-ui);padding:10px;width:100%}.mobile-search-input::placeholder{color:var(--color-muted);opacity:.74}.mobile-search-input:focus{outline:0}.mobile-overlay-content{flex:1;min-height:0;overflow-y:auto;overscroll-behavior-y:contain;padding:24px 24px calc(24px + env(safe-area-inset-bottom))}@media(min-width:961px){.mobile-overlay-container{display:block;top:72px;z-index:920}.page-body .mobile-overlay-container{left:var(--side-rail-width)}.mobile-overlay-mask,.mobile-search-overlay{display:none}.mobile-tags-overlay{inset:0;max-height:none;border-radius:0;padding:0 clamp(32px,6vw,84px) 32px}.page-body .mobile-tags-overlay{padding-inline:0 var(--side-rail-width)}.mobile-tags-overlay .mobile-overlay-header,.mobile-tags-overlay .mobile-overlay-content{width:min(var(--notes-content-width),100%);margin-inline:auto;padding-inline:0}body.is-tags-overlay-open .page-frame main,body.is-tags-overlay-open .home-footer{visibility:hidden}}.mobile-search-results{display:flex;flex-direction:column;gap:16px}.mobile-search-results .notes-item-header{grid-template-columns:auto minmax(0,1fr)}.mobile-search-results .notes-item-meta{min-width:0;max-width:100%;flex-wrap:wrap;white-space:normal;line-height:1.4;row-gap:.35rem}.mobile-overlay-empty,.mobile-search-loading{color:var(--color-muted);font-family:var(--font-ui);font-size:.95rem;margin:0;text-align:center}.theme-icon-container{display:flex;align-items:center;justify-content:center;width:24px;height:24px}.theme-icon-container svg{display:none;transition:transform .25s ease;color:inherit}:root[data-theme-mode=light] .theme-toggle svg.lucide-sun,:root[data-theme-mode=dark] .theme-toggle svg.lucide-moon,:root[data-theme-mode=system] .theme-toggle svg.lucide-sun-moon{display:block}.theme-toggle:hover .theme-icon-container svg,.theme-toggle:focus-visible .theme-icon-container svg{transform:rotate(20deg)}.theme-toggle:active .theme-icon-container svg{transform:rotate(90deg)}.notes-action-button.palette-toggle .material-symbol{color:var(--color-accent)}.mobile-theme-selector{--theme-position: 1;display:flex;align-items:center;position:relative;width:max-content;padding:4px;gap:4px;border-radius:999px;background:color-mix(in srgb,var(--color-accent) 12%,var(--color-page))}.theme-selector-indicator{position:absolute;top:4px;left:calc(4px + var(--theme-position) * 36px);right:calc(4px + (2 - var(--theme-position)) * 36px);height:32px;border-radius:16px;background:var(--color-accent);pointer-events:none;transition:left .28s cubic-bezier(.22,.61,.36,1),right .28s cubic-bezier(.22,.61,.36,1);z-index:0}.mobile-theme-selector[data-direction=right] .theme-selector-indicator{transition-delay:70ms,0ms}.mobile-theme-selector[data-direction=left] .theme-selector-indicator{transition-delay:0ms,70ms}:root[data-theme-mode=light] .mobile-theme-selector{--theme-position: 0}:root[data-theme-mode=dark] .mobile-theme-selector{--theme-position: 2}.theme-selector-btn{position:relative;z-index:1;background:transparent;border:0;width:32px;height:32px;padding:0;display:flex;align-items:center;justify-content:center;color:var(--color-muted);cursor:pointer;border-radius:50%;transition:color .15s ease}.theme-selector-btn svg{width:18px;height:18px}.theme-selector-btn[aria-checked=true]{color:var(--color-page)}.theme-selector-btn:focus-visible{outline:2px solid var(--color-accent);outline-offset:4px}@media(prefers-reduced-motion:reduce){.theme-selector-indicator,.theme-icon-container svg{transition:none!important}}.reader-mode-toggle,.share-toggle-btn{align-items:center;background:transparent;border:0;color:var(--color-muted);cursor:pointer;display:inline-flex;font-family:inherit;justify-content:center;margin:0;padding:0;position:relative;transition:color .16s ease,transform .16s ease;vertical-align:text-bottom}.reader-mode-toggle:hover,.reader-mode-toggle:focus-visible,.share-toggle-btn:hover,.share-toggle-btn:focus-visible{color:var(--color-hover-text)}.reader-mode-toggle[aria-pressed=true],.share-toggle-btn[aria-pressed=true]{color:var(--color-accent)}.reader-mode-toggle .material-symbol,.share-toggle-btn .material-symbol{font-size:1.15em;line-height:1}.reader-mode-exit{align-items:center;background:transparent;border:0;border-radius:4px;color:var(--color-muted);cursor:pointer;display:flex;height:calc(var(--note-title-size) * 1.15);justify-content:center;padding:0;position:relative;transition:color .16s ease;width:36px;z-index:10}.reader-mode-exit:hover,.reader-mode-exit:focus-visible{color:var(--color-hover-text)}.reader-mode-exit .material-symbol{font-size:1.3rem}.reader-mode-exit[hidden]{display:none!important}.article-action{display:inline-flex;align-items:center;justify-content:center;gap:.35em;padding:0;min-height:28px;border:0;background:transparent;color:var(--color-muted);font:inherit;cursor:pointer;text-decoration:none;vertical-align:middle}.article-action .material-symbol{font-size:1.15em}.article-action:hover,.article-action:focus-visible{color:var(--color-hover-text)}.like-button[aria-pressed=true]{color:var(--color-accent)}.like-button[aria-pressed=true] .material-symbol{font-variation-settings:"FILL" 1}.like-button:disabled{cursor:wait;opacity:.6}.like-entry{display:inline-flex;align-items:center}.like-button .material-symbol{position:relative;display:inline-block;transform-origin:center}.like-button[data-like-feedback=success] .material-symbol{color:var(--color-accent);animation:like-confirm .48s cubic-bezier(.2,.8,.3,1)}.like-button[data-like-feedback=success][aria-pressed=true] .material-symbol:before{content:"";position:absolute;inset:-.3em;border:1px solid currentColor;border-radius:50%;pointer-events:none;opacity:0;animation:like-ripple .52s ease-out}.like-button[data-like-feedback=error] .material-symbol{color:var(--syntax-error);animation:like-reject .36s ease-in-out}@keyframes like-confirm{0%,to{transform:scale(1)}22%{transform:scale(.8)}55%{transform:scale(1.3)}78%{transform:scale(.96)}}@keyframes like-ripple{0%{transform:scale(.6);opacity:.65}to{transform:scale(1.5);opacity:0}}@keyframes like-reject{0%,to{transform:translate(0)}20%,60%{transform:translate(-3px)}40%,80%{transform:translate(3px)}}@media(prefers-reduced-motion:reduce){.like-button[data-like-feedback][aria-pressed] .material-symbol,.like-button[data-like-feedback][aria-pressed] .material-symbol:before{animation:none}}html[data-reduced-motion=true] .like-button[data-like-feedback][aria-pressed] .material-symbol,html[data-reduced-motion=true] .like-button[data-like-feedback][aria-pressed] .material-symbol:before{animation:none}.memo-actions{margin-top:.65rem;color:var(--color-muted)}.rss-dialog.settings-overlay{margin:0;padding:16px 0;max-width:none;max-height:none;height:100dvh;border:0;background:transparent;color-scheme:light}.rss-dialog:not([open]){display:none}.rss-dialog::backdrop{background:transparent}.rss-dialog .rss-paper{min-height:min(480px,calc(100dvh - 32px));max-height:calc(100dvh - 32px);overflow-y:auto;font-size:1.05rem}.rss-dialog-header form{margin:0}.rss-dialog p{line-height:1.7;color:inherit}.rss-dialog input{box-sizing:border-box;width:100%;padding:12px 0;border:0;border-block:1px solid rgba(62,56,50,.2);border-radius:0;background:transparent;color:inherit;font:inherit}.rss-dialog-actions{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px;margin-top:20px}.rss-dialog-actions a,.rss-dialog-actions button{font:inherit;color:inherit;cursor:pointer;background:transparent;border:0;padding:4px 0}.rss-dialog-actions [data-rss-copy]{position:relative;display:inline-grid;text-align:left}.rss-copy-reserve{grid-area:1 / 1;visibility:hidden;white-space:nowrap}[data-rss-copy-text]{position:absolute;inset:4px 0;white-space:nowrap}.rss-status{min-height:1.7em;margin-bottom:0}body:has(.rss-dialog[open]){overflow:hidden}.rss-dialog :is(input,button,a):focus-visible{outline:2px solid #3e3832;outline-offset:3px}html[data-reduced-motion=true] .rss-dialog,html[data-reduced-motion=true] .rss-dialog :is(.settings-backdrop,.settings-paper){transition:none}@media(max-width:480px){.rss-dialog .rss-paper{padding:50px 22px 70px}}.number-flip{position:relative;display:inline-grid;perspective:8em;white-space:nowrap}.number-flip-current{display:inline-block;transform-origin:center;backface-visibility:hidden}.number-flip.is-number-flipping:before{content:attr(data-number-previous) / "";position:absolute;inset:0;pointer-events:none;transform-origin:center;backface-visibility:hidden;animation:number-flip-out .4s ease-in-out both}.number-flip.is-number-flipping>.number-flip-current{animation:number-flip-in .4s ease-in-out both}@keyframes number-flip-out{0%{transform:rotateX(0);opacity:1}49%,to{transform:rotateX(90deg);opacity:0}}@keyframes number-flip-in{0%,49%{transform:rotateX(-90deg);opacity:0}to{transform:rotateX(0);opacity:1}}@media(prefers-reduced-motion:reduce){.number-flip.is-number-flipping:before{display:none}.number-flip.is-number-flipping>.number-flip-current{animation:none}}html[data-reduced-motion=true] .number-flip.is-number-flipping:before{display:none}html[data-reduced-motion=true] .number-flip.is-number-flipping>.number-flip-current{animation:none}.settings-overlay{position:fixed;top:0;left:0;width:100vw;height:100vh;z-index:9999;display:flex;justify-content:center;align-items:center;visibility:hidden;opacity:0;transition:visibility .3s,opacity .3s;pointer-events:auto}html.has-custom-cursor .settings-overlay,html.has-custom-cursor .settings-overlay *{cursor:auto!important}.settings-overlay.is-open{visibility:visible;opacity:1}.settings-backdrop{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#0000;backdrop-filter:blur(0px);-webkit-backdrop-filter:blur(0px);transition:backdrop-filter .3s,-webkit-backdrop-filter .3s,background-color .3s}.settings-overlay.is-open .settings-backdrop{background-color:#0000004d;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}.settings-paper{position:relative;width:min(860px,94vw);min-height:480px;padding:50px 50px 70px;background-color:#f8f5e1;background-size:1000px;background-position:center right;border-radius:2px 2px 0 0;filter:drop-shadow(0 10px 15px rgba(0,0,0,.15)) brightness(.95) sepia(30%) saturate(80%);clip-path:polygon(0% 0%,0% 93%,5% 98%,6% 99%,8% 95%,12% 94%,15% 97%,17% 93%,20% 98%,22% 97%,25% 99%,31% 94%,35% 93%,39% 96%,43% 93%,45% 94%,47% 95%,50% 92%,52% 96%,54% 93%,58% 92%,60% 95%,62% 93%,65% 96%,69% 93%,72% 93%,75% 94%,79% 97%,81% 94%,85% 93%,88% 92%,90% 95%,93% 93%,95% 92%,97% 95%,100% 97%,100% 0%);transform:scale(.96);transition:transform .3s cubic-bezier(.16,1,.3,1);font-family:var(--font-body);color:#3e3832}.settings-paper:before{content:"";position:absolute;inset:4px;background-color:#fcfbf5;background-size:1000px;background-position:right -4px center;pointer-events:none;border-radius:2px;z-index:-1}.settings-overlay.is-open .settings-paper{background-image:url(/images/settings-paper.webp);transform:scale(1)}.settings-overlay.is-open .settings-paper:before{background-image:url(/images/settings-paper.webp)}@media(prefers-reduced-motion:reduce){.settings-overlay,.settings-backdrop,.settings-paper{transition:none!important}}.settings-close-btn{position:absolute;top:25px;right:25px;background:transparent;border:none;color:#3e383280;padding:8px;display:flex;align-items:center;justify-content:center;border-radius:50%}html.has-custom-cursor .settings-close-btn:hover{cursor:pointer!important}.settings-title{margin:0 0 40px;font-size:1.4rem;font-weight:400;text-align:center;color:#2c2723;letter-spacing:.05em}.settings-content{display:flex;flex-direction:column;align-items:flex-start;gap:35px}.settings-checkbox-label{display:flex;align-items:flex-start;user-select:none;font-size:1.05rem;line-height:1.4;position:relative}.settings-checkbox-input{appearance:none;position:absolute;inset:0;margin:0;opacity:0}.settings-checkbox-svg{width:1.25rem;height:1.25rem;margin-right:12px;flex-shrink:0;fill:transparent;margin-top:2px}.settings-checkbox-svg polyline{stroke:#2a2522;stroke-width:2px;stroke-dasharray:24;stroke-dashoffset:24;stroke-linecap:round;stroke-linejoin:round}@keyframes dash{to{stroke-dashoffset:0}}.settings-checkbox-svg line{stroke:#3e3832bf;stroke-width:2px;transition:transform .2s ease,scale .2s ease,translate .2s ease}.settings-checkbox-label:nth-of-type(1) .settings-checkbox-svg line{transform-origin:center}.settings-checkbox-label:nth-of-type(1) .settings-checkbox-svg line:nth-of-type(odd){scale:.7 1}.settings-checkbox-label:nth-of-type(1) .settings-checkbox-svg line:nth-of-type(2n){scale:1 .7}.settings-checkbox-label:nth-of-type(2) .settings-checkbox-svg line:nth-of-type(1){translate:-60% 0}.settings-checkbox-label:nth-of-type(2) .settings-checkbox-svg line:nth-of-type(3){translate:40% 0}.settings-checkbox-label:nth-of-type(3) .settings-checkbox-svg line:nth-of-type(1){translate:-10px 0}.settings-checkbox-label:nth-of-type(3) .settings-checkbox-svg line:nth-of-type(2){translate:0 10px}.settings-checkbox-label:nth-of-type(4) .settings-checkbox-svg line:nth-of-type(3){translate:-10px 0}.settings-checkbox-label .settings-checkbox-input:checked+.settings-checkbox-svg polyline{animation:dash .4s ease forwards}.settings-checkbox-label .settings-checkbox-input:checked+.settings-checkbox-svg line{scale:1;translate:0}.settings-checkbox-text{color:#3e3832}@media(max-width:960px){.setting-item-cursor,.setting-item-clock-cursor{display:none}}.share-paper{font-family:var(--font-body)}.share-textarea{width:100%;height:120px;min-height:80px;max-height:200px;background:transparent;border:none;padding:0;margin:0;font-family:inherit;font-size:1.2rem;line-height:1.6;color:#2c2723;resize:none;overflow-y:auto;scrollbar-width:thin;scrollbar-color:transparent transparent;transition:scrollbar-color .2s}.share-textarea:hover,.share-textarea:focus{scrollbar-color:rgba(62,56,50,.2) transparent}.share-textarea::-webkit-scrollbar{width:6px;background-color:transparent}.share-textarea::-webkit-scrollbar-thumb{background-color:transparent;border-radius:4px}.share-textarea:hover::-webkit-scrollbar-thumb,.share-textarea:focus::-webkit-scrollbar-thumb{background-color:#3e383233}.share-textarea:focus-visible{outline:none}.share-actions{display:flex;gap:20px;margin-top:32px;width:100%;justify-content:flex-start}.share-action-btn{display:flex;align-items:center;justify-content:center;gap:8px;background:transparent;border:none;padding:8px 0;color:#3e3832;font-family:inherit;font-size:1.1rem;cursor:pointer;transition:color .2s,transform .1s;opacity:.8}.share-action-btn:hover,.share-action-btn:focus-visible{opacity:1;color:#000}.share-action-btn:active{transform:scale(.96)}.share-action-btn .material-symbol{font-size:1.35rem}.share-btn-text,.share-copy-text{font-family:inherit}@media(max-width:600px){.share-actions{gap:16px}}.text-roll-active{white-space:nowrap}.text-roll-char{position:relative}.text-roll-old,.text-roll-new{position:relative;animation:text-roll-out .4s cubic-bezier(.16,1,.3,1) both;animation-delay:var(--roll-delay, 0ms)}.text-roll-overlap{position:absolute;left:0;top:0}.text-roll-new{animation-name:text-roll-in}@keyframes text-roll-out{0%{top:0;opacity:1}to{top:-1em;opacity:0}}@keyframes text-roll-in{0%{top:1em;opacity:0}to{top:0;opacity:1}}@media(prefers-reduced-motion:reduce){.text-roll-old{display:none}.text-roll-new{animation:none;top:0;opacity:1}}html[data-reduced-motion=true] .text-roll-old{display:none}html[data-reduced-motion=true] .text-roll-new{animation:none;top:0;opacity:1}.navigation-status{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}.navigation-progress{display:none}@media(min-width:961px)and (hover:hover)and (pointer:fine){html[data-navigation-loading=true]:not(.has-custom-cursor),html[data-navigation-loading=true]:not(.has-custom-cursor) *{cursor:progress!important}}@media(max-width:960px){[data-navigation-logo]{display:inline-block;white-space:nowrap}html[data-navigation-loading=true] body .persistent-logo-container{transform:translateY(0);pointer-events:auto;transition-delay:0s}html[data-navigation-loading=true] body[data-reader-mode=immersive] .persistent-logo-container{display:block!important;position:fixed;width:100%}.navigation-progress{display:block;position:absolute;z-index:3;inset:auto 0 0;height:2px;overflow:hidden;pointer-events:none;background:var(--color-accent-soft);opacity:0;transition:opacity .12s ease}html[data-navigation-loading=true] .navigation-progress{opacity:1}.navigation-progress span{position:absolute;inset:0 100% 0 0;border-radius:999px;background:var(--color-accent);transform-origin:left}html[data-navigation-loading=true] .navigation-progress span{animation:navigation-progress-leading-head 1.75s linear infinite,navigation-progress-leading-tail 1.75s linear infinite}html[data-navigation-loading=true] .navigation-progress span+span{animation-name:navigation-progress-trailing-head,navigation-progress-trailing-tail}}@keyframes navigation-progress-leading-head{0%{right:100%;animation-timing-function:cubic-bezier(.3,0,.8,.15)}57.142857%,to{right:0}}@keyframes navigation-progress-leading-tail{0%{left:0}14.285714%{left:0;animation-timing-function:cubic-bezier(.3,0,.8,.15)}71.428571%,to{left:100%}}@keyframes navigation-progress-trailing-head{0%{right:100%}37.142857%{right:100%;animation-timing-function:cubic-bezier(.3,0,.8,.15)}85.714286%,to{right:0}}@keyframes navigation-progress-trailing-tail{0%{left:0}51.428571%{left:0;animation-timing-function:cubic-bezier(.3,0,.8,.15)}to{left:100%}}@media(prefers-reduced-motion:reduce){html[data-navigation-loading=true] .navigation-progress span{animation:none!important;inset:0;transform:scaleX(.35)}.navigation-progress{transition:none}}html[data-reduced-motion=true][data-navigation-loading=true] .navigation-progress span{animation:none!important;inset:0;transform:scaleX(.35)}.privacy-overlay{margin:0;padding:16px 0;border:0;max-width:none;max-height:none;height:100dvh;background:transparent;color-scheme:light}.privacy-overlay:not([open]){display:none}.privacy-overlay::backdrop{background:transparent}.privacy-overlay .privacy-paper{min-height:min(480px,calc(100dvh - 32px))}.privacy-content{height:min(360px,calc(100dvh - 152px));overflow-y:auto;scrollbar-width:thin;font:1.05rem/1.65 var(--font-body)}.privacy-page{min-height:100%;display:flex;flex-direction:column}.privacy-page[hidden]{display:none}.privacy-overlay .settings-title{margin:0 28px 32px}.privacy-overlay .settings-title:focus{outline:none}.privacy-content :is(p,button,label,.settings-checkbox-text){font:inherit;color:#3e3832}.privacy-content p{margin:0 0 20px}.privacy-text-btn{width:fit-content;border:0;padding:6px 0;background:transparent;text-decoration:underline;text-underline-offset:4px;cursor:pointer}.privacy-choices{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:auto;padding-top:32px}.privacy-option{min-height:44px;align-items:baseline}.privacy-option .settings-checkbox-svg{align-self:flex-start;margin-top:6px}.privacy-save{align-self:flex-end}.privacy-back{margin-top:auto}.privacy-content .privacy-status{margin:12px 0 0}.privacy-status:empty{display:none}.privacy-overlay button:disabled{opacity:.6;cursor:wait}.privacy-overlay button:focus-visible,.privacy-option:has(input:focus-visible){outline:2px solid #3e3832;outline-offset:3px}.settings-privacy-btn{padding:0;border:0;background:transparent;color:#3e3832;font:inherit;text-decoration:underline;text-underline-offset:4px;cursor:pointer}@media(max-width:480px){.privacy-overlay .privacy-paper{padding:50px 22px 70px}.privacy-content{height:auto;max-height:calc(100dvh - 152px)}.privacy-page{min-height:min(360px,calc(100dvh - 152px))}.privacy-choices{gap:12px}}@media(prefers-reduced-motion:reduce){.privacy-overlay .settings-checkbox-svg line{transition:none}.privacy-overlay .settings-checkbox-label .settings-checkbox-input:checked+.settings-checkbox-svg polyline{animation:none;stroke-dashoffset:0}}html[data-reduced-motion=true] .privacy-overlay,html[data-reduced-motion=true] .privacy-overlay :is(.settings-backdrop,.settings-paper,.settings-checkbox-svg line){transition:none}html[data-reduced-motion=true] .privacy-overlay .settings-checkbox-label .settings-checkbox-input:checked+.settings-checkbox-svg polyline{animation:none;stroke-dashoffset:0}[data-settings-page][hidden],.privacy-settings-back[hidden]{display:none}.has-privacy-page>.privacy-content{position:absolute;inset:50px 50px 70px;height:auto;max-height:none}.has-privacy-page .privacy-page{min-height:100%}.has-privacy-page .settings-title{margin:0 28px 32px}.has-privacy-page .settings-title:focus{outline:none}.has-privacy-page .privacy-content button:focus-visible{outline:2px solid #3e3832;outline-offset:3px}.privacy-footer{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px}.privacy-footer .privacy-save{margin-left:auto}@media(prefers-reduced-motion:reduce){.has-privacy-page .settings-checkbox-svg line{transition:none}.has-privacy-page .settings-checkbox-label .settings-checkbox-input:checked+.settings-checkbox-svg polyline{animation:none;stroke-dashoffset:0}}html[data-reduced-motion=true] .has-privacy-page .settings-checkbox-svg line{transition:none}html[data-reduced-motion=true] .has-privacy-page .settings-checkbox-label .settings-checkbox-input:checked+.settings-checkbox-svg polyline{animation:none;stroke-dashoffset:0}@media(min-width:961px)and (hover:hover)and (pointer:fine){html.has-custom-cursor:where(:not([data-reduced-motion=true])),html.has-custom-cursor:where(:not([data-reduced-motion=true])) *{cursor:none!important}}.daybook-cursor{position:fixed;top:0;left:0;width:0;height:0;pointer-events:none;z-index:99999;will-change:transform}.daybook-cursor__core{position:absolute;top:50%;left:50%;width:8px;height:8px;background-color:var(--color-text);opacity:1;border-radius:50%;transform:translate(-50%,-50%);transition:width .3s ease,height .3s ease,border-radius .3s ease,transform .3s var(--ease-out),opacity .3s ease,background-color .3s ease;will-change:width,height,border-radius,transform,opacity}.daybook-cursor:before{content:"";position:absolute;top:0;left:0;width:24px;height:24px;box-sizing:border-box;border:1px solid var(--color-text);border-radius:2px;opacity:0;transform:translate(-50%,-50%) rotate(45deg) scale(.25);transition:transform .3s var(--ease-out),opacity .3s ease}.daybook-cursor[data-cursor-state=hover]:not(.is-loading):before{opacity:.45;transform:translate(-50%,-50%) rotate(45deg) scale(1)}.daybook-cursor.is-active[data-cursor-state=hover]:not(.is-loading):before{transform:translate(-50%,-50%) rotate(45deg) scale(.875)}.daybook-cursor__liquid{position:absolute;width:56px;height:56px;left:-28px;top:-28px;fill:var(--color-accent);opacity:0;transform:scale(.535);transition:transform .3s ease,opacity .3s ease}.daybook-cursor[data-cursor-state=hidden]{visibility:hidden}.daybook-cursor.is-loading .daybook-cursor__core,.daybook-cursor.is-loading .daybook-cursor__viewfinder{opacity:0!important}.daybook-cursor.is-loading .daybook-cursor__liquid{opacity:1;transform:scale(1)}.daybook-cursor__viewfinder{position:absolute;top:50%;left:50%;width:32px;height:24px;transform:translate(-50%,-50%) scale(.65);opacity:0;transition:transform .3s var(--ease-out),opacity .3s ease;will-change:transform,opacity}.daybook-cursor__corner{position:absolute;width:10px;height:10px;border:2.5px solid var(--color-text);box-sizing:border-box}.daybook-cursor__corner:nth-child(1){top:0;left:0;border-right:0;border-bottom:0;border-top-left-radius:6px}.daybook-cursor__corner:nth-child(2){top:0;right:0;border-left:0;border-bottom:0;border-top-right-radius:6px}.daybook-cursor__corner:nth-child(3){bottom:0;left:0;border-right:0;border-top:0;border-bottom-left-radius:6px}.daybook-cursor__corner:nth-child(4){bottom:0;right:0;border-left:0;border-top:0;border-bottom-right-radius:6px}.daybook-cursor[data-cursor-state=hover] .daybook-cursor__core{width:8px;height:8px;border-radius:2px;opacity:1;transform:translate(-50%,-50%) rotate(45deg)}.daybook-cursor[data-cursor-state=text] .daybook-cursor__core{width:3px;height:22px;border-radius:1.5px;opacity:1;transform:translate(-50%,-50%)}.daybook-cursor[data-cursor-state=zoom] .daybook-cursor__core{transform:translate(-50%,-50%) scale(.1);opacity:0}.daybook-cursor[data-cursor-state=zoom] .daybook-cursor__viewfinder{transform:translate(-50%,-50%) scale(1);opacity:1}.daybook-cursor[data-cursor-state=hidden] .daybook-cursor__core{opacity:0;transform:translate(-50%,-50%) scale(.1)}.daybook-cursor.is-active .daybook-cursor__core{transform:translate(-50%,-50%) scale(.65)}.daybook-cursor.is-active[data-cursor-state=hover] .daybook-cursor__core{transform:translate(-50%,-50%) rotate(45deg) scale(.75)}.daybook-cursor.is-active[data-cursor-state=text] .daybook-cursor__core{transform:translate(-50%,-50%) scaleY(.7)}.daybook-cursor.is-active[data-cursor-state=zoom] .daybook-cursor__core{transform:translate(-50%,-50%) scale(0)}.daybook-cursor.is-active[data-cursor-state=zoom] .daybook-cursor__viewfinder{transform:translate(-50%,-50%) scale(.85)}.daybook-cursor.is-loading[data-cursor-state] .daybook-cursor__core{width:15px;height:15px;border-radius:50%;background-color:var(--color-accent);transform:translate(-50%,-50%)}@media(prefers-reduced-motion:reduce){.daybook-cursor,.daybook-cursor-clock{display:none!important}html.has-custom-cursor,html.has-custom-cursor *{cursor:auto!important}}html[data-reduced-motion=true] .daybook-cursor,html[data-reduced-motion=true] .daybook-cursor-clock{display:none!important}.daybook-cursor-clock{position:fixed;top:0;left:0;pointer-events:none;z-index:99998;display:none}.daybook-cursor-clock.is-visible{display:block}@media(max-width:960px),(pointer:coarse){.daybook-cursor,.daybook-cursor-clock{display:none!important;opacity:0!important;visibility:hidden!important}}.media-manager-container{position:absolute;width:0;height:0}.mm-hidden-svg{position:absolute;width:0;height:0;overflow:hidden}.mm-desktop-ui{display:flex;flex-direction:column;position:fixed;bottom:3.5rem;--mm-expanded-left: 24px;--mm-collapsed-visible: 48px;left:var(--mm-expanded-left);z-index:890;pointer-events:none;background-color:var(--m3-surface-container-highest, var(--color-surface-container-high));border-radius:1.5rem;padding:0;width:220px;height:430px;box-shadow:0 4px 20px #00000026;opacity:0;transform:translate(-150%);transition:transform .4s cubic-bezier(.2,0,0,1),opacity .3s ease}body[data-media-manager-active=true] .mm-desktop-ui{pointer-events:auto;opacity:1;transform:translate(calc(var(--mm-collapsed-visible) - var(--mm-expanded-left) - 100%))}body[data-media-manager-active=true] .mm-desktop-ui:hover,body[data-media-manager-active=true] .mm-desktop-ui:focus-within{transform:translate(0)}.mm-collapsed-tab{position:absolute;top:0;right:0;width:var(--mm-collapsed-visible);height:100%;display:flex;flex-direction:column;align-items:center;padding:1.2rem 0;opacity:1;transition:opacity .2s ease;pointer-events:none;box-sizing:border-box}body[data-media-manager-active=true] .mm-desktop-ui:hover .mm-collapsed-tab,body[data-media-manager-active=true] .mm-desktop-ui:focus-within .mm-collapsed-tab{opacity:0}.mm-small-cover{width:22px;height:22px;border-radius:50%;object-fit:cover;margin-bottom:1rem}.mm-vertical-title{writing-mode:vertical-lr;font-family:var(--font-serif);font-size:.85rem;font-weight:600;color:var(--color-on-surface);white-space:nowrap;text-overflow:ellipsis;max-height:280px;letter-spacing:.05em}.mm-expanded-view{display:flex;flex-direction:column;align-items:center;width:100%;height:100%;padding:1.5rem 1rem;opacity:0;transition:opacity .3s ease;pointer-events:none;box-sizing:border-box;position:relative}body[data-media-manager-active=true] .mm-desktop-ui:hover .mm-expanded-view,body[data-media-manager-active=true] .mm-desktop-ui:focus-within .mm-expanded-view{opacity:1;pointer-events:auto}.mm-art-group{position:relative;width:140px;height:140px;margin-top:6px;margin-bottom:1.2rem;display:flex;justify-content:center;align-items:center}.mm-visualizer-canvas{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:128.57%!important;height:128.57%!important;pointer-events:none;z-index:1}.mm-cover-wrapper{position:relative;width:100%;height:100%;margin:0;z-index:2;animation:mm-spin-cover 23.5s linear infinite;animation-play-state:paused}.mm-cover-clipper{position:absolute;top:0;left:0;width:100%;height:100%;contain:paint;-webkit-clip-path:url(/css/components/#mm-cookie-clip);clip-path:url(/css/components/#mm-cookie-clip)}.mm-image-container{position:absolute;top:0;left:0;width:100%;height:100%}.is-playing .mm-cover-wrapper,.mm-expanded-view.is-playing .mm-cover-wrapper{animation-play-state:running}@keyframes mm-spin-cover{0%{transform:rotate(360deg)}to{transform:rotate(0)}}.mm-cover-image{position:absolute;top:50%;left:50%;width:142%;height:142%;max-width:none;max-height:none;object-fit:cover;animation:mm-counter-spin 23.5s linear infinite;animation-play-state:paused;transform:translate(-50%,-50%) rotate(0)}.is-playing .mm-cover-image,.mm-expanded-view.is-playing .mm-cover-image{animation-play-state:running}@keyframes mm-counter-spin{0%{transform:translate(-50%,-50%) rotate(-360deg)}to{transform:translate(-50%,-50%) rotate(0)}}.mm-info-wrapper{text-align:center;margin-bottom:1.2rem;width:100%;padding:0 10px;box-sizing:border-box}.mm-title{font-family:var(--font-serif);font-size:1.1rem;font-weight:700;color:var(--color-primary, var(--color-on-surface));white-space:nowrap;text-overflow:ellipsis;margin-bottom:.2rem}.mm-artist{font-size:.85rem;color:var(--color-on-surface-variant);white-space:nowrap;text-overflow:ellipsis}.mm-controls-wrapper{display:flex;align-items:center;justify-content:center;gap:16px;margin-bottom:.8rem;width:100%}.mm-controls-wrapper button{background:none;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0;color:var(--color-on-surface);transition:border-radius .4s cubic-bezier(.2,0,0,1),transform .2s cubic-bezier(.2,0,0,1),background-color .2s ease,color .2s ease}.mm-controls-wrapper button:active{transform:scale(.9)}.mm-controls-wrapper .mm-btn-prev,.mm-controls-wrapper .mm-btn-next{width:48px;height:48px;border-radius:24px;background-color:transparent;color:var(--color-on-surface);transition:background-color .2s ease,transform .2s cubic-bezier(.42,1.67,.21,.9),width .15s cubic-bezier(.42,1.67,.21,.9)}.mm-controls-wrapper button{-webkit-tap-highlight-color:transparent}.mm-controls-wrapper .mm-btn-play-pause{width:72px;height:48px;border-radius:24px;background-color:var(--color-accent);color:var(--color-page);border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:width .3s cubic-bezier(.42,1.67,.21,.9),border-radius .3s cubic-bezier(.42,1.67,.21,.9)}.is-playing .mm-controls-wrapper .mm-btn-play-pause{border-radius:12px}@media(hover:hover)and (pointer:fine){.mm-controls-wrapper .mm-btn-prev:hover,.mm-controls-wrapper .mm-btn-next:hover{background-color:var(--color-surface-variant, rgba(0, 0, 0, .05))}.mm-controls-wrapper .mm-btn-play-pause:hover{filter:brightness(1.1)}.mm-controls-wrapper .mm-btn-prev:active,.mm-controls-wrapper .mm-btn-next:active{width:40px}.mm-controls-wrapper .mm-btn-play-pause:active{border-radius:8px!important;width:96px;transition:width .15s cubic-bezier(.42,1.67,.21,.9),border-radius .15s cubic-bezier(.42,1.67,.21,.9)}}.mm-controls-wrapper .mm-btn-prev.is-pressed,.mm-controls-wrapper .mm-btn-next.is-pressed{width:40px}.mm-controls-wrapper .mm-btn-play-pause.is-pressed{border-radius:8px!important;width:96px;transition:width .15s cubic-bezier(.42,1.67,.21,.9),border-radius .15s cubic-bezier(.42,1.67,.21,.9)}.mm-morph-icon{width:24px;height:24px;color:currentColor}.mm-morph-path{d:path("M 8 5 L 13 8.18 L 13 15.82 L 8 19 Z M 13 8.18 L 19 12 L 19 12 L 13 15.82 Z");-webkit-transition:d .4s cubic-bezier(.2,0,0,1);transition:d .4s cubic-bezier(.2,0,0,1);fill:currentColor;will-change:d}.is-playing .mm-morph-path{d:path("M 6 5 L 10 5 L 10 19 L 6 19 Z M 14 5 L 18 5 L 18 19 L 14 19 Z")}html[data-bg-playback-disabled=true] .media-manager-container{display:none!important}.mm-article-link{display:flex;align-items:center;justify-content:center;gap:6px;color:var(--color-on-surface-variant, var(--color-text-muted));text-decoration:none;font-size:.85rem;font-family:var(--font-ui);transition:color .3s ease;margin-top:4px;opacity:0;transform:translateY(5px);pointer-events:none}.mm-article-link.is-visible{opacity:1;transform:translateY(0);pointer-events:auto;transition:color .3s ease,opacity .4s ease,transform .4s cubic-bezier(.2,0,0,1)}.mm-article-link:hover{color:var(--color-accent)}.mm-article-link .material-symbol{font-size:1.1rem}.mm-article-link-text{max-width:140px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mm-card-inner{position:absolute;top:0;left:0;width:100%;height:100%;transition:transform .6s cubic-bezier(.4,0,.2,1);transform-style:preserve-3d;border-radius:inherit}body[data-media-manager-active=true] .mm-desktop-ui.is-flipped .mm-card-inner{transform:rotateY(-180deg)}.mm-card-front,.mm-card-back{position:absolute;top:0;left:0;width:100%;height:100%;backface-visibility:hidden;-webkit-backface-visibility:hidden;border-radius:inherit}.mm-card-front{transform:rotateY(0)}.mm-card-back{transform:rotateY(180deg)}.mm-btn-open-playlist{margin-top:.5rem;background:none;border:none;cursor:pointer;display:flex;align-items:center;gap:6px;color:var(--color-on-surface-variant);font-family:var(--font-ui);font-size:.85rem;padding:8px 16px;border-radius:20px;transition:background-color .2s,color .2s;pointer-events:auto}.mm-btn-open-playlist:hover{background-color:var(--color-surface-variant);color:var(--color-on-surface)}.mm-playlist-view{display:flex;flex-direction:column;background:var(--color-surface-elevated, var(--color-page));opacity:0;transition:opacity .3s ease;pointer-events:none}body[data-media-manager-active=true] .mm-desktop-ui:hover .mm-playlist-view,body[data-media-manager-active=true] .mm-desktop-ui:focus-within .mm-playlist-view{opacity:1;pointer-events:auto}.mm-playlist-header{display:flex;align-items:center;padding:1.2rem 1rem;border-bottom:1px solid var(--color-border)}.mm-btn-close-playlist{background:none;border:none;cursor:pointer;color:var(--color-on-surface);display:flex;align-items:center;justify-content:center;padding:6px;margin-right:12px;border-radius:50%;transition:background-color .2s}.mm-btn-close-playlist:hover{background-color:var(--color-surface-variant)}.mm-playlist-header-title{font-family:var(--font-serif);font-weight:600;color:var(--color-on-surface)}.mm-playlist-list{flex:1;overflow-y:auto;list-style:none;padding:0;margin:0}.mm-playlist-list::-webkit-scrollbar{width:6px}.mm-playlist-list::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:3px}.mm-playlist-item{display:flex;align-items:center;padding:10px 16px;cursor:pointer;transition:background-color .2s;margin:4px 8px;border-radius:8px;position:relative}.mm-playlist-item:hover{background-color:var(--color-surface-variant)}.mm-playlist-item.is-active{background-color:var(--color-accent-soft, var(--color-surface-variant))}.mm-playlist-item-info{flex:1;display:flex;flex-direction:column;transform:translate(0);transition:transform .35s cubic-bezier(.42,1.67,.21,.9)}.mm-playlist-item.is-active .mm-playlist-item-info{transform:translate(28px)}.mm-playlist-item-title{font-family:var(--font-serif);font-size:.9rem;font-weight:600;color:var(--color-on-surface);white-space:nowrap;text-overflow:ellipsis}.mm-playlist-item.is-active .mm-playlist-item-title{color:var(--color-accent)}.mm-playlist-item-artist{font-size:.75rem;color:var(--color-on-surface-variant);white-space:nowrap;text-overflow:ellipsis;margin-top:2px}.mm-eq-indicator{position:absolute;left:14px;display:flex;align-items:center;gap:2px;height:16px;opacity:0;transform:scale(0);transform-origin:left center;transition:transform .35s cubic-bezier(.38,1.21,.22,1),opacity .2s ease-out}.mm-playlist-item.is-active .mm-eq-indicator{opacity:1;transform:scale(1)}.mm-eq-bar{display:block;width:4px;border-radius:2px;background-color:var(--color-accent);animation-timing-function:ease-in-out;animation-iteration-count:infinite;animation-direction:alternate}.mm-eq-bar:nth-child(1){animation-name:mm-eq-1;animation-duration:.45s}.mm-eq-bar:nth-child(2){animation-name:mm-eq-2;animation-duration:.55s;animation-delay:.1s}.mm-eq-bar:nth-child(3){animation-name:mm-eq-3;animation-duration:.5s;animation-delay:.2s}.mm-eq-bar:nth-child(4){animation-name:mm-eq-4;animation-duration:.45s;animation-delay:.3s}.media-manager-container:not(.is-playing) .mm-eq-bar{animation-play-state:paused}@keyframes mm-eq-1{0%{height:4px}to{height:12px}}@keyframes mm-eq-2{0%{height:6px}to{height:16px}}@keyframes mm-eq-3{0%{height:8px}to{height:14px}}@keyframes mm-eq-4{0%{height:5px}to{height:10px}}@media(min-width:961px){.mobile-media-fab,.mm-btn-close-mobile,.mm-mobile-ui{display:none!important}}@media(max-width:960px){.mobile-media-fab{display:flex;align-items:center;justify-content:center;position:fixed;right:0;bottom:calc(env(safe-area-inset-bottom) + 176px);height:48px;width:auto;padding:0 12px 0 16px;border-radius:24px 0 0 24px;background:var(--color-page);box-shadow:0 4px 12px #00000014;border:1px solid var(--color-line);border-right:none;z-index:90;cursor:pointer;color:var(--color-text);transition:transform .3s cubic-bezier(.2,0,0,1),opacity .3s}.mobile-media-fab.is-hidden{transform:translate(100%);opacity:0;pointer-events:none}.mobile-media-fab-cover{width:24px;height:24px;border-radius:50%;object-fit:cover}.mm-btn-close-mobile{position:absolute;top:24px;right:20px;width:40px;height:40px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;border-radius:50%;color:var(--color-muted);z-index:10;cursor:pointer;transition:color .16s ease}.mm-btn-close-mobile:hover,.mm-btn-close-mobile:focus-visible{color:var(--color-hover-text)}.mm-btn-close-mobile .material-symbol{font-size:1.5rem}}@media(max-width:960px){.mm-desktop-ui{display:none!important}}.mm-mobile-ui{display:none}@media(min-width:961px){.mm-mobile-ui,.mm-mobile-playlist-view{display:none!important}}@media(max-width:960px){body.is-media-overlay-open .mm-mobile-ui{position:fixed;top:var(--mobile-topbar-height, 0);left:0;width:100%;height:calc(100dvh - var(--mobile-topbar-height, 0));z-index:1995;display:flex!important;flex-direction:column;background-color:var(--color-page);padding-top:calc(env(safe-area-inset-top) + 24px);padding-bottom:calc(env(safe-area-inset-bottom) + 32px);overflow-y:auto;opacity:1;pointer-events:auto;transform:translateY(0)}.mm-mobile-center{flex:1;display:flex;flex-direction:column;justify-content:center;align-items:center;width:100%;padding:2rem 1rem;margin-top:80px}.mm-mobile-art-group{position:relative;width:min(65vw,40vh,320px);height:min(65vw,40vh,320px);margin-bottom:2rem;display:flex;justify-content:center;align-items:center;flex-shrink:0}.mm-mobile-visualizer-canvas{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:128.57%!important;height:128.57%!important;pointer-events:none;z-index:1}.mm-mobile-art-group .mm-cover-wrapper{position:relative;top:0;left:0;width:100%;height:100%;margin:0;z-index:2;animation:mm-spin-cover 23.5s linear infinite;animation-play-state:paused}.is-playing .mm-mobile-art-group .mm-cover-wrapper{animation-play-state:running}.mm-mobile-art-group .mm-cover-clipper{position:absolute;top:0;left:0;width:100%;height:100%;contain:paint;-webkit-clip-path:url(/css/components/#mm-cookie-clip);clip-path:url(/css/components/#mm-cookie-clip)}.mm-mobile-art-group .mm-image-container{width:100%;height:100%}.is-playing .mm-mobile-art-group .mm-cover-image{animation-play-state:running}.mm-mobile-center .mm-info-wrapper{display:flex;flex-direction:column;align-items:center;text-align:center;gap:8px;margin-bottom:2rem;width:100%;padding:0 1rem}.mm-mobile-center .mm-title{font-size:1.4rem;font-weight:600;color:var(--color-on-surface);font-family:var(--font-serif);letter-spacing:-.02em;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.mm-mobile-center .mm-artist{font-size:1rem;color:var(--color-on-surface-variant);font-family:var(--font-ui);display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}.mm-mobile-bottom{display:flex;flex-direction:column;align-items:center;padding-bottom:32px}.mm-mobile-bottom .mm-controls-wrapper{display:flex;align-items:center;justify-content:center;gap:32px;margin-bottom:24px}.mm-mobile-bottom .mm-article-link{display:flex;align-items:center;justify-content:center;gap:6px;color:var(--color-on-surface-variant);text-decoration:none;font-size:.95rem;font-family:var(--font-ui);padding:8px 16px;border-radius:100px;background-color:var(--color-surface-container);margin-bottom:24px}.mm-mobile-bottom .mm-btn-open-playlist{display:flex;align-items:center;gap:8px;background:none;border:none;color:var(--color-on-surface-variant);font-size:1rem;font-family:var(--font-ui);cursor:pointer;padding:12px}.mm-mobile-playlist-view{position:fixed;top:var(--mobile-topbar-height, 0);left:0;width:100%;height:calc(100dvh - var(--mobile-topbar-height, 0));background-color:var(--color-page);display:flex;flex-direction:column;padding-top:calc(env(safe-area-inset-top) + 24px);padding-bottom:calc(env(safe-area-inset-bottom) + 32px);transform:translateY(100%);transition:transform .4s cubic-bezier(.2,0,0,1);z-index:2000}.media-manager-container.show-mobile-playlist .mm-mobile-playlist-view{transform:translateY(0)}.mm-mobile-playlist-view .mm-playlist-header{display:flex;align-items:center;padding:24px 20px;gap:16px}.mm-mobile-playlist-view .mm-btn-close-playlist{background:none;border:none;color:var(--color-on-surface);cursor:pointer;display:flex;align-items:center;justify-content:center;width:40px;height:40px}.mm-mobile-playlist-view .mm-playlist-header-title{font-size:1.2rem;font-weight:600;color:var(--color-on-surface);font-family:var(--font-serif)}.mm-mobile-playlist-view .mm-playlist-list{list-style:none;margin:0;padding:0 16px 32px;overflow-y:auto;flex:1}.mm-mobile-playlist-view .mm-playlist-item{display:flex;align-items:center;gap:12px;border-radius:12px;cursor:pointer;transition:background-color .2s;position:relative;padding:12px 12px 12px 44px}.mm-mobile-playlist-view .mm-playlist-item:active{background-color:var(--color-surface-container-high)}.mm-mobile-playlist-view .mm-playlist-item.is-active{background-color:var(--color-accent-soft, var(--color-surface-variant));border-radius:999px}.mm-mobile-playlist-view .mm-playlist-item .mm-pi-cover{width:48px;height:48px;border-radius:8px;object-fit:cover}.mm-mobile-playlist-view .mm-playlist-item .mm-pi-info{display:flex;flex-direction:column;flex:1;overflow:hidden}.mm-mobile-playlist-view .mm-playlist-item .mm-pi-title{font-size:.95rem;font-weight:500;color:var(--color-on-surface);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mm-mobile-playlist-view .mm-playlist-item .mm-pi-artist{font-size:.8rem;color:var(--color-on-surface-variant);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}}@font-face{font-family:Daybook Fraunces;src:url(/vendor/fonts/fraunces/fraunces-latin-400-italic.woff2) format("woff2");font-weight:100 900;font-style:italic;font-display:swap}html[data-theme=dark]{color-scheme:dark} diff --git a/internal/embedded/static/css/bundles/home.css b/internal/embedded/static/css/bundles/home.css new file mode 100644 index 00000000..b26a5b5e --- /dev/null +++ b/internal/embedded/static/css/bundles/home.css @@ -0,0 +1 @@ +.home-main{max-width:1160px;padding:28px 32px 40px}.github-home{--home-card: var(--color-paper);--home-shadow-low: 0 2px 4px color-mix(in srgb, var(--color-text) 7%, transparent), 0 8px 20px color-mix(in srgb, var(--color-text) 4%, transparent);display:grid;grid-template-columns:304px minmax(0,1fr);align-items:start;gap:32px;font-family:var(--font-ui);font-size:.95rem;line-height:1.55}.github-profile{position:relative;isolation:isolate;padding:20px 22px 26px;min-width:0}.github-profile:before{content:"";position:absolute;inset:82px 0 0;z-index:-1;border-radius:24px;background:var(--home-card);box-shadow:var(--home-shadow-low);pointer-events:none}:root[data-theme=dark] .github-home{--home-shadow-low: 0 2px 4px rgb(0 0 0 / .16), 0 8px 20px rgb(0 0 0 / .14)}.hero-avatar-wrap{display:block;aspect-ratio:1;border-radius:50%;height:260px;width:260px;background-color:var(--color-paper);box-shadow:var(--shadow-avatar);overflow:hidden;view-transition-name:site-avatar}.hero-avatar{display:block;border-radius:inherit;width:100%;height:100%;object-fit:cover}.github-profile-name{font-size:1.75rem;font-weight:600;line-height:1.2;margin:26px 0 16px}.github-profile-handle{display:flex;align-items:baseline;gap:.5em;color:var(--color-muted);font-family:var(--font-ui);font-size:1.2rem;font-weight:400;margin-top:5px}.github-profile-login{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.github-profile-separator,.github-profile-pronouns{flex-shrink:0;font-size:.88rem}.github-profile-bio{font-size:1.02rem;margin:0 0 18px;white-space:pre-line;overflow-wrap:anywhere}.github-profile-status{padding:6px 10px;background:var(--color-accent-soft);border-radius:10px;margin:0 0 14px}.github-home a{position:relative;isolation:isolate;color:inherit;text-decoration:none;transition:color .18s ease}.github-home a:not(:has(img)){display:inline-block;max-width:100%}.github-home a:focus-visible{outline:2px solid var(--color-accent);outline-offset:4px}.github-home [data-tooltip]:after{content:none}.github-followers{display:flex;flex-wrap:wrap;align-items:center;gap:5px;margin:22px 0;font-size:.88rem;color:var(--color-muted)}.github-followers .material-symbol{font-size:19px}.github-followers strong{color:var(--color-text);font-weight:600}.github-followers a:hover strong,.github-followers a:focus-visible strong{color:inherit}.github-home .github-followers a{display:inline-flex;align-items:center;gap:5px}.github-profile-details{list-style:none;padding:0;margin:0;font-size:.9rem}.github-profile-details li{display:flex;align-items:start;gap:8px;margin:7px 0;overflow-wrap:anywhere}.github-home .github-profile-details a{display:inline-flex;align-items:start;gap:8px;min-width:0}.github-profile-details a>span:last-child{min-width:0}.github-profile-details .material-symbol{color:var(--color-muted);font-size:19px;flex:0 0 19px;margin-top:2px}.github-contact-icon{display:block;width:19px;height:19px;flex:0 0 19px;margin-top:2px;background-color:currentColor;mask-position:center;mask-repeat:no-repeat;mask-size:contain}.github-joined{color:var(--color-muted)}.github-organizations{margin-top:24px}.github-home h2{font-size:1rem;font-weight:500;margin:0 0 14px}.github-organizations>div{display:flex;gap:8px;flex-wrap:wrap}.github-organizations img{display:block;border-radius:6px}.github-overview{min-width:0}.github-badge{border-radius:8px;font-size:.74rem;padding:2px 8px;line-height:1.6;background:color-mix(in srgb,var(--color-muted) 6%,var(--home-card));color:var(--color-muted);font-weight:400;white-space:nowrap}.github-readme{scroll-margin-top:80px}.github-readme-content{font-size:.92rem;min-width:0}.github-readme-content>:first-child{margin-top:0}.github-readme-content>:last-child{margin-bottom:0}.github-readme-content img{max-width:100%;height:auto}.github-home .github-readme-content pre{max-width:100%;overflow:auto;border:0;border-radius:0;padding:0;margin:0;background:transparent;box-shadow:none;font-size:clamp(8px,.7vw,10.5px);line-height:1.35}.github-home .github-readme-content pre code{font-size:inherit}.github-readme-content table{display:block;max-width:100%;overflow-x:auto}.github-home .github-readme-content a{text-decoration-line:underline;transition:color .2s ease,text-decoration-color .2s ease}.github-repositories,.github-contributions{margin-top:32px}.github-repository-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.github-repository{background:var(--home-card);box-shadow:var(--home-shadow-low);border-radius:16px;padding:20px;min-width:0;display:flex;flex-direction:column}.github-repository-heading{display:flex;align-items:center;gap:7px;font-family:var(--font-serif)}.github-repository-heading .material-symbol{font-size:18px;color:var(--color-muted);flex-shrink:0}.github-home .github-repository-heading>a{display:inline-flex;align-items:start;gap:7px;min-width:0;font-weight:600;overflow-wrap:anywhere}.github-repository-heading>a>.material-symbol{margin-top:3px}.github-repository-heading>a>span:last-child{min-width:0}.github-repository-heading>.github-badge{margin-left:auto}.github-repository-description{color:var(--color-muted);font-size:.86rem;line-height:1.5;margin:10px 0 16px}.github-fork{color:var(--color-muted);font-size:.75rem;margin:5px 0 0}.github-topics{display:flex;flex-wrap:wrap;gap:5px;margin:0 0 12px}.github-topics>span{background:color-mix(in srgb,var(--color-muted) 6%,var(--home-card));color:var(--color-muted);border-radius:8px;font-size:.7rem;padding:2px 8px;overflow-wrap:anywhere}.github-repository-meta{display:flex;flex-wrap:wrap;align-items:center;gap:14px;margin-top:auto;padding-top:10px;color:var(--color-muted);font-size:.76rem}.github-repository-meta>span,.github-home .github-repository-meta a{display:inline-flex;align-items:center;gap:4px}.github-repository-meta .material-symbol{font-size:16px}.github-language-dot{width:9px;height:9px;border-radius:50%;background:var(--color-accent);display:inline-block;margin-right:3px}.github-contributions{background:var(--home-card);box-shadow:var(--home-shadow-low);border-radius:20px;padding:24px}.github-calendar-scroll{overflow-x:auto}.github-calendar{display:flex;gap:3px;width:100%;min-width:max-content}.github-calendar-week{display:grid;flex:1;min-width:10px;grid-template-rows:repeat(7,auto);gap:3px}.github-calendar-day,.github-calendar-key>i{display:block;width:10px;height:10px;border-radius:2px;background:var(--color-accent-soft)}.github-calendar-day{width:100%;height:auto;aspect-ratio:1}.github-home [data-level="1"]{background:color-mix(in srgb,var(--color-accent) 35%,var(--color-page))}.github-home [data-level="2"]{background:color-mix(in srgb,var(--color-accent) 55%,var(--color-page))}.github-home [data-level="3"]{background:color-mix(in srgb,var(--color-accent) 78%,var(--color-page))}.github-home [data-level="4"]{background:var(--color-accent)}.github-calendar-key{display:flex;gap:4px;align-items:center;justify-content:end;margin-top:10px;font-size:.7rem;color:var(--color-muted)}.github-home-empty{display:block;min-height:50vh;padding-top:8vh}@media(max-width:960px){.home-main{max-width:850px;padding-top:12px}.github-home{grid-template-columns:200px minmax(0,1fr);gap:24px}.github-profile{padding:20px 20px 24px}.github-profile:before{inset-block-start:60px}.hero-avatar-wrap{width:160px;height:160px}.github-repository-grid{grid-template-columns:minmax(0,1fr)}}@media(max-width:640px){.home-body .site-header{display:block;padding:8px 20px 0}.home-body .site-header .site-nav{flex-wrap:nowrap;justify-content:flex-start;gap:20px;width:100%;min-height:44px;overflow-x:auto;scrollbar-width:none}.home-body .site-nav>*{flex-shrink:0}.home-main{padding:12px 20px 32px}.github-home{display:block}.github-profile{padding:20px}.github-profile:before{inset-block-start:0;border-radius:20px}.github-profile-identity{display:grid;grid-template-columns:88px minmax(0,1fr);gap:16px;align-items:center}.hero-avatar-wrap{width:88px;height:88px}.github-profile-name{font-size:1.5rem;margin:0}.github-profile-handle{font-size:1.1rem}.github-profile-bio{margin-top:20px}.github-profile-status{margin-top:16px}.github-followers{margin:18px 0}.github-profile-details{display:flex;flex-wrap:wrap;column-gap:18px}.github-profile-details li{max-width:100%}.github-organizations{margin-top:16px}.github-overview{margin-top:24px}.github-repository-grid{gap:12px}.github-repository{padding:18px}.github-contributions{padding:20px 18px}}.markdown{color:var(--color-text);font-family:var(--font-body);font-size:var(--note-text-size);line-height:1.75;overflow-wrap:anywhere;word-wrap:break-word;overflow-x:clip}.markdown>*{margin:0 0 24px}.markdown>*:last-child{margin-bottom:0}.markdown p{color:var(--color-text);font-size:var(--note-text-size);line-height:1.75;margin:0 0 24px;max-width:100%}.markdown h1,.markdown h2,.markdown h3,.markdown h4{color:var(--color-text);font-family:var(--font-serif);font-weight:700;overflow-wrap:anywhere;word-wrap:break-word}.markdown h1 strong,.markdown h2 strong,.markdown h3 strong,.markdown h4 strong{font-weight:900}.markdown h1{font-size:28px;line-height:1.2;margin:50px 0 18px}.markdown h2{font-size:23px;line-height:1.25;margin:46px 0 16px;position:relative}.markdown h3{font-size:19px;font-weight:600;line-height:1.35;margin:34px 0 14px;position:relative}.markdown h4{font-size:16.5px;font-weight:500;line-height:1.4;margin:28px 0 12px}.markdown a{color:var(--color-text);overflow-wrap:anywhere;text-decoration:underline;text-decoration-color:color-mix(in srgb,var(--color-text) 35%,transparent);text-decoration-thickness:1px;text-underline-offset:3px;transition:color .2s ease,text-decoration-color .2s ease;word-break:break-word}.markdown a:hover,.markdown a:focus-visible{color:var(--color-hover-text);text-decoration-color:var(--color-hover-text)}.markdown a:focus-visible{border-radius:3px;outline:2px solid var(--color-accent);outline-offset:3px}.markdown strong{color:var(--color-text);font-weight:700}.markdown em{font-style:italic}.markdown del{color:var(--color-muted);text-decoration-color:color-mix(in srgb,var(--color-muted) 65%,transparent)}.markdown ul{list-style:none;margin:0 0 28px;max-width:100%;padding:0}.markdown ul ul,.markdown ul ol,.markdown ol ul,.markdown ol ol{margin:10px 0 4px;max-width:none;padding-left:24px}.markdown ul li{color:var(--color-text);font-size:var(--note-text-size);line-height:1.7;margin-bottom:10px;padding-left:22px;position:relative}.markdown ul li:not(:has(>input[type=checkbox])):before{background:var(--color-accent);border-radius:50%;content:"";height:5px;left:4px;position:absolute;top:.78em;width:5px}.markdown ul ul li{color:var(--color-muted);font-size:14.5px;margin-bottom:6px}.markdown ul ul li:not(:has(>input[type=checkbox])):before{background:transparent;border:1px solid var(--color-accent)}.markdown ol{margin:0 0 28px;max-width:100%;padding-left:22px}.markdown ol li{color:var(--color-text);font-size:var(--note-text-size);line-height:1.7;margin-bottom:10px;padding-left:6px}.markdown ol li::marker{color:var(--color-accent);font-family:var(--font-body);font-size:14px}.markdown li>p{display:inline;margin:0}.markdown li>ul,.markdown li>ol{margin-top:10px}.markdown input[type=checkbox]{accent-color:var(--color-accent);cursor:default;height:.95rem;left:0;margin:0;opacity:1;position:absolute;top:.38em;vertical-align:-.1em;width:.95rem}.markdown li:has(>input[type=checkbox]){list-style:none;padding-left:24px}.markdown blockquote{border-left:2px solid var(--color-accent);color:var(--color-muted);font-size:15px;font-style:italic;line-height:1.65;margin:28px 0;max-width:100%;padding:4px 0 4px 22px}.markdown blockquote p{color:inherit;font-size:inherit;margin:0 0 12px;max-width:none}.markdown blockquote p:last-child{margin-bottom:0}.markdown .callout{--callout-color: var(--color-accent);border-left:4px solid var(--callout-color);color:var(--color-text);margin:28px 0;max-width:100%;padding:2px 16px}.markdown .callout[data-callout=note],.markdown .callout[data-callout=abstract],.markdown .callout[data-callout=info],.markdown .callout[data-callout=todo]{--callout-color: var(--color-accent)}.markdown .callout[data-callout=tip],.markdown .callout[data-callout=success]{--callout-color: #4f6c3f}.markdown .callout[data-callout=important]{--callout-color: #6f5ea8}.markdown .callout[data-callout=warning],.markdown .callout[data-callout=question]{--callout-color: #9a6a21}.markdown .callout[data-callout=caution],.markdown .callout[data-callout=failure],.markdown .callout[data-callout=danger],.markdown .callout[data-callout=bug]{--callout-color: #9b392f}.markdown .callout[data-callout=example],.markdown .callout[data-callout=quote]{--callout-color: var(--color-muted)}:root[data-theme=dark] .markdown .callout[data-callout=tip],:root[data-theme=dark] .markdown .callout[data-callout=success]{--callout-color: #9bb978}:root[data-theme=dark] .markdown .callout[data-callout=important]{--callout-color: #b9a7e8}:root[data-theme=dark] .markdown .callout[data-callout=warning],:root[data-theme=dark] .markdown .callout[data-callout=question]{--callout-color: #d6b56d}:root[data-theme=dark] .markdown .callout[data-callout=caution],:root[data-theme=dark] .markdown .callout[data-callout=failure],:root[data-theme=dark] .markdown .callout[data-callout=danger],:root[data-theme=dark] .markdown .callout[data-callout=bug]{--callout-color: #ee8f7a}.markdown .callout-title{align-items:center;color:var(--callout-color);display:flex;font-size:15px;font-weight:600;line-height:1.35;margin:0 0 12px}.markdown .callout.is-title-only .callout-title{margin-bottom:0}.markdown .callout.is-collapsible .callout-title{cursor:pointer;list-style:none}.markdown .callout.is-collapsible .callout-title::-webkit-details-marker{display:none}.markdown .callout-icon{font-size:1.25em;margin-right:8px;font-variation-settings:"FILL" 1,"wght" 400,"GRAD" 0,"opsz" 24}.markdown .callout-title-inner{flex:1}.markdown .callout-fold-icon{font-size:1.25em;margin-left:8px;transform:rotate(-90deg);transition:transform .18s var(--ease-out)}.markdown .callout[open]>.callout-title .callout-fold-icon{transform:rotate(0)}.markdown .callout-content>:last-child,.markdown .md-fold-content>:last-child{margin-bottom:0}.markdown .callout p,.markdown .callout ul,.markdown .callout ol,.markdown .md-fold p,.markdown .md-fold ul,.markdown .md-fold ol{max-width:none}.markdown .callout img,.markdown .callout video,.markdown .callout iframe{max-width:100%}.markdown .md-fold{margin:28px 0;max-width:100%}.markdown .md-fold>summary{color:var(--color-text);cursor:pointer;font-weight:700;line-height:1.45;list-style:none;margin-bottom:16px;width:fit-content}.markdown .md-fold>summary::-webkit-details-marker{display:none}.markdown .md-fold>summary:before{border-bottom:6px solid transparent;border-left:10px solid currentColor;border-top:6px solid transparent;content:"";display:inline-block;margin-right:8px;transform:translate(2px,.5px);transition:transform .18s var(--ease-out)}.markdown .md-fold[open]>summary:before{transform:rotate(90deg) translate(.5px,-2px)}.markdown .md-gallery{display:flex;gap:16px;margin:32px 0;max-width:100%;overflow-x:auto;padding:2px 0 12px;scrollbar-color:color-mix(in srgb,var(--color-muted) 42%,transparent) transparent;scrollbar-width:thin}.markdown .md-gallery>figure,.markdown .md-gallery>p{flex:0 0 min(78%,30rem);margin:0;max-width:none}.markdown .md-gallery img{width:100%}.markdown .md-gallery.is-carousel{--gallery-height: clamp(13rem, 38vw, 18rem);--gallery-radius: 24px;display:block;height:var(--gallery-height);padding:0;position:relative;scrollbar-width:none;touch-action:pan-x pan-y pinch-zoom}.markdown .md-gallery.is-carousel::-webkit-scrollbar{display:none}.markdown .md-gallery.is-carousel:focus-visible{border-radius:var(--gallery-radius);outline:2px solid var(--color-accent);outline-offset:5px}.markdown .md-carousel-track{height:100%}.markdown .md-carousel-stage{height:100%;left:0;overflow:hidden;position:sticky}.markdown .md-carousel-item{background:var(--color-paper);border-radius:var(--gallery-radius);height:100%;left:0;margin:0;max-width:none;overflow:hidden;position:absolute;top:0}.markdown .md-carousel-item img{border:0;height:100%;left:50%;max-width:none;object-fit:cover;position:absolute;top:0;transform:translate(-50%);width:var(--gallery-image-width)}.markdown .md-carousel-item:has(:focus-visible){outline:2px solid var(--color-accent);outline-offset:-3px}.markdown .md-carousel-item figcaption,.memos-page .memo-photo-tile figcaption{background:linear-gradient(transparent,#000000b3);bottom:0;box-sizing:border-box;color:#fff;display:-webkit-box;font-family:var(--font-ui);font-size:.9rem;left:0;line-height:1.4;margin:0;opacity:var(--gallery-caption-opacity, 1);overflow:hidden;padding:36px 16px 16px;pointer-events:none;position:absolute;right:0;text-align:left;-webkit-box-orient:vertical;-webkit-line-clamp:2}.markdown .md-gallery.is-dragging,.markdown .md-gallery.is-dragging img{cursor:grabbing;user-select:none}.markdown .mermaid-block{background:color-mix(in srgb,var(--color-paper) 72%,transparent);border:0;border-radius:6px;margin:32px 0;max-width:100%;overflow-x:auto;padding:16px;scrollbar-color:color-mix(in srgb,var(--color-muted) 42%,transparent) transparent;scrollbar-width:thin;transition:background-color .35s ease}.markdown .mermaid-source{background:var(--color-code-bg);border:0;border-radius:4px;color:var(--syntax-text);margin:0;max-width:none;overflow-x:auto;padding:14px 16px;white-space:pre}.markdown .mermaid-source code{white-space:pre}.markdown .mermaid-diagram{color:var(--color-text);min-width:100%}.markdown .mermaid-diagram svg{display:block;height:auto;margin:0 auto;max-width:none}.markdown .mermaid-block.is-rendered .mermaid-source{display:none}.markdown .mermaid-error{color:#9b392f;font-size:.92rem;margin:12px 0 0;max-width:none}:root[data-theme=dark] .markdown .mermaid-error{color:#ee8f7a}.markdown .embed-card{background:color-mix(in srgb,var(--color-paper) 72%,transparent);border:0;border-radius:6px;color:var(--color-text);margin:28px 0;max-width:100%;min-width:0;overflow:hidden;transition:background-color .18s ease,color .18s ease}.markdown a.embed-card{display:block;padding:16px 18px;text-decoration:none}.markdown a.embed-card:hover,.markdown a.embed-card:focus-visible{background:color-mix(in srgb,var(--color-accent) 8%,var(--color-paper));color:var(--color-hover-text)}.markdown .embed-kicker,.markdown .embed-meta,.markdown .embed-action{color:var(--color-muted);display:block;font-size:12px;line-height:1.35}.markdown .embed-title{color:var(--color-text);display:block;font-size:16px;font-weight:700;line-height:1.45;margin:6px 0;overflow-wrap:anywhere}.markdown .embed-slash{color:var(--color-muted);margin:0 3px}.markdown .embed-action{margin-top:10px}.markdown .embed-frame{max-width:100%}.markdown .embed-frame iframe{background:var(--color-paper);border:0;display:block;max-width:100%;width:100%}.markdown .embed-frame-video{aspect-ratio:16 / 9}.markdown .embed-frame-video iframe{height:100%}.markdown .embed-frame-codepen iframe{min-height:360px}.markdown table{border-collapse:collapse;display:block;font-family:var(--font-body);font-size:14px;margin:28px 0;max-width:100%;overflow-x:auto;width:100%}.markdown th,.markdown td{border-bottom:1px solid var(--color-line);padding:8px 12px;text-align:left;vertical-align:top}.markdown th{color:var(--color-text);font-weight:700}.markdown td{color:var(--color-muted)}.markdown :not(pre)>code{background:var(--color-code-inline-bg);border:0;border-radius:3px;color:var(--color-muted);font-family:var(--font-mono);font-variant-ligatures:contextual common-ligatures;font-feature-settings:"liga" 1,"calt" 1;font-size:.9em;padding:1px 6px;transition:background-color .35s ease}:root[data-palette=warm] .markdown :not(pre)>code{background:var(--color-paper);color:var(--color-muted)}.markdown pre{background:var(--color-code-bg);border:0;border-radius:4px;box-shadow:none;color:var(--syntax-text);font-family:var(--font-mono);font-variant-ligatures:contextual common-ligatures;font-feature-settings:"liga" 1,"calt" 1;font-size:14px;line-height:1.7;margin:28px 0;max-width:100%;overflow-x:auto;padding:16px;transition:background-color .35s ease}.markdown pre code{background:transparent;border:0;border-radius:0;color:inherit;display:block;font-family:inherit;font-size:inherit;padding:0}.markdown hr{background:var(--color-line);border:0;height:1px;margin:40px 0}.markdown figure{margin:36px 0;padding:0}.markdown iframe,.markdown object,.markdown embed,.markdown audio{border:0}.markdown img,.markdown video{background:var(--color-paper);border:0;display:block;height:auto;max-width:100%}.markdown.post-content img{cursor:zoom-in}.markdown.post-content img.no-lightbox,.markdown.post-content img[data-no-lightbox=true]{cursor:auto}.markdown figcaption{color:color-mix(in srgb,var(--color-text) 72%,transparent);font-size:14px;line-height:1.5;margin-top:10px;text-align:center}.markdown .footnotes{border-top:1px solid var(--color-line);color:var(--color-muted);font-size:.9rem;margin-top:3rem;padding-top:1rem}.markdown .footnotes hr{display:none}.markdown .footnotes ol{margin-bottom:0}.markdown .footnotes li,.markdown .footnotes p{color:var(--color-muted);font-size:.9rem}.markdown .footnote-ref,.markdown .footnote-backref{color:var(--color-accent);text-decoration:none}.markdown .highlight,.markdown .chroma{background:var(--color-code-bg);color:var(--syntax-text)}.markdown .highlight{border:0;border-radius:4px;box-shadow:none;margin:28px 0;max-width:100%;overflow-x:auto;position:relative;transition:background-color .35s ease}.markdown .highlight pre{background:transparent;border:0;border-radius:0;box-shadow:none;margin:0;padding-right:3.5rem}.markdown pre.chroma{border:0;margin:0}.markdown .highlight.is-plain pre{color:var(--syntax-text)}.code-copy-button{align-items:center;background:transparent;border:0;border-radius:4px;color:var(--color-muted);cursor:pointer;display:inline-flex;height:2rem;justify-content:center;padding:0;position:absolute;right:.7rem;top:.7rem;opacity:0;pointer-events:none;transition:color .2s ease,opacity .2s ease;width:2rem;z-index:1}.markdown .highlight:hover .code-copy-button,.markdown .highlight:focus-within .code-copy-button,.code-copy-button.is-copied{opacity:1;pointer-events:auto}.code-copy-button .material-symbol{font-size:1.15rem;font-variation-settings:"FILL" 0,"wght" 400,"GRAD" 0,"opsz" 24;transition:font-variation-settings .16s var(--ease-out)}.code-copy-button:hover,.code-copy-button:focus-visible,.code-copy-button.is-copied{color:var(--color-hover-text)}.code-copy-button:hover .material-symbol,.code-copy-button:focus-visible .material-symbol,.code-copy-button.is-copied .material-symbol{font-variation-settings:"FILL" 1,"wght" 400,"GRAD" 0,"opsz" 24}.code-copy-button:focus-visible{outline:2px solid var(--color-accent);outline-offset:3px}.markdown h1,.markdown h2,.markdown h3,.markdown h4{scroll-margin-block-start:90px}@media(prefers-reduced-motion:no-preference){html{scroll-behavior:smooth}}.markdown .heading-anchor{display:inline-flex;align-items:center;color:var(--color-hover-text);opacity:0;text-decoration:none;margin-left:.25em;font-size:.85em;transition:opacity .18s ease,color .18s ease;vertical-align:baseline;position:relative;top:.15em}.markdown .heading-anchor .material-symbol{font-size:inherit}.markdown h1:hover .heading-anchor,.markdown h2:hover .heading-anchor,.markdown h3:hover .heading-anchor,.markdown h4:hover .heading-anchor,.markdown .heading-anchor:focus-visible{opacity:1}.markdown .heading-anchor:hover{color:var(--color-primary)}.markdown-image{margin:32px 0}.markdown-image-center{text-align:center}.markdown-image-center img{margin-left:auto;margin-right:auto}@media(hover:none){.markdown .heading-anchor{opacity:.45}}@media(max-width:720px){.markdown p,.markdown ul li,.markdown ol li{font-size:15px;line-height:1.72}.markdown h1{font-size:25px;margin:44px 0 16px}.markdown h2{font-size:21px;margin:38px 0 14px}.markdown h3{font-size:18px;margin:28px 0 12px}.markdown figure{margin:28px 0}}@media(max-width:420px){.markdown p,.markdown ul li,.markdown ol li{font-size:15px;line-height:1.7}.markdown h1{font-size:23px;margin:36px 0 14px}.markdown h2{font-size:19.5px;margin:32px 0 12px}.markdown h3{font-size:17px;margin:24px 0 10px}.markdown ul{padding-left:0}.markdown ul ul,.markdown ul ol,.markdown ol ul,.markdown ol ol{padding-left:20px}.markdown ul li{padding-left:18px}.markdown blockquote{font-size:15px;padding-left:16px}.markdown figcaption{font-size:13.5px}}.markdown .heading-anchor:focus-visible{border-radius:3px;outline:2px solid var(--color-accent);outline-offset:3px}.markdown .chroma .line{display:block;min-height:1.7em}.markdown .chroma .cl{display:inline}.markdown .chroma .w{color:inherit}.markdown .chroma .c,.markdown .chroma .ch,.markdown .chroma .cm,.markdown .chroma .c1,.markdown .chroma .cs,.markdown .chroma .cp,.markdown .chroma .cpf{color:var(--syntax-comment);font-style:italic}:root[data-palette=default] .markdown .chroma .c,:root[data-palette=default] .markdown .chroma .ch,:root[data-palette=default] .markdown .chroma .cm,:root[data-palette=default] .markdown .chroma .c1,:root[data-palette=default] .markdown .chroma .cs,:root[data-palette=default] .markdown .chroma .cp,:root[data-palette=default] .markdown .chroma .cpf{font-style:normal}.markdown .chroma .k,.markdown .chroma .kc,.markdown .chroma .kd,.markdown .chroma .kn,.markdown .chroma .kp,.markdown .chroma .kr,.markdown .chroma .kt{color:var(--syntax-keyword)}.markdown .chroma .s,.markdown .chroma .sa,.markdown .chroma .sb,.markdown .chroma .sc,.markdown .chroma .dl,.markdown .chroma .sd,.markdown .chroma .s2,.markdown .chroma .se,.markdown .chroma .sh,.markdown .chroma .si,.markdown .chroma .sx,.markdown .chroma .sr,.markdown .chroma .s1,.markdown .chroma .ss{color:var(--syntax-string)}.markdown .chroma .m,.markdown .chroma .mb,.markdown .chroma .mf,.markdown .chroma .mh,.markdown .chroma .mi,.markdown .chroma .il,.markdown .chroma .mo{color:var(--syntax-number)}.markdown .chroma .nf,.markdown .chroma .nb,.markdown .chroma .nx,.markdown .chroma .nc,.markdown .chroma .nd,.markdown .chroma .ne{color:var(--syntax-function)}.markdown .chroma .nt{color:var(--syntax-tag)}.markdown .chroma .na{color:var(--syntax-attr)}.markdown .chroma .o,.markdown .chroma .ow,.markdown .chroma .p{color:var(--syntax-operator)}.markdown .chroma .err{color:var(--syntax-error)}.markdown .chroma .gi{color:var(--syntax-inserted)}.markdown .chroma .gd{color:var(--syntax-deleted)}.markdown .gc-container{margin:1.5rem 0;display:block;overflow-x:auto;border-radius:6px;background:color-mix(in srgb,var(--color-text) 5%,transparent);padding:1rem 1.25rem;transition:background-color .2s ease-out,color .2s ease-out;scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--color-text) 15%,transparent) transparent;text-decoration:none;color:var(--color-text)}.markdown .gc-container:hover,.markdown .gc-container:focus-visible{background:color-mix(in srgb,var(--color-text) 10%,transparent)}.markdown .gc-container+.gc-container{margin-top:-.5rem}.markdown .gc-title-bar{display:flex;align-items:center;gap:.625rem}.markdown .gc-owner-avatar{aspect-ratio:1/1;width:1.375rem;flex-shrink:0;border-radius:9999px;background-color:color-mix(in srgb,var(--color-text) 20%,transparent)}.markdown .gc-repo-title{display:flex;align-items:center;line-height:normal;color:currentColor}.markdown .gc-repo-title strong{color:inherit}.markdown .gc-slash{margin:0 .25rem;opacity:.4}.markdown .gc-github-icon{margin-left:auto;width:1.375rem;flex-shrink:0}.markdown .gc-repo-description{margin:.6rem 0 .875rem;text-align:start;font-size:.875rem;color:currentColor}.markdown .gc-info-bar{display:flex;align-items:center;gap:.4375rem;font-size:.75rem;color:color-mix(in srgb,currentColor 80%,transparent)}.markdown .gc-info-icon{flex-shrink:0}.markdown .gc-stars-count{margin-right:.75rem}.markdown .gc-forks-count{margin-right:.9375rem}.markdown .gc-license-info{margin-left:.125rem;margin-right:1rem}.markdown .spotify-embed{width:100%;border-radius:12px;overflow:hidden;border:0;margin:0;display:block}.markdown .music-custom-player{margin:32px 0}.music-player{position:relative;border-radius:16px;overflow:hidden;height:160px;display:flex;align-items:center;background:var(--color-surface);box-shadow:0 4px 12px #0000001a;color:#fff;font-family:var(--font-ui)}.music-bg{position:absolute;inset:-20px;background-size:cover;background-position:center;filter:blur(20px) brightness(.7);z-index:0}.music-overlay{position:absolute;inset:0;background:#0000004d;z-index:1}.music-inner{position:relative;z-index:2;display:flex;align-items:center;width:100%;height:100%;padding:16px;box-sizing:border-box}.music-player .music-cover{width:128px;height:128px;border-radius:8px;object-fit:cover;flex-shrink:0;margin-right:16px;margin-bottom:0!important;border:none;box-shadow:0 12px 32px #0006}.music-body{flex:1;display:flex;flex-direction:column;justify-content:center;min-width:0}.music-text{display:flex;align-items:baseline;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-bottom:4px}.music-title{font-family:var(--font-serif);font-size:16px;font-weight:600;margin-right:8px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.music-artist{font-size:13px;color:#fffc;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.music-time{font-size:12px;color:#fffc;margin-bottom:6px}.music-bottom{display:flex;align-items:center;justify-content:flex-start}.music-canvas{flex:1;max-width:360px;height:24px;cursor:pointer;touch-action:none}.music-playbtn-wrapper{width:72px;height:72px;display:flex;align-items:center;justify-content:center;margin-left:auto}.music-playbtn{width:45px;height:45px;border-radius:22.5px;background:#fff3;border:none;color:#fffc;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .35s cubic-bezier(.42,1.67,.21,.9);flex-shrink:0;padding:0}.music-player.is-playing .music-playbtn{width:45px;height:45px;border-radius:18px;background:#fff;color:#000}.music-playbtn:active{width:50px!important;height:50px!important;border-radius:18px!important;transform:none}.music-icon{font-family:Material Symbols Rounded;font-variation-settings:"FILL" 1;font-size:24px;color:inherit}.music-error{padding:16px;background:var(--color-surface);border-radius:12px;color:var(--color-text-subdued);text-align:center;border:0}@media(max-width:960px){.music-player{height:auto;width:100%;max-width:100%;box-sizing:border-box;border-radius:20px}.music-inner{flex-direction:column;align-items:center;padding:20px 18px;gap:10px}.music-player .music-cover{width:min(68vw,220px);height:min(68vw,220px);margin-right:0;margin-bottom:0!important}.music-body{width:100%;align-items:center;flex:none}.music-text{flex-direction:column;align-items:center;width:100%;white-space:normal}.music-title{margin-right:0;margin-bottom:4px;text-align:center;white-space:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;font-weight:700}.music-artist{text-align:center;width:100%}.music-time{text-align:center;margin-bottom:16px}.music-bottom{flex-direction:column;align-items:center;width:100%}.music-canvas{width:min(100%,260px);max-width:100%;flex:none}.music-playbtn-wrapper{margin-left:0;margin-top:16px;width:56px;height:56px}.music-playbtn{width:52px;height:52px;border-radius:26px}.music-player.is-playing .music-playbtn{width:52px;height:52px;border-radius:20px}.music-icon{font-size:28px}}@media(max-width:380px){.music-player{border-radius:16px}.music-inner{padding:16px}.music-player .music-cover{width:190px;height:190px}.music-canvas{width:230px}.music-playbtn-wrapper,.music-playbtn,.music-player.is-playing .music-playbtn{width:48px;height:48px}}.markdown figure:has(.spotify-embed),.markdown figure:has(.music-custom-player),.markdown figure:has(.twitter-tweet){margin:32px 0}.markdown .twitter-tweet{margin:0 auto}.markdown blockquote.twitter-tweet{border-left:none;padding:0;background:transparent;margin:0 auto}.markdown .twitter-tweet iframe,.markdown iframe[data-tweet-id]{border-radius:12px!important;overflow:hidden!important}.markdown .katex-display{overflow-x:auto;overflow-y:hidden;padding:.5rem 0;margin:1.25rem 0}.markdown .katex-display>.katex{max-width:100%}.markdown .katex{font-size:1.05em}.markdown .katex-display::-webkit-scrollbar{display:none}.markdown .obsidian-embed{margin:32px 0;max-width:100%}.markdown .media-image img{border-radius:4px;width:var(--image-width, auto);max-width:100%;height:auto}.markdown .media-image.is-center{text-align:center}.markdown .media-image.is-center img{margin-left:auto;margin-right:auto}.markdown .media-image.is-left{text-align:left}.markdown .media-image.is-left img{margin-right:auto}.markdown .media-image.is-right{text-align:right}.markdown .media-image.is-right img{margin-left:auto}.markdown .media-pdf{display:flex;flex-direction:column;gap:8px}.markdown .media-pdf iframe{width:100%;height:600px;border:0;border-radius:6px;background:var(--color-paper)}@media(max-width:960px){.markdown .media-pdf iframe{height:400px}}.markdown .media-audio,.markdown .media-video{display:flex;flex-direction:column;gap:8px;margin:24px 0}.markdown .media-audio audio{width:100%;border:0;border-radius:6px;background:var(--color-paper)}.markdown .media-video video{max-width:100%;border:0;border-radius:6px;background:var(--color-paper)}.markdown .media-audio.is-center,.markdown .media-video.is-center{align-items:center}.markdown .obsidian-note-embed{border-left:2px solid var(--color-accent);color:var(--color-muted);font-style:normal;font-size:15px;line-height:1.65;margin:28px 0;max-width:100%;padding:4px 32px 4px 22px;position:relative}.markdown blockquote.obsidian-note-embed{border-left-color:var(--color-accent)}.markdown .obsidian-embed-content{color:var(--color-text);font-size:15px;line-height:1.6}.markdown .obsidian-embed-content>*:first-child{margin-top:0}.markdown .obsidian-embed-title{font-size:1.15rem;font-weight:700;margin-bottom:.5rem;color:var(--color-text)}.markdown .obsidian-embed-link{position:absolute;top:4px;right:0;color:var(--color-muted);opacity:.6;text-decoration:none;display:flex;align-items:center;justify-content:center;transition:color .2s ease,opacity .2s ease}.markdown .obsidian-embed-link:after{background:var(--color-tooltip-bg);border-radius:8px;top:calc(100% + 9px);color:var(--color-tooltip-text);content:attr(data-tooltip);font-family:var(--font-ui);font-size:.72rem;left:50%;line-height:1;opacity:0;padding:5px 10px;pointer-events:none;position:absolute;transform:translate(-50%);clip-path:inset(100% 50% 0 50% round 8px);transition:opacity var(--motion-expressive-effects-duration) var(--motion-expressive-effects-easing),clip-path var(--motion-expressive-effects-duration) var(--motion-expressive-effects-easing);white-space:nowrap;z-index:100}.markdown .obsidian-embed-link:hover,.markdown .obsidian-embed-link:focus-visible{color:var(--color-hover-text);opacity:1;text-decoration:none}.markdown .obsidian-embed-link:hover:after,.markdown .obsidian-embed-link:focus-visible:after{opacity:1;clip-path:inset(0 0 0 0 round 8px)}@media(prefers-reduced-motion:reduce){.markdown .obsidian-embed-link:after{clip-path:none!important;transition:opacity .16s ease!important}}html[data-reduced-motion=true] .markdown .obsidian-embed-link:after{clip-path:none!important;transition:opacity .16s ease!important}.markdown .obsidian-embed-link .material-symbol{font-size:1.15rem;font-variation-settings:"FILL" 0,"wght" 400,"GRAD" 0,"opsz" 24}.markdown mark,.note-content mark{background:var(--color-accent-soft-strong);color:inherit;border-radius:.2em;padding:.05em .18em}.embed-skeleton{position:relative;overflow:hidden;background-color:var(--color-paper);border:0;border-radius:8px;color:transparent!important;pointer-events:none;user-select:none}.embed-skeleton:after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent 0%,color-mix(in srgb,var(--color-text) 3%,transparent) 40%,color-mix(in srgb,var(--color-text) 5%,transparent) 50%,color-mix(in srgb,var(--color-text) 3%,transparent) 60%,transparent 100%);transform:translate(-100%);animation:embed-shimmer 2s infinite var(--ease-out)}@media(prefers-reduced-motion:reduce){.embed-skeleton:after{animation:none;transform:translate(0);background:color-mix(in srgb,var(--color-text) 2%,transparent)}}@keyframes embed-shimmer{to{transform:translate(100%)}}.embed-fallback{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:1.5rem;background-color:var(--color-paper);border:0;border-radius:8px;text-align:center;color:var(--color-muted);font-family:var(--font-ui);font-size:.9rem;min-height:120px;gap:.5rem}.embed-fallback svg{color:var(--color-faint);margin-bottom:.25rem}.embed-fallback a{color:var(--color-accent);text-decoration:none;transition:opacity var(--duration-fast) var(--ease-out)}.embed-fallback a:hover{opacity:.8}.music-custom-player[data-embed-status=loading]{margin:32px 0}.music-skeleton{display:flex;background:var(--color-paper);border:0;border-radius:16px;overflow:hidden;height:160px;box-shadow:0 4px 12px #00000008;padding:16px;align-items:center;box-sizing:border-box}.music-skeleton-cover{width:128px;height:128px;flex-shrink:0;border-radius:8px;background:color-mix(in srgb,var(--color-text) 5%,transparent);margin-right:16px}.music-skeleton-body{flex-grow:1;display:flex;flex-direction:column;justify-content:center;padding:0;gap:.5rem}.music-skeleton-title{width:40%;height:1rem;background:color-mix(in srgb,var(--color-text) 8%,transparent);border-radius:4px}.music-skeleton-artist{width:25%;height:.75rem;background:color-mix(in srgb,var(--color-text) 5%,transparent);border-radius:4px;margin-bottom:.25rem}.music-skeleton-progress{width:100%;height:4px;background:color-mix(in srgb,var(--color-text) 3%,transparent);border-radius:2px}.music-skeleton-playbtn{width:45px;height:45px;border-radius:50%;background:color-mix(in srgb,var(--color-text) 5%,transparent);align-self:center;margin-left:auto;margin-right:14px}@media screen and (max-width:960px){.music-skeleton{flex-direction:column;height:auto;padding:20px 18px;border-radius:20px;align-items:center;text-align:center;gap:10px}.music-skeleton-cover{width:min(68vw,220px);height:min(68vw,220px);margin-right:0}.music-skeleton-body{width:100%;padding:0;align-items:center}.music-skeleton-title{width:60%}.music-skeleton-artist{width:40%}.music-skeleton-playbtn{margin:10px 0 0;width:45px;height:45px}}.gc-container[data-embed-status=loading]{position:relative;overflow:hidden}.gc-container[data-embed-status=loading]:after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent 0%,color-mix(in srgb,var(--color-text) 3%,transparent) 40%,color-mix(in srgb,var(--color-text) 5%,transparent) 50%,color-mix(in srgb,var(--color-text) 3%,transparent) 60%,transparent 100%);transform:translate(-100%);animation:embed-shimmer 2s infinite var(--ease-out);pointer-events:none;z-index:1}@media(prefers-reduced-motion:reduce){.gc-container[data-embed-status=loading]:after{animation:none;transform:translate(0);background:color-mix(in srgb,var(--color-text) 2%,transparent)}}.gc-container[data-embed-status=loading] .gc-repo-description,.gc-container[data-embed-status=loading] .gc-stars-count,.gc-container[data-embed-status=loading] .gc-forks-count,.gc-container[data-embed-status=loading] .gc-license-info{color:transparent!important;background:color-mix(in srgb,var(--color-text) 6%,transparent);border-radius:4px}.gc-container[data-embed-status=loading] .gc-repo-description{width:80%;height:.875rem;margin:.6rem 0 .875rem;display:block}.gc-container[data-embed-status=loading] .gc-stars-count,.gc-container[data-embed-status=loading] .gc-forks-count,.gc-container[data-embed-status=loading] .gc-license-info{display:inline-block;min-width:2rem;height:.75rem;vertical-align:middle}.tweet-skeleton{min-height:200px;display:flex;flex-direction:column;gap:1rem;padding:1.5rem}.tweet-skeleton-header{display:flex;gap:.75rem;align-items:center}.tweet-skeleton-avatar{width:48px;height:48px;border-radius:50%;background:color-mix(in srgb,var(--color-text) 6%,transparent)}.tweet-skeleton-name{width:120px;height:1rem;background:color-mix(in srgb,var(--color-text) 6%,transparent);border-radius:4px}.tweet-skeleton-body1,.tweet-skeleton-body2{height:1rem;background:color-mix(in srgb,var(--color-text) 4%,transparent);border-radius:4px}.tweet-skeleton-body1{width:90%}.tweet-skeleton-body2{width:60%}.embed-frame[data-embed-status=loading]{position:relative;background-color:var(--color-paper)}.embed-frame[data-embed-status=loading]:after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent 0%,color-mix(in srgb,var(--color-text) 3%,transparent) 40%,color-mix(in srgb,var(--color-text) 5%,transparent) 50%,color-mix(in srgb,var(--color-text) 3%,transparent) 60%,transparent 100%);transform:translate(-100%);animation:embed-shimmer 2s infinite var(--ease-out);pointer-events:none;z-index:1}@media(prefers-reduced-motion:reduce){.embed-frame[data-embed-status=loading]:after{animation:none;transform:translate(0);background:color-mix(in srgb,var(--color-text) 2%,transparent)}}.embed-frame[data-embed-status=loading] iframe{opacity:0}.embed-frame[data-embed-status=ready] iframe{opacity:1;transition:opacity var(--duration-normal) var(--ease-out)}img[data-embed-status=loading]{background-color:color-mix(in srgb,var(--color-text) 3%,transparent);opacity:0}img[data-embed-status=ready]{opacity:1;transition:opacity var(--duration-normal) var(--ease-out)}::view-transition{background:var(--color-page)}::view-transition-group(site-avatar),::view-transition-group(site-name-cn),::view-transition-group(site-name-en){animation-duration:var(--duration-shared);animation-timing-function:var(--ease-out)}::view-transition-old(site-name-cn),::view-transition-old(site-name-en){animation:none;opacity:0}::view-transition-new(site-name-cn),::view-transition-new(site-name-en){animation:none;mix-blend-mode:normal}:root{--theme-reveal-from: 100% 0 0 0;--palette-reveal-from: 0 100% 0 0}:root[data-theme=dark]{--theme-reveal-from: 0 0 100% 0}html[data-palette-changing=to-warm]{--palette-reveal-from: 0 100% 0 0}html[data-palette-changing=from-warm]{--palette-reveal-from: 0 0 0 100%}html[data-theme-changing] .hero-avatar-wrap,html[data-palette-changing] .hero-avatar-wrap,html[data-theme-changing] .side-avatar-wrap,html[data-palette-changing] .side-avatar-wrap,html[data-theme-changing] .hero-name,html[data-theme-changing] .slogan-glyph,html[data-palette-changing] .hero-name,html[data-palette-changing] .slogan-glyph,html[data-theme-changing] .notes-brand-name,html[data-palette-changing] .notes-brand-name,html[data-theme-changing] .notes-item-title a,html[data-palette-changing] .notes-item-title a,html[data-theme-changing] .notes-item-meta,html[data-palette-changing] .notes-item-meta,html[data-theme-changing] .note-title span,html[data-palette-changing] .note-title span,html[data-theme-changing] .note-meta,html[data-palette-changing] .note-meta{view-transition-name:none!important}::view-transition-old(theme-toggle-transition),::view-transition-old(palette-toggle-transition){animation:none;mix-blend-mode:normal;z-index:-1}::view-transition-new(theme-toggle-transition){animation:theme-toggle-reveal .7s cubic-bezier(.4,0,.2,1);clip-path:inset(0 0 0 0);mix-blend-mode:normal;z-index:99}::view-transition-new(palette-toggle-transition){animation:palette-toggle-reveal .7s cubic-bezier(.4,0,.2,1);clip-path:inset(0 0 0 0);mix-blend-mode:normal;z-index:99}::view-transition-group(active-switch-track),::view-transition-group(active-switch-thumb){z-index:100}@keyframes theme-toggle-reveal{0%{clip-path:inset(var(--theme-reveal-from))}}@keyframes palette-toggle-reveal{0%{clip-path:inset(var(--palette-reveal-from))}}::view-transition-old(root),::view-transition-new(root){animation-duration:var(--duration-normal);animation-timing-function:var(--ease-out);background:var(--color-page);mix-blend-mode:normal}html.article-transition::view-transition-group(*){animation-duration:var(--duration-shared);animation-timing-function:var(--article-enter-ease)}html.article-transition::view-transition-old(root){animation:none;opacity:0}html.article-transition::view-transition-new(root){animation:none;opacity:1}html.article-transition .side-avatar-wrap,html.article-transition .hero-avatar-wrap,html.article-transition .hero-name-cn,html.article-transition .hero-name-en,html.article-transition .notes-brand-cn,html.article-transition .notes-brand-en,html.article-transition .slogan-glyph{view-transition-name:none}@keyframes nav-exit-up{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-14px)}}@keyframes nav-enter-down{0%{opacity:0;transform:translateY(-14px)}to{opacity:1;transform:translateY(0)}}@keyframes logo-exit-fade{0%{opacity:1}to{opacity:0}}@keyframes logo-enter-fade{0%{opacity:0}to{opacity:1}}@keyframes social-exit-down{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(14px)}}@keyframes social-enter-up{0%{opacity:0;transform:translateY(14px)}to{opacity:.72;transform:translateY(0)}}@keyframes footer-exit-down{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(20px)}}@keyframes footer-enter-up{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes side-nav-enter{0%{opacity:0;transform:translate(-16px)}to{opacity:1;transform:translate(0)}}@keyframes side-nav-exit-left{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(-16px)}}@keyframes aside-enter{0%{opacity:0;transform:translate(18px)}to{opacity:1;transform:translate(0)}}@keyframes aside-exit-right{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(18px)}}@keyframes page-soft-enter{0%{opacity:.92}to{opacity:1}}@keyframes article-content-enter{0%{opacity:0;transform:translateY(var(--post-enter-y))}to{opacity:1;transform:translateY(0)}}@keyframes article-content-enter-mini{0%{opacity:0;transform:translateY(1.5rem)}to{opacity:1;transform:translateY(0)}}@keyframes article-back-enter{0%{opacity:0;transform:translate(.5rem)}to{opacity:1;transform:translate(0)}}@keyframes archive-intro-fade-up{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}.home-exiting .site-nav>*{animation:nav-exit-up var(--duration-normal) var(--ease-out) both}.home-exiting .site-nav>*:nth-child(1){animation-delay:0ms}.home-exiting .site-nav>*:nth-child(2){animation-delay:28ms}.home-exiting .site-nav>*:nth-child(3){animation-delay:56ms}.home-exiting .site-nav>*:nth-child(4){animation-delay:84ms}.home-exiting .site-nav>*:nth-child(5){animation-delay:112ms}.home-exiting .site-nav>*:nth-child(6){animation-delay:.14s}.home-exiting .site-nav>*:nth-child(7){animation-delay:.16s}.home-exiting .site-nav>*:nth-child(8){animation-delay:.18s}.home-exiting .hero-social a{animation:social-exit-down var(--duration-normal) var(--ease-out) both}.home-exiting .hero-social a:nth-child(1){animation-delay:40ms}.home-exiting .hero-social a:nth-child(2){animation-delay:68ms}.home-exiting .hero-social a:nth-child(3){animation-delay:96ms}.home-exiting .hero-social a:nth-child(4){animation-delay:124ms}.home-exiting .hero-social a:nth-child(5){animation-delay:152ms}.home-exiting .hero-social a:nth-child(6){animation-delay:.18s}.home-exiting .footer-stats-row>*,.home-exiting .home-footer>p.footer-copyright{animation:footer-exit-down var(--duration-normal) var(--ease-out) both}.home-exiting .footer-stats-row>*:nth-child(1){animation-delay:.12s}.home-exiting .footer-stats-row>*:nth-child(2){animation-delay:148ms}.home-exiting .footer-stats-row>*:nth-child(3){animation-delay:176ms}.home-exiting .footer-stats-row>*:nth-child(4){animation-delay:204ms}.home-exiting .home-footer>p.footer-copyright{animation-delay:232ms}.home-entering .site-nav>*{animation:nav-enter-down var(--duration-normal) var(--ease-out) both}.home-entering .site-nav>*:nth-child(1){animation-delay:90ms}.home-entering .site-nav>*:nth-child(2){animation-delay:118ms}.home-entering .site-nav>*:nth-child(3){animation-delay:146ms}.home-entering .site-nav>*:nth-child(4){animation-delay:174ms}.home-entering .site-nav>*:nth-child(5){animation-delay:202ms}.home-entering .site-nav>*:nth-child(6){animation-delay:.23s}.home-entering .site-nav>*:nth-child(7){animation-delay:.26s}.home-entering .site-nav>*:nth-child(8){animation-delay:.29s}.home-entering .hero-social a{animation:social-enter-up var(--duration-normal) var(--ease-out) both}.home-entering .hero-social a:nth-child(1){animation-delay:.15s}.home-entering .hero-social a:nth-child(2){animation-delay:178ms}.home-entering .hero-social a:nth-child(3){animation-delay:206ms}.home-entering .hero-social a:nth-child(4){animation-delay:234ms}.home-entering .hero-social a:nth-child(5){animation-delay:262ms}.home-entering .hero-social a:nth-child(6){animation-delay:.29s}.home-entering .footer-stats-row>*,.home-entering .home-footer>p.footer-copyright{animation:footer-enter-up var(--duration-normal) var(--ease-out) both}.home-entering .home-footer>p.footer-copyright{animation-delay:.21s}.home-entering .footer-stats-row>*:nth-child(4){animation-delay:238ms}.home-entering .footer-stats-row>*:nth-child(3){animation-delay:266ms}.home-entering .footer-stats-row>*:nth-child(2){animation-delay:294ms}.home-entering .footer-stats-row>*:nth-child(1){animation-delay:322ms}html:not(.article-transition) body.page-exiting .side-nav:not(.transition-stable) .nav-link{animation:side-nav-exit-left var(--duration-normal) var(--ease-out) both}html:not(.article-transition) body.page-exiting .side-nav:not(.transition-stable) .nav-link:nth-child(1){animation-delay:0ms}html:not(.article-transition) body.page-exiting .side-nav:not(.transition-stable) .nav-link:nth-child(2){animation-delay:28ms}html:not(.article-transition) body.page-exiting .side-nav:not(.transition-stable) .nav-link:nth-child(3){animation-delay:56ms}html:not(.article-transition) body.page-exiting .side-nav:not(.transition-stable) .nav-link:nth-child(4){animation-delay:84ms}html:not(.article-transition) body.page-exiting .side-nav:not(.transition-stable) .nav-link:nth-child(5){animation-delay:112ms}html:not(.article-transition) body.page-exiting .side-nav:not(.transition-stable) .nav-link:nth-child(6){animation-delay:.14s}html:not(.article-transition) body.page-exiting .notes-aside:not(.transition-stable) .notes-footer-actions .notes-action-button,html:not(.article-transition) body.page-exiting .notes-aside:not(.transition-stable) .notes-footer-links,html:not(.article-transition) body.page-exiting .notes-aside:not(.transition-stable) .notes-footer>p{animation:aside-exit-right var(--duration-normal) var(--ease-out) both}html:not(.article-transition) body.page-exiting .notes-aside:not(.transition-stable) .notes-footer-actions .notes-action-button:nth-child(1){animation-delay:40ms}html:not(.article-transition) body.page-exiting .notes-aside:not(.transition-stable) .notes-footer-actions .notes-action-button:nth-child(2){animation-delay:68ms}html:not(.article-transition) body.page-exiting .notes-aside:not(.transition-stable) .notes-footer-actions .notes-action-button:nth-child(3){animation-delay:96ms}html:not(.article-transition) body.page-exiting .notes-aside:not(.transition-stable) .notes-footer-links{animation-delay:124ms}html:not(.article-transition) body.page-exiting .notes-aside:not(.transition-stable) .notes-footer>p{animation-delay:152ms}html.article-transition .persistent-logo,html.article-transition .side-rail,html.article-transition .notes-page,html.article-transition .side-nav,html.article-transition .side-nav:not(.transition-stable) .nav-link,html.article-transition .side-avatar-link,html.article-transition .side-avatar-wrap,html.article-transition .notes-aside,html.article-transition .notes-aside:not(.transition-stable) .notes-footer-actions .notes-action-button,html.article-transition .notes-aside:not(.transition-stable) .notes-footer-links,html.article-transition .notes-aside:not(.transition-stable) .notes-footer>p{animation:none!important;opacity:1!important;transform:none!important}html.article-transition [data-title-transition-key],html.article-transition [data-transition-scope]{view-transition-name:none!important}html:not(.article-transition) body.page-entering.page-body .side-nav:not(.transition-stable) .nav-link{animation:side-nav-enter var(--duration-normal) var(--ease-out) both}html:not(.article-transition) body.page-entering.page-body .side-nav:not(.transition-stable) .nav-link:nth-child(1){animation-delay:80ms}html:not(.article-transition) body.page-entering.page-body .side-nav:not(.transition-stable) .nav-link:nth-child(2){animation-delay:112ms}html:not(.article-transition) body.page-entering.page-body .side-nav:not(.transition-stable) .nav-link:nth-child(3){animation-delay:144ms}html:not(.article-transition) body.page-entering.page-body .side-nav:not(.transition-stable) .nav-link:nth-child(4){animation-delay:176ms}html:not(.article-transition) body.page-entering.page-body .side-nav:not(.transition-stable) .nav-link:nth-child(5){animation-delay:208ms}html:not(.article-transition) body.page-entering.page-body .side-nav:not(.transition-stable) .nav-link:nth-child(6){animation-delay:.24s}html:not(.article-transition) body.page-entering .notes-aside:not(.transition-stable) .notes-footer-actions .notes-action-button{animation:aside-enter var(--duration-normal) var(--ease-out) both}html:not(.article-transition) body.page-entering .notes-aside:not(.transition-stable) .notes-footer-actions .notes-action-button:nth-child(1){animation-delay:.17s}html:not(.article-transition) body.page-entering .notes-aside:not(.transition-stable) .notes-footer-actions .notes-action-button:nth-child(2){animation-delay:205ms}html:not(.article-transition) body.page-entering .notes-aside:not(.transition-stable) .notes-footer-actions .notes-action-button:nth-child(3){animation-delay:.24s}html:not(.article-transition) body.page-entering .notes-aside:not(.transition-stable) .notes-footer-links,html:not(.article-transition) body.page-entering .notes-aside:not(.transition-stable) .notes-footer>p{animation:aside-enter var(--duration-normal) var(--ease-out) both}html:not(.article-transition) body.page-entering .notes-aside:not(.transition-stable) .notes-footer-links{animation-delay:.28s}html:not(.article-transition) body.page-entering .notes-aside:not(.transition-stable) .notes-footer>p{animation-delay:.32s}@media(prefers-reduced-motion:no-preference){.archive-item-row.is-intro-revealing .archive-item,.archive-item-row.reveal-trigger .archive-item{opacity:1;animation:archive-intro-fade-up .38s cubic-bezier(.2,.6,.2,1) both;animation-delay:calc(var(--stagger-index, 0) * 55ms)}}@media(min-width:961px){.note-body .note-back-link{animation:article-back-enter var(--post-enter-duration) var(--ease-page) .2s both}}.note-body .note-meta .meta-transition-group>*,.note-body .note-meta>.meta-stagger,.note-body .note-updated.meta-stagger{animation:article-content-enter-mini var(--post-enter-duration) var(--ease-page) both;opacity:0}@media(min-width:961px){.note-body .note-meta .meta-transition-group>time{animation-delay:.16s}.note-body .note-meta .meta-transition-group>.reading-time{animation-delay:185ms}.note-body .note-meta>.meta-stagger:nth-child(2){animation-delay:.21s}.note-body .note-meta>.meta-stagger:nth-child(3){animation-delay:235ms}.note-body .note-updated.meta-stagger{animation-delay:.26s}}@media(max-width:960px){.note-body .note-meta .meta-transition-group>time,.note-body .note-meta .meta-transition-group>.reading-time{animation:none;opacity:1;transform:none}.note-body .note-meta>.meta-stagger:nth-child(2){animation-delay:.16s}.note-body .note-meta>.meta-stagger:nth-child(3){animation-delay:185ms}.note-body .note-updated.meta-stagger{animation-delay:.21s}}.note-body .note-summary{animation:article-content-enter-mini var(--post-enter-duration) var(--ease-page) 205ms both}@media(min-width:1281px){.note-body .note-toc-header{animation:article-content-enter-mini var(--post-enter-duration) var(--ease-page) backwards;animation-delay:175ms}.note-body .note-toc-panel li{animation:article-content-enter var(--post-enter-duration) var(--ease-page) backwards;animation-delay:calc(175ms + min(var(--toc-index, 0),8)*25ms)}.note-body .note-right-controls>*{animation:article-content-enter var(--post-enter-duration) var(--ease-page) backwards}.note-body .note-right-controls>*:nth-child(1){animation-delay:.15s}.note-body .note-right-controls>*:nth-child(2){animation-delay:.2s}.note-body .note-right-controls>*:nth-child(3){animation-delay:.25s}}.note-body .article-stagger-meta>*{animation:article-content-enter-mini var(--post-enter-duration) var(--ease-page) both;animation-delay:calc(.1s + min(var(--stagger-index, 0),10)*30ms);opacity:0}.note-body .post-content>*{animation:article-content-enter var(--post-enter-duration) var(--ease-page) both;opacity:0}.note-body .post-content>*:nth-child(1){animation-delay:.15s}.note-body .post-content>*:nth-child(2){animation-delay:.2s}.note-body .post-content>*:nth-child(3){animation-delay:.25s}.note-body .post-content>*:nth-child(4){animation-delay:.3s}.note-body .post-content>*:nth-child(5){animation-delay:.35s}.note-body .post-content>*:nth-child(6){animation-delay:.4s}.note-body .post-content>*:nth-child(7){animation-delay:.45s}.note-body .post-content>*:nth-child(8){animation-delay:.5s}.note-body .post-content>*:nth-child(9){animation-delay:.55s}.note-body .post-content>*:nth-child(10){animation-delay:.6s}.note-body .post-content>*:nth-child(11){animation-delay:.65s}.note-body .post-content>*:nth-child(12){animation-delay:.7s}.note-body .post-content>*:nth-child(13){animation-delay:.75s}.note-body .post-content>*:nth-child(14){animation-delay:.8s}.note-body .post-content>*:nth-child(15){animation-delay:.85s}.note-body .post-content>*:nth-child(n+16){animation-delay:.9s}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-delay:0ms!important;animation-duration:1ms!important;scroll-behavior:auto!important;transition-duration:1ms!important}.hero-avatar-wrap,.side-avatar-wrap,.hero-name,.slogan-glyph,.notes-brand-name,.notes-item-title a,.article-meta-rows,.article-shared-meta,.article-stagger-meta,.note-title span,[data-article-shared]{view-transition-name:none!important}::view-transition-group(*),::view-transition-old(*),::view-transition-new(*){animation-duration:1ms!important}.note-back-link,.note-toc,.notes-item,.article-meta-rows,.article-shared-meta,.article-stagger-meta,.article-stagger-meta>*,.archive-year,.archive-item,.note-summary,.post-content>*{animation:none!important;opacity:1!important;transform:none!important;clip-path:none!important}.note-toc,.note-toc-panel{transition:none!important}.note-toc:not(.is-open) .note-toc-panel{opacity:0!important;transform:none!important;visibility:hidden!important}}html[data-reduced-motion=true] *,html[data-reduced-motion=true] *:before,html[data-reduced-motion=true] *:after{animation-delay:0ms!important;animation-duration:1ms!important;scroll-behavior:auto!important;transition-duration:1ms!important}html[data-reduced-motion=true] .hero-avatar-wrap,html[data-reduced-motion=true] .side-avatar-wrap,html[data-reduced-motion=true] .hero-name,html[data-reduced-motion=true] .slogan-glyph,html[data-reduced-motion=true] .notes-brand-name,html[data-reduced-motion=true] .notes-item-title a,html[data-reduced-motion=true] .article-meta-rows,html[data-reduced-motion=true] .article-shared-meta,html[data-reduced-motion=true] .article-stagger-meta,html[data-reduced-motion=true] .note-title span,html[data-reduced-motion=true] [data-article-shared]{view-transition-name:none!important}html[data-reduced-motion=true] .note-back-link,html[data-reduced-motion=true] .note-toc,html[data-reduced-motion=true] .notes-item,html[data-reduced-motion=true] .article-meta-rows,html[data-reduced-motion=true] .article-shared-meta,html[data-reduced-motion=true] .article-stagger-meta,html[data-reduced-motion=true] .article-stagger-meta>*,html[data-reduced-motion=true] .archive-year,html[data-reduced-motion=true] .archive-item,html[data-reduced-motion=true] .note-summary,html[data-reduced-motion=true] .post-content>*{animation:none!important;opacity:1!important;transform:none!important;clip-path:none!important}html[data-reduced-motion=true] .note-toc,html[data-reduced-motion=true] .note-toc-panel{transition:none!important}html[data-reduced-motion=true] .note-toc:not(.is-open) .note-toc-panel{opacity:0!important;transform:none!important;visibility:hidden!important}.title-glyph{view-transition-class:article-title-glyph;margin:0;padding:0;border:0;display:inline-block}html.article-transition::view-transition-group(.article-title-glyph){animation-duration:var(--duration-shared, .5s);animation-timing-function:cubic-bezier(.22,1,.36,1)}.slogan-glyph{view-transition-class:site-slogan-glyph;margin:0;padding:0;display:inline-block;white-space:pre-wrap}html::view-transition-group(.site-slogan-glyph){animation-duration:var(--duration-shared);animation-timing-function:var(--ease-out)} diff --git a/internal/embedded/static/css/bundles/pages.css b/internal/embedded/static/css/bundles/pages.css new file mode 100644 index 00000000..f080a381 --- /dev/null +++ b/internal/embedded/static/css/bundles/pages.css @@ -0,0 +1 @@ +.notes-page{display:block;margin:0 auto;max-width:var(--notes-content-width);width:100%}.notes-list{min-width:0;width:100%}.notes-month:before{background:var(--color-line);content:"";display:block;height:1px;margin-bottom:clamp(1.125rem,2.2vw,1.5rem);width:clamp(40px,6vw,44px)}.notes-month+.notes-month{margin-top:clamp(.9rem,2.4vw,1.35rem)}.notes-item{padding:0 0 clamp(1.75rem,3.4vw,2.2rem)}.notes-month-list .notes-item:first-child{padding-top:0}.notes-month-list .notes-item:last-child{padding-bottom:clamp(1.25rem,2.6vw,1.7rem)}.notes-item-header{align-items:baseline;display:flex;flex-wrap:wrap;gap:.55rem .85rem}.notes-item-indicators{display:flex;align-items:center;gap:.3em;margin-left:-.3em}.notes-item-title{font-family:var(--font-serif);font-size:1.05rem;font-weight:700;line-height:1.35;margin:0;max-width:100%;min-width:0}.notes-item-title a{box-sizing:content-box;color:var(--color-text);display:inline-block;hyphens:auto;max-width:100%;overflow-wrap:anywhere;padding-right:.04em;text-decoration:none;vertical-align:top;white-space:normal;word-break:normal}.notes-item-title a:hover,.notes-item-title a:focus-visible{color:var(--color-hover-text)}.notes-item-pin{background-color:var(--color-muted);display:inline-block;height:1.1em;margin-left:.3em;mask-image:url(/icons/ui/pin.svg);mask-position:center;mask-repeat:no-repeat;mask-size:contain;vertical-align:text-bottom;width:1.1em}.notes-item-music,.notes-item-bilingual{color:var(--color-muted);font-size:1.1em;margin-left:.3em;vertical-align:text-bottom;display:inline-block;line-height:1}hr.notes-divider{border:none;border-top:1px dashed var(--color-line);margin:clamp(.5rem,1.5vw,1rem) 0 clamp(1.5rem,3.5vw,2.5rem)}.notes-item-meta{color:var(--color-muted);display:inline-flex;font-family:var(--font-cormorant);font-size:1.05rem;font-weight:600;font-style:italic;gap:.7rem;line-height:1;margin:0;white-space:nowrap}.notes-item-summary,.notes-empty{color:var(--color-muted);font-family:var(--font-body);font-size:.98rem;line-height:1.75;margin:12px 0 0;max-width:var(--notes-content-width)}.notes-aside{align-self:start;min-width:0;position:sticky;top:88px}.articles{margin-top:12px}.articles h2{font-size:1.25rem;margin:0}.note-list{list-style:none;margin:0;padding:0}.note-list li{border-bottom:1px solid var(--color-line);padding:20px 0}.note-list a{font-size:1.15rem;font-weight:700}.note-list time{color:var(--color-muted);display:block;font-size:.9rem}.note-list .note-summary{color:var(--color-muted);font-size:1.05rem}@media(max-width:960px){.notes-aside{display:none!important}.notes-item-summary{display:none}.notes-item{padding:0 0 clamp(1.2rem,3.4vw,1.5rem)}.notes-item-header{display:grid;grid-template-columns:auto 1fr;grid-template-areas:"title title" "indicators meta";gap:.25rem .65rem;align-items:center}.notes-item-title{grid-area:title;font-size:1rem;margin-bottom:0}.notes-item-indicators{grid-area:indicators}.notes-item-meta{grid-area:meta;align-items:center;display:flex;font-size:1.05rem;gap:.65em;margin:0;justify-self:start}}.tag-back-container{align-items:center;display:flex;gap:.5rem;margin-bottom:clamp(1.5rem,3.5vw,2.5rem)}.tag-back-container[hidden]{display:none!important}.tag-back-btn{align-items:center;background:transparent;border:none;border-radius:50%;color:var(--color-muted);cursor:pointer;display:inline-flex;justify-content:center;padding:.2rem;text-decoration:none;transition:color .16s ease,background .16s ease}.tag-back-btn:hover,.tag-back-btn:focus-visible{color:var(--color-hover-text);background:var(--color-surface)}.tag-back-btn .material-symbol{font-size:1.5rem}.tag-back-title{color:var(--color-text);font-family:var(--font-serif);font-size:clamp(1.5rem,2.2vw,1.8rem);font-weight:700;margin:0}.pagination{margin-top:3rem;margin-bottom:2rem;padding-top:1.5rem;border-top:1px dashed var(--color-line)}.pagination-inner{display:flex;justify-content:space-between;align-items:center;font-family:var(--font-cormorant);font-size:.95rem;color:var(--color-muted)}.pagination-btn{display:inline-flex;align-items:center;gap:.35rem;text-decoration:none;color:var(--color-muted);transition:color var(--transition-fast, .2s);cursor:pointer}.pagination-btn:hover:not(.is-disabled){color:var(--color-accent)}.pagination-btn.is-disabled{opacity:.3;pointer-events:none}.pagination-info{flex-grow:1;text-align:center;letter-spacing:.05em}.memos-body .page-main{padding-left:calc(var(--side-rail-width) + 24px);padding-right:40px}.memos-page{--memo-gutter: 24px;--memo-header-height: 72px;display:grid;grid-template-columns:minmax(0,44rem) 16rem;align-items:stretch;max-width:60rem;margin:0 auto;border:1px solid var(--color-line)}.memos-feed{min-width:0}.memos-header{display:flex;align-items:stretch;justify-content:space-between;min-height:var(--memo-header-height)}.memos-heading{display:flex;align-items:baseline;align-self:center;gap:10px;padding:16px var(--memo-gutter);white-space:nowrap}.memos-header h1{font-family:var(--font-serif);font-size:var(--note-title-size);line-height:1.2;margin:0}.memos-count{color:var(--color-muted);font-size:.78rem;font-variant-numeric:tabular-nums}.memos-toolbar{display:flex;width:55%;max-width:22rem;min-width:0;border-left:1px solid var(--color-line)}.memos-search{display:flex;flex:1;min-width:0;align-items:center;gap:10px;padding:12px 20px}.memos-search .material-symbol{font-size:1.2rem;color:var(--color-muted)}.memos-search input{background:none;border:0;outline:none;color:var(--color-text);width:100%;min-width:0;font:inherit;font-size:.9rem}.memos-search:focus-within{box-shadow:inset 0 -2px var(--color-accent)}.memos-search input::placeholder{color:var(--color-muted);opacity:.8}.memos-filter-toggle{display:none}.memos-active-filters{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:10px var(--memo-gutter);border-top:1px solid var(--color-line);color:var(--color-muted);font-size:.85rem}.memos-active-filters [data-memos-active-label]{min-width:0;overflow-wrap:anywhere}.memos-active-filters button{flex-shrink:0}.memos-active-filters button,.memos-all-dates{border:0;padding:4px 0;background:none;color:var(--color-accent);font:inherit;cursor:pointer}.memos-cards{display:flex;flex-direction:column}.memo-card{display:grid;grid-template-columns:36px minmax(0,1fr);gap:14px;padding:24px var(--memo-gutter) 26px;border-top:1px solid var(--color-line);min-width:0}.memo-avatar-column{padding-top:1px}.memo-entry{min-width:0}.memo-entry-header{display:flex;align-items:baseline;flex-wrap:wrap;gap:4px 12px;min-height:28px}.memo-author{display:flex;align-items:center;gap:10px;color:var(--color-muted);font-size:.88rem}.memo-avatar{width:30px;height:30px;border-radius:50%;object-fit:cover;flex-shrink:0}.memo-avatar-column .memo-avatar{display:block;width:36px;height:36px}.memo-entry-header .memo-author{color:var(--color-text);font-weight:600}.memo-card .memo-content{margin:4px 0 0;font-size:var(--note-text-size);overflow-wrap:anywhere}.memo-card .memo-content>*,.memo-card .memo-content p{margin-bottom:16px}.memo-content>:first-child{margin-top:0}.memo-card .memo-content>:last-child,.memo-card .memo-content>:last-child>p:last-child{margin-bottom:0}.memo-content img{max-width:100%}.memos-page .memo-content{container-type:inline-size}.memos-page .memo-content .memo-photo-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.memos-page .memo-content .memo-photo-grid>*{margin:0;min-width:0}.memos-page .memo-content .memo-photo-grid img{display:block;width:100%;height:auto;aspect-ratio:4 / 3;object-fit:cover;border-radius:6px}.memo-content .md-gallery{max-width:100%}.memos-page .memo-photo-tile{position:relative;width:fit-content;max-width:calc(50cqw - 4px);overflow:hidden;border-radius:6px}.memos-page span.memo-photo-tile{display:inline-block;vertical-align:middle}.memos-page .memo-photo-grid .memo-photo-tile{width:auto;max-width:100%}.memos-page .memo-photo-tile img{display:block;width:auto;max-height:calc((100cqw - 8px)*.375);margin:0;transition:transform .22s cubic-bezier(.22,.61,.36,1),filter .22s cubic-bezier(.22,.61,.36,1)}.memos-page .memo-content .memo-photo-tile figcaption{padding:24px 16px 12px}.memos-page .has-more-photos:before{content:"";position:absolute;inset:0 0 auto;height:48px;max-height:50%;z-index:1;background:linear-gradient(to bottom,rgb(0 0 0 / .55),transparent);pointer-events:none}.memos-page .memo-content .memo-more-photos{position:absolute;right:8px;top:8px;z-index:1;display:inline-flex;align-items:center;justify-content:center;min-width:32px;min-height:28px;padding:2px 10px;background:none;color:#fff;font-family:var(--font-ui);font-size:.78rem;line-height:1.4;text-decoration:none}.memo-photo-count,.memo-photo-hint{overflow:hidden;white-space:nowrap;transition:opacity .22s cubic-bezier(.22,.61,.36,1)}.memo-photo-count{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:1.1rem;opacity:1}.memo-photo-hint{max-width:0;opacity:0;transition:max-width .22s cubic-bezier(.22,.61,.36,1),opacity .22s cubic-bezier(.22,.61,.36,1)}.memo-photo-tile:hover .memo-photo-count,.memo-photo-tile:focus-within .memo-photo-count{opacity:0}.memo-photo-tile:hover .memo-photo-hint,.memo-photo-tile:focus-within .memo-photo-hint{max-width:16em;opacity:1}.memos-page .has-more-photos:hover img,.memos-page .has-more-photos:focus-within img{transform:scale(1.025);filter:brightness(.9)}@media(prefers-reduced-motion:reduce){.memos-page .memo-photo-tile img,.memo-photo-count,.memo-photo-hint{transition:none}.memos-page .has-more-photos:hover img,.memos-page .has-more-photos:focus-within img{transform:none}}html[data-reduced-motion=true] .memos-page .memo-photo-tile img,html[data-reduced-motion=true] .memo-photo-count,html[data-reduced-motion=true] .memo-photo-hint{transition:none}html[data-reduced-motion=true] .memos-page .has-more-photos img{transform:none}.memo-footer{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 16px;margin-top:18px;color:var(--color-muted);font-size:var(--note-text-size);line-height:1.75}.memo-labels{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px}.memo-location{display:inline-flex;align-items:center;gap:3px}.memo-location .material-symbol{font-size:1em}.memo-tag{padding:0;background:none;border:0;color:var(--color-accent);font:inherit;cursor:pointer}.memo-dates{display:flex;flex-direction:column;align-items:flex-end;gap:2px;margin-left:auto}.memo-updated{color:var(--color-muted);font-size:.75rem}.memo-permalink{display:inline-flex;align-items:center;gap:5px;margin-left:auto;color:var(--color-muted);font-size:.75rem;font-variant-numeric:tabular-nums;text-decoration:none;white-space:nowrap}.memo-permalink:hover{color:var(--color-accent)}.memo-permalink .material-symbol{font-size:.9rem}.memos-aside{min-width:0;border-left:1px solid var(--color-line)}.memos-aside .memos-filters{position:sticky;top:88px}.memos-filters{color:var(--color-muted);font-size:.85rem}.memos-calendar-heading{display:flex;align-items:center;justify-content:space-between;gap:8px;min-height:var(--memo-header-height, 64px);padding:12px 16px;border-bottom:1px solid var(--color-line);color:var(--color-text)}.memos-calendar-heading button{display:flex;padding:4px;border:0;background:none;color:var(--color-muted);cursor:pointer}.memos-calendar-heading button:disabled{opacity:.3;cursor:default}.memos-calendar-heading button .material-symbol{font-size:1.2rem}.memos-calendar-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:4px 0;padding:16px 16px 0;text-align:center}.memos-calendar-grid>span{display:grid;place-items:center;min-height:30px;font-size:.76rem;color:var(--color-faint)}.memos-calendar-grid>.memos-weekday{color:var(--color-muted);padding-bottom:4px}.memos-calendar-grid button{position:relative;min-width:0;min-height:30px;border:0;border-radius:6px;background:none;color:var(--color-text);font:inherit;font-variant-numeric:tabular-nums;cursor:pointer}.memos-calendar-grid button:after{position:absolute;content:"";width:3px;height:3px;bottom:2px;left:calc(50% - 1.5px);background:var(--color-accent);border-radius:50%}.memos-calendar-grid button:hover{background:var(--color-accent-soft)}.memos-calendar-grid button[aria-pressed=true]{background:var(--color-accent);color:var(--color-paper)}.memos-calendar-grid button[aria-pressed=true]:after{background:currentColor}.memos-all-dates{font-size:.8rem;margin:12px 20px 20px}.memos-tag-filter{border-top:1px solid var(--color-line);border-bottom:1px solid var(--color-line)}.memos-tag-filter h2{color:var(--color-text);font:inherit;margin:0;padding:16px 20px;border-bottom:1px solid var(--color-line)}.memos-filter-tags{font-size:var(--note-text-size);line-height:1.75;display:flex;flex-wrap:wrap;gap:8px 12px;padding:16px 20px 20px}.memos-filter-tags button{display:inline-flex;align-items:baseline;gap:6px;font:inherit;border:0;padding:3px 0;background:none;color:var(--color-muted);cursor:pointer}.memos-filter-tags button[aria-pressed=true],.memos-filter-tags button:hover{color:var(--color-accent)}.memos-filter-tags small{font-size:.75rem;opacity:.65}.memos-empty{color:var(--color-muted);margin:0;padding:28px var(--memo-gutter);border-top:1px solid var(--color-line)}.memos-empty-state{display:flex;flex-direction:column;align-items:center;gap:28px;padding:48px var(--memo-gutter);border-top:1px solid var(--color-line);color:var(--color-muted);text-align:center}.memos-empty-scene{display:block;width:min(100%,28rem);height:auto;flex-shrink:0}.memos-empty-state p{margin:0}.memos-page [hidden],.memo-content [data-memo-overflow]{display:none!important}.memos-page button:focus-visible,.memos-page a:focus-visible,.memos-filters button:focus-visible{outline:2px solid var(--color-accent);outline-offset:3px}::highlight(memo-search){background:var(--color-marker);color:var(--color-text)}.memo-search-highlight{background:var(--color-marker);color:inherit}.memo-detail-back{display:flex;align-items:center;color:var(--color-muted);text-decoration:none}@media(max-width:1100px)and (min-width:961px){.memos-body .page-main{padding-left:210px;padding-right:24px}.memos-page{grid-template-columns:minmax(0,1fr) 13rem;--memo-gutter: 20px}}@media(max-width:960px){.memos-body .page-main{padding:24px 20px 56px}.memos-page{display:block;max-width:var(--notes-content-width)}.memos-aside{display:none}.memos-filter-toggle{display:grid;place-items:center;flex-shrink:0;width:44px;border:0;border-left:1px solid var(--color-line);color:var(--color-muted);background:none;cursor:pointer}.memos-filter-toggle .material-symbol{font-size:1.15rem}.memos-toolbar{flex:1}.memos-filters{max-width:24rem;margin:0 auto;font-size:.95rem}.memos-calendar-grid>span,.memos-calendar-grid button{min-height:40px}.memos-filter-tags{gap:10px 16px}}@media(max-width:600px){.memos-body .page-main{padding:0 0 40px}.memos-page{--memo-gutter: 16px;--memo-header-height: 64px;border-top:0;border-left:0;border-right:0}.memos-header h1{font-size:1.25rem}.memos-heading{gap:8px}.memos-search{padding:12px;gap:6px}.memos-search input{font-size:.82rem}.memo-card{grid-template-columns:30px minmax(0,1fr);gap:10px;padding-top:20px;padding-bottom:22px}.memo-avatar-column .memo-avatar{width:30px;height:30px}.memo-entry-header{gap:4px 8px}.memo-permalink{font-size:.7rem}}.memo-body .memo-location,.memo-body .note-tag-capsule{font-size:var(--note-text-size);line-height:1.75}.memo-card[data-memo-card]{cursor:pointer}.memo-card .memo-avatar{border-radius:8px}.memo-card .memo-tag{text-decoration:none}.memo-card .memo-updated,.memo-card .memo-number,.memo-card [data-like-count],.memos-count .memo-number{font-family:"Cormorant Garamond Meta",var(--font-cormorant);font-style:italic;font-weight:600;font-synthesis:none}.memo-permalink,.memo-updated,.memos-count .memo-number{font-size:clamp(1rem,1.3vw,1.12rem)}.memo-actions{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:18px;color:var(--color-muted)}.memo-actions .article-action{min-width:32px;min-height:32px;gap:6px;font-size:clamp(1rem,1.3vw,1.12rem)}.memo-actions .material-symbol{font-size:1.15rem}.memo-actions>:last-child:after{left:auto;right:0;transform:none}.memo-actions .memo-view-action,.memo-actions .is-unavailable{cursor:default}.memo-actions .is-unavailable{opacity:.5}.memo-actions .article-action:focus-visible,.memo-permalink:focus-visible{outline:2px solid var(--color-accent);outline-offset:3px}.memo-detail-layout{display:grid;grid-template-columns:minmax(0,44rem) 16rem;max-width:60rem;margin:0 auto;border:1px solid transparent}.memo-detail-page{--memo-gutter: 24px;min-width:0;outline:1px solid var(--color-line)}.memo-detail-toolbar{display:flex;align-items:center;gap:16px;min-height:72px;box-sizing:border-box;padding:16px var(--memo-gutter)}.memo-detail-toolbar h1{font-size:1.2rem;margin:0;font-family:var(--font-serif)}.memo-detail-toolbar .bilingual-toggle-btn{margin-left:auto}.memo-detail-post .post-content{margin-top:4px}.memo-detail-page .post-comments{margin:0;padding:24px var(--memo-gutter);border-top:1px solid var(--color-line);scroll-margin-top:80px}.memo-body .page-main{padding-left:calc(var(--side-rail-width) + 24px);padding-right:40px}@media(max-width:960px){.memo-body .page-main{padding:24px 20px 56px}}@media(max-width:600px){.memo-body .page-main{padding:0 0 40px}.memo-detail-page{--memo-gutter: 16px;border:0}.memo-actions{gap:4px}.memo-permalink,.memo-updated{font-size:1rem}}.memos-filters [data-memo-tag],.memos-filters [data-memos-date],.memo-labels button{touch-action:manipulation;user-select:none;-webkit-touch-callout:none}@media(max-width:1100px)and (min-width:961px){.memo-body .page-main{padding-left:210px;padding-right:24px}.memo-detail-layout{grid-template-columns:minmax(0,1fr) 13rem}.memo-detail-page{--memo-gutter: 20px}}@media(max-width:960px){.memo-detail-layout{display:block;max-width:var(--notes-content-width)}}@media(max-width:600px){.memo-detail-layout{border:0}.memo-detail-page{outline:none}.memo-detail-toolbar{min-height:64px}}.note-detail-page{position:relative;max-width:min(var(--note-body-width),100%)}.note-detail{margin-left:0;max-width:var(--note-body-width);min-width:0;position:relative;width:min(var(--note-body-width),100%)}.note-toc-wrapper{pointer-events:auto;position:static;width:100%}.note-sticky-column{display:flex;flex-direction:column;pointer-events:auto;position:static}.note-toc-stage{position:relative;width:100%}.note-toc{clip-path:inset(0);color:var(--color-muted);font-family:var(--font-ui);font-size:.78rem;line-height:1.45;margin-bottom:clamp(2rem,5vw,3.2rem);max-width:100%;opacity:1;transform:translateY(0);transition:color .16s ease,opacity var(--reading-toc-rail-state-duration) ease,transform var(--reading-toc-rail-state-duration) var(--reading-toc-rail-state-ease),clip-path var(--reading-toc-rail-state-duration) var(--reading-toc-rail-state-ease),visibility 0s linear 0s;visibility:visible;width:100%}.note-toc-panel{max-height:none}.note{min-width:0;position:relative}.note-title-wrapper{position:relative}.note-back-link{align-items:center;border-radius:999px;color:var(--color-muted);display:inline-flex;height:calc(var(--note-title-size) * 1.15);justify-content:center;left:-3.5rem;position:absolute;text-decoration:none;top:0;transition:color .16s ease;width:calc(var(--note-title-size) * 1.15)}.note-back-link .material-symbol{font-size:var(--note-title-size)}.note-back-link:hover,.note-back-link:focus-visible{color:var(--color-hover-text)}.note-back-link:hover .material-symbol,.note-back-link:focus-visible .material-symbol{font-variation-settings:"FILL" 1,"wght" 400,"GRAD" 0,"opsz" 24}.note-back-link:focus-visible{outline:1px solid var(--color-accent);outline-offset:4px}.note-header{margin-bottom:clamp(2.5rem,5vw,4.5rem)}.note-title{color:var(--color-text);font-family:var(--font-serif);font-size:var(--note-title-size);font-weight:700;hyphens:auto;letter-spacing:0;line-height:1.15;margin:0;max-width:100%;overflow-wrap:anywhere;word-break:normal}.note-title>span{box-sizing:content-box;display:inline-block;max-width:100%;padding-right:.04em;vertical-align:top;white-space:normal}.article-meta-rows{margin:1.2rem 0 0;display:flex;flex-direction:column;gap:.6rem;color:var(--color-muted);font-family:"Cormorant Garamond Meta",var(--font-serif);font-style:italic;font-weight:600;font-size:clamp(.95rem,1.3vw,1.12rem);line-height:1}.article-shared-meta,.article-stagger-meta{display:flex;flex-wrap:wrap;gap:.8rem;align-items:center}.article-shared-meta>*,.article-stagger-meta>*{display:inline-flex;align-items:center;gap:.3em}.notes-item-pin{background-color:var(--color-muted);display:inline-block;height:1.1em;mask-image:url(/icons/ui/pin.svg);mask-position:center;mask-repeat:no-repeat;mask-size:contain;width:1.1em}.article-actions-meta .article-action,.article-actions-meta .bilingual-toggle-btn{white-space:nowrap}.article-actions-meta .bilingual-toggle-btn{width:auto;height:auto;min-height:28px;gap:.35em;transform:none}.article-actions-meta .bilingual-toggle-btn .material-symbol{font-size:1.15em}.article-actions-meta .is-unavailable{cursor:default;opacity:.5}.notes-item-music,.notes-item-bilingual{color:var(--color-muted);font-size:1.1em;line-height:1}.note-summary{color:var(--color-muted);font-size:.94rem;line-height:1.75;margin:1.25rem 0 0;max-width:42rem}.note-summary:first-letter{color:var(--color-accent);float:left;font-family:var(--font-ui);font-size:3.4em;font-style:italic;font-weight:700;line-height:.92;margin-top:4px;padding:4px 10px 0 0}@media(min-width:1200px){.note-detail-page{max-width:var(--note-body-width)}.note-detail-page .notes-aside{height:100%;left:calc(100% + clamp(28px,3vw,48px));margin-top:0;position:absolute;top:0;width:var(--note-toc-width)}.note-toc-wrapper{--reading-toc-rail-eligible: 1;--reading-toc-rail-direction: 1;--reading-toc-rail-line-inset: 12px;pointer-events:auto;position:sticky;top:88px;width:var(--note-toc-width);z-index:10}.note-sticky-column{pointer-events:auto;position:static}.note-toc-stage{width:var(--note-toc-width)}.note-toc{margin-bottom:0;max-width:none;width:var(--note-toc-width)}.note-toc-panel{max-height:calc(100dvh - 88px - 3rem)}.note-toc-stage.has-reading-rail{height:var(--reading-toc-rail-height)}.note-toc-stage.has-reading-rail .note-toc{left:0;position:absolute;top:0}.note-toc-stage.has-reading-rail .note-toc-panel{max-height:calc(var(--reading-toc-rail-height) - 3rem)}.note-toc-stage.has-reading-rail.is-reading:not(.is-hovered) .note-toc{pointer-events:none;transition:visibility 0s linear calc(var(--reading-toc-rail-state-duration) + .4s);visibility:hidden}.note-toc-stage.has-reading-rail.is-reading .note-toc-header,.note-toc-stage.has-reading-rail.is-reading .note-toc-indicator,.note-toc-stage.has-reading-rail.is-reading .note-toc-reading-controls{transition:opacity var(--reading-toc-rail-state-duration) ease,transform var(--reading-toc-rail-state-duration) var(--reading-toc-rail-state-ease)}.note-toc-stage.has-reading-rail.is-reading .note-toc-panel li{transition:opacity var(--reading-toc-rail-state-duration) ease,transform var(--reading-toc-rail-state-duration) var(--reading-toc-rail-state-ease);transition-delay:calc(var(--toc-index, 0) * 15ms)}.note-toc-stage.has-reading-rail.is-reading:not(.is-hovered) .note-toc-header,.note-toc-stage.has-reading-rail.is-reading:not(.is-hovered) .note-toc-reading-controls,.note-toc-stage.has-reading-rail.is-reading:not(.is-hovered) .note-toc-panel li{opacity:0;transform:translate3d(calc(var(--reading-toc-rail-collapse-shift) * -1),0,0)}.note-toc-stage.has-reading-rail.is-reading:not(.is-hovered) .note-toc-indicator{opacity:0;transform:translate3d(calc(var(--reading-toc-rail-collapse-shift) * -1),var(--indicator-y, 0),0) scaleY(var(--indicator-scale, 1))}.note-toc-stage.has-reading-rail.is-reading:not(.is-hovered) .reading-toc-rail{clip-path:inset(calc(-1 * var(--reading-toc-rail-overflow, 0px)) 0);opacity:1;pointer-events:auto;transform:translateZ(0);transition:opacity .3s ease}.note-toc-stage.has-reading-rail.is-reading.is-hovered .reading-toc-rail{clip-path:inset(calc(-1 * var(--reading-toc-rail-overflow, 0px)) 0);opacity:0;pointer-events:none;transform:translateZ(0);transition:opacity .3s ease}.reading-toc-rail-current{opacity:0;transition:opacity .3s ease}.note-toc-stage.has-reading-rail.is-reading:not(.is-hovered) .reading-toc-rail-current{opacity:1;transition:opacity .3s ease .3s}}@media(max-width:1199px){.note-toc-wrapper{display:none}.note-detail-page{max-width:min(var(--note-body-width),100%)}.note-detail{margin-left:0}}@media(max-width:960px){.note-detail-page{max-width:var(--note-body-width)}.note-detail{margin-left:0;width:100%}.note-back-link{margin-bottom:1rem;position:static}}html[data-reduced-motion=true] .note-toc-stage .note-toc{transition:none!important}@media(prefers-reduced-motion:reduce){.note-toc-stage .note-toc{transition:none!important}}@media(max-width:960px){.article-meta-rows{font-size:.875rem;gap:.5rem}.article-shared-meta,.article-stagger-meta{gap:.65em}}.note-tags{margin-top:clamp(3rem,5vw,4.5rem)}.note-tags-divider{border:0;border-top:1px dashed var(--color-line);margin:0 0 1.5rem}.note-tags-list{display:flex;flex-wrap:wrap;gap:.8rem}.note-tag-capsule{background:var(--color-paper);border:1px solid var(--color-line);border-radius:999px;color:var(--color-muted);display:inline-flex;font-family:var(--font-ui);font-size:.85rem;padding:.35rem .9rem;text-decoration:none;transition:background .16s ease,border-color .16s ease,color .16s ease}.note-tag-capsule:hover,.note-tag-capsule:focus-visible{border-color:var(--color-accent);color:var(--color-accent)}.post-comments{border-top:1px dashed var(--color-line);margin-top:clamp(3.5rem,6vw,5rem);padding-top:clamp(2rem,4vw,3rem)}#giscus{min-height:150px}#giscus .giscus-frame{display:block;width:100%;min-height:150px;border:0;color-scheme:inherit}#giscus .giscus-frame--loading{opacity:0}.note-right-controls{display:flex;flex-direction:column;gap:16px;margin-top:16px;padding-left:2px;opacity:1;transition:opacity .3s ease}.note-rc-progress{display:flex;align-items:center;gap:12px}.note-rc-ring{transform:rotate(-90deg);width:24px;height:24px}.note-rc-ring-bg{fill:none;stroke:var(--color-line);stroke-width:2.5}.note-rc-ring-fg{fill:none;stroke:var(--color-accent);stroke-width:2.5;stroke-dasharray:62.8318;stroke-dashoffset:62.8318;stroke-linecap:round;transition:stroke-dashoffset .15s cubic-bezier(.2,0,0,1)}.note-rc-text{font-family:var(--font-ui);font-size:.85rem;color:var(--color-muted);font-weight:500;font-variant-numeric:tabular-nums}.note-rc-btn{background:transparent;border:none;padding:0;display:flex;align-items:center;gap:8px;color:var(--color-muted);font-family:var(--font-ui);font-size:.82rem;font-weight:500;cursor:pointer;transition:color .16s ease;width:fit-content}.note-rc-btn:hover,.note-rc-btn:focus-visible{color:var(--color-accent)}.note-rc-btn .material-symbol{font-size:1.15rem}.mobile-reading-controls{display:none}@media(max-width:960px){.note-right-controls{display:none}.mobile-reading-controls{display:block;position:fixed;top:var(--mobile-topbar-height);left:0;width:100%;height:32px;z-index:2005;overflow:hidden;background:transparent;transform:translateY(0);transition:transform .3s cubic-bezier(.4,0,.2,1) 0ms,height .3s cubic-bezier(.4,0,.2,1) .3s}body.mobile-top-bar-hidden .mobile-reading-controls{height:2px;transform:translateY(calc(var(--mobile-topbar-height) * -1));transition:height .3s cubic-bezier(.4,0,.2,1) 0ms,transform .3s cubic-bezier(.4,0,.2,1) .3s}body.is-mobile-drawer-open .mobile-reading-controls{height:2px;transform:translateY(0);transition:height .3s cubic-bezier(.4,0,.2,1) 0ms}body.is-at-top .mobile-reading-controls,body.is-scrolling-down:not(.mobile-top-bar-hidden) .mobile-reading-controls{transform:translateY(-32px);transition:transform .3s cubic-bezier(.4,0,.2,1) 0ms}.rc-layer{position:absolute;top:0;left:0;width:100%;height:32px;display:flex;align-items:center;justify-content:space-between}.rc-base{background:var(--color-page);color:var(--color-text);border-bottom:1px solid var(--color-line)}.rc-progress{background:var(--color-text);color:var(--color-page);pointer-events:none;clip-path:inset(0 calc(100% - var(--reading-progress)) 0 0);transition:background-color .3s cubic-bezier(.4,0,.2,1) .3s}body.mobile-top-bar-hidden .rc-progress,body.is-mobile-drawer-open .rc-progress{background:var(--color-accent);transition:background-color .3s cubic-bezier(.4,0,.2,1) 0ms}.mobile-reading-btn{align-items:center;background:transparent;border:0;color:inherit;cursor:pointer;display:flex;height:100%;justify-content:center;padding:0 24px;transition:opacity .16s ease}.mobile-reading-btn:active{opacity:.6}.mobile-reading-btn .material-symbol{font-size:1.25rem}.mobile-reading-percentage{color:inherit;font-family:var(--font-ui);font-size:.85rem;font-weight:500}}.mobile-toc-fab,.mobile-toc-sheet{display:none}@media(max-width:1199px){.mobile-toc-fab{align-items:center;background:var(--color-page);border:1px solid var(--color-line);border-right:none;border-radius:24px 0 0 24px;bottom:calc(env(safe-area-inset-bottom) + 120px);box-shadow:0 4px 12px #00000014;color:var(--color-text);cursor:pointer;display:flex;height:48px;justify-content:center;padding:0 12px 0 16px;position:fixed;right:0;transform:translate(0);transition:transform .3s cubic-bezier(.4,0,.2,1);width:auto;z-index:90}.mobile-toc-fab.is-hidden{transform:translate(100%)}.mobile-toc-sheet{display:block;height:100%;height:100dvh;left:0;overflow:hidden;pointer-events:none;position:fixed;top:0;width:100%;z-index:100}.mobile-toc-backdrop{background:#0006;height:100%;left:0;opacity:0;position:absolute;top:0;transition:opacity .3s ease;width:100%}.mobile-toc-sheet.is-open .mobile-toc-backdrop{opacity:1;pointer-events:auto}.mobile-toc-panel{background:var(--color-page);border-radius:24px 24px 0 0;bottom:0;box-shadow:0 -4px 16px #0000001a;display:flex;flex-direction:column;max-height:min(42rem,calc(85dvh - env(safe-area-inset-top)));overflow:hidden;position:absolute;transform:translateY(100%);transition:transform .4s cubic-bezier(.2,0,0,1);width:100%}.mobile-toc-sheet.is-open .mobile-toc-panel{pointer-events:auto;transform:translateY(0)}.mobile-toc-sheet.is-dragging .mobile-toc-panel{transition:none}.mobile-toc-drag-handle{background:var(--color-muted);border-radius:2px;cursor:grab;height:4px;margin:12px auto;width:32px}.mobile-toc-drag-handle:active{cursor:grabbing}.mobile-toc-header{align-items:center;display:flex;justify-content:center;padding:0 16px 16px}.mobile-toc-nav{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding:0 24px 24px;position:relative}.mobile-toc-nav ol{list-style:none;margin:0;padding:0;position:relative}.mobile-toc-nav li{font-size:.95rem;line-height:1.5;margin:8px 0}.mobile-toc-nav a{color:var(--color-muted);text-decoration:none;transition:color .2s ease;display:block;padding:6px 0}.mobile-toc-nav li.is-active>a{color:var(--color-accent);font-weight:500}.mobile-toc-nav .note-toc-indicator{background:var(--color-accent);border-radius:2px;height:18px;left:12px;opacity:0;position:absolute;top:0;transform:translateY(var(--indicator-y, 0)) scaleY(var(--indicator-scale, 1));transition:transform .3s cubic-bezier(.2,0,0,1),opacity .3s ease;width:3px}.mobile-toc-nav:hover .note-toc-indicator,.mobile-toc-nav:focus-within .note-toc-indicator{opacity:.3}.mobile-toc-nav.has-active .note-toc-indicator{opacity:1}}.note-toc-divider{border-top:1px dashed var(--color-line);margin:16px 0;width:100%}.note-toc-stage.has-reading-rail.is-reading .note-toc-divider{transition:opacity var(--reading-toc-rail-state-duration) ease,transform var(--reading-toc-rail-state-duration) var(--reading-toc-rail-state-ease)}.note-toc-stage.has-reading-rail.is-reading:not(.is-hovered) .note-toc-divider{opacity:0;transform:translate3d(calc(var(--reading-toc-rail-collapse-shift) * -1),0,0)}body[data-reader-mode=immersive] .side-rail,body[data-reader-mode=immersive] .persistent-logo-container,body[data-reader-mode=immersive] .mobile-drawer,body[data-reader-mode=immersive] .mobile-drawer-mask,body[data-reader-mode=immersive] .mobile-overlay-container,body[data-reader-mode=immersive] .note-tags,body[data-reader-mode=immersive] .post-comments,body[data-reader-mode=immersive] .note-back-link{display:none!important}body[data-reader-mode=immersive] .page-shell{grid-template-columns:minmax(0,1fr)!important;margin:0 auto}body[data-reader-mode=immersive] .page-main{grid-column:1!important}body[data-reader-mode=immersive]{--note-text-size: 1.0625rem;--note-body-width: 52rem;--note-title-size: clamp(2rem, 3.5vw, 2.5rem)}body[data-reader-mode=immersive] .notes-page{display:block;max-width:var(--note-body-width);margin-inline:auto}body[data-reader-mode=immersive] .note-detail{width:100%;max-width:var(--note-body-width);margin-inline:auto;padding-inline:0!important}body[data-reader-mode=immersive] .note-toc-wrapper{--reading-toc-rail-eligible: 0}body[data-reader-mode=immersive] .mobile-toc-fab.is-hidden{transform:translate(0)}@media(min-width:1200px){body[data-reader-mode=immersive] .page-main{padding-inline:clamp(24px,4vw,64px)}body[data-reader-mode=immersive] .notes-page:has(.note-toc-wrapper){display:grid;grid-template-columns:minmax(0,var(--note-body-width)) var(--note-toc-width);gap:32px;max-width:calc(var(--note-body-width) + var(--note-toc-width) + 32px)}body[data-reader-mode=immersive] .note-detail-page .notes-aside{position:static;width:var(--note-toc-width)}}body[data-reader-mode=immersive] .note{width:100%}body[data-reader-mode=immersive] .post-content{line-height:1.85}body[data-reader-mode=immersive] .note-title-wrapper{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:start;column-gap:16px}.reader-progress-bar{display:none}@media(max-width:960px){body[data-reader-mode=immersive] .mobile-reading-controls{display:none!important}body[data-reader-mode=immersive] .reader-progress-bar{display:block;position:fixed;top:0;left:0;width:100%;height:2px;pointer-events:none;z-index:2005;background:linear-gradient(to right,var(--color-accent) 0,var(--color-accent) var(--reading-progress, 0%),var(--color-line) var(--reading-progress, 0%),var(--color-line) 100%);transform:translateY(max(var(--reader-progress-visual-top, 0px),env(safe-area-inset-top,0px)))}}@media(min-width:961px)and (max-width:1399px){.note-back-link{left:0;top:-40px;height:32px;width:32px}}.archive-page{min-width:0;width:min(var(--note-body-width),100%)}.archive-timeline{min-width:0}.archive-header{margin-bottom:clamp(2rem,4vw,3.5rem)}.archive-stats{display:flex;flex-wrap:wrap;gap:2rem;align-items:baseline;font-family:var(--font-cormorant)}.archive-stat-item{display:flex;align-items:baseline;gap:.35rem}.archive-stat-num{font-size:2.5rem;font-weight:700;color:var(--color-text);line-height:1;font-variant-numeric:tabular-nums}.archive-stat-unit{font-size:.95rem;color:var(--color-muted);font-weight:500}.archive-stats-secondary{margin-top:1.25rem;gap:1.5rem;font-family:var(--font-cormorant);font-style:italic}.archive-stats-secondary .archive-stat-num{font-size:1.35rem;font-weight:600}.archive-stats-secondary .archive-stat-unit{font-size:1.35rem;letter-spacing:.05em}.archive-year{display:grid;gap:clamp(1.6rem,4vw,2.4rem);grid-template-columns:5.2rem minmax(0,1fr);position:relative}.archive-year+.archive-year{margin-top:clamp(2.8rem,6vw,4.5rem)}.archive-year h2{color:var(--color-text);font-family:var(--font-cormorant);font-size:clamp(1.35rem,2.6vw,1.75rem);font-style:italic;font-weight:600;letter-spacing:0;line-height:1;margin:0}.archive-list{--archive-dot-size: 9px;--archive-list-pad: 1.45rem;border-left:1px solid var(--color-line);display:grid;gap:1.9rem;list-style:none;margin:0;padding:0 0 0 var(--archive-list-pad)}.archive-item{display:grid;gap:clamp(.9rem,3vw,1.35rem);grid-template-columns:4.2rem minmax(0,1fr);position:relative}.archive-item:before{background:var(--color-page);border:1.5px solid var(--color-line);border-color:color-mix(in srgb,var(--color-muted) 35%,var(--color-line));border-radius:999px;content:"";height:var(--archive-dot-size);left:calc(-1 * var(--archive-list-pad) - 4.5px);position:absolute;top:.38rem;transition:background-color .25s ease,border-color .25s ease,box-shadow .25s ease;width:var(--archive-dot-size);z-index:1}.archive-item:hover:before,.archive-item:focus-within:before{background:var(--color-accent);border-color:var(--color-accent);box-shadow:0 0 0 3px var(--color-page)}.archive-item time{color:var(--color-muted);font-family:var(--font-cormorant);font-size:.96rem;font-style:italic;line-height:1.25;transition:color .2s ease;white-space:nowrap}.archive-entry{min-width:0}.archive-entry a{color:var(--color-text);font-family:var(--font-serif);font-size:1.02rem;font-weight:700;line-height:1.4;text-decoration:none;transition:color .2s ease}.archive-item:hover time,.archive-item:focus-within time{color:var(--color-muted)}.archive-item:hover .archive-entry a,.archive-item:focus-within .archive-entry a,.archive-entry a:hover,.archive-entry a:focus-visible{color:var(--color-hover-text)}.archive-entry a:focus-visible{outline:1px solid var(--color-accent);outline-offset:4px}.archive-reading-time{color:var(--color-muted);display:inline-block;font-family:var(--font-cormorant);font-size:1.02rem;font-style:italic;margin-left:.65rem;white-space:nowrap}.archive-entry p,.archive-empty{color:var(--color-muted);font-family:var(--font-body);font-size:.94rem;line-height:1.75}.archive-entry p{margin:.45rem 0 0}.archive-empty{margin:0}@media(max-width:960px){.archive-page{width:100%}}@media(max-width:640px){.archive-stats{gap:1.5rem}.archive-stat-num{font-size:2.1rem}.archive-year{display:block}.archive-year h2{margin-bottom:1.4rem}.archive-list{--archive-list-pad: 1.2rem}.archive-item{grid-template-columns:3.7rem minmax(0,1fr)}.archive-reading-time{display:block;margin:.25rem 0 0}.archive-entry p{display:none}}.archive-virtual-list{--archive-year-column: 5.2rem;--archive-column-gap: clamp(1.6rem, 4vw, 2.4rem);--archive-axis-x: calc(var(--archive-year-column) + var(--archive-column-gap));position:relative;min-width:0}@media(max-width:640px){.archive-virtual-list{--archive-axis-x: 0px}}.archive-virtual-list:before{content:"";position:absolute;top:0;bottom:0;width:1px;left:var(--archive-axis-x);background:var(--color-line);pointer-events:none;z-index:0}.archive-virtual-row{display:grid;gap:var(--archive-column-gap);grid-template-columns:var(--archive-year-column) minmax(0,1fr);position:relative}.archive-year-row{padding-top:clamp(2.8rem,6vw,4.5rem)}.archive-year-row.is-first-year{padding-top:0}.archive-year-row h2{color:var(--color-text);font-family:var(--font-cormorant);font-size:clamp(1.35rem,2.6vw,1.75rem);font-style:italic;font-weight:600;letter-spacing:0;line-height:1;margin:0;grid-column:1}.archive-item-track{--archive-dot-size: 9px;--archive-list-pad: 1.45rem;border-left:none;padding:0 0 1.9rem var(--archive-list-pad);grid-column:2;position:relative;height:100%}@media(max-width:640px){.archive-item-track{--archive-list-pad: 1.2rem}}.archive-item-track .archive-item{display:grid;gap:clamp(.9rem,3vw,1.35rem);grid-template-columns:4.2rem minmax(0,1fr);position:relative;opacity:1;transform:none}.archive-item-row.is-pending-reveal .archive-item{opacity:0}.archive-item-row.is-seen .archive-item{opacity:1!important;animation:none!important;transform:none!important}@media(max-width:640px){.archive-virtual-row{display:block}.archive-year-row h2{margin-bottom:1.4rem;padding-left:var(--archive-list-pad, 1.2rem)}}.about-body .page-frame{position:relative;z-index:1}.about-page{max-width:min(44rem,100%);min-height:calc(100vh - 160px);position:relative}.about-content{max-width:var(--note-body-width);padding-top:clamp(3rem,9vh,7rem);position:relative;width:100%;z-index:2}.about-content h1{display:flex;align-items:center;gap:.6rem;font-family:var(--font-serif);font-size:var(--note-title-size);font-style:italic;font-weight:650;line-height:1.15;margin:0}.about-summary{color:var(--color-muted);font-family:var(--font-body);font-size:.94rem;line-height:1.75;margin:1.2rem 0 0;max-width:42rem}.about-summary:first-letter{color:var(--color-accent);float:left;font-family:var(--font-ui);font-size:3.4em;font-style:italic;font-weight:700;line-height:.92;margin-top:4px;padding:4px 10px 0 0}.about-markdown{margin-top:2.2rem}.about-meta{color:var(--color-muted);display:flex;flex-direction:column;align-items:flex-end;font-family:var(--font-cormorant);font-style:italic;font-weight:600;font-size:clamp(.95rem,1.3vw,1.12rem);gap:.6em;line-height:1;margin:2.5rem 0 1.5rem}.about-meta-group{display:inline-flex;align-items:center;gap:.45rem}.about-engagement{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:.8rem}.about-time-group{text-align:right;line-height:1.4}.golden-spiral{--phi: 1.61803398875;--golden-curve-delay: 1.618s;--golden-guide-grow-duration: 8.09s;--golden-curve-grow-duration: 13.09s;--golden-hold-duration: 1.618s;--golden-curve-shrink-duration: 8.09s;--golden-guide-shrink-window: 5s;--golden-hidden-duration: .618s;--golden-loop-duration: 30.154s;contain:strict;inset:0;opacity:.9;pointer-events:none;position:fixed;user-select:none;z-index:0}.golden-spiral svg{display:block;height:100%;width:100%}@keyframes golden-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.golden-spiral-stage{animation:golden-spin var(--golden-loop-duration) linear infinite;transform-box:view-box;will-change:transform}.golden-rect,.golden-diagonal,.golden-curve{animation-duration:var(--golden-loop-duration);animation-fill-mode:both;animation-iteration-count:infinite;animation-timing-function:var(--ease-page);fill:none;opacity:0;stroke-linecap:round}.golden-rect{stroke-width:1;stroke:var(--color-golden-rect)}.golden-diagonal{stroke-width:.809;stroke:var(--color-golden-diagonal)}.golden-curve{stroke-width:1.618;animation-name:golden-curve-life;animation-timing-function:linear;stroke:var(--color-golden-curve);stroke-dasharray:1;stroke-dashoffset:1;stroke-linejoin:round}@media(max-width:960px){.about-content{padding-top:clamp(2rem,8vh,4rem)}}@media(max-width:960px){.golden-spiral{display:none}}html[data-reduced-motion=true] .golden-spiral{display:none}@media(prefers-reduced-motion:reduce){.golden-spiral{display:none}}.graph-body .page-main{grid-column:2;padding:88px clamp(24px,4vw,40px) 0;display:flex;flex-direction:column;height:calc(100dvh - 84px)}.graph-body .page-main #main-content-wrapper,.graph-page{display:flex;flex:1;flex-direction:column;min-height:0;width:100%}.graph-shell{flex:1;display:flex;position:relative;min-height:400px;overflow:hidden;background:var(--color-paper);border-radius:16px;box-shadow:0 2px 4px color-mix(in srgb,var(--color-text) 7%,transparent),0 8px 20px color-mix(in srgb,var(--color-text) 4%,transparent)}#graph-container{flex:1;width:100%;height:100%;min-height:400px;cursor:grab}#graph-container:active{cursor:grabbing}#graph-container svg{display:block}.graph-shell [hidden]{display:none!important}.graph-shell .graph-toolbar{position:absolute;top:16px;left:16px;display:flex;flex-wrap:nowrap;gap:8px;z-index:3;max-width:calc(100% - 32px)}.graph-shell .graph-toolbar .notes-action-button{flex-shrink:0}.graph-shell .graph-toolbar .notes-action-button:disabled{opacity:.4;cursor:not-allowed}.graph-action-text{display:none}.graph-search-panel{position:absolute;top:calc(100% + 8px);left:0;width:min(240px,calc(100vw - 64px));max-height:0;overflow:hidden;display:flex;flex-direction:column;background:var(--color-page);font:14px/1.5 var(--font-ui);visibility:hidden;pointer-events:none;opacity:0;transform:translateY(-8px);transition:max-height .36s cubic-bezier(.2,.78,.24,1),opacity .22s ease,transform .32s cubic-bezier(.22,1,.36,1),visibility 0ms linear .36s}.graph-toolbar.is-search-open .graph-search-panel{max-height:min(420px,55dvh);overflow-y:auto;visibility:visible;pointer-events:auto;opacity:1;transform:translateY(0);transition-delay:0ms}.graph-toolbar.is-search-open #graph-search-btn{color:var(--color-accent)}.graph-shell button,.graph-shell input,.graph-shell select{font:inherit}.graph-shell .graph-button{min-height:40px;padding:8px 14px;border:1px solid var(--color-line);border-radius:20px;color:var(--color-text);background:var(--color-paper);cursor:pointer;font-family:var(--font-ui);font-size:13px}.graph-shell .graph-button:hover,.graph-shell .graph-button[aria-expanded=true]{background:color-mix(in srgb,var(--color-accent) 12%,var(--color-paper));color:var(--color-accent)}.graph-shell button:disabled{opacity:.4;cursor:default}.graph-shell :is(button,input,select,summary,[tabindex]):focus-visible{outline:2px solid var(--color-accent);outline-offset:3px}.graph-panel{position:absolute;z-index:4;width:420px;max-width:calc(100% - 24px);max-height:none;height:auto;margin:0;padding:0;inset:12px 12px 12px auto;overflow:auto;overscroll-behavior:contain;scrollbar-width:thin;background:var(--color-paper);border:0;border-radius:20px;box-shadow:0 8px 30px #0000001f;color:var(--color-text);font:14px/1.5 var(--font-ui)}.graph-panel-header{position:sticky;top:0;z-index:2;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:16px;background:var(--color-paper);border-bottom:1px solid var(--color-line)}.graph-panel-header strong{font-size:16px;font-weight:600}.graph-panel-actions{display:flex;align-items:center;gap:4px}.graph-shell .graph-panel-action{display:grid;place-items:center;flex:0 0 44px;width:44px;height:44px;padding:0;border:0;border-radius:10px;background:transparent;color:var(--color-muted);cursor:pointer;transition:background .16s ease,color .16s ease}.graph-panel-action .material-symbol{font-size:22px}.graph-shell .graph-panel-action:hover,.graph-shell .graph-panel-action:focus-visible{background:color-mix(in srgb,var(--color-accent) 12%,var(--color-paper));color:var(--color-accent)}.graph-section-title{display:flex;align-items:center;gap:10px;margin:0;font:inherit;padding:12px 20px;font-weight:600}.graph-section-title .material-symbol{color:var(--color-muted);font-size:20px}.graph-section-body{padding:0 20px 12px;display:flex;flex-direction:column;gap:8px}.graph-shell .graph-query{width:100%;box-sizing:border-box;opacity:1;transform:none;font:.84rem/1.4 var(--font-ui)}.graph-shell .graph-query:focus-visible{outline:0}.graph-shell .graph-query[aria-invalid=true]{border-color:#c44c4c}.graph-switch-row{min-height:44px;display:flex;align-items:center;justify-content:space-between;gap:12px;cursor:pointer}.graph-shell .graph-switch{flex:0 0 52px}.graph-slider-row{display:flex;flex-direction:column;gap:8px}@property --graph-progress{syntax: ""; inherits: true; initial-value: 0%;}.graph-slider{--graph-slider-duration: var(--motion-expressive-effects-duration, .2s);--graph-slider-easing: var(--motion-expressive-effects-easing, cubic-bezier(.34, .8, .34, 1));position:relative;height:44px;transition:--graph-progress var(--graph-slider-duration) var(--graph-slider-easing)}.graph-slider.is-dragging{transition:none}.graph-slider-visual{position:absolute;top:0;left:20px;right:20px;height:44px;pointer-events:none}.graph-slider-active,.graph-slider-inactive{position:absolute;top:14px;height:16px;border-radius:8px}.graph-slider-active{left:0;width:max(0px,calc(var(--graph-progress) - 9px));background:var(--color-accent)}.graph-slider-inactive{left:min(100%,calc(var(--graph-progress) + 9px));right:0;overflow:hidden;background:color-mix(in srgb,var(--color-accent) 22%,var(--color-paper))}.graph-slider-end{position:absolute;top:4px;right:4px;width:8px;height:8px;border-radius:50%;background:var(--color-accent)}.graph-slider-handle{position:absolute;top:0;left:var(--graph-progress);width:4px;height:44px;border-radius:2px;transform:translate(-50%);background:var(--color-accent);transition:width var(--graph-slider-duration) var(--graph-slider-easing)}.graph-slider:is(.is-dragging,:has(input:focus-visible)) .graph-slider-handle{width:2px}.graph-slider-value{position:absolute;bottom:calc(100% + 6px);left:var(--graph-progress);z-index:1;display:grid;place-items:center;min-width:40px;height:24px;padding:0 10px;box-sizing:border-box;border-radius:999px;background:var(--color-accent);color:var(--color-paper);font:500 12px/1 var(--font-ui);font-variant-numeric:tabular-nums;box-shadow:0 3px 8px #00000024;opacity:0;transform:translate(-50%,6px) scale(.82);transform-origin:bottom center;transition:opacity var(--graph-slider-duration) var(--graph-slider-easing),transform var(--graph-slider-duration) var(--graph-slider-easing)}.graph-slider:is(:hover,.is-dragging,:has(input:focus-visible)) .graph-slider-value{opacity:1;transform:translate(-50%) scale(1)}.graph-slider:has(input:focus-visible) .graph-slider-visual{outline:2px solid var(--color-accent);outline-offset:0;border-radius:8px}.graph-shell .graph-slider input[type=range]{appearance:none;position:absolute;top:0;left:0;width:100%;height:44px;margin:0;opacity:0;cursor:pointer;touch-action:pan-y}.graph-shell .graph-slider input[type=range]::-webkit-slider-runnable-track{height:16px}.graph-shell .graph-slider input[type=range]::-webkit-slider-thumb{appearance:none;width:40px;height:44px;margin-top:-14px}.graph-shell .graph-slider input[type=range]::-moz-range-track{height:16px}.graph-shell .graph-slider input[type=range]::-moz-range-thumb{width:40px;height:44px;border:0}.graph-slider:has(input:disabled){opacity:.38}.graph-slider:has(input:disabled) .graph-slider-value{opacity:0}.graph-shell .graph-slider input:disabled{cursor:not-allowed}.graph-error{color:#c44c4c;font-size:12px;overflow-wrap:anywhere;margin:0}.graph-error:empty{display:none}.graph-status{position:absolute;bottom:12px;left:16px;right:16px;pointer-events:none;color:var(--color-muted);font:12px var(--font-ui);display:flex;gap:8px;align-items:center;flex-wrap:wrap}.graph-status button{pointer-events:auto}.graph-link{stroke:var(--color-line);stroke-opacity:.55;transition:stroke-opacity var(--duration-fast, .24s),stroke var(--duration-fast, .24s)}.graph-arrow{fill:var(--color-muted)}.graph-node{fill:var(--color-text);stroke:var(--color-paper);stroke-width:1.5px;transition:fill var(--duration-fast, .24s),opacity var(--duration-fast, .24s),stroke var(--duration-fast, .24s),stroke-width var(--duration-fast, .24s);cursor:pointer}.graph-node.is-tag{fill:var(--syntax-inserted)}.graph-node.is-attachment{fill:var(--graph-node-attachment)}.graph-node.is-missing{fill:var(--color-muted);stroke-dasharray:2 2;cursor:default}.graph-node.is-center{stroke:var(--color-accent);stroke-width:2px}.graph-label{font-size:10px;fill:var(--color-muted);pointer-events:none;font-family:var(--font-serif);paint-order:stroke;stroke:var(--color-paper);stroke-width:3px;stroke-linejoin:round;transition:opacity var(--duration-fast, .24s),fill var(--duration-fast, .24s)}.graph-dimmed .graph-node:not(.is-highlight){opacity:.18}.graph-dimmed .graph-label:not(.is-highlight){opacity:.1!important}.graph-dimmed .graph-link:not(.is-highlight){stroke-opacity:.06}.graph-node.is-hovered{fill:var(--color-accent);stroke:none;stroke-width:0}.graph-link.is-highlight{stroke:var(--color-accent);stroke-opacity:.9}.graph-label.is-highlight{fill:var(--color-text)}body.graph-modal-open{overflow:hidden}html.has-custom-cursor .graph-panel:modal,html.has-custom-cursor .graph-panel:modal *{cursor:auto!important}html.has-custom-cursor .graph-panel:modal :is(button,input[type=range]){cursor:pointer!important}@media(max-width:960px){.graph-body .page-shell{flex:0 0 auto;min-height:0}.graph-body .page-main{padding:8px 12px max(8px,env(safe-area-inset-bottom));height:calc(100dvh - var(--mobile-topbar-height, 64px));min-height:0}.graph-body .home-footer:not(:has(.footer-copyright)){display:none}.graph-shell{flex-direction:column;border-radius:0;min-height:0;background:transparent;box-shadow:none}#graph-controls{flex:0 0 auto}#graph-container{height:auto;min-height:0}.graph-panel{position:fixed;inset:0;width:100vw;height:100dvh;max-width:none;max-height:none;border-radius:0;box-shadow:none}.graph-panel::backdrop{background:var(--color-paper)}.graph-panel-header{padding-top:max(12px,env(safe-area-inset-top))}.graph-panel .graph-section:last-child .graph-section-body{padding-bottom:max(16px,env(safe-area-inset-bottom))}.graph-shell .graph-toolbar{position:relative;left:auto;top:auto;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:4px 8px;max-width:none;width:100%;margin-bottom:8px;padding:4px 6px}.graph-shell .graph-toolbar:has(#graph-full-btn:not([hidden])){grid-template-columns:repeat(5,minmax(0,1fr))}.graph-shell .graph-toolbar .notes-action-button{min-width:0;width:100%;max-width:none;height:auto;min-height:48px;display:flex;flex-direction:column;gap:6px;padding:4px 0;border-radius:8px}.graph-search-panel{width:100%}.graph-action-text{display:block;font-family:var(--font-ui);font-size:11px;line-height:1.2;white-space:nowrap;max-width:100%;overflow:hidden;text-overflow:ellipsis}}@media(prefers-reduced-motion:reduce){.graph-shell *,.graph-shell *:before{transition:none!important}}.bilingual-toggle-btn{position:relative;width:24px;height:24px;background:transparent;border:none;padding:0;cursor:pointer;color:var(--color-muted);display:inline-flex;align-items:center;justify-content:center;text-decoration:none;vertical-align:middle;transform:translateY(-2px)}.bilingual-toggle-btn:hover,.bilingual-toggle-btn:focus-visible{color:var(--color-text)}.bilingual-toggle-btn:focus-visible{outline:1px solid var(--color-accent);outline-offset:4px;border-radius:2px}.bilingual-toggle-btn .material-symbol{font-size:1.2rem}.bilingual-toggle-btn:hover .material-symbol,.bilingual-toggle-btn:focus-visible .material-symbol{font-variation-settings:"FILL" 1,"wght" 400,"GRAD" 0,"opsz" 24}.note-header .bilingual-toggle-btn:hover,.note-header .bilingual-toggle-btn:focus-visible,.about-content .bilingual-toggle-btn:hover,.about-content .bilingual-toggle-btn:focus-visible{color:var(--color-hover-text)}.note-header .bilingual-toggle-btn:hover .material-symbol,.note-header .bilingual-toggle-btn:focus-visible .material-symbol,.about-content .bilingual-toggle-btn:hover .material-symbol,.about-content .bilingual-toggle-btn:focus-visible .material-symbol{font-variation-settings:"FILL" 0,"wght" 400,"GRAD" 0,"opsz" 24}.markdown{color:var(--color-text);font-family:var(--font-body);font-size:var(--note-text-size);line-height:1.75;overflow-wrap:anywhere;word-wrap:break-word;overflow-x:clip}.markdown>*{margin:0 0 24px}.markdown>*:last-child{margin-bottom:0}.markdown p{color:var(--color-text);font-size:var(--note-text-size);line-height:1.75;margin:0 0 24px;max-width:100%}.markdown h1,.markdown h2,.markdown h3,.markdown h4{color:var(--color-text);font-family:var(--font-serif);font-weight:700;overflow-wrap:anywhere;word-wrap:break-word}.markdown h1 strong,.markdown h2 strong,.markdown h3 strong,.markdown h4 strong{font-weight:900}.markdown h1{font-size:28px;line-height:1.2;margin:50px 0 18px}.markdown h2{font-size:23px;line-height:1.25;margin:46px 0 16px;position:relative}.markdown h3{font-size:19px;font-weight:600;line-height:1.35;margin:34px 0 14px;position:relative}.markdown h4{font-size:16.5px;font-weight:500;line-height:1.4;margin:28px 0 12px}.markdown a{color:var(--color-text);overflow-wrap:anywhere;text-decoration:underline;text-decoration-color:color-mix(in srgb,var(--color-text) 35%,transparent);text-decoration-thickness:1px;text-underline-offset:3px;transition:color .2s ease,text-decoration-color .2s ease;word-break:break-word}.markdown a:hover,.markdown a:focus-visible{color:var(--color-hover-text);text-decoration-color:var(--color-hover-text)}.markdown a:focus-visible{border-radius:3px;outline:2px solid var(--color-accent);outline-offset:3px}.markdown strong{color:var(--color-text);font-weight:700}.markdown em{font-style:italic}.markdown del{color:var(--color-muted);text-decoration-color:color-mix(in srgb,var(--color-muted) 65%,transparent)}.markdown ul{list-style:none;margin:0 0 28px;max-width:100%;padding:0}.markdown ul ul,.markdown ul ol,.markdown ol ul,.markdown ol ol{margin:10px 0 4px;max-width:none;padding-left:24px}.markdown ul li{color:var(--color-text);font-size:var(--note-text-size);line-height:1.7;margin-bottom:10px;padding-left:22px;position:relative}.markdown ul li:not(:has(>input[type=checkbox])):before{background:var(--color-accent);border-radius:50%;content:"";height:5px;left:4px;position:absolute;top:.78em;width:5px}.markdown ul ul li{color:var(--color-muted);font-size:14.5px;margin-bottom:6px}.markdown ul ul li:not(:has(>input[type=checkbox])):before{background:transparent;border:1px solid var(--color-accent)}.markdown ol{margin:0 0 28px;max-width:100%;padding-left:22px}.markdown ol li{color:var(--color-text);font-size:var(--note-text-size);line-height:1.7;margin-bottom:10px;padding-left:6px}.markdown ol li::marker{color:var(--color-accent);font-family:var(--font-body);font-size:14px}.markdown li>p{display:inline;margin:0}.markdown li>ul,.markdown li>ol{margin-top:10px}.markdown input[type=checkbox]{accent-color:var(--color-accent);cursor:default;height:.95rem;left:0;margin:0;opacity:1;position:absolute;top:.38em;vertical-align:-.1em;width:.95rem}.markdown li:has(>input[type=checkbox]){list-style:none;padding-left:24px}.markdown blockquote{border-left:2px solid var(--color-accent);color:var(--color-muted);font-size:15px;font-style:italic;line-height:1.65;margin:28px 0;max-width:100%;padding:4px 0 4px 22px}.markdown blockquote p{color:inherit;font-size:inherit;margin:0 0 12px;max-width:none}.markdown blockquote p:last-child{margin-bottom:0}.markdown .callout{--callout-color: var(--color-accent);border-left:4px solid var(--callout-color);color:var(--color-text);margin:28px 0;max-width:100%;padding:2px 16px}.markdown .callout[data-callout=note],.markdown .callout[data-callout=abstract],.markdown .callout[data-callout=info],.markdown .callout[data-callout=todo]{--callout-color: var(--color-accent)}.markdown .callout[data-callout=tip],.markdown .callout[data-callout=success]{--callout-color: #4f6c3f}.markdown .callout[data-callout=important]{--callout-color: #6f5ea8}.markdown .callout[data-callout=warning],.markdown .callout[data-callout=question]{--callout-color: #9a6a21}.markdown .callout[data-callout=caution],.markdown .callout[data-callout=failure],.markdown .callout[data-callout=danger],.markdown .callout[data-callout=bug]{--callout-color: #9b392f}.markdown .callout[data-callout=example],.markdown .callout[data-callout=quote]{--callout-color: var(--color-muted)}:root[data-theme=dark] .markdown .callout[data-callout=tip],:root[data-theme=dark] .markdown .callout[data-callout=success]{--callout-color: #9bb978}:root[data-theme=dark] .markdown .callout[data-callout=important]{--callout-color: #b9a7e8}:root[data-theme=dark] .markdown .callout[data-callout=warning],:root[data-theme=dark] .markdown .callout[data-callout=question]{--callout-color: #d6b56d}:root[data-theme=dark] .markdown .callout[data-callout=caution],:root[data-theme=dark] .markdown .callout[data-callout=failure],:root[data-theme=dark] .markdown .callout[data-callout=danger],:root[data-theme=dark] .markdown .callout[data-callout=bug]{--callout-color: #ee8f7a}.markdown .callout-title{align-items:center;color:var(--callout-color);display:flex;font-size:15px;font-weight:600;line-height:1.35;margin:0 0 12px}.markdown .callout.is-title-only .callout-title{margin-bottom:0}.markdown .callout.is-collapsible .callout-title{cursor:pointer;list-style:none}.markdown .callout.is-collapsible .callout-title::-webkit-details-marker{display:none}.markdown .callout-icon{font-size:1.25em;margin-right:8px;font-variation-settings:"FILL" 1,"wght" 400,"GRAD" 0,"opsz" 24}.markdown .callout-title-inner{flex:1}.markdown .callout-fold-icon{font-size:1.25em;margin-left:8px;transform:rotate(-90deg);transition:transform .18s var(--ease-out)}.markdown .callout[open]>.callout-title .callout-fold-icon{transform:rotate(0)}.markdown .callout-content>:last-child,.markdown .md-fold-content>:last-child{margin-bottom:0}.markdown .callout p,.markdown .callout ul,.markdown .callout ol,.markdown .md-fold p,.markdown .md-fold ul,.markdown .md-fold ol{max-width:none}.markdown .callout img,.markdown .callout video,.markdown .callout iframe{max-width:100%}.markdown .md-fold{margin:28px 0;max-width:100%}.markdown .md-fold>summary{color:var(--color-text);cursor:pointer;font-weight:700;line-height:1.45;list-style:none;margin-bottom:16px;width:fit-content}.markdown .md-fold>summary::-webkit-details-marker{display:none}.markdown .md-fold>summary:before{border-bottom:6px solid transparent;border-left:10px solid currentColor;border-top:6px solid transparent;content:"";display:inline-block;margin-right:8px;transform:translate(2px,.5px);transition:transform .18s var(--ease-out)}.markdown .md-fold[open]>summary:before{transform:rotate(90deg) translate(.5px,-2px)}.markdown .md-gallery{display:flex;gap:16px;margin:32px 0;max-width:100%;overflow-x:auto;padding:2px 0 12px;scrollbar-color:color-mix(in srgb,var(--color-muted) 42%,transparent) transparent;scrollbar-width:thin}.markdown .md-gallery>figure,.markdown .md-gallery>p{flex:0 0 min(78%,30rem);margin:0;max-width:none}.markdown .md-gallery img{width:100%}.markdown .md-gallery.is-carousel{--gallery-height: clamp(13rem, 38vw, 18rem);--gallery-radius: 24px;display:block;height:var(--gallery-height);padding:0;position:relative;scrollbar-width:none;touch-action:pan-x pan-y pinch-zoom}.markdown .md-gallery.is-carousel::-webkit-scrollbar{display:none}.markdown .md-gallery.is-carousel:focus-visible{border-radius:var(--gallery-radius);outline:2px solid var(--color-accent);outline-offset:5px}.markdown .md-carousel-track{height:100%}.markdown .md-carousel-stage{height:100%;left:0;overflow:hidden;position:sticky}.markdown .md-carousel-item{background:var(--color-paper);border-radius:var(--gallery-radius);height:100%;left:0;margin:0;max-width:none;overflow:hidden;position:absolute;top:0}.markdown .md-carousel-item img{border:0;height:100%;left:50%;max-width:none;object-fit:cover;position:absolute;top:0;transform:translate(-50%);width:var(--gallery-image-width)}.markdown .md-carousel-item:has(:focus-visible){outline:2px solid var(--color-accent);outline-offset:-3px}.markdown .md-carousel-item figcaption,.memos-page .memo-photo-tile figcaption{background:linear-gradient(transparent,#000000b3);bottom:0;box-sizing:border-box;color:#fff;display:-webkit-box;font-family:var(--font-ui);font-size:.9rem;left:0;line-height:1.4;margin:0;opacity:var(--gallery-caption-opacity, 1);overflow:hidden;padding:36px 16px 16px;pointer-events:none;position:absolute;right:0;text-align:left;-webkit-box-orient:vertical;-webkit-line-clamp:2}.markdown .md-gallery.is-dragging,.markdown .md-gallery.is-dragging img{cursor:grabbing;user-select:none}.markdown .mermaid-block{background:color-mix(in srgb,var(--color-paper) 72%,transparent);border:0;border-radius:6px;margin:32px 0;max-width:100%;overflow-x:auto;padding:16px;scrollbar-color:color-mix(in srgb,var(--color-muted) 42%,transparent) transparent;scrollbar-width:thin;transition:background-color .35s ease}.markdown .mermaid-source{background:var(--color-code-bg);border:0;border-radius:4px;color:var(--syntax-text);margin:0;max-width:none;overflow-x:auto;padding:14px 16px;white-space:pre}.markdown .mermaid-source code{white-space:pre}.markdown .mermaid-diagram{color:var(--color-text);min-width:100%}.markdown .mermaid-diagram svg{display:block;height:auto;margin:0 auto;max-width:none}.markdown .mermaid-block.is-rendered .mermaid-source{display:none}.markdown .mermaid-error{color:#9b392f;font-size:.92rem;margin:12px 0 0;max-width:none}:root[data-theme=dark] .markdown .mermaid-error{color:#ee8f7a}.markdown .embed-card{background:color-mix(in srgb,var(--color-paper) 72%,transparent);border:0;border-radius:6px;color:var(--color-text);margin:28px 0;max-width:100%;min-width:0;overflow:hidden;transition:background-color .18s ease,color .18s ease}.markdown a.embed-card{display:block;padding:16px 18px;text-decoration:none}.markdown a.embed-card:hover,.markdown a.embed-card:focus-visible{background:color-mix(in srgb,var(--color-accent) 8%,var(--color-paper));color:var(--color-hover-text)}.markdown .embed-kicker,.markdown .embed-meta,.markdown .embed-action{color:var(--color-muted);display:block;font-size:12px;line-height:1.35}.markdown .embed-title{color:var(--color-text);display:block;font-size:16px;font-weight:700;line-height:1.45;margin:6px 0;overflow-wrap:anywhere}.markdown .embed-slash{color:var(--color-muted);margin:0 3px}.markdown .embed-action{margin-top:10px}.markdown .embed-frame{max-width:100%}.markdown .embed-frame iframe{background:var(--color-paper);border:0;display:block;max-width:100%;width:100%}.markdown .embed-frame-video{aspect-ratio:16 / 9}.markdown .embed-frame-video iframe{height:100%}.markdown .embed-frame-codepen iframe{min-height:360px}.markdown table{border-collapse:collapse;display:block;font-family:var(--font-body);font-size:14px;margin:28px 0;max-width:100%;overflow-x:auto;width:100%}.markdown th,.markdown td{border-bottom:1px solid var(--color-line);padding:8px 12px;text-align:left;vertical-align:top}.markdown th{color:var(--color-text);font-weight:700}.markdown td{color:var(--color-muted)}.markdown :not(pre)>code{background:var(--color-code-inline-bg);border:0;border-radius:3px;color:var(--color-muted);font-family:var(--font-mono);font-variant-ligatures:contextual common-ligatures;font-feature-settings:"liga" 1,"calt" 1;font-size:.9em;padding:1px 6px;transition:background-color .35s ease}:root[data-palette=warm] .markdown :not(pre)>code{background:var(--color-paper);color:var(--color-muted)}.markdown pre{background:var(--color-code-bg);border:0;border-radius:4px;box-shadow:none;color:var(--syntax-text);font-family:var(--font-mono);font-variant-ligatures:contextual common-ligatures;font-feature-settings:"liga" 1,"calt" 1;font-size:14px;line-height:1.7;margin:28px 0;max-width:100%;overflow-x:auto;padding:16px;transition:background-color .35s ease}.markdown pre code{background:transparent;border:0;border-radius:0;color:inherit;display:block;font-family:inherit;font-size:inherit;padding:0}.markdown hr{background:var(--color-line);border:0;height:1px;margin:40px 0}.markdown figure{margin:36px 0;padding:0}.markdown iframe,.markdown object,.markdown embed,.markdown audio{border:0}.markdown img,.markdown video{background:var(--color-paper);border:0;display:block;height:auto;max-width:100%}.markdown.post-content img{cursor:zoom-in}.markdown.post-content img.no-lightbox,.markdown.post-content img[data-no-lightbox=true]{cursor:auto}.markdown figcaption{color:color-mix(in srgb,var(--color-text) 72%,transparent);font-size:14px;line-height:1.5;margin-top:10px;text-align:center}.markdown .footnotes{border-top:1px solid var(--color-line);color:var(--color-muted);font-size:.9rem;margin-top:3rem;padding-top:1rem}.markdown .footnotes hr{display:none}.markdown .footnotes ol{margin-bottom:0}.markdown .footnotes li,.markdown .footnotes p{color:var(--color-muted);font-size:.9rem}.markdown .footnote-ref,.markdown .footnote-backref{color:var(--color-accent);text-decoration:none}.markdown .highlight,.markdown .chroma{background:var(--color-code-bg);color:var(--syntax-text)}.markdown .highlight{border:0;border-radius:4px;box-shadow:none;margin:28px 0;max-width:100%;overflow-x:auto;position:relative;transition:background-color .35s ease}.markdown .highlight pre{background:transparent;border:0;border-radius:0;box-shadow:none;margin:0;padding-right:3.5rem}.markdown pre.chroma{border:0;margin:0}.markdown .highlight.is-plain pre{color:var(--syntax-text)}.code-copy-button{align-items:center;background:transparent;border:0;border-radius:4px;color:var(--color-muted);cursor:pointer;display:inline-flex;height:2rem;justify-content:center;padding:0;position:absolute;right:.7rem;top:.7rem;opacity:0;pointer-events:none;transition:color .2s ease,opacity .2s ease;width:2rem;z-index:1}.markdown .highlight:hover .code-copy-button,.markdown .highlight:focus-within .code-copy-button,.code-copy-button.is-copied{opacity:1;pointer-events:auto}.code-copy-button .material-symbol{font-size:1.15rem;font-variation-settings:"FILL" 0,"wght" 400,"GRAD" 0,"opsz" 24;transition:font-variation-settings .16s var(--ease-out)}.code-copy-button:hover,.code-copy-button:focus-visible,.code-copy-button.is-copied{color:var(--color-hover-text)}.code-copy-button:hover .material-symbol,.code-copy-button:focus-visible .material-symbol,.code-copy-button.is-copied .material-symbol{font-variation-settings:"FILL" 1,"wght" 400,"GRAD" 0,"opsz" 24}.code-copy-button:focus-visible{outline:2px solid var(--color-accent);outline-offset:3px}.markdown h1,.markdown h2,.markdown h3,.markdown h4{scroll-margin-block-start:90px}@media(prefers-reduced-motion:no-preference){html{scroll-behavior:smooth}}.markdown .heading-anchor{display:inline-flex;align-items:center;color:var(--color-hover-text);opacity:0;text-decoration:none;margin-left:.25em;font-size:.85em;transition:opacity .18s ease,color .18s ease;vertical-align:baseline;position:relative;top:.15em}.markdown .heading-anchor .material-symbol{font-size:inherit}.markdown h1:hover .heading-anchor,.markdown h2:hover .heading-anchor,.markdown h3:hover .heading-anchor,.markdown h4:hover .heading-anchor,.markdown .heading-anchor:focus-visible{opacity:1}.markdown .heading-anchor:hover{color:var(--color-primary)}.markdown-image{margin:32px 0}.markdown-image-center{text-align:center}.markdown-image-center img{margin-left:auto;margin-right:auto}@media(hover:none){.markdown .heading-anchor{opacity:.45}}@media(max-width:720px){.markdown p,.markdown ul li,.markdown ol li{font-size:15px;line-height:1.72}.markdown h1{font-size:25px;margin:44px 0 16px}.markdown h2{font-size:21px;margin:38px 0 14px}.markdown h3{font-size:18px;margin:28px 0 12px}.markdown figure{margin:28px 0}}@media(max-width:420px){.markdown p,.markdown ul li,.markdown ol li{font-size:15px;line-height:1.7}.markdown h1{font-size:23px;margin:36px 0 14px}.markdown h2{font-size:19.5px;margin:32px 0 12px}.markdown h3{font-size:17px;margin:24px 0 10px}.markdown ul{padding-left:0}.markdown ul ul,.markdown ul ol,.markdown ol ul,.markdown ol ol{padding-left:20px}.markdown ul li{padding-left:18px}.markdown blockquote{font-size:15px;padding-left:16px}.markdown figcaption{font-size:13.5px}}.markdown .heading-anchor:focus-visible{border-radius:3px;outline:2px solid var(--color-accent);outline-offset:3px}.markdown .chroma .line{display:block;min-height:1.7em}.markdown .chroma .cl{display:inline}.markdown .chroma .w{color:inherit}.markdown .chroma .c,.markdown .chroma .ch,.markdown .chroma .cm,.markdown .chroma .c1,.markdown .chroma .cs,.markdown .chroma .cp,.markdown .chroma .cpf{color:var(--syntax-comment);font-style:italic}:root[data-palette=default] .markdown .chroma .c,:root[data-palette=default] .markdown .chroma .ch,:root[data-palette=default] .markdown .chroma .cm,:root[data-palette=default] .markdown .chroma .c1,:root[data-palette=default] .markdown .chroma .cs,:root[data-palette=default] .markdown .chroma .cp,:root[data-palette=default] .markdown .chroma .cpf{font-style:normal}.markdown .chroma .k,.markdown .chroma .kc,.markdown .chroma .kd,.markdown .chroma .kn,.markdown .chroma .kp,.markdown .chroma .kr,.markdown .chroma .kt{color:var(--syntax-keyword)}.markdown .chroma .s,.markdown .chroma .sa,.markdown .chroma .sb,.markdown .chroma .sc,.markdown .chroma .dl,.markdown .chroma .sd,.markdown .chroma .s2,.markdown .chroma .se,.markdown .chroma .sh,.markdown .chroma .si,.markdown .chroma .sx,.markdown .chroma .sr,.markdown .chroma .s1,.markdown .chroma .ss{color:var(--syntax-string)}.markdown .chroma .m,.markdown .chroma .mb,.markdown .chroma .mf,.markdown .chroma .mh,.markdown .chroma .mi,.markdown .chroma .il,.markdown .chroma .mo{color:var(--syntax-number)}.markdown .chroma .nf,.markdown .chroma .nb,.markdown .chroma .nx,.markdown .chroma .nc,.markdown .chroma .nd,.markdown .chroma .ne{color:var(--syntax-function)}.markdown .chroma .nt{color:var(--syntax-tag)}.markdown .chroma .na{color:var(--syntax-attr)}.markdown .chroma .o,.markdown .chroma .ow,.markdown .chroma .p{color:var(--syntax-operator)}.markdown .chroma .err{color:var(--syntax-error)}.markdown .chroma .gi{color:var(--syntax-inserted)}.markdown .chroma .gd{color:var(--syntax-deleted)}.markdown .gc-container{margin:1.5rem 0;display:block;overflow-x:auto;border-radius:6px;background:color-mix(in srgb,var(--color-text) 5%,transparent);padding:1rem 1.25rem;transition:background-color .2s ease-out,color .2s ease-out;scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--color-text) 15%,transparent) transparent;text-decoration:none;color:var(--color-text)}.markdown .gc-container:hover,.markdown .gc-container:focus-visible{background:color-mix(in srgb,var(--color-text) 10%,transparent)}.markdown .gc-container+.gc-container{margin-top:-.5rem}.markdown .gc-title-bar{display:flex;align-items:center;gap:.625rem}.markdown .gc-owner-avatar{aspect-ratio:1/1;width:1.375rem;flex-shrink:0;border-radius:9999px;background-color:color-mix(in srgb,var(--color-text) 20%,transparent)}.markdown .gc-repo-title{display:flex;align-items:center;line-height:normal;color:currentColor}.markdown .gc-repo-title strong{color:inherit}.markdown .gc-slash{margin:0 .25rem;opacity:.4}.markdown .gc-github-icon{margin-left:auto;width:1.375rem;flex-shrink:0}.markdown .gc-repo-description{margin:.6rem 0 .875rem;text-align:start;font-size:.875rem;color:currentColor}.markdown .gc-info-bar{display:flex;align-items:center;gap:.4375rem;font-size:.75rem;color:color-mix(in srgb,currentColor 80%,transparent)}.markdown .gc-info-icon{flex-shrink:0}.markdown .gc-stars-count{margin-right:.75rem}.markdown .gc-forks-count{margin-right:.9375rem}.markdown .gc-license-info{margin-left:.125rem;margin-right:1rem}.markdown .spotify-embed{width:100%;border-radius:12px;overflow:hidden;border:0;margin:0;display:block}.markdown .music-custom-player{margin:32px 0}.music-player{position:relative;border-radius:16px;overflow:hidden;height:160px;display:flex;align-items:center;background:var(--color-surface);box-shadow:0 4px 12px #0000001a;color:#fff;font-family:var(--font-ui)}.music-bg{position:absolute;inset:-20px;background-size:cover;background-position:center;filter:blur(20px) brightness(.7);z-index:0}.music-overlay{position:absolute;inset:0;background:#0000004d;z-index:1}.music-inner{position:relative;z-index:2;display:flex;align-items:center;width:100%;height:100%;padding:16px;box-sizing:border-box}.music-player .music-cover{width:128px;height:128px;border-radius:8px;object-fit:cover;flex-shrink:0;margin-right:16px;margin-bottom:0!important;border:none;box-shadow:0 12px 32px #0006}.music-body{flex:1;display:flex;flex-direction:column;justify-content:center;min-width:0}.music-text{display:flex;align-items:baseline;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-bottom:4px}.music-title{font-family:var(--font-serif);font-size:16px;font-weight:600;margin-right:8px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.music-artist{font-size:13px;color:#fffc;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.music-time{font-size:12px;color:#fffc;margin-bottom:6px}.music-bottom{display:flex;align-items:center;justify-content:flex-start}.music-canvas{flex:1;max-width:360px;height:24px;cursor:pointer;touch-action:none}.music-playbtn-wrapper{width:72px;height:72px;display:flex;align-items:center;justify-content:center;margin-left:auto}.music-playbtn{width:45px;height:45px;border-radius:22.5px;background:#fff3;border:none;color:#fffc;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .35s cubic-bezier(.42,1.67,.21,.9);flex-shrink:0;padding:0}.music-player.is-playing .music-playbtn{width:45px;height:45px;border-radius:18px;background:#fff;color:#000}.music-playbtn:active{width:50px!important;height:50px!important;border-radius:18px!important;transform:none}.music-icon{font-family:Material Symbols Rounded;font-variation-settings:"FILL" 1;font-size:24px;color:inherit}.music-error{padding:16px;background:var(--color-surface);border-radius:12px;color:var(--color-text-subdued);text-align:center;border:0}@media(max-width:960px){.music-player{height:auto;width:100%;max-width:100%;box-sizing:border-box;border-radius:20px}.music-inner{flex-direction:column;align-items:center;padding:20px 18px;gap:10px}.music-player .music-cover{width:min(68vw,220px);height:min(68vw,220px);margin-right:0;margin-bottom:0!important}.music-body{width:100%;align-items:center;flex:none}.music-text{flex-direction:column;align-items:center;width:100%;white-space:normal}.music-title{margin-right:0;margin-bottom:4px;text-align:center;white-space:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;font-weight:700}.music-artist{text-align:center;width:100%}.music-time{text-align:center;margin-bottom:16px}.music-bottom{flex-direction:column;align-items:center;width:100%}.music-canvas{width:min(100%,260px);max-width:100%;flex:none}.music-playbtn-wrapper{margin-left:0;margin-top:16px;width:56px;height:56px}.music-playbtn{width:52px;height:52px;border-radius:26px}.music-player.is-playing .music-playbtn{width:52px;height:52px;border-radius:20px}.music-icon{font-size:28px}}@media(max-width:380px){.music-player{border-radius:16px}.music-inner{padding:16px}.music-player .music-cover{width:190px;height:190px}.music-canvas{width:230px}.music-playbtn-wrapper,.music-playbtn,.music-player.is-playing .music-playbtn{width:48px;height:48px}}.markdown figure:has(.spotify-embed),.markdown figure:has(.music-custom-player),.markdown figure:has(.twitter-tweet){margin:32px 0}.markdown .twitter-tweet{margin:0 auto}.markdown blockquote.twitter-tweet{border-left:none;padding:0;background:transparent;margin:0 auto}.markdown .twitter-tweet iframe,.markdown iframe[data-tweet-id]{border-radius:12px!important;overflow:hidden!important}.markdown .katex-display{overflow-x:auto;overflow-y:hidden;padding:.5rem 0;margin:1.25rem 0}.markdown .katex-display>.katex{max-width:100%}.markdown .katex{font-size:1.05em}.markdown .katex-display::-webkit-scrollbar{display:none}.markdown .obsidian-embed{margin:32px 0;max-width:100%}.markdown .media-image img{border-radius:4px;width:var(--image-width, auto);max-width:100%;height:auto}.markdown .media-image.is-center{text-align:center}.markdown .media-image.is-center img{margin-left:auto;margin-right:auto}.markdown .media-image.is-left{text-align:left}.markdown .media-image.is-left img{margin-right:auto}.markdown .media-image.is-right{text-align:right}.markdown .media-image.is-right img{margin-left:auto}.markdown .media-pdf{display:flex;flex-direction:column;gap:8px}.markdown .media-pdf iframe{width:100%;height:600px;border:0;border-radius:6px;background:var(--color-paper)}@media(max-width:960px){.markdown .media-pdf iframe{height:400px}}.markdown .media-audio,.markdown .media-video{display:flex;flex-direction:column;gap:8px;margin:24px 0}.markdown .media-audio audio{width:100%;border:0;border-radius:6px;background:var(--color-paper)}.markdown .media-video video{max-width:100%;border:0;border-radius:6px;background:var(--color-paper)}.markdown .media-audio.is-center,.markdown .media-video.is-center{align-items:center}.markdown .obsidian-note-embed{border-left:2px solid var(--color-accent);color:var(--color-muted);font-style:normal;font-size:15px;line-height:1.65;margin:28px 0;max-width:100%;padding:4px 32px 4px 22px;position:relative}.markdown blockquote.obsidian-note-embed{border-left-color:var(--color-accent)}.markdown .obsidian-embed-content{color:var(--color-text);font-size:15px;line-height:1.6}.markdown .obsidian-embed-content>*:first-child{margin-top:0}.markdown .obsidian-embed-title{font-size:1.15rem;font-weight:700;margin-bottom:.5rem;color:var(--color-text)}.markdown .obsidian-embed-link{position:absolute;top:4px;right:0;color:var(--color-muted);opacity:.6;text-decoration:none;display:flex;align-items:center;justify-content:center;transition:color .2s ease,opacity .2s ease}.markdown .obsidian-embed-link:after{background:var(--color-tooltip-bg);border-radius:8px;top:calc(100% + 9px);color:var(--color-tooltip-text);content:attr(data-tooltip);font-family:var(--font-ui);font-size:.72rem;left:50%;line-height:1;opacity:0;padding:5px 10px;pointer-events:none;position:absolute;transform:translate(-50%);clip-path:inset(100% 50% 0 50% round 8px);transition:opacity var(--motion-expressive-effects-duration) var(--motion-expressive-effects-easing),clip-path var(--motion-expressive-effects-duration) var(--motion-expressive-effects-easing);white-space:nowrap;z-index:100}.markdown .obsidian-embed-link:hover,.markdown .obsidian-embed-link:focus-visible{color:var(--color-hover-text);opacity:1;text-decoration:none}.markdown .obsidian-embed-link:hover:after,.markdown .obsidian-embed-link:focus-visible:after{opacity:1;clip-path:inset(0 0 0 0 round 8px)}@media(prefers-reduced-motion:reduce){.markdown .obsidian-embed-link:after{clip-path:none!important;transition:opacity .16s ease!important}}html[data-reduced-motion=true] .markdown .obsidian-embed-link:after{clip-path:none!important;transition:opacity .16s ease!important}.markdown .obsidian-embed-link .material-symbol{font-size:1.15rem;font-variation-settings:"FILL" 0,"wght" 400,"GRAD" 0,"opsz" 24}.markdown mark,.note-content mark{background:var(--color-accent-soft-strong);color:inherit;border-radius:.2em;padding:.05em .18em}.embed-skeleton{position:relative;overflow:hidden;background-color:var(--color-paper);border:0;border-radius:8px;color:transparent!important;pointer-events:none;user-select:none}.embed-skeleton:after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent 0%,color-mix(in srgb,var(--color-text) 3%,transparent) 40%,color-mix(in srgb,var(--color-text) 5%,transparent) 50%,color-mix(in srgb,var(--color-text) 3%,transparent) 60%,transparent 100%);transform:translate(-100%);animation:embed-shimmer 2s infinite var(--ease-out)}@media(prefers-reduced-motion:reduce){.embed-skeleton:after{animation:none;transform:translate(0);background:color-mix(in srgb,var(--color-text) 2%,transparent)}}@keyframes embed-shimmer{to{transform:translate(100%)}}.embed-fallback{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:1.5rem;background-color:var(--color-paper);border:0;border-radius:8px;text-align:center;color:var(--color-muted);font-family:var(--font-ui);font-size:.9rem;min-height:120px;gap:.5rem}.embed-fallback svg{color:var(--color-faint);margin-bottom:.25rem}.embed-fallback a{color:var(--color-accent);text-decoration:none;transition:opacity var(--duration-fast) var(--ease-out)}.embed-fallback a:hover{opacity:.8}.music-custom-player[data-embed-status=loading]{margin:32px 0}.music-skeleton{display:flex;background:var(--color-paper);border:0;border-radius:16px;overflow:hidden;height:160px;box-shadow:0 4px 12px #00000008;padding:16px;align-items:center;box-sizing:border-box}.music-skeleton-cover{width:128px;height:128px;flex-shrink:0;border-radius:8px;background:color-mix(in srgb,var(--color-text) 5%,transparent);margin-right:16px}.music-skeleton-body{flex-grow:1;display:flex;flex-direction:column;justify-content:center;padding:0;gap:.5rem}.music-skeleton-title{width:40%;height:1rem;background:color-mix(in srgb,var(--color-text) 8%,transparent);border-radius:4px}.music-skeleton-artist{width:25%;height:.75rem;background:color-mix(in srgb,var(--color-text) 5%,transparent);border-radius:4px;margin-bottom:.25rem}.music-skeleton-progress{width:100%;height:4px;background:color-mix(in srgb,var(--color-text) 3%,transparent);border-radius:2px}.music-skeleton-playbtn{width:45px;height:45px;border-radius:50%;background:color-mix(in srgb,var(--color-text) 5%,transparent);align-self:center;margin-left:auto;margin-right:14px}@media screen and (max-width:960px){.music-skeleton{flex-direction:column;height:auto;padding:20px 18px;border-radius:20px;align-items:center;text-align:center;gap:10px}.music-skeleton-cover{width:min(68vw,220px);height:min(68vw,220px);margin-right:0}.music-skeleton-body{width:100%;padding:0;align-items:center}.music-skeleton-title{width:60%}.music-skeleton-artist{width:40%}.music-skeleton-playbtn{margin:10px 0 0;width:45px;height:45px}}.gc-container[data-embed-status=loading]{position:relative;overflow:hidden}.gc-container[data-embed-status=loading]:after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent 0%,color-mix(in srgb,var(--color-text) 3%,transparent) 40%,color-mix(in srgb,var(--color-text) 5%,transparent) 50%,color-mix(in srgb,var(--color-text) 3%,transparent) 60%,transparent 100%);transform:translate(-100%);animation:embed-shimmer 2s infinite var(--ease-out);pointer-events:none;z-index:1}@media(prefers-reduced-motion:reduce){.gc-container[data-embed-status=loading]:after{animation:none;transform:translate(0);background:color-mix(in srgb,var(--color-text) 2%,transparent)}}.gc-container[data-embed-status=loading] .gc-repo-description,.gc-container[data-embed-status=loading] .gc-stars-count,.gc-container[data-embed-status=loading] .gc-forks-count,.gc-container[data-embed-status=loading] .gc-license-info{color:transparent!important;background:color-mix(in srgb,var(--color-text) 6%,transparent);border-radius:4px}.gc-container[data-embed-status=loading] .gc-repo-description{width:80%;height:.875rem;margin:.6rem 0 .875rem;display:block}.gc-container[data-embed-status=loading] .gc-stars-count,.gc-container[data-embed-status=loading] .gc-forks-count,.gc-container[data-embed-status=loading] .gc-license-info{display:inline-block;min-width:2rem;height:.75rem;vertical-align:middle}.tweet-skeleton{min-height:200px;display:flex;flex-direction:column;gap:1rem;padding:1.5rem}.tweet-skeleton-header{display:flex;gap:.75rem;align-items:center}.tweet-skeleton-avatar{width:48px;height:48px;border-radius:50%;background:color-mix(in srgb,var(--color-text) 6%,transparent)}.tweet-skeleton-name{width:120px;height:1rem;background:color-mix(in srgb,var(--color-text) 6%,transparent);border-radius:4px}.tweet-skeleton-body1,.tweet-skeleton-body2{height:1rem;background:color-mix(in srgb,var(--color-text) 4%,transparent);border-radius:4px}.tweet-skeleton-body1{width:90%}.tweet-skeleton-body2{width:60%}.embed-frame[data-embed-status=loading]{position:relative;background-color:var(--color-paper)}.embed-frame[data-embed-status=loading]:after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent 0%,color-mix(in srgb,var(--color-text) 3%,transparent) 40%,color-mix(in srgb,var(--color-text) 5%,transparent) 50%,color-mix(in srgb,var(--color-text) 3%,transparent) 60%,transparent 100%);transform:translate(-100%);animation:embed-shimmer 2s infinite var(--ease-out);pointer-events:none;z-index:1}@media(prefers-reduced-motion:reduce){.embed-frame[data-embed-status=loading]:after{animation:none;transform:translate(0);background:color-mix(in srgb,var(--color-text) 2%,transparent)}}.embed-frame[data-embed-status=loading] iframe{opacity:0}.embed-frame[data-embed-status=ready] iframe{opacity:1;transition:opacity var(--duration-normal) var(--ease-out)}img[data-embed-status=loading]{background-color:color-mix(in srgb,var(--color-text) 3%,transparent);opacity:0}img[data-embed-status=ready]{opacity:1;transition:opacity var(--duration-normal) var(--ease-out)}::view-transition{background:var(--color-page)}::view-transition-group(site-avatar),::view-transition-group(site-name-cn),::view-transition-group(site-name-en){animation-duration:var(--duration-shared);animation-timing-function:var(--ease-out)}::view-transition-old(site-name-cn),::view-transition-old(site-name-en){animation:none;opacity:0}::view-transition-new(site-name-cn),::view-transition-new(site-name-en){animation:none;mix-blend-mode:normal}:root{--theme-reveal-from: 100% 0 0 0;--palette-reveal-from: 0 100% 0 0}:root[data-theme=dark]{--theme-reveal-from: 0 0 100% 0}html[data-palette-changing=to-warm]{--palette-reveal-from: 0 100% 0 0}html[data-palette-changing=from-warm]{--palette-reveal-from: 0 0 0 100%}html[data-theme-changing] .hero-avatar-wrap,html[data-palette-changing] .hero-avatar-wrap,html[data-theme-changing] .side-avatar-wrap,html[data-palette-changing] .side-avatar-wrap,html[data-theme-changing] .hero-name,html[data-theme-changing] .slogan-glyph,html[data-palette-changing] .hero-name,html[data-palette-changing] .slogan-glyph,html[data-theme-changing] .notes-brand-name,html[data-palette-changing] .notes-brand-name,html[data-theme-changing] .notes-item-title a,html[data-palette-changing] .notes-item-title a,html[data-theme-changing] .notes-item-meta,html[data-palette-changing] .notes-item-meta,html[data-theme-changing] .note-title span,html[data-palette-changing] .note-title span,html[data-theme-changing] .note-meta,html[data-palette-changing] .note-meta{view-transition-name:none!important}::view-transition-old(theme-toggle-transition),::view-transition-old(palette-toggle-transition){animation:none;mix-blend-mode:normal;z-index:-1}::view-transition-new(theme-toggle-transition){animation:theme-toggle-reveal .7s cubic-bezier(.4,0,.2,1);clip-path:inset(0 0 0 0);mix-blend-mode:normal;z-index:99}::view-transition-new(palette-toggle-transition){animation:palette-toggle-reveal .7s cubic-bezier(.4,0,.2,1);clip-path:inset(0 0 0 0);mix-blend-mode:normal;z-index:99}::view-transition-group(active-switch-track),::view-transition-group(active-switch-thumb){z-index:100}@keyframes theme-toggle-reveal{0%{clip-path:inset(var(--theme-reveal-from))}}@keyframes palette-toggle-reveal{0%{clip-path:inset(var(--palette-reveal-from))}}::view-transition-old(root),::view-transition-new(root){animation-duration:var(--duration-normal);animation-timing-function:var(--ease-out);background:var(--color-page);mix-blend-mode:normal}html.article-transition::view-transition-group(*){animation-duration:var(--duration-shared);animation-timing-function:var(--article-enter-ease)}html.article-transition::view-transition-old(root){animation:none;opacity:0}html.article-transition::view-transition-new(root){animation:none;opacity:1}html.article-transition .side-avatar-wrap,html.article-transition .hero-avatar-wrap,html.article-transition .hero-name-cn,html.article-transition .hero-name-en,html.article-transition .notes-brand-cn,html.article-transition .notes-brand-en,html.article-transition .slogan-glyph{view-transition-name:none}@keyframes nav-exit-up{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-14px)}}@keyframes nav-enter-down{0%{opacity:0;transform:translateY(-14px)}to{opacity:1;transform:translateY(0)}}@keyframes logo-exit-fade{0%{opacity:1}to{opacity:0}}@keyframes logo-enter-fade{0%{opacity:0}to{opacity:1}}@keyframes social-exit-down{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(14px)}}@keyframes social-enter-up{0%{opacity:0;transform:translateY(14px)}to{opacity:.72;transform:translateY(0)}}@keyframes footer-exit-down{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(20px)}}@keyframes footer-enter-up{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes side-nav-enter{0%{opacity:0;transform:translate(-16px)}to{opacity:1;transform:translate(0)}}@keyframes side-nav-exit-left{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(-16px)}}@keyframes aside-enter{0%{opacity:0;transform:translate(18px)}to{opacity:1;transform:translate(0)}}@keyframes aside-exit-right{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(18px)}}@keyframes page-soft-enter{0%{opacity:.92}to{opacity:1}}@keyframes article-content-enter{0%{opacity:0;transform:translateY(var(--post-enter-y))}to{opacity:1;transform:translateY(0)}}@keyframes article-content-enter-mini{0%{opacity:0;transform:translateY(1.5rem)}to{opacity:1;transform:translateY(0)}}@keyframes article-back-enter{0%{opacity:0;transform:translate(.5rem)}to{opacity:1;transform:translate(0)}}@keyframes archive-intro-fade-up{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}.home-exiting .site-nav>*{animation:nav-exit-up var(--duration-normal) var(--ease-out) both}.home-exiting .site-nav>*:nth-child(1){animation-delay:0ms}.home-exiting .site-nav>*:nth-child(2){animation-delay:28ms}.home-exiting .site-nav>*:nth-child(3){animation-delay:56ms}.home-exiting .site-nav>*:nth-child(4){animation-delay:84ms}.home-exiting .site-nav>*:nth-child(5){animation-delay:112ms}.home-exiting .site-nav>*:nth-child(6){animation-delay:.14s}.home-exiting .site-nav>*:nth-child(7){animation-delay:.16s}.home-exiting .site-nav>*:nth-child(8){animation-delay:.18s}.home-exiting .hero-social a{animation:social-exit-down var(--duration-normal) var(--ease-out) both}.home-exiting .hero-social a:nth-child(1){animation-delay:40ms}.home-exiting .hero-social a:nth-child(2){animation-delay:68ms}.home-exiting .hero-social a:nth-child(3){animation-delay:96ms}.home-exiting .hero-social a:nth-child(4){animation-delay:124ms}.home-exiting .hero-social a:nth-child(5){animation-delay:152ms}.home-exiting .hero-social a:nth-child(6){animation-delay:.18s}.home-exiting .footer-stats-row>*,.home-exiting .home-footer>p.footer-copyright{animation:footer-exit-down var(--duration-normal) var(--ease-out) both}.home-exiting .footer-stats-row>*:nth-child(1){animation-delay:.12s}.home-exiting .footer-stats-row>*:nth-child(2){animation-delay:148ms}.home-exiting .footer-stats-row>*:nth-child(3){animation-delay:176ms}.home-exiting .footer-stats-row>*:nth-child(4){animation-delay:204ms}.home-exiting .home-footer>p.footer-copyright{animation-delay:232ms}.home-entering .site-nav>*{animation:nav-enter-down var(--duration-normal) var(--ease-out) both}.home-entering .site-nav>*:nth-child(1){animation-delay:90ms}.home-entering .site-nav>*:nth-child(2){animation-delay:118ms}.home-entering .site-nav>*:nth-child(3){animation-delay:146ms}.home-entering .site-nav>*:nth-child(4){animation-delay:174ms}.home-entering .site-nav>*:nth-child(5){animation-delay:202ms}.home-entering .site-nav>*:nth-child(6){animation-delay:.23s}.home-entering .site-nav>*:nth-child(7){animation-delay:.26s}.home-entering .site-nav>*:nth-child(8){animation-delay:.29s}.home-entering .hero-social a{animation:social-enter-up var(--duration-normal) var(--ease-out) both}.home-entering .hero-social a:nth-child(1){animation-delay:.15s}.home-entering .hero-social a:nth-child(2){animation-delay:178ms}.home-entering .hero-social a:nth-child(3){animation-delay:206ms}.home-entering .hero-social a:nth-child(4){animation-delay:234ms}.home-entering .hero-social a:nth-child(5){animation-delay:262ms}.home-entering .hero-social a:nth-child(6){animation-delay:.29s}.home-entering .footer-stats-row>*,.home-entering .home-footer>p.footer-copyright{animation:footer-enter-up var(--duration-normal) var(--ease-out) both}.home-entering .home-footer>p.footer-copyright{animation-delay:.21s}.home-entering .footer-stats-row>*:nth-child(4){animation-delay:238ms}.home-entering .footer-stats-row>*:nth-child(3){animation-delay:266ms}.home-entering .footer-stats-row>*:nth-child(2){animation-delay:294ms}.home-entering .footer-stats-row>*:nth-child(1){animation-delay:322ms}html:not(.article-transition) body.page-exiting .side-nav:not(.transition-stable) .nav-link{animation:side-nav-exit-left var(--duration-normal) var(--ease-out) both}html:not(.article-transition) body.page-exiting .side-nav:not(.transition-stable) .nav-link:nth-child(1){animation-delay:0ms}html:not(.article-transition) body.page-exiting .side-nav:not(.transition-stable) .nav-link:nth-child(2){animation-delay:28ms}html:not(.article-transition) body.page-exiting .side-nav:not(.transition-stable) .nav-link:nth-child(3){animation-delay:56ms}html:not(.article-transition) body.page-exiting .side-nav:not(.transition-stable) .nav-link:nth-child(4){animation-delay:84ms}html:not(.article-transition) body.page-exiting .side-nav:not(.transition-stable) .nav-link:nth-child(5){animation-delay:112ms}html:not(.article-transition) body.page-exiting .side-nav:not(.transition-stable) .nav-link:nth-child(6){animation-delay:.14s}html:not(.article-transition) body.page-exiting .notes-aside:not(.transition-stable) .notes-footer-actions .notes-action-button,html:not(.article-transition) body.page-exiting .notes-aside:not(.transition-stable) .notes-footer-links,html:not(.article-transition) body.page-exiting .notes-aside:not(.transition-stable) .notes-footer>p{animation:aside-exit-right var(--duration-normal) var(--ease-out) both}html:not(.article-transition) body.page-exiting .notes-aside:not(.transition-stable) .notes-footer-actions .notes-action-button:nth-child(1){animation-delay:40ms}html:not(.article-transition) body.page-exiting .notes-aside:not(.transition-stable) .notes-footer-actions .notes-action-button:nth-child(2){animation-delay:68ms}html:not(.article-transition) body.page-exiting .notes-aside:not(.transition-stable) .notes-footer-actions .notes-action-button:nth-child(3){animation-delay:96ms}html:not(.article-transition) body.page-exiting .notes-aside:not(.transition-stable) .notes-footer-links{animation-delay:124ms}html:not(.article-transition) body.page-exiting .notes-aside:not(.transition-stable) .notes-footer>p{animation-delay:152ms}html.article-transition .persistent-logo,html.article-transition .side-rail,html.article-transition .notes-page,html.article-transition .side-nav,html.article-transition .side-nav:not(.transition-stable) .nav-link,html.article-transition .side-avatar-link,html.article-transition .side-avatar-wrap,html.article-transition .notes-aside,html.article-transition .notes-aside:not(.transition-stable) .notes-footer-actions .notes-action-button,html.article-transition .notes-aside:not(.transition-stable) .notes-footer-links,html.article-transition .notes-aside:not(.transition-stable) .notes-footer>p{animation:none!important;opacity:1!important;transform:none!important}html.article-transition [data-title-transition-key],html.article-transition [data-transition-scope]{view-transition-name:none!important}html:not(.article-transition) body.page-entering.page-body .side-nav:not(.transition-stable) .nav-link{animation:side-nav-enter var(--duration-normal) var(--ease-out) both}html:not(.article-transition) body.page-entering.page-body .side-nav:not(.transition-stable) .nav-link:nth-child(1){animation-delay:80ms}html:not(.article-transition) body.page-entering.page-body .side-nav:not(.transition-stable) .nav-link:nth-child(2){animation-delay:112ms}html:not(.article-transition) body.page-entering.page-body .side-nav:not(.transition-stable) .nav-link:nth-child(3){animation-delay:144ms}html:not(.article-transition) body.page-entering.page-body .side-nav:not(.transition-stable) .nav-link:nth-child(4){animation-delay:176ms}html:not(.article-transition) body.page-entering.page-body .side-nav:not(.transition-stable) .nav-link:nth-child(5){animation-delay:208ms}html:not(.article-transition) body.page-entering.page-body .side-nav:not(.transition-stable) .nav-link:nth-child(6){animation-delay:.24s}html:not(.article-transition) body.page-entering .notes-aside:not(.transition-stable) .notes-footer-actions .notes-action-button{animation:aside-enter var(--duration-normal) var(--ease-out) both}html:not(.article-transition) body.page-entering .notes-aside:not(.transition-stable) .notes-footer-actions .notes-action-button:nth-child(1){animation-delay:.17s}html:not(.article-transition) body.page-entering .notes-aside:not(.transition-stable) .notes-footer-actions .notes-action-button:nth-child(2){animation-delay:205ms}html:not(.article-transition) body.page-entering .notes-aside:not(.transition-stable) .notes-footer-actions .notes-action-button:nth-child(3){animation-delay:.24s}html:not(.article-transition) body.page-entering .notes-aside:not(.transition-stable) .notes-footer-links,html:not(.article-transition) body.page-entering .notes-aside:not(.transition-stable) .notes-footer>p{animation:aside-enter var(--duration-normal) var(--ease-out) both}html:not(.article-transition) body.page-entering .notes-aside:not(.transition-stable) .notes-footer-links{animation-delay:.28s}html:not(.article-transition) body.page-entering .notes-aside:not(.transition-stable) .notes-footer>p{animation-delay:.32s}@media(prefers-reduced-motion:no-preference){.archive-item-row.is-intro-revealing .archive-item,.archive-item-row.reveal-trigger .archive-item{opacity:1;animation:archive-intro-fade-up .38s cubic-bezier(.2,.6,.2,1) both;animation-delay:calc(var(--stagger-index, 0) * 55ms)}}@media(min-width:961px){.note-body .note-back-link{animation:article-back-enter var(--post-enter-duration) var(--ease-page) .2s both}}.note-body .note-meta .meta-transition-group>*,.note-body .note-meta>.meta-stagger,.note-body .note-updated.meta-stagger{animation:article-content-enter-mini var(--post-enter-duration) var(--ease-page) both;opacity:0}@media(min-width:961px){.note-body .note-meta .meta-transition-group>time{animation-delay:.16s}.note-body .note-meta .meta-transition-group>.reading-time{animation-delay:185ms}.note-body .note-meta>.meta-stagger:nth-child(2){animation-delay:.21s}.note-body .note-meta>.meta-stagger:nth-child(3){animation-delay:235ms}.note-body .note-updated.meta-stagger{animation-delay:.26s}}@media(max-width:960px){.note-body .note-meta .meta-transition-group>time,.note-body .note-meta .meta-transition-group>.reading-time{animation:none;opacity:1;transform:none}.note-body .note-meta>.meta-stagger:nth-child(2){animation-delay:.16s}.note-body .note-meta>.meta-stagger:nth-child(3){animation-delay:185ms}.note-body .note-updated.meta-stagger{animation-delay:.21s}}.note-body .note-summary{animation:article-content-enter-mini var(--post-enter-duration) var(--ease-page) 205ms both}@media(min-width:1281px){.note-body .note-toc-header{animation:article-content-enter-mini var(--post-enter-duration) var(--ease-page) backwards;animation-delay:175ms}.note-body .note-toc-panel li{animation:article-content-enter var(--post-enter-duration) var(--ease-page) backwards;animation-delay:calc(175ms + min(var(--toc-index, 0),8)*25ms)}.note-body .note-right-controls>*{animation:article-content-enter var(--post-enter-duration) var(--ease-page) backwards}.note-body .note-right-controls>*:nth-child(1){animation-delay:.15s}.note-body .note-right-controls>*:nth-child(2){animation-delay:.2s}.note-body .note-right-controls>*:nth-child(3){animation-delay:.25s}}.note-body .article-stagger-meta>*{animation:article-content-enter-mini var(--post-enter-duration) var(--ease-page) both;animation-delay:calc(.1s + min(var(--stagger-index, 0),10)*30ms);opacity:0}.note-body .post-content>*{animation:article-content-enter var(--post-enter-duration) var(--ease-page) both;opacity:0}.note-body .post-content>*:nth-child(1){animation-delay:.15s}.note-body .post-content>*:nth-child(2){animation-delay:.2s}.note-body .post-content>*:nth-child(3){animation-delay:.25s}.note-body .post-content>*:nth-child(4){animation-delay:.3s}.note-body .post-content>*:nth-child(5){animation-delay:.35s}.note-body .post-content>*:nth-child(6){animation-delay:.4s}.note-body .post-content>*:nth-child(7){animation-delay:.45s}.note-body .post-content>*:nth-child(8){animation-delay:.5s}.note-body .post-content>*:nth-child(9){animation-delay:.55s}.note-body .post-content>*:nth-child(10){animation-delay:.6s}.note-body .post-content>*:nth-child(11){animation-delay:.65s}.note-body .post-content>*:nth-child(12){animation-delay:.7s}.note-body .post-content>*:nth-child(13){animation-delay:.75s}.note-body .post-content>*:nth-child(14){animation-delay:.8s}.note-body .post-content>*:nth-child(15){animation-delay:.85s}.note-body .post-content>*:nth-child(n+16){animation-delay:.9s}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-delay:0ms!important;animation-duration:1ms!important;scroll-behavior:auto!important;transition-duration:1ms!important}.hero-avatar-wrap,.side-avatar-wrap,.hero-name,.slogan-glyph,.notes-brand-name,.notes-item-title a,.article-meta-rows,.article-shared-meta,.article-stagger-meta,.note-title span,[data-article-shared]{view-transition-name:none!important}::view-transition-group(*),::view-transition-old(*),::view-transition-new(*){animation-duration:1ms!important}.note-back-link,.note-toc,.notes-item,.article-meta-rows,.article-shared-meta,.article-stagger-meta,.article-stagger-meta>*,.archive-year,.archive-item,.note-summary,.post-content>*{animation:none!important;opacity:1!important;transform:none!important;clip-path:none!important}.note-toc,.note-toc-panel{transition:none!important}.note-toc:not(.is-open) .note-toc-panel{opacity:0!important;transform:none!important;visibility:hidden!important}}html[data-reduced-motion=true] *,html[data-reduced-motion=true] *:before,html[data-reduced-motion=true] *:after{animation-delay:0ms!important;animation-duration:1ms!important;scroll-behavior:auto!important;transition-duration:1ms!important}html[data-reduced-motion=true] .hero-avatar-wrap,html[data-reduced-motion=true] .side-avatar-wrap,html[data-reduced-motion=true] .hero-name,html[data-reduced-motion=true] .slogan-glyph,html[data-reduced-motion=true] .notes-brand-name,html[data-reduced-motion=true] .notes-item-title a,html[data-reduced-motion=true] .article-meta-rows,html[data-reduced-motion=true] .article-shared-meta,html[data-reduced-motion=true] .article-stagger-meta,html[data-reduced-motion=true] .note-title span,html[data-reduced-motion=true] [data-article-shared]{view-transition-name:none!important}html[data-reduced-motion=true] .note-back-link,html[data-reduced-motion=true] .note-toc,html[data-reduced-motion=true] .notes-item,html[data-reduced-motion=true] .article-meta-rows,html[data-reduced-motion=true] .article-shared-meta,html[data-reduced-motion=true] .article-stagger-meta,html[data-reduced-motion=true] .article-stagger-meta>*,html[data-reduced-motion=true] .archive-year,html[data-reduced-motion=true] .archive-item,html[data-reduced-motion=true] .note-summary,html[data-reduced-motion=true] .post-content>*{animation:none!important;opacity:1!important;transform:none!important;clip-path:none!important}html[data-reduced-motion=true] .note-toc,html[data-reduced-motion=true] .note-toc-panel{transition:none!important}html[data-reduced-motion=true] .note-toc:not(.is-open) .note-toc-panel{opacity:0!important;transform:none!important;visibility:hidden!important}.title-glyph{view-transition-class:article-title-glyph;margin:0;padding:0;border:0;display:inline-block}html.article-transition::view-transition-group(.article-title-glyph){animation-duration:var(--duration-shared, .5s);animation-timing-function:cubic-bezier(.22,1,.36,1)}.slogan-glyph{view-transition-class:site-slogan-glyph;margin:0;padding:0;display:inline-block;white-space:pre-wrap}html::view-transition-group(.site-slogan-glyph){animation-duration:var(--duration-shared);animation-timing-function:var(--ease-out)} diff --git a/internal/embedded/static/css/components.css b/internal/embedded/static/css/components.css new file mode 100644 index 00000000..b8cf9974 --- /dev/null +++ b/internal/embedded/static/css/components.css @@ -0,0 +1,1731 @@ +.site-nav { + align-items: center; + display: flex; + flex-wrap: wrap; + gap: 10px 24px; + justify-content: center; + justify-self: center; +} + +.nav-link { + font-family: var(--font-serif); + isolation: isolate; + align-items: center; + color: var(--color-muted); + display: inline-flex; + font-size: 0.92rem; + gap: 0.38rem; + line-height: 1; + padding: 0.25rem 0; + position: relative; + text-decoration: none; + transition: color 180ms ease; +} + +:is(.github-repository-heading a, .github-followers a, .notes-footer-links a, .pagination-btn:not(.is-disabled), .note-rc-btn) { + isolation: isolate; + position: relative; +} + +.nav-link::after, +:is(.github-repository-heading a, .github-followers a, .notes-footer-links a, .pagination-btn:not(.is-disabled), .note-rc-btn)::before { + background: var(--color-marker); + bottom: 0.06em; + content: ""; + height: 0.65em; + left: 0; + pointer-events: none; + position: absolute; + clip-path: inset(0 100% 0 0); + transition: clip-path 350ms cubic-bezier(0.4, 0, 0.6, 1); + width: 100%; + z-index: -1; +} + +.nav-link:hover, +.nav-link:focus-visible, +.github-home a:hover, +.github-home a:focus-visible, +:is(.github-followers a, .notes-footer-links a, .pagination-btn:not(.is-disabled), .note-rc-btn):hover, +:is(.github-followers a, .notes-footer-links a, .pagination-btn:not(.is-disabled), .note-rc-btn):focus-visible, +.site-logo:hover, +.site-logo:focus-visible { + color: var(--color-hover-text); +} + +.nav-link:hover::after, +.nav-link:focus-visible::after, +:is(.github-repository-heading a, .github-followers a, .notes-footer-links a, .pagination-btn:not(.is-disabled), .note-rc-btn):hover::before, +:is(.github-repository-heading a, .github-followers a, .notes-footer-links a, .pagination-btn:not(.is-disabled), .note-rc-btn):focus-visible::before { + clip-path: inset(0); + transition: clip-path 400ms cubic-bezier(0.22, 1, 0.36, 1); +} + +@media (prefers-reduced-motion: reduce) { + .nav-link::after, + :is(.github-repository-heading a, .github-followers a, .notes-footer-links a, .pagination-btn:not(.is-disabled), .note-rc-btn)::before { + transition: none; + } +} + +html[data-reduced-motion="true"] .nav-link::after, +html[data-reduced-motion="true"] :is(.github-repository-heading a, .github-followers a, .notes-footer-links a, .pagination-btn:not(.is-disabled), .note-rc-btn)::before { + transition: none; +} + +.nav-link:hover .nav-icon, +.nav-link:focus-visible .nav-icon, +.github-home a:hover .material-symbol, +.github-home a:focus-visible .material-symbol, +:is(.pagination-btn:not(.is-disabled), .note-rc-btn):hover .material-symbol, +:is(.pagination-btn:not(.is-disabled), .note-rc-btn):focus-visible .material-symbol { + color: inherit; + font-variation-settings: "FILL" 1, "wght" 400, "GRAD" 0, "opsz" 24; +} + +.nav-link:focus-visible, +.site-logo:focus-visible { + outline: 1px solid currentColor; + outline-offset: 6px; +} + +.header-theme-toggle { + height: 28px; + margin-left: 2px; + width: 28px; +} + +.header-theme-toggle .material-symbol { + font-size: 1.15rem; +} +.notes-action-button { + align-items: center; + background: transparent; + border: 0; + border-radius: 50%; + color: var(--color-muted); + cursor: pointer; + display: inline-flex; + height: 32px; + justify-content: center; + padding: 0; + position: relative; + text-decoration: none; + transition: + color 160ms ease, + transform 160ms ease; + width: 32px; +} + +.notes-action-button .material-symbol { + font-size: 1.28rem; +} + +[data-tooltip] { + position: relative; +} + +[data-tooltip]::after { + content: attr(data-tooltip); +} + +[data-tooltip]::after, +.floating-tooltip { + background: var(--color-tooltip-bg); + border-radius: 8px; + top: calc(100% + 9px); + color: var(--color-tooltip-text); + font-family: var(--font-ui); + font-size: 0.72rem; + font-style: normal; + left: 50%; + line-height: 1; + opacity: 0; + padding: 5px 10px; + pointer-events: none; + position: absolute; + transform: translateX(-50%); + clip-path: inset(100% 50% 0 50% round 8px); + transition: + opacity var(--motion-expressive-effects-duration) var(--motion-expressive-effects-easing), + clip-path var(--motion-expressive-effects-duration) var(--motion-expressive-effects-easing); + white-space: nowrap; + z-index: 100; +} + +[data-tooltip]:hover::after, +[data-tooltip]:focus-visible::after, +.floating-tooltip.is-visible { + opacity: 1; + clip-path: inset(0 0 0 0 round 8px); +} + +@media (prefers-reduced-motion: reduce) { + [data-tooltip]::after, + .floating-tooltip { + clip-path: none !important; + transition: opacity 160ms ease !important; + } +} + +html[data-reduced-motion="true"] [data-tooltip]::after, +html[data-reduced-motion="true"] .floating-tooltip { + clip-path: none !important; + transition: opacity 160ms ease !important; +} + +.floating-tooltip { + position: fixed; + top: 0; + left: 0; + transform: none; + max-width: calc(100vw - 16px); + white-space: normal; + overflow-wrap: anywhere; + line-height: 1.35; + z-index: 2100; +} + +.notes-action-button:hover, +.notes-action-button:focus-visible { + color: var(--color-hover-text); + transform: translateY(-2px); +} + +.notes-action-button[aria-expanded="true"], +.notes-action-button[aria-pressed="true"] { + color: var(--color-accent); +} + +.notes-action-button .material-symbol { + font-variation-settings: "FILL" 0, "wght" 400, "GRAD" 0, "opsz" 24; +} + +.notes-action-button:hover .material-symbol, +.notes-action-button:focus-visible .material-symbol { + font-variation-settings: "FILL" 1, "wght" 400, "GRAD" 0, "opsz" 24; +} + +.notes-action-button[aria-expanded="true"] .material-symbol, +.notes-action-button[aria-pressed="true"] .material-symbol { + color: var(--color-accent); +} + + + +.notes-action-button:focus-visible { + outline: 1px solid var(--color-accent); + outline-offset: 4px; +} + +.notes-action-button.header-theme-toggle { + height: 28px; + width: 28px; +} + +.notes-action-button.header-theme-toggle::after { + content: none; + display: none; +} + +.notes-action-button.header-theme-toggle:hover, +.notes-action-button.header-theme-toggle:focus-visible { + transform: none; +} + +.notes-tools { + --notes-tool-shift-ease: cubic-bezier(0.2, 0.78, 0.24, 1); + + display: grid; + gap: 0.65rem; + margin: 0; + min-width: 0; + opacity: 0; + transition: + margin 300ms var(--ease-out), + opacity 180ms ease; +} + +.notes-tools.has-open-panel { + margin: 0 0 clamp(1rem, 2.2vw, 1.35rem); + opacity: 1; +} + +.notes-tool-panel { + max-height: 0; + min-height: 0; + opacity: 0; + overflow: hidden; + pointer-events: none; + transform: translateY(6px); + transition: + max-height 360ms var(--notes-tool-shift-ease), + opacity 180ms ease, + transform 320ms var(--ease-out), + visibility 0ms linear 360ms; + visibility: hidden; +} + +.notes-tools.is-search-open .notes-search-panel { + max-height: 4.25rem; + opacity: 1; + pointer-events: auto; + transform: translateY(0); + transition: + max-height 360ms var(--notes-tool-shift-ease), + opacity 220ms ease, + transform 320ms var(--ease-out), + visibility 0ms linear 0ms; + visibility: visible; +} + +.notes-tools.is-tags-open .notes-tags-panel { + max-height: clamp(15rem, 50vh, 25rem); + opacity: 1; + pointer-events: auto; + transform: translateY(0); + transition: + max-height 360ms var(--notes-tool-shift-ease), + opacity 220ms ease, + transform 360ms var(--notes-tool-shift-ease), + visibility 0ms linear 0ms; + visibility: visible; +} + +.notes-tags-panel { + position: relative; + overflow: hidden; +} + +.notes-tags-scroll-viewport { + height: 100%; + max-height: inherit; + overflow-y: auto; + overflow-x: hidden; + overscroll-behavior: contain; + scrollbar-width: none; + padding-right: 0.25rem; +} + +.notes-tags-scroll-viewport::-webkit-scrollbar { + display: none; +} + +.notes-tags-scrollbar { + position: absolute; + right: 0; + top: 0; + bottom: 0; + width: 6px; + pointer-events: none; + opacity: 0; + transition: opacity 220ms ease; + visibility: hidden; +} + +.notes-tags-scrollbar.is-visible { + opacity: 1; + visibility: visible; +} + +.notes-tags-scrollbar-thumb { + position: absolute; + right: 0; + top: 0; + width: 100%; + background: color-mix(in srgb, var(--color-muted) 35%, transparent); + border-radius: 999px; + will-change: transform, height; +} + + + +.notes-search-input { + background: color-mix(in srgb, var(--color-paper) 72%, transparent); + border: 1px solid var(--color-line); + border-radius: 6px; + color: var(--color-text); + font: 0.84rem/1.4 var(--font-ui); + max-width: 100%; + opacity: 0; + padding: 0.62rem 0.72rem; + transform: translate(12px, -4px); + transition: + border-color 160ms ease, + color 160ms ease, + opacity 220ms ease, + transform 300ms var(--ease-out); + width: min(100%, 18rem); +} + +.notes-search-input::placeholder { + color: var(--color-muted); + opacity: 0.74; +} + +.notes-search-input:focus { + border-color: var(--color-accent); + outline: 0; +} + +.notes-tools.is-search-open .notes-search-input { + opacity: 1; + transform: translate(0, 0); +} + +.notes-tag-list { + display: flex; + flex-wrap: wrap; + gap: 0.8rem; + max-width: 100%; +} + +.notes-tag-link { + border: 1px solid color-mix(in srgb, var(--color-muted) 25%, transparent); + border-radius: 999px; + color: var(--color-muted); + display: inline-grid; + font-family: var(--font-ui); + font-size: 0.85rem; + line-height: 1.35; + max-width: 100%; + opacity: 0; + padding: 0.35rem 0.9rem; + position: relative; + text-decoration: none; + transform: translateY(7px); + transition-property: border-color, color, opacity, transform; + transition-duration: 160ms, 160ms, 180ms, 320ms; + transition-timing-function: ease, ease, ease, var(--ease-out); + transition-delay: 0ms; +} + +.notes-tag-link span { + grid-area: 1 / 1; + max-width: 100%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.notes-tools.is-tags-open .notes-tag-link, +body.is-tags-overlay-open .mobile-tags-overlay .notes-tag-link { + opacity: 1; + transform: translateY(0); + transition-delay: 0ms, 0ms, calc(var(--tag-index, 0) * 42ms), calc(var(--tag-index, 0) * 42ms); +} + +.notes-tag-link:hover, +.notes-tag-link:focus-visible, +.notes-tag-link.is-active { + border-color: color-mix(in srgb, var(--color-muted) 80%, transparent); + color: var(--color-hover-text); +} + +.notes-tag-link:focus-visible { + outline: 1px solid var(--color-accent); + outline-offset: 4px; +} + +.notes-tool-empty { + color: var(--color-muted); + font-family: var(--font-ui); + font-size: 0.82rem; + margin: 0; +} + +@media (prefers-reduced-motion: reduce) { + .notes-tools, + .notes-tool-panel, + .notes-search-input, + .notes-tag-link { + transition-delay: 0ms !important; + } + + .notes-tool-panel, + .notes-search-input, + .notes-tag-link { + transform: none !important; + } +} + +.notes-footer-links { + display: grid; + gap: 2px; +} + +.footer-link-row { + align-items: center; + display: flex; + flex-wrap: wrap; + gap: 0.35rem; +} + +.search-highlight { + background-color: var(--color-accent); + border-radius: 2px; + color: var(--color-page); +} + +.notes-footer-links a { + color: var(--color-muted); + text-decoration: none; + transition: color 180ms ease; +} + +.notes-footer-links a:hover, +.notes-footer-links a:focus-visible { + color: var(--color-hover-text); +} + +.footer-separator { + color: var(--color-muted); + text-decoration: none; + user-select: none; +} +.note-toc-header { + align-items: center; + display: inline-flex; + gap: 0.5rem; + margin-bottom: 0.65rem; +} + +.note-toc-toggle { + align-items: center; + background: transparent; + border: 0; + border-radius: 50%; + color: var(--color-muted); + cursor: pointer; + display: inline-flex; + height: 2rem; + justify-content: center; + padding: 0; + transition: + color 160ms ease, + transform 160ms ease; + width: 2rem; +} + +.note-toc-toggle .material-symbol { + font-size: 1.25rem; + transition: transform 350ms cubic-bezier(0.42, 1.67, 0.21, 0.9); +} + +.note-toc:not(.is-open) .note-toc-toggle .material-symbol { + transform: rotate(-180deg); +} + +.note-toc-title { + font-family: var(--font-serif); + color: var(--color-muted); + font-size: 0.78rem; + line-height: 1; +} + +.note-toc-toggle:hover, +.note-toc-toggle:focus-visible { + color: var(--color-hover-text); +} + +.note-toc-toggle:hover .material-symbol, +.note-toc-toggle:focus-visible .material-symbol { + font-variation-settings: "FILL" 1, "wght" 400, "GRAD" 0, "opsz" 24; +} + +.note-toc-toggle:focus-visible { + outline: 1px solid var(--color-accent); + outline-offset: 4px; +} + +.note-toc-panel { + display: grid; + grid-template-rows: 1fr; + max-height: calc(100vh - 176px); + opacity: 1; + overflow: hidden; + position: relative; + transition: + grid-template-rows var(--toc-collapse-duration) var(--ease-out), + opacity var(--toc-collapse-duration) ease, + transform var(--toc-collapse-duration) var(--ease-out), + visibility var(--toc-collapse-duration) ease; + visibility: visible; +} + +.note-toc:not(.is-open) .note-toc-panel { + grid-template-rows: 0fr; + opacity: 0; + pointer-events: none; + transform: translateY(-0.45rem); + visibility: hidden; +} + +.note-toc-panel ol { + display: grid; + gap: 0.55rem; + list-style: none; + margin: 0; + min-height: 0; + overflow: auto; + padding: 0 0 0 14px; + position: relative; + scrollbar-width: none; + -ms-overflow-style: none; +} + +.note-toc-indicator { + position: absolute; + left: 0; + top: 0; + width: 2px; + background-color: var(--color-accent); + transition: transform 0.4s cubic-bezier(0.25, 1, 0.5, 1), opacity 0.3s ease; + transform-origin: top; + opacity: var(--indicator-opacity, 0); + transform: translateY(var(--indicator-y, 0)) scaleY(var(--indicator-scale, 1)); + pointer-events: none; + z-index: 1; +} + +.note-toc-panel ol::-webkit-scrollbar { + display: none; +} + +.note-toc-panel a { + color: var(--color-muted); + display: inline-block; + text-decoration: none; + transition: color 160ms ease; +} + +.note-toc-panel a:hover, +.note-toc-panel a:focus-visible { + color: var(--color-hover-text); +} + +.note-toc-panel a.is-active { + color: var(--color-accent); +} + +.note-toc-depth-3 { + margin-left: 1rem; +} + +.note-toc-depth-4 { + margin-left: 2rem; +} + +.reading-toc-rail { + --reading-toc-rail-direction: 1; + + clip-path: inset(0 100% 0 0); + color: var(--color-muted); + font-family: var(--font-ui); + height: var(--reading-toc-rail-height); + left: 0; + opacity: 0; + filter: opacity(var(--hover-opacity, 1)); + pointer-events: none; + position: absolute; + top: 0; + transform: translate3d(calc(var(--reading-toc-rail-collapse-shift) * -1), 0, 0); + transition: + opacity var(--reading-toc-rail-state-duration) ease, + transform var(--reading-toc-rail-state-duration) var(--reading-toc-rail-state-ease), + clip-path var(--reading-toc-rail-state-duration) var(--reading-toc-rail-state-ease); + width: 100%; +} + + + +.reading-toc-rail-svg, +.reading-toc-rail-dots { + height: 100%; + inset: 0; + pointer-events: none; + position: absolute; + width: 100%; +} + +.reading-toc-rail-svg { + display: block; + overflow: visible; +} + +.reading-toc-rail-base, +.reading-toc-rail-accent { + fill: none; + stroke-linecap: round; + stroke-dasharray: 0.12 2; + stroke-linejoin: round; + vector-effect: non-scaling-stroke; +} + +.reading-toc-rail-base { + stroke: color-mix(in srgb, var(--color-line) 82%, var(--color-muted)); + stroke-width: var(--reading-toc-rail-line-width); +} + +.reading-toc-rail-accent { + stroke-dasharray: none; + stroke: var(--color-accent); + stroke-width: var(--reading-toc-rail-accent-line-width); +} + +[data-reading-toc-rail-dot] { + --reading-toc-rail-dot-opacity: 0.72; + --reading-toc-rail-dot-scale: 1; + + appearance: none; + background: transparent; + border: 0; + border-radius: 50%; + height: var(--reading-toc-rail-dot-hit-size); + margin: 0; + padding: 0; + pointer-events: none; + position: absolute; + transform: translate(-50%, -50%); + width: var(--reading-toc-rail-dot-hit-size); +} + +[data-reading-toc-rail-dot]::before { + background: color-mix(in srgb, var(--color-line) 64%, var(--color-muted)); + border-radius: 50%; + content: ""; + height: var(--reading-toc-rail-dot-size); + left: 50%; + opacity: var(--reading-toc-rail-dot-opacity); + position: absolute; + top: 50%; + transform: translate(-50%, -50%) scale(var(--reading-toc-rail-dot-scale)); + transition: + background-color 160ms ease, + opacity 160ms ease, + transform 160ms var(--ease-out); + width: var(--reading-toc-rail-dot-size); +} + +[data-reading-toc-rail-dot][data-heading-level="3"] { + --reading-toc-rail-dot-opacity: 0.62; + --reading-toc-rail-dot-scale: 0.84; +} + +[data-reading-toc-rail-dot][data-heading-level="4"], +[data-reading-toc-rail-dot][data-heading-level="5"], +[data-reading-toc-rail-dot][data-heading-level="6"] { + --reading-toc-rail-dot-opacity: 0.5; + --reading-toc-rail-dot-scale: 0.7; +} + +[data-reading-toc-rail-dot].is-active::before, +[data-reading-toc-rail-dot][aria-current="true"]::before { + --reading-toc-rail-dot-opacity: 1; + --reading-toc-rail-dot-scale: 1; + + background: var(--color-accent); +} + + + +.reading-toc-rail-current { + align-items: flex-end; + color: var(--color-muted); + display: flex; + flex-direction: column; + font-size: 0.72rem; + line-height: 1.35; + max-width: var(--reading-toc-rail-title-max-width); + min-width: 0; + pointer-events: auto; + position: absolute; + text-align: right; + text-decoration: none; + transform: translate3d(0, 0, 0); + transform-origin: right center; + width: max-content; + will-change: transform; +} + + + +[data-note-toc-stage][data-rail-direction="1"] .reading-toc-rail-current { + align-items: flex-start; + text-align: left; + transform-origin: left center; +} + +.reading-toc-rail-current:hover, +.reading-toc-rail-current:focus-visible { + color: var(--color-accent); +} + +.reading-toc-rail-current:focus-visible { + border-radius: 2px; + outline: 1px solid var(--color-accent); + outline-offset: 4px; +} + +.reading-toc-rail-title-stage { + display: grid; + height: 2.7em; + max-width: 100%; + min-height: 2.7em; +} + +.reading-toc-rail-title { + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; + display: -webkit-box; + grid-area: 1 / 1; + line-clamp: 2; + max-width: 100%; + opacity: 0; + overflow: hidden; + overflow-wrap: anywhere; + transform: translate3d(0, var(--reading-toc-rail-label-shift), 0); + transition: + opacity var(--reading-toc-rail-label-duration) ease, + transform var(--reading-toc-rail-label-duration) var(--reading-toc-rail-label-ease); +} + +.reading-toc-rail-title.is-active, +.reading-toc-rail-title:not([aria-hidden="true"]) { + opacity: 1; + transform: translate3d(0, 0, 0); +} + +.reading-toc-rail-title[aria-hidden="true"] { + opacity: 0; + transform: translate3d(0, var(--reading-toc-rail-label-shift), 0); +} + +.reading-toc-rail-title.is-leaving[aria-hidden="true"] { + transform: translate3d(0, calc(var(--reading-toc-rail-label-shift) * -1), 0); +} + +.reading-toc-rail-percent { + color: var(--color-accent); + font-size: 0.68rem; + font-variant-numeric: tabular-nums; + margin-top: 0.12rem; +} + +html[data-reduced-motion="true"] .reading-toc-rail, +html[data-reduced-motion="true"] .reading-toc-rail-title, +html[data-reduced-motion="true"] [data-reading-toc-rail-dot]::before { + transition: none !important; +} + +@media (prefers-reduced-motion: reduce) { + .reading-toc-rail, + .reading-toc-rail-title, + [data-reading-toc-rail-dot]::before { + transition: none !important; + } +} + + + +.zoom-overlay { + background-color: color-mix(in srgb, var(--color-page) 95%, transparent); + cursor: default; + touch-action: none; + overscroll-behavior: contain; + display: none; + height: 100%; + left: 0; + opacity: 0; + position: fixed; + top: 0; + transition: opacity 300ms cubic-bezier(0.4, 0, 0.2, 1); + width: 100%; + z-index: 3000; +} + +.zoom-img { + cursor: zoom-in; + margin: 0 !important; + position: fixed; + max-width: none; + max-height: none; + user-select: none; + touch-action: none; + z-index: 3001; +} + +.zoom-control { + position: fixed; + z-index: 3002; + display: grid; + place-items: center; + width: 44px; + height: 44px; + padding: 0; + border: 0; + border-radius: 10px; + background: color-mix(in srgb, var(--color-page) 88%, transparent); + color: var(--color-text); + cursor: pointer; +} +.zoom-control:hover { background: var(--color-accent-soft, var(--color-paper)); } +.zoom-control:focus-visible { outline: 2px solid var(--color-accent); outline-offset: 3px; } +.zoom-control:disabled { opacity: .25; cursor: default; } +.zoom-control .material-symbol { font-size: 26px; width: 26px; height: 26px; overflow: hidden; pointer-events: none; } +.zoom-previous { left: max(12px, env(safe-area-inset-left)); top: calc(50% - 22px); } +.zoom-next { right: max(12px, env(safe-area-inset-right)); top: calc(50% - 22px); } +.zoom-close { right: max(16px, env(safe-area-inset-right)); top: max(16px, env(safe-area-inset-top)); } +.zoom-toggle { right: max(68px, calc(env(safe-area-inset-right) + 52px)); top: max(16px, env(safe-area-inset-top)); } +.zoom-status, .zoom-caption { + position: fixed; + z-index: 3002; + left: 50%; + transform: translateX(-50%); + max-width: calc(100% - 140px); + color: var(--color-text); + font-family: var(--font-ui); + font-size: .88rem; + text-align: center; + pointer-events: none; +} +.zoom-status { top: max(28px, env(safe-area-inset-top)); font-variant-numeric: tabular-nums; } +.zoom-caption { bottom: max(20px, env(safe-area-inset-bottom)); max-height: 3.2em; overflow: hidden; } +.zoom-overlay[aria-busy="true"] .zoom-img { cursor: progress; } +/* Use the shared tooltip skin; only its edge alignment changes in the viewer. */ +.zoom-previous[data-tooltip]::after { left: 0; transform: none; } +.zoom-next[data-tooltip]::after, .zoom-close[data-tooltip]::after { left: auto; right: 0; transform: none; } +@media (max-width: 767px) { + .zoom-previous, .zoom-next { top: auto; bottom: max(12px, env(safe-area-inset-bottom)); } + .zoom-previous[data-tooltip]::after, .zoom-next[data-tooltip]::after { top: auto; bottom: calc(100% + 9px); } + .zoom-status { left: 20px; transform: none; max-width: calc(100% - 140px); } +} + +/* Mobile Menu Toggle */ +.mobile-menu-toggle { + align-items: center; + background: transparent; + border: 0; + border-radius: 50%; + color: var(--color-text); + cursor: pointer; + display: none; + height: 40px; + justify-content: center; + margin-left: 0; + padding: 0; + position: relative; + width: 40px; +} + +@media (max-width: 960px) { + .mobile-menu-toggle { + display: inline-flex; + } +} + +.mobile-menu-toggle .material-symbol { + font-size: 1.5rem; + left: 50%; + position: absolute; + top: 50%; + transform: translate(-50%, -50%) rotate(0deg); + transition: opacity 350ms cubic-bezier(0.42, 1.67, 0.21, 0.9), transform 350ms cubic-bezier(0.42, 1.67, 0.21, 0.9); +} + +.mobile-menu-toggle .icon-close { + opacity: 0; + transform: translate(-50%, -50%) rotate(-90deg); +} + +body.is-mobile-drawer-open .mobile-menu-toggle .icon-menu { + opacity: 0; + transform: translate(-50%, -50%) rotate(90deg); +} + +body.is-mobile-drawer-open .mobile-menu-toggle .icon-close { + opacity: 1; + transform: translate(-50%, -50%) rotate(0deg); +} + +/* Base states for icon swap without content replacement if preferred. Actually we can just swap textContent via JS or use CSS content */ +/* Wait, we'll swap textContent in CSS? No, we can just use textContent in JS or CSS ::after. */ + +/* Drawer Mask */ +.mobile-drawer-mask { + background: color-mix(in srgb, var(--color-page) 60%, transparent); + backdrop-filter: blur(4px); + -webkit-backdrop-filter: blur(4px); + bottom: 0; + display: none; + left: 0; + opacity: 0; + pointer-events: none; + position: fixed; + right: 0; + top: 0; + transition: opacity 320ms cubic-bezier(0.2, 0.78, 0.24, 1); + z-index: 2005; +} + +@media (max-width: 960px) { + .mobile-drawer-mask { + display: block; + pointer-events: none; + } + body.is-mobile-drawer-open .mobile-drawer-mask { + opacity: 1; + pointer-events: auto; + } +} + +/* Mobile Drawer */ +.mobile-drawer { + background: var(--color-page); + border-left: 1px solid var(--color-line); + bottom: 0; + display: none; + height: calc(100dvh - var(--mobile-topbar-height, 0)); + max-width: 400px; + position: fixed; + right: 0; + top: var(--mobile-topbar-height, 0); + transform: translateX(100%); + transition: transform 320ms cubic-bezier(0.2, 0.78, 0.24, 1), visibility 0s linear 320ms; + visibility: hidden; + width: 82vw; + z-index: 2006; +} + +@media (max-width: 960px) { + .mobile-drawer { + display: block; + } + body.is-mobile-drawer-open .mobile-drawer { + transform: translateX(0); + transition: transform 420ms cubic-bezier(0.2, 0.78, 0.24, 1), visibility 0s linear 0s; + visibility: visible; + } +} + +.mobile-drawer-content { + display: flex; + flex-direction: column; + height: 100%; + overflow-y: auto; + padding: 24px 24px calc(24px + env(safe-area-inset-bottom)); + scrollbar-width: none; +} +.mobile-drawer-content::-webkit-scrollbar { + display: none; +} + +.mobile-drawer-nav, +.mobile-drawer-funcs, +.mobile-drawer-switches { + display: flex; + flex-direction: column; + gap: 8px; +} + +.mobile-drawer-divider { + background: var(--color-line); + height: 1px; + margin: 20px 0; + width: 100%; +} + +.drawer-nav-link { + align-items: center; + background: transparent; + border: none; + border-radius: 12px; + color: var(--color-text); + cursor: pointer; + display: flex; + gap: 16px; + min-height: 48px; + padding: 0 12px; + text-decoration: none; + transition: background 160ms ease, color 160ms ease; + width: 100%; +} + +.drawer-nav-link:focus-visible, +.drawer-footer-row a:focus-visible { + outline: 1px solid var(--color-accent); + outline-offset: 4px; +} + +.drawer-nav-link .material-symbol { + font-size: 1.35rem; +} + +.drawer-nav-label { + font-family: var(--font-serif); + font-size: 1.05rem; +} + +/* Material Switch */ +.drawer-switch-item { + align-items: center; + cursor: pointer; + display: flex; + justify-content: space-between; + min-height: 48px; + padding: 0 12px; +} + +.drawer-switch-label { + align-items: center; + display: flex; + gap: 16px; +} + +.drawer-switch-label .material-symbol { + color: var(--color-text); + font-size: 1.35rem; +} + +.drawer-switch-text { + color: var(--color-text); + font-family: var(--font-ui); + font-size: 1.05rem; +} + +.material-switch { + align-items: center; + background: transparent; + border: 0; + cursor: pointer; + display: inline-flex; + height: 32px; + padding: 0; + position: relative; + width: 52px; +} + +.switch-track { + background: var(--color-paper); + border: 2px solid var(--color-muted); + border-radius: 16px; + height: 100%; + transition: background 200ms cubic-bezier(0.34, 0.8, 0.34, 1), border-color 200ms cubic-bezier(0.34, 0.8, 0.34, 1); + width: 100%; +} + +.switch-thumb { + background: var(--color-muted); + border-radius: 50%; + height: 16px; + left: 16px; + position: absolute; + top: 50%; + transform: translate(-50%, -50%); + transition: + background 200ms cubic-bezier(0.34, 0.8, 0.34, 1), + width 350ms cubic-bezier(0.42, 1.67, 0.21, 0.9), + height 350ms cubic-bezier(0.42, 1.67, 0.21, 0.9), + left 350ms cubic-bezier(0.42, 1.67, 0.21, 0.9); + width: 16px; +} + +.material-switch[aria-checked="true"] .switch-track { + background: var(--color-accent); + border-color: var(--color-accent); +} + +.material-switch[aria-checked="true"] .switch-thumb { + background: var(--color-page); + height: 24px; + left: 36px; + width: 24px; +} + +.material-switch.is-pressed .switch-thumb { + height: 28px; + width: 28px; +} + +/* Drawer Footer */ +.mobile-drawer-footer { + margin-top: auto; + padding-top: 24px; +} + +.drawer-footer-row { + align-items: center; + display: flex; + flex-wrap: wrap; + gap: 0.35rem; + margin-bottom: 4px; +} + +.drawer-footer-row a { + color: var(--color-muted); + font-family: var(--font-ui); + font-size: 0.82rem; + text-decoration: none; + transition: color 180ms ease; +} + +.drawer-copyright { + color: var(--color-muted); + font-family: var(--font-ui); + font-size: 0.82rem; + margin: 12px 0 0; +} + +/* Mobile Overlays */ +.mobile-overlay-container { + bottom: 0; + display: none; + left: 0; + pointer-events: none; + position: fixed; + right: 0; + top: var(--mobile-topbar-height, 0); + z-index: 1905; +} + +@media (max-width: 960px) { + .mobile-overlay-container { + display: block; + } +} + +.mobile-overlay-mask { + background: color-mix(in srgb, var(--color-page) 85%, transparent); + backdrop-filter: blur(12px); + -webkit-backdrop-filter: blur(12px); + bottom: 0; + left: 0; + opacity: 0; + position: absolute; + right: 0; + top: 0; + transition: opacity 300ms cubic-bezier(0.2, 0.78, 0.24, 1); +} + +body.is-tags-overlay-open .mobile-overlay-container, +body.is-search-overlay-open .mobile-overlay-container { + pointer-events: auto; +} + +body.is-tags-overlay-open .mobile-overlay-mask, +body.is-search-overlay-open .mobile-overlay-mask { + opacity: 1; + transition: opacity 300ms cubic-bezier(0.2, 0.78, 0.24, 1) 0ms; +} + +.mobile-overlay { + bottom: 0; + display: flex; + flex-direction: column; + left: 0; + opacity: 0; + position: absolute; + right: 0; + top: 0; + max-height: none; + overflow: hidden; + background: var(--color-page); + border-radius: 0; + transform: translateY(10px); + transition: opacity 300ms cubic-bezier(0.2, 0.78, 0.24, 1), transform 300ms cubic-bezier(0.2, 0.78, 0.24, 1), visibility 0s linear 300ms; + visibility: hidden; +} + +body.is-tags-overlay-open .mobile-tags-overlay, +body.is-search-overlay-open .mobile-search-overlay { + opacity: 1; + transform: translateY(0); + transition: opacity 300ms cubic-bezier(0.2, 0.78, 0.24, 1), transform 300ms cubic-bezier(0.2, 0.78, 0.24, 1), visibility 0s linear 0s; + visibility: visible; +} + +.mobile-overlay-header { + align-items: center; + display: flex; + flex-shrink: 0; + gap: 16px; + min-height: 72px; + padding: 16px 24px 0; +} + +.mobile-overlay-title { + color: var(--color-text); + flex: 1; + font-family: var(--font-serif); + font-size: 1.3rem; + margin: 0; +} + +.mobile-overlay-close { + flex-shrink: 0; + align-items: center; + background: transparent; + border: none; + border-radius: 50%; + color: var(--color-muted); + cursor: pointer; + display: flex; + height: 40px; + justify-content: center; + margin-left: auto; + padding: 0; + transition: color 160ms ease; + width: 40px; +} + +.mobile-overlay-close:hover, +.mobile-overlay-close:focus-visible { + color: var(--color-hover-text); +} + +.mobile-overlay-close:focus-visible { + outline: 1px solid var(--color-accent); +} + +.mobile-overlay-close .material-symbol { + font-size: 1.5rem; +} + +.mobile-search-input-wrapper { + min-width: 0; + align-items: center; + background: color-mix(in srgb, var(--color-paper) 72%, transparent); + border: 1px solid var(--color-line); + border-radius: 8px; + display: flex; + flex: 1; + padding: 0 12px; + transition: border-color 160ms ease; +} + +.mobile-search-input-wrapper:focus-within { + border-color: var(--color-accent); +} + +.mobile-search-icon { + color: var(--color-muted); + font-size: 1.25rem; +} + +.mobile-search-input { + background: transparent; + border: none; + color: var(--color-text); + flex: 1; + font: 0.95rem/1.4 var(--font-ui); + padding: 10px; + width: 100%; +} + +.mobile-search-input::placeholder { + color: var(--color-muted); + opacity: 0.74; +} + +.mobile-search-input:focus { + outline: 0; +} + +.mobile-overlay-content { + flex: 1; + min-height: 0; + overflow-y: auto; + overscroll-behavior-y: contain; + padding: 24px 24px calc(24px + env(safe-area-inset-bottom)); +} + +/* Desktop tags replace the content area while navigation and tools remain available. */ +@media (min-width: 961px) { + .mobile-overlay-container { + display: block; + top: 72px; + z-index: 920; + } + + .page-body .mobile-overlay-container { + left: var(--side-rail-width); + } + + .mobile-overlay-mask, .mobile-search-overlay { + display: none; + } + + .mobile-tags-overlay { + inset: 0; + max-height: none; + border-radius: 0; + padding: 0 clamp(32px, 6vw, 84px) 32px; + } + + /* Balance the reserved left navigation space so tags share the article center. */ + .page-body .mobile-tags-overlay { + padding-inline: 0 var(--side-rail-width); + } + + .mobile-tags-overlay .mobile-overlay-header, + .mobile-tags-overlay .mobile-overlay-content { + width: min(var(--notes-content-width), 100%); + margin-inline: auto; + padding-inline: 0; + } + + body.is-tags-overlay-open .page-frame main, + body.is-tags-overlay-open .home-footer { + visibility: hidden; + } +} + +.mobile-search-results { + display: flex; + flex-direction: column; + gap: 16px; +} + +.mobile-search-results .notes-item-header { grid-template-columns: auto minmax(0, 1fr); } +.mobile-search-results .notes-item-meta { + min-width: 0; + max-width: 100%; + flex-wrap: wrap; + white-space: normal; + line-height: 1.4; + row-gap: .35rem; +} + +.mobile-overlay-empty, +.mobile-search-loading { + color: var(--color-muted); + font-family: var(--font-ui); + font-size: 0.95rem; + margin: 0; + text-align: center; +} + + +/* Article Title Morphable Layout */ + + +/* Theme Icons Container */ +.theme-icon-container { + display: flex; + align-items: center; + justify-content: center; + width: 24px; + height: 24px; +} + +.theme-icon-container svg { + display: none; + transition: transform 0.25s ease; + color: inherit; +} + +:root[data-theme-mode="light"] .theme-toggle svg.lucide-sun, +:root[data-theme-mode="dark"] .theme-toggle svg.lucide-moon, +:root[data-theme-mode="system"] .theme-toggle svg.lucide-sun-moon { + display: block; +} + +.theme-toggle:hover .theme-icon-container svg, +.theme-toggle:focus-visible .theme-icon-container svg { + transform: rotate(20deg); +} + +.theme-toggle:active .theme-icon-container svg { + transform: rotate(90deg); +} + +/* Ensure palette icon is highlighted in warm or cool mode appropriately? + Instruction 14: Desktop palette icon always highlights like warm state. + Wait, "无论当å‰�是 Cool 还是 Warm,Desktop çš„ palette icon 都ä¿�æŒ�与 warm 状æ€�相å�Œç­‰çº§çš„高亮色... Visual highlight and accessibility state 分离" +*/ +.notes-action-button.palette-toggle .material-symbol { + color: var(--color-accent); /* Always visually active */ +} + +/* Mobile Theme Selector */ +.mobile-theme-selector { + --theme-position: 1; + display: flex; + align-items: center; + position: relative; + width: max-content; + padding: 4px; + gap: 4px; + border-radius: 999px; + background: color-mix(in srgb, var(--color-accent) 12%, var(--color-page)); +} + +.theme-selector-indicator { + position: absolute; + top: 4px; + left: calc(4px + var(--theme-position) * 36px); + right: calc(4px + (2 - var(--theme-position)) * 36px); + height: 32px; + border-radius: 16px; + background: var(--color-accent); + pointer-events: none; + /* The leading edge moves first; the trailing edge catches up without a bounce. + Total duration matches the theme change's 350ms preparation phase. */ + transition: left 280ms cubic-bezier(.22, .61, .36, 1), + right 280ms cubic-bezier(.22, .61, .36, 1); + z-index: 0; +} + +.mobile-theme-selector[data-direction="right"] .theme-selector-indicator { + transition-delay: 70ms, 0ms; +} +.mobile-theme-selector[data-direction="left"] .theme-selector-indicator { + transition-delay: 0ms, 70ms; +} + +:root[data-theme-mode="light"] .mobile-theme-selector { + --theme-position: 0; +} +:root[data-theme-mode="dark"] .mobile-theme-selector { + --theme-position: 2; +} + +.theme-selector-btn { + position: relative; + z-index: 1; + background: transparent; + border: 0; + width: 32px; + height: 32px; + padding: 0; + display: flex; + align-items: center; + justify-content: center; + color: var(--color-muted); + cursor: pointer; + border-radius: 50%; + transition: color 150ms ease; +} + +.theme-selector-btn svg { + width: 18px; + height: 18px; +} + +.theme-selector-btn[aria-checked="true"] { + color: var(--color-page); +} + +.theme-selector-btn:focus-visible { + outline: 2px solid var(--color-accent); + outline-offset: 4px; +} + +@media (prefers-reduced-motion: reduce) { + .theme-selector-indicator, + .theme-icon-container svg { + transition: none !important; + } +} + +/* Reader Mode & Share Toggles */ +.reader-mode-toggle, +.share-toggle-btn { + align-items: center; + background: transparent; + border: 0; + color: var(--color-muted); + cursor: pointer; + display: inline-flex; + font-family: inherit; + justify-content: center; + margin: 0; + padding: 0; + position: relative; + transition: color 160ms ease, transform 160ms ease; + vertical-align: text-bottom; +} + +.reader-mode-toggle:hover, +.reader-mode-toggle:focus-visible, +.share-toggle-btn:hover, +.share-toggle-btn:focus-visible { + color: var(--color-hover-text); +} + +.reader-mode-toggle[aria-pressed="true"], +.share-toggle-btn[aria-pressed="true"] { + color: var(--color-accent); +} + +.reader-mode-toggle .material-symbol, +.share-toggle-btn .material-symbol { + font-size: 1.15em; + line-height: 1; +} + +.reader-mode-exit { + align-items: center; + background: transparent; + border: 0; + border-radius: 4px; + color: var(--color-muted); + cursor: pointer; + display: flex; + height: calc(var(--note-title-size) * 1.15); + justify-content: center; + padding: 0; + position: relative; + transition: color 160ms ease; + width: 36px; + z-index: 10; +} + +.reader-mode-exit:hover, +.reader-mode-exit:focus-visible { + color: var(--color-hover-text); +} + +.reader-mode-exit .material-symbol { + font-size: 1.3rem; +} + +.reader-mode-exit[hidden] { + display: none !important; +} + +/* Article feedback and the site-wide subscription entry share existing colors. */ +.article-action { + display: inline-flex; + align-items: center; + justify-content: center; + gap: .35em; + padding: 0; + min-height: 28px; + border: 0; + background: transparent; + color: var(--color-muted); + font: inherit; + cursor: pointer; + text-decoration: none; + vertical-align: middle; +} +.article-action .material-symbol { font-size: 1.15em; } +.article-action:hover, .article-action:focus-visible { color: var(--color-hover-text); } +.like-button[aria-pressed="true"] { color: var(--color-accent); } +.like-button[aria-pressed="true"] .material-symbol { font-variation-settings: "FILL" 1; } +.like-button:disabled { cursor: wait; opacity: .6; } +.like-entry { display: inline-flex; align-items: center; } +.like-button .material-symbol { position: relative; display: inline-block; transform-origin: center; } +.like-button[data-like-feedback="success"] .material-symbol { + color: var(--color-accent); + animation: like-confirm 480ms cubic-bezier(.2, .8, .3, 1); +} +.like-button[data-like-feedback="success"][aria-pressed="true"] .material-symbol::before { + content: ""; + position: absolute; + inset: -.3em; + border: 1px solid currentColor; + border-radius: 50%; + pointer-events: none; + opacity: 0; + animation: like-ripple 520ms ease-out; +} +.like-button[data-like-feedback="error"] .material-symbol { + color: var(--syntax-error); + animation: like-reject 360ms ease-in-out; +} +@keyframes like-confirm { + 0%, 100% { transform: scale(1); } + 22% { transform: scale(.8); } + 55% { transform: scale(1.3); } + 78% { transform: scale(.96); } +} +@keyframes like-ripple { + 0% { transform: scale(.6); opacity: .65; } + 100% { transform: scale(1.5); opacity: 0; } +} +@keyframes like-reject { + 0%, 100% { transform: translateX(0); } + 20%, 60% { transform: translateX(-3px); } + 40%, 80% { transform: translateX(3px); } +} +@media (prefers-reduced-motion: reduce) { + .like-button[data-like-feedback][aria-pressed] .material-symbol, + .like-button[data-like-feedback][aria-pressed] .material-symbol::before { animation: none; } +} +html[data-reduced-motion="true"] .like-button[data-like-feedback][aria-pressed] .material-symbol, +html[data-reduced-motion="true"] .like-button[data-like-feedback][aria-pressed] .material-symbol::before { animation: none; } +.memo-actions { margin-top: .65rem; color: var(--color-muted); } +.rss-dialog.settings-overlay { + margin: 0; + padding: 16px 0; + max-width: none; + max-height: none; + height: 100dvh; + border: 0; + background: transparent; + color-scheme: light; +} +.rss-dialog:not([open]) { display: none; } +.rss-dialog::backdrop { background: transparent; } +.rss-dialog .rss-paper { + min-height: min(480px, calc(100dvh - 32px)); + max-height: calc(100dvh - 32px); + overflow-y: auto; + font-size: 1.05rem; +} +.rss-dialog-header form { margin: 0; } +.rss-dialog p { line-height: 1.7; color: inherit; } +.rss-dialog input { + box-sizing: border-box; + width: 100%; + padding: 12px 0; + border: 0; + border-block: 1px solid rgba(62, 56, 50, .2); + border-radius: 0; + background: transparent; + color: inherit; + font: inherit; +} +.rss-dialog-actions { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 12px; margin-top: 20px; } +.rss-dialog-actions a, .rss-dialog-actions button { font: inherit; color: inherit; cursor: pointer; background: transparent; border: 0; padding: 4px 0; } +/* Reserve both labels so removing outgoing characters cannot move the button. */ +.rss-dialog-actions [data-rss-copy] { position: relative; display: inline-grid; text-align: left; } +.rss-copy-reserve { grid-area: 1 / 1; visibility: hidden; white-space: nowrap; } +[data-rss-copy-text] { position: absolute; inset: 4px 0; white-space: nowrap; } +.rss-status { min-height: 1.7em; margin-bottom: 0; } + +body:has(.rss-dialog[open]) { overflow: hidden; } +.rss-dialog :is(input, button, a):focus-visible { outline: 2px solid #3e3832; outline-offset: 3px; } +html[data-reduced-motion="true"] .rss-dialog, +html[data-reduced-motion="true"] .rss-dialog :is(.settings-backdrop, .settings-paper) { transition: none; } +@media (max-width: 480px) { + .rss-dialog .rss-paper { padding: 50px 22px 70px; } +} + + +/* Counter updates share one flip motion without animating the surrounding row. */ +.number-flip { position: relative; display: inline-grid; perspective: 8em; white-space: nowrap; } +.number-flip-current { display: inline-block; transform-origin: center; backface-visibility: hidden; } +.number-flip.is-number-flipping::before { + content: attr(data-number-previous) / ""; + position: absolute; inset: 0; pointer-events: none; + transform-origin: center; backface-visibility: hidden; + animation: number-flip-out 400ms ease-in-out both; +} +.number-flip.is-number-flipping > .number-flip-current { animation: number-flip-in 400ms ease-in-out both; } +@keyframes number-flip-out { + 0% { transform: rotateX(0); opacity: 1; } + 49%, 100% { transform: rotateX(90deg); opacity: 0; } +} +@keyframes number-flip-in { + 0%, 49% { transform: rotateX(-90deg); opacity: 0; } + 100% { transform: rotateX(0); opacity: 1; } +} +@media (prefers-reduced-motion: reduce) { + .number-flip.is-number-flipping::before { display: none; } + .number-flip.is-number-flipping > .number-flip-current { animation: none; } +} +html[data-reduced-motion="true"] .number-flip.is-number-flipping::before { display: none; } +html[data-reduced-motion="true"] .number-flip.is-number-flipping > .number-flip-current { animation: none; } diff --git a/internal/embedded/static/css/components/bilingual-toggle.css b/internal/embedded/static/css/components/bilingual-toggle.css new file mode 100644 index 00000000..7f5755f1 --- /dev/null +++ b/internal/embedded/static/css/components/bilingual-toggle.css @@ -0,0 +1,50 @@ +.bilingual-toggle-btn { + position: relative; + width: 24px; + height: 24px; + background: transparent; + border: none; + padding: 0; + cursor: pointer; + color: var(--color-muted); + display: inline-flex; + align-items: center; + justify-content: center; + text-decoration: none; + vertical-align: middle; + transform: translateY(-2px); +} + +.bilingual-toggle-btn:hover, +.bilingual-toggle-btn:focus-visible { + color: var(--color-text); +} + +.bilingual-toggle-btn:focus-visible { + outline: 1px solid var(--color-accent); + outline-offset: 4px; + border-radius: 2px; +} + +.bilingual-toggle-btn .material-symbol { + font-size: 1.2rem; +} + +.bilingual-toggle-btn:hover .material-symbol, +.bilingual-toggle-btn:focus-visible .material-symbol { + font-variation-settings: "FILL" 1, "wght" 400, "GRAD" 0, "opsz" 24; +} + +.note-header .bilingual-toggle-btn:hover, +.note-header .bilingual-toggle-btn:focus-visible, +.about-content .bilingual-toggle-btn:hover, +.about-content .bilingual-toggle-btn:focus-visible { + color: var(--color-hover-text); +} + +.note-header .bilingual-toggle-btn:hover .material-symbol, +.note-header .bilingual-toggle-btn:focus-visible .material-symbol, +.about-content .bilingual-toggle-btn:hover .material-symbol, +.about-content .bilingual-toggle-btn:focus-visible .material-symbol { + font-variation-settings: "FILL" 0, "wght" 400, "GRAD" 0, "opsz" 24; +} diff --git a/internal/embedded/static/css/components/custom-cursor.css b/internal/embedded/static/css/components/custom-cursor.css new file mode 100644 index 00000000..c47e9d1d --- /dev/null +++ b/internal/embedded/static/css/components/custom-cursor.css @@ -0,0 +1,203 @@ +/* static/css/components/custom-cursor.css */ + +@media (min-width: 961px) and (hover: hover) and (pointer: fine) { + html.has-custom-cursor:where(:not([data-reduced-motion="true"])), + html.has-custom-cursor:where(:not([data-reduced-motion="true"])) * { + cursor: none !important; + } +} + + +.daybook-cursor { + position: fixed; + top: 0; + left: 0; + width: 0; + height: 0; + pointer-events: none; + z-index: 99999; + will-change: transform; +} + +.daybook-cursor__core { + position: absolute; + top: 50%; + left: 50%; + width: 8px; + height: 8px; + background-color: var(--color-text); + opacity: 1; + border-radius: 50%; + transform: translate(-50%, -50%); + transition: width 0.3s ease, height 0.3s ease, border-radius 0.3s ease, transform 0.3s var(--ease-out), opacity 0.3s ease, background-color 0.3s ease; + will-change: width, height, border-radius, transform, opacity; +} + +/* A separate diamond ring shares the pointer hotspot with the core. + Keeping it mounted lets interrupted hover/press transitions reverse smoothly. */ +.daybook-cursor::before { + content: ""; + position: absolute; + top: 0; + left: 0; + width: 24px; + height: 24px; + box-sizing: border-box; + border: 1px solid var(--color-text); + border-radius: 2px; + opacity: 0; + transform: translate(-50%, -50%) rotate(45deg) scale(0.25); + transition: transform 0.3s var(--ease-out), opacity 0.3s ease; +} + +.daybook-cursor[data-cursor-state="hover"]:not(.is-loading)::before { + opacity: 0.45; + transform: translate(-50%, -50%) rotate(45deg) scale(1); +} + +.daybook-cursor.is-active[data-cursor-state="hover"]:not(.is-loading)::before { + transform: translate(-50%, -50%) rotate(45deg) scale(0.875); +} + +.daybook-cursor__liquid { + position: absolute; + width: 56px; + height: 56px; + left: -28px; + top: -28px; + fill: var(--color-accent); + opacity: 0; + transform: scale(0.535); + transition: transform 0.3s ease, opacity 0.3s ease; +} +.daybook-cursor[data-cursor-state="hidden"] { visibility: hidden; } +.daybook-cursor.is-loading .daybook-cursor__core, +.daybook-cursor.is-loading .daybook-cursor__viewfinder { + opacity: 0 !important; +} +.daybook-cursor.is-loading .daybook-cursor__liquid { + opacity: 1; + transform: scale(1); +} + +.daybook-cursor__viewfinder { + position: absolute; + top: 50%; + left: 50%; + width: 32px; + height: 24px; + transform: translate(-50%, -50%) scale(0.65); + opacity: 0; + transition: transform 0.3s var(--ease-out), opacity 0.3s ease; + will-change: transform, opacity; +} + +.daybook-cursor__corner { + position: absolute; + width: 10px; + height: 10px; + border: 2.5px solid var(--color-text); + box-sizing: border-box; +} +.daybook-cursor__corner:nth-child(1) { top: 0; left: 0; border-right: 0; border-bottom: 0; border-top-left-radius: 6px; } +.daybook-cursor__corner:nth-child(2) { top: 0; right: 0; border-left: 0; border-bottom: 0; border-top-right-radius: 6px; } +.daybook-cursor__corner:nth-child(3) { bottom: 0; left: 0; border-right: 0; border-top: 0; border-bottom-left-radius: 6px; } +.daybook-cursor__corner:nth-child(4) { bottom: 0; right: 0; border-left: 0; border-top: 0; border-bottom-right-radius: 6px; } + +/* States */ +.daybook-cursor[data-cursor-state="hover"] .daybook-cursor__core { + width: 8px; + height: 8px; + border-radius: 2px; + opacity: 1; + transform: translate(-50%, -50%) rotate(45deg); +} + +.daybook-cursor[data-cursor-state="text"] .daybook-cursor__core { + width: 3px; + height: 22px; + border-radius: 1.5px; + opacity: 1; + transform: translate(-50%, -50%); +} + +.daybook-cursor[data-cursor-state="zoom"] .daybook-cursor__core { + transform: translate(-50%, -50%) scale(0.1); + opacity: 0; +} + +.daybook-cursor[data-cursor-state="zoom"] .daybook-cursor__viewfinder { + transform: translate(-50%, -50%) scale(1); + opacity: 1; +} + +.daybook-cursor[data-cursor-state="hidden"] .daybook-cursor__core { + opacity: 0; + transform: translate(-50%, -50%) scale(0.1); +} + +/* Click animation */ +.daybook-cursor.is-active .daybook-cursor__core { + transform: translate(-50%, -50%) scale(0.65); +} +.daybook-cursor.is-active[data-cursor-state="hover"] .daybook-cursor__core { + transform: translate(-50%, -50%) rotate(45deg) scale(0.75); +} +.daybook-cursor.is-active[data-cursor-state="text"] .daybook-cursor__core { + transform: translate(-50%, -50%) scaleY(0.7); +} +.daybook-cursor.is-active[data-cursor-state="zoom"] .daybook-cursor__core { + transform: translate(-50%, -50%) scale(0); +} +.daybook-cursor.is-active[data-cursor-state="zoom"] .daybook-cursor__viewfinder { + transform: translate(-50%, -50%) scale(0.85); +} + +/* Morph the existing dot/diamond/text caret into the resting liquid circle. + On exit the same transition reverses toward the current pointer state. */ +.daybook-cursor.is-loading[data-cursor-state] .daybook-cursor__core { + width: 15px; + height: 15px; + border-radius: 50%; + background-color: var(--color-accent); + transform: translate(-50%, -50%); +} + +/* Reduced motion disables the fake cursor */ +@media (prefers-reduced-motion: reduce) { + .daybook-cursor, + .daybook-cursor-clock { + display: none !important; + } + html.has-custom-cursor, + html.has-custom-cursor * { + cursor: auto !important; + } +} + +html[data-reduced-motion="true"] .daybook-cursor, +html[data-reduced-motion="true"] .daybook-cursor-clock { + display: none !important; +} + +.daybook-cursor-clock { + position: fixed; + top: 0; + left: 0; + pointer-events: none; + z-index: 99998; + display: none; +} + +.daybook-cursor-clock.is-visible { + display: block; +} + +@media (max-width: 960px), (pointer: coarse) { + .daybook-cursor, + .daybook-cursor-clock { + display: none !important; + opacity: 0 !important; + visibility: hidden !important; + } +} diff --git a/internal/embedded/static/css/components/embed-skeleton.css b/internal/embedded/static/css/components/embed-skeleton.css new file mode 100644 index 00000000..deff3097 --- /dev/null +++ b/internal/embedded/static/css/components/embed-skeleton.css @@ -0,0 +1,360 @@ +/* + * Embed Skeleton & Fallback Styles + * Implements shimmering loading states and fallback error cards + * for external embeds and images. + */ + +/* ----------------------------- + 1. Shared Skeleton Styles + ----------------------------- */ + +/* The base skeleton class provides the pulsing shimmer effect */ +.embed-skeleton { + position: relative; + overflow: hidden; + background-color: var(--color-paper); + border: 0; + border-radius: 8px; + color: transparent !important; + pointer-events: none; + user-select: none; +} + +/* Shimmer animation pseudo-element */ +.embed-skeleton::after { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: linear-gradient( + 90deg, + transparent 0%, + color-mix(in srgb, var(--color-text) 3%, transparent) 40%, + color-mix(in srgb, var(--color-text) 5%, transparent) 50%, + color-mix(in srgb, var(--color-text) 3%, transparent) 60%, + transparent 100% + ); + transform: translateX(-100%); + animation: embed-shimmer 2s infinite var(--ease-out); +} + +/* Respect user's reduced motion preference */ +@media (prefers-reduced-motion: reduce) { + .embed-skeleton::after { + animation: none; + transform: translateX(0); + background: color-mix(in srgb, var(--color-text) 2%, transparent); + } +} + +@keyframes embed-shimmer { + 100% { + transform: translateX(100%); + } +} + +/* ----------------------------- + 2. Fallback Error Cards + ----------------------------- */ + +.embed-fallback { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: 1.5rem; + background-color: var(--color-paper); + border: 0; + border-radius: 8px; + text-align: center; + color: var(--color-muted); + font-family: var(--font-ui); + font-size: 0.9rem; + min-height: 120px; + gap: 0.5rem; +} + +.embed-fallback svg { + color: var(--color-faint); + margin-bottom: 0.25rem; +} + +.embed-fallback a { + color: var(--color-accent); + text-decoration: none; + transition: opacity var(--duration-fast) var(--ease-out); +} + +.embed-fallback a:hover { + opacity: 0.8; +} + +/* ----------------------------- + 3. Music Custom Player Skeleton + ----------------------------- */ + +/* Container for Music Player */ +.music-custom-player[data-embed-status="loading"] { + margin: 32px 0; +} + +/* We define a specific skeleton wrapper inside the container */ +.music-skeleton { + display: flex; + background: var(--color-paper); + border: 0; + border-radius: 16px; + overflow: hidden; + height: 160px; /* Matches default desktop horizontal height */ + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.03); + padding: 16px; + align-items: center; + box-sizing: border-box; +} + +/* Desktop layout (horizontal) */ +.music-skeleton-cover { + width: 128px; + height: 128px; + flex-shrink: 0; + border-radius: 8px; + background: color-mix(in srgb, var(--color-text) 5%, transparent); + margin-right: 16px; +} + +.music-skeleton-body { + flex-grow: 1; + display: flex; + flex-direction: column; + justify-content: center; + padding: 0; + gap: 0.5rem; +} + +.music-skeleton-title { + width: 40%; + height: 1rem; + background: color-mix(in srgb, var(--color-text) 8%, transparent); + border-radius: 4px; +} + +.music-skeleton-artist { + width: 25%; + height: 0.75rem; + background: color-mix(in srgb, var(--color-text) 5%, transparent); + border-radius: 4px; + margin-bottom: 0.25rem; +} + +.music-skeleton-progress { + width: 100%; + height: 4px; + background: color-mix(in srgb, var(--color-text) 3%, transparent); + border-radius: 2px; +} + +.music-skeleton-playbtn { + width: 45px; + height: 45px; + border-radius: 50%; + background: color-mix(in srgb, var(--color-text) 5%, transparent); + align-self: center; + margin-left: auto; + margin-right: 14px; +} + +/* Mobile layout (vertical) */ +@media screen and (max-width: 960px) { + .music-skeleton { + flex-direction: column; + height: auto; + padding: 20px 18px; + border-radius: 20px; + align-items: center; + text-align: center; + gap: 10px; + } + .music-skeleton-cover { + width: min(68vw, 220px); + height: min(68vw, 220px); + margin-right: 0; + } + .music-skeleton-body { + width: 100%; + padding: 0; + align-items: center; + } + .music-skeleton-title { + width: 60%; + } + .music-skeleton-artist { + width: 40%; + } + .music-skeleton-playbtn { + margin: 10px 0 0 0; + width: 45px; + height: 45px; + } +} + +/* ----------------------------- + 4. Twitter & GitHub Skeleton + ----------------------------- */ + +/* GitHub Card Skeleton */ +.gc-container[data-embed-status="loading"] { + position: relative; + overflow: hidden; + /* Retain original padding and border-radius from .gc-container */ +} + +/* Add shimmering sweep to the entire card */ +.gc-container[data-embed-status="loading"]::after { + content: ""; + position: absolute; + top: 0; left: 0; right: 0; bottom: 0; + background: linear-gradient( + 90deg, + transparent 0%, + color-mix(in srgb, var(--color-text) 3%, transparent) 40%, + color-mix(in srgb, var(--color-text) 5%, transparent) 50%, + color-mix(in srgb, var(--color-text) 3%, transparent) 60%, + transparent 100% + ); + transform: translateX(-100%); + animation: embed-shimmer 2s infinite var(--ease-out); + pointer-events: none; + z-index: 1; +} + +@media (prefers-reduced-motion: reduce) { + .gc-container[data-embed-status="loading"]::after { + animation: none; + transform: translateX(0); + background: color-mix(in srgb, var(--color-text) 2%, transparent); + } +} + +/* Hide real text and replace with grey rounded blocks */ +.gc-container[data-embed-status="loading"] .gc-repo-description, +.gc-container[data-embed-status="loading"] .gc-stars-count, +.gc-container[data-embed-status="loading"] .gc-forks-count, +.gc-container[data-embed-status="loading"] .gc-license-info { + color: transparent !important; + background: color-mix(in srgb, var(--color-text) 6%, transparent); + border-radius: 4px; +} + +.gc-container[data-embed-status="loading"] .gc-repo-description { + width: 80%; + height: 0.875rem; + margin: 0.6rem 0 0.875rem; + display: block; /* Ensure the block size is respected */ +} + +.gc-container[data-embed-status="loading"] .gc-stars-count, +.gc-container[data-embed-status="loading"] .gc-forks-count, +.gc-container[data-embed-status="loading"] .gc-license-info { + display: inline-block; + min-width: 2rem; + height: 0.75rem; + vertical-align: middle; +} + +/* The owner avatar will just naturally be its empty background color from markdown.css */ + +/* Twitter Card skeleton */ +.tweet-skeleton { + min-height: 200px; + display: flex; + flex-direction: column; + gap: 1rem; + padding: 1.5rem; +} +.tweet-skeleton-header { + display: flex; + gap: 0.75rem; + align-items: center; +} +.tweet-skeleton-avatar { + width: 48px; + height: 48px; + border-radius: 50%; + background: color-mix(in srgb, var(--color-text) 6%, transparent); +} +.tweet-skeleton-name { + width: 120px; + height: 1rem; + background: color-mix(in srgb, var(--color-text) 6%, transparent); + border-radius: 4px; +} +.tweet-skeleton-body1, .tweet-skeleton-body2 { + height: 1rem; + background: color-mix(in srgb, var(--color-text) 4%, transparent); + border-radius: 4px; +} +.tweet-skeleton-body1 { width: 90%; } +.tweet-skeleton-body2 { width: 60%; } + +/* ----------------------------- + 5. iFrames & Embed Frame Wrappers + ----------------------------- */ + +/* Outer container keeps aspect ratio or fixed height */ +.embed-frame[data-embed-status="loading"] { + position: relative; + background-color: var(--color-paper); +} + +.embed-frame[data-embed-status="loading"]::after { + content: ""; + position: absolute; + top: 0; left: 0; right: 0; bottom: 0; + background: linear-gradient( + 90deg, + transparent 0%, + color-mix(in srgb, var(--color-text) 3%, transparent) 40%, + color-mix(in srgb, var(--color-text) 5%, transparent) 50%, + color-mix(in srgb, var(--color-text) 3%, transparent) 60%, + transparent 100% + ); + transform: translateX(-100%); + animation: embed-shimmer 2s infinite var(--ease-out); + pointer-events: none; + z-index: 1; +} + +@media (prefers-reduced-motion: reduce) { + .embed-frame[data-embed-status="loading"]::after { + animation: none; + transform: translateX(0); + background: color-mix(in srgb, var(--color-text) 2%, transparent); + } +} + +.embed-frame[data-embed-status="loading"] iframe { + opacity: 0; +} + +.embed-frame[data-embed-status="ready"] iframe { + opacity: 1; + transition: opacity var(--duration-normal) var(--ease-out); +} + +/* ----------------------------- + 6. Images + ----------------------------- */ + +img[data-embed-status="loading"] { + background-color: color-mix(in srgb, var(--color-text) 3%, transparent); + /* The shimmer effect on imgs is harder without a wrapper, + but a solid subtle background works fine. */ + opacity: 0; +} + +img[data-embed-status="ready"] { + opacity: 1; + transition: opacity var(--duration-normal) var(--ease-out); +} diff --git a/internal/embedded/static/css/components/giscus-default-dark.css b/internal/embedded/static/css/components/giscus-default-dark.css new file mode 100644 index 00000000..e26f6893 --- /dev/null +++ b/internal/embedded/static/css/components/giscus-default-dark.css @@ -0,0 +1,2 @@ +/* Generated by scripts/build-giscus-themes.mjs; edit tokens.css, fonts.css or giscus-theme.css. */ +@import"../../vendor/fonts/lxgw-wenkai-screen/regular/result.css";@import"../../vendor/fonts/maple-mono-cn/regular/result.css";@import"../../vendor/fonts/maple-mono-cn/italic/result.css";@font-face{font-family:Cormorant Garamond;size-adjust:127%;src:url(../../vendor/fonts/cormorant-garamond/cormorant-garamond-latin-400-normal.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Cormorant Garamond;size-adjust:127%;src:url(../../vendor/fonts/cormorant-garamond/cormorant-garamond-latin-500-normal.woff2) format("woff2");font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:Cormorant Garamond;size-adjust:127%;src:url(../../vendor/fonts/cormorant-garamond/cormorant-garamond-latin-600-normal.woff2) format("woff2");font-weight:600;font-style:normal;font-display:swap}@font-face{font-family:Cormorant Garamond;size-adjust:127%;src:url(../../vendor/fonts/cormorant-garamond/cormorant-garamond-latin-700-normal.woff2) format("woff2");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:Cormorant Garamond;size-adjust:127%;src:url(../../vendor/fonts/cormorant-garamond/cormorant-garamond-latin-400-italic.woff2) format("woff2");font-weight:400;font-style:italic;font-display:swap}@font-face{font-family:Cormorant Garamond;size-adjust:127%;src:url(../../vendor/fonts/cormorant-garamond/cormorant-garamond-latin-500-italic.woff2) format("woff2");font-weight:500;font-style:italic;font-display:swap}@font-face{font-family:Cormorant Garamond;size-adjust:127%;src:url(../../vendor/fonts/cormorant-garamond/cormorant-garamond-latin-600-italic.woff2) format("woff2");font-weight:600;font-style:italic;font-display:swap}@font-face{font-family:Cormorant Garamond;size-adjust:127%;src:url(../../vendor/fonts/cormorant-garamond/cormorant-garamond-latin-700-italic.woff2) format("woff2");font-weight:700;font-style:italic;font-display:swap}:root{--font-body:"LXGW WenKai Screen", "PingFang SC", "Microsoft YaHei", serif;--font-mono:"Maple Mono CN", "Maple Mono", "SFMono-Regular", "Cascadia Code", "JetBrains Mono", ui-monospace, monospace;--ease-out:cubic-bezier(.22, 1, .36, 1);--duration-fast:.24s;--note-text-size:15px;--color-page:oklch(22% .005 298);--color-text:oklch(92% .005 298);--color-muted:oklch(77% .005 298);--color-line:oklch(92% .005 298 / .14);--color-accent:#d0bcff;--color-paper:oklch(25% .005 298);--color-accent-soft:rgba(208, 188, 255, .12);--color-accent-soft-strong:rgba(208, 188, 255, .22);--color-code-bg:oklch(77% .005 298 / .05);--color-code-border:oklch(77% .005 298 / .15);--color-code-inline-bg:oklch(77% .005 298 / .05);--shadow-code:inset 0 1px 0 oklch(100% 0 0 / .035);--syntax-text:#c9d1d9;--syntax-comment:#8b949e;--syntax-keyword:#ff7b72;--syntax-string:#a5d6ff;--syntax-number:#79c0ff;--syntax-function:#d2a8ff;--syntax-tag:#7ee787;--syntax-attr:#79c0ff;--syntax-error:#ffdcd7;--syntax-inserted:#aff5b4;--syntax-deleted:#ffdcd7;color-scheme:dark}:root:lang(en){--font-body:"Cormorant Garamond", "LXGW WenKai Screen", "Times New Roman", serif}:root{--font-family-sans: var(--font-body);--font-family-default: var(--font-body);--font-family-monospace: var(--font-mono)}:root,main{--color-prettylights-syntax-comment: var(--syntax-comment);--color-prettylights-syntax-constant: var(--syntax-number);--color-prettylights-syntax-entity: var(--syntax-function);--color-prettylights-syntax-storage-modifier-import: var(--syntax-text);--color-prettylights-syntax-entity-tag: var(--syntax-tag);--color-prettylights-syntax-keyword: var(--syntax-keyword);--color-prettylights-syntax-string: var(--syntax-string);--color-prettylights-syntax-variable: var(--syntax-attr);--color-prettylights-syntax-brackethighlighter-unmatched: var(--syntax-error);--color-prettylights-syntax-invalid-illegal-text: var(--color-page);--color-prettylights-syntax-invalid-illegal-bg: var(--syntax-error);--color-prettylights-syntax-carriage-return-text: var(--color-page);--color-prettylights-syntax-carriage-return-bg: var(--syntax-error);--color-prettylights-syntax-string-regexp: var(--syntax-tag);--color-prettylights-syntax-markup-list: var(--syntax-number);--color-prettylights-syntax-markup-heading: var(--color-accent);--color-prettylights-syntax-markup-italic: var(--syntax-text);--color-prettylights-syntax-markup-bold: var(--syntax-text);--color-prettylights-syntax-markup-deleted-text: var(--syntax-deleted);--color-prettylights-syntax-markup-deleted-bg: color-mix(in srgb, var(--syntax-deleted) 12%, transparent);--color-prettylights-syntax-markup-inserted-text: var(--syntax-inserted);--color-prettylights-syntax-markup-inserted-bg: color-mix(in srgb, var(--syntax-inserted) 12%, transparent);--color-prettylights-syntax-markup-changed-text: var(--syntax-number);--color-prettylights-syntax-markup-changed-bg: color-mix(in srgb, var(--syntax-number) 12%, transparent);--color-prettylights-syntax-markup-ignored-text: var(--syntax-text);--color-prettylights-syntax-markup-ignored-bg: var(--color-accent-soft);--color-prettylights-syntax-meta-diff-range: var(--syntax-function);--color-prettylights-syntax-brackethighlighter-angle: var(--syntax-comment);--color-prettylights-syntax-sublimelinter-gutter-mark: var(--color-muted);--color-prettylights-syntax-constant-other-reference-link: var(--syntax-string);--color-btn-text: var(--color-text);--color-btn-bg: transparent;--color-btn-border: var(--color-line);--color-btn-shadow: 0 0 transparent;--color-btn-inset-shadow: 0 0 transparent;--color-btn-hover-bg: var(--color-accent-soft);--color-btn-hover-border: var(--color-accent);--color-btn-active-bg: var(--color-accent-soft-strong);--color-btn-active-border: var(--color-accent);--color-btn-selected-bg: var(--color-accent-soft);--color-btn-primary-text: var(--color-page);--color-btn-primary-bg: var(--color-text);--color-btn-primary-border: var(--color-text);--color-btn-primary-shadow: 0 0 transparent;--color-btn-primary-inset-shadow: 0 0 transparent;--color-btn-primary-hover-bg: var(--color-accent);--color-btn-primary-hover-border: var(--color-accent);--color-btn-primary-selected-bg: var(--color-accent);--color-btn-primary-selected-shadow: 0 0 transparent;--color-btn-primary-disabled-text: var(--color-muted);--color-btn-primary-disabled-bg: var(--color-paper);--color-btn-primary-disabled-border: var(--color-line);--color-action-list-item-default-hover-bg: var(--color-accent-soft);--color-segmented-control-bg: transparent;--color-segmented-control-button-bg: var(--color-accent-soft);--color-segmented-control-button-selected-border: var(--color-line);--color-fg-default: var(--color-text);--color-fg-muted: var(--color-muted);--color-fg-subtle: var(--color-muted);--color-canvas-default: transparent;--color-canvas-overlay: var(--color-paper);--color-canvas-inset: transparent;--color-canvas-subtle: var(--color-code-bg);--color-border-default: var(--color-line);--color-border-muted: var(--color-line);--color-neutral-muted: var(--color-code-inline-bg);--color-accent-fg: var(--color-accent);--color-accent-emphasis: var(--color-accent);--color-accent-muted: var(--color-accent-soft-strong);--color-accent-subtle: var(--color-accent-soft);--color-success-fg: var(--syntax-tag);--color-success-emphasis: var(--syntax-tag);--color-success-muted: color-mix(in srgb, var(--syntax-tag) 30%, transparent);--color-success-subtle: color-mix(in srgb, var(--syntax-tag) 10%, transparent);--color-attention-fg: var(--syntax-number);--color-attention-emphasis: var(--syntax-number);--color-attention-muted: color-mix(in srgb, var(--syntax-number) 30%, transparent);--color-attention-subtle: color-mix(in srgb, var(--syntax-number) 10%, transparent);--color-danger-fg: var(--syntax-error);--color-danger-emphasis: var(--syntax-error);--color-danger-muted: color-mix(in srgb, var(--syntax-error) 35%, transparent);--color-danger-subtle: color-mix(in srgb, var(--syntax-error) 10%, transparent);--color-primer-shadow-inset: 0 0 transparent;--color-scale-gray-7: var(--color-accent-soft);--color-scale-blue-8: var(--color-accent-soft-strong);--color-social-reaction-bg-hover: var(--color-accent-soft);--color-social-reaction-bg-reacted-hover: var(--color-accent-soft-strong)}html,body,main,.gsc-main{color:var(--color-text);background:transparent;font-family:var(--font-body)}html{background:var(--color-page)}#__next button,#__next input,#__next select,#__next textarea{font-family:var(--font-body)}#__next main{font-size:var(--note-text-size);line-height:1.7}::selection{color:var(--color-page);background:var(--color-accent)}#__next .markdown,#__next .gsc-comment-content{font-size:var(--note-text-size);line-height:1.7}#__next pre,#__next code,#__next kbd,#__next samp,#__next .gsc-is-fixed-width,#__next .commit-tease-sha,#__next .blob-code-inner,#__next .blob-num{font-family:var(--font-mono)}#__next .markdown pre{border:1px solid var(--color-code-border);box-shadow:var(--shadow-code)}#__next .markdown code:not(pre>code),#__next .markdown tt{background:var(--color-code-inline-bg)}#__next .gsc-comment-box,#__next .gsc-comment-box-tabs,#__next .gsc-comment-box-write,#__next .gsc-comment-box-textarea,#__next .gsc-comment-box-textarea-extras,#__next .gsc-replies,#__next .gsc-reply-box{background:transparent;border-color:var(--color-line)}#__next .gsc-comment-box:not(.gsc-comment-box-is-reply){border-radius:8px}#__next .gsc-comments{display:flex;flex-direction:column;gap:0}#__next .gsc-comments>.gsc-comment-box{order:0}#__next .gsc-comments>.gsc-header{order:1;margin:1.5rem 0 0;padding-bottom:.75rem;border-bottom:1px solid var(--color-line);flex-wrap:wrap;gap:.5rem 1rem}#__next .gsc-comments>.gsc-timeline{order:2}#__next .gsc-comments-count{font-family:var(--font-body);font-size:1.25rem;font-weight:700;line-height:1.5}#__next .gsc-comments-count a,#__next .gsc-comment-author a,#__next .gsc-reply-author a{text-decoration:none}#__next .gsc-comments-count a:hover,#__next .gsc-comment-author a:hover,#__next .gsc-reply-author a:hover{color:var(--color-accent)}#__next .gsc-left-header>em{display:none}#__next .gsc-right-header{gap:1rem;margin-inline-start:auto;padding:0;background:transparent}#__next .gsc-right-header .BtnGroup-item,#__next .gsc-right-header .btn{margin:0;padding:0;border:0;border-radius:0;background:transparent;box-shadow:none;color:var(--color-muted);font-size:.75rem;font-weight:400;line-height:1.5}#__next .gsc-right-header .btn{min-height:2rem}#__next .gsc-right-header .BtnGroup-item--selected .btn,#__next .gsc-right-header .btn:hover{color:var(--color-accent)}#__next .gsc-comment-box{position:relative;display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;column-gap:.75rem;row-gap:1rem;margin:0;padding:.75rem;box-shadow:none}#__next .gsc-comment-box-main{grid-column:1 / -1;grid-row:1;min-width:0;margin:0}#__next .gsc-comment-box-write,#__next .gsc-comment-box-preview{border:0;border-radius:0;box-shadow:none}#__next .gsc-comment-box-textarea,#__next .gsc-comment-box-textarea:disabled{display:block;width:100%;height:8.75em;min-height:8.75em;padding:0;border:0;border-radius:0;background:transparent;color:var(--color-text);font-size:.875rem;line-height:1.7;box-shadow:none;resize:vertical}#__next .gsc-comment-box-preview{min-height:7.65625rem;padding:0;background:transparent}#__next .gsc-comment-box-textarea-extras,#__next .gsc-comment-box-md-toolbar{display:none}#__next .gsc-comment-box-tabs{display:flex;align-items:center;justify-content:space-between;grid-column:1;grid-row:2;min-width:0;margin:0;padding:0;border:0;border-radius:0;background:transparent}#__next .gsc-comment-box-tabs>div:first-child{display:flex;gap:1rem;margin:0}#__next .gsc-comment-box-tabs button{display:inline-flex;align-items:center;gap:.375rem;min-height:2rem;margin:0;padding:0;border:0;border-radius:0;background:transparent;color:var(--color-muted);font-size:.75rem;line-height:1.5}#__next .gsc-comment-box-tabs>div:first-child>button:before{content:"";width:1rem;height:1rem;flex-shrink:0;background:currentColor;mask-size:contain;mask-position:center;mask-repeat:no-repeat}#__next .gsc-comment-box-tabs>div:first-child>button:first-child:before{mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m10.5 2.5 3 3M2.5 13.5l3.5-1 7.5-7.5a2.1 2.1 0 0 0-3-3L3 9.5z'/%3E%3C/svg%3E")}#__next .gsc-comment-box-tabs>div:first-child>button:nth-child(2):before{mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1 8s2.5-4.5 7-4.5S15 8 15 8s-2.5 4.5-7 4.5S1 8 1 8z'/%3E%3Ccircle cx='8' cy='8' r='2'/%3E%3C/svg%3E")}#__next .gsc-comment-box-tabs .color-bg-canvas,#__next .gsc-comment-box-tabs button:hover{color:var(--color-accent)}#__next .gsc-comment-box-bottom{display:flex;align-items:center;justify-content:flex-end;gap:1rem;grid-column:2;grid-row:2;min-width:0;margin:0}#__next .gsc-comment-box-bottom>button{display:inline-flex;align-items:center;gap:.375rem;min-height:2rem;margin:0 auto 0 0;padding:0;border:0;background:transparent;color:var(--color-muted);font-size:.75rem;line-height:1.5;text-decoration:none;white-space:nowrap}#__next .gsc-comment-box-bottom>button:hover{color:var(--color-accent)}#__next .gsc-comment-box-bottom>button .octicon{width:1rem;height:1rem;margin:0}#__next .gsc-comment-box-buttons{gap:.5rem;margin-inline-start:0;max-width:100%;flex-wrap:wrap;justify-content:flex-end}#__next .gsc-comment-box-buttons .btn{min-height:2rem;margin:0;padding:.5em 1em;border-radius:.5em;font-size:.75rem;font-weight:400;line-height:1.5}#__next .gsc-comment-box-buttons .octicon{width:1em;height:1em}#__next .gsc-comment-box-buttons .btn-primary:disabled{color:var(--color-muted);background:transparent;border-color:var(--color-line);opacity:.6}#__next .gsc-timeline{gap:0}#__next .gsc-comment{display:block;min-width:0;padding:1.25rem 0;border-bottom:1px solid var(--color-line)}#__next .gsc-comment>div:first-child{border:0;border-radius:0;background:transparent;box-shadow:none}#__next .gsc-comment-header{padding:0}#__next .gsc-comment-author,#__next .gsc-reply-author{flex-wrap:wrap;gap:.5rem .75rem;color:var(--color-muted);font-size:.75rem}#__next .gsc-comment-author-avatar{max-width:100%;color:var(--color-text);font-size:.875rem}#__next .gsc-comment-author-avatar img{width:1.875rem;height:1.875rem;margin-inline-end:.625rem}#__next .gsc-comment-author>div>span,#__next .gsc-reply-author>div>span{padding:0;border:0;border-radius:0;background:transparent;color:var(--color-muted);font-size:.625rem;font-weight:400}#__next .gsc-comment-content{padding:.625rem 0 .625rem 2.5rem;border-radius:0;overflow-wrap:anywhere}#__next .gsc-comment-footer{align-items:center;gap:1rem;margin:0;padding-inline-start:2.5rem}#__next .gsc-comment-reactions,#__next .gsc-reply-reactions{align-items:center;gap:.75rem;margin:0}#__next .gsc-comment-replies-count{margin:0}#__next .gsc-social-reaction-summary-item{min-width:1.5rem;height:1.75rem;padding:0 .125rem;border:0;border-radius:0;background:transparent}#__next .gsc-social-reaction-summary-item.has-reacted,#__next .gsc-social-reaction-summary-item:hover:enabled,#__next .gsc-reactions-button:hover{color:var(--color-accent);background:transparent}#__next .gsc-reply-box{margin:.75rem 0 0 2.5rem;padding:0;border:0;border-radius:0}#__next .gsc-reply-box>button{width:auto;min-height:2rem;padding:0;border:0;background:transparent;color:var(--color-muted);font-size:.75rem;cursor:pointer;box-shadow:none}#__next .gsc-reply-box>button:hover{color:var(--color-accent)}#__next .gsc-comment-box-is-reply{width:calc(100% - 2.5rem);margin:.875rem 0 0 2.5rem;padding:.625rem;border:1px solid var(--color-line);border-radius:6px;row-gap:.75rem}#__next .gsc-comment .gsc-comment-box-tabs{border:0}#__next .gsc-comment-box-is-reply .gsc-comment-box-textarea{height:7em;min-height:7em}#__next .gsc-comment-box-is-reply .gsc-comment-box-preview{min-height:6.125rem}#__next .gsc-replies{margin:.875rem 0 0 2.5rem;padding:0;border:0;border-radius:0}#__next .gsc-reply{padding:.75rem 0 .75rem 1rem;border-inline-start:1px solid var(--color-line)}#__next .gsc-tl-line{display:none}#__next .gsc-reply-author-avatar img{width:1.5rem;height:1.5rem}#__next .gsc-reply-header{margin:0 0 .5rem;padding:0}#__next .gsc-reply-content{padding:0;overflow-wrap:anywhere}#__next .gsc-reactions-popover{border-color:var(--color-line);border-radius:6px;box-shadow:none}#__next .gsc-comment-box-textarea::placeholder{color:var(--color-muted);opacity:.6}#__next .form-control:not(.gsc-comment-box-textarea):disabled,#__next .btn:not(.btn-primary):disabled{color:var(--color-muted);background:var(--color-paper);border-color:var(--color-line);cursor:not-allowed}#__next .btn{transition-duration:var(--duration-fast);transition-timing-function:var(--ease-out)}#__next .btn:not(.btn-primary):hover:enabled{color:var(--color-accent)}#__next a:focus-visible,#__next button:focus-visible,#__next summary:focus-visible,#__next [role=button]:focus-visible,#__next input:focus-visible,#__next select:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}#__next .gsc-comment-box:has(.gsc-comment-box-textarea:focus){border-color:var(--color-accent)}#__next .gsc-comment-box-write:focus-within,#__next .gsc-comment-box-textarea:focus{box-shadow:none}#__next .gsc-comment-box-textarea:focus-visible{outline:none}#__next .form-control[aria-invalid=true],#__next .gsc-comment-box-textarea[aria-invalid=true]{border-color:var(--syntax-error)}@media(max-width:440px){#__next .gsc-comment-box{grid-template-columns:minmax(0,1fr);row-gap:.75rem}#__next .gsc-comment-box-bottom{grid-column:1;grid-row:3;width:100%}}@media(prefers-reduced-motion:reduce){#__next .btn{transition:none}} diff --git a/internal/embedded/static/css/components/giscus-default-light.css b/internal/embedded/static/css/components/giscus-default-light.css new file mode 100644 index 00000000..1d5dce0b --- /dev/null +++ b/internal/embedded/static/css/components/giscus-default-light.css @@ -0,0 +1,2 @@ +/* Generated by scripts/build-giscus-themes.mjs; edit tokens.css, fonts.css or giscus-theme.css. */ +@import"../../vendor/fonts/lxgw-wenkai-screen/regular/result.css";@import"../../vendor/fonts/maple-mono-cn/regular/result.css";@import"../../vendor/fonts/maple-mono-cn/italic/result.css";@font-face{font-family:Cormorant Garamond;size-adjust:127%;src:url(../../vendor/fonts/cormorant-garamond/cormorant-garamond-latin-400-normal.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Cormorant Garamond;size-adjust:127%;src:url(../../vendor/fonts/cormorant-garamond/cormorant-garamond-latin-500-normal.woff2) format("woff2");font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:Cormorant Garamond;size-adjust:127%;src:url(../../vendor/fonts/cormorant-garamond/cormorant-garamond-latin-600-normal.woff2) format("woff2");font-weight:600;font-style:normal;font-display:swap}@font-face{font-family:Cormorant Garamond;size-adjust:127%;src:url(../../vendor/fonts/cormorant-garamond/cormorant-garamond-latin-700-normal.woff2) format("woff2");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:Cormorant Garamond;size-adjust:127%;src:url(../../vendor/fonts/cormorant-garamond/cormorant-garamond-latin-400-italic.woff2) format("woff2");font-weight:400;font-style:italic;font-display:swap}@font-face{font-family:Cormorant Garamond;size-adjust:127%;src:url(../../vendor/fonts/cormorant-garamond/cormorant-garamond-latin-500-italic.woff2) format("woff2");font-weight:500;font-style:italic;font-display:swap}@font-face{font-family:Cormorant Garamond;size-adjust:127%;src:url(../../vendor/fonts/cormorant-garamond/cormorant-garamond-latin-600-italic.woff2) format("woff2");font-weight:600;font-style:italic;font-display:swap}@font-face{font-family:Cormorant Garamond;size-adjust:127%;src:url(../../vendor/fonts/cormorant-garamond/cormorant-garamond-latin-700-italic.woff2) format("woff2");font-weight:700;font-style:italic;font-display:swap}:root{--font-body:"LXGW WenKai Screen", "PingFang SC", "Microsoft YaHei", serif;--font-mono:"Maple Mono CN", "Maple Mono", "SFMono-Regular", "Cascadia Code", "JetBrains Mono", ui-monospace, monospace;--ease-out:cubic-bezier(.22, 1, .36, 1);--duration-fast:.24s;--note-text-size:15px;--color-page:oklch(96% .005 298);--color-text:oklch(25% .005 298);--color-muted:oklch(40% .005 298);--color-line:oklch(25% .005 298 / .16);--color-accent:#6750a4;--color-paper:oklch(98% .004 298);--color-accent-soft:rgba(103, 80, 164, .1);--color-accent-soft-strong:rgba(103, 80, 164, .18);--color-code-bg:oklch(40% .005 298 / .05);--color-code-border:oklch(40% .005 298 / .15);--color-code-inline-bg:oklch(40% .005 298 / .05);--shadow-code:inset 0 1px 0 oklch(100% 0 0 / .52);--syntax-text:#24292f;--syntax-comment:#6e7781;--syntax-keyword:#cf222e;--syntax-string:#0a3069;--syntax-number:#0550ae;--syntax-function:#8250df;--syntax-tag:#116329;--syntax-attr:#0550ae;--syntax-error:#82071e;--syntax-inserted:#116329;--syntax-deleted:#82071e;color-scheme:light}:root:lang(en){--font-body:"Cormorant Garamond", "LXGW WenKai Screen", "Times New Roman", serif}:root{--font-family-sans: var(--font-body);--font-family-default: var(--font-body);--font-family-monospace: var(--font-mono)}:root,main{--color-prettylights-syntax-comment: var(--syntax-comment);--color-prettylights-syntax-constant: var(--syntax-number);--color-prettylights-syntax-entity: var(--syntax-function);--color-prettylights-syntax-storage-modifier-import: var(--syntax-text);--color-prettylights-syntax-entity-tag: var(--syntax-tag);--color-prettylights-syntax-keyword: var(--syntax-keyword);--color-prettylights-syntax-string: var(--syntax-string);--color-prettylights-syntax-variable: var(--syntax-attr);--color-prettylights-syntax-brackethighlighter-unmatched: var(--syntax-error);--color-prettylights-syntax-invalid-illegal-text: var(--color-page);--color-prettylights-syntax-invalid-illegal-bg: var(--syntax-error);--color-prettylights-syntax-carriage-return-text: var(--color-page);--color-prettylights-syntax-carriage-return-bg: var(--syntax-error);--color-prettylights-syntax-string-regexp: var(--syntax-tag);--color-prettylights-syntax-markup-list: var(--syntax-number);--color-prettylights-syntax-markup-heading: var(--color-accent);--color-prettylights-syntax-markup-italic: var(--syntax-text);--color-prettylights-syntax-markup-bold: var(--syntax-text);--color-prettylights-syntax-markup-deleted-text: var(--syntax-deleted);--color-prettylights-syntax-markup-deleted-bg: color-mix(in srgb, var(--syntax-deleted) 12%, transparent);--color-prettylights-syntax-markup-inserted-text: var(--syntax-inserted);--color-prettylights-syntax-markup-inserted-bg: color-mix(in srgb, var(--syntax-inserted) 12%, transparent);--color-prettylights-syntax-markup-changed-text: var(--syntax-number);--color-prettylights-syntax-markup-changed-bg: color-mix(in srgb, var(--syntax-number) 12%, transparent);--color-prettylights-syntax-markup-ignored-text: var(--syntax-text);--color-prettylights-syntax-markup-ignored-bg: var(--color-accent-soft);--color-prettylights-syntax-meta-diff-range: var(--syntax-function);--color-prettylights-syntax-brackethighlighter-angle: var(--syntax-comment);--color-prettylights-syntax-sublimelinter-gutter-mark: var(--color-muted);--color-prettylights-syntax-constant-other-reference-link: var(--syntax-string);--color-btn-text: var(--color-text);--color-btn-bg: transparent;--color-btn-border: var(--color-line);--color-btn-shadow: 0 0 transparent;--color-btn-inset-shadow: 0 0 transparent;--color-btn-hover-bg: var(--color-accent-soft);--color-btn-hover-border: var(--color-accent);--color-btn-active-bg: var(--color-accent-soft-strong);--color-btn-active-border: var(--color-accent);--color-btn-selected-bg: var(--color-accent-soft);--color-btn-primary-text: var(--color-page);--color-btn-primary-bg: var(--color-text);--color-btn-primary-border: var(--color-text);--color-btn-primary-shadow: 0 0 transparent;--color-btn-primary-inset-shadow: 0 0 transparent;--color-btn-primary-hover-bg: var(--color-accent);--color-btn-primary-hover-border: var(--color-accent);--color-btn-primary-selected-bg: var(--color-accent);--color-btn-primary-selected-shadow: 0 0 transparent;--color-btn-primary-disabled-text: var(--color-muted);--color-btn-primary-disabled-bg: var(--color-paper);--color-btn-primary-disabled-border: var(--color-line);--color-action-list-item-default-hover-bg: var(--color-accent-soft);--color-segmented-control-bg: transparent;--color-segmented-control-button-bg: var(--color-accent-soft);--color-segmented-control-button-selected-border: var(--color-line);--color-fg-default: var(--color-text);--color-fg-muted: var(--color-muted);--color-fg-subtle: var(--color-muted);--color-canvas-default: transparent;--color-canvas-overlay: var(--color-paper);--color-canvas-inset: transparent;--color-canvas-subtle: var(--color-code-bg);--color-border-default: var(--color-line);--color-border-muted: var(--color-line);--color-neutral-muted: var(--color-code-inline-bg);--color-accent-fg: var(--color-accent);--color-accent-emphasis: var(--color-accent);--color-accent-muted: var(--color-accent-soft-strong);--color-accent-subtle: var(--color-accent-soft);--color-success-fg: var(--syntax-tag);--color-success-emphasis: var(--syntax-tag);--color-success-muted: color-mix(in srgb, var(--syntax-tag) 30%, transparent);--color-success-subtle: color-mix(in srgb, var(--syntax-tag) 10%, transparent);--color-attention-fg: var(--syntax-number);--color-attention-emphasis: var(--syntax-number);--color-attention-muted: color-mix(in srgb, var(--syntax-number) 30%, transparent);--color-attention-subtle: color-mix(in srgb, var(--syntax-number) 10%, transparent);--color-danger-fg: var(--syntax-error);--color-danger-emphasis: var(--syntax-error);--color-danger-muted: color-mix(in srgb, var(--syntax-error) 35%, transparent);--color-danger-subtle: color-mix(in srgb, var(--syntax-error) 10%, transparent);--color-primer-shadow-inset: 0 0 transparent;--color-scale-gray-7: var(--color-accent-soft);--color-scale-blue-8: var(--color-accent-soft-strong);--color-social-reaction-bg-hover: var(--color-accent-soft);--color-social-reaction-bg-reacted-hover: var(--color-accent-soft-strong)}html,body,main,.gsc-main{color:var(--color-text);background:transparent;font-family:var(--font-body)}html{background:var(--color-page)}#__next button,#__next input,#__next select,#__next textarea{font-family:var(--font-body)}#__next main{font-size:var(--note-text-size);line-height:1.7}::selection{color:var(--color-page);background:var(--color-accent)}#__next .markdown,#__next .gsc-comment-content{font-size:var(--note-text-size);line-height:1.7}#__next pre,#__next code,#__next kbd,#__next samp,#__next .gsc-is-fixed-width,#__next .commit-tease-sha,#__next .blob-code-inner,#__next .blob-num{font-family:var(--font-mono)}#__next .markdown pre{border:1px solid var(--color-code-border);box-shadow:var(--shadow-code)}#__next .markdown code:not(pre>code),#__next .markdown tt{background:var(--color-code-inline-bg)}#__next .gsc-comment-box,#__next .gsc-comment-box-tabs,#__next .gsc-comment-box-write,#__next .gsc-comment-box-textarea,#__next .gsc-comment-box-textarea-extras,#__next .gsc-replies,#__next .gsc-reply-box{background:transparent;border-color:var(--color-line)}#__next .gsc-comment-box:not(.gsc-comment-box-is-reply){border-radius:8px}#__next .gsc-comments{display:flex;flex-direction:column;gap:0}#__next .gsc-comments>.gsc-comment-box{order:0}#__next .gsc-comments>.gsc-header{order:1;margin:1.5rem 0 0;padding-bottom:.75rem;border-bottom:1px solid var(--color-line);flex-wrap:wrap;gap:.5rem 1rem}#__next .gsc-comments>.gsc-timeline{order:2}#__next .gsc-comments-count{font-family:var(--font-body);font-size:1.25rem;font-weight:700;line-height:1.5}#__next .gsc-comments-count a,#__next .gsc-comment-author a,#__next .gsc-reply-author a{text-decoration:none}#__next .gsc-comments-count a:hover,#__next .gsc-comment-author a:hover,#__next .gsc-reply-author a:hover{color:var(--color-accent)}#__next .gsc-left-header>em{display:none}#__next .gsc-right-header{gap:1rem;margin-inline-start:auto;padding:0;background:transparent}#__next .gsc-right-header .BtnGroup-item,#__next .gsc-right-header .btn{margin:0;padding:0;border:0;border-radius:0;background:transparent;box-shadow:none;color:var(--color-muted);font-size:.75rem;font-weight:400;line-height:1.5}#__next .gsc-right-header .btn{min-height:2rem}#__next .gsc-right-header .BtnGroup-item--selected .btn,#__next .gsc-right-header .btn:hover{color:var(--color-accent)}#__next .gsc-comment-box{position:relative;display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;column-gap:.75rem;row-gap:1rem;margin:0;padding:.75rem;box-shadow:none}#__next .gsc-comment-box-main{grid-column:1 / -1;grid-row:1;min-width:0;margin:0}#__next .gsc-comment-box-write,#__next .gsc-comment-box-preview{border:0;border-radius:0;box-shadow:none}#__next .gsc-comment-box-textarea,#__next .gsc-comment-box-textarea:disabled{display:block;width:100%;height:8.75em;min-height:8.75em;padding:0;border:0;border-radius:0;background:transparent;color:var(--color-text);font-size:.875rem;line-height:1.7;box-shadow:none;resize:vertical}#__next .gsc-comment-box-preview{min-height:7.65625rem;padding:0;background:transparent}#__next .gsc-comment-box-textarea-extras,#__next .gsc-comment-box-md-toolbar{display:none}#__next .gsc-comment-box-tabs{display:flex;align-items:center;justify-content:space-between;grid-column:1;grid-row:2;min-width:0;margin:0;padding:0;border:0;border-radius:0;background:transparent}#__next .gsc-comment-box-tabs>div:first-child{display:flex;gap:1rem;margin:0}#__next .gsc-comment-box-tabs button{display:inline-flex;align-items:center;gap:.375rem;min-height:2rem;margin:0;padding:0;border:0;border-radius:0;background:transparent;color:var(--color-muted);font-size:.75rem;line-height:1.5}#__next .gsc-comment-box-tabs>div:first-child>button:before{content:"";width:1rem;height:1rem;flex-shrink:0;background:currentColor;mask-size:contain;mask-position:center;mask-repeat:no-repeat}#__next .gsc-comment-box-tabs>div:first-child>button:first-child:before{mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m10.5 2.5 3 3M2.5 13.5l3.5-1 7.5-7.5a2.1 2.1 0 0 0-3-3L3 9.5z'/%3E%3C/svg%3E")}#__next .gsc-comment-box-tabs>div:first-child>button:nth-child(2):before{mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1 8s2.5-4.5 7-4.5S15 8 15 8s-2.5 4.5-7 4.5S1 8 1 8z'/%3E%3Ccircle cx='8' cy='8' r='2'/%3E%3C/svg%3E")}#__next .gsc-comment-box-tabs .color-bg-canvas,#__next .gsc-comment-box-tabs button:hover{color:var(--color-accent)}#__next .gsc-comment-box-bottom{display:flex;align-items:center;justify-content:flex-end;gap:1rem;grid-column:2;grid-row:2;min-width:0;margin:0}#__next .gsc-comment-box-bottom>button{display:inline-flex;align-items:center;gap:.375rem;min-height:2rem;margin:0 auto 0 0;padding:0;border:0;background:transparent;color:var(--color-muted);font-size:.75rem;line-height:1.5;text-decoration:none;white-space:nowrap}#__next .gsc-comment-box-bottom>button:hover{color:var(--color-accent)}#__next .gsc-comment-box-bottom>button .octicon{width:1rem;height:1rem;margin:0}#__next .gsc-comment-box-buttons{gap:.5rem;margin-inline-start:0;max-width:100%;flex-wrap:wrap;justify-content:flex-end}#__next .gsc-comment-box-buttons .btn{min-height:2rem;margin:0;padding:.5em 1em;border-radius:.5em;font-size:.75rem;font-weight:400;line-height:1.5}#__next .gsc-comment-box-buttons .octicon{width:1em;height:1em}#__next .gsc-comment-box-buttons .btn-primary:disabled{color:var(--color-muted);background:transparent;border-color:var(--color-line);opacity:.6}#__next .gsc-timeline{gap:0}#__next .gsc-comment{display:block;min-width:0;padding:1.25rem 0;border-bottom:1px solid var(--color-line)}#__next .gsc-comment>div:first-child{border:0;border-radius:0;background:transparent;box-shadow:none}#__next .gsc-comment-header{padding:0}#__next .gsc-comment-author,#__next .gsc-reply-author{flex-wrap:wrap;gap:.5rem .75rem;color:var(--color-muted);font-size:.75rem}#__next .gsc-comment-author-avatar{max-width:100%;color:var(--color-text);font-size:.875rem}#__next .gsc-comment-author-avatar img{width:1.875rem;height:1.875rem;margin-inline-end:.625rem}#__next .gsc-comment-author>div>span,#__next .gsc-reply-author>div>span{padding:0;border:0;border-radius:0;background:transparent;color:var(--color-muted);font-size:.625rem;font-weight:400}#__next .gsc-comment-content{padding:.625rem 0 .625rem 2.5rem;border-radius:0;overflow-wrap:anywhere}#__next .gsc-comment-footer{align-items:center;gap:1rem;margin:0;padding-inline-start:2.5rem}#__next .gsc-comment-reactions,#__next .gsc-reply-reactions{align-items:center;gap:.75rem;margin:0}#__next .gsc-comment-replies-count{margin:0}#__next .gsc-social-reaction-summary-item{min-width:1.5rem;height:1.75rem;padding:0 .125rem;border:0;border-radius:0;background:transparent}#__next .gsc-social-reaction-summary-item.has-reacted,#__next .gsc-social-reaction-summary-item:hover:enabled,#__next .gsc-reactions-button:hover{color:var(--color-accent);background:transparent}#__next .gsc-reply-box{margin:.75rem 0 0 2.5rem;padding:0;border:0;border-radius:0}#__next .gsc-reply-box>button{width:auto;min-height:2rem;padding:0;border:0;background:transparent;color:var(--color-muted);font-size:.75rem;cursor:pointer;box-shadow:none}#__next .gsc-reply-box>button:hover{color:var(--color-accent)}#__next .gsc-comment-box-is-reply{width:calc(100% - 2.5rem);margin:.875rem 0 0 2.5rem;padding:.625rem;border:1px solid var(--color-line);border-radius:6px;row-gap:.75rem}#__next .gsc-comment .gsc-comment-box-tabs{border:0}#__next .gsc-comment-box-is-reply .gsc-comment-box-textarea{height:7em;min-height:7em}#__next .gsc-comment-box-is-reply .gsc-comment-box-preview{min-height:6.125rem}#__next .gsc-replies{margin:.875rem 0 0 2.5rem;padding:0;border:0;border-radius:0}#__next .gsc-reply{padding:.75rem 0 .75rem 1rem;border-inline-start:1px solid var(--color-line)}#__next .gsc-tl-line{display:none}#__next .gsc-reply-author-avatar img{width:1.5rem;height:1.5rem}#__next .gsc-reply-header{margin:0 0 .5rem;padding:0}#__next .gsc-reply-content{padding:0;overflow-wrap:anywhere}#__next .gsc-reactions-popover{border-color:var(--color-line);border-radius:6px;box-shadow:none}#__next .gsc-comment-box-textarea::placeholder{color:var(--color-muted);opacity:.6}#__next .form-control:not(.gsc-comment-box-textarea):disabled,#__next .btn:not(.btn-primary):disabled{color:var(--color-muted);background:var(--color-paper);border-color:var(--color-line);cursor:not-allowed}#__next .btn{transition-duration:var(--duration-fast);transition-timing-function:var(--ease-out)}#__next .btn:not(.btn-primary):hover:enabled{color:var(--color-accent)}#__next a:focus-visible,#__next button:focus-visible,#__next summary:focus-visible,#__next [role=button]:focus-visible,#__next input:focus-visible,#__next select:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}#__next .gsc-comment-box:has(.gsc-comment-box-textarea:focus){border-color:var(--color-accent)}#__next .gsc-comment-box-write:focus-within,#__next .gsc-comment-box-textarea:focus{box-shadow:none}#__next .gsc-comment-box-textarea:focus-visible{outline:none}#__next .form-control[aria-invalid=true],#__next .gsc-comment-box-textarea[aria-invalid=true]{border-color:var(--syntax-error)}@media(max-width:440px){#__next .gsc-comment-box{grid-template-columns:minmax(0,1fr);row-gap:.75rem}#__next .gsc-comment-box-bottom{grid-column:1;grid-row:3;width:100%}}@media(prefers-reduced-motion:reduce){#__next .btn{transition:none}} diff --git a/internal/embedded/static/css/components/giscus-theme.css b/internal/embedded/static/css/components/giscus-theme.css new file mode 100644 index 00000000..4cb58fd0 --- /dev/null +++ b/internal/embedded/static/css/components/giscus-theme.css @@ -0,0 +1,684 @@ +/* Shared iframe styles. scripts/build-giscus-themes.mjs supplies Daybook's + existing fonts and resolved tokens for each palette and appearance. + Variable names follow giscus's official custom theme surface: + https://github.com/giscus/giscus/blob/main/styles/themes/custom_example.css */ +:root { + --font-family-sans: var(--font-body); + --font-family-default: var(--font-body); + --font-family-monospace: var(--font-mono); +} + +:root, +main { + --color-prettylights-syntax-comment: var(--syntax-comment); + --color-prettylights-syntax-constant: var(--syntax-number); + --color-prettylights-syntax-entity: var(--syntax-function); + --color-prettylights-syntax-storage-modifier-import: var(--syntax-text); + --color-prettylights-syntax-entity-tag: var(--syntax-tag); + --color-prettylights-syntax-keyword: var(--syntax-keyword); + --color-prettylights-syntax-string: var(--syntax-string); + --color-prettylights-syntax-variable: var(--syntax-attr); + --color-prettylights-syntax-brackethighlighter-unmatched: var(--syntax-error); + --color-prettylights-syntax-invalid-illegal-text: var(--color-page); + --color-prettylights-syntax-invalid-illegal-bg: var(--syntax-error); + --color-prettylights-syntax-carriage-return-text: var(--color-page); + --color-prettylights-syntax-carriage-return-bg: var(--syntax-error); + --color-prettylights-syntax-string-regexp: var(--syntax-tag); + --color-prettylights-syntax-markup-list: var(--syntax-number); + --color-prettylights-syntax-markup-heading: var(--color-accent); + --color-prettylights-syntax-markup-italic: var(--syntax-text); + --color-prettylights-syntax-markup-bold: var(--syntax-text); + --color-prettylights-syntax-markup-deleted-text: var(--syntax-deleted); + --color-prettylights-syntax-markup-deleted-bg: color-mix(in srgb, var(--syntax-deleted) 12%, transparent); + --color-prettylights-syntax-markup-inserted-text: var(--syntax-inserted); + --color-prettylights-syntax-markup-inserted-bg: color-mix(in srgb, var(--syntax-inserted) 12%, transparent); + --color-prettylights-syntax-markup-changed-text: var(--syntax-number); + --color-prettylights-syntax-markup-changed-bg: color-mix(in srgb, var(--syntax-number) 12%, transparent); + --color-prettylights-syntax-markup-ignored-text: var(--syntax-text); + --color-prettylights-syntax-markup-ignored-bg: var(--color-accent-soft); + --color-prettylights-syntax-meta-diff-range: var(--syntax-function); + --color-prettylights-syntax-brackethighlighter-angle: var(--syntax-comment); + --color-prettylights-syntax-sublimelinter-gutter-mark: var(--color-muted); + --color-prettylights-syntax-constant-other-reference-link: var(--syntax-string); + + --color-btn-text: var(--color-text); + --color-btn-bg: transparent; + --color-btn-border: var(--color-line); + --color-btn-shadow: 0 0 transparent; + --color-btn-inset-shadow: 0 0 transparent; + --color-btn-hover-bg: var(--color-accent-soft); + --color-btn-hover-border: var(--color-accent); + --color-btn-active-bg: var(--color-accent-soft-strong); + --color-btn-active-border: var(--color-accent); + --color-btn-selected-bg: var(--color-accent-soft); + --color-btn-primary-text: var(--color-page); + --color-btn-primary-bg: var(--color-text); + --color-btn-primary-border: var(--color-text); + --color-btn-primary-shadow: 0 0 transparent; + --color-btn-primary-inset-shadow: 0 0 transparent; + --color-btn-primary-hover-bg: var(--color-accent); + --color-btn-primary-hover-border: var(--color-accent); + --color-btn-primary-selected-bg: var(--color-accent); + --color-btn-primary-selected-shadow: 0 0 transparent; + --color-btn-primary-disabled-text: var(--color-muted); + --color-btn-primary-disabled-bg: var(--color-paper); + --color-btn-primary-disabled-border: var(--color-line); + --color-action-list-item-default-hover-bg: var(--color-accent-soft); + --color-segmented-control-bg: transparent; + --color-segmented-control-button-bg: var(--color-accent-soft); + --color-segmented-control-button-selected-border: var(--color-line); + + --color-fg-default: var(--color-text); + --color-fg-muted: var(--color-muted); + --color-fg-subtle: var(--color-muted); + --color-canvas-default: transparent; + --color-canvas-overlay: var(--color-paper); + --color-canvas-inset: transparent; + --color-canvas-subtle: var(--color-code-bg); + --color-border-default: var(--color-line); + --color-border-muted: var(--color-line); + --color-neutral-muted: var(--color-code-inline-bg); + --color-accent-fg: var(--color-accent); + --color-accent-emphasis: var(--color-accent); + --color-accent-muted: var(--color-accent-soft-strong); + --color-accent-subtle: var(--color-accent-soft); + --color-success-fg: var(--syntax-tag); + --color-success-emphasis: var(--syntax-tag); + --color-success-muted: color-mix(in srgb, var(--syntax-tag) 30%, transparent); + --color-success-subtle: color-mix(in srgb, var(--syntax-tag) 10%, transparent); + --color-attention-fg: var(--syntax-number); + --color-attention-emphasis: var(--syntax-number); + --color-attention-muted: color-mix(in srgb, var(--syntax-number) 30%, transparent); + --color-attention-subtle: color-mix(in srgb, var(--syntax-number) 10%, transparent); + --color-danger-fg: var(--syntax-error); + --color-danger-emphasis: var(--syntax-error); + --color-danger-muted: color-mix(in srgb, var(--syntax-error) 35%, transparent); + --color-danger-subtle: color-mix(in srgb, var(--syntax-error) 10%, transparent); + --color-primer-shadow-inset: 0 0 transparent; + --color-scale-gray-7: var(--color-accent-soft); + --color-scale-blue-8: var(--color-accent-soft-strong); + --color-social-reaction-bg-hover: var(--color-accent-soft); + --color-social-reaction-bg-reacted-hover: var(--color-accent-soft-strong); +} + +html, +body, +main, +.gsc-main { + color: var(--color-text); + background: transparent; + font-family: var(--font-body); +} + +/* An iframe's transparent canvas can be painted white by the browser when its + color scheme differs from the host. Match the page at the document boundary; + the editor and comment panels themselves stay transparent, as in Waline. */ +html { + background: var(--color-page); +} + +/* Match the scope of giscus's Tailwind utilities so their spacing and font + helpers cannot override the component theme. */ +#__next button, +#__next input, +#__next select, +#__next textarea { + font-family: var(--font-body); +} + +#__next main { + font-size: var(--note-text-size); + line-height: 1.7; +} + +::selection { + color: var(--color-page); + background: var(--color-accent); +} + +#__next .markdown, +#__next .gsc-comment-content { + font-size: var(--note-text-size); + line-height: 1.7; +} + +#__next pre, +#__next code, +#__next kbd, +#__next samp, +#__next .gsc-is-fixed-width, +#__next .commit-tease-sha, +#__next .blob-code-inner, +#__next .blob-num { + font-family: var(--font-mono); +} + +#__next .markdown pre { + border: 1px solid var(--color-code-border); + box-shadow: var(--shadow-code); +} + +#__next .markdown code:not(pre > code), +#__next .markdown tt { + background: var(--color-code-inline-bg); +} + +#__next .gsc-comment-box, +#__next .gsc-comment-box-tabs, +#__next .gsc-comment-box-write, +#__next .gsc-comment-box-textarea, +#__next .gsc-comment-box-textarea-extras, +#__next .gsc-replies, +#__next .gsc-reply-box { + background: transparent; + border-color: var(--color-line); +} + +#__next .gsc-comment-box:not(.gsc-comment-box-is-reply) { + border-radius: 8px; +} + +/* Keep the old editor-first hierarchy, with the count and sorting underneath. */ +#__next .gsc-comments { + display: flex; + flex-direction: column; + gap: 0; +} + +#__next .gsc-comments > .gsc-comment-box { + order: 0; +} + +#__next .gsc-comments > .gsc-header { + order: 1; + margin: 1.5rem 0 0; + padding-bottom: 0.75rem; + border-bottom: 1px solid var(--color-line); + flex-wrap: wrap; + gap: 0.5rem 1rem; +} + +#__next .gsc-comments > .gsc-timeline { + order: 2; +} + +#__next .gsc-comments-count { + font-family: var(--font-body); + font-size: 1.25rem; + font-weight: 700; + line-height: 1.5; +} + +#__next .gsc-comments-count a, +#__next .gsc-comment-author a, +#__next .gsc-reply-author a { + text-decoration: none; +} + +#__next .gsc-comments-count a:hover, +#__next .gsc-comment-author a:hover, +#__next .gsc-reply-author a:hover { + color: var(--color-accent); +} + +#__next .gsc-left-header > em { + display: none; +} + +#__next .gsc-right-header { + gap: 1rem; + margin-inline-start: auto; + padding: 0; + background: transparent; +} + +#__next .gsc-right-header .BtnGroup-item, +#__next .gsc-right-header .btn { + margin: 0; + padding: 0; + border: 0; + border-radius: 0; + background: transparent; + box-shadow: none; + color: var(--color-muted); + font-size: 0.75rem; + font-weight: 400; + line-height: 1.5; +} + +#__next .gsc-right-header .btn { + min-height: 2rem; +} + +#__next .gsc-right-header .BtnGroup-item--selected .btn, +#__next .gsc-right-header .btn:hover { + color: var(--color-accent); +} + +/* One quiet outline and two stable modes. The upstream Markdown hint and Aa + control are unmounted during preview; use the persistent mode buttons for + icons instead of reserving spaces for controls that no longer exist. */ +#__next .gsc-comment-box { + position: relative; + display: grid; + grid-template-columns: minmax(0, 1fr) auto; + align-items: center; + column-gap: 0.75rem; + row-gap: 1rem; + margin: 0; + padding: 0.75rem; + box-shadow: none; +} + +#__next .gsc-comment-box-main { + grid-column: 1 / -1; + grid-row: 1; + min-width: 0; + margin: 0; +} + +#__next .gsc-comment-box-write, +#__next .gsc-comment-box-preview { + border: 0; + border-radius: 0; + box-shadow: none; +} + +#__next .gsc-comment-box-textarea, +#__next .gsc-comment-box-textarea:disabled { + display: block; + width: 100%; + height: 8.75em; + min-height: 8.75em; + padding: 0; + border: 0; + border-radius: 0; + background: transparent; + color: var(--color-text); + font-size: 0.875rem; + line-height: 1.7; + box-shadow: none; + resize: vertical; +} + +#__next .gsc-comment-box-preview { + min-height: 7.65625rem; + padding: 0; + background: transparent; +} + +#__next .gsc-comment-box-textarea-extras, +#__next .gsc-comment-box-md-toolbar { + display: none; +} + +#__next .gsc-comment-box-tabs { + display: flex; + align-items: center; + justify-content: space-between; + grid-column: 1; + grid-row: 2; + min-width: 0; + margin: 0; + padding: 0; + border: 0; + border-radius: 0; + background: transparent; +} + +#__next .gsc-comment-box-tabs > div:first-child { + display: flex; + gap: 1rem; + margin: 0; +} + +#__next .gsc-comment-box-tabs button { + display: inline-flex; + align-items: center; + gap: 0.375rem; + min-height: 2rem; + margin: 0; + padding: 0; + border: 0; + border-radius: 0; + background: transparent; + color: var(--color-muted); + font-size: 0.75rem; + line-height: 1.5; +} + +#__next .gsc-comment-box-tabs > div:first-child > button::before { + content: ""; + width: 1rem; + height: 1rem; + flex-shrink: 0; + background: currentColor; + mask-size: contain; + mask-position: center; + mask-repeat: no-repeat; +} + +#__next .gsc-comment-box-tabs > div:first-child > button:first-child::before { + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m10.5 2.5 3 3M2.5 13.5l3.5-1 7.5-7.5a2.1 2.1 0 0 0-3-3L3 9.5z'/%3E%3C/svg%3E"); +} + +#__next .gsc-comment-box-tabs > div:first-child > button:nth-child(2)::before { + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1 8s2.5-4.5 7-4.5S15 8 15 8s-2.5 4.5-7 4.5S1 8 1 8z'/%3E%3Ccircle cx='8' cy='8' r='2'/%3E%3C/svg%3E"); +} + +#__next .gsc-comment-box-tabs .color-bg-canvas, +#__next .gsc-comment-box-tabs button:hover { + color: var(--color-accent); +} + +#__next .gsc-comment-box-bottom { + display: flex; + align-items: center; + justify-content: flex-end; + gap: 1rem; + grid-column: 2; + grid-row: 2; + min-width: 0; + margin: 0; +} + +#__next .gsc-comment-box-bottom > button { + display: inline-flex; + align-items: center; + gap: 0.375rem; + min-height: 2rem; + margin: 0 auto 0 0; + padding: 0; + border: 0; + background: transparent; + color: var(--color-muted); + font-size: 0.75rem; + line-height: 1.5; + text-decoration: none; + white-space: nowrap; +} + +#__next .gsc-comment-box-bottom > button:hover { + color: var(--color-accent); +} + +#__next .gsc-comment-box-bottom > button .octicon { + width: 1rem; + height: 1rem; + margin: 0; +} + +#__next .gsc-comment-box-buttons { + gap: 0.5rem; + margin-inline-start: 0; + max-width: 100%; + flex-wrap: wrap; + justify-content: flex-end; +} + +#__next .gsc-comment-box-buttons .btn { + min-height: 2rem; + margin: 0; + padding: 0.5em 1em; + border-radius: 0.5em; + font-size: 0.75rem; + font-weight: 400; + line-height: 1.5; +} + +#__next .gsc-comment-box-buttons .octicon { + width: 1em; + height: 1em; +} + +#__next .gsc-comment-box-buttons .btn-primary:disabled { + color: var(--color-muted); + background: transparent; + border-color: var(--color-line); + opacity: 0.6; +} + +/* Comments read as part of the article, without nested GitHub card outlines. */ +#__next .gsc-timeline { + gap: 0; +} + +#__next .gsc-comment { + display: block; + min-width: 0; + padding: 1.25rem 0; + border-bottom: 1px solid var(--color-line); +} + +#__next .gsc-comment > div:first-child { + border: 0; + border-radius: 0; + background: transparent; + box-shadow: none; +} + +#__next .gsc-comment-header { + padding: 0; +} + +#__next .gsc-comment-author, +#__next .gsc-reply-author { + flex-wrap: wrap; + gap: 0.5rem 0.75rem; + color: var(--color-muted); + font-size: 0.75rem; +} + +#__next .gsc-comment-author-avatar { + max-width: 100%; + color: var(--color-text); + font-size: 0.875rem; +} + +#__next .gsc-comment-author-avatar img { + width: 1.875rem; + height: 1.875rem; + margin-inline-end: 0.625rem; +} + +#__next .gsc-comment-author > div > span, +#__next .gsc-reply-author > div > span { + padding: 0; + border: 0; + border-radius: 0; + background: transparent; + color: var(--color-muted); + font-size: 0.625rem; + font-weight: 400; +} + +#__next .gsc-comment-content { + padding: 0.625rem 0 0.625rem 2.5rem; + border-radius: 0; + overflow-wrap: anywhere; +} + +#__next .gsc-comment-footer { + align-items: center; + gap: 1rem; + margin: 0; + padding-inline-start: 2.5rem; +} + +#__next .gsc-comment-reactions, +#__next .gsc-reply-reactions { + align-items: center; + gap: 0.75rem; + margin: 0; +} + +#__next .gsc-comment-replies-count { + margin: 0; +} + +#__next .gsc-social-reaction-summary-item { + min-width: 1.5rem; + height: 1.75rem; + padding: 0 0.125rem; + border: 0; + border-radius: 0; + background: transparent; +} + +#__next .gsc-social-reaction-summary-item.has-reacted, +#__next .gsc-social-reaction-summary-item:hover:enabled, +#__next .gsc-reactions-button:hover { + color: var(--color-accent); + background: transparent; +} + +#__next .gsc-reply-box { + margin: 0.75rem 0 0 2.5rem; + padding: 0; + border: 0; + border-radius: 0; +} + +#__next .gsc-reply-box > button { + width: auto; + min-height: 2rem; + padding: 0; + border: 0; + background: transparent; + color: var(--color-muted); + font-size: 0.75rem; + cursor: pointer; + box-shadow: none; +} + +#__next .gsc-reply-box > button:hover { + color: var(--color-accent); +} + +#__next .gsc-comment-box-is-reply { + width: calc(100% - 2.5rem); + margin: 0.875rem 0 0 2.5rem; + padding: 0.625rem; + border: 1px solid var(--color-line); + border-radius: 6px; + row-gap: 0.75rem; +} + +#__next .gsc-comment .gsc-comment-box-tabs { + border: 0; +} + +#__next .gsc-comment-box-is-reply .gsc-comment-box-textarea { + height: 7em; + min-height: 7em; +} + +#__next .gsc-comment-box-is-reply .gsc-comment-box-preview { + min-height: 6.125rem; +} + +#__next .gsc-replies { + margin: 0.875rem 0 0 2.5rem; + padding: 0; + border: 0; + border-radius: 0; +} + +#__next .gsc-reply { + padding: 0.75rem 0 0.75rem 1rem; + border-inline-start: 1px solid var(--color-line); +} + +#__next .gsc-tl-line { + display: none; +} + +#__next .gsc-reply-author-avatar img { + width: 1.5rem; + height: 1.5rem; +} + +#__next .gsc-reply-header { + margin: 0 0 0.5rem; + padding: 0; +} + +#__next .gsc-reply-content { + padding: 0; + overflow-wrap: anywhere; +} + +#__next .gsc-reactions-popover { + border-color: var(--color-line); + border-radius: 6px; + box-shadow: none; +} + +#__next .gsc-comment-box-textarea::placeholder { + color: var(--color-muted); + opacity: 0.6; +} + +#__next .form-control:not(.gsc-comment-box-textarea):disabled, +#__next .btn:not(.btn-primary):disabled { + color: var(--color-muted); + background: var(--color-paper); + border-color: var(--color-line); + cursor: not-allowed; +} + +#__next .btn { + transition-duration: var(--duration-fast); + transition-timing-function: var(--ease-out); +} + +#__next .btn:not(.btn-primary):hover:enabled { + color: var(--color-accent); +} + +#__next a:focus-visible, +#__next button:focus-visible, +#__next summary:focus-visible, +#__next [role="button"]:focus-visible, +#__next input:focus-visible, +#__next select:focus-visible { + outline: 2px solid var(--color-accent); + outline-offset: 2px; +} + +#__next .gsc-comment-box:has(.gsc-comment-box-textarea:focus) { + border-color: var(--color-accent); +} + +#__next .gsc-comment-box-write:focus-within, +#__next .gsc-comment-box-textarea:focus { + box-shadow: none; +} + +#__next .gsc-comment-box-textarea:focus-visible { + outline: none; +} + +#__next .form-control[aria-invalid="true"], +#__next .gsc-comment-box-textarea[aria-invalid="true"] { + border-color: var(--syntax-error); +} + +@media (max-width: 440px) { + #__next .gsc-comment-box { + grid-template-columns: minmax(0, 1fr); + row-gap: 0.75rem; + } + + #__next .gsc-comment-box-bottom { + grid-column: 1; + grid-row: 3; + width: 100%; + } +} + +@media (prefers-reduced-motion: reduce) { + #__next .btn { + transition: none; + } +} diff --git a/internal/embedded/static/css/components/giscus-warm-dark.css b/internal/embedded/static/css/components/giscus-warm-dark.css new file mode 100644 index 00000000..bdc0d5bb --- /dev/null +++ b/internal/embedded/static/css/components/giscus-warm-dark.css @@ -0,0 +1,2 @@ +/* Generated by scripts/build-giscus-themes.mjs; edit tokens.css, fonts.css or giscus-theme.css. */ +@import"../../vendor/fonts/lxgw-wenkai-screen/regular/result.css";@import"../../vendor/fonts/maple-mono-cn/regular/result.css";@import"../../vendor/fonts/maple-mono-cn/italic/result.css";@font-face{font-family:Cormorant Garamond;size-adjust:127%;src:url(../../vendor/fonts/cormorant-garamond/cormorant-garamond-latin-400-normal.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Cormorant Garamond;size-adjust:127%;src:url(../../vendor/fonts/cormorant-garamond/cormorant-garamond-latin-500-normal.woff2) format("woff2");font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:Cormorant Garamond;size-adjust:127%;src:url(../../vendor/fonts/cormorant-garamond/cormorant-garamond-latin-600-normal.woff2) format("woff2");font-weight:600;font-style:normal;font-display:swap}@font-face{font-family:Cormorant Garamond;size-adjust:127%;src:url(../../vendor/fonts/cormorant-garamond/cormorant-garamond-latin-700-normal.woff2) format("woff2");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:Cormorant Garamond;size-adjust:127%;src:url(../../vendor/fonts/cormorant-garamond/cormorant-garamond-latin-400-italic.woff2) format("woff2");font-weight:400;font-style:italic;font-display:swap}@font-face{font-family:Cormorant Garamond;size-adjust:127%;src:url(../../vendor/fonts/cormorant-garamond/cormorant-garamond-latin-500-italic.woff2) format("woff2");font-weight:500;font-style:italic;font-display:swap}@font-face{font-family:Cormorant Garamond;size-adjust:127%;src:url(../../vendor/fonts/cormorant-garamond/cormorant-garamond-latin-600-italic.woff2) format("woff2");font-weight:600;font-style:italic;font-display:swap}@font-face{font-family:Cormorant Garamond;size-adjust:127%;src:url(../../vendor/fonts/cormorant-garamond/cormorant-garamond-latin-700-italic.woff2) format("woff2");font-weight:700;font-style:italic;font-display:swap}:root{--font-body:"LXGW WenKai Screen", "PingFang SC", "Microsoft YaHei", serif;--font-mono:"Maple Mono CN", "Maple Mono", "SFMono-Regular", "Cascadia Code", "JetBrains Mono", ui-monospace, monospace;--ease-out:cubic-bezier(.22, 1, .36, 1);--duration-fast:.24s;--note-text-size:15px;--color-page:#131110;--color-text:#f4f0e3;--color-muted:#c8c1ae;--color-line:#2a2622;--color-accent:#c89761;--color-paper:#1a1715;--color-accent-soft:rgba(200, 151, 97, .12);--color-accent-soft-strong:rgba(200, 151, 97, .22);--color-code-bg:#1a1715;--color-code-border:#2a2622;--color-code-inline-bg:#201c19;--shadow-code:inset 0 1px 0 rgba(255, 255, 255, .035);--syntax-text:#f4f0e3;--syntax-comment:#9d9484;--syntax-keyword:#d47b71;--syntax-string:#dcb378;--syntax-number:#df9862;--syntax-function:#bba1c9;--syntax-tag:#96af87;--syntax-attr:#81a3a3;--syntax-error:#ee8f7a;--syntax-inserted:#9bb978;--syntax-deleted:#ee8f7a;color-scheme:dark}:root:lang(en){--font-body:"Cormorant Garamond", "LXGW WenKai Screen", "Times New Roman", serif}:root{--font-family-sans: var(--font-body);--font-family-default: var(--font-body);--font-family-monospace: var(--font-mono)}:root,main{--color-prettylights-syntax-comment: var(--syntax-comment);--color-prettylights-syntax-constant: var(--syntax-number);--color-prettylights-syntax-entity: var(--syntax-function);--color-prettylights-syntax-storage-modifier-import: var(--syntax-text);--color-prettylights-syntax-entity-tag: var(--syntax-tag);--color-prettylights-syntax-keyword: var(--syntax-keyword);--color-prettylights-syntax-string: var(--syntax-string);--color-prettylights-syntax-variable: var(--syntax-attr);--color-prettylights-syntax-brackethighlighter-unmatched: var(--syntax-error);--color-prettylights-syntax-invalid-illegal-text: var(--color-page);--color-prettylights-syntax-invalid-illegal-bg: var(--syntax-error);--color-prettylights-syntax-carriage-return-text: var(--color-page);--color-prettylights-syntax-carriage-return-bg: var(--syntax-error);--color-prettylights-syntax-string-regexp: var(--syntax-tag);--color-prettylights-syntax-markup-list: var(--syntax-number);--color-prettylights-syntax-markup-heading: var(--color-accent);--color-prettylights-syntax-markup-italic: var(--syntax-text);--color-prettylights-syntax-markup-bold: var(--syntax-text);--color-prettylights-syntax-markup-deleted-text: var(--syntax-deleted);--color-prettylights-syntax-markup-deleted-bg: color-mix(in srgb, var(--syntax-deleted) 12%, transparent);--color-prettylights-syntax-markup-inserted-text: var(--syntax-inserted);--color-prettylights-syntax-markup-inserted-bg: color-mix(in srgb, var(--syntax-inserted) 12%, transparent);--color-prettylights-syntax-markup-changed-text: var(--syntax-number);--color-prettylights-syntax-markup-changed-bg: color-mix(in srgb, var(--syntax-number) 12%, transparent);--color-prettylights-syntax-markup-ignored-text: var(--syntax-text);--color-prettylights-syntax-markup-ignored-bg: var(--color-accent-soft);--color-prettylights-syntax-meta-diff-range: var(--syntax-function);--color-prettylights-syntax-brackethighlighter-angle: var(--syntax-comment);--color-prettylights-syntax-sublimelinter-gutter-mark: var(--color-muted);--color-prettylights-syntax-constant-other-reference-link: var(--syntax-string);--color-btn-text: var(--color-text);--color-btn-bg: transparent;--color-btn-border: var(--color-line);--color-btn-shadow: 0 0 transparent;--color-btn-inset-shadow: 0 0 transparent;--color-btn-hover-bg: var(--color-accent-soft);--color-btn-hover-border: var(--color-accent);--color-btn-active-bg: var(--color-accent-soft-strong);--color-btn-active-border: var(--color-accent);--color-btn-selected-bg: var(--color-accent-soft);--color-btn-primary-text: var(--color-page);--color-btn-primary-bg: var(--color-text);--color-btn-primary-border: var(--color-text);--color-btn-primary-shadow: 0 0 transparent;--color-btn-primary-inset-shadow: 0 0 transparent;--color-btn-primary-hover-bg: var(--color-accent);--color-btn-primary-hover-border: var(--color-accent);--color-btn-primary-selected-bg: var(--color-accent);--color-btn-primary-selected-shadow: 0 0 transparent;--color-btn-primary-disabled-text: var(--color-muted);--color-btn-primary-disabled-bg: var(--color-paper);--color-btn-primary-disabled-border: var(--color-line);--color-action-list-item-default-hover-bg: var(--color-accent-soft);--color-segmented-control-bg: transparent;--color-segmented-control-button-bg: var(--color-accent-soft);--color-segmented-control-button-selected-border: var(--color-line);--color-fg-default: var(--color-text);--color-fg-muted: var(--color-muted);--color-fg-subtle: var(--color-muted);--color-canvas-default: transparent;--color-canvas-overlay: var(--color-paper);--color-canvas-inset: transparent;--color-canvas-subtle: var(--color-code-bg);--color-border-default: var(--color-line);--color-border-muted: var(--color-line);--color-neutral-muted: var(--color-code-inline-bg);--color-accent-fg: var(--color-accent);--color-accent-emphasis: var(--color-accent);--color-accent-muted: var(--color-accent-soft-strong);--color-accent-subtle: var(--color-accent-soft);--color-success-fg: var(--syntax-tag);--color-success-emphasis: var(--syntax-tag);--color-success-muted: color-mix(in srgb, var(--syntax-tag) 30%, transparent);--color-success-subtle: color-mix(in srgb, var(--syntax-tag) 10%, transparent);--color-attention-fg: var(--syntax-number);--color-attention-emphasis: var(--syntax-number);--color-attention-muted: color-mix(in srgb, var(--syntax-number) 30%, transparent);--color-attention-subtle: color-mix(in srgb, var(--syntax-number) 10%, transparent);--color-danger-fg: var(--syntax-error);--color-danger-emphasis: var(--syntax-error);--color-danger-muted: color-mix(in srgb, var(--syntax-error) 35%, transparent);--color-danger-subtle: color-mix(in srgb, var(--syntax-error) 10%, transparent);--color-primer-shadow-inset: 0 0 transparent;--color-scale-gray-7: var(--color-accent-soft);--color-scale-blue-8: var(--color-accent-soft-strong);--color-social-reaction-bg-hover: var(--color-accent-soft);--color-social-reaction-bg-reacted-hover: var(--color-accent-soft-strong)}html,body,main,.gsc-main{color:var(--color-text);background:transparent;font-family:var(--font-body)}html{background:var(--color-page)}#__next button,#__next input,#__next select,#__next textarea{font-family:var(--font-body)}#__next main{font-size:var(--note-text-size);line-height:1.7}::selection{color:var(--color-page);background:var(--color-accent)}#__next .markdown,#__next .gsc-comment-content{font-size:var(--note-text-size);line-height:1.7}#__next pre,#__next code,#__next kbd,#__next samp,#__next .gsc-is-fixed-width,#__next .commit-tease-sha,#__next .blob-code-inner,#__next .blob-num{font-family:var(--font-mono)}#__next .markdown pre{border:1px solid var(--color-code-border);box-shadow:var(--shadow-code)}#__next .markdown code:not(pre>code),#__next .markdown tt{background:var(--color-code-inline-bg)}#__next .gsc-comment-box,#__next .gsc-comment-box-tabs,#__next .gsc-comment-box-write,#__next .gsc-comment-box-textarea,#__next .gsc-comment-box-textarea-extras,#__next .gsc-replies,#__next .gsc-reply-box{background:transparent;border-color:var(--color-line)}#__next .gsc-comment-box:not(.gsc-comment-box-is-reply){border-radius:8px}#__next .gsc-comments{display:flex;flex-direction:column;gap:0}#__next .gsc-comments>.gsc-comment-box{order:0}#__next .gsc-comments>.gsc-header{order:1;margin:1.5rem 0 0;padding-bottom:.75rem;border-bottom:1px solid var(--color-line);flex-wrap:wrap;gap:.5rem 1rem}#__next .gsc-comments>.gsc-timeline{order:2}#__next .gsc-comments-count{font-family:var(--font-body);font-size:1.25rem;font-weight:700;line-height:1.5}#__next .gsc-comments-count a,#__next .gsc-comment-author a,#__next .gsc-reply-author a{text-decoration:none}#__next .gsc-comments-count a:hover,#__next .gsc-comment-author a:hover,#__next .gsc-reply-author a:hover{color:var(--color-accent)}#__next .gsc-left-header>em{display:none}#__next .gsc-right-header{gap:1rem;margin-inline-start:auto;padding:0;background:transparent}#__next .gsc-right-header .BtnGroup-item,#__next .gsc-right-header .btn{margin:0;padding:0;border:0;border-radius:0;background:transparent;box-shadow:none;color:var(--color-muted);font-size:.75rem;font-weight:400;line-height:1.5}#__next .gsc-right-header .btn{min-height:2rem}#__next .gsc-right-header .BtnGroup-item--selected .btn,#__next .gsc-right-header .btn:hover{color:var(--color-accent)}#__next .gsc-comment-box{position:relative;display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;column-gap:.75rem;row-gap:1rem;margin:0;padding:.75rem;box-shadow:none}#__next .gsc-comment-box-main{grid-column:1 / -1;grid-row:1;min-width:0;margin:0}#__next .gsc-comment-box-write,#__next .gsc-comment-box-preview{border:0;border-radius:0;box-shadow:none}#__next .gsc-comment-box-textarea,#__next .gsc-comment-box-textarea:disabled{display:block;width:100%;height:8.75em;min-height:8.75em;padding:0;border:0;border-radius:0;background:transparent;color:var(--color-text);font-size:.875rem;line-height:1.7;box-shadow:none;resize:vertical}#__next .gsc-comment-box-preview{min-height:7.65625rem;padding:0;background:transparent}#__next .gsc-comment-box-textarea-extras,#__next .gsc-comment-box-md-toolbar{display:none}#__next .gsc-comment-box-tabs{display:flex;align-items:center;justify-content:space-between;grid-column:1;grid-row:2;min-width:0;margin:0;padding:0;border:0;border-radius:0;background:transparent}#__next .gsc-comment-box-tabs>div:first-child{display:flex;gap:1rem;margin:0}#__next .gsc-comment-box-tabs button{display:inline-flex;align-items:center;gap:.375rem;min-height:2rem;margin:0;padding:0;border:0;border-radius:0;background:transparent;color:var(--color-muted);font-size:.75rem;line-height:1.5}#__next .gsc-comment-box-tabs>div:first-child>button:before{content:"";width:1rem;height:1rem;flex-shrink:0;background:currentColor;mask-size:contain;mask-position:center;mask-repeat:no-repeat}#__next .gsc-comment-box-tabs>div:first-child>button:first-child:before{mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m10.5 2.5 3 3M2.5 13.5l3.5-1 7.5-7.5a2.1 2.1 0 0 0-3-3L3 9.5z'/%3E%3C/svg%3E")}#__next .gsc-comment-box-tabs>div:first-child>button:nth-child(2):before{mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1 8s2.5-4.5 7-4.5S15 8 15 8s-2.5 4.5-7 4.5S1 8 1 8z'/%3E%3Ccircle cx='8' cy='8' r='2'/%3E%3C/svg%3E")}#__next .gsc-comment-box-tabs .color-bg-canvas,#__next .gsc-comment-box-tabs button:hover{color:var(--color-accent)}#__next .gsc-comment-box-bottom{display:flex;align-items:center;justify-content:flex-end;gap:1rem;grid-column:2;grid-row:2;min-width:0;margin:0}#__next .gsc-comment-box-bottom>button{display:inline-flex;align-items:center;gap:.375rem;min-height:2rem;margin:0 auto 0 0;padding:0;border:0;background:transparent;color:var(--color-muted);font-size:.75rem;line-height:1.5;text-decoration:none;white-space:nowrap}#__next .gsc-comment-box-bottom>button:hover{color:var(--color-accent)}#__next .gsc-comment-box-bottom>button .octicon{width:1rem;height:1rem;margin:0}#__next .gsc-comment-box-buttons{gap:.5rem;margin-inline-start:0;max-width:100%;flex-wrap:wrap;justify-content:flex-end}#__next .gsc-comment-box-buttons .btn{min-height:2rem;margin:0;padding:.5em 1em;border-radius:.5em;font-size:.75rem;font-weight:400;line-height:1.5}#__next .gsc-comment-box-buttons .octicon{width:1em;height:1em}#__next .gsc-comment-box-buttons .btn-primary:disabled{color:var(--color-muted);background:transparent;border-color:var(--color-line);opacity:.6}#__next .gsc-timeline{gap:0}#__next .gsc-comment{display:block;min-width:0;padding:1.25rem 0;border-bottom:1px solid var(--color-line)}#__next .gsc-comment>div:first-child{border:0;border-radius:0;background:transparent;box-shadow:none}#__next .gsc-comment-header{padding:0}#__next .gsc-comment-author,#__next .gsc-reply-author{flex-wrap:wrap;gap:.5rem .75rem;color:var(--color-muted);font-size:.75rem}#__next .gsc-comment-author-avatar{max-width:100%;color:var(--color-text);font-size:.875rem}#__next .gsc-comment-author-avatar img{width:1.875rem;height:1.875rem;margin-inline-end:.625rem}#__next .gsc-comment-author>div>span,#__next .gsc-reply-author>div>span{padding:0;border:0;border-radius:0;background:transparent;color:var(--color-muted);font-size:.625rem;font-weight:400}#__next .gsc-comment-content{padding:.625rem 0 .625rem 2.5rem;border-radius:0;overflow-wrap:anywhere}#__next .gsc-comment-footer{align-items:center;gap:1rem;margin:0;padding-inline-start:2.5rem}#__next .gsc-comment-reactions,#__next .gsc-reply-reactions{align-items:center;gap:.75rem;margin:0}#__next .gsc-comment-replies-count{margin:0}#__next .gsc-social-reaction-summary-item{min-width:1.5rem;height:1.75rem;padding:0 .125rem;border:0;border-radius:0;background:transparent}#__next .gsc-social-reaction-summary-item.has-reacted,#__next .gsc-social-reaction-summary-item:hover:enabled,#__next .gsc-reactions-button:hover{color:var(--color-accent);background:transparent}#__next .gsc-reply-box{margin:.75rem 0 0 2.5rem;padding:0;border:0;border-radius:0}#__next .gsc-reply-box>button{width:auto;min-height:2rem;padding:0;border:0;background:transparent;color:var(--color-muted);font-size:.75rem;cursor:pointer;box-shadow:none}#__next .gsc-reply-box>button:hover{color:var(--color-accent)}#__next .gsc-comment-box-is-reply{width:calc(100% - 2.5rem);margin:.875rem 0 0 2.5rem;padding:.625rem;border:1px solid var(--color-line);border-radius:6px;row-gap:.75rem}#__next .gsc-comment .gsc-comment-box-tabs{border:0}#__next .gsc-comment-box-is-reply .gsc-comment-box-textarea{height:7em;min-height:7em}#__next .gsc-comment-box-is-reply .gsc-comment-box-preview{min-height:6.125rem}#__next .gsc-replies{margin:.875rem 0 0 2.5rem;padding:0;border:0;border-radius:0}#__next .gsc-reply{padding:.75rem 0 .75rem 1rem;border-inline-start:1px solid var(--color-line)}#__next .gsc-tl-line{display:none}#__next .gsc-reply-author-avatar img{width:1.5rem;height:1.5rem}#__next .gsc-reply-header{margin:0 0 .5rem;padding:0}#__next .gsc-reply-content{padding:0;overflow-wrap:anywhere}#__next .gsc-reactions-popover{border-color:var(--color-line);border-radius:6px;box-shadow:none}#__next .gsc-comment-box-textarea::placeholder{color:var(--color-muted);opacity:.6}#__next .form-control:not(.gsc-comment-box-textarea):disabled,#__next .btn:not(.btn-primary):disabled{color:var(--color-muted);background:var(--color-paper);border-color:var(--color-line);cursor:not-allowed}#__next .btn{transition-duration:var(--duration-fast);transition-timing-function:var(--ease-out)}#__next .btn:not(.btn-primary):hover:enabled{color:var(--color-accent)}#__next a:focus-visible,#__next button:focus-visible,#__next summary:focus-visible,#__next [role=button]:focus-visible,#__next input:focus-visible,#__next select:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}#__next .gsc-comment-box:has(.gsc-comment-box-textarea:focus){border-color:var(--color-accent)}#__next .gsc-comment-box-write:focus-within,#__next .gsc-comment-box-textarea:focus{box-shadow:none}#__next .gsc-comment-box-textarea:focus-visible{outline:none}#__next .form-control[aria-invalid=true],#__next .gsc-comment-box-textarea[aria-invalid=true]{border-color:var(--syntax-error)}@media(max-width:440px){#__next .gsc-comment-box{grid-template-columns:minmax(0,1fr);row-gap:.75rem}#__next .gsc-comment-box-bottom{grid-column:1;grid-row:3;width:100%}}@media(prefers-reduced-motion:reduce){#__next .btn{transition:none}} diff --git a/internal/embedded/static/css/components/giscus-warm-light.css b/internal/embedded/static/css/components/giscus-warm-light.css new file mode 100644 index 00000000..6d9a7a25 --- /dev/null +++ b/internal/embedded/static/css/components/giscus-warm-light.css @@ -0,0 +1,2 @@ +/* Generated by scripts/build-giscus-themes.mjs; edit tokens.css, fonts.css or giscus-theme.css. */ +@import"../../vendor/fonts/lxgw-wenkai-screen/regular/result.css";@import"../../vendor/fonts/maple-mono-cn/regular/result.css";@import"../../vendor/fonts/maple-mono-cn/italic/result.css";@font-face{font-family:Cormorant Garamond;size-adjust:127%;src:url(../../vendor/fonts/cormorant-garamond/cormorant-garamond-latin-400-normal.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Cormorant Garamond;size-adjust:127%;src:url(../../vendor/fonts/cormorant-garamond/cormorant-garamond-latin-500-normal.woff2) format("woff2");font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:Cormorant Garamond;size-adjust:127%;src:url(../../vendor/fonts/cormorant-garamond/cormorant-garamond-latin-600-normal.woff2) format("woff2");font-weight:600;font-style:normal;font-display:swap}@font-face{font-family:Cormorant Garamond;size-adjust:127%;src:url(../../vendor/fonts/cormorant-garamond/cormorant-garamond-latin-700-normal.woff2) format("woff2");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:Cormorant Garamond;size-adjust:127%;src:url(../../vendor/fonts/cormorant-garamond/cormorant-garamond-latin-400-italic.woff2) format("woff2");font-weight:400;font-style:italic;font-display:swap}@font-face{font-family:Cormorant Garamond;size-adjust:127%;src:url(../../vendor/fonts/cormorant-garamond/cormorant-garamond-latin-500-italic.woff2) format("woff2");font-weight:500;font-style:italic;font-display:swap}@font-face{font-family:Cormorant Garamond;size-adjust:127%;src:url(../../vendor/fonts/cormorant-garamond/cormorant-garamond-latin-600-italic.woff2) format("woff2");font-weight:600;font-style:italic;font-display:swap}@font-face{font-family:Cormorant Garamond;size-adjust:127%;src:url(../../vendor/fonts/cormorant-garamond/cormorant-garamond-latin-700-italic.woff2) format("woff2");font-weight:700;font-style:italic;font-display:swap}:root{--font-body:"LXGW WenKai Screen", "PingFang SC", "Microsoft YaHei", serif;--font-mono:"Maple Mono CN", "Maple Mono", "SFMono-Regular", "Cascadia Code", "JetBrains Mono", ui-monospace, monospace;--ease-out:cubic-bezier(.22, 1, .36, 1);--duration-fast:.24s;--note-text-size:15px;--color-page:#f6f1e6;--color-text:#25201b;--color-muted:#4a4239;--color-line:#d9cfb9;--color-accent:#8a4423;--color-paper:#fbf6ec;--color-accent-soft:rgba(138, 68, 35, .1);--color-accent-soft-strong:rgba(138, 68, 35, .18);--color-code-bg:#f0e9d6;--color-code-border:#d9cfb9;--color-code-inline-bg:#ebe3cd;--shadow-code:inset 0 1px 0 rgba(255, 255, 255, .48);--syntax-text:#25201b;--syntax-comment:#7d7165;--syntax-keyword:#a54a3e;--syntax-string:#7d6028;--syntax-number:#aa5c2b;--syntax-function:#7b5982;--syntax-tag:#557243;--syntax-attr:#3a7575;--syntax-error:#9b392f;--syntax-inserted:#4f6c3f;--syntax-deleted:#9b392f;color-scheme:light}:root:lang(en){--font-body:"Cormorant Garamond", "LXGW WenKai Screen", "Times New Roman", serif}:root{--font-family-sans: var(--font-body);--font-family-default: var(--font-body);--font-family-monospace: var(--font-mono)}:root,main{--color-prettylights-syntax-comment: var(--syntax-comment);--color-prettylights-syntax-constant: var(--syntax-number);--color-prettylights-syntax-entity: var(--syntax-function);--color-prettylights-syntax-storage-modifier-import: var(--syntax-text);--color-prettylights-syntax-entity-tag: var(--syntax-tag);--color-prettylights-syntax-keyword: var(--syntax-keyword);--color-prettylights-syntax-string: var(--syntax-string);--color-prettylights-syntax-variable: var(--syntax-attr);--color-prettylights-syntax-brackethighlighter-unmatched: var(--syntax-error);--color-prettylights-syntax-invalid-illegal-text: var(--color-page);--color-prettylights-syntax-invalid-illegal-bg: var(--syntax-error);--color-prettylights-syntax-carriage-return-text: var(--color-page);--color-prettylights-syntax-carriage-return-bg: var(--syntax-error);--color-prettylights-syntax-string-regexp: var(--syntax-tag);--color-prettylights-syntax-markup-list: var(--syntax-number);--color-prettylights-syntax-markup-heading: var(--color-accent);--color-prettylights-syntax-markup-italic: var(--syntax-text);--color-prettylights-syntax-markup-bold: var(--syntax-text);--color-prettylights-syntax-markup-deleted-text: var(--syntax-deleted);--color-prettylights-syntax-markup-deleted-bg: color-mix(in srgb, var(--syntax-deleted) 12%, transparent);--color-prettylights-syntax-markup-inserted-text: var(--syntax-inserted);--color-prettylights-syntax-markup-inserted-bg: color-mix(in srgb, var(--syntax-inserted) 12%, transparent);--color-prettylights-syntax-markup-changed-text: var(--syntax-number);--color-prettylights-syntax-markup-changed-bg: color-mix(in srgb, var(--syntax-number) 12%, transparent);--color-prettylights-syntax-markup-ignored-text: var(--syntax-text);--color-prettylights-syntax-markup-ignored-bg: var(--color-accent-soft);--color-prettylights-syntax-meta-diff-range: var(--syntax-function);--color-prettylights-syntax-brackethighlighter-angle: var(--syntax-comment);--color-prettylights-syntax-sublimelinter-gutter-mark: var(--color-muted);--color-prettylights-syntax-constant-other-reference-link: var(--syntax-string);--color-btn-text: var(--color-text);--color-btn-bg: transparent;--color-btn-border: var(--color-line);--color-btn-shadow: 0 0 transparent;--color-btn-inset-shadow: 0 0 transparent;--color-btn-hover-bg: var(--color-accent-soft);--color-btn-hover-border: var(--color-accent);--color-btn-active-bg: var(--color-accent-soft-strong);--color-btn-active-border: var(--color-accent);--color-btn-selected-bg: var(--color-accent-soft);--color-btn-primary-text: var(--color-page);--color-btn-primary-bg: var(--color-text);--color-btn-primary-border: var(--color-text);--color-btn-primary-shadow: 0 0 transparent;--color-btn-primary-inset-shadow: 0 0 transparent;--color-btn-primary-hover-bg: var(--color-accent);--color-btn-primary-hover-border: var(--color-accent);--color-btn-primary-selected-bg: var(--color-accent);--color-btn-primary-selected-shadow: 0 0 transparent;--color-btn-primary-disabled-text: var(--color-muted);--color-btn-primary-disabled-bg: var(--color-paper);--color-btn-primary-disabled-border: var(--color-line);--color-action-list-item-default-hover-bg: var(--color-accent-soft);--color-segmented-control-bg: transparent;--color-segmented-control-button-bg: var(--color-accent-soft);--color-segmented-control-button-selected-border: var(--color-line);--color-fg-default: var(--color-text);--color-fg-muted: var(--color-muted);--color-fg-subtle: var(--color-muted);--color-canvas-default: transparent;--color-canvas-overlay: var(--color-paper);--color-canvas-inset: transparent;--color-canvas-subtle: var(--color-code-bg);--color-border-default: var(--color-line);--color-border-muted: var(--color-line);--color-neutral-muted: var(--color-code-inline-bg);--color-accent-fg: var(--color-accent);--color-accent-emphasis: var(--color-accent);--color-accent-muted: var(--color-accent-soft-strong);--color-accent-subtle: var(--color-accent-soft);--color-success-fg: var(--syntax-tag);--color-success-emphasis: var(--syntax-tag);--color-success-muted: color-mix(in srgb, var(--syntax-tag) 30%, transparent);--color-success-subtle: color-mix(in srgb, var(--syntax-tag) 10%, transparent);--color-attention-fg: var(--syntax-number);--color-attention-emphasis: var(--syntax-number);--color-attention-muted: color-mix(in srgb, var(--syntax-number) 30%, transparent);--color-attention-subtle: color-mix(in srgb, var(--syntax-number) 10%, transparent);--color-danger-fg: var(--syntax-error);--color-danger-emphasis: var(--syntax-error);--color-danger-muted: color-mix(in srgb, var(--syntax-error) 35%, transparent);--color-danger-subtle: color-mix(in srgb, var(--syntax-error) 10%, transparent);--color-primer-shadow-inset: 0 0 transparent;--color-scale-gray-7: var(--color-accent-soft);--color-scale-blue-8: var(--color-accent-soft-strong);--color-social-reaction-bg-hover: var(--color-accent-soft);--color-social-reaction-bg-reacted-hover: var(--color-accent-soft-strong)}html,body,main,.gsc-main{color:var(--color-text);background:transparent;font-family:var(--font-body)}html{background:var(--color-page)}#__next button,#__next input,#__next select,#__next textarea{font-family:var(--font-body)}#__next main{font-size:var(--note-text-size);line-height:1.7}::selection{color:var(--color-page);background:var(--color-accent)}#__next .markdown,#__next .gsc-comment-content{font-size:var(--note-text-size);line-height:1.7}#__next pre,#__next code,#__next kbd,#__next samp,#__next .gsc-is-fixed-width,#__next .commit-tease-sha,#__next .blob-code-inner,#__next .blob-num{font-family:var(--font-mono)}#__next .markdown pre{border:1px solid var(--color-code-border);box-shadow:var(--shadow-code)}#__next .markdown code:not(pre>code),#__next .markdown tt{background:var(--color-code-inline-bg)}#__next .gsc-comment-box,#__next .gsc-comment-box-tabs,#__next .gsc-comment-box-write,#__next .gsc-comment-box-textarea,#__next .gsc-comment-box-textarea-extras,#__next .gsc-replies,#__next .gsc-reply-box{background:transparent;border-color:var(--color-line)}#__next .gsc-comment-box:not(.gsc-comment-box-is-reply){border-radius:8px}#__next .gsc-comments{display:flex;flex-direction:column;gap:0}#__next .gsc-comments>.gsc-comment-box{order:0}#__next .gsc-comments>.gsc-header{order:1;margin:1.5rem 0 0;padding-bottom:.75rem;border-bottom:1px solid var(--color-line);flex-wrap:wrap;gap:.5rem 1rem}#__next .gsc-comments>.gsc-timeline{order:2}#__next .gsc-comments-count{font-family:var(--font-body);font-size:1.25rem;font-weight:700;line-height:1.5}#__next .gsc-comments-count a,#__next .gsc-comment-author a,#__next .gsc-reply-author a{text-decoration:none}#__next .gsc-comments-count a:hover,#__next .gsc-comment-author a:hover,#__next .gsc-reply-author a:hover{color:var(--color-accent)}#__next .gsc-left-header>em{display:none}#__next .gsc-right-header{gap:1rem;margin-inline-start:auto;padding:0;background:transparent}#__next .gsc-right-header .BtnGroup-item,#__next .gsc-right-header .btn{margin:0;padding:0;border:0;border-radius:0;background:transparent;box-shadow:none;color:var(--color-muted);font-size:.75rem;font-weight:400;line-height:1.5}#__next .gsc-right-header .btn{min-height:2rem}#__next .gsc-right-header .BtnGroup-item--selected .btn,#__next .gsc-right-header .btn:hover{color:var(--color-accent)}#__next .gsc-comment-box{position:relative;display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;column-gap:.75rem;row-gap:1rem;margin:0;padding:.75rem;box-shadow:none}#__next .gsc-comment-box-main{grid-column:1 / -1;grid-row:1;min-width:0;margin:0}#__next .gsc-comment-box-write,#__next .gsc-comment-box-preview{border:0;border-radius:0;box-shadow:none}#__next .gsc-comment-box-textarea,#__next .gsc-comment-box-textarea:disabled{display:block;width:100%;height:8.75em;min-height:8.75em;padding:0;border:0;border-radius:0;background:transparent;color:var(--color-text);font-size:.875rem;line-height:1.7;box-shadow:none;resize:vertical}#__next .gsc-comment-box-preview{min-height:7.65625rem;padding:0;background:transparent}#__next .gsc-comment-box-textarea-extras,#__next .gsc-comment-box-md-toolbar{display:none}#__next .gsc-comment-box-tabs{display:flex;align-items:center;justify-content:space-between;grid-column:1;grid-row:2;min-width:0;margin:0;padding:0;border:0;border-radius:0;background:transparent}#__next .gsc-comment-box-tabs>div:first-child{display:flex;gap:1rem;margin:0}#__next .gsc-comment-box-tabs button{display:inline-flex;align-items:center;gap:.375rem;min-height:2rem;margin:0;padding:0;border:0;border-radius:0;background:transparent;color:var(--color-muted);font-size:.75rem;line-height:1.5}#__next .gsc-comment-box-tabs>div:first-child>button:before{content:"";width:1rem;height:1rem;flex-shrink:0;background:currentColor;mask-size:contain;mask-position:center;mask-repeat:no-repeat}#__next .gsc-comment-box-tabs>div:first-child>button:first-child:before{mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m10.5 2.5 3 3M2.5 13.5l3.5-1 7.5-7.5a2.1 2.1 0 0 0-3-3L3 9.5z'/%3E%3C/svg%3E")}#__next .gsc-comment-box-tabs>div:first-child>button:nth-child(2):before{mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1 8s2.5-4.5 7-4.5S15 8 15 8s-2.5 4.5-7 4.5S1 8 1 8z'/%3E%3Ccircle cx='8' cy='8' r='2'/%3E%3C/svg%3E")}#__next .gsc-comment-box-tabs .color-bg-canvas,#__next .gsc-comment-box-tabs button:hover{color:var(--color-accent)}#__next .gsc-comment-box-bottom{display:flex;align-items:center;justify-content:flex-end;gap:1rem;grid-column:2;grid-row:2;min-width:0;margin:0}#__next .gsc-comment-box-bottom>button{display:inline-flex;align-items:center;gap:.375rem;min-height:2rem;margin:0 auto 0 0;padding:0;border:0;background:transparent;color:var(--color-muted);font-size:.75rem;line-height:1.5;text-decoration:none;white-space:nowrap}#__next .gsc-comment-box-bottom>button:hover{color:var(--color-accent)}#__next .gsc-comment-box-bottom>button .octicon{width:1rem;height:1rem;margin:0}#__next .gsc-comment-box-buttons{gap:.5rem;margin-inline-start:0;max-width:100%;flex-wrap:wrap;justify-content:flex-end}#__next .gsc-comment-box-buttons .btn{min-height:2rem;margin:0;padding:.5em 1em;border-radius:.5em;font-size:.75rem;font-weight:400;line-height:1.5}#__next .gsc-comment-box-buttons .octicon{width:1em;height:1em}#__next .gsc-comment-box-buttons .btn-primary:disabled{color:var(--color-muted);background:transparent;border-color:var(--color-line);opacity:.6}#__next .gsc-timeline{gap:0}#__next .gsc-comment{display:block;min-width:0;padding:1.25rem 0;border-bottom:1px solid var(--color-line)}#__next .gsc-comment>div:first-child{border:0;border-radius:0;background:transparent;box-shadow:none}#__next .gsc-comment-header{padding:0}#__next .gsc-comment-author,#__next .gsc-reply-author{flex-wrap:wrap;gap:.5rem .75rem;color:var(--color-muted);font-size:.75rem}#__next .gsc-comment-author-avatar{max-width:100%;color:var(--color-text);font-size:.875rem}#__next .gsc-comment-author-avatar img{width:1.875rem;height:1.875rem;margin-inline-end:.625rem}#__next .gsc-comment-author>div>span,#__next .gsc-reply-author>div>span{padding:0;border:0;border-radius:0;background:transparent;color:var(--color-muted);font-size:.625rem;font-weight:400}#__next .gsc-comment-content{padding:.625rem 0 .625rem 2.5rem;border-radius:0;overflow-wrap:anywhere}#__next .gsc-comment-footer{align-items:center;gap:1rem;margin:0;padding-inline-start:2.5rem}#__next .gsc-comment-reactions,#__next .gsc-reply-reactions{align-items:center;gap:.75rem;margin:0}#__next .gsc-comment-replies-count{margin:0}#__next .gsc-social-reaction-summary-item{min-width:1.5rem;height:1.75rem;padding:0 .125rem;border:0;border-radius:0;background:transparent}#__next .gsc-social-reaction-summary-item.has-reacted,#__next .gsc-social-reaction-summary-item:hover:enabled,#__next .gsc-reactions-button:hover{color:var(--color-accent);background:transparent}#__next .gsc-reply-box{margin:.75rem 0 0 2.5rem;padding:0;border:0;border-radius:0}#__next .gsc-reply-box>button{width:auto;min-height:2rem;padding:0;border:0;background:transparent;color:var(--color-muted);font-size:.75rem;cursor:pointer;box-shadow:none}#__next .gsc-reply-box>button:hover{color:var(--color-accent)}#__next .gsc-comment-box-is-reply{width:calc(100% - 2.5rem);margin:.875rem 0 0 2.5rem;padding:.625rem;border:1px solid var(--color-line);border-radius:6px;row-gap:.75rem}#__next .gsc-comment .gsc-comment-box-tabs{border:0}#__next .gsc-comment-box-is-reply .gsc-comment-box-textarea{height:7em;min-height:7em}#__next .gsc-comment-box-is-reply .gsc-comment-box-preview{min-height:6.125rem}#__next .gsc-replies{margin:.875rem 0 0 2.5rem;padding:0;border:0;border-radius:0}#__next .gsc-reply{padding:.75rem 0 .75rem 1rem;border-inline-start:1px solid var(--color-line)}#__next .gsc-tl-line{display:none}#__next .gsc-reply-author-avatar img{width:1.5rem;height:1.5rem}#__next .gsc-reply-header{margin:0 0 .5rem;padding:0}#__next .gsc-reply-content{padding:0;overflow-wrap:anywhere}#__next .gsc-reactions-popover{border-color:var(--color-line);border-radius:6px;box-shadow:none}#__next .gsc-comment-box-textarea::placeholder{color:var(--color-muted);opacity:.6}#__next .form-control:not(.gsc-comment-box-textarea):disabled,#__next .btn:not(.btn-primary):disabled{color:var(--color-muted);background:var(--color-paper);border-color:var(--color-line);cursor:not-allowed}#__next .btn{transition-duration:var(--duration-fast);transition-timing-function:var(--ease-out)}#__next .btn:not(.btn-primary):hover:enabled{color:var(--color-accent)}#__next a:focus-visible,#__next button:focus-visible,#__next summary:focus-visible,#__next [role=button]:focus-visible,#__next input:focus-visible,#__next select:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}#__next .gsc-comment-box:has(.gsc-comment-box-textarea:focus){border-color:var(--color-accent)}#__next .gsc-comment-box-write:focus-within,#__next .gsc-comment-box-textarea:focus{box-shadow:none}#__next .gsc-comment-box-textarea:focus-visible{outline:none}#__next .form-control[aria-invalid=true],#__next .gsc-comment-box-textarea[aria-invalid=true]{border-color:var(--syntax-error)}@media(max-width:440px){#__next .gsc-comment-box{grid-template-columns:minmax(0,1fr);row-gap:.75rem}#__next .gsc-comment-box-bottom{grid-column:1;grid-row:3;width:100%}}@media(prefers-reduced-motion:reduce){#__next .btn{transition:none}} diff --git a/internal/embedded/static/css/components/media-manager-mobile.css b/internal/embedded/static/css/components/media-manager-mobile.css new file mode 100644 index 00000000..344c2cc3 --- /dev/null +++ b/internal/embedded/static/css/components/media-manager-mobile.css @@ -0,0 +1,290 @@ +/* ========================================================================== + Mobile UI (Fullscreen Player) - Completely separate from desktop + ========================================================================== */ + +/* Base state: always hidden until explicitly activated */ +.mm-mobile-ui { + display: none; +} + +/* Hide the mobile UI completely on desktop */ +@media (min-width: 961px) { + .mm-mobile-ui, + .mm-mobile-playlist-view { + display: none !important; + } +} + +/* Fullscreen Active State */ +@media (max-width: 960px) { + body.is-media-overlay-open .mm-mobile-ui { + position: fixed; + top: var(--mobile-topbar-height, 0); + left: 0; + width: 100%; + height: calc(100dvh - var(--mobile-topbar-height, 0)); + z-index: 1995; + display: flex !important; + flex-direction: column; + background-color: var(--color-page); + padding-top: calc(env(safe-area-inset-top) + 24px); + padding-bottom: calc(env(safe-area-inset-bottom) + 32px); + overflow-y: auto; + opacity: 1; + pointer-events: auto; + transform: translateY(0); + } + + /* When NOT active, it is hidden by default display: none on inline style */ + + + + /* Center Section (Artwork & Info) */ + .mm-mobile-center { + flex: 1; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + width: 100%; + padding: 2rem 1rem; + margin-top: 80px; /* offset for close button */ + } + + /* Artwork Group (Perfect Concentric Alignment) */ + .mm-mobile-art-group { + position: relative; + width: min(65vw, 40vh, 320px); + height: min(65vw, 40vh, 320px); + margin-bottom: 2rem; + display: flex; + justify-content: center; + align-items: center; + flex-shrink: 0; + } + + .mm-mobile-visualizer-canvas { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 128.57% !important; /* 180 / 140 exactly */ + height: 128.57% !important; + pointer-events: none; + z-index: 1; + } + + .mm-mobile-art-group .mm-cover-wrapper { + position: relative; + top: 0; + left: 0; + width: 100%; + height: 100%; + margin: 0; + z-index: 2; + /* Reuse the desktop keyframes for spin */ + animation: mm-spin-cover 23.5s linear infinite; + animation-play-state: paused; + } + .is-playing .mm-mobile-art-group .mm-cover-wrapper { + animation-play-state: running; + } + + .mm-mobile-art-group .mm-cover-clipper { + position: absolute; + top: 0; left: 0; + width: 100%; height: 100%; + contain: paint; + -webkit-clip-path: url(#mm-cookie-clip); + clip-path: url(#mm-cookie-clip); + } + + .mm-mobile-art-group .mm-image-container { + width: 100%; height: 100%; + } + + .is-playing .mm-mobile-art-group .mm-cover-image { + animation-play-state: running; + } + + /* Info Section */ + .mm-mobile-center .mm-info-wrapper { + display: flex; + flex-direction: column; + align-items: center; + text-align: center; + gap: 8px; + margin-bottom: 2rem; + width: 100%; + padding: 0 1rem; + } + + .mm-mobile-center .mm-title { + font-size: 1.4rem; + font-weight: 600; + color: var(--color-on-surface); + font-family: var(--font-serif); + letter-spacing: -0.02em; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; + } + + .mm-mobile-center .mm-artist { + font-size: 1rem; + color: var(--color-on-surface-variant); + font-family: var(--font-ui); + display: -webkit-box; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + overflow: hidden; + } + + /* Bottom Controls Section */ + .mm-mobile-bottom { + display: flex; + flex-direction: column; + align-items: center; + padding-bottom: 32px; + } + + .mm-mobile-bottom .mm-controls-wrapper { + display: flex; + align-items: center; + justify-content: center; + gap: 32px; + margin-bottom: 24px; + } + + + + .mm-mobile-bottom .mm-article-link { + display: flex; + align-items: center; + justify-content: center; + gap: 6px; + color: var(--color-on-surface-variant); + text-decoration: none; + font-size: 0.95rem; + font-family: var(--font-ui); + padding: 8px 16px; + border-radius: 100px; + background-color: var(--color-surface-container); + margin-bottom: 24px; + } + + .mm-mobile-bottom .mm-btn-open-playlist { + display: flex; + align-items: center; + gap: 8px; + background: none; + border: none; + color: var(--color-on-surface-variant); + font-size: 1rem; + font-family: var(--font-ui); + cursor: pointer; + padding: 12px; + } + + /* Mobile Playlist Overlay */ + .mm-mobile-playlist-view { + position: fixed; + top: var(--mobile-topbar-height, 0); + left: 0; + width: 100%; + height: calc(100dvh - var(--mobile-topbar-height, 0)); + background-color: var(--color-page); + display: flex; + flex-direction: column; + padding-top: calc(env(safe-area-inset-top) + 24px); + padding-bottom: calc(env(safe-area-inset-bottom) + 32px); + transform: translateY(100%); + transition: transform 0.4s cubic-bezier(0.2, 0, 0, 1); + z-index: 2000; + } + .media-manager-container.show-mobile-playlist .mm-mobile-playlist-view { + transform: translateY(0); + } + + .mm-mobile-playlist-view .mm-playlist-header { + display: flex; + align-items: center; + padding: 24px 20px; + gap: 16px; + } + + .mm-mobile-playlist-view .mm-btn-close-playlist { + background: none; + border: none; + color: var(--color-on-surface); + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + width: 40px; + height: 40px; + } + + .mm-mobile-playlist-view .mm-playlist-header-title { + font-size: 1.2rem; + font-weight: 600; + color: var(--color-on-surface); + font-family: var(--font-serif); + } + + .mm-mobile-playlist-view .mm-playlist-list { + list-style: none; + margin: 0; + padding: 0 16px 32px 16px; + overflow-y: auto; + flex: 1; + } + + /* Reuse the playlist item styles from desktop */ + .mm-mobile-playlist-view .mm-playlist-item { + display: flex; + align-items: center; + gap: 12px; + padding: 12px; + border-radius: 12px; + cursor: pointer; + transition: background-color 0.2s; + position: relative; + padding-left: 44px; + } + .mm-mobile-playlist-view .mm-playlist-item:active { + background-color: var(--color-surface-container-high); + } + .mm-mobile-playlist-view .mm-playlist-item.is-active { + background-color: var(--color-accent-soft, var(--color-surface-variant)); + border-radius: 999px; + } + .mm-mobile-playlist-view .mm-playlist-item .mm-pi-cover { + width: 48px; + height: 48px; + border-radius: 8px; + object-fit: cover; + } + .mm-mobile-playlist-view .mm-playlist-item .mm-pi-info { + display: flex; + flex-direction: column; + flex: 1; + overflow: hidden; + } + .mm-mobile-playlist-view .mm-playlist-item .mm-pi-title { + font-size: 0.95rem; + font-weight: 500; + color: var(--color-on-surface); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + .mm-mobile-playlist-view .mm-playlist-item .mm-pi-artist { + font-size: 0.8rem; + color: var(--color-on-surface-variant); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } +} diff --git a/internal/embedded/static/css/components/media-manager.css b/internal/embedded/static/css/components/media-manager.css new file mode 100644 index 00000000..d8d5f8c5 --- /dev/null +++ b/internal/embedded/static/css/components/media-manager.css @@ -0,0 +1,711 @@ +.media-manager-container { + position: absolute; + width: 0; + height: 0; +} + +.mm-hidden-svg { + position: absolute; + width: 0; + height: 0; + overflow: hidden; +} + +.mm-desktop-ui { + display: flex; + flex-direction: column; + position: fixed; + bottom: 3.5rem; /* above footer/bottom spacing */ + + /* --- 尺寸解耦é…�置区域 --- */ + --mm-expanded-left: 24px; /* 展开时,è·�离å±�幕左侧边缘的间è·� */ + --mm-collapsed-visible: 48px; /* 缩回éš�è—�时,肉眼看到的把手总宽度 (包å�«ä¸Šé�¢é‚£ä¸ªé—´è·�) */ + + left: var(--mm-expanded-left); + z-index: 890; /* lower than side-nav if needed */ + pointer-events: none; + background-color: var(--m3-surface-container-highest, var(--color-surface-container-high)); + border-radius: 1.5rem; + padding: 0; + width: 220px; /* Increased width */ + height: 430px; /* Increased to fit playlist button without squishing */ + box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15); + /* Overflow remains visible to allow the 3D flip without clipping. */ + + + /* Initial hidden state completely off-screen */ + opacity: 0; + transform: translateX(-150%); + transition: transform 0.4s cubic-bezier(0.2, 0, 0, 1), opacity 0.3s ease; +} + +/* 激活å�Žå�°æ’­æ”¾æ—¶ï¼Œè¿›å…¥â€œæ”¶ç¼©â€�状æ€� (露出 48px çš„ Tab) */ +body[data-media-manager-active="true"] .mm-desktop-ui { + pointer-events: auto; + opacity: 1; + /* 自动计算推移è·�离:刚好让å�¡ç‰‡çš„å�³è¾¹ç¼˜ç•™åœ¨ visible 设定好的åƒ�素处 */ + transform: translateX(calc(var(--mm-collapsed-visible) - var(--mm-expanded-left) - 100%)); +} + +/* Hover 时完全展开 */ +body[data-media-manager-active="true"] .mm-desktop-ui:hover, +body[data-media-manager-active="true"] .mm-desktop-ui:focus-within { + transform: translateX(0); +} + +/* --- Collapsed Tab View --- */ +.mm-collapsed-tab { + position: absolute; + top: 0; + right: 0; + /* 内部元素的盒å­�宽度等于å±�幕上露出的全部白å�—,这样ç»�对居中就ä¸�会å�—到原点平移的影å“� */ + width: var(--mm-collapsed-visible); + height: 100%; + display: flex; + flex-direction: column; + align-items: center; + padding: 1.2rem 0; + opacity: 1; + transition: opacity 0.2s ease; + pointer-events: none; /* let hover pass to parent */ + box-sizing: border-box; +} + +body[data-media-manager-active="true"] .mm-desktop-ui:hover .mm-collapsed-tab, +body[data-media-manager-active="true"] .mm-desktop-ui:focus-within .mm-collapsed-tab { + opacity: 0; +} + +.mm-small-cover { + width: 22px; + height: 22px; + border-radius: 50%; + object-fit: cover; + margin-bottom: 1rem; +} + +.mm-vertical-title { + writing-mode: vertical-lr; + font-family: var(--font-serif); + font-size: 0.85rem; + font-weight: 600; + color: var(--color-on-surface); + white-space: nowrap; + /* overflow: hidden; */ + text-overflow: ellipsis; + max-height: 280px; + letter-spacing: 0.05em; +} + +/* --- Expanded Full View --- */ +.mm-expanded-view { + display: flex; + flex-direction: column; + align-items: center; + width: 100%; + height: 100%; + padding: 1.5rem 1rem; + opacity: 0; + transition: opacity 0.3s ease; + pointer-events: none; + box-sizing: border-box; + position: relative; +} + +body[data-media-manager-active="true"] .mm-desktop-ui:hover .mm-expanded-view, +body[data-media-manager-active="true"] .mm-desktop-ui:focus-within .mm-expanded-view { + opacity: 1; + pointer-events: auto; +} + +/* 艺术组å�ˆåŒºåŸŸ (画布 + å°�é�¢) */ +.mm-art-group { + position: relative; + width: 140px; + height: 140px; + margin-top: 6px; + margin-bottom: 1.2rem; + display: flex; + justify-content: center; + align-items: center; +} + +/* 动æ€�波浪画æ�¿ */ +.mm-visualizer-canvas { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 128.57% !important; /* 180px / 140px ≈ 128.57% */ + height: 128.57% !important; + pointer-events: none; + z-index: 1; +} + +.mm-cover-wrapper { + position: relative; + width: 100%; + height: 100%; + margin: 0; + z-index: 2; + /* Cover Spin Animation on Wrapper */ + animation: mm-spin-cover 23.5s linear infinite; + animation-play-state: paused; +} + +.mm-cover-clipper { + position: absolute; + top: 0; left: 0; + width: 100%; height: 100%; + contain: paint; /* isolate paint layer */ + /* transform: translateZ(0); Removed to prevent 3D bleed-through when flipped */ + -webkit-clip-path: url(#mm-cookie-clip); + clip-path: url(#mm-cookie-clip); +} + +.mm-image-container { + position: absolute; + top: 0; left: 0; + width: 100%; height: 100%; +} + +.is-playing .mm-cover-wrapper, +.mm-expanded-view.is-playing .mm-cover-wrapper { + animation-play-state: running; +} + +@keyframes mm-spin-cover { + from { transform: rotate(360deg); } + to { transform: rotate(0deg); } +} + +.mm-cover-image { + position: absolute; + top: 50%; + left: 50%; + width: 142%; /* sqrt(2)*100 to cover corners during rotation */ + height: 142%; + max-width: none; + max-height: none; + object-fit: cover; + /* Counter-spin so image stays upright */ + animation: mm-counter-spin 23.5s linear infinite; + animation-play-state: paused; + transform: translate(-50%, -50%) rotate(0deg); +} + +.is-playing .mm-cover-image, +.mm-expanded-view.is-playing .mm-cover-image { + animation-play-state: running; +} + +@keyframes mm-counter-spin { + from { transform: translate(-50%, -50%) rotate(-360deg); } + to { transform: translate(-50%, -50%) rotate(0deg); } +} + +.mm-info-wrapper { + text-align: center; + margin-bottom: 1.2rem; + width: 100%; + padding: 0 10px; + box-sizing: border-box; +} + +.mm-title { + font-family: var(--font-serif); + font-size: 1.1rem; + font-weight: 700; + color: var(--color-primary, var(--color-on-surface)); + white-space: nowrap; + /* overflow: hidden; */ + text-overflow: ellipsis; + margin-bottom: 0.2rem; +} + +.mm-artist { + font-size: 0.85rem; + color: var(--color-on-surface-variant); + white-space: nowrap; + /* overflow: hidden; */ + text-overflow: ellipsis; +} + +/* 控制按钮组 */ +.mm-controls-wrapper { + display: flex; + align-items: center; + justify-content: center; + gap: 16px; + margin-bottom: 0.8rem; + width: 100%; +} + +.mm-controls-wrapper button { + background: none; + border: none; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + padding: 0; + color: var(--color-on-surface); + transition: border-radius 0.4s cubic-bezier(0.2, 0, 0, 1), transform 0.2s cubic-bezier(0.2, 0, 0, 1), background-color 0.2s ease, color 0.2s ease; +} + +.mm-controls-wrapper button:active { + transform: scale(0.9); +} + +.mm-controls-wrapper .mm-btn-prev, +.mm-controls-wrapper .mm-btn-next { + width: 48px; + height: 48px; + border-radius: 24px; + background-color: transparent; + color: var(--color-on-surface); + transition: background-color 0.2s ease, transform 0.2s cubic-bezier(0.42, 1.67, 0.21, 0.9), width 0.15s cubic-bezier(0.42, 1.67, 0.21, 0.9); +} + +.mm-controls-wrapper button { + -webkit-tap-highlight-color: transparent; +} + +.mm-controls-wrapper .mm-btn-play-pause { + width: 72px; + height: 48px; + border-radius: 24px; /* Pill by default (Paused, shows Play) */ + background-color: var(--color-accent); + color: var(--color-page); + border: none; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + /* Use bouncy easing for recovery (width returning to normal) */ + transition: width 0.3s cubic-bezier(0.42, 1.67, 0.21, 0.9), border-radius 0.3s cubic-bezier(0.42, 1.67, 0.21, 0.9); +} + +.is-playing .mm-controls-wrapper .mm-btn-play-pause { + /* Checked radius when playing (shows Pause) */ + border-radius: 12px; +} + +@media (hover: hover) and (pointer: fine) { + .mm-controls-wrapper .mm-btn-prev:hover, + .mm-controls-wrapper .mm-btn-next:hover { + background-color: var(--color-surface-variant, rgba(0, 0, 0, 0.05)); + } + + .mm-controls-wrapper .mm-btn-play-pause:hover { + filter: brightness(1.1); + } + + /* Only use pure CSS :active on desktop, because iOS Safari has sticky :active bugs */ + .mm-controls-wrapper .mm-btn-prev:active, + .mm-controls-wrapper .mm-btn-next:active { + width: 40px; + } + + .mm-controls-wrapper .mm-btn-play-pause:active { + border-radius: 8px !important; + width: 96px; + transition: width 0.15s cubic-bezier(0.42, 1.67, 0.21, 0.9), border-radius 0.15s cubic-bezier(0.42, 1.67, 0.21, 0.9); + } +} + +/* Global JS-triggered fallback for all devices (especially touch devices) */ +.mm-controls-wrapper .mm-btn-prev.is-pressed, +.mm-controls-wrapper .mm-btn-next.is-pressed { + width: 40px; /* Squish effect */ +} + +.mm-controls-wrapper .mm-btn-play-pause.is-pressed { + border-radius: 8px !important; + /* Expand width when clicked */ + width: 96px; + /* Fast bouncy deformation */ + transition: width 0.15s cubic-bezier(0.42, 1.67, 0.21, 0.9), border-radius 0.15s cubic-bezier(0.42, 1.67, 0.21, 0.9); +} + +/* Morphing SVG Icon */ +.mm-morph-icon { + width: 24px; + height: 24px; + color: currentColor; +} + +.mm-morph-path { + /* Play state (default) */ + d: path('M 8 5 L 13 8.18 L 13 15.82 L 8 19 Z M 13 8.18 L 19 12 L 19 12 L 13 15.82 Z'); + -webkit-transition: d 400ms cubic-bezier(0.2, 0, 0, 1); + transition: d 400ms cubic-bezier(0.2, 0, 0, 1); + fill: currentColor; + will-change: d; +} + +.is-playing .mm-morph-path { + /* Pause state */ + d: path('M 6 5 L 10 5 L 10 19 L 6 19 Z M 14 5 L 18 5 L 18 19 L 14 19 Z'); +} + +@media (max-width: 960px) { + .mm-desktop-ui { + display: none !important; + } +} + +/* ç¦�用å�Žå�°æ’­æ”¾ */ +html[data-bg-playback-disabled="true"] .media-manager-container { + display: none !important; +} + + +.mm-article-link { + display: flex; + align-items: center; + justify-content: center; + gap: 6px; + color: var(--color-on-surface-variant, var(--color-text-muted)); + text-decoration: none; + font-size: 0.85rem; + font-family: var(--font-ui); + transition: color 0.3s ease; + margin-top: 4px; + opacity: 0; + transform: translateY(5px); + pointer-events: none; +} + +.mm-article-link.is-visible { + opacity: 1; + transform: translateY(0); + pointer-events: auto; + transition: color 0.3s ease, opacity 0.4s ease, transform 0.4s cubic-bezier(0.2, 0, 0, 1); +} + +.mm-article-link:hover { + color: var(--color-accent); +} + +.mm-article-link .material-symbol { + font-size: 1.1rem; +} + +.mm-article-link-text { + max-width: 140px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +/* -------------------------------------- */ + + + +/* --- 3D Flip Structure --- */ +.mm-card-inner { + position: absolute; + top: 0; left: 0; + width: 100%; height: 100%; + transition: transform 0.6s cubic-bezier(0.4, 0, 0.2, 1); + transform-style: preserve-3d; + border-radius: inherit; +} + +body[data-media-manager-active="true"] .mm-desktop-ui.is-flipped .mm-card-inner { + transform: rotateY(-180deg); +} + +.mm-card-front, .mm-card-back { + position: absolute; + top: 0; left: 0; + width: 100%; height: 100%; + backface-visibility: hidden; + -webkit-backface-visibility: hidden; + border-radius: inherit; /* Apply border-radius here to contain children without container overflow:hidden */ + /* overflow: hidden; */ +} + +.mm-card-front { + transform: rotateY(0deg); /* Explicitly defined for Safari 3D rendering */ +} + +.mm-card-back { + transform: rotateY(180deg); +} + +/* --- Playlist Toggle Button (Front) --- */ +.mm-btn-open-playlist { + margin-top: 0.5rem; + background: none; + border: none; + cursor: pointer; + display: flex; + align-items: center; + gap: 6px; + color: var(--color-on-surface-variant); + font-family: var(--font-ui); + font-size: 0.85rem; + padding: 8px 16px; + border-radius: 20px; + transition: background-color 0.2s, color 0.2s; + pointer-events: auto; /* Since parent might be pointer-events: none */ +} + +.mm-btn-open-playlist:hover { + background-color: var(--color-surface-variant); + color: var(--color-on-surface); +} + +/* --- Playlist View (Back) --- */ +.mm-playlist-view { + display: flex; + flex-direction: column; + background: var(--color-surface-elevated, var(--color-page)); + opacity: 0; + transition: opacity 0.3s ease; + pointer-events: none; +} + +body[data-media-manager-active="true"] .mm-desktop-ui:hover .mm-playlist-view, +body[data-media-manager-active="true"] .mm-desktop-ui:focus-within .mm-playlist-view { + opacity: 1; + pointer-events: auto; +} + +.mm-playlist-header { + display: flex; + align-items: center; + padding: 1.2rem 1rem; + border-bottom: 1px solid var(--color-border); +} + +.mm-btn-close-playlist { + background: none; + border: none; + cursor: pointer; + color: var(--color-on-surface); + display: flex; + align-items: center; + justify-content: center; + padding: 6px; + margin-right: 12px; + border-radius: 50%; + transition: background-color 0.2s; +} + +.mm-btn-close-playlist:hover { + background-color: var(--color-surface-variant); +} + +.mm-playlist-header-title { + font-family: var(--font-serif); + font-weight: 600; + color: var(--color-on-surface); +} + +.mm-playlist-list { + flex: 1; + overflow-y: auto; + list-style: none; + padding: 0; + margin: 0; + /* Custom scrollbar */ +} + +.mm-playlist-list::-webkit-scrollbar { + width: 6px; +} +.mm-playlist-list::-webkit-scrollbar-thumb { + background: var(--color-border); + border-radius: 3px; +} + +.mm-playlist-item { + display: flex; + align-items: center; + padding: 10px 16px; + cursor: pointer; + transition: background-color 0.2s; + margin: 4px 8px; + border-radius: 8px; + position: relative; + /* overflow: hidden; */ /* For translating text without horizontal overflow */ +} + +.mm-playlist-item:hover { + background-color: var(--color-surface-variant); +} + +.mm-playlist-item.is-active { + background-color: var(--color-accent-soft, var(--color-surface-variant)); +} + +.mm-playlist-item-info { + flex: 1; + /* overflow: hidden; */ + display: flex; + flex-direction: column; + transform: translateX(0); + transition: transform 0.35s cubic-bezier(0.42, 1.67, 0.21, 0.9); +} + +.mm-playlist-item.is-active .mm-playlist-item-info { + transform: translateX(28px); +} + +.mm-playlist-item-title { + font-family: var(--font-serif); + font-size: 0.9rem; + font-weight: 600; + color: var(--color-on-surface); + white-space: nowrap; + /* overflow: hidden; */ + text-overflow: ellipsis; +} + +.mm-playlist-item.is-active .mm-playlist-item-title { + color: var(--color-accent); +} + +.mm-playlist-item-artist { + font-size: 0.75rem; + color: var(--color-on-surface-variant); + white-space: nowrap; + /* overflow: hidden; */ + text-overflow: ellipsis; + margin-top: 2px; +} + +/* Equalizer Animation for Active Track */ +.mm-eq-indicator { + position: absolute; + left: 14px; + display: flex; + align-items: center; /* Center vertically */ + gap: 2px; + height: 16px; + opacity: 0; + transform: scale(0); + transform-origin: left center; + transition: transform 0.35s cubic-bezier(0.38, 1.21, 0.22, 1), + opacity 0.2s ease-out; +} + +.mm-playlist-item.is-active .mm-eq-indicator { + opacity: 1; + transform: scale(1); +} + +.mm-eq-bar { + display: block; + width: 4px; + border-radius: 2px; + background-color: var(--color-accent); + animation-timing-function: ease-in-out; + animation-iteration-count: infinite; + animation-direction: alternate; +} + +.mm-eq-bar:nth-child(1) { animation-name: mm-eq-1; animation-duration: 0.45s; } +.mm-eq-bar:nth-child(2) { animation-name: mm-eq-2; animation-duration: 0.55s; animation-delay: 0.1s; } +.mm-eq-bar:nth-child(3) { animation-name: mm-eq-3; animation-duration: 0.5s; animation-delay: 0.2s; } +.mm-eq-bar:nth-child(4) { animation-name: mm-eq-4; animation-duration: 0.45s; animation-delay: 0.3s; } + +/* Pause the equalizer when audio is paused */ +.media-manager-container:not(.is-playing) .mm-eq-bar { + animation-play-state: paused; +} + +@keyframes mm-eq-1 { 0% { height: 4px; } 100% { height: 12px; } } +@keyframes mm-eq-2 { 0% { height: 6px; } 100% { height: 16px; } } +@keyframes mm-eq-3 { 0% { height: 8px; } 100% { height: 14px; } } +@keyframes mm-eq-4 { 0% { height: 5px; } 100% { height: 10px; } } + +/* ========================================================================== + Mobile UI (Fullscreen & FAB) + ========================================================================== */ + +/* Hide mobile elements on desktop */ +@media (min-width: 961px) { + .mobile-media-fab, + .mm-btn-close-mobile { + display: none !important; + } + + .mm-mobile-ui { + display: none !important; + } +} + +@media (max-width: 960px) { + /* Mobile FAB — mirrors .mobile-toc-fab dimensions */ + .mobile-media-fab { + display: flex; + align-items: center; + justify-content: center; + position: fixed; + right: 0; + /* Sit directly above the TOC fab (TOC bottom ≈ 120px, TOC height = 48px, gap = 8px) */ + bottom: calc(env(safe-area-inset-bottom) + 176px); + height: 48px; + width: auto; + padding: 0 12px 0 16px; + border-radius: 24px 0 0 24px; + background: var(--color-page); + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08); + border: 1px solid var(--color-line); + border-right: none; + z-index: 90; + cursor: pointer; + color: var(--color-text); + transition: transform 0.3s cubic-bezier(0.2, 0, 0, 1), opacity 0.3s; + } + + .mobile-media-fab.is-hidden { + transform: translateX(100%); + opacity: 0; + pointer-events: none; + } + + .mobile-media-fab-cover { + width: 24px; + height: 24px; + border-radius: 50%; + object-fit: cover; + /* No spin animation */ + } + + .mm-btn-close-mobile { + position: absolute; + top: 24px; + right: 20px; + width: 40px; + height: 40px; + display: flex; + align-items: center; + justify-content: center; + background: transparent; + border: none; + border-radius: 50%; + color: var(--color-muted); + z-index: 10; + cursor: pointer; + transition: color 160ms ease; + } + .mm-btn-close-mobile:hover, + .mm-btn-close-mobile:focus-visible { + color: var(--color-hover-text); + } + .mm-btn-close-mobile .material-symbol { + font-size: 1.5rem; + } +} + +/* Hide desktop UI on tablet and smaller screens */ +@media (max-width: 960px) { + .mm-desktop-ui { + display: none !important; + } +} diff --git a/internal/embedded/static/css/components/navigation-loading.css b/internal/embedded/static/css/components/navigation-loading.css new file mode 100644 index 00000000..09d77979 --- /dev/null +++ b/internal/embedded/static/css/components/navigation-loading.css @@ -0,0 +1,102 @@ +.navigation-status { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip-path: inset(50%); + white-space: nowrap; +} +.navigation-progress { display: none; } + +@media (min-width: 961px) and (hover: hover) and (pointer: fine) { + html[data-navigation-loading="true"]:not(.has-custom-cursor), + html[data-navigation-loading="true"]:not(.has-custom-cursor) * { + cursor: progress !important; + } +} + +@media (max-width: 960px) { + [data-navigation-logo] { + display: inline-block; + white-space: nowrap; + } + html[data-navigation-loading="true"] body .persistent-logo-container { + transform: translateY(0); + pointer-events: auto; + transition-delay: 0s; + } + html[data-navigation-loading="true"] body[data-reader-mode="immersive"] .persistent-logo-container { + display: block !important; + position: fixed; + width: 100%; + } + .navigation-progress { + display: block; + position: absolute; + z-index: 3; + inset: auto 0 0; + height: 2px; + overflow: hidden; + pointer-events: none; + background: var(--color-accent-soft); + opacity: 0; + transition: opacity 120ms ease; + } + html[data-navigation-loading="true"] .navigation-progress { opacity: 1; } + .navigation-progress span { + position: absolute; + inset: 0 100% 0 0; + border-radius: 999px; + background: var(--color-accent); + transform-origin: left; + } + html[data-navigation-loading="true"] .navigation-progress span { + animation: navigation-progress-leading-head 1750ms linear infinite, + navigation-progress-leading-tail 1750ms linear infinite; + } + html[data-navigation-loading="true"] .navigation-progress span + span { + animation-name: navigation-progress-trailing-head, navigation-progress-trailing-tail; + } +} +/* Material 3 disjoint motion: each head starts slowly, accelerates across the + track, then its delayed tail catches up. The second stroke starts before the + first finishes and travels faster, giving the pair an asymmetric rhythm. + Timings within the 1750ms cycle (head / tail): + leading: 0–1000ms / 250–1250ms; trailing: 650–1500ms / 900–1750ms. + Reference: AndroidX Compose Material 3 ProgressIndicator.kt and MotionTokens.kt + https://github.com/androidx/androidx/tree/androidx-main/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3 + Keep both strokes collapsed at the loop boundary to avoid a visible reset. */ +@keyframes navigation-progress-leading-head { + 0% { right: 100%; animation-timing-function: cubic-bezier(0.3, 0, 0.8, 0.15); } + 57.142857%, 100% { right: 0; } +} +@keyframes navigation-progress-leading-tail { + 0% { left: 0; } + 14.285714% { left: 0; animation-timing-function: cubic-bezier(0.3, 0, 0.8, 0.15); } + 71.428571%, 100% { left: 100%; } +} +@keyframes navigation-progress-trailing-head { + 0% { right: 100%; } + 37.142857% { right: 100%; animation-timing-function: cubic-bezier(0.3, 0, 0.8, 0.15); } + 85.714286%, 100% { right: 0; } +} +@keyframes navigation-progress-trailing-tail { + 0% { left: 0; } + 51.428571% { left: 0; animation-timing-function: cubic-bezier(0.3, 0, 0.8, 0.15); } + 100% { left: 100%; } +} +@media (prefers-reduced-motion: reduce) { + html[data-navigation-loading="true"] .navigation-progress span { + animation: none !important; + inset: 0; + transform: scaleX(0.35); + } + .navigation-progress { transition: none; } +} +html[data-reduced-motion="true"][data-navigation-loading="true"] .navigation-progress span { + animation: none !important; + inset: 0; + transform: scaleX(0.35); +} diff --git a/internal/embedded/static/css/components/privacy-overlay.css b/internal/embedded/static/css/components/privacy-overlay.css new file mode 100644 index 00000000..e1410e9b --- /dev/null +++ b/internal/embedded/static/css/components/privacy-overlay.css @@ -0,0 +1,92 @@ +/* Share the existing paper texture, torn edge and animated checkbox. */ +.privacy-overlay { + margin: 0; + padding: 16px 0; + border: 0; + max-width: none; + max-height: none; + height: 100dvh; + background: transparent; + color-scheme: light; +} +.privacy-overlay:not([open]) { display: none; } +.privacy-overlay::backdrop { background: transparent; } +.privacy-overlay .privacy-paper { + /* Width comes from .settings-paper, exactly as in Settings and Share. */ + min-height: min(480px, calc(100dvh - 32px)); +} +.privacy-content { + height: min(360px, calc(100dvh - 152px)); + overflow-y: auto; + scrollbar-width: thin; + font: 1.05rem/1.65 var(--font-body); +} +.privacy-page { min-height: 100%; display: flex; flex-direction: column; } +.privacy-page[hidden] { display: none; } +.privacy-overlay .settings-title { margin: 0 28px 32px; } +.privacy-overlay .settings-title:focus { outline: none; } +.privacy-content :is(p, button, label, .settings-checkbox-text) { font: inherit; color: #3e3832; } +.privacy-content p { margin: 0 0 20px; } +.privacy-text-btn { + width: fit-content; + border: 0; + padding: 6px 0; + background: transparent; + text-decoration: underline; + text-underline-offset: 4px; + cursor: pointer; +} +.privacy-choices { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin-top: auto; padding-top: 32px; } +.privacy-option { min-height: 44px; align-items: baseline; } +.privacy-option .settings-checkbox-svg { align-self: flex-start; margin-top: 6px; } +.privacy-save { align-self: flex-end; } +.privacy-back { margin-top: auto; } +.privacy-content .privacy-status { margin: 12px 0 0; } +.privacy-status:empty { display: none; } +.privacy-overlay button:disabled { opacity: 0.6; cursor: wait; } +.privacy-overlay button:focus-visible, +.privacy-option:has(input:focus-visible) { outline: 2px solid #3e3832; outline-offset: 3px; } +.settings-privacy-btn { + padding: 0; + border: 0; + background: transparent; + color: #3e3832; + font: inherit; + text-decoration: underline; + text-underline-offset: 4px; + cursor: pointer; +} +@media (max-width: 480px) { + .privacy-overlay .privacy-paper { padding: 50px 22px 70px; } + .privacy-content { height: auto; max-height: calc(100dvh - 152px); } + .privacy-page { min-height: min(360px, calc(100dvh - 152px)); } + .privacy-choices { gap: 12px; } +} +@media (prefers-reduced-motion: reduce) { + .privacy-overlay .settings-checkbox-svg line { transition: none; } + .privacy-overlay .settings-checkbox-label .settings-checkbox-input:checked + .settings-checkbox-svg polyline { animation: none; stroke-dashoffset: 0; } +} +html[data-reduced-motion="true"] .privacy-overlay, +html[data-reduced-motion="true"] .privacy-overlay :is(.settings-backdrop, .settings-paper, .settings-checkbox-svg line) { transition: none; } +html[data-reduced-motion="true"] .privacy-overlay .settings-checkbox-label .settings-checkbox-input:checked + .settings-checkbox-svg polyline { animation: none; stroke-dashoffset: 0; } + +/* The settings shell and backdrop stay mounted; only their content changes. */ +[data-settings-page][hidden], .privacy-settings-back[hidden] { display: none; } +.has-privacy-page > .privacy-content { + position: absolute; + inset: 50px 50px 70px; + height: auto; + max-height: none; +} +.has-privacy-page .privacy-page { min-height: 100%; } +.has-privacy-page .settings-title { margin: 0 28px 32px; } +.has-privacy-page .settings-title:focus { outline: none; } +.has-privacy-page .privacy-content button:focus-visible { outline: 2px solid #3e3832; outline-offset: 3px; } +.privacy-footer { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 12px; } +.privacy-footer .privacy-save { margin-left: auto; } +@media (prefers-reduced-motion: reduce) { + .has-privacy-page .settings-checkbox-svg line { transition: none; } + .has-privacy-page .settings-checkbox-label .settings-checkbox-input:checked + .settings-checkbox-svg polyline { animation: none; stroke-dashoffset: 0; } +} +html[data-reduced-motion="true"] .has-privacy-page .settings-checkbox-svg line { transition: none; } +html[data-reduced-motion="true"] .has-privacy-page .settings-checkbox-label .settings-checkbox-input:checked + .settings-checkbox-svg polyline { animation: none; stroke-dashoffset: 0; } diff --git a/internal/embedded/static/css/components/settings-overlay.css b/internal/embedded/static/css/components/settings-overlay.css new file mode 100644 index 00000000..4bfce9da --- /dev/null +++ b/internal/embedded/static/css/components/settings-overlay.css @@ -0,0 +1,238 @@ +/* Settings Overlay - Paper Style */ +.settings-overlay { + position: fixed; + top: 0; + left: 0; + width: 100vw; + height: 100vh; + z-index: 9999; + display: flex; + justify-content: center; + align-items: center; + visibility: hidden; + opacity: 0; + transition: visibility 0.3s, opacity 0.3s; + pointer-events: auto; +} + +/* Force default cursor inside the overlay (disable custom cursor) */ +html.has-custom-cursor .settings-overlay, +html.has-custom-cursor .settings-overlay * { + cursor: auto !important; +} + +.settings-overlay.is-open { + visibility: visible; + opacity: 1; +} + +.settings-backdrop { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0); + backdrop-filter: blur(0px); + -webkit-backdrop-filter: blur(0px); + transition: backdrop-filter 0.3s, -webkit-backdrop-filter 0.3s, background-color 0.3s; +} + +.settings-overlay.is-open .settings-backdrop { + background-color: rgba(0, 0, 0, 0.3); + backdrop-filter: blur(2px); + -webkit-backdrop-filter: blur(2px); +} + + + +/* Paper Card (tall narrow strip) */ +.settings-paper { + position: relative; + width: min(860px, 94vw); + min-height: 480px; + padding: 50px 50px 70px 50px; + background-color: #f8f5e1; /* darker outer rim */ + background-size: 1000px; + background-position: center right; + border-radius: 2px 2px 0 0; + filter: drop-shadow(0 10px 15px rgba(0, 0, 0, 0.15)) brightness(0.95) sepia(30%) saturate(80%); + clip-path: polygon( + 0% 0%, 0% 93%, 5% 98%, 6% 99%, 8% 95%, 12% 94%, 15% 97%, 17% 93%, 20% 98%, + 22% 97%, 25% 99%, 31% 94%, 35% 93%, 39% 96%, 43% 93%, 45% 94%, 47% 95%, + 50% 92%, 52% 96%, 54% 93%, 58% 92%, 60% 95%, 62% 93%, 65% 96%, 69% 93%, + 72% 93%, 75% 94%, 79% 97%, 81% 94%, 85% 93%, 88% 92%, 90% 95%, 93% 93%, + 95% 92%, 97% 95%, 100% 97%, 100% 0% + ); + transform: scale(0.96); + transition: transform 0.3s cubic-bezier(0.16, 1, 0.3, 1); + font-family: var(--font-body); + color: #3e3832; +} + +/* Slight paper edges effect referenced from paper.html */ +.settings-paper::before { + content: ''; + position: absolute; + top: 4px; + left: 4px; + right: 4px; + bottom: 4px; + background-color: #fcfbf5; /* lighter inner paper */ + background-size: 1000px; + background-position: right -4px center; /* perfectly align texture with parent */ + pointer-events: none; + border-radius: 2px; + z-index: -1; +} + + + +.settings-overlay.is-open .settings-paper { + background-image: url('/images/settings-paper.webp'); + transform: scale(1); +} + +.settings-overlay.is-open .settings-paper::before { + background-image: url('/images/settings-paper.webp'); +} + +@media (prefers-reduced-motion: reduce) { + .settings-overlay, .settings-backdrop, .settings-paper { + transition: none !important; + } +} + +/* Settings Content */ +.settings-close-btn { + position: absolute; + top: 25px; + right: 25px; + background: transparent; + border: none; + color: rgba(62, 56, 50, 0.5); /* subtle ink */ + padding: 8px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 50%; +} + +/* On non-touch devices, allow a custom hover cursor to work smoothly here */ +html.has-custom-cursor .settings-close-btn:hover { + cursor: pointer !important; +} + +.settings-title { + margin: 0 0 40px 0; + font-size: 1.4rem; + font-weight: normal; + text-align: center; + color: #2c2723; + letter-spacing: 0.05em; +} + +.settings-content { + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 35px; +} + +/* SVG Checkbox styles */ +.settings-checkbox-label { + display: flex; + align-items: flex-start; + user-select: none; + font-size: 1.05rem; + line-height: 1.4; + position: relative; +} + +.settings-checkbox-input { + appearance: none; + position: absolute; + inset: 0; + margin: 0; + opacity: 0; +} + +.settings-checkbox-svg { + width: 1.25rem; + height: 1.25rem; + margin-right: 12px; + flex-shrink: 0; + fill: transparent; + margin-top: 2px; +} + +.settings-checkbox-svg polyline { + stroke: #2a2522; /* dark ink */ + stroke-width: 2px; + stroke-dasharray: 24; + stroke-dashoffset: 24; + stroke-linecap: round; + stroke-linejoin: round; +} + +@keyframes dash { + to { + stroke-dashoffset: 0; + } +} + +.settings-checkbox-svg line { + stroke: rgba(62, 56, 50, 0.75); /* low sat ink border, darker now */ + stroke-width: 2px; + transition: transform 0.2s ease, scale 0.2s ease, translate 0.2s ease; +} + +/* Ensure gap states come BEFORE the checked override */ +.settings-checkbox-label:nth-of-type(1) .settings-checkbox-svg line { + transform-origin: center; +} +.settings-checkbox-label:nth-of-type(1) .settings-checkbox-svg line:nth-of-type(odd) { + scale: 0.7 1; +} +.settings-checkbox-label:nth-of-type(1) .settings-checkbox-svg line:nth-of-type(even) { + scale: 1 0.7; +} + +.settings-checkbox-label:nth-of-type(2) .settings-checkbox-svg line:nth-of-type(1) { + translate: -60% 0; +} +.settings-checkbox-label:nth-of-type(2) .settings-checkbox-svg line:nth-of-type(3) { + translate: 40% 0; +} + +.settings-checkbox-label:nth-of-type(3) .settings-checkbox-svg line:nth-of-type(1) { + translate: -10px 0; +} +.settings-checkbox-label:nth-of-type(3) .settings-checkbox-svg line:nth-of-type(2) { + translate: 0 10px; +} + +.settings-checkbox-label:nth-of-type(4) .settings-checkbox-svg line:nth-of-type(3) { + translate: -10px 0; +} + +/* The checked state must have higher specificity or come AFTER to override the scale/translate above */ +.settings-checkbox-label .settings-checkbox-input:checked + .settings-checkbox-svg polyline { + animation: dash 0.4s ease forwards; +} + +.settings-checkbox-label .settings-checkbox-input:checked + .settings-checkbox-svg line { + scale: 1; + translate: 0; +} + +.settings-checkbox-text { + color: #3e3832; +} + +@media (max-width: 960px) { + .setting-item-cursor, + .setting-item-clock-cursor { + display: none; + } +} diff --git a/internal/embedded/static/css/components/share-overlay.css b/internal/embedded/static/css/components/share-overlay.css new file mode 100644 index 00000000..4ae949ad --- /dev/null +++ b/internal/embedded/static/css/components/share-overlay.css @@ -0,0 +1,104 @@ +/* + Share Overlay + Reuses .settings-overlay structure for consistent modal styling. +*/ + +.share-overlay { + /* Inherits display logic from .settings-overlay in settings-overlay.css */ +} + +/* Base styles are handled by .settings-overlay, .settings-paper etc. */ +.share-paper { + font-family: var(--font-body); +} + +.share-textarea { + width: 100%; + height: 120px; + min-height: 80px; + max-height: 200px; + background: transparent; + border: none; + padding: 0; + margin: 0; + font-family: inherit; + font-size: 1.2rem; + line-height: 1.6; + color: #2c2723; + resize: none; + overflow-y: auto; + scrollbar-width: thin; + scrollbar-color: transparent transparent; + transition: scrollbar-color 0.2s; +} + +.share-textarea:hover, +.share-textarea:focus { + scrollbar-color: rgba(62, 56, 50, 0.2) transparent; +} + +.share-textarea::-webkit-scrollbar { + width: 6px; + background-color: transparent; +} +.share-textarea::-webkit-scrollbar-thumb { + background-color: transparent; + border-radius: 4px; +} +.share-textarea:hover::-webkit-scrollbar-thumb, +.share-textarea:focus::-webkit-scrollbar-thumb { + background-color: rgba(62, 56, 50, 0.2); +} + +.share-textarea:focus-visible { + outline: none; +} + +.share-actions { + display: flex; + gap: 20px; + margin-top: 32px; + width: 100%; + justify-content: flex-start; +} + +.share-action-btn { + display: flex; + align-items: center; + justify-content: center; + gap: 8px; + background: transparent; + border: none; + padding: 8px 0; + color: #3e3832; + font-family: inherit; + font-size: 1.1rem; + cursor: pointer; + transition: color 0.2s, transform 0.1s; + opacity: 0.8; +} + +.share-action-btn:hover, +.share-action-btn:focus-visible { + opacity: 1; + color: #000; +} + +.share-action-btn:active { + transform: scale(0.96); +} + +.share-action-btn .material-symbol { + font-size: 1.35rem; +} + +.share-btn-text, +.share-copy-text { + font-family: inherit; +} + +@media (max-width: 600px) { + .share-actions { + gap: 16px; + } +} diff --git a/internal/embedded/static/css/components/text-roll.css b/internal/embedded/static/css/components/text-roll.css new file mode 100644 index 00000000..6e9cb40c --- /dev/null +++ b/internal/embedded/static/css/components/text-roll.css @@ -0,0 +1,24 @@ +.text-roll-active { white-space: nowrap; } +.text-roll-char { position: relative; } +.text-roll-old, +.text-roll-new { + position: relative; + animation: text-roll-out 400ms cubic-bezier(0.16, 1, 0.3, 1) both; + animation-delay: var(--roll-delay, 0ms); +} +.text-roll-overlap { position: absolute; left: 0; top: 0; } +.text-roll-new { animation-name: text-roll-in; } +@keyframes text-roll-out { + from { top: 0; opacity: 1; } + to { top: -1em; opacity: 0; } +} +@keyframes text-roll-in { + from { top: 1em; opacity: 0; } + to { top: 0; opacity: 1; } +} +@media (prefers-reduced-motion: reduce) { + .text-roll-old { display: none; } + .text-roll-new { animation: none; top: 0; opacity: 1; } +} +html[data-reduced-motion="true"] .text-roll-old { display: none; } +html[data-reduced-motion="true"] .text-roll-new { animation: none; top: 0; opacity: 1; } diff --git a/internal/embedded/static/css/decorative-fonts.css b/internal/embedded/static/css/decorative-fonts.css new file mode 100644 index 00000000..19b5302e --- /dev/null +++ b/internal/embedded/static/css/decorative-fonts.css @@ -0,0 +1,7 @@ +@font-face { + font-family: "Daybook Fraunces"; + src: url("/vendor/fonts/fraunces/fraunces-latin-400-italic.woff2") format("woff2"); + font-weight: 100 900; + font-style: italic; + font-display: swap; +} diff --git a/internal/embedded/static/css/fonts.css b/internal/embedded/static/css/fonts.css new file mode 100644 index 00000000..4ce6b845 --- /dev/null +++ b/internal/embedded/static/css/fonts.css @@ -0,0 +1,90 @@ +@font-face { + font-family: "Material Symbols Rounded"; + src: url("/vendor/fonts/material-symbols/material-symbols-rounded.woff2") format("woff2"); + font-weight: 400; + font-style: normal; + font-display: block; +} + +/* Match WenKai’s visible lowercase height (0.4902em vs 0.386em). + Scale the face, preserving CSS sizes and the Chinese fallback. */ +@font-face { + font-family: "Cormorant Garamond"; + size-adjust: 127%; + src: url("/vendor/fonts/cormorant-garamond/cormorant-garamond-latin-400-normal.woff2") format("woff2"); + font-weight: 400; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: "Cormorant Garamond"; + size-adjust: 127%; + src: url("/vendor/fonts/cormorant-garamond/cormorant-garamond-latin-500-normal.woff2") format("woff2"); + font-weight: 500; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: "Cormorant Garamond"; + size-adjust: 127%; + src: url("/vendor/fonts/cormorant-garamond/cormorant-garamond-latin-600-normal.woff2") format("woff2"); + font-weight: 600; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: "Cormorant Garamond"; + size-adjust: 127%; + src: url("/vendor/fonts/cormorant-garamond/cormorant-garamond-latin-700-normal.woff2") format("woff2"); + font-weight: 700; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: "Cormorant Garamond"; + size-adjust: 127%; + src: url("/vendor/fonts/cormorant-garamond/cormorant-garamond-latin-400-italic.woff2") format("woff2"); + font-weight: 400; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: "Cormorant Garamond"; + size-adjust: 127%; + src: url("/vendor/fonts/cormorant-garamond/cormorant-garamond-latin-500-italic.woff2") format("woff2"); + font-weight: 500; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: "Cormorant Garamond"; + size-adjust: 127%; + src: url("/vendor/fonts/cormorant-garamond/cormorant-garamond-latin-600-italic.woff2") format("woff2"); + font-weight: 600; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: "Cormorant Garamond"; + size-adjust: 127%; + src: url("/vendor/fonts/cormorant-garamond/cormorant-garamond-latin-700-italic.woff2") format("woff2"); + font-weight: 700; + font-style: italic; + font-display: swap; +} + +/* Article metadata retains its original optical size in either UI locale. */ +@font-face { + font-family: "Cormorant Garamond Meta"; + src: url("/vendor/fonts/cormorant-garamond/cormorant-garamond-latin-600-italic.woff2") format("woff2"); + font-weight: 600; + font-style: italic; + font-display: swap; +} diff --git a/internal/embedded/static/css/global.css b/internal/embedded/static/css/global.css new file mode 100644 index 00000000..fd745572 --- /dev/null +++ b/internal/embedded/static/css/global.css @@ -0,0 +1,28 @@ +@import url("tokens.css"); +@import url("fonts.css"); +@import url("base.css"); +@import url("layout.css"); +@import url("components.css"); +@import url("components/settings-overlay.css"); +@import url("components/share-overlay.css"); +@import url("components/text-roll.css"); +@import url("components/navigation-loading.css"); +@import url("components/privacy-overlay.css"); +@import url("components/embed-skeleton.css"); +@import url("components/custom-cursor.css"); +@import url("components/media-manager.css"); +@import url("components/media-manager-mobile.css"); +@import url("components/bilingual-toggle.css"); +@import url("pages/home.css"); +@import url("pages/notes.css"); +@import url("pages/memos.css"); +@import url("pages/note.css"); +@import url("pages/archive.css"); +@import url("pages/about.css"); +@import url("pages/graph.css"); +@import url("markdown.css"); +@import url("transitions.css"); + +html[data-theme="dark"] { + color-scheme: dark; +} diff --git a/internal/embedded/static/css/layout.css b/internal/embedded/static/css/layout.css new file mode 100644 index 00000000..ddeedc4d --- /dev/null +++ b/internal/embedded/static/css/layout.css @@ -0,0 +1,209 @@ +.site-logo { + align-items: baseline; + color: var(--color-text); + display: inline-flex; + font-family: var(--font-logo); + font-size: 1.32rem; + font-style: italic; + font-weight: 580; + font-variation-settings: "opsz" 72; + gap: 0.28em; + letter-spacing: 0; + text-decoration: none; + transition: color 180ms ease; + width: max-content; +} + +.persistent-logo { + animation: none !important; + left: var(--persistent-logo-left); + opacity: 1 !important; + position: fixed; + top: var(--persistent-logo-top); + transform: none !important; + z-index: 1000; +} + +.site-header { + align-items: center; + display: grid; + gap: 24px; + grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); + min-height: 72px; + padding: 0 40px; +} + +.site-header .site-nav { + grid-column: 2; +} +.site-main { + flex: 1 0 auto; + margin: 0 auto; + max-width: 960px; + padding: 56px 24px 72px; + width: 100%; +} + +.page-shell { + display: grid; + flex: 1 0 auto; + grid-template-columns: var(--side-rail-width) minmax(0, 1fr); + min-height: 100vh; + width: 100%; +} + +.side-rail { + align-self: start; + display: flex; + flex-direction: column; + left: var(--persistent-logo-left); + padding: 0; + position: fixed; + top: var(--side-rail-top); + width: calc(var(--side-rail-width) - var(--persistent-logo-left)); + z-index: 900; +} + +.side-avatar-link { + display: block; + margin-bottom: 34px; + width: max-content; +} + +.side-avatar-wrap { + aspect-ratio: 1; + border-radius: 50%; + height: 76px; + width: 76px; + background-color: var(--color-surface-variant); + box-shadow: var(--shadow-avatar-small); + overflow: hidden; + view-transition-name: site-avatar; +} + +.side-avatar { + border-radius: inherit; + display: block; + height: 100%; + object-fit: cover; + width: 100%; +} + +.side-nav { + align-items: flex-start; + display: flex; + flex-direction: column; + gap: 16px; +} + +.page-main { + grid-column: 1 / -1; + margin: 0; + max-width: none; + min-width: 0; + padding: clamp(56px, 7vw, 88px) clamp(32px, 6vw, 84px); +} + +@media (max-width: 960px) { + .page-shell { + display: block; + } + + .side-rail { + display: none; + } + + .page-main { + padding: 34px 20px 56px; + } + + :root { + --mobile-topbar-height: 64px; + } + + .persistent-logo-container { + position: sticky; + top: 0; + z-index: 2010; + transition: transform 300ms cubic-bezier(0.4, 0, 0.2, 1); + } + + .persistent-logo-main { + align-items: center; + background: var(--color-page); + border-bottom: 1px solid var(--color-line); + display: flex; + height: var(--mobile-topbar-height); + justify-content: space-between; + padding: 0 20px; + position: relative; + width: 100%; + z-index: 2; + } + + body.mobile-top-bar-hidden .persistent-logo-container { + pointer-events: none; + transform: translateY(-100%); + transition: transform 300ms cubic-bezier(0.4, 0, 0.2, 1) 300ms; + } + + .persistent-logo { + position: static !important; + } +} + +@media (max-width: 640px) { + .site-header { + align-items: flex-start; + display: flex; + flex-direction: column; + min-height: auto; + padding: 1.5rem 20px 20px; + } + + .site-nav { + justify-content: flex-start; + } + + .site-main { + padding: 36px 20px 56px; + } +} + +/* Shared desktop tools sit above every page; content and copyright share the viewport center. */ +.site-tools { + position: fixed; + top: 20px; + right: 32px; + width: 232px; + z-index: 950; +} +body[data-reader-mode="immersive"] .site-tools { display: none; } +.site-tools .notes-footer-actions { display: flex; align-items: center; justify-content: flex-end; gap: 8px; margin: 0; } +.site-tools .notes-tools { + margin: 0; + position: absolute; + top: 48px; + right: 0; + width: min(360px, calc(100vw - 64px)); +} +.site-tools .notes-search-panel { background: var(--color-page); } +.site-tools .notes-search-input { width: 100%; } +.site-tools .notes-tools.is-search-open .notes-search-panel { max-height: min(65vh, 560px); overflow-y: auto; } +.desktop-search-results { margin-top: 16px; } +.desktop-search-results .notes-item { padding-bottom: 16px; } +.desktop-search-results .notes-item-title { font-size: 1rem; } +.desktop-search-results .notes-item-summary { font-size: .85rem; margin-top: 6px; } +.desktop-search-results .notes-item-meta, .desktop-search-results .notes-item-indicators { display: none; } +.home-footer { padding: 32px 24px; text-align: center; color: var(--color-muted); font-family: var(--font-ui); font-size: .82rem; } +.home-footer p { margin: 0; } +@media (min-width: 961px) { + .about-body .page-main { grid-column: 2; } + .site-header { padding-right: 280px; padding-left: 280px; } +} +@media (max-width: 1199px) and (min-width: 961px) { + .site-header .site-nav { gap: 16px; } +} +@media (max-width: 960px) { + .site-tools { display: none; } +} diff --git a/internal/embedded/static/css/markdown.css b/internal/embedded/static/css/markdown.css new file mode 100644 index 00000000..ad3dc08c --- /dev/null +++ b/internal/embedded/static/css/markdown.css @@ -0,0 +1,1763 @@ +.markdown { + color: var(--color-text); + font-family: var(--font-body); + font-size: var(--note-text-size); + line-height: 1.75; + overflow-wrap: anywhere; + word-wrap: break-word; + overflow-x: clip; +} + +.markdown > * { + margin: 0 0 24px; +} + +.markdown > *:last-child { + margin-bottom: 0; +} + +.markdown p { + color: var(--color-text); + font-size: var(--note-text-size); + line-height: 1.75; + margin: 0 0 24px; + max-width: 100%; +} + +.markdown h1, +.markdown h2, +.markdown h3, +.markdown h4 { + color: var(--color-text); + font-family: var(--font-serif); + font-weight: 700; + overflow-wrap: anywhere; + word-wrap: break-word; +} + +.markdown h1 strong, +.markdown h2 strong, +.markdown h3 strong, +.markdown h4 strong { + font-weight: 900; +} + +.markdown h1 { + font-size: 28px; + line-height: 1.2; + margin: 50px 0 18px; +} + +.markdown h2 { + font-size: 23px; + line-height: 1.25; + margin: 46px 0 16px; + position: relative; +} + +.markdown h3 { + font-size: 19px; + font-weight: 600; + line-height: 1.35; + margin: 34px 0 14px; + position: relative; +} + +.markdown h4 { + font-size: 16.5px; + font-weight: 500; + line-height: 1.4; + margin: 28px 0 12px; +} + +.markdown a { + color: var(--color-text); + overflow-wrap: anywhere; + text-decoration: underline; + text-decoration-color: color-mix(in srgb, var(--color-text) 35%, transparent); + text-decoration-thickness: 1px; + text-underline-offset: 3px; + transition: + color 200ms ease, + text-decoration-color 200ms ease; + word-break: break-word; +} + +.markdown a:hover, +.markdown a:focus-visible { + color: var(--color-hover-text); + text-decoration-color: var(--color-hover-text); +} + +.markdown a:focus-visible { + border-radius: 3px; + outline: 2px solid var(--color-accent); + outline-offset: 3px; +} + +.markdown strong { + color: var(--color-text); + font-weight: 700; +} + +.markdown em { + font-style: italic; +} + +.markdown del { + color: var(--color-muted); + text-decoration-color: color-mix(in srgb, var(--color-muted) 65%, transparent); +} + +.markdown ul { + list-style: none; + margin: 0 0 28px; + max-width: 100%; + padding: 0; +} + +.markdown ul ul, +.markdown ul ol, +.markdown ol ul, +.markdown ol ol { + margin: 10px 0 4px; + max-width: none; + padding-left: 24px; +} + +.markdown ul li { + color: var(--color-text); + font-size: var(--note-text-size); + line-height: 1.7; + margin-bottom: 10px; + padding-left: 22px; + position: relative; +} + +.markdown ul li:not(:has(> input[type="checkbox"]))::before { + background: var(--color-accent); + border-radius: 50%; + content: ""; + height: 5px; + left: 4px; + position: absolute; + top: 0.78em; + width: 5px; +} + +.markdown ul ul li { + color: var(--color-muted); + font-size: 14.5px; + margin-bottom: 6px; +} + +.markdown ul ul li:not(:has(> input[type="checkbox"]))::before { + background: transparent; + border: 1px solid var(--color-accent); +} + +.markdown ol { + margin: 0 0 28px; + max-width: 100%; + padding-left: 22px; +} + +.markdown ol li { + color: var(--color-text); + font-size: var(--note-text-size); + line-height: 1.7; + margin-bottom: 10px; + padding-left: 6px; +} + +.markdown ol li::marker { + color: var(--color-accent); + font-family: var(--font-body); + font-size: 14px; +} + +.markdown li > p { + display: inline; + margin: 0; +} + +.markdown li > ul, +.markdown li > ol { + margin-top: 10px; +} + +.markdown input[type="checkbox"] { + accent-color: var(--color-accent); + cursor: default; + height: 0.95rem; + left: 0; + margin: 0; + opacity: 1; + position: absolute; + top: 0.38em; + vertical-align: -0.1em; + width: 0.95rem; +} + +.markdown li:has(> input[type="checkbox"]) { + list-style: none; + padding-left: 24px; +} + +.markdown blockquote { + border-left: 2px solid var(--color-accent); + color: var(--color-muted); + font-size: 15px; + font-style: italic; + line-height: 1.65; + margin: 28px 0; + max-width: 100%; + padding: 4px 0 4px 22px; +} + +.markdown blockquote p { + color: inherit; + font-size: inherit; + margin: 0 0 12px; + max-width: none; +} + +.markdown blockquote p:last-child { + margin-bottom: 0; +} + + +.markdown .callout { + --callout-color: var(--color-accent); + + border-left: 4px solid var(--callout-color); + color: var(--color-text); + margin: 28px 0; + max-width: 100%; + padding: 2px 16px; +} + +.markdown .callout[data-callout="note"], +.markdown .callout[data-callout="abstract"], +.markdown .callout[data-callout="info"], +.markdown .callout[data-callout="todo"] { + --callout-color: var(--color-accent); +} + +.markdown .callout[data-callout="tip"], +.markdown .callout[data-callout="success"] { + --callout-color: #4f6c3f; +} + +.markdown .callout[data-callout="important"] { + --callout-color: #6f5ea8; +} + +.markdown .callout[data-callout="warning"], +.markdown .callout[data-callout="question"] { + --callout-color: #9a6a21; +} + +.markdown .callout[data-callout="caution"], +.markdown .callout[data-callout="failure"], +.markdown .callout[data-callout="danger"], +.markdown .callout[data-callout="bug"] { + --callout-color: #9b392f; +} + +.markdown .callout[data-callout="example"], +.markdown .callout[data-callout="quote"] { + --callout-color: var(--color-muted); +} + +:root[data-theme="dark"] .markdown .callout[data-callout="tip"], +:root[data-theme="dark"] .markdown .callout[data-callout="success"] { + --callout-color: #9bb978; +} + +:root[data-theme="dark"] .markdown .callout[data-callout="important"] { + --callout-color: #b9a7e8; +} + +:root[data-theme="dark"] .markdown .callout[data-callout="warning"], +:root[data-theme="dark"] .markdown .callout[data-callout="question"] { + --callout-color: #d6b56d; +} + +:root[data-theme="dark"] .markdown .callout[data-callout="caution"], +:root[data-theme="dark"] .markdown .callout[data-callout="failure"], +:root[data-theme="dark"] .markdown .callout[data-callout="danger"], +:root[data-theme="dark"] .markdown .callout[data-callout="bug"] { + --callout-color: #ee8f7a; +} + +.markdown .callout-title { + align-items: center; + color: var(--callout-color); + display: flex; + font-size: 15px; + font-weight: 600; + line-height: 1.35; + margin: 0 0 12px; +} + +.markdown .callout.is-title-only .callout-title { + margin-bottom: 0; +} + +.markdown .callout.is-collapsible .callout-title { + cursor: pointer; + list-style: none; +} + +.markdown .callout.is-collapsible .callout-title::-webkit-details-marker { + display: none; +} + +.markdown .callout-icon { + font-size: 1.25em; + margin-right: 8px; + font-variation-settings: "FILL" 1, "wght" 400, "GRAD" 0, "opsz" 24; +} + +.markdown .callout-title-inner { + flex: 1; +} + +.markdown .callout-fold-icon { + font-size: 1.25em; + margin-left: 8px; + transform: rotate(-90deg); + transition: transform 180ms var(--ease-out); +} + +.markdown .callout[open] > .callout-title .callout-fold-icon { + transform: rotate(0deg); +} + +.markdown .callout-content > :last-child, +.markdown .md-fold-content > :last-child { + margin-bottom: 0; +} + +.markdown .callout p, +.markdown .callout ul, +.markdown .callout ol, +.markdown .md-fold p, +.markdown .md-fold ul, +.markdown .md-fold ol { + max-width: none; +} + +.markdown .callout img, +.markdown .callout video, +.markdown .callout iframe { + max-width: 100%; +} + +.markdown .md-fold { + margin: 28px 0; + max-width: 100%; +} + +.markdown .md-fold > summary { + color: var(--color-text); + cursor: pointer; + font-weight: 700; + line-height: 1.45; + list-style: none; + margin-bottom: 16px; + width: fit-content; +} + +.markdown .md-fold > summary::-webkit-details-marker { + display: none; +} + +.markdown .md-fold > summary::before { + border-bottom: 6px solid transparent; + border-left: 10px solid currentColor; + border-top: 6px solid transparent; + content: ""; + display: inline-block; + margin-right: 8px; + transform: translate(2px, 0.5px); + transition: transform 180ms var(--ease-out); +} + +.markdown .md-fold[open] > summary::before { + transform: rotate(90deg) translate(0.5px, -2px); +} + +.markdown .md-gallery { + display: flex; + gap: 16px; + margin: 32px 0; + max-width: 100%; + overflow-x: auto; + padding: 2px 0 12px; + scrollbar-color: color-mix(in srgb, var(--color-muted) 42%, transparent) transparent; + scrollbar-width: thin; +} + +.markdown .md-gallery > figure, +.markdown .md-gallery > p { + flex: 0 0 min(78%, 30rem); + margin: 0; + max-width: none; +} + +.markdown .md-gallery img { + width: 100%; +} + +/* Material multi-browse: native scrolling drives a stationary, masked stage. */ +.markdown .md-gallery.is-carousel { + --gallery-height: clamp(13rem, 38vw, 18rem); + --gallery-radius: 24px; + display: block; + height: var(--gallery-height); + padding: 0; + position: relative; + scrollbar-width: none; + touch-action: pan-x pan-y pinch-zoom; +} + +.markdown .md-gallery.is-carousel::-webkit-scrollbar { display: none; } + +.markdown .md-gallery.is-carousel:focus-visible { + border-radius: var(--gallery-radius); + outline: 2px solid var(--color-accent); + outline-offset: 5px; +} + +.markdown .md-carousel-track { height: 100%; } + +.markdown .md-carousel-stage { + height: 100%; + left: 0; + overflow: hidden; + position: sticky; +} + +.markdown .md-carousel-item { + background: var(--color-paper); + border-radius: var(--gallery-radius); + height: 100%; + left: 0; + margin: 0; + max-width: none; + overflow: hidden; + position: absolute; + top: 0; +} + +.markdown .md-carousel-item img { + border: 0; + height: 100%; + left: 50%; + max-width: none; + object-fit: cover; + position: absolute; + top: 0; + transform: translateX(-50%); + width: var(--gallery-image-width); +} + +.markdown .md-carousel-item:has(:focus-visible) { + outline: 2px solid var(--color-accent); + outline-offset: -3px; +} + +.markdown .md-carousel-item figcaption, +.memos-page .memo-photo-tile figcaption { + background: linear-gradient(transparent, rgb(0 0 0 / 0.7)); + bottom: 0; + box-sizing: border-box; + color: white; + display: -webkit-box; + font-family: var(--font-ui); + font-size: 0.9rem; + left: 0; + line-height: 1.4; + margin: 0; + opacity: var(--gallery-caption-opacity, 1); + overflow: hidden; + padding: 36px 16px 16px; + pointer-events: none; + position: absolute; + right: 0; + text-align: left; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; +} + +.markdown .md-gallery.is-dragging, +.markdown .md-gallery.is-dragging img { + cursor: grabbing; + user-select: none; +} + +.markdown .mermaid-block { + background: color-mix(in srgb, var(--color-paper) 72%, transparent); + border: 0; + border-radius: 6px; + margin: 32px 0; + max-width: 100%; + overflow-x: auto; + padding: 16px; + scrollbar-color: color-mix(in srgb, var(--color-muted) 42%, transparent) transparent; + scrollbar-width: thin; + transition: + background-color 350ms ease; +} + +.markdown .mermaid-source { + background: var(--color-code-bg); + border: 0; + border-radius: 4px; + color: var(--syntax-text); + margin: 0; + max-width: none; + overflow-x: auto; + padding: 14px 16px; + white-space: pre; +} + +.markdown .mermaid-source code { + white-space: pre; +} + +.markdown .mermaid-diagram { + color: var(--color-text); + min-width: 100%; +} + +.markdown .mermaid-diagram svg { + display: block; + height: auto; + margin: 0 auto; + max-width: none; +} + +.markdown .mermaid-block.is-rendered .mermaid-source { + display: none; +} + +.markdown .mermaid-error { + color: #9b392f; + font-size: 0.92rem; + margin: 12px 0 0; + max-width: none; +} + +:root[data-theme="dark"] .markdown .mermaid-error { + color: #ee8f7a; +} + +.markdown .embed-card { + background: color-mix(in srgb, var(--color-paper) 72%, transparent); + border: 0; + border-radius: 6px; + color: var(--color-text); + margin: 28px 0; + max-width: 100%; + min-width: 0; + overflow: hidden; + transition: + background-color 180ms ease, + color 180ms ease; +} + +.markdown a.embed-card { + display: block; + padding: 16px 18px; + text-decoration: none; +} + +.markdown a.embed-card:hover, +.markdown a.embed-card:focus-visible { + background: color-mix(in srgb, var(--color-accent) 8%, var(--color-paper)); + color: var(--color-hover-text); +} + +.markdown .embed-kicker, +.markdown .embed-meta, +.markdown .embed-action { + color: var(--color-muted); + display: block; + font-size: 12px; + line-height: 1.35; +} + +.markdown .embed-title { + color: var(--color-text); + display: block; + font-size: 16px; + font-weight: 700; + line-height: 1.45; + margin: 6px 0; + overflow-wrap: anywhere; +} + +.markdown .embed-slash { + color: var(--color-muted); + margin: 0 3px; +} + +.markdown .embed-action { + margin-top: 10px; +} + +.markdown .embed-frame { + max-width: 100%; +} + +.markdown .embed-frame iframe { + background: var(--color-paper); + border: 0; + display: block; + max-width: 100%; + width: 100%; +} + +.markdown .embed-frame-video { + aspect-ratio: 16 / 9; +} + +.markdown .embed-frame-video iframe { + height: 100%; +} + +.markdown .embed-frame-codepen iframe { + min-height: 360px; +} + +.markdown table { + border-collapse: collapse; + display: block; + font-family: var(--font-body); + font-size: 14px; + margin: 28px 0; + max-width: 100%; + overflow-x: auto; + width: 100%; +} + +.markdown th, +.markdown td { + border-bottom: 1px solid var(--color-line); + padding: 8px 12px; + text-align: left; + vertical-align: top; +} + +.markdown th { + color: var(--color-text); + font-weight: 700; +} + +.markdown td { + color: var(--color-muted); +} + +.markdown :not(pre) > code { + background: var(--color-code-inline-bg); + border: 0; + border-radius: 3px; + color: var(--color-muted); + font-family: var(--font-mono); + font-variant-ligatures: contextual common-ligatures; + font-feature-settings: "liga" 1, "calt" 1; + font-size: 0.9em; + padding: 1px 6px; + transition: + background-color 350ms ease; +} + +:root[data-palette="warm"] .markdown :not(pre) > code { + background: var(--color-paper); + color: var(--color-muted); +} + +.markdown pre { + background: var(--color-code-bg); + border: 0; + border-radius: 4px; + box-shadow: none; + color: var(--syntax-text); + font-family: var(--font-mono); + font-variant-ligatures: contextual common-ligatures; + font-feature-settings: "liga" 1, "calt" 1; + font-size: 14px; + line-height: 1.7; + margin: 28px 0; + max-width: 100%; + overflow-x: auto; + padding: 16px; + transition: + background-color 350ms ease; +} + +.markdown pre code { + background: transparent; + border: 0; + border-radius: 0; + color: inherit; + display: block; + font-family: inherit; + font-size: inherit; + padding: 0; +} + +.markdown hr { + background: var(--color-line); + border: 0; + height: 1px; + margin: 40px 0; +} + +.markdown figure { + margin: 36px 0; + padding: 0; +} + +/* Reset native frames as well as Daybook's media wrappers. */ +.markdown iframe, +.markdown object, +.markdown embed, +.markdown audio { + border: 0; +} + +.markdown img, +.markdown video { + background: var(--color-paper); + border: 0; + display: block; + height: auto; + max-width: 100%; +} + +.markdown.post-content img { + cursor: zoom-in; +} + +.markdown.post-content img.no-lightbox, +.markdown.post-content img[data-no-lightbox="true"] { + cursor: auto; +} + +.markdown figcaption { + color: color-mix(in srgb, var(--color-text) 72%, transparent); + font-size: 14px; + line-height: 1.5; + margin-top: 10px; + text-align: center; +} + +.markdown .footnotes { + border-top: 1px solid var(--color-line); + color: var(--color-muted); + font-size: 0.9rem; + margin-top: 3rem; + padding-top: 1rem; +} + +.markdown .footnotes hr { + display: none; +} + +.markdown .footnotes ol { + margin-bottom: 0; +} + +.markdown .footnotes li, +.markdown .footnotes p { + color: var(--color-muted); + font-size: 0.9rem; +} + +.markdown .footnote-ref, +.markdown .footnote-backref { + color: var(--color-accent); + text-decoration: none; +} + +.markdown .highlight, +.markdown .chroma { + background: var(--color-code-bg); + color: var(--syntax-text); +} + +.markdown .highlight { + border: 0; + border-radius: 4px; + box-shadow: none; + margin: 28px 0; + max-width: 100%; + overflow-x: auto; + position: relative; + transition: + background-color 350ms ease; +} + +.markdown .highlight pre { + background: transparent; + border: 0; + border-radius: 0; + box-shadow: none; + margin: 0; + padding-right: 3.5rem; +} + +.markdown pre.chroma { + border: 0; + margin: 0; +} + +.markdown .highlight.is-plain pre { + color: var(--syntax-text); +} + +.code-copy-button { + align-items: center; + background: transparent; + border: 0; + border-radius: 4px; + color: var(--color-muted); + cursor: pointer; + display: inline-flex; + height: 2rem; + justify-content: center; + padding: 0; + position: absolute; + right: 0.7rem; + top: 0.7rem; + opacity: 0; + pointer-events: none; + transition: + color 200ms ease, + opacity 200ms ease; + width: 2rem; + z-index: 1; +} + +.markdown .highlight:hover .code-copy-button, +.markdown .highlight:focus-within .code-copy-button, +.code-copy-button.is-copied { + opacity: 1; + pointer-events: auto; +} + +.code-copy-button .material-symbol { + font-size: 1.15rem; + font-variation-settings: "FILL" 0, "wght" 400, "GRAD" 0, "opsz" 24; + transition: font-variation-settings 160ms var(--ease-out); +} + +.code-copy-button:hover, +.code-copy-button:focus-visible, +.code-copy-button.is-copied { + color: var(--color-hover-text); +} + +.code-copy-button:hover .material-symbol, +.code-copy-button:focus-visible .material-symbol, +.code-copy-button.is-copied .material-symbol { + font-variation-settings: "FILL" 1, "wght" 400, "GRAD" 0, "opsz" 24; +} + +.code-copy-button:focus-visible { + outline: 2px solid var(--color-accent); + outline-offset: 3px; +} + +.markdown h1, +.markdown h2, +.markdown h3, +.markdown h4 { + scroll-margin-block-start: 90px; +} + +@media (prefers-reduced-motion: no-preference) { + html { + scroll-behavior: smooth; + } +} + +.markdown .heading-anchor { + display: inline-flex; + align-items: center; + color: var(--color-hover-text); + opacity: 0; + text-decoration: none; + margin-left: 0.25em; + font-size: 0.85em; + transition: opacity 180ms ease, color 180ms ease; + vertical-align: baseline; + position: relative; + top: 0.15em; +} + +.markdown .heading-anchor .material-symbol { + font-size: inherit; +} + +.markdown h1:hover .heading-anchor, +.markdown h2:hover .heading-anchor, +.markdown h3:hover .heading-anchor, +.markdown h4:hover .heading-anchor, +.markdown .heading-anchor:focus-visible { + opacity: 1; +} + +.markdown .heading-anchor:hover { + color: var(--color-primary); +} + +.markdown-image { + margin: 32px 0; +} + +.markdown-image-center { + text-align: center; +} + +.markdown-image-center img { + margin-left: auto; + margin-right: auto; +} + +@media (hover: none) { + .markdown .heading-anchor { + opacity: 0.45; + } +} + +@media (max-width: 720px) { + .markdown p, + .markdown ul li, + .markdown ol li { + font-size: 15px; + line-height: 1.72; + } + + .markdown h1 { + font-size: 25px; + margin: 44px 0 16px; + } + + .markdown h2 { + font-size: 21px; + margin: 38px 0 14px; + } + + .markdown h3 { + font-size: 18px; + margin: 28px 0 12px; + } + + + .markdown figure { + margin: 28px 0; + } +} + +@media (max-width: 420px) { + .markdown p, + .markdown ul li, + .markdown ol li { + font-size: 15px; + line-height: 1.7; + } + + .markdown h1 { + font-size: 23px; + margin: 36px 0 14px; + } + + .markdown h2 { + font-size: 19.5px; + margin: 32px 0 12px; + } + + .markdown h3 { + font-size: 17px; + margin: 24px 0 10px; + } + + .markdown ul { + padding-left: 0; + } + + .markdown ul ul, + .markdown ul ol, + .markdown ol ul, + .markdown ol ol { + padding-left: 20px; + } + + .markdown ul li { + padding-left: 18px; + } + + .markdown blockquote { + font-size: 15px; + padding-left: 16px; + } + + .markdown figcaption { + font-size: 13.5px; + } +} + +.markdown .heading-anchor:focus-visible { + border-radius: 3px; + outline: 2px solid var(--color-accent); + outline-offset: 3px; +} + +.markdown .chroma .line { + display: block; + min-height: 1.7em; +} + +.markdown .chroma .cl { + display: inline; +} + +.markdown .chroma .w { + color: inherit; +} + +.markdown .chroma .c, +.markdown .chroma .ch, +.markdown .chroma .cm, +.markdown .chroma .c1, +.markdown .chroma .cs, +.markdown .chroma .cp, +.markdown .chroma .cpf { + color: var(--syntax-comment); + font-style: italic; +} + +:root[data-palette="default"] .markdown .chroma .c, +:root[data-palette="default"] .markdown .chroma .ch, +:root[data-palette="default"] .markdown .chroma .cm, +:root[data-palette="default"] .markdown .chroma .c1, +:root[data-palette="default"] .markdown .chroma .cs, +:root[data-palette="default"] .markdown .chroma .cp, +:root[data-palette="default"] .markdown .chroma .cpf { + font-style: normal; +} + +.markdown .chroma .k, +.markdown .chroma .kc, +.markdown .chroma .kd, +.markdown .chroma .kn, +.markdown .chroma .kp, +.markdown .chroma .kr, +.markdown .chroma .kt { + color: var(--syntax-keyword); +} + +.markdown .chroma .s, +.markdown .chroma .sa, +.markdown .chroma .sb, +.markdown .chroma .sc, +.markdown .chroma .dl, +.markdown .chroma .sd, +.markdown .chroma .s2, +.markdown .chroma .se, +.markdown .chroma .sh, +.markdown .chroma .si, +.markdown .chroma .sx, +.markdown .chroma .sr, +.markdown .chroma .s1, +.markdown .chroma .ss { + color: var(--syntax-string); +} + +.markdown .chroma .m, +.markdown .chroma .mb, +.markdown .chroma .mf, +.markdown .chroma .mh, +.markdown .chroma .mi, +.markdown .chroma .il, +.markdown .chroma .mo { + color: var(--syntax-number); +} + +.markdown .chroma .nf, +.markdown .chroma .nb, +.markdown .chroma .nx, +.markdown .chroma .nc, +.markdown .chroma .nd, +.markdown .chroma .ne { + color: var(--syntax-function); +} + +.markdown .chroma .nt { + color: var(--syntax-tag); +} + +.markdown .chroma .na { + color: var(--syntax-attr); +} + +.markdown .chroma .o, +.markdown .chroma .ow, +.markdown .chroma .p { + color: var(--syntax-operator); +} + +.markdown .chroma .err { + color: var(--syntax-error); +} + +.markdown .chroma .gi { + color: var(--syntax-inserted); +} + +.markdown .chroma .gd { + color: var(--syntax-deleted); +} + +/* GitHub Card */ +.markdown .gc-container { + margin: 1.5rem 0; + display: block; + overflow-x: auto; + border-radius: 6px; + background: color-mix(in srgb, var(--color-text) 5%, transparent); + padding: 1rem 1.25rem; + transition: background-color 0.2s ease-out, color 0.2s ease-out; + scrollbar-width: thin; + scrollbar-color: color-mix(in srgb, var(--color-text) 15%, transparent) transparent; + text-decoration: none; + color: var(--color-text); +} + +.markdown .gc-container:hover, +.markdown .gc-container:focus-visible { + background: color-mix(in srgb, var(--color-text) 10%, transparent); +} + +.markdown .gc-container + .gc-container { + margin-top: -0.5rem; +} + +/* Title Bar */ +.markdown .gc-title-bar { + display: flex; + align-items: center; + gap: 0.625rem; +} + +.markdown .gc-owner-avatar { + aspect-ratio: 1/1; + width: 1.375rem; + flex-shrink: 0; + border-radius: 9999px; + background-color: color-mix(in srgb, var(--color-text) 20%, transparent); +} + +.markdown .gc-repo-title { + display: flex; + align-items: center; + line-height: normal; + color: currentColor; +} + +.markdown .gc-repo-title strong { + color: inherit; +} + +.markdown .gc-slash { + margin: 0 0.25rem; + opacity: 0.4; +} + +.markdown .gc-github-icon { + margin-left: auto; + width: 1.375rem; + flex-shrink: 0; +} + +/* Repo Description */ +.markdown .gc-repo-description { + margin: 0.6rem 0 0.875rem; + text-align: start; + font-size: 0.875rem; + color: currentColor; +} + +/* Info Bar */ +.markdown .gc-info-bar { + display: flex; + align-items: center; + gap: 0.4375rem; + font-size: 0.75rem; + color: color-mix(in srgb, currentColor 80%, transparent); +} + +.markdown .gc-info-icon { + flex-shrink: 0; +} + +.markdown .gc-stars-count { + margin-right: 0.75rem; +} + +.markdown .gc-forks-count { + margin-right: 0.9375rem; +} + +.markdown .gc-license-info { + margin-left: 0.125rem; + margin-right: 1rem; +} + +/* Spotify Embed */ +.markdown .spotify-embed { + width: 100%; + border-radius: 12px; + overflow: hidden; + border: 0; + margin: 0; + display: block; +} + +/* Custom Music Player */ +.markdown .music-custom-player { + margin: 32px 0; +} + +.music-player { + position: relative; + border-radius: 16px; + overflow: hidden; + height: 160px; + display: flex; + align-items: center; + background: var(--color-surface); + box-shadow: 0 4px 12px rgba(0,0,0,0.1); + color: #fff; + font-family: var(--font-ui); +} + +.music-bg { + position: absolute; + top: -20px; left: -20px; right: -20px; bottom: -20px; + background-size: cover; + background-position: center; + filter: blur(20px) brightness(0.7); + z-index: 0; +} + +.music-overlay { + position: absolute; + top: 0; left: 0; right: 0; bottom: 0; + background: rgba(0, 0, 0, 0.3); + z-index: 1; +} + +.music-inner { + position: relative; + z-index: 2; + display: flex; + align-items: center; + width: 100%; + height: 100%; + padding: 16px; + box-sizing: border-box; +} + +.music-player .music-cover { + width: 128px; + height: 128px; + border-radius: 8px; + object-fit: cover; + flex-shrink: 0; + margin-right: 16px; + margin-bottom: 0 !important; + border: none; + box-shadow: 0 12px 32px rgba(0, 0, 0, 0.4); +} + +.music-body { + flex: 1; + display: flex; + flex-direction: column; + justify-content: center; + min-width: 0; +} + +.music-text { + display: flex; + align-items: baseline; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + margin-bottom: 4px; +} + +.music-title { + font-family: var(--font-serif); + font-size: 16px; + font-weight: 600; + margin-right: 8px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.music-artist { + font-size: 13px; + color: rgba(255, 255, 255, 0.8); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.music-time { + font-size: 12px; + color: rgba(255, 255, 255, 0.8); + margin-bottom: 6px; +} + +.music-bottom { + display: flex; + align-items: center; + justify-content: flex-start; +} + +.music-canvas { + flex: 1; + max-width: 360px; + height: 24px; + cursor: pointer; + touch-action: none; +} + +.music-playbtn-wrapper { + width: 72px; + height: 72px; + display: flex; + align-items: center; + justify-content: center; + margin-left: auto; +} + +.music-playbtn { + width: 45px; + height: 45px; + border-radius: 22.5px; + background: rgba(255, 255, 255, 0.2); + border: none; + color: rgba(255, 255, 255, 0.8); + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + transition: all 350ms cubic-bezier(0.42, 1.67, 0.21, 0.9); + flex-shrink: 0; + padding: 0; +} + +.music-player.is-playing .music-playbtn { + width: 45px; + height: 45px; + border-radius: 18px; + background: rgba(255, 255, 255, 1); + color: #000; +} + +.music-playbtn:active { + width: 50px !important; + height: 50px !important; + border-radius: 18px !important; + transform: none; +} + +.music-icon { + font-family: "Material Symbols Rounded"; + font-variation-settings: 'FILL' 1; + font-size: 24px; + color: inherit; +} + +.music-error { + padding: 16px; + background: var(--color-surface); + border-radius: 12px; + color: var(--color-text-subdued); + text-align: center; + border: 0; +} + +@media (max-width: 960px) { + .music-player { + height: auto; + width: 100%; + max-width: 100%; + box-sizing: border-box; + border-radius: 20px; + } + + .music-inner { + flex-direction: column; + align-items: center; + padding: 20px 18px; + gap: 10px; + } + + .music-player .music-cover { + width: min(68vw, 220px); + height: min(68vw, 220px); + margin-right: 0; + margin-bottom: 0 !important; + } + + .music-body { + width: 100%; + align-items: center; + flex: none; + } + + .music-text { + flex-direction: column; + align-items: center; + width: 100%; + white-space: normal; + } + + .music-title { + margin-right: 0; + margin-bottom: 4px; + text-align: center; + white-space: normal; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + font-weight: 700; + } + + .music-artist { + text-align: center; + width: 100%; + } + + .music-time { + text-align: center; + margin-bottom: 16px; + } + + .music-bottom { + flex-direction: column; + align-items: center; + width: 100%; + } + + .music-canvas { + width: min(100%, 260px); + max-width: 100%; + flex: none; + } + + .music-playbtn-wrapper { + margin-left: 0; + margin-top: 16px; + width: 56px; + height: 56px; + } + + .music-playbtn { + width: 52px; + height: 52px; + border-radius: 26px; + } + + .music-player.is-playing .music-playbtn { + width: 52px; + height: 52px; + border-radius: 20px; + } + + .music-icon { + font-size: 28px; + } +} + +@media (max-width: 380px) { + .music-player { + border-radius: 16px; + } + + .music-inner { + padding: 16px; + } + + .music-player .music-cover { + width: 190px; + height: 190px; + } + + .music-canvas { + width: 230px; + } + + .music-playbtn-wrapper { + width: 48px; + height: 48px; + } + + .music-playbtn, .music-player.is-playing .music-playbtn { + width: 48px; + height: 48px; + } +} + +.markdown figure:has(.spotify-embed), +.markdown figure:has(.music-custom-player), +.markdown figure:has(.twitter-tweet) { + margin: 32px 0; +} + +/* Twitter Widget Container */ +.markdown .twitter-tweet { + margin: 0 auto; +} + +.markdown blockquote.twitter-tweet { + border-left: none; + padding: 0; + background: transparent; + margin: 0 auto; +} + +.markdown .twitter-tweet iframe, +.markdown iframe[data-tweet-id] { + border-radius: 12px !important; + overflow: hidden !important; +} + +/* KaTeX Overflow Fix */ +.markdown .katex-display { + overflow-x: auto; + overflow-y: hidden; + padding: 0.5rem 0; + margin: 1.25rem 0; +} + +.markdown .katex-display > .katex { + max-width: 100%; +} + +.markdown .katex { + font-size: 1.05em; +} + +.markdown .katex-display::-webkit-scrollbar { + display: none; +} + +/* Obsidian Embeds */ + +.markdown .obsidian-embed { + margin: 32px 0; + max-width: 100%; +} + +.markdown .media-image { + /* Default behaviors for image embeds */ +} + +.markdown .media-image img { + border-radius: 4px; + width: var(--image-width, auto); + max-width: 100%; + height: auto; +} + +.markdown .media-image.is-center { + text-align: center; +} + +.markdown .media-image.is-center img { + margin-left: auto; + margin-right: auto; +} + +.markdown .media-image.is-left { + text-align: left; +} + +.markdown .media-image.is-left img { + margin-right: auto; +} + +.markdown .media-image.is-right { + text-align: right; +} + +.markdown .media-image.is-right img { + margin-left: auto; +} + +.markdown .media-pdf { + display: flex; + flex-direction: column; + gap: 8px; +} + +.markdown .media-pdf iframe { + width: 100%; + height: 600px; + border: 0; + border-radius: 6px; + background: var(--color-paper); +} + +@media (max-width: 960px) { + .markdown .media-pdf iframe { + height: 400px; + } +} + +.markdown .media-audio, +.markdown .media-video { + display: flex; + flex-direction: column; + gap: 8px; + margin: 24px 0; +} + +.markdown .media-audio audio { + width: 100%; + border: 0; + border-radius: 6px; + background: var(--color-paper); +} + +.markdown .media-video video { + max-width: 100%; + border: 0; + border-radius: 6px; + background: var(--color-paper); +} + +.markdown .media-audio.is-center, +.markdown .media-video.is-center { + align-items: center; +} + +.markdown .obsidian-note-embed { + border-left: 2px solid var(--color-accent); + color: var(--color-muted); + font-style: normal; + font-size: 15px; + line-height: 1.65; + margin: 28px 0; + max-width: 100%; + padding: 4px 32px 4px 22px; + position: relative; +} + +.markdown blockquote.obsidian-note-embed { + border-left-color: var(--color-accent); +} + + + +.markdown .obsidian-embed-content { + color: var(--color-text); + font-size: 15px; + line-height: 1.6; +} + +.markdown .obsidian-embed-content > *:first-child { + margin-top: 0; +} + +.markdown .obsidian-embed-title { + font-size: 1.15rem; + font-weight: bold; + margin-bottom: 0.5rem; + color: var(--color-text); +} + +.markdown .obsidian-embed-link { + position: absolute; + top: 4px; + right: 0; + color: var(--color-muted); + opacity: 0.6; + text-decoration: none; + display: flex; + align-items: center; + justify-content: center; + transition: color 200ms ease, opacity 200ms ease; +} + +.markdown .obsidian-embed-link::after { + background: var(--color-tooltip-bg); + border-radius: 8px; + top: calc(100% + 9px); + color: var(--color-tooltip-text); + content: attr(data-tooltip); + font-family: var(--font-ui); + font-size: 0.72rem; + left: 50%; + line-height: 1; + opacity: 0; + padding: 5px 10px; + pointer-events: none; + position: absolute; + transform: translateX(-50%); + clip-path: inset(100% 50% 0 50% round 8px); + transition: + opacity var(--motion-expressive-effects-duration) var(--motion-expressive-effects-easing), + clip-path var(--motion-expressive-effects-duration) var(--motion-expressive-effects-easing); + white-space: nowrap; + z-index: 100; +} + +.markdown .obsidian-embed-link:hover, +.markdown .obsidian-embed-link:focus-visible { + color: var(--color-hover-text); + opacity: 1; + text-decoration: none; +} + +.markdown .obsidian-embed-link:hover::after, +.markdown .obsidian-embed-link:focus-visible::after { + opacity: 1; + clip-path: inset(0 0 0 0 round 8px); +} + +@media (prefers-reduced-motion: reduce) { + .markdown .obsidian-embed-link::after { + clip-path: none !important; + transition: opacity 160ms ease !important; + } +} + +html[data-reduced-motion="true"] .markdown .obsidian-embed-link::after { + clip-path: none !important; + transition: opacity 160ms ease !important; +} + +.markdown .obsidian-embed-link .material-symbol { + font-size: 1.15rem; + font-variation-settings: "FILL" 0, "wght" 400, "GRAD" 0, "opsz" 24; +} + +.markdown mark, +.note-content mark { + background: var(--color-accent-soft-strong); + color: inherit; + border-radius: 0.2em; + padding: 0.05em 0.18em; +} diff --git a/internal/embedded/static/css/pages/about.css b/internal/embedded/static/css/pages/about.css new file mode 100644 index 00000000..9d98bc63 --- /dev/null +++ b/internal/embedded/static/css/pages/about.css @@ -0,0 +1,197 @@ +.about-body .page-frame { + position: relative; + z-index: 1; +} + +.about-page { + max-width: min(44rem, 100%); + min-height: calc(100vh - 160px); + position: relative; +} + +.about-content { + max-width: var(--note-body-width); + padding-top: clamp(3rem, 9vh, 7rem); + position: relative; + width: 100%; + z-index: 2; +} + +.about-content h1 { + display: flex; + align-items: center; + gap: 0.6rem; + font-family: var(--font-serif); + font-size: var(--note-title-size); + font-style: italic; + font-weight: 650; + line-height: 1.15; + margin: 0; +} + +.about-summary { + color: var(--color-muted); + font-family: var(--font-body); + font-size: 0.94rem; + line-height: 1.75; + margin: 1.2rem 0 0; + max-width: 42rem; +} + +.about-summary::first-letter { + color: var(--color-accent); + float: left; + font-family: var(--font-ui); + font-size: 3.4em; + font-style: italic; + font-weight: 700; + line-height: 0.92; + margin-top: 4px; + padding: 4px 10px 0 0; +} + +.about-markdown { + margin-top: 2.2rem; +} + +.about-meta { + color: var(--color-muted); + display: flex; + flex-direction: column; + align-items: flex-end; + font-family: var(--font-cormorant); + font-style: italic; + font-weight: 600; + font-size: clamp(0.95rem, 1.3vw, 1.12rem); + gap: 0.6em; + line-height: 1; + margin: 2.5rem 0 1.5rem; +} + +.about-meta-group { + display: inline-flex; + align-items: center; + gap: 0.45rem; +} + +.about-engagement { + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: flex-end; + gap: .8rem; +} + +.about-time-group { + text-align: right; + line-height: 1.4; +} + +.golden-spiral { + /* + * Golden background timeline (all durations are φ multiples): + * + * 0.000s guide paths start growing from the pole outward + * 1.618s spiral curve starts growing from the pole (delay = φ) + * 8.090s guide paths are fully drawn (duration = 5φ) + * 14.708s spiral curve is fully drawn; hold starts (duration = 5φ²) + * 16.326s hold ends; spiral starts shrinking (hold = φ) + * 24.416s spiral fully shrunk; guides start shrinking (shrink = 5φ) + * 29.416s guide paths fully shrunk (shrink = 5) + * 29.536s all strokes hidden + * 30.154s loop restarts (pause = 1/φ) + * + * φ relationships: + * curveGrow / guideGrow = 5φ² / 5φ = φ + * curveGrow / curveShrink = 5φ² / 5φ = φ + * guideGrow / guideShrink = 5φ / 5 = φ + */ + --phi: 1.61803398875; + --golden-curve-delay: 1.618s; + --golden-guide-grow-duration: 8.09s; + --golden-curve-grow-duration: 13.09s; + --golden-hold-duration: 1.618s; + --golden-curve-shrink-duration: 8.09s; + --golden-guide-shrink-window: 5.0s; + --golden-hidden-duration: 0.618s; + --golden-loop-duration: 30.154s; + contain: strict; + inset: 0; + opacity: 0.9; + pointer-events: none; + position: fixed; + user-select: none; + z-index: 0; +} + +.golden-spiral svg { + display: block; + height: 100%; + width: 100%; +} + +@keyframes golden-spin { + from { transform: rotate(0deg); } + to { transform: rotate(360deg); } +} + +.golden-spiral-stage { + animation: golden-spin var(--golden-loop-duration) linear infinite; + transform-box: view-box; + will-change: transform; +} + +.golden-rect, +.golden-diagonal, +.golden-curve { + animation-duration: var(--golden-loop-duration); + animation-fill-mode: both; + animation-iteration-count: infinite; + animation-timing-function: var(--ease-page); + fill: none; + opacity: 0; + stroke-linecap: round; +} + +.golden-rect { + stroke-width: 1.0; + stroke: var(--color-golden-rect); +} + +.golden-diagonal { + stroke-width: 0.809; + stroke: var(--color-golden-diagonal); +} + +.golden-curve { + stroke-width: 1.618; + animation-name: golden-curve-life; + animation-timing-function: linear; + stroke: var(--color-golden-curve); + stroke-dasharray: 1; + stroke-dashoffset: 1; + stroke-linejoin: round; +} + +@media (max-width: 960px) { + .about-content { + padding-top: clamp(2rem, 8vh, 4rem); + } +} + +@media (max-width: 960px) { + .golden-spiral { + display: none; + } +} + +/* Hide the decoration entirely, including during route transitions. */ +html[data-reduced-motion="true"] .golden-spiral { + display: none; +} + +@media (prefers-reduced-motion: reduce) { + .golden-spiral { + display: none; + } +} diff --git a/internal/embedded/static/css/pages/archive.css b/internal/embedded/static/css/pages/archive.css new file mode 100644 index 00000000..1ce19761 --- /dev/null +++ b/internal/embedded/static/css/pages/archive.css @@ -0,0 +1,328 @@ +.archive-page { + min-width: 0; + width: min(var(--note-body-width), 100%); +} + +.archive-timeline { + min-width: 0; +} + +.archive-header { + margin-bottom: clamp(2rem, 4vw, 3.5rem); +} + +.archive-stats { + display: flex; + flex-wrap: wrap; + gap: 2rem; + align-items: baseline; + font-family: var(--font-cormorant); +} + +.archive-stat-item { + display: flex; + align-items: baseline; + gap: 0.35rem; +} + +.archive-stat-num { + font-size: 2.5rem; + font-weight: 700; + color: var(--color-text); + line-height: 1; + font-variant-numeric: tabular-nums; +} + +.archive-stat-unit { + font-size: 0.95rem; + color: var(--color-muted); + font-weight: 500; +} + +.archive-stats-secondary { + margin-top: 1.25rem; + gap: 1.5rem; + font-family: var(--font-cormorant); + font-style: italic; +} + +.archive-stats-secondary .archive-stat-num { + font-size: 1.35rem; + font-weight: 600; +} + +.archive-stats-secondary .archive-stat-unit { + font-size: 1.35rem; + letter-spacing: 0.05em; +} + +.archive-year { + display: grid; + gap: clamp(1.6rem, 4vw, 2.4rem); + grid-template-columns: 5.2rem minmax(0, 1fr); + position: relative; +} + +.archive-year + .archive-year { + margin-top: clamp(2.8rem, 6vw, 4.5rem); +} + +.archive-year h2 { + color: var(--color-text); + font-family: var(--font-cormorant); + font-size: clamp(1.35rem, 2.6vw, 1.75rem); + font-style: italic; + font-weight: 600; + letter-spacing: 0; + line-height: 1; + margin: 0; +} + +.archive-list { + --archive-dot-size: 9px; + --archive-list-pad: 1.45rem; + + border-left: 1px solid var(--color-line); + display: grid; + gap: 1.9rem; + list-style: none; + margin: 0; + padding: 0 0 0 var(--archive-list-pad); +} + +.archive-item { + display: grid; + gap: clamp(0.9rem, 3vw, 1.35rem); + grid-template-columns: 4.2rem minmax(0, 1fr); + position: relative; +} + +.archive-item::before { + background: var(--color-page); + border: 1.5px solid var(--color-line); + border-color: color-mix(in srgb, var(--color-muted) 35%, var(--color-line)); + border-radius: 999px; + content: ""; + height: var(--archive-dot-size); + left: calc(-1 * var(--archive-list-pad) - 4.5px); + position: absolute; + top: 0.38rem; + transition: + background-color 250ms ease, + border-color 250ms ease, + box-shadow 250ms ease; + width: var(--archive-dot-size); + z-index: 1; +} + +.archive-item:hover::before, +.archive-item:focus-within::before { + background: var(--color-accent); + border-color: var(--color-accent); + box-shadow: 0 0 0 3px var(--color-page); +} + +.archive-item time { + color: var(--color-muted); + font-family: var(--font-cormorant); + font-size: 0.96rem; + font-style: italic; + line-height: 1.25; + transition: color 200ms ease; + white-space: nowrap; +} + +.archive-entry { + min-width: 0; +} + +.archive-entry a { + color: var(--color-text); + font-family: var(--font-serif); + font-size: 1.02rem; + font-weight: 700; + line-height: 1.4; + text-decoration: none; + transition: color 200ms ease; +} + +.archive-item:hover time, +.archive-item:focus-within time { + color: var(--color-muted); +} + +.archive-item:hover .archive-entry a, +.archive-item:focus-within .archive-entry a, +.archive-entry a:hover, +.archive-entry a:focus-visible { + color: var(--color-hover-text); +} + +.archive-entry a:focus-visible { + outline: 1px solid var(--color-accent); + outline-offset: 4px; +} + +.archive-reading-time { + color: var(--color-muted); + display: inline-block; + font-family: var(--font-cormorant); + font-size: 1.02rem; + font-style: italic; + margin-left: 0.65rem; + white-space: nowrap; +} + +.archive-entry p, +.archive-empty { + color: var(--color-muted); + font-family: var(--font-body); + font-size: 0.94rem; + line-height: 1.75; +} + +.archive-entry p { + margin: 0.45rem 0 0; +} + +.archive-empty { + margin: 0; +} + +@media (max-width: 960px) { + .archive-page { + width: 100%; + } +} + +@media (max-width: 640px) { + .archive-stats { + gap: 1.5rem; + } + + .archive-stat-num { + font-size: 2.1rem; + } + + .archive-year { + display: block; + } + + .archive-year h2 { + margin-bottom: 1.4rem; + } + + .archive-list { + --archive-list-pad: 1.2rem; + } + + .archive-item { + grid-template-columns: 3.7rem minmax(0, 1fr); + } + + .archive-reading-time { + display: block; + margin: 0.25rem 0 0; + } + + .archive-entry p { + display: none; + } +} + +/* Virtual List Flattened Styles */ +.archive-virtual-list { + --archive-year-column: 5.2rem; + --archive-column-gap: clamp(1.6rem, 4vw, 2.4rem); + --archive-axis-x: calc(var(--archive-year-column) + var(--archive-column-gap)); + position: relative; + min-width: 0; +} + +@media (max-width: 640px) { + .archive-virtual-list { + --archive-axis-x: 0px; + } +} + +.archive-virtual-list::before { + content: ""; + position: absolute; + top: 0; + bottom: 0; + width: 1px; + left: var(--archive-axis-x); + background: var(--color-line); + pointer-events: none; + z-index: 0; +} + +.archive-virtual-row { + display: grid; + gap: var(--archive-column-gap); + grid-template-columns: var(--archive-year-column) minmax(0, 1fr); + position: relative; +} +.archive-year-row { + padding-top: clamp(2.8rem, 6vw, 4.5rem); +} +.archive-year-row.is-first-year { + padding-top: 0; +} +.archive-year-row h2 { + color: var(--color-text); + font-family: var(--font-cormorant); + font-size: clamp(1.35rem, 2.6vw, 1.75rem); + font-style: italic; + font-weight: 600; + letter-spacing: 0; + line-height: 1; + margin: 0; + grid-column: 1; +} + +.archive-item-track { + --archive-dot-size: 9px; + --archive-list-pad: 1.45rem; + border-left: none; /* removed per instructions */ + padding: 0 0 1.9rem var(--archive-list-pad); + grid-column: 2; + position: relative; + height: 100%; +} +/* For mobile spacing override */ +@media (max-width: 640px) { + .archive-item-track { + --archive-list-pad: 1.2rem; + } +} + +/* Adjust .archive-item which is now inside .archive-item-track */ +.archive-item-track .archive-item { + display: grid; + gap: clamp(0.9rem, 3vw, 1.35rem); + grid-template-columns: 4.2rem minmax(0, 1fr); + position: relative; + opacity: 1; + transform: none; +} + +.archive-item-row.is-pending-reveal .archive-item { + opacity: 0; +} +.archive-item-row.is-seen .archive-item { + opacity: 1 !important; + animation: none !important; + transform: none !important; +} + +/* Mobile overrides for flattened rows */ +@media (max-width: 640px) { + .archive-virtual-row { + display: block; + } + .archive-year-row h2 { + margin-bottom: 1.4rem; + padding-left: var(--archive-list-pad, 1.2rem); + } +} diff --git a/internal/embedded/static/css/pages/graph.css b/internal/embedded/static/css/pages/graph.css new file mode 100644 index 00000000..f78e9110 --- /dev/null +++ b/internal/embedded/static/css/pages/graph.css @@ -0,0 +1,575 @@ +.graph-body .page-main { + grid-column: 2; + padding: 88px clamp(24px, 4vw, 40px) 0; + display: flex; + flex-direction: column; + height: calc(100dvh - 84px); +} +.graph-body .page-main #main-content-wrapper, +.graph-page { + display: flex; + flex: 1; + flex-direction: column; + min-height: 0; + width: 100%; +} +.graph-shell { + flex: 1; + display: flex; + position: relative; + min-height: 400px; + overflow: hidden; + background: var(--color-paper); + border-radius: 16px; + box-shadow: + 0 2px 4px color-mix(in srgb, var(--color-text) 7%, transparent), + 0 8px 20px color-mix(in srgb, var(--color-text) 4%, transparent); +} +#graph-container { + flex: 1; + width: 100%; + height: 100%; + min-height: 400px; + cursor: grab; +} +#graph-container:active { + cursor: grabbing; +} +#graph-container svg { + display: block; +} +.graph-shell [hidden] { + display: none !important; +} +.graph-shell .graph-toolbar { + position: absolute; + top: 16px; + left: 16px; + display: flex; + flex-wrap: nowrap; + gap: 8px; + z-index: 3; + max-width: calc(100% - 32px); +} +.graph-shell .graph-toolbar .notes-action-button { + flex-shrink: 0; +} +.graph-shell .graph-toolbar .notes-action-button:disabled { + opacity: 0.4; + cursor: not-allowed; +} +.graph-action-text { + display: none; +} +.graph-search-panel { + position: absolute; + top: calc(100% + 8px); + left: 0; + width: min(240px, calc(100vw - 64px)); + max-height: 0; + overflow: hidden; + display: flex; + flex-direction: column; + background: var(--color-page); + font: 14px/1.5 var(--font-ui); + visibility: hidden; + pointer-events: none; + opacity: 0; + transform: translateY(-8px); + transition: + max-height 360ms cubic-bezier(0.2, 0.78, 0.24, 1), + opacity 220ms ease, + transform 320ms cubic-bezier(0.22, 1, 0.36, 1), + visibility 0ms linear 360ms; +} +.graph-toolbar.is-search-open .graph-search-panel { + max-height: min(420px, 55dvh); + overflow-y: auto; + visibility: visible; + pointer-events: auto; + opacity: 1; + transform: translateY(0); + transition-delay: 0ms; +} +.graph-toolbar.is-search-open #graph-search-btn { + color: var(--color-accent); +} +.graph-shell button, +.graph-shell input, +.graph-shell select { + font: inherit; +} +.graph-shell .graph-button { + min-height: 40px; + padding: 8px 14px; + border: 1px solid var(--color-line); + border-radius: 20px; + color: var(--color-text); + background: var(--color-paper); + cursor: pointer; + font-family: var(--font-ui); + font-size: 13px; +} +.graph-shell .graph-button:hover, +.graph-shell .graph-button[aria-expanded="true"] { + background: color-mix(in srgb, var(--color-accent) 12%, var(--color-paper)); + color: var(--color-accent); +} +.graph-shell button:disabled { + opacity: 0.4; + cursor: default; +} +.graph-shell :is(button, input, select, summary, [tabindex]):focus-visible { + outline: 2px solid var(--color-accent); + outline-offset: 3px; +} +.graph-panel { + position: absolute; + top: 12px; + bottom: 12px; + right: 12px; + z-index: 4; + width: 420px; + max-width: calc(100% - 24px); + max-height: none; + height: auto; + margin: 0; + padding: 0; + left: auto; + overflow: auto; + overscroll-behavior: contain; + scrollbar-width: thin; + background: var(--color-paper); + border: 0; + border-radius: 20px; + box-shadow: 0 8px 30px rgb(0 0 0 / 0.12); + color: var(--color-text); + font: 14px/1.5 var(--font-ui); +} +.graph-panel-header { + position: sticky; + top: 0; + z-index: 2; + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; + padding: 16px; + background: var(--color-paper); + border-bottom: 1px solid var(--color-line); +} +.graph-panel-header strong { + font-size: 16px; + font-weight: 600; +} +.graph-panel-actions { + display: flex; + align-items: center; + gap: 4px; +} +.graph-shell .graph-panel-action { + display: grid; + place-items: center; + flex: 0 0 44px; + width: 44px; + height: 44px; + padding: 0; + border: 0; + border-radius: 10px; + background: transparent; + color: var(--color-muted); + cursor: pointer; + transition: background 160ms ease, color 160ms ease; +} +.graph-panel-action .material-symbol { + font-size: 22px; +} +.graph-shell .graph-panel-action:hover, +.graph-shell .graph-panel-action:focus-visible { + background: color-mix(in srgb, var(--color-accent) 12%, var(--color-paper)); + color: var(--color-accent); +} +.graph-section-title { + display: flex; + align-items: center; + gap: 10px; + margin: 0; + font: inherit; + padding: 12px 20px; + font-weight: 600; +} +.graph-section-title .material-symbol { + color: var(--color-muted); + font-size: 20px; +} +.graph-section-body { + padding: 0 20px 12px; + display: flex; + flex-direction: column; + gap: 8px; +} +.graph-shell .graph-query { + width: 100%; + box-sizing: border-box; + opacity: 1; + transform: none; + font: 0.84rem/1.4 var(--font-ui); +} +.graph-shell .graph-query:focus-visible { + outline: 0; +} +.graph-shell .graph-query[aria-invalid="true"] { + border-color: #c44c4c; +} +.graph-switch-row { + min-height: 44px; + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; + cursor: pointer; +} +.graph-shell .graph-switch { + flex: 0 0 52px; +} +.graph-slider-row { + display: flex; + flex-direction: column; + gap: 8px; +} +/* Geometry and motion follow Clavis's MaterialSlider: 16px split track, + 18px handle gap, 44px handle, and an animated value indicator. */ +@property --graph-progress { + syntax: ""; + inherits: true; + initial-value: 0%; +} +.graph-slider { + --graph-slider-duration: var(--motion-expressive-effects-duration, 200ms); + --graph-slider-easing: var(--motion-expressive-effects-easing, cubic-bezier(0.34, 0.8, 0.34, 1)); + position: relative; + height: 44px; + transition: --graph-progress var(--graph-slider-duration) var(--graph-slider-easing); +} +.graph-slider.is-dragging { + transition: none; +} +.graph-slider-visual { + position: absolute; + top: 0; + left: 20px; + right: 20px; + height: 44px; + pointer-events: none; +} +.graph-slider-active, +.graph-slider-inactive { + position: absolute; + top: 14px; + height: 16px; + border-radius: 8px; +} +.graph-slider-active { + left: 0; + width: max(0px, calc(var(--graph-progress) - 9px)); + background: var(--color-accent); +} +.graph-slider-inactive { + left: min(100%, calc(var(--graph-progress) + 9px)); + right: 0; + overflow: hidden; + background: color-mix(in srgb, var(--color-accent) 22%, var(--color-paper)); +} +.graph-slider-end { + position: absolute; + top: 4px; + right: 4px; + width: 8px; + height: 8px; + border-radius: 50%; + background: var(--color-accent); +} +.graph-slider-handle { + position: absolute; + top: 0; + left: var(--graph-progress); + width: 4px; + height: 44px; + border-radius: 2px; + transform: translateX(-50%); + background: var(--color-accent); + transition: width var(--graph-slider-duration) var(--graph-slider-easing); +} +.graph-slider:is(.is-dragging, :has(input:focus-visible)) .graph-slider-handle { + width: 2px; +} +.graph-slider-value { + position: absolute; + bottom: calc(100% + 6px); + left: var(--graph-progress); + z-index: 1; + display: grid; + place-items: center; + min-width: 40px; + height: 24px; + padding: 0 10px; + box-sizing: border-box; + border-radius: 999px; + background: var(--color-accent); + color: var(--color-paper); + font: 500 12px/1 var(--font-ui); + font-variant-numeric: tabular-nums; + box-shadow: 0 3px 8px rgb(0 0 0 / 0.14); + opacity: 0; + transform: translate(-50%, 6px) scale(0.82); + transform-origin: bottom center; + transition: + opacity var(--graph-slider-duration) var(--graph-slider-easing), + transform var(--graph-slider-duration) var(--graph-slider-easing); +} +.graph-slider:is(:hover, .is-dragging, :has(input:focus-visible)) .graph-slider-value { + opacity: 1; + transform: translate(-50%, 0) scale(1); +} +.graph-slider:has(input:focus-visible) .graph-slider-visual { + outline: 2px solid var(--color-accent); + outline-offset: 0; + border-radius: 8px; +} +.graph-shell .graph-slider input[type="range"] { + appearance: none; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 44px; + margin: 0; + opacity: 0; + cursor: pointer; + touch-action: pan-y; +} +.graph-shell .graph-slider input[type="range"]::-webkit-slider-runnable-track { + height: 16px; +} +.graph-shell .graph-slider input[type="range"]::-webkit-slider-thumb { + appearance: none; + width: 40px; + height: 44px; + margin-top: -14px; +} +.graph-shell .graph-slider input[type="range"]::-moz-range-track { + height: 16px; +} +.graph-shell .graph-slider input[type="range"]::-moz-range-thumb { + width: 40px; + height: 44px; + border: 0; +} +.graph-slider:has(input:disabled) { + opacity: 0.38; +} +.graph-slider:has(input:disabled) .graph-slider-value { + opacity: 0; +} +.graph-shell .graph-slider input:disabled { + cursor: not-allowed; +} +.graph-error { + color: #c44c4c; + font-size: 12px; + overflow-wrap: anywhere; + margin: 0; +} +.graph-error:empty { + display: none; +} +.graph-status { + position: absolute; + bottom: 12px; + left: 16px; + right: 16px; + pointer-events: none; + color: var(--color-muted); + font: 12px var(--font-ui); + display: flex; + gap: 8px; + align-items: center; + flex-wrap: wrap; +} +.graph-status button { + pointer-events: auto; +} +.graph-link { + stroke: var(--color-line); + stroke-opacity: 0.55; + transition: + stroke-opacity var(--duration-fast, 240ms), + stroke var(--duration-fast, 240ms); +} +.graph-arrow { + fill: var(--color-muted); +} +.graph-node { + fill: var(--color-text); + stroke: var(--color-paper); + stroke-width: 1.5px; + transition: + fill var(--duration-fast, 240ms), + opacity var(--duration-fast, 240ms), + stroke var(--duration-fast, 240ms), + stroke-width var(--duration-fast, 240ms); + cursor: pointer; +} +.graph-node.is-tag { + fill: var(--syntax-inserted); +} +.graph-node.is-attachment { + fill: var(--graph-node-attachment); +} +.graph-node.is-missing { + fill: var(--color-muted); + stroke-dasharray: 2 2; + cursor: default; +} +.graph-node.is-center { + stroke: var(--color-accent); + stroke-width: 2px; +} +.graph-label { + font-size: 10px; + fill: var(--color-muted); + pointer-events: none; + font-family: var(--font-serif); + paint-order: stroke; + stroke: var(--color-paper); + stroke-width: 3px; + stroke-linejoin: round; + transition: + opacity var(--duration-fast, 240ms), + fill var(--duration-fast, 240ms); +} +.graph-dimmed .graph-node:not(.is-highlight) { + opacity: 0.18; +} +.graph-dimmed .graph-label:not(.is-highlight) { + opacity: 0.1 !important; +} +.graph-dimmed .graph-link:not(.is-highlight) { + stroke-opacity: 0.06; +} +.graph-node.is-hovered { + fill: var(--color-accent); + stroke: none; + stroke-width: 0; +} +.graph-link.is-highlight { + stroke: var(--color-accent); + stroke-opacity: 0.9; +} +.graph-label.is-highlight { + fill: var(--color-text); +} +body.graph-modal-open { + overflow: hidden; +} +/* Native modal dialogs sit above the site's custom cursor layer. */ +html.has-custom-cursor .graph-panel:modal, +html.has-custom-cursor .graph-panel:modal * { + cursor: auto !important; +} +html.has-custom-cursor .graph-panel:modal :is(button, input[type="range"]) { + cursor: pointer !important; +} +@media (max-width: 960px) { + .graph-body .page-shell { + flex: 0 0 auto; + min-height: 0; + } + .graph-body .page-main { + padding: 8px 12px max(8px, env(safe-area-inset-bottom)); + height: calc(100dvh - var(--mobile-topbar-height, 64px)); + min-height: 0; + } + .graph-body .home-footer:not(:has(.footer-copyright)) { + display: none; + } + .graph-shell { + flex-direction: column; + border-radius: 0; + min-height: 0; + background: transparent; + box-shadow: none; + } + #graph-controls { + flex: 0 0 auto; + } + #graph-container { + height: auto; + min-height: 0; + } + .graph-panel { + position: fixed; + inset: 0; + width: 100vw; + height: 100dvh; + max-width: none; + max-height: none; + border-radius: 0; + box-shadow: none; + } + .graph-panel::backdrop { + background: var(--color-paper); + } + .graph-panel-header { + padding-top: max(12px, env(safe-area-inset-top)); + } + .graph-panel .graph-section:last-child .graph-section-body { + padding-bottom: max(16px, env(safe-area-inset-bottom)); + } + .graph-shell .graph-toolbar { + position: relative; + left: auto; + top: auto; + display: grid; + grid-template-columns: repeat(4, minmax(0, 1fr)); + gap: 4px 8px; + max-width: none; + width: 100%; + margin-bottom: 8px; + padding: 4px 6px; + } + .graph-shell .graph-toolbar:has(#graph-full-btn:not([hidden])) { + grid-template-columns: repeat(5, minmax(0, 1fr)); + } + .graph-shell .graph-toolbar .notes-action-button { + min-width: 0; + width: 100%; + max-width: none; + height: auto; + min-height: 48px; + display: flex; + flex-direction: column; + gap: 6px; + padding: 4px 0; + border-radius: 8px; + } + .graph-search-panel { + width: 100%; + } + .graph-action-text { + display: block; + font-family: var(--font-ui); + font-size: 11px; + line-height: 1.2; + white-space: nowrap; + max-width: 100%; + overflow: hidden; + text-overflow: ellipsis; + } +} +@media (prefers-reduced-motion: reduce) { + .graph-shell *, + .graph-shell *::before { + transition: none !important; + } +} diff --git a/internal/embedded/static/css/pages/home.css b/internal/embedded/static/css/pages/home.css new file mode 100644 index 00000000..aead190f --- /dev/null +++ b/internal/embedded/static/css/pages/home.css @@ -0,0 +1,127 @@ +.home-main { + max-width: 1160px; + padding: 28px 32px 40px; +} +.github-home { + --home-card: var(--color-paper); + --home-shadow-low: 0 2px 4px color-mix(in srgb, var(--color-text) 7%, transparent), 0 8px 20px color-mix(in srgb, var(--color-text) 4%, transparent); + display: grid; + grid-template-columns: 304px minmax(0, 1fr); + align-items: start; + gap: 32px; + font-family: var(--font-ui); + font-size: 0.95rem; + line-height: 1.55; +} +.github-profile { position: relative; isolation: isolate; padding: 20px 22px 26px; min-width: 0; } +.github-profile::before { content: ""; position: absolute; inset: 82px 0 0; z-index: -1; border-radius: 24px; background: var(--home-card); box-shadow: var(--home-shadow-low); pointer-events: none; } +:root[data-theme="dark"] .github-home { --home-shadow-low: 0 2px 4px rgb(0 0 0 / 0.16), 0 8px 20px rgb(0 0 0 / 0.14); } +.hero-avatar-wrap { + display: block; + aspect-ratio: 1; + border-radius: 50%; + height: 260px; + width: 260px; + background-color: var(--color-paper); + box-shadow: var(--shadow-avatar); + overflow: hidden; + view-transition-name: site-avatar; +} +.hero-avatar { display: block; border-radius: inherit; width: 100%; height: 100%; object-fit: cover; } +.github-profile-name { font-size: 1.75rem; font-weight: 600; line-height: 1.2; margin: 26px 0 16px; } +.github-profile-handle { display: flex; align-items: baseline; gap: 0.5em; color: var(--color-muted); font-family: var(--font-ui); font-size: 1.2rem; font-weight: 400; margin-top: 5px; } +.github-profile-login { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } +.github-profile-separator, .github-profile-pronouns { flex-shrink: 0; font-size: 0.88rem; } +.github-profile-bio { font-size: 1.02rem; margin: 0 0 18px; white-space: pre-line; overflow-wrap: anywhere; } +.github-profile-status { padding: 6px 10px; background: var(--color-accent-soft); border-radius: 10px; margin: 0 0 14px; } +.github-home a { position: relative; isolation: isolate; color: inherit; text-decoration: none; transition: color 180ms ease; } +.github-home a:not(:has(img)) { display: inline-block; max-width: 100%; } +.github-home a:focus-visible { outline: 2px solid var(--color-accent); outline-offset: 4px; } +.github-home [data-tooltip]::after { content: none; } +.github-followers { display: flex; flex-wrap: wrap; align-items: center; gap: 5px; margin: 22px 0; font-size: 0.88rem; color: var(--color-muted); } +.github-followers .material-symbol { font-size: 19px; } +.github-followers strong { color: var(--color-text); font-weight: 600; } +.github-followers a:hover strong, .github-followers a:focus-visible strong { color: inherit; } +.github-home .github-followers a { display: inline-flex; align-items: center; gap: 5px; } +.github-profile-details { list-style: none; padding: 0; margin: 0; font-size: 0.9rem; } +.github-profile-details li { display: flex; align-items: start; gap: 8px; margin: 7px 0; overflow-wrap: anywhere; } +.github-home .github-profile-details a { display: inline-flex; align-items: start; gap: 8px; min-width: 0; } +.github-profile-details a > span:last-child { min-width: 0; } +.github-profile-details .material-symbol { color: var(--color-muted); font-size: 19px; flex: 0 0 19px; margin-top: 2px; } +.github-contact-icon { display: block; width: 19px; height: 19px; flex: 0 0 19px; margin-top: 2px; background-color: currentColor; mask-position: center; mask-repeat: no-repeat; mask-size: contain; } +.github-joined { color: var(--color-muted); } +.github-organizations { margin-top: 24px; } +.github-home h2 { font-size: 1rem; font-weight: 500; margin: 0 0 14px; } +.github-organizations > div { display: flex; gap: 8px; flex-wrap: wrap; } +.github-organizations img { display: block; border-radius: 6px; } +.github-overview { min-width: 0; } +.github-badge { border-radius: 8px; font-size: 0.74rem; padding: 2px 8px; line-height: 1.6; background: color-mix(in srgb, var(--color-muted) 6%, var(--home-card)); color: var(--color-muted); font-weight: 400; white-space: nowrap; } +.github-readme { scroll-margin-top: 80px; } +.github-readme-content { font-size: 0.92rem; min-width: 0; } +.github-readme-content > :first-child { margin-top: 0; } +.github-readme-content > :last-child { margin-bottom: 0; } +.github-readme-content img { max-width: 100%; height: auto; } +.github-home .github-readme-content pre { max-width: 100%; overflow: auto; border: 0; border-radius: 0; padding: 0; margin: 0; background: transparent; box-shadow: none; font-size: clamp(8px, 0.7vw, 10.5px); line-height: 1.35; } +.github-home .github-readme-content pre code { font-size: inherit; } +.github-readme-content table { display: block; max-width: 100%; overflow-x: auto; } +.github-home .github-readme-content a { text-decoration-line: underline; transition: color 200ms ease, text-decoration-color 200ms ease; } +.github-repositories, .github-contributions { margin-top: 32px; } +.github-repository-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; } +.github-repository { background: var(--home-card); box-shadow: var(--home-shadow-low); border-radius: 16px; padding: 20px; min-width: 0; display: flex; flex-direction: column; } +.github-repository-heading { display: flex; align-items: center; gap: 7px; font-family: var(--font-serif); } +.github-repository-heading .material-symbol { font-size: 18px; color: var(--color-muted); flex-shrink: 0; } +.github-home .github-repository-heading > a { display: inline-flex; align-items: start; gap: 7px; min-width: 0; font-weight: 600; overflow-wrap: anywhere; } +.github-repository-heading > a > .material-symbol { margin-top: 3px; } +.github-repository-heading > a > span:last-child { min-width: 0; } +.github-repository-heading > .github-badge { margin-left: auto; } +.github-repository-description { color: var(--color-muted); font-size: 0.86rem; line-height: 1.5; margin: 10px 0 16px; } +.github-fork { color: var(--color-muted); font-size: 0.75rem; margin: 5px 0 0; } +.github-topics { display: flex; flex-wrap: wrap; gap: 5px; margin: 0 0 12px; } +.github-topics > span { background: color-mix(in srgb, var(--color-muted) 6%, var(--home-card)); color: var(--color-muted); border-radius: 8px; font-size: 0.7rem; padding: 2px 8px; overflow-wrap: anywhere; } +.github-repository-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 14px; margin-top: auto; padding-top: 10px; color: var(--color-muted); font-size: 0.76rem; } +.github-repository-meta > span, .github-home .github-repository-meta a { display: inline-flex; align-items: center; gap: 4px; } +.github-repository-meta .material-symbol { font-size: 16px; } +.github-language-dot { width: 9px; height: 9px; border-radius: 50%; background: var(--color-accent); display: inline-block; margin-right: 3px; } +.github-contributions { background: var(--home-card); box-shadow: var(--home-shadow-low); border-radius: 20px; padding: 24px; } +.github-calendar-scroll { overflow-x: auto; } +.github-calendar { display: flex; gap: 3px; width: 100%; min-width: max-content; } +.github-calendar-week { display: grid; flex: 1; min-width: 10px; grid-template-rows: repeat(7, auto); gap: 3px; } +.github-calendar-day, .github-calendar-key > i { display: block; width: 10px; height: 10px; border-radius: 2px; background: var(--color-accent-soft); } +.github-calendar-day { width: 100%; height: auto; aspect-ratio: 1; } +.github-home [data-level="1"] { background: color-mix(in srgb, var(--color-accent) 35%, var(--color-page)); } +.github-home [data-level="2"] { background: color-mix(in srgb, var(--color-accent) 55%, var(--color-page)); } +.github-home [data-level="3"] { background: color-mix(in srgb, var(--color-accent) 78%, var(--color-page)); } +.github-home [data-level="4"] { background: var(--color-accent); } +.github-calendar-key { display: flex; gap: 4px; align-items: center; justify-content: end; margin-top: 10px; font-size: 0.7rem; color: var(--color-muted); } +.github-home-empty { display: block; min-height: 50vh; padding-top: 8vh; } +@media (max-width: 960px) { + .home-main { max-width: 850px; padding-top: 12px; } + .github-home { grid-template-columns: 200px minmax(0, 1fr); gap: 24px; } + .github-profile { padding: 20px 20px 24px; } + .github-profile::before { inset-block-start: 60px; } + .hero-avatar-wrap { width: 160px; height: 160px; } + .github-repository-grid { grid-template-columns: minmax(0, 1fr); } +} +@media (max-width: 640px) { + .home-body .site-header { display: block; padding: 8px 20px 0; } + .home-body .site-header .site-nav { flex-wrap: nowrap; justify-content: flex-start; gap: 20px; width: 100%; min-height: 44px; overflow-x: auto; scrollbar-width: none; } + .home-body .site-nav > * { flex-shrink: 0; } + .home-main { padding: 12px 20px 32px; } + .github-home { display: block; } + .github-profile { padding: 20px; } + .github-profile::before { inset-block-start: 0; border-radius: 20px; } + .github-profile-identity { display: grid; grid-template-columns: 88px minmax(0, 1fr); gap: 16px; align-items: center; } + .hero-avatar-wrap { width: 88px; height: 88px; } + .github-profile-name { font-size: 1.5rem; margin: 0; } + .github-profile-handle { font-size: 1.1rem; } + .github-profile-bio { margin-top: 20px; } + .github-profile-status { margin-top: 16px; } + .github-followers { margin: 18px 0; } + .github-profile-details { display: flex; flex-wrap: wrap; column-gap: 18px; } + .github-profile-details li { max-width: 100%; } + .github-organizations { margin-top: 16px; } + .github-overview { margin-top: 24px; } + .github-repository-grid { gap: 12px; } + .github-repository { padding: 18px; } + .github-contributions { padding: 20px 18px; } +} diff --git a/internal/embedded/static/css/pages/memos.css b/internal/embedded/static/css/pages/memos.css new file mode 100644 index 00000000..27bb8197 --- /dev/null +++ b/internal/embedded/static/css/pages/memos.css @@ -0,0 +1,216 @@ +/* Memos inherit Daybook's fonts and all four theme palettes. */ +.memos-body .page-main { + padding-left: calc(var(--side-rail-width) + 24px); + padding-right: 40px; +} +.memos-page { + --memo-gutter: 24px; + --memo-header-height: 72px; + display: grid; + grid-template-columns: minmax(0, 44rem) 16rem; + align-items: stretch; + max-width: 60rem; + margin: 0 auto; + border: 1px solid var(--color-line); +} +.memos-feed { min-width: 0; } +.memos-header { display: flex; align-items: stretch; justify-content: space-between; min-height: var(--memo-header-height); } +.memos-heading { display: flex; align-items: baseline; align-self: center; gap: 10px; padding: 16px var(--memo-gutter); white-space: nowrap; } +.memos-header h1 { font-family: var(--font-serif); font-size: var(--note-title-size); line-height: 1.2; margin: 0; } +.memos-count { color: var(--color-muted); font-size: .78rem; font-variant-numeric: tabular-nums; } +.memos-toolbar { display: flex; width: 55%; max-width: 22rem; min-width: 0; border-left: 1px solid var(--color-line); } +.memos-search { display: flex; flex: 1; min-width: 0; align-items: center; gap: 10px; padding: 12px 20px; } +.memos-search .material-symbol { font-size: 1.2rem; color: var(--color-muted); } +.memos-search input { background: none; border: 0; outline: none; color: var(--color-text); width: 100%; min-width: 0; font: inherit; font-size: .9rem; } +.memos-search:focus-within { box-shadow: inset 0 -2px var(--color-accent); } +.memos-search input::placeholder { color: var(--color-muted); opacity: .8; } +.memos-filter-toggle { display: none; } +.memos-active-filters { display: flex; justify-content: space-between; align-items: center; gap: 12px; padding: 10px var(--memo-gutter); border-top: 1px solid var(--color-line); color: var(--color-muted); font-size: .85rem; } +.memos-active-filters [data-memos-active-label] { min-width: 0; overflow-wrap: anywhere; } +.memos-active-filters button { flex-shrink: 0; } +.memos-active-filters button, .memos-all-dates { border: 0; padding: 4px 0; background: none; color: var(--color-accent); font: inherit; cursor: pointer; } +.memos-cards { display: flex; flex-direction: column; } +.memo-card { display: grid; grid-template-columns: 36px minmax(0, 1fr); gap: 14px; padding: 24px var(--memo-gutter) 26px; border-top: 1px solid var(--color-line); min-width: 0; } +.memo-avatar-column { padding-top: 1px; } +.memo-entry { min-width: 0; } +.memo-entry-header { display: flex; align-items: baseline; flex-wrap: wrap; gap: 4px 12px; min-height: 28px; } +.memo-author { display: flex; align-items: center; gap: 10px; color: var(--color-muted); font-size: .88rem; } +.memo-avatar { width: 30px; height: 30px; border-radius: 50%; object-fit: cover; flex-shrink: 0; } +.memo-avatar-column .memo-avatar { display: block; width: 36px; height: 36px; } +.memo-entry-header .memo-author { color: var(--color-text); font-weight: 600; } +.memo-card .memo-content { margin: 4px 0 0; font-size: var(--note-text-size); overflow-wrap: anywhere; } +.memo-card .memo-content > *, .memo-card .memo-content p { margin-bottom: 16px; } +.memo-content > :first-child { margin-top: 0; } +.memo-card .memo-content > :last-child, .memo-card .memo-content > :last-child > p:last-child { margin-bottom: 0; } +.memo-content img { max-width: 100%; } +/* The content width is the reference for a single 4:3 preview cell. */ +.memos-page .memo-content { container-type: inline-size; } +.memos-page .memo-content .memo-photo-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; } +.memos-page .memo-content .memo-photo-grid > * { margin: 0; min-width: 0; } +.memos-page .memo-content .memo-photo-grid img { display: block; width: 100%; height: auto; aspect-ratio: 4 / 3; object-fit: cover; border-radius: 6px; } +.memo-content .md-gallery { max-width: 100%; } +.memos-page .memo-photo-tile { position: relative; width: fit-content; max-width: calc(50cqw - 4px); overflow: hidden; border-radius: 6px; } +.memos-page span.memo-photo-tile { display: inline-block; vertical-align: middle; } +.memos-page .memo-photo-grid .memo-photo-tile { width: auto; max-width: 100%; } +.memos-page .memo-photo-tile img { display: block; width: auto; max-height: calc((100cqw - 8px) * .375); margin: 0; transition: transform 220ms cubic-bezier(.22, .61, .36, 1), filter 220ms cubic-bezier(.22, .61, .36, 1); } +.memos-page .memo-content .memo-photo-tile figcaption { padding: 24px 16px 12px; } +.memos-page .has-more-photos::before { + content: ""; + position: absolute; inset: 0 0 auto; height: 48px; max-height: 50%; z-index: 1; + background: linear-gradient(to bottom, rgb(0 0 0 / .55), transparent); + pointer-events: none; +} +.memos-page .memo-content .memo-more-photos { + position: absolute; right: 8px; top: 8px; z-index: 1; + display: inline-flex; align-items: center; justify-content: center; + min-width: 32px; min-height: 28px; padding: 2px 10px; + background: none; color: white; + font-family: var(--font-ui); font-size: .78rem; line-height: 1.4; text-decoration: none; +} +.memo-photo-count, .memo-photo-hint { overflow: hidden; white-space: nowrap; transition: opacity 220ms cubic-bezier(.22, .61, .36, 1); } +/* Only the hint changes width; crossfading the overlaid count avoids a width overshoot. */ +.memo-photo-count { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; font-size: 1.1rem; opacity: 1; } +.memo-photo-hint { max-width: 0; opacity: 0; transition: max-width 220ms cubic-bezier(.22, .61, .36, 1), opacity 220ms cubic-bezier(.22, .61, .36, 1); } +.memo-photo-tile:hover .memo-photo-count, .memo-photo-tile:focus-within .memo-photo-count { opacity: 0; } +.memo-photo-tile:hover .memo-photo-hint, .memo-photo-tile:focus-within .memo-photo-hint { max-width: 16em; opacity: 1; } +.memos-page .has-more-photos:hover img, .memos-page .has-more-photos:focus-within img { transform: scale(1.025); filter: brightness(.9); } +@media (prefers-reduced-motion: reduce) { + .memos-page .memo-photo-tile img, .memo-photo-count, .memo-photo-hint { transition: none; } + .memos-page .has-more-photos:hover img, .memos-page .has-more-photos:focus-within img { transform: none; } +} +html[data-reduced-motion="true"] .memos-page .memo-photo-tile img, +html[data-reduced-motion="true"] .memo-photo-count, +html[data-reduced-motion="true"] .memo-photo-hint { transition: none; } +html[data-reduced-motion="true"] .memos-page .has-more-photos img { transform: none; } + +.memo-footer { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 8px 16px; margin-top: 18px; color: var(--color-muted); font-size: var(--note-text-size); line-height: 1.75; } +.memo-labels { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 12px; } +.memo-location { display: inline-flex; align-items: center; gap: 3px; } +.memo-location .material-symbol { font-size: 1em; } +.memo-tag { padding: 0; background: none; border: 0; color: var(--color-accent); font: inherit; cursor: pointer; } +.memo-dates { display: flex; flex-direction: column; align-items: flex-end; gap: 2px; margin-left: auto; } +.memo-updated { color: var(--color-muted); font-size: .75rem; } +.memo-permalink { display: inline-flex; align-items: center; gap: 5px; margin-left: auto; color: var(--color-muted); font-size: .75rem; font-variant-numeric: tabular-nums; text-decoration: none; white-space: nowrap; } +.memo-permalink:hover { color: var(--color-accent); } +.memo-permalink .material-symbol { font-size: .9rem; } +.memos-aside { min-width: 0; border-left: 1px solid var(--color-line); } +.memos-aside .memos-filters { position: sticky; top: 88px; } +.memos-filters { color: var(--color-muted); font-size: .85rem; } +.memos-calendar-heading { display: flex; align-items: center; justify-content: space-between; gap: 8px; min-height: var(--memo-header-height, 64px); padding: 12px 16px; border-bottom: 1px solid var(--color-line); color: var(--color-text); } +.memos-calendar-heading button { display: flex; padding: 4px; border: 0; background: none; color: var(--color-muted); cursor: pointer; } +.memos-calendar-heading button:disabled { opacity: .3; cursor: default; } +.memos-calendar-heading button .material-symbol { font-size: 1.2rem; } +.memos-calendar-grid { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 4px 0; padding: 16px 16px 0; text-align: center; } +.memos-calendar-grid > span { display: grid; place-items: center; min-height: 30px; font-size: .76rem; color: var(--color-faint); } +.memos-calendar-grid > .memos-weekday { color: var(--color-muted); padding-bottom: 4px; } +.memos-calendar-grid button { position: relative; min-width: 0; min-height: 30px; border: 0; border-radius: 6px; background: none; color: var(--color-text); font: inherit; font-variant-numeric: tabular-nums; cursor: pointer; } +.memos-calendar-grid button::after { position: absolute; content: ""; width: 3px; height: 3px; bottom: 2px; left: calc(50% - 1.5px); background: var(--color-accent); border-radius: 50%; } +.memos-calendar-grid button:hover { background: var(--color-accent-soft); } +.memos-calendar-grid button[aria-pressed="true"] { background: var(--color-accent); color: var(--color-paper); } +.memos-calendar-grid button[aria-pressed="true"]::after { background: currentColor; } +.memos-all-dates { font-size: .8rem; margin: 12px 20px 20px; } +.memos-tag-filter { border-top: 1px solid var(--color-line); border-bottom: 1px solid var(--color-line); } +.memos-tag-filter h2 { color: var(--color-text); font: inherit; margin: 0; padding: 16px 20px; border-bottom: 1px solid var(--color-line); } +.memos-filter-tags { font-size: var(--note-text-size); line-height: 1.75; display: flex; flex-wrap: wrap; gap: 8px 12px; padding: 16px 20px 20px; } +.memos-filter-tags button { display: inline-flex; align-items: baseline; gap: 6px; font: inherit; border: 0; padding: 3px 0; background: none; color: var(--color-muted); cursor: pointer; } +.memos-filter-tags button[aria-pressed="true"], .memos-filter-tags button:hover { color: var(--color-accent); } +.memos-filter-tags small { font-size: .75rem; opacity: .65; } +.memos-empty { color: var(--color-muted); margin: 0; padding: 28px var(--memo-gutter); border-top: 1px solid var(--color-line); } +.memos-empty-state { display: flex; flex-direction: column; align-items: center; gap: 28px; padding: 48px var(--memo-gutter); border-top: 1px solid var(--color-line); color: var(--color-muted); text-align: center; } +.memos-empty-scene { display: block; width: min(100%, 28rem); height: auto; flex-shrink: 0; } +.memos-empty-state p { margin: 0; } +.memos-page [hidden], .memo-content [data-memo-overflow] { display: none !important; } +.memos-page button:focus-visible, .memos-page a:focus-visible, .memos-filters button:focus-visible { outline: 2px solid var(--color-accent); outline-offset: 3px; } +::highlight(memo-search) { background: var(--color-marker); color: var(--color-text); } +.memo-search-highlight { background: var(--color-marker); color: inherit; } +.memo-detail-back { display: flex; align-items: center; color: var(--color-muted); text-decoration: none; } +@media (max-width: 1100px) and (min-width: 961px) { + .memos-body .page-main { padding-left: 210px; padding-right: 24px; } + .memos-page { grid-template-columns: minmax(0, 1fr) 13rem; --memo-gutter: 20px; } +} +@media (max-width: 960px) { + .memos-body .page-main { padding: 24px 20px 56px; } + .memos-page { display: block; max-width: var(--notes-content-width); } + .memos-aside { display: none; } + .memos-filter-toggle { display: grid; place-items: center; flex-shrink: 0; width: 44px; border: 0; border-left: 1px solid var(--color-line); color: var(--color-muted); background: none; cursor: pointer; } + .memos-filter-toggle .material-symbol { font-size: 1.15rem; } + .memos-toolbar { flex: 1; } + .memos-filters { max-width: 24rem; margin: 0 auto; font-size: .95rem; } + .memos-calendar-grid > span, .memos-calendar-grid button { min-height: 40px; } + .memos-filter-tags { gap: 10px 16px; } +} +@media (max-width: 600px) { + .memos-body .page-main { padding: 0 0 40px; } + .memos-page { --memo-gutter: 16px; --memo-header-height: 64px; border-top: 0; border-left: 0; border-right: 0; } + .memos-header h1 { font-size: 1.25rem; } + .memos-heading { gap: 8px; } + .memos-search { padding: 12px; gap: 6px; } + .memos-search input { font-size: .82rem; } + .memo-card { grid-template-columns: 30px minmax(0, 1fr); gap: 10px; padding-top: 20px; padding-bottom: 22px; } + .memo-avatar-column .memo-avatar { width: 30px; height: 30px; } + .memo-entry-header { gap: 4px 8px; } + .memo-permalink { font-size: .7rem; } +} + +.memo-body .memo-location, .memo-body .note-tag-capsule { font-size: var(--note-text-size); line-height: 1.75; } + +/* Timeline and detail share one post layout and a quiet five-action footer. */ +.memo-card[data-memo-card] { cursor: pointer; } +.memo-card .memo-avatar { border-radius: 8px; } +.memo-card .memo-tag { text-decoration: none; } +.memo-card .memo-updated, +.memo-card .memo-number, +.memo-card [data-like-count], +.memos-count .memo-number { + font-family: "Cormorant Garamond Meta", var(--font-cormorant); + font-style: italic; + font-weight: 600; + font-synthesis: none; +} +.memo-permalink, .memo-updated, .memos-count .memo-number { font-size: clamp(1rem, 1.3vw, 1.12rem); } +.memo-actions { + display: flex; + align-items: center; + justify-content: space-between; + gap: 8px; + margin-top: 18px; + color: var(--color-muted); +} +.memo-actions .article-action { min-width: 32px; min-height: 32px; gap: 6px; font-size: clamp(1rem, 1.3vw, 1.12rem); } +.memo-actions .material-symbol { font-size: 1.15rem; } +.memo-actions > :last-child::after { left: auto; right: 0; transform: none; } +.memo-actions .memo-view-action, .memo-actions .is-unavailable { cursor: default; } +.memo-actions .is-unavailable { opacity: .5; } +.memo-actions .article-action:focus-visible, .memo-permalink:focus-visible { outline: 2px solid var(--color-accent); outline-offset: 3px; } +.memo-detail-layout { display: grid; grid-template-columns: minmax(0, 44rem) 16rem; max-width: 60rem; margin: 0 auto; border: 1px solid transparent; } +.memo-detail-page { --memo-gutter: 24px; min-width: 0; outline: 1px solid var(--color-line); } +.memo-detail-toolbar { display: flex; align-items: center; gap: 16px; min-height: 72px; box-sizing: border-box; padding: 16px var(--memo-gutter); } +.memo-detail-toolbar h1 { font-size: 1.2rem; margin: 0; font-family: var(--font-serif); } +.memo-detail-toolbar .bilingual-toggle-btn { margin-left: auto; } +.memo-detail-post .post-content { margin-top: 4px; } +.memo-detail-page .post-comments { margin: 0; padding: 24px var(--memo-gutter); border-top: 1px solid var(--color-line); scroll-margin-top: 80px; } +.memo-body .page-main { padding-left: calc(var(--side-rail-width) + 24px); padding-right: 40px; } +@media (max-width: 960px) { + .memo-body .page-main { padding: 24px 20px 56px; } +} +@media (max-width: 600px) { + .memo-body .page-main { padding: 0 0 40px; } + .memo-detail-page { --memo-gutter: 16px; border: 0; } + .memo-actions { gap: 4px; } + .memo-permalink, .memo-updated { font-size: 1rem; } +} + +.memos-filters [data-memo-tag], .memos-filters [data-memos-date], .memo-labels button { touch-action: manipulation; user-select: none; -webkit-touch-callout: none; } +@media (max-width: 1100px) and (min-width: 961px) { + .memo-body .page-main { padding-left: 210px; padding-right: 24px; } + .memo-detail-layout { grid-template-columns: minmax(0, 1fr) 13rem; } + .memo-detail-page { --memo-gutter: 20px; } +} +@media (max-width: 960px) { + .memo-detail-layout { display: block; max-width: var(--notes-content-width); } +} +@media (max-width: 600px) { + .memo-detail-layout { border: 0; } + .memo-detail-page { outline: none; } + .memo-detail-toolbar { min-height: 64px; } +} diff --git a/internal/embedded/static/css/pages/note.css b/internal/embedded/static/css/pages/note.css new file mode 100644 index 00000000..3c5f5ae6 --- /dev/null +++ b/internal/embedded/static/css/pages/note.css @@ -0,0 +1,922 @@ +.note-detail-page { + position: relative; + max-width: min(var(--note-body-width), 100%); +} + +.note-detail { + margin-left: 0; + max-width: var(--note-body-width); + min-width: 0; + position: relative; + width: min(var(--note-body-width), 100%); +} + +.note-toc-wrapper { + pointer-events: auto; + position: static; + width: 100%; +} + +.note-sticky-column { + display: flex; + flex-direction: column; + pointer-events: auto; + position: static; +} + +.note-toc-stage { + position: relative; + width: 100%; +} + +.note-toc { + clip-path: inset(0); + color: var(--color-muted); + font-family: var(--font-ui); + font-size: 0.78rem; + line-height: 1.45; + margin-bottom: clamp(2rem, 5vw, 3.2rem); + max-width: 100%; + opacity: 1; + transform: translateY(0); + transition: + color 160ms ease, + opacity var(--reading-toc-rail-state-duration) ease, + transform var(--reading-toc-rail-state-duration) var(--reading-toc-rail-state-ease), + clip-path var(--reading-toc-rail-state-duration) var(--reading-toc-rail-state-ease), + visibility 0s linear 0s; + visibility: visible; + width: 100%; +} + +.note-toc-panel { + max-height: none; +} + +.note { + min-width: 0; + position: relative; +} + +.note-title-wrapper { + position: relative; +} + +.note-back-link { + align-items: center; + border-radius: 999px; + color: var(--color-muted); + display: inline-flex; + height: calc(var(--note-title-size) * 1.15); + justify-content: center; + left: -3.5rem; + position: absolute; + text-decoration: none; + top: 0; + transition: color 160ms ease; + width: calc(var(--note-title-size) * 1.15); +} + +.note-back-link .material-symbol { + font-size: var(--note-title-size); +} + +.note-back-link:hover, +.note-back-link:focus-visible { + color: var(--color-hover-text); +} + +.note-back-link:hover .material-symbol, +.note-back-link:focus-visible .material-symbol { + font-variation-settings: "FILL" 1, "wght" 400, "GRAD" 0, "opsz" 24; +} + +.note-back-link:focus-visible { + outline: 1px solid var(--color-accent); + outline-offset: 4px; +} + +.note-header { + margin-bottom: clamp(2.5rem, 5vw, 4.5rem); +} + +.note-title { + color: var(--color-text); + font-family: var(--font-serif); + font-size: var(--note-title-size); + font-weight: 700; + hyphens: auto; + letter-spacing: 0; + line-height: 1.15; + margin: 0; + max-width: 100%; + overflow-wrap: anywhere; + word-break: normal; +} + +.note-title > span { + box-sizing: content-box; + display: inline-block; + max-width: 100%; + padding-right: 0.04em; + vertical-align: top; + white-space: normal; +} + +.article-meta-rows { + margin: 1.2rem 0 0; + display: flex; + flex-direction: column; + gap: 0.6rem; + color: var(--color-muted); + font-family: "Cormorant Garamond Meta", var(--font-serif); + font-style: italic; + font-weight: 600; + font-size: clamp(0.95rem, 1.3vw, 1.12rem); + line-height: 1; +} + +.article-shared-meta, +.article-stagger-meta { + display: flex; + flex-wrap: wrap; + gap: 0.8rem; + align-items: center; +} + +.article-shared-meta > *, +.article-stagger-meta > * { + display: inline-flex; + align-items: center; + gap: 0.3em; +} + +.notes-item-pin { + background-color: var(--color-muted); + display: inline-block; + height: 1.1em; + mask-image: url('/icons/ui/pin.svg'); + mask-position: center; + mask-repeat: no-repeat; + mask-size: contain; + width: 1.1em; +} + +.article-actions-meta .article-action, +.article-actions-meta .bilingual-toggle-btn { + white-space: nowrap; +} + +.article-actions-meta .bilingual-toggle-btn { + width: auto; + height: auto; + min-height: 28px; + gap: .35em; + transform: none; +} + +.article-actions-meta .bilingual-toggle-btn .material-symbol { + font-size: 1.15em; +} + +.article-actions-meta .is-unavailable { + cursor: default; + opacity: .5; +} + +.notes-item-music, +.notes-item-bilingual { + color: var(--color-muted); + font-size: 1.1em; + line-height: 1; +} + +.note-summary { + color: var(--color-muted); + font-size: 0.94rem; + line-height: 1.75; + margin: 1.25rem 0 0; + max-width: 42rem; +} + +.note-summary::first-letter { + color: var(--color-accent); + float: left; + font-family: var(--font-ui); + font-size: 3.4em; + font-style: italic; + font-weight: 700; + line-height: 0.92; + margin-top: 4px; + padding: 4px 10px 0 0; +} + +@media (min-width: 1200px) { + .note-detail-page { + max-width: var(--note-body-width); + } + + .note-detail-page .notes-aside { + height: 100%; + left: calc(100% + clamp(28px, 3vw, 48px)); + margin-top: 0; + position: absolute; + top: 0; + width: var(--note-toc-width); + } + + .note-toc-wrapper { + --reading-toc-rail-eligible: 1; + --reading-toc-rail-direction: 1; + --reading-toc-rail-line-inset: 12px; + + pointer-events: auto; + position: sticky; + top: 88px; + width: var(--note-toc-width); + z-index: 10; + } + + .note-sticky-column { + pointer-events: auto; + position: static; + } + + .note-toc-stage { + width: var(--note-toc-width); + } + + .note-toc { + margin-bottom: 0; + max-width: none; + width: var(--note-toc-width); + } + + .note-toc-panel { + max-height: calc(100dvh - 88px - 3rem); + } + + .note-toc-stage.has-reading-rail { + height: var(--reading-toc-rail-height); + } + + .note-toc-stage.has-reading-rail .note-toc { + left: 0; + position: absolute; + top: 0; + } + + .note-toc-stage.has-reading-rail .note-toc-panel { + max-height: calc(var(--reading-toc-rail-height) - 3rem); + } + + .note-toc-stage.has-reading-rail.is-reading:not(.is-hovered) .note-toc { + pointer-events: none; + /* transition visibility to wait for children to animate out */ + transition: visibility 0s linear calc(var(--reading-toc-rail-state-duration) + 400ms); + visibility: hidden; + } + + .note-toc-stage.has-reading-rail.is-reading .note-toc-header, + .note-toc-stage.has-reading-rail.is-reading .note-toc-indicator, + .note-toc-stage.has-reading-rail.is-reading .note-toc-reading-controls { + transition: + opacity var(--reading-toc-rail-state-duration) ease, + transform var(--reading-toc-rail-state-duration) var(--reading-toc-rail-state-ease); + } + + .note-toc-stage.has-reading-rail.is-reading .note-toc-panel li { + transition: + opacity var(--reading-toc-rail-state-duration) ease, + transform var(--reading-toc-rail-state-duration) var(--reading-toc-rail-state-ease); + transition-delay: calc(var(--toc-index, 0) * 15ms); + } + + .note-toc-stage.has-reading-rail.is-reading:not(.is-hovered) .note-toc-header, + .note-toc-stage.has-reading-rail.is-reading:not(.is-hovered) .note-toc-reading-controls, + .note-toc-stage.has-reading-rail.is-reading:not(.is-hovered) .note-toc-panel li { + opacity: 0; + transform: translate3d(calc(var(--reading-toc-rail-collapse-shift) * -1), 0, 0); + } + + .note-toc-stage.has-reading-rail.is-reading:not(.is-hovered) .note-toc-indicator { + opacity: 0; + transform: translate3d(calc(var(--reading-toc-rail-collapse-shift) * -1), var(--indicator-y, 0), 0) scaleY(var(--indicator-scale, 1)); + } + + /* State: Reading & Not Hovered (Visible, In Place) */ + .note-toc-stage.has-reading-rail.is-reading:not(.is-hovered) .reading-toc-rail { + clip-path: inset(calc(-1 * var(--reading-toc-rail-overflow, 0px)) 0); + opacity: 1; + pointer-events: auto; + transform: translate3d(0, 0, 0); + transition: opacity 300ms ease; /* fade in quickly without delay */ + } + + /* State: Reading & Hovered (Invisible, In Place) */ + .note-toc-stage.has-reading-rail.is-reading.is-hovered .reading-toc-rail { + clip-path: inset(calc(-1 * var(--reading-toc-rail-overflow, 0px)) 0); + opacity: 0; + pointer-events: none; + transform: translate3d(0, 0, 0); + transition: opacity 300ms ease; /* fade out instantly when hovered */ + } + + /* Stagger animation for the rail text */ + .reading-toc-rail-current { + opacity: 0; + transition: opacity 300ms ease; /* default exit: instant fade out with the rail */ + } + + .note-toc-stage.has-reading-rail.is-reading:not(.is-hovered) .reading-toc-rail-current { + opacity: 1; + transition: opacity 300ms ease 300ms; /* wait 300ms for rail to appear, then fade in */ + } + + /* We remove the CSS hover logic for reading-toc-rail, JS will handle it now */ +} + +@media (max-width: 1199px) { + .note-toc-wrapper { + display: none; + } + + .note-detail-page { + max-width: min(var(--note-body-width), 100%); + } + + .note-detail { + margin-left: 0; + } +} + +@media (max-width: 960px) { + .note-detail-page { + max-width: var(--note-body-width); + } + + .note-detail { + margin-left: 0; + width: 100%; + } + + .note-back-link { + margin-bottom: 1rem; + position: static; + } +} + +html[data-reduced-motion="true"] .note-toc-stage .note-toc { + transition: none !important; +} + +@media (prefers-reduced-motion: reduce) { + .note-toc-stage .note-toc { + transition: none !important; + } +} + +@media (max-width: 960px) { + .article-meta-rows { + font-size: 0.875rem; + gap: 0.5rem; + } + + .article-shared-meta, + .article-stagger-meta { + gap: 0.65em; + } +} + +.note-tags { + margin-top: clamp(3rem, 5vw, 4.5rem); +} + +.note-tags-divider { + border: 0; + border-top: 1px dashed var(--color-line); + margin: 0 0 1.5rem; +} + +.note-tags-list { + display: flex; + flex-wrap: wrap; + gap: 0.8rem; +} + +.note-tag-capsule { + background: var(--color-paper); + border: 1px solid var(--color-line); + border-radius: 999px; + color: var(--color-muted); + display: inline-flex; + font-family: var(--font-ui); + font-size: 0.85rem; + padding: 0.35rem 0.9rem; + text-decoration: none; + transition: + background 160ms ease, + border-color 160ms ease, + color 160ms ease; +} + +.note-tag-capsule:hover, +.note-tag-capsule:focus-visible { + border-color: var(--color-accent); + color: var(--color-accent); +} + +.post-comments { + border-top: 1px dashed var(--color-line); + margin-top: clamp(3.5rem, 6vw, 5rem); + padding-top: clamp(2rem, 4vw, 3rem); +} + +#giscus { + min-height: 150px; +} + +#giscus .giscus-frame { + display: block; + width: 100%; + min-height: 150px; + border: 0; + color-scheme: inherit; +} + +#giscus .giscus-frame--loading { + opacity: 0; +} + +/* Right Reading Controls */ +.note-right-controls { + display: flex; + flex-direction: column; + gap: 16px; + margin-top: 16px; + padding-left: 2px; + opacity: 1; + transition: opacity 0.3s ease; +} + +.note-rc-progress { + display: flex; + align-items: center; + gap: 12px; +} + +.note-rc-ring { + transform: rotate(-90deg); + width: 24px; + height: 24px; +} + +.note-rc-ring-bg { + fill: none; + stroke: var(--color-line); + stroke-width: 2.5; +} + +.note-rc-ring-fg { + fill: none; + stroke: var(--color-accent); + stroke-width: 2.5; + stroke-dasharray: 62.8318; + stroke-dashoffset: 62.8318; + stroke-linecap: round; + transition: stroke-dashoffset 0.15s cubic-bezier(0.2, 0, 0, 1); +} + +.note-rc-text { + font-family: var(--font-ui); + font-size: 0.85rem; + color: var(--color-muted); + font-weight: 500; + font-variant-numeric: tabular-nums; +} + +.note-rc-btn { + background: transparent; + border: none; + padding: 0; + display: flex; + align-items: center; + gap: 8px; + color: var(--color-muted); + font-family: var(--font-ui); + font-size: 0.82rem; + font-weight: 500; + cursor: pointer; + transition: color 160ms ease; + width: fit-content; +} + +.note-rc-btn:hover, +.note-rc-btn:focus-visible { + color: var(--color-accent); +} + +.note-rc-btn .material-symbol { + font-size: 1.15rem; +} + +/* Mobile Reading Controls Unified Fixed Component */ +.mobile-reading-controls { + display: none; +} + +@media (max-width: 960px) { + .note-right-controls { + display: none; + } + + .mobile-reading-controls { + display: block; + position: fixed; + top: var(--mobile-topbar-height); + left: 0; + width: 100%; + height: 32px; + z-index: 2005; + overflow: hidden; + background: transparent; + transform: translateY(0); + transition: + transform 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms, + height 300ms cubic-bezier(0.4, 0, 0.2, 1) 300ms; + } + + body.mobile-top-bar-hidden .mobile-reading-controls { + height: 2px; + transform: translateY(calc(var(--mobile-topbar-height) * -1)); + transition: + height 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms, + transform 300ms cubic-bezier(0.4, 0, 0.2, 1) 300ms; + } + + body.is-mobile-drawer-open .mobile-reading-controls { + height: 2px; + transform: translateY(0); + transition: height 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; + } + + body.is-at-top .mobile-reading-controls, + body.is-scrolling-down:not(.mobile-top-bar-hidden) .mobile-reading-controls { + transform: translateY(-32px); + transition: transform 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; + } + + .rc-layer { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 32px; + display: flex; + align-items: center; + justify-content: space-between; + } + + .rc-base { + background: var(--color-page); + color: var(--color-text); + border-bottom: 1px solid var(--color-line); + } + + .rc-progress { + background: var(--color-text); + color: var(--color-page); + pointer-events: none; + clip-path: inset(0 calc(100% - var(--reading-progress)) 0 0); + transition: background-color 300ms cubic-bezier(0.4, 0, 0.2, 1) 300ms; + } + + body.mobile-top-bar-hidden .rc-progress, + body.is-mobile-drawer-open .rc-progress { + background: var(--color-accent); + transition: background-color 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; + } + + .mobile-reading-btn { + align-items: center; + background: transparent; + border: 0; + color: inherit; + cursor: pointer; + display: flex; + height: 100%; + justify-content: center; + padding: 0 24px; + transition: opacity 160ms ease; + } + + .mobile-reading-btn:active { + opacity: 0.6; + } + + .mobile-reading-btn .material-symbol { + font-size: 1.25rem; + } + + .mobile-reading-percentage { + color: inherit; + font-family: var(--font-ui); + font-size: 0.85rem; + font-weight: 500; + } +} + +/* ----------------------------------------------------------------------------- + * Mobile TOC Bottom Sheet + * -------------------------------------------------------------------------- */ + +.mobile-toc-fab, +.mobile-toc-sheet { + display: none; +} + +@media (max-width: 1199px) { + .mobile-toc-fab { + align-items: center; + background: var(--color-page); + border: 1px solid var(--color-line); + border-right: none; + border-radius: 24px 0 0 24px; + bottom: calc(env(safe-area-inset-bottom) + 120px); + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08); + color: var(--color-text); + cursor: pointer; + display: flex; + height: 48px; + justify-content: center; + padding: 0 12px 0 16px; + position: fixed; + right: 0; + transform: translateX(0); + transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1); + width: auto; + z-index: 90; + } + + .mobile-toc-fab.is-hidden { + transform: translateX(100%); + } + + .mobile-toc-sheet { + display: block; + height: 100%; + height: 100dvh; + left: 0; + overflow: hidden; + pointer-events: none; + position: fixed; + top: 0; + width: 100%; + z-index: 100; + } + + .mobile-toc-backdrop { + background: rgba(0, 0, 0, 0.4); + height: 100%; + left: 0; + opacity: 0; + position: absolute; + top: 0; + transition: opacity 0.3s ease; + width: 100%; + } + + .mobile-toc-sheet.is-open .mobile-toc-backdrop { + opacity: 1; + pointer-events: auto; + } + + .mobile-toc-panel { + background: var(--color-page); + border-radius: 24px 24px 0 0; + bottom: 0; + box-shadow: 0 -4px 16px rgba(0, 0, 0, 0.1); + display: flex; + flex-direction: column; + max-height: min(42rem, calc(85dvh - env(safe-area-inset-top))); + overflow: hidden; + position: absolute; + transform: translateY(100%); + transition: transform 0.4s cubic-bezier(0.2, 0, 0, 1); + width: 100%; + } + + .mobile-toc-sheet.is-open .mobile-toc-panel { + pointer-events: auto; + transform: translateY(0); + } + + .mobile-toc-sheet.is-dragging .mobile-toc-panel { + transition: none; /* Disable transition during drag */ + } + + .mobile-toc-drag-handle { + background: var(--color-muted); + border-radius: 2px; + cursor: grab; + height: 4px; + margin: 12px auto; + width: 32px; + } + + .mobile-toc-drag-handle:active { + cursor: grabbing; + } + + .mobile-toc-header { + align-items: center; + display: flex; + justify-content: center; + padding: 0 16px 16px; + } + + .mobile-toc-nav { + flex: 1; + min-height: 0; + overflow-y: auto; + overscroll-behavior: contain; + padding: 0 24px 24px; + position: relative; + } + + .mobile-toc-nav ol { + list-style: none; + margin: 0; + padding: 0; + position: relative; + } + + .mobile-toc-nav li { + font-size: 0.95rem; + line-height: 1.5; + margin: 8px 0; + } + + .mobile-toc-nav a { + color: var(--color-muted); + text-decoration: none; + transition: color 0.2s ease; + display: block; + padding: 6px 0; + } + + .mobile-toc-nav li.is-active > a { + color: var(--color-accent); + font-weight: 500; + } + + .mobile-toc-nav .note-toc-indicator { + background: var(--color-accent); + border-radius: 2px; + height: 18px; + left: 12px; + opacity: 0; + position: absolute; + top: 0; + transform: translateY(var(--indicator-y, 0)) scaleY(var(--indicator-scale, 1)); + transition: + transform 0.3s cubic-bezier(0.2, 0, 0, 1), + opacity 0.3s ease; + width: 3px; + } + + .mobile-toc-nav:hover .note-toc-indicator, + .mobile-toc-nav:focus-within .note-toc-indicator { + opacity: 0.3; + } + + .mobile-toc-nav.has-active .note-toc-indicator { + opacity: 1; + } +} + +.note-toc-divider { + border-top: 1px dashed var(--color-line); + margin: 16px 0; + width: 100%; +} + +.note-toc-stage.has-reading-rail.is-reading .note-toc-divider { + transition: opacity var(--reading-toc-rail-state-duration) ease, transform var(--reading-toc-rail-state-duration) var(--reading-toc-rail-state-ease); +} + +.note-toc-stage.has-reading-rail.is-reading:not(.is-hovered) .note-toc-divider { + opacity: 0; + transform: translate3d(calc(var(--reading-toc-rail-collapse-shift) * -1), 0, 0); +} + +/* ========================================================================= + Reader Mode (Immersive) + ========================================================================= */ +body[data-reader-mode="immersive"] .side-rail, +body[data-reader-mode="immersive"] .persistent-logo-container, +body[data-reader-mode="immersive"] .mobile-drawer, +body[data-reader-mode="immersive"] .mobile-drawer-mask, +body[data-reader-mode="immersive"] .mobile-overlay-container, +body[data-reader-mode="immersive"] .note-tags, +body[data-reader-mode="immersive"] .post-comments, +body[data-reader-mode="immersive"] .note-back-link { + display: none !important; +} + +body[data-reader-mode="immersive"] .page-shell { + grid-template-columns: minmax(0, 1fr) !important; + margin: 0 auto; +} + +body[data-reader-mode="immersive"] .page-main { + grid-column: 1 !important; +} + +body[data-reader-mode="immersive"] { + --note-text-size: 1.0625rem; /* 17px */ + --note-body-width: 52rem; + --note-title-size: clamp(2rem, 3.5vw, 2.5rem); +} + +body[data-reader-mode="immersive"] .notes-page { + display: block; + max-width: var(--note-body-width); + margin-inline: auto; +} + +body[data-reader-mode="immersive"] .note-detail { + width: 100%; + max-width: var(--note-body-width); + margin-inline: auto; + padding-inline: 0 !important; +} + +/* Keep the outline alongside the reading column without collapsing into the rail. */ +body[data-reader-mode="immersive"] .note-toc-wrapper { --reading-toc-rail-eligible: 0; } +body[data-reader-mode="immersive"] .mobile-toc-fab.is-hidden { transform: translateX(0); } +@media (min-width: 1200px) { + body[data-reader-mode="immersive"] .page-main { padding-inline: clamp(24px, 4vw, 64px); } + body[data-reader-mode="immersive"] .notes-page:has(.note-toc-wrapper) { + display: grid; + grid-template-columns: minmax(0, var(--note-body-width)) var(--note-toc-width); + gap: 32px; + max-width: calc(var(--note-body-width) + var(--note-toc-width) + 32px); + } + body[data-reader-mode="immersive"] .note-detail-page .notes-aside { + position: static; + width: var(--note-toc-width); + } +} + +body[data-reader-mode="immersive"] .note { + width: 100%; +} + +body[data-reader-mode="immersive"] .post-content { + line-height: 1.85; +} + +body[data-reader-mode="immersive"] .note-title-wrapper { + display: grid; + grid-template-columns: minmax(0, 1fr) auto; + align-items: start; + column-gap: 16px; +} + +/* ========================================================================= + Reader Mode Progress Bar + ========================================================================= */ +.reader-progress-bar { + display: none; +} + +@media (max-width: 960px) { + /* Hide ordinary controls in Reader Mode */ + body[data-reader-mode="immersive"] .mobile-reading-controls { + display: none !important; + } + + body[data-reader-mode="immersive"] .reader-progress-bar { + display: block; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 2px; + pointer-events: none; + z-index: 2005; + background: linear-gradient( + to right, + var(--color-accent) 0, + var(--color-accent) var(--reading-progress, 0%), + var(--color-line) var(--reading-progress, 0%), + var(--color-line) 100% + ); + transform: translateY(max(var(--reader-progress-visual-top, 0px), env(safe-area-inset-top, 0px))); + } +} + +@media (min-width: 961px) and (max-width: 1399px) { + .note-back-link { left: 0; top: -40px; height: 32px; width: 32px; } +} diff --git a/internal/embedded/static/css/pages/notes.css b/internal/embedded/static/css/pages/notes.css new file mode 100644 index 00000000..922f5d37 --- /dev/null +++ b/internal/embedded/static/css/pages/notes.css @@ -0,0 +1,295 @@ +.notes-page { + display: block; + margin: 0 auto; + max-width: var(--notes-content-width); + width: 100%; +} + +.notes-list { + min-width: 0; + width: 100%; +} + +.notes-month::before { + background: var(--color-line); + content: ""; + display: block; + height: 1px; + margin-bottom: clamp(1.125rem, 2.2vw, 1.5rem); + width: clamp(40px, 6vw, 44px); +} + +.notes-month + .notes-month { + margin-top: clamp(0.9rem, 2.4vw, 1.35rem); +} + +.notes-item { + padding: 0 0 clamp(1.75rem, 3.4vw, 2.2rem); +} + +.notes-month-list .notes-item:first-child { + padding-top: 0; +} + +.notes-month-list .notes-item:last-child { + padding-bottom: clamp(1.25rem, 2.6vw, 1.7rem); +} + +.notes-item-header { + align-items: baseline; + display: flex; + flex-wrap: wrap; + gap: 0.55rem 0.85rem; +} + +.notes-item-indicators { + display: flex; + align-items: center; + gap: 0.3em; + margin-left: -0.3em; /* to counteract individual icon margins */ +} + +.notes-item-title { + font-family: var(--font-serif); + font-size: 1.05rem; + font-weight: 700; + line-height: 1.35; + margin: 0; + max-width: 100%; + min-width: 0; +} + +.notes-item-title a { + box-sizing: content-box; + color: var(--color-text); + display: inline-block; + hyphens: auto; + max-width: 100%; + overflow-wrap: anywhere; + padding-right: 0.04em; + text-decoration: none; + vertical-align: top; + white-space: normal; + word-break: normal; +} + +.notes-item-title a:hover, +.notes-item-title a:focus-visible { + color: var(--color-hover-text); +} + +.notes-item-pin { + background-color: var(--color-muted); + display: inline-block; + height: 1.1em; + margin-left: 0.3em; + mask-image: url('/icons/ui/pin.svg'); + mask-position: center; + mask-repeat: no-repeat; + mask-size: contain; + vertical-align: text-bottom; + width: 1.1em; +} + +.notes-item-music, +.notes-item-bilingual { + color: var(--color-muted); + font-size: 1.1em; + margin-left: 0.3em; + vertical-align: text-bottom; + display: inline-block; + line-height: 1; +} + +hr.notes-divider { + border: none; + border-top: 1px dashed var(--color-line); + margin: clamp(0.5rem, 1.5vw, 1rem) 0 clamp(1.5rem, 3.5vw, 2.5rem); +} + +.notes-item-meta { + color: var(--color-muted); + display: inline-flex; + font-family: var(--font-cormorant); + font-size: 1.05rem; + font-weight: 600; + font-style: italic; + gap: 0.7rem; + line-height: 1; + margin: 0; + white-space: nowrap; +} + +.notes-item-summary, +.notes-empty { + color: var(--color-muted); + font-family: var(--font-body); + font-size: 0.98rem; + line-height: 1.75; + margin: 12px 0 0; + max-width: var(--notes-content-width); +} + +.notes-aside { align-self: start; min-width: 0; position: sticky; top: 88px; } +.articles { + margin-top: 12px; +} + +.articles h2 { + font-size: 1.25rem; + margin: 0; +} + +.note-list { + list-style: none; + margin: 0; + padding: 0; +} + +.note-list li { + border-bottom: 1px solid var(--color-line); + padding: 20px 0; +} + +.note-list a { + font-size: 1.15rem; + font-weight: 700; +} + +.note-list time { + color: var(--color-muted); + display: block; + font-size: 0.9rem; +} + +.note-list .note-summary { + color: var(--color-muted); + font-size: 1.05rem; +} + +@media (max-width: 960px) { + .notes-aside { + display: none !important; + } + + .notes-item-summary { + display: none; + } + + .notes-item { + padding: 0 0 clamp(1.2rem, 3.4vw, 1.5rem); + } + + .notes-item-header { + display: grid; + grid-template-columns: auto 1fr; + grid-template-areas: + "title title" + "indicators meta"; + gap: 0.25rem 0.65rem; + align-items: center; + } + + .notes-item-title { + grid-area: title; + font-size: 1rem; + margin-bottom: 0; + } + + .notes-item-indicators { + grid-area: indicators; + } + + .notes-item-meta { + grid-area: meta; + align-items: center; + display: flex; + font-size: 1.05rem; + gap: 0.65em; + margin: 0; + justify-self: start; + } +} + +/* Tag Return Button */ +.tag-back-container { + align-items: center; + display: flex; + gap: 0.5rem; + margin-bottom: clamp(1.5rem, 3.5vw, 2.5rem); +} + +.tag-back-container[hidden] { + display: none !important; +} + +.tag-back-btn { + align-items: center; + background: transparent; + border: none; + border-radius: 50%; + color: var(--color-muted); + cursor: pointer; + display: inline-flex; + justify-content: center; + padding: 0.2rem; + text-decoration: none; + transition: color 160ms ease, background 160ms ease; +} + +.tag-back-btn:hover, +.tag-back-btn:focus-visible { + color: var(--color-hover-text); + background: var(--color-surface); +} + +.tag-back-btn .material-symbol { + font-size: 1.5rem; +} + +.tag-back-title { + color: var(--color-text); + font-family: var(--font-serif); + font-size: clamp(1.5rem, 2.2vw, 1.8rem); + font-weight: 700; + margin: 0; +} + + + +/* Pagination */ +.pagination { + margin-top: 3rem; + margin-bottom: 2rem; + padding-top: 1.5rem; + border-top: 1px dashed var(--color-line); +} +.pagination-inner { + display: flex; + justify-content: space-between; + align-items: center; + font-family: var(--font-cormorant); + font-size: 0.95rem; + color: var(--color-muted); +} +.pagination-btn { + display: inline-flex; + align-items: center; + gap: 0.35rem; + text-decoration: none; + color: var(--color-muted); + transition: color var(--transition-fast, 0.2s); + cursor: pointer; +} +.pagination-btn:hover:not(.is-disabled) { + color: var(--color-accent); +} +.pagination-btn.is-disabled { + opacity: 0.3; + pointer-events: none; +} +.pagination-info { + flex-grow: 1; + text-align: center; + letter-spacing: 0.05em; +} diff --git a/internal/embedded/static/css/tokens.css b/internal/embedded/static/css/tokens.css new file mode 100644 index 00000000..8122941c --- /dev/null +++ b/internal/embedded/static/css/tokens.css @@ -0,0 +1,244 @@ +:root { + --font-logo: "Daybook Fraunces", serif; + --font-body: "LXGW WenKai Screen", "PingFang SC", "Microsoft YaHei", serif; + --font-ui: var(--font-body); + --font-serif: "Noto Serif SC Variable", "Songti SC", "STSong", serif; + --font-mono: "Maple Mono CN", "Maple Mono", "SFMono-Regular", "Cascadia Code", "JetBrains Mono", ui-monospace, monospace; + --font-icon: "Material Symbols Rounded"; + --font-meta: var(--font-body); + --font-cormorant: "Cormorant Garamond", "LXGW WenKai Screen", "Times New Roman", serif; + --side-rail-width: 220px; + --persistent-logo-left: 40px; + --persistent-logo-top: 23px; + --side-rail-top: calc(var(--persistent-logo-top) + 4.5rem); + --hero-avatar-size: clamp(190px, 22vw, 260px); + --hero-avatar-size-mobile: clamp(148px, 44vw, 178px); + --home-hero-top: clamp(8rem, 20vh, 13rem); + --ease-out: cubic-bezier(0.22, 1, 0.36, 1); + --ease-page: cubic-bezier(0.165, 0.84, 0.44, 1); + --ease-golden: cubic-bezier(0.146, 0.854, 0.382, 1); + --article-enter-ease: cubic-bezier(0.165, 0.84, 0.44, 1); + --motion-expressive-fast-spatial-duration: 350ms; + --motion-expressive-fast-spatial-easing: cubic-bezier(0.42, 1.67, 0.21, 0.9); + --motion-expressive-effects-duration: 200ms; + --motion-expressive-effects-easing: cubic-bezier(0.34, 0.8, 0.34, 1); + --duration-fast: 240ms; + --duration-normal: 420ms; + --duration-shared: 720ms; + --duration-article-enter: 500ms; + --post-enter-duration: 500ms; + --post-enter-y: 3rem; + --post-stagger-step: 45ms; + --transition-exit-delay: 320ms; + --transition-cleanup-delay: 1120ms; + --notes-content-width: 44rem; + --notes-aside-width: 300px; + --notes-page-gap: clamp(72px, 9vw, 132px); + --note-body-width: 44rem; + --note-toc-width: clamp(11rem, 14vw, 13rem); + --note-toc-top: clamp(2.25rem, 5vh, 4rem); + --note-toc-hide-y: 1.75rem; + --toc-collapse-duration: 280ms; + --reading-toc-rail-eligible: 0; + --reading-toc-rail-direction: -1; + --reading-toc-rail-controls-reserve: 9rem; + --reading-toc-rail-height: min(70vh, calc(100dvh - var(--note-toc-top) - var(--reading-toc-rail-controls-reserve))); + --reading-toc-rail-line-width: 1.2px; + --reading-toc-rail-accent-line-width: 1.6px; + --reading-toc-rail-line-inset: 188px; + --reading-toc-rail-dot-size: 4px; + --reading-toc-rail-dot-hit-size: 24px; + --reading-toc-rail-idle-amplitude: 10.4px; + --reading-toc-rail-max-extra-amplitude: 14px; + --reading-toc-rail-bulge-half-height: 56px; + --reading-toc-rail-label-gap: 12px; + --reading-toc-rail-label-edge-inset: 26px; + --reading-toc-rail-title-max-width: 9.5rem; + --reading-toc-activation-line: 96px; + --reading-toc-bottom-inset: 96px; + --reading-toc-rail-state-duration: 360ms; + --reading-toc-rail-label-duration: 180ms; + --reading-toc-rail-state-ease: var(--ease-out); + --reading-toc-rail-label-ease: var(--ease-out); + --reading-toc-rail-label-shift: 6px; + --reading-toc-rail-collapse-shift: 10px; + --note-title-size: clamp(1.55rem, 2vw, 1.625rem); + --note-text-size: 15px; + --color-page: oklch(96% 0.005 298); + --color-text: oklch(25% 0.005 298); + --color-muted: oklch(40% 0.005 298); + --color-line: oklch(25% 0.005 298 / 0.16); + --color-accent: #6750a4; + --color-marker: #cfb7f9; + --color-hover-text: var(--color-accent); + --graph-node-attachment: #c7b34b; + --color-paper: oklch(98% 0.004 298); + --color-faint: oklch(40% 0.005 298 / 0.36); + --color-accent-soft: rgba(103, 80, 164, 0.1); + --color-accent-soft-strong: rgba(103, 80, 164, 0.18); + --color-tooltip-bg: oklch(25% 0.005 298); + --color-tooltip-text: oklch(96% 0.005 298); + --color-code-bg: oklch(40% 0.005 298 / 0.05); + --color-code-border: oklch(40% 0.005 298 / 0.15); + --color-code-inline-bg: oklch(40% 0.005 298 / 0.05); + --color-golden-rect: oklch(25% 0.005 298 / 0.16); + --color-golden-diagonal: oklch(25% 0.005 298 / 0.12); + --color-golden-curve: oklch(25% 0.005 298 / 0.28); + --shadow-code: inset 0 1px 0 oklch(100% 0 0 / 0.52); + --syntax-text: #24292f; + --syntax-comment: #6e7781; + --syntax-keyword: #cf222e; + --syntax-string: #0a3069; + --syntax-number: #0550ae; + --syntax-function: #8250df; + --syntax-tag: #116329; + --syntax-attr: #0550ae; + --syntax-operator: #24292f; + --syntax-error: #82071e; + --syntax-inserted: #116329; + --syntax-deleted: #82071e; + --image-icon-filter: none; + --shadow-avatar: + 0 18px 48px oklch(25% 0.005 298 / 0.12), + 0 4px 16px oklch(25% 0.005 298 / 0.07); + --shadow-avatar-small: + 0 10px 28px oklch(25% 0.005 298 / 0.1), + 0 3px 10px oklch(25% 0.005 298 / 0.07); + color-scheme: light; +} + +:root:lang(en) { + --font-body: "Cormorant Garamond", "LXGW WenKai Screen", "Times New Roman", serif; +} + +:root[data-theme="dark"] { + --color-page: oklch(22% 0.005 298); + --color-text: oklch(92% 0.005 298); + --color-muted: oklch(77% 0.005 298); + --color-line: oklch(92% 0.005 298 / 0.14); + --color-accent: #d0bcff; + --color-marker: #8063a6; + --color-hover-text: var(--color-accent); + --graph-node-attachment: #d6c776; + --color-paper: oklch(25% 0.005 298); + --color-faint: oklch(77% 0.005 298 / 0.34); + --color-accent-soft: rgba(208, 188, 255, 0.12); + --color-accent-soft-strong: rgba(208, 188, 255, 0.22); + --color-tooltip-bg: oklch(92% 0.005 298); + --color-tooltip-text: oklch(22% 0.005 298); + --color-code-bg: oklch(77% 0.005 298 / 0.05); + --color-code-border: oklch(77% 0.005 298 / 0.15); + --color-code-inline-bg: oklch(77% 0.005 298 / 0.05); + --color-golden-rect: oklch(0.93 0.195089 103.2532 / 0.18); + --color-golden-diagonal: oklch(92% 0.005 298 / 0.12); + --color-golden-curve: oklch(92% 0.005 298 / 0.28); + --shadow-code: inset 0 1px 0 oklch(100% 0 0 / 0.035); + --syntax-text: #c9d1d9; + --syntax-comment: #8b949e; + --syntax-keyword: #ff7b72; + --syntax-string: #a5d6ff; + --syntax-number: #79c0ff; + --syntax-function: #d2a8ff; + --syntax-tag: #7ee787; + --syntax-attr: #79c0ff; + --syntax-operator: #c9d1d9; + --syntax-error: #ffdcd7; + --syntax-inserted: #aff5b4; + --syntax-deleted: #ffdcd7; + --image-icon-filter: invert(96%) sepia(6%) saturate(80%) hue-rotate(210deg) brightness(96%) contrast(92%); + --shadow-avatar: + 0 18px 48px oklch(0% 0 0 / 0.32), + 0 4px 16px oklch(0% 0 0 / 0.22); + --shadow-avatar-small: + 0 10px 28px oklch(0% 0 0 / 0.28), + 0 3px 10px oklch(0% 0 0 / 0.18); + color-scheme: dark; +} + +:root[data-palette="warm"] { + --color-page: #f6f1e6; + --color-text: #25201b; + --color-muted: #4a4239; + --color-line: #d9cfb9; + --color-accent: #8a4423; + --color-marker: #f1b880; + --color-hover-text: var(--color-accent); + --graph-node-attachment: #d4b856; + --color-paper: #fbf6ec; + --color-faint: #b8ad9b; + --color-accent-soft: rgba(138, 68, 35, 0.1); + --color-accent-soft-strong: rgba(138, 68, 35, 0.18); + --color-tooltip-bg: #25201b; + --color-tooltip-text: #fbf6ec; + --color-code-bg: #f0e9d6; + --color-code-border: #d9cfb9; + --color-code-inline-bg: #ebe3cd; + --color-golden-rect: rgba(138, 68, 35, 0.18); + --color-golden-diagonal: rgba(138, 68, 35, 0.11); + --color-golden-curve: rgba(37, 32, 27, 0.32); + --shadow-code: inset 0 1px 0 rgba(255, 255, 255, 0.48); + --syntax-text: #25201b; + --syntax-comment: #7d7165; + --syntax-keyword: #a54a3e; + --syntax-string: #7d6028; + --syntax-number: #aa5c2b; + --syntax-function: #7b5982; + --syntax-tag: #557243; + --syntax-attr: #3a7575; + --syntax-operator: #5f554c; + --syntax-error: #9b392f; + --syntax-inserted: #4f6c3f; + --syntax-deleted: #9b392f; + --image-icon-filter: none; + --shadow-avatar: + 0 18px 48px rgba(38, 35, 31, 0.14), + 0 4px 16px rgba(38, 35, 31, 0.08); + --shadow-avatar-small: + 0 10px 28px rgba(38, 35, 31, 0.12), + 0 3px 10px rgba(38, 35, 31, 0.08); + color-scheme: light; +} + +:root[data-palette="warm"][data-theme="dark"] { + --color-page: #131110; + --color-text: #f4f0e3; + --color-muted: #c8c1ae; + --color-line: #2a2622; + --color-accent: #c89761; + --color-marker: #89582e; + --color-hover-text: var(--color-accent); + --graph-node-attachment: #d6c776; + --color-paper: #1a1715; + --color-faint: #4f4a42; + --color-accent-soft: rgba(200, 151, 97, 0.12); + --color-accent-soft-strong: rgba(200, 151, 97, 0.22); + --color-tooltip-bg: #f4f0e3; + --color-tooltip-text: #131110; + --color-code-bg: #1a1715; + --color-code-border: #2a2622; + --color-code-inline-bg: #201c19; + --color-golden-rect: rgba(200, 151, 97, 0.22); + --color-golden-diagonal: rgba(200, 151, 97, 0.14); + --color-golden-curve: rgba(244, 240, 227, 0.3); + --shadow-code: inset 0 1px 0 rgba(255, 255, 255, 0.035); + --syntax-text: #f4f0e3; + --syntax-comment: #9d9484; + --syntax-keyword: #d47b71; + --syntax-string: #dcb378; + --syntax-number: #df9862; + --syntax-function: #bba1c9; + --syntax-tag: #96af87; + --syntax-attr: #81a3a3; + --syntax-operator: #c8c1ae; + --syntax-error: #ee8f7a; + --syntax-inserted: #9bb978; + --syntax-deleted: #ee8f7a; + --image-icon-filter: invert(94%) sepia(8%) saturate(530%) hue-rotate(333deg) brightness(96%) contrast(88%); + --shadow-avatar: + 0 18px 48px rgba(0, 0, 0, 0.32), + 0 4px 16px rgba(0, 0, 0, 0.22); + --shadow-avatar-small: + 0 10px 28px rgba(0, 0, 0, 0.28), + 0 3px 10px rgba(0, 0, 0, 0.18); + color-scheme: dark; +} diff --git a/internal/embedded/static/css/transitions.css b/internal/embedded/static/css/transitions.css new file mode 100644 index 00000000..9739fb09 --- /dev/null +++ b/internal/embedded/static/css/transitions.css @@ -0,0 +1,882 @@ +::view-transition { + background: var(--color-page); +} + +::view-transition-group(site-avatar), +::view-transition-group(site-name-cn), +::view-transition-group(site-name-en) { + animation-duration: var(--duration-shared); + animation-timing-function: var(--ease-out); +} +::view-transition-old(site-name-cn), +::view-transition-old(site-name-en) { + animation: none; + opacity: 0; +} +::view-transition-new(site-name-cn), +::view-transition-new(site-name-en) { + animation: none; + mix-blend-mode: normal; +} + +:root { + --theme-reveal-from: 100% 0 0 0; + --palette-reveal-from: 0 100% 0 0; +} + +:root[data-theme="dark"] { + --theme-reveal-from: 0 0 100% 0; +} + +html[data-palette-changing="to-warm"] { + --palette-reveal-from: 0 100% 0 0; +} + +html[data-palette-changing="from-warm"] { + --palette-reveal-from: 0 0 0 100%; +} + +html[data-theme-changing] .hero-avatar-wrap, +html[data-palette-changing] .hero-avatar-wrap, +html[data-theme-changing] .side-avatar-wrap, +html[data-palette-changing] .side-avatar-wrap, +html[data-theme-changing] .hero-name, +html[data-theme-changing] .slogan-glyph, +html[data-palette-changing] .hero-name, +html[data-palette-changing] .slogan-glyph, +html[data-theme-changing] .notes-brand-name, +html[data-theme-changing] .slogan-glyph, +html[data-palette-changing] .notes-brand-name, +html[data-palette-changing] .slogan-glyph, +html[data-theme-changing] .notes-item-title a, +html[data-palette-changing] .notes-item-title a, +html[data-theme-changing] .notes-item-meta, +html[data-palette-changing] .notes-item-meta, +html[data-theme-changing] .note-title span, +html[data-palette-changing] .note-title span, +html[data-theme-changing] .note-meta, +html[data-palette-changing] .note-meta { + view-transition-name: none !important; +} + +::view-transition-old(theme-toggle-transition), +::view-transition-old(palette-toggle-transition) { + animation: none; + mix-blend-mode: normal; + z-index: -1; +} + +::view-transition-new(theme-toggle-transition) { + animation: theme-toggle-reveal 0.7s cubic-bezier(0.4, 0, 0.2, 1); + clip-path: inset(0 0 0 0); + mix-blend-mode: normal; + z-index: 99; +} + +::view-transition-new(palette-toggle-transition) { + animation: palette-toggle-reveal 0.7s cubic-bezier(0.4, 0, 0.2, 1); + clip-path: inset(0 0 0 0); + mix-blend-mode: normal; + z-index: 99; +} + +::view-transition-group(active-switch-track), +::view-transition-group(active-switch-thumb) { + z-index: 100; +} + +@keyframes theme-toggle-reveal { + from { + clip-path: inset(var(--theme-reveal-from)); + } +} + +@keyframes palette-toggle-reveal { + from { + clip-path: inset(var(--palette-reveal-from)); + } +} + +::view-transition-old(root), +::view-transition-new(root) { + animation-duration: var(--duration-normal); + animation-timing-function: var(--ease-out); + background: var(--color-page); + mix-blend-mode: normal; +} + +html.article-transition::view-transition-group(*) { + animation-duration: var(--duration-shared); + animation-timing-function: var(--article-enter-ease); +} + +html.article-transition::view-transition-old(root) { + animation: none; + opacity: 0; +} + +html.article-transition::view-transition-new(root) { + animation: none; + opacity: 1; +} + +html.article-transition .side-avatar-wrap, +html.article-transition .hero-avatar-wrap, +html.article-transition .hero-name-cn, +html.article-transition .hero-name-en, +html.article-transition .notes-brand-cn, +html.article-transition .notes-brand-en, +html.article-transition .slogan-glyph { + view-transition-name: none; +} + +@keyframes nav-exit-up { + from { + opacity: 1; + transform: translateY(0); + } + to { + opacity: 0; + transform: translateY(-14px); + } +} + +@keyframes nav-enter-down { + from { + opacity: 0; + transform: translateY(-14px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +@keyframes logo-exit-fade { + from { + opacity: 1; + } + to { + opacity: 0; + } +} + +@keyframes logo-enter-fade { + from { + opacity: 0; + } + to { + opacity: 1; + } +} + +@keyframes social-exit-down { + from { + opacity: 1; + transform: translateY(0); + } + to { + opacity: 0; + transform: translateY(14px); + } +} + +@keyframes social-enter-up { + from { + opacity: 0; + transform: translateY(14px); + } + to { + opacity: 0.72; + transform: translateY(0); + } +} + +@keyframes footer-exit-down { + from { + opacity: 1; + transform: translateY(0); + } + to { + opacity: 0; + transform: translateY(20px); + } +} + +@keyframes footer-enter-up { + from { + opacity: 0; + transform: translateY(20px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +@keyframes side-nav-enter { + from { + opacity: 0; + transform: translateX(-16px); + } + to { + opacity: 1; + transform: translateX(0); + } +} + +@keyframes side-nav-exit-left { + from { + opacity: 1; + transform: translateX(0); + } + to { + opacity: 0; + transform: translateX(-16px); + } +} + +@keyframes aside-enter { + from { + opacity: 0; + transform: translateX(18px); + } + to { + opacity: 1; + transform: translateX(0); + } +} + +@keyframes aside-exit-right { + from { + opacity: 1; + transform: translateX(0); + } + to { + opacity: 0; + transform: translateX(18px); + } +} + +@keyframes page-soft-enter { + from { + opacity: 0.92; + } + to { + opacity: 1; + } +} + +@keyframes article-content-enter { + from { + opacity: 0; + transform: translateY(var(--post-enter-y)); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +@keyframes article-content-enter-mini { + from { + opacity: 0; + transform: translateY(1.5rem); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +@keyframes article-back-enter { + from { + opacity: 0; + transform: translateX(0.5rem); + } + to { + opacity: 1; + transform: translateX(0); + } +} + +@keyframes archive-intro-fade-up { + from { + opacity: 0; + transform: translateY(6px); + } + to { + opacity: 1; + transform: none; + } +} + +.home-exiting .site-nav > * { + animation: nav-exit-up var(--duration-normal) var(--ease-out) both; +} + +.home-exiting .site-nav > *:nth-child(1) { + animation-delay: 0ms; +} + +.home-exiting .site-nav > *:nth-child(2) { + animation-delay: 28ms; +} + +.home-exiting .site-nav > *:nth-child(3) { + animation-delay: 56ms; +} + +.home-exiting .site-nav > *:nth-child(4) { + animation-delay: 84ms; +} + +.home-exiting .site-nav > *:nth-child(5) { + animation-delay: 112ms; +} + +.home-exiting .site-nav > *:nth-child(6) { + animation-delay: 140ms; +} + +.home-exiting .site-nav > *:nth-child(7) { + animation-delay: 160ms; +} + +.home-exiting .site-nav > *:nth-child(8) { + animation-delay: 180ms; +} + +.home-exiting .hero-social a { + animation: social-exit-down var(--duration-normal) var(--ease-out) both; +} + +.home-exiting .hero-social a:nth-child(1) { + animation-delay: 40ms; +} + +.home-exiting .hero-social a:nth-child(2) { + animation-delay: 68ms; +} + +.home-exiting .hero-social a:nth-child(3) { + animation-delay: 96ms; +} + +.home-exiting .hero-social a:nth-child(4) { + animation-delay: 124ms; +} + +.home-exiting .hero-social a:nth-child(5) { + animation-delay: 152ms; +} + +.home-exiting .hero-social a:nth-child(6) { + animation-delay: 180ms; +} + +.home-exiting .footer-stats-row > *, +.home-exiting .home-footer > p.footer-copyright { + animation: footer-exit-down var(--duration-normal) var(--ease-out) both; +} + +.home-exiting .footer-stats-row > *:nth-child(1) { animation-delay: 120ms; } +.home-exiting .footer-stats-row > *:nth-child(2) { animation-delay: 148ms; } +.home-exiting .footer-stats-row > *:nth-child(3) { animation-delay: 176ms; } +.home-exiting .footer-stats-row > *:nth-child(4) { animation-delay: 204ms; } +.home-exiting .home-footer > p.footer-copyright { animation-delay: 232ms; } + +.home-entering .site-nav > * { + animation: nav-enter-down var(--duration-normal) var(--ease-out) both; +} + +.home-entering .site-nav > *:nth-child(1) { + animation-delay: 90ms; +} + +.home-entering .site-nav > *:nth-child(2) { + animation-delay: 118ms; +} + +.home-entering .site-nav > *:nth-child(3) { + animation-delay: 146ms; +} + +.home-entering .site-nav > *:nth-child(4) { + animation-delay: 174ms; +} + +.home-entering .site-nav > *:nth-child(5) { + animation-delay: 202ms; +} + +.home-entering .site-nav > *:nth-child(6) { + animation-delay: 230ms; +} + +.home-entering .site-nav > *:nth-child(7) { + animation-delay: 260ms; +} + +.home-entering .site-nav > *:nth-child(8) { + animation-delay: 290ms; +} + +.home-entering .hero-social a { + animation: social-enter-up var(--duration-normal) var(--ease-out) both; +} + +.home-entering .hero-social a:nth-child(1) { + animation-delay: 150ms; +} + +.home-entering .hero-social a:nth-child(2) { + animation-delay: 178ms; +} + +.home-entering .hero-social a:nth-child(3) { + animation-delay: 206ms; +} + +.home-entering .hero-social a:nth-child(4) { + animation-delay: 234ms; +} + +.home-entering .hero-social a:nth-child(5) { + animation-delay: 262ms; +} + +.home-entering .hero-social a:nth-child(6) { + animation-delay: 290ms; +} + +.home-entering .footer-stats-row > *, +.home-entering .home-footer > p.footer-copyright { + animation: footer-enter-up var(--duration-normal) var(--ease-out) both; +} + +.home-entering .home-footer > p.footer-copyright { animation-delay: 210ms; } +.home-entering .footer-stats-row > *:nth-child(4) { animation-delay: 238ms; } +.home-entering .footer-stats-row > *:nth-child(3) { animation-delay: 266ms; } +.home-entering .footer-stats-row > *:nth-child(2) { animation-delay: 294ms; } +.home-entering .footer-stats-row > *:nth-child(1) { animation-delay: 322ms; } + +html:not(.article-transition) body.page-exiting .side-nav:not(.transition-stable) .nav-link { + animation: side-nav-exit-left var(--duration-normal) var(--ease-out) both; +} + +html:not(.article-transition) body.page-exiting .side-nav:not(.transition-stable) .nav-link:nth-child(1) { + animation-delay: 0ms; +} + +html:not(.article-transition) body.page-exiting .side-nav:not(.transition-stable) .nav-link:nth-child(2) { + animation-delay: 28ms; +} + +html:not(.article-transition) body.page-exiting .side-nav:not(.transition-stable) .nav-link:nth-child(3) { + animation-delay: 56ms; +} + +html:not(.article-transition) body.page-exiting .side-nav:not(.transition-stable) .nav-link:nth-child(4) { + animation-delay: 84ms; +} + +html:not(.article-transition) body.page-exiting .side-nav:not(.transition-stable) .nav-link:nth-child(5) { + animation-delay: 112ms; +} + +html:not(.article-transition) body.page-exiting .side-nav:not(.transition-stable) .nav-link:nth-child(6) { + animation-delay: 140ms; +} + +html:not(.article-transition) body.page-exiting .notes-aside:not(.transition-stable) .notes-footer-actions .notes-action-button, +html:not(.article-transition) body.page-exiting .notes-aside:not(.transition-stable) .notes-footer-links, +html:not(.article-transition) body.page-exiting .notes-aside:not(.transition-stable) .notes-footer > p { + animation: aside-exit-right var(--duration-normal) var(--ease-out) both; +} + +html:not(.article-transition) body.page-exiting .notes-aside:not(.transition-stable) .notes-footer-actions .notes-action-button:nth-child(1) { + animation-delay: 40ms; +} + +html:not(.article-transition) body.page-exiting .notes-aside:not(.transition-stable) .notes-footer-actions .notes-action-button:nth-child(2) { + animation-delay: 68ms; +} + +html:not(.article-transition) body.page-exiting .notes-aside:not(.transition-stable) .notes-footer-actions .notes-action-button:nth-child(3) { + animation-delay: 96ms; +} + +html:not(.article-transition) body.page-exiting .notes-aside:not(.transition-stable) .notes-footer-links { + animation-delay: 124ms; +} + +html:not(.article-transition) body.page-exiting .notes-aside:not(.transition-stable) .notes-footer > p { + animation-delay: 152ms; +} + +html.article-transition .persistent-logo, +html.article-transition .side-rail, +html.article-transition .notes-page, +html.article-transition .side-nav, +html.article-transition .side-nav:not(.transition-stable) .nav-link, +html.article-transition .side-avatar-link, +html.article-transition .side-avatar-wrap, +html.article-transition .notes-aside, +html.article-transition .notes-aside:not(.transition-stable) .notes-footer-actions .notes-action-button, +html.article-transition .notes-aside:not(.transition-stable) .notes-footer-links, +html.article-transition .notes-aside:not(.transition-stable) .notes-footer > p { + animation: none !important; + opacity: 1 !important; + transform: none !important; +} + +html.article-transition [data-title-transition-key], +html.article-transition [data-transition-scope], +html.article-transition [data-transition-scope] { + view-transition-name: none !important; +} + +html:not(.article-transition) body.page-entering.page-body .side-nav:not(.transition-stable) .nav-link { + animation: side-nav-enter var(--duration-normal) var(--ease-out) both; +} + +html:not(.article-transition) body.page-entering.page-body .side-nav:not(.transition-stable) .nav-link:nth-child(1) { + animation-delay: 80ms; +} + +html:not(.article-transition) body.page-entering.page-body .side-nav:not(.transition-stable) .nav-link:nth-child(2) { + animation-delay: 112ms; +} + +html:not(.article-transition) body.page-entering.page-body .side-nav:not(.transition-stable) .nav-link:nth-child(3) { + animation-delay: 144ms; +} + +html:not(.article-transition) body.page-entering.page-body .side-nav:not(.transition-stable) .nav-link:nth-child(4) { + animation-delay: 176ms; +} + +html:not(.article-transition) body.page-entering.page-body .side-nav:not(.transition-stable) .nav-link:nth-child(5) { + animation-delay: 208ms; +} + +html:not(.article-transition) body.page-entering.page-body .side-nav:not(.transition-stable) .nav-link:nth-child(6) { + animation-delay: 240ms; +} + +html:not(.article-transition) body.page-entering .notes-aside:not(.transition-stable) .notes-footer-actions .notes-action-button { + animation: aside-enter var(--duration-normal) var(--ease-out) both; +} + +html:not(.article-transition) body.page-entering .notes-aside:not(.transition-stable) .notes-footer-actions .notes-action-button:nth-child(1) { + animation-delay: 170ms; +} + +html:not(.article-transition) body.page-entering .notes-aside:not(.transition-stable) .notes-footer-actions .notes-action-button:nth-child(2) { + animation-delay: 205ms; +} + +html:not(.article-transition) body.page-entering .notes-aside:not(.transition-stable) .notes-footer-actions .notes-action-button:nth-child(3) { + animation-delay: 240ms; +} + +html:not(.article-transition) body.page-entering .notes-aside:not(.transition-stable) .notes-footer-links, +html:not(.article-transition) body.page-entering .notes-aside:not(.transition-stable) .notes-footer > p { + animation: aside-enter var(--duration-normal) var(--ease-out) both; +} + +html:not(.article-transition) body.page-entering .notes-aside:not(.transition-stable) .notes-footer-links { + animation-delay: 280ms; +} + +html:not(.article-transition) body.page-entering .notes-aside:not(.transition-stable) .notes-footer > p { + animation-delay: 320ms; +} + +@media (prefers-reduced-motion: no-preference) { + .archive-item-row.is-intro-revealing .archive-item { + opacity: 1; + animation: archive-intro-fade-up 380ms cubic-bezier(0.2, 0.6, 0.2, 1) both; + animation-delay: calc(var(--stagger-index, 0) * 55ms); + } + .archive-item-row.reveal-trigger .archive-item { + opacity: 1; + animation: archive-intro-fade-up 380ms cubic-bezier(0.2, 0.6, 0.2, 1) both; + animation-delay: calc(var(--stagger-index, 0) * 55ms); + } +} + +@media (min-width: 961px) { + .note-body .note-back-link { + animation: article-back-enter var(--post-enter-duration) var(--ease-page) 200ms both; + } +} + +.note-body .note-meta .meta-transition-group > *, +.note-body .note-meta > .meta-stagger, +.note-body .note-updated.meta-stagger { + animation: article-content-enter-mini var(--post-enter-duration) var(--ease-page) both; + opacity: 0; +} + +@media (min-width: 961px) { + .note-body .note-meta .meta-transition-group > time { animation-delay: 160ms; } + .note-body .note-meta .meta-transition-group > .reading-time { animation-delay: 185ms; } + .note-body .note-meta > .meta-stagger:nth-child(2) { animation-delay: 210ms; } + .note-body .note-meta > .meta-stagger:nth-child(3) { animation-delay: 235ms; } + .note-body .note-updated.meta-stagger { animation-delay: 260ms; } +} + +@media (max-width: 960px) { + .note-body .note-meta .meta-transition-group > time, + .note-body .note-meta .meta-transition-group > .reading-time { + animation: none; + opacity: 1; + transform: none; + } + .note-body .note-meta > .meta-stagger:nth-child(2) { animation-delay: 160ms; } + .note-body .note-meta > .meta-stagger:nth-child(3) { animation-delay: 185ms; } + .note-body .note-updated.meta-stagger { animation-delay: 210ms; } +} + +.note-body .note-summary { + animation: article-content-enter-mini var(--post-enter-duration) var(--ease-page) 205ms both; +} + +@media (min-width: 1281px) { + .note-body .note-toc-header { + animation: article-content-enter-mini var(--post-enter-duration) var(--ease-page) backwards; + animation-delay: 175ms; + } + + .note-body .note-toc-panel li { + animation: article-content-enter var(--post-enter-duration) var(--ease-page) backwards; + animation-delay: calc(175ms + min(var(--toc-index, 0), 8) * 25ms); + } + + .note-body .note-right-controls > * { + animation: article-content-enter var(--post-enter-duration) var(--ease-page) backwards; + } + + .note-body .note-right-controls > *:nth-child(1) { + animation-delay: 150ms; + } + .note-body .note-right-controls > *:nth-child(2) { + animation-delay: 200ms; + } + .note-body .note-right-controls > *:nth-child(3) { + animation-delay: 250ms; + } +} + +.note-body .article-stagger-meta > * { + animation: article-content-enter-mini var(--post-enter-duration) var(--ease-page) both; + animation-delay: calc(100ms + min(var(--stagger-index, 0), 10) * 30ms); + opacity: 0; +} + +.note-body .post-content > * { + animation: article-content-enter var(--post-enter-duration) var(--ease-page) both; + opacity: 0; +} + +.note-body .post-content > *:nth-child(1) { + animation-delay: 150ms; +} + +.note-body .post-content > *:nth-child(2) { + animation-delay: 200ms; +} + +.note-body .post-content > *:nth-child(3) { + animation-delay: 250ms; +} + +.note-body .post-content > *:nth-child(4) { + animation-delay: 300ms; +} + +.note-body .post-content > *:nth-child(5) { + animation-delay: 350ms; +} + +.note-body .post-content > *:nth-child(6) { + animation-delay: 400ms; +} + +.note-body .post-content > *:nth-child(7) { + animation-delay: 450ms; +} + +.note-body .post-content > *:nth-child(8) { + animation-delay: 500ms; +} + +.note-body .post-content > *:nth-child(9) { + animation-delay: 550ms; +} + +.note-body .post-content > *:nth-child(10) { + animation-delay: 600ms; +} + +.note-body .post-content > *:nth-child(11) { + animation-delay: 650ms; +} + +.note-body .post-content > *:nth-child(12) { + animation-delay: 700ms; +} + +.note-body .post-content > *:nth-child(13) { + animation-delay: 750ms; +} + +.note-body .post-content > *:nth-child(14) { + animation-delay: 800ms; +} + +.note-body .post-content > *:nth-child(15) { + animation-delay: 850ms; +} + +.note-body .post-content > *:nth-child(n + 16) { + animation-delay: 900ms; +} + +@media (prefers-reduced-motion: reduce) { + *, + *::before, + *::after { + animation-delay: 0ms !important; + animation-duration: 1ms !important; + scroll-behavior: auto !important; + transition-duration: 1ms !important; + } + + .hero-avatar-wrap, + .side-avatar-wrap, + .hero-name, + .slogan-glyph, + .notes-brand-name, + .notes-item-title a, + .article-meta-rows, + .article-shared-meta, + .article-stagger-meta, + .note-title span, + [data-article-shared] { + view-transition-name: none !important; + } + + ::view-transition-group(*), + ::view-transition-old(*), + ::view-transition-new(*) { + animation-duration: 1ms !important; + } + + .note-back-link, + .note-toc, + .notes-item, + .article-meta-rows, + .article-shared-meta, + .article-stagger-meta, + .article-stagger-meta > *, + .archive-year, + .archive-item, + .note-summary, + .post-content > * { + animation: none !important; + opacity: 1 !important; + transform: none !important; + clip-path: none !important; + } + + .note-toc, + .note-toc-panel { + transition: none !important; + } + + .note-toc:not(.is-open) .note-toc-panel { + opacity: 0 !important; + transform: none !important; + visibility: hidden !important; + } +} + +html[data-reduced-motion="true"] *, +html[data-reduced-motion="true"] *::before, +html[data-reduced-motion="true"] *::after { + animation-delay: 0ms !important; + animation-duration: 1ms !important; + scroll-behavior: auto !important; + transition-duration: 1ms !important; +} + +html[data-reduced-motion="true"] .hero-avatar-wrap, +html[data-reduced-motion="true"] .side-avatar-wrap, +html[data-reduced-motion="true"] .hero-name, +html[data-reduced-motion="true"] .slogan-glyph, +html[data-reduced-motion="true"] .notes-brand-name, +html[data-reduced-motion="true"] .notes-item-title a, +html[data-reduced-motion="true"] .article-meta-rows, +html[data-reduced-motion="true"] .article-shared-meta, +html[data-reduced-motion="true"] .article-stagger-meta, +html[data-reduced-motion="true"] .note-title span, +html[data-reduced-motion="true"] [data-article-shared] { + view-transition-name: none !important; +} + +html[data-reduced-motion="true"] .note-back-link, +html[data-reduced-motion="true"] .note-toc, +html[data-reduced-motion="true"] .notes-item, +html[data-reduced-motion="true"] .article-meta-rows, +html[data-reduced-motion="true"] .article-shared-meta, +html[data-reduced-motion="true"] .article-stagger-meta, +html[data-reduced-motion="true"] .article-stagger-meta > *, +html[data-reduced-motion="true"] .archive-year, +html[data-reduced-motion="true"] .archive-item, +html[data-reduced-motion="true"] .note-summary, +html[data-reduced-motion="true"] .post-content > * { + animation: none !important; + opacity: 1 !important; + transform: none !important; + clip-path: none !important; +} + +html[data-reduced-motion="true"] .note-toc, +html[data-reduced-motion="true"] .note-toc-panel { + transition: none !important; +} + +html[data-reduced-motion="true"] .note-toc:not(.is-open) .note-toc-panel { + opacity: 0 !important; + transform: none !important; + visibility: hidden !important; +} + +.title-glyph { + view-transition-class: article-title-glyph; + margin: 0; + padding: 0; + border: 0; + display: inline-block; +} + +html.article-transition::view-transition-group(.article-title-glyph) { + animation-duration: var(--duration-shared, 500ms); + animation-timing-function: cubic-bezier(0.22, 1, 0.36, 1); +} + +.slogan-glyph { + view-transition-class: site-slogan-glyph; + margin: 0; + padding: 0; + display: inline-block; + white-space: pre-wrap; +} + +html::view-transition-group(.site-slogan-glyph) { + animation-duration: var(--duration-shared); + animation-timing-function: var(--ease-out); +} diff --git a/internal/embedded/static/favicon.png b/internal/embedded/static/favicon.png new file mode 100644 index 00000000..78f93057 Binary files /dev/null and b/internal/embedded/static/favicon.png differ diff --git a/internal/embedded/static/favicon.svg b/internal/embedded/static/favicon.svg new file mode 100644 index 00000000..4cd0e4fc --- /dev/null +++ b/internal/embedded/static/favicon.svg @@ -0,0 +1,13 @@ + + + + diff --git a/internal/embedded/static/icons/social/afdian.svg b/internal/embedded/static/icons/social/afdian.svg new file mode 100644 index 00000000..b6bed5f9 --- /dev/null +++ b/internal/embedded/static/icons/social/afdian.svg @@ -0,0 +1 @@ +AFDIAN \ No newline at end of file diff --git a/internal/embedded/static/icons/social/bilibili.svg b/internal/embedded/static/icons/social/bilibili.svg new file mode 100644 index 00000000..6c114c71 --- /dev/null +++ b/internal/embedded/static/icons/social/bilibili.svg @@ -0,0 +1 @@ +Bilibili \ No newline at end of file diff --git a/internal/embedded/static/icons/social/bluesky.svg b/internal/embedded/static/icons/social/bluesky.svg new file mode 100644 index 00000000..ad25107f --- /dev/null +++ b/internal/embedded/static/icons/social/bluesky.svg @@ -0,0 +1 @@ +Bluesky \ No newline at end of file diff --git a/internal/embedded/static/icons/social/buymeacoffee.svg b/internal/embedded/static/icons/social/buymeacoffee.svg new file mode 100644 index 00000000..51878868 --- /dev/null +++ b/internal/embedded/static/icons/social/buymeacoffee.svg @@ -0,0 +1 @@ +Buy Me A Coffee \ No newline at end of file diff --git a/internal/embedded/static/icons/social/discord.svg b/internal/embedded/static/icons/social/discord.svg new file mode 100644 index 00000000..9d7796b8 --- /dev/null +++ b/internal/embedded/static/icons/social/discord.svg @@ -0,0 +1 @@ +Discord \ No newline at end of file diff --git a/internal/embedded/static/icons/social/github.svg b/internal/embedded/static/icons/social/github.svg new file mode 100644 index 00000000..538ec5bf --- /dev/null +++ b/internal/embedded/static/icons/social/github.svg @@ -0,0 +1 @@ +GitHub \ No newline at end of file diff --git a/internal/embedded/static/icons/social/gitlab.svg b/internal/embedded/static/icons/social/gitlab.svg new file mode 100644 index 00000000..e4a29630 --- /dev/null +++ b/internal/embedded/static/icons/social/gitlab.svg @@ -0,0 +1 @@ +GitLab \ No newline at end of file diff --git a/internal/embedded/static/icons/social/gmail.svg b/internal/embedded/static/icons/social/gmail.svg new file mode 100644 index 00000000..9ee779ad --- /dev/null +++ b/internal/embedded/static/icons/social/gmail.svg @@ -0,0 +1 @@ +Gmail \ No newline at end of file diff --git a/internal/embedded/static/icons/social/instagram.svg b/internal/embedded/static/icons/social/instagram.svg new file mode 100644 index 00000000..c0e86b0b --- /dev/null +++ b/internal/embedded/static/icons/social/instagram.svg @@ -0,0 +1 @@ +Instagram \ No newline at end of file diff --git a/internal/embedded/static/icons/social/kofi.svg b/internal/embedded/static/icons/social/kofi.svg new file mode 100644 index 00000000..3407932a --- /dev/null +++ b/internal/embedded/static/icons/social/kofi.svg @@ -0,0 +1 @@ +Ko-fi \ No newline at end of file diff --git a/internal/embedded/static/icons/social/mastodon.svg b/internal/embedded/static/icons/social/mastodon.svg new file mode 100644 index 00000000..5e3b7e13 --- /dev/null +++ b/internal/embedded/static/icons/social/mastodon.svg @@ -0,0 +1 @@ +Mastodon \ No newline at end of file diff --git a/internal/embedded/static/icons/social/qq.svg b/internal/embedded/static/icons/social/qq.svg new file mode 100644 index 00000000..8690b359 --- /dev/null +++ b/internal/embedded/static/icons/social/qq.svg @@ -0,0 +1 @@ +QQ \ No newline at end of file diff --git a/internal/embedded/static/icons/social/reddit.svg b/internal/embedded/static/icons/social/reddit.svg new file mode 100644 index 00000000..ea038831 --- /dev/null +++ b/internal/embedded/static/icons/social/reddit.svg @@ -0,0 +1 @@ +Reddit \ No newline at end of file diff --git a/internal/embedded/static/icons/social/rss.svg b/internal/embedded/static/icons/social/rss.svg new file mode 100644 index 00000000..14a6f3f7 --- /dev/null +++ b/internal/embedded/static/icons/social/rss.svg @@ -0,0 +1 @@ +RSS \ No newline at end of file diff --git a/internal/embedded/static/icons/social/telegram.svg b/internal/embedded/static/icons/social/telegram.svg new file mode 100644 index 00000000..c46b0ed7 --- /dev/null +++ b/internal/embedded/static/icons/social/telegram.svg @@ -0,0 +1 @@ +Telegram \ No newline at end of file diff --git a/internal/embedded/static/icons/social/threads.svg b/internal/embedded/static/icons/social/threads.svg new file mode 100644 index 00000000..c2f1f9cc --- /dev/null +++ b/internal/embedded/static/icons/social/threads.svg @@ -0,0 +1 @@ +Threads \ No newline at end of file diff --git a/internal/embedded/static/icons/social/twitch.svg b/internal/embedded/static/icons/social/twitch.svg new file mode 100644 index 00000000..8aaa4a9a --- /dev/null +++ b/internal/embedded/static/icons/social/twitch.svg @@ -0,0 +1 @@ +Twitch \ No newline at end of file diff --git a/internal/embedded/static/icons/social/x.svg b/internal/embedded/static/icons/social/x.svg new file mode 100644 index 00000000..a7c37cff --- /dev/null +++ b/internal/embedded/static/icons/social/x.svg @@ -0,0 +1 @@ +X \ No newline at end of file diff --git a/internal/embedded/static/icons/social/youtube.svg b/internal/embedded/static/icons/social/youtube.svg new file mode 100644 index 00000000..0492366a --- /dev/null +++ b/internal/embedded/static/icons/social/youtube.svg @@ -0,0 +1 @@ +YouTube \ No newline at end of file diff --git a/internal/embedded/static/icons/ui/moon.svg b/internal/embedded/static/icons/ui/moon.svg new file mode 100644 index 00000000..07b397d1 --- /dev/null +++ b/internal/embedded/static/icons/ui/moon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/internal/embedded/static/icons/ui/pin.svg b/internal/embedded/static/icons/ui/pin.svg new file mode 100644 index 00000000..9750f3f9 --- /dev/null +++ b/internal/embedded/static/icons/ui/pin.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/internal/embedded/static/icons/ui/sun-moon.svg b/internal/embedded/static/icons/ui/sun-moon.svg new file mode 100644 index 00000000..91a23709 --- /dev/null +++ b/internal/embedded/static/icons/ui/sun-moon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/internal/embedded/static/icons/ui/sun.svg b/internal/embedded/static/icons/ui/sun.svg new file mode 100644 index 00000000..65c97c7c --- /dev/null +++ b/internal/embedded/static/icons/ui/sun.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/internal/embedded/static/images/ShiZhi.png b/internal/embedded/static/images/ShiZhi.png new file mode 100644 index 00000000..52731f41 Binary files /dev/null and b/internal/embedded/static/images/ShiZhi.png differ diff --git a/internal/embedded/static/images/ShiZhi_contrast.png b/internal/embedded/static/images/ShiZhi_contrast.png new file mode 100644 index 00000000..2e1dc0cf Binary files /dev/null and b/internal/embedded/static/images/ShiZhi_contrast.png differ diff --git a/internal/embedded/static/images/avatar/shelby.jpg b/internal/embedded/static/images/avatar/shelby.jpg new file mode 100644 index 00000000..8b85745f Binary files /dev/null and b/internal/embedded/static/images/avatar/shelby.jpg differ diff --git a/internal/embedded/static/images/dalloway-paper.png b/internal/embedded/static/images/dalloway-paper.png new file mode 100644 index 00000000..0dcbbe2b Binary files /dev/null and b/internal/embedded/static/images/dalloway-paper.png differ diff --git a/internal/embedded/static/images/og/.gitkeep b/internal/embedded/static/images/og/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/internal/embedded/static/images/old-wall.png b/internal/embedded/static/images/old-wall.png new file mode 100644 index 00000000..ad12afa4 Binary files /dev/null and b/internal/embedded/static/images/old-wall.png differ diff --git a/internal/embedded/static/images/settings-paper.webp b/internal/embedded/static/images/settings-paper.webp new file mode 100644 index 00000000..0b046c61 Binary files /dev/null and b/internal/embedded/static/images/settings-paper.webp differ diff --git a/internal/embedded/static/js/archive.js b/internal/embedded/static/js/archive.js new file mode 100644 index 00000000..d4751605 --- /dev/null +++ b/internal/embedded/static/js/archive.js @@ -0,0 +1 @@ +"use strict";(()=>{(()=>{let G=new Map;function re(){return window.location.pathname.startsWith("/en_US/")?"/en_US/archive/data.json":"/archive/data.json"}function oe(m){if(G.has(m))return G.get(m);let a=fetch(m).then(d=>{if(!d.ok)throw new Error("Fetch failed");return d.json()}).then(d=>{let u=d.rows||[],v=new Map,g=new Map;return u.forEach((f,L)=>{v.set(f.id,f),g.set(f.id,L)}),{rows:u,rowById:v,rowIndexById:g}}).catch(d=>(console.error("Failed to load archive data:",d),{rows:[],rowById:new Map,rowIndexById:new Map}));return G.set(m,a),a}let F=new Set,x=new Map;function se(m){let a=!1,d=!1,u=!1,v=null,g=null,f=null,L=0,B=!1,D=15,C=10,O=800,M=1200,y=window.innerWidth<=640,V=y?50:80,K=y?90:130,c=null,p=[],P=0,S=new Map,b=null,A=null,H=document.querySelector(".archive-virtual-list"),I=document.querySelector(".archive-virtual-window"),$=document.querySelector(".archive-virtual-spacer-top"),j=document.querySelector(".archive-virtual-spacer-bottom");function k(){return window.scrollY}function q(){return H?H.getBoundingClientRect().top+k():0}function ae(e){return x.has(e.id)?x.get(e.id):e.type==="year"?V:K}function Y(){if(!c)return;let e=c.rows;p=new Array(e.length+1),p[0]=0;let t=0;for(let n=0;ne)return o;p[o]>e?n=o:t=o+1}return Math.min(t,c.rows.length-1)}function ce(e){let t=document.createElement("div");if(t.className=e.type==="year"?"archive-virtual-row archive-year-row":"archive-virtual-row archive-item-row",e.isFirstYear&&t.classList.add("is-first-year"),t.dataset.archiveRowId=e.id,t.dataset.archiveRowType=e.type,e.type==="year"){let n=document.createElement("h2");n.id=`archive-year-${e.year}`,n.textContent=e.year||"",t.appendChild(n);let o=document.createElement("div");t.appendChild(o)}else{let n=document.createElement("div");n.setAttribute("aria-hidden","true"),t.appendChild(n);let o=document.createElement("div");o.className="archive-item-track";let r=document.createElement("div");r.className="archive-item";let s=document.createElement("time");e.date&&s.setAttribute("datetime",e.date),s.textContent=e.dateShort||"",r.appendChild(s);let i=document.createElement("div");i.className="archive-entry";let l=document.createElement("a");if(e.url&&(l.href=e.url),l.textContent=e.title||"",i.appendChild(l),e.readingTime){let w=document.createElement("span");w.className="archive-reading-time",w.textContent=e.readingTime,i.appendChild(w)}if(e.summary){let w=document.createElement("p");w.textContent=e.summary,i.appendChild(w)}r.appendChild(i),o.appendChild(r),t.appendChild(o)}return t}function J(e,t){if(t.type==="note"&&!(e.classList.contains("is-intro-revealing")||e.classList.contains("reveal-trigger")||e.classList.contains("is-seen"))){if(F.has(t.id)){e.classList.add("is-seen"),e.classList.remove("is-pending-reveal"),A?.unobserve(e);return}e.classList.add("is-pending-reveal"),e.classList.remove("is-seen"),d&&A?.observe(e)}}function Q(e,t,n){let o=e.dataset.archiveRowId;if(!o||e.classList.contains("is-intro-revealing")||e.classList.contains("reveal-trigger")||e.classList.contains("is-seen"))return;if(F.add(o),e.classList.remove("is-pending-reveal"),A?.unobserve(e),document.documentElement.dataset.reducedMotion==="true"){e.classList.add("is-seen");return}let r=n==="intro"?"is-intro-revealing":"reveal-trigger";e.classList.add(r),e.style.setProperty("--stagger-index",String(t)),e.addEventListener("animationend",function s(i){a||i.target!==e&&!i.target.classList.contains("archive-item")||(e.classList.remove(r),e.classList.add("is-seen"),e.removeEventListener("animationend",s))},{once:!0})}function z(){if(a||!H||!I||!$||!j||!c)return;let e=window.innerHeight,t=k(),n=q(),o=t-n,r=Math.max(0,o-O),s=o+e+M,i=_(r),l=_(s),w=p[i],ge=P-p[l+1];$.style.height=`${w}px`,j.style.height=`${ge}px`;let ne=new Set,U=[];for(let h=i;h<=l;h++)h<0||h>=c.rows.length||(ne.add(c.rows[h].id),U.push(c.rows[h].id));for(let[h,R]of S.entries())ne.has(h)||(b&&b.unobserve(R),A&&A.unobserve(R),R.remove(),S.delete(h));let E=I.firstElementChild;for(let h=0;h{let t=!1;e.forEach(n=>{if(n.isIntersecting){let o=n.target,r=o.dataset.archiveRowId;if(r&&!F.has(r)){let s=Math.min(L,C);L++,t=!0,Q(o,s,"scroll")}}}),t&&(g!==null&&clearTimeout(g),g=window.setTimeout(()=>{L=0},300))},{rootMargin:"-40px 0px"})}function de(){b=new ResizeObserver(e=>{let t=!1,n=-1,o=0;if(c&&H){let r=k()-q();n=_(r),n>=0&&(o=r-p[n])}for(let r of e){let i=r.target.dataset.archiveRowId;if(!i)continue;let l=r.borderBoxSize?.[0]?.blockSize||r.contentRect.height,w=x.get(i);(w===void 0||Math.abs(w-l)>.5)&&l>0&&(x.set(i,l),t=!0)}if(t){if(Y(),n>=0&&!B){let i=p[n]+o+q()-k();Math.abs(i)>1&&(B=!0,window.scrollBy(0,i),requestAnimationFrame(()=>{B=!1}))}u||(u=!0,v=requestAnimationFrame(()=>{a||(z(),u=!1)}))}})}function Z(){let e=window.innerWidth<=640;e!==y&&(y=e,V=y?50:80,K=y?90:130,x.clear(),Y(),u||(u=!0,v=requestAnimationFrame(()=>{a||(z(),u=!1)})))}function ee(){u||(u=!0,v=requestAnimationFrame(()=>{a||(z(),u=!1)})),fe()}function ue(){if(a||!c||!H)return;let e=k()-q(),t=_(e);if(t>=0&&t10)&&history.replaceState({...r,daybookArchive:s},"")}}function fe(){f!==null&&clearTimeout(f),f=window.setTimeout(ue,200)}function te(){if(!(!c||a))for(let[e,t]of S.entries()){let n=c.rowById.get(e);n&&J(t,n)}}function he(){if(!c||a||!I)return;let e=0,t=window.innerHeight,n=Array.from(I.children);for(let o of n){let r=o,s=r.dataset.archiveRowId;if(!s)continue;let i=c.rowById.get(s);if(!i||i.type!=="note"||F.has(s))continue;let l=r.getBoundingClientRect();if(l.bottom>0&&l.top0){let i=s[0];i.type==="reload"&&(e=!0),i.type==="navigate"&&(t=!0)}}let n=I.querySelectorAll(".archive-virtual-row");n.forEach(s=>{let i=s,l=i.dataset.archiveRowId;l&&S.set(l,i)});let o=re();if(c=await oe(o),a||!c||c.rows.length===0)return;Y(),le(),de(),window.addEventListener("resize",Z),window.addEventListener("scroll",ee,{passive:!0}),n.forEach(s=>{let i=s,l=i.dataset.archiveRowId;l&&(x.set(l,i.getBoundingClientRect().height),b?.observe(i))}),Y();let r=!1;if(e||m==="initial"&&t){if(history.state&&history.state.daybookArchive){let s=Object.assign({},history.state);delete s.daybookArchive,history.replaceState(s,"")}window.scrollTo(0,0)}else if(m==="traverse"&&history.state&&history.state.daybookArchive){let s=history.state.daybookArchive;if(s.anchorId){let i=c.rowIndexById.get(s.anchorId);if(i!==void 0){let l=p[i]+(s.anchorOffset||0);$.style.height=`${l}px`,j.style.height=`${P-l}px`,window.scrollTo(0,q()+l),r=!0}}}z(),r?(d=!0,te()):v=requestAnimationFrame(()=>{a||(he(),d=!0,te())})}function ve(){a=!0,window.removeEventListener("scroll",ee),window.removeEventListener("resize",Z),b&&b.disconnect(),A&&A.disconnect(),v!==null&&cancelAnimationFrame(v),g!==null&&clearTimeout(g),f!==null&&clearTimeout(f),S.clear()}return{init:me,destroy:ve}}let N=null;function X(){document.querySelectorAll(".archive-stat-num:not(.anim-done)").forEach(a=>{let d=a.getAttribute("data-started-at");if(d){let C=Date.parse(d);if(Number.isFinite(C)){let O=Math.max(0,Math.floor((Date.now()-C)/864e5));a.setAttribute("data-target",String(O))}}let u=a.getAttribute("data-target");if(!u)return;let v=parseInt(u,10);if(isNaN(v))return;a.classList.add("anim-done");let g=a.getAttribute("data-format")==="k",f=g?v/1e3:v;if(matchMedia("(prefers-reduced-motion: reduce)").matches||document.documentElement.dataset.reducedMotion==="true"){a.textContent=g?f.toFixed(1):f.toLocaleString();return}let L=1200,B=performance.now(),D=C=>{if(!a.isConnected)return;let O=C-B,M=Math.min(O/L,1);M=M===1?1:1-Math.pow(2,-10*M);let y=M*f;g?a.textContent=y.toFixed(1):a.textContent=Math.floor(y).toLocaleString(),M<1?requestAnimationFrame(D):a.textContent=g?f.toFixed(1):f.toLocaleString()};requestAnimationFrame(D)})}document.addEventListener("daybook:page-load",m=>{if(N&&(N.destroy(),N=null),!document.querySelector(".archive-page"))return;let d=(m.detail||{}).navigationType||"initial";N=se(d),N.init(),X()}),document.addEventListener("daybook:stats-loaded",()=>{X()})})();})(); diff --git a/internal/embedded/static/js/code-copy.js b/internal/embedded/static/js/code-copy.js new file mode 100644 index 00000000..e7d141db --- /dev/null +++ b/internal/embedded/static/js/code-copy.js @@ -0,0 +1 @@ +"use strict";(()=>{(function(){var i=1400;function n(o,t){let e=o.querySelector(".material-symbol");e&&(e.textContent=t)}function a(o){let t=document.createElement("textarea");t.value=o,t.setAttribute("readonly",""),t.style.position="fixed",t.style.left="-9999px",t.style.top="0",document.body.appendChild(t),t.select();try{return document.execCommand("copy"),!0}finally{t.remove()}}async function s(o){return navigator.clipboard&&window.isSecureContext?(await navigator.clipboard.writeText(o),!0):a(o)}document.addEventListener("click",async function(o){let e=o.target.closest(".code-copy-button");if(!e)return;let r=e.closest(".highlight"),c=r&&r.querySelector("pre code");if(c){try{await s(c.textContent)}catch{return}window.clearTimeout(e._daybookCopyTimer),e.classList.add("is-copied"),n(e,"check"),e._daybookCopyTimer=window.setTimeout(function(){e.classList.remove("is-copied"),n(e,"content_copy")},i)}})})();})(); diff --git a/internal/embedded/static/js/custom-cursor.js b/internal/embedded/static/js/custom-cursor.js new file mode 100644 index 00000000..edcb6040 --- /dev/null +++ b/internal/embedded/static/js/custom-cursor.js @@ -0,0 +1 @@ +"use strict";(()=>{var Z=class{constructor(){this.rafId=null;this.state="hidden";this.width=0;this.height=0;this.cursor={x:window.innerWidth/2,y:window.innerHeight/2};this.dy=new Float64Array(200);this.dx=new Float64Array(200);this.zy=new Float64Array(200);this.zx=new Float64Array(200);this.pscale=new Float64Array(200);this.popacity=new Float64Array(200);this.pradiusOffset=new Float64Array(200);this.pdx=new Float64Array(200);this.pdy=new Float64Array(200);this.vx=new Float64Array(200);this.vy=new Float64Array(200);this.sum=0;this.theDays=["SUNDAY","MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY"];this.theMonths=["JANUARY","FEBRUARY","MARCH","APRIL","MAY","JUNE","JULY","AUGUST","SEPTEMBER","OCTOBER","NOVEMBER","DECEMBER"];this.dateInWords=[];this.clockNumbers=["3","4","5","6","7","8","9","10","11","12","1","2"];this.hourHand=["\u2022","\u2022","\u2022"];this.minuteHand=["\u2022","\u2022","\u2022","\u2022"];this.secondHand=["\u2022","\u2022","\u2022","\u2022","\u2022"];this.F=this.clockNumbers.length;this.siz=70;this.eqf=360/this.F;this.eqd=0;this.han=12;this.colors={main:"",text:"",muted:""};this.lastDateString="";this.canvas=document.createElement("canvas"),this.canvas.className="daybook-cursor-clock",this.canvas.setAttribute("aria-hidden","true"),this.ctx=this.canvas.getContext("2d"),this.fontFamily=getComputedStyle(document.documentElement).getPropertyValue("--font-mono"),document.body.appendChild(this.canvas),this.sum=this.dateInWords.length+this.F+this.hourHand.length+this.minuteHand.length+this.secondHand.length+1;for(let t=0;t<200;t++)this.dy[t]=0,this.dx[t]=0,this.zy[t]=0,this.zx[t]=0,this.pscale[t]=0,this.popacity[t]=0,this.pradiusOffset[t]=-15,this.vx[t]=0,this.vy[t]=0;this.onResizeBound=()=>this.onResize(),this.onResize(),window.addEventListener("resize",this.onResizeBound,{passive:!0}),this.updateDateWords()}onResize(){this.width=window.innerWidth,this.height=window.innerHeight;let t=window.devicePixelRatio||1;this.canvas.width=this.width*t,this.canvas.height=this.height*t,this.canvas.style.width=`${this.width}px`,this.canvas.style.height=`${this.height}px`,this.ctx.scale(t,t)}updateColors(){let t=getComputedStyle(document.body);this.colors.main=t.getPropertyValue("--color-accent").trim()||"blue",this.colors.text=t.getPropertyValue("--color-text").trim()||"black",this.colors.muted=t.getPropertyValue("--color-muted").trim()||"gray"}updateDateWords(){let t=new Date,e=t.getDate(),s=t.getFullYear(),l=` ${this.theDays[t.getDay()]} ${this.theMonths[t.getMonth()]} ${e} ${s} `;l!==this.lastDateString&&(this.lastDateString=l,this.dateInWords=l.split(""),this.eqd=360/this.dateInWords.length,this.sum=this.dateInWords.length+this.F+this.hourHand.length+this.minuteHand.length+this.secondHand.length+1)}updateTarget(t,e){this.cursor.x=t,this.cursor.y=e}start(t,e){if(!(this.state==="entering"||this.state==="active")){if(document.dispatchEvent(new Event("daybook:code-font-needed")),this.updateTarget(t,e),this.state==="hidden"||this.state==="snapped")for(let s=0;s.01&&(t=!1);t&&(this.state="hidden",this.canvas.classList.remove("is-visible"))}else if(this.state==="snapped"){for(let e=0;e0?t=!1:this.popacity[e]=0;t&&(this.state="hidden",this.canvas.classList.remove("is-visible"))}else this.state==="active"&&(t=!1);if(this.state==="hidden"){this.rafId=null,this.ctx.clearRect(0,0,this.width,this.height);return}this.state!=="snapped"&&this.updatePositions(),this.draw(),this.rafId=requestAnimationFrame(()=>this.loop())}updatePositions(){for(let e=0;e{let e=t-this.started,s=e0?this.settleTimer=window.setTimeout(()=>this.fadeOut(),e):this.fadeOut()}fadeOut(){this.settleTimer=0,this.element.parentElement?.classList.remove("is-loading"),window.clearTimeout(this.exitTimer),this.exitTimer=window.setTimeout(()=>this.reset(),C)}reset(){window.clearTimeout(this.settleTimer),this.settleTimer=0,window.clearTimeout(this.exitTimer),this.exitTimer=0,cancelAnimationFrame(this.raf),this.raf=0,this.element.parentElement?.classList.remove("is-loading"),this.path.setAttribute("d",T[0])}destroy(){this.reset(),this.element.remove()}};function H(){return document.documentElement.dataset.reducedMotion==="true"||window.matchMedia("(prefers-reduced-motion: reduce)").matches}var g=!1,n=null,y=null,r=null,m=null,P=!1,v=!1,W=matchMedia("(min-width: 961px) and (hover: hover) and (pointer: fine)"),K=matchMedia("(prefers-reduced-motion: reduce)"),d=window.innerWidth/2,h=window.innerHeight/2,I=d,k=h,S=!1,p="default",M=!1,N=performance.now(),R=d,q=h,j=3,D={hover:'a, button, [role="button"], summary, .note-card, .memo-card[data-memo-card], .nav-link, .theme-toggle, .mobile-drawer-button, .graph-toolbar button, .copy-button',text:'p, li, blockquote, .post-content, input, textarea, select, [contenteditable="true"], pre, code, .search-input',zoom:'.post-content img:not(.no-lightbox):not([data-no-lightbox="true"]), .gallery-image, .zoom-img'};function Y(){I=d,k=h,n&&(n.style.transform=`translate3d(${I}px, ${k}px, 0)`),S=!1,y=null}function z(L=!1){M=!1,r&&(L?r.snap():r.stop())}function Q(L){if(L.pointerType==="touch")return;v=!0,d=L.clientX,h=L.clientY,w(L.target);let t=performance.now(),e=Math.max(t-N,16),s=d-R,l=h-q,f=s*s+l*l;if(M&&r){let b=0;e>0&&(b=Math.sqrt(f)/e),b>j?z(!0):r.updateTarget(d,h)}N=t,R=d,q=h,S||(S=!0,y=requestAnimationFrame(Y))}function u(L){p===L||!n||(p=L,n.dataset.cursorState=L,x(),L!=="default"&&L!=="hidden"&&(M=!1,r&&r.stop()))}function w(L){if(!v){u("hidden");return}if(!(L instanceof Element)){u("default");return}if(L.closest(".settings-overlay")){u("hidden");return}if(L.closest(D.zoom)){u("zoom");return}if(L.closest(D.hover)){u("hover");return}if(L.closest(D.text)){u("text");return}u("default")}function B(L){w(L.target)}function U(){n&&n.classList.add("is-active")}function V(){n&&n.classList.remove("is-active")}function _(L){L.relatedTarget===null&&(v=!1,u("hidden"))}function $(L){v=!0,w(L.target)}function G(L){document.documentElement.dataset.navigationPending!=="true"&&document.documentElement.getAttribute("data-clock-cursor")==="true"&&(M?z(!1):p==="default"&&(r||(r=new Z),M=!0,r.start(I,k)))}function X(){document.hidden?z(!1):r&&r.updateColors(),x()}function J(){z(!1),w(document.elementFromPoint(d,h))}function x(){if(!n||!m)return;let L=document.documentElement.dataset.navigationLoading==="true"&&p!=="hidden"&&!document.hidden;L!==P&&(P=L,L?(M=!1,r?.destroy(),r=null,m.start()):m.stop(p==="hidden"||document.hidden))}function t3(){if(!(typeof window>"u"||g)&&!(!W.matches||H())&&document.documentElement.getAttribute("data-use-system-cursor")!=="true"){if(!n){n=document.createElement("div"),n.className="daybook-cursor",n.setAttribute("aria-hidden","true"),n.dataset.cursorState="default";let L=document.createElement("div");L.className="daybook-cursor__core",n.appendChild(L);let t=document.createElement("div");t.className="daybook-cursor__viewfinder";for(let e=0;e<4;e++){let s=document.createElement("div");s.className="daybook-cursor__corner",t.appendChild(s)}n.appendChild(t),m=new F,n.append(m.element)}document.body.contains(n)||document.body.appendChild(n),document.documentElement.classList.add("has-custom-cursor"),r||(r=new Z),I=d,k=h,S=!1,p=v?"default":"hidden",n.dataset.cursorState=p,P=!1,M=!1,N=performance.now(),R=d,q=h,document.addEventListener("mouseover",B,{passive:!0}),document.addEventListener("mousedown",U,{passive:!0}),document.addEventListener("mouseup",V,{passive:!0}),document.addEventListener("mouseleave",_),document.addEventListener("mouseenter",$),document.addEventListener("click",G,{passive:!0}),document.addEventListener("visibilitychange",X),document.addEventListener("daybook:page-load",J),document.addEventListener("daybook:navigation-loading",x),g=!0,w(document.elementFromPoint(d,h)),Y(),x()}}function e3(){g&&(document.removeEventListener("mouseover",B),document.removeEventListener("mousedown",U),document.removeEventListener("mouseup",V),document.removeEventListener("mouseleave",_),document.removeEventListener("mouseenter",$),document.removeEventListener("click",G),document.removeEventListener("visibilitychange",X),document.removeEventListener("daybook:page-load",J),document.removeEventListener("daybook:navigation-loading",x),m?.destroy(),m=null,P=!1,y!==null&&(cancelAnimationFrame(y),y=null),r&&(r.destroy(),r=null),n&&(n.parentNode&&n.parentNode.removeChild(n),n=null),document.documentElement.classList.remove("has-custom-cursor"),g=!1)}function E(){!W.matches||H()||document.documentElement.dataset.useSystemCursor==="true"?e3():t3()}E();document.addEventListener("pointermove",L=>{L.pointerType!=="touch"&&(g?Q(L):(d=L.clientX,h=L.clientY,v=!0))},{passive:!0});W.addEventListener("change",E);K.addEventListener("change",E);document.addEventListener("daybook:settings-change",E);new MutationObserver(E).observe(document.documentElement,{attributes:!0,attributeFilter:["data-use-system-cursor","data-reduced-motion"]});})(); diff --git a/internal/embedded/static/js/daybook-router.js b/internal/embedded/static/js/daybook-router.js new file mode 100644 index 00000000..c8a6e382 --- /dev/null +++ b/internal/embedded/static/js/daybook-router.js @@ -0,0 +1 @@ +"use strict";(()=>{var we=new WeakMap;function A(e,t){if(!(e instanceof HTMLElement)||e.textContent===t)return;let o=e.textContent||"";clearTimeout(we.get(e)),e.classList.remove("is-number-flipping"),e.removeAttribute("data-number-previous"),e.classList.add("number-flip");let n=document.createElement("span");n.className="number-flip-current",n.textContent=t,e.replaceChildren(n),!(!o||!e.isConnected||matchMedia("(prefers-reduced-motion: reduce)").matches||document.documentElement.dataset.reducedMotion==="true")&&(e.dataset.numberPrevious=o,e.offsetWidth,e.classList.add("is-number-flipping"),we.set(e,setTimeout(()=>{e.classList.remove("is-number-flipping"),e.removeAttribute("data-number-previous"),we.delete(e)},440)))}var _=new Map,Ee=null,oe=null,Be=e=>decodeURI(new URL(e,location.origin).pathname),_e=e=>JSON.stringify([e.dataset.commentRepo,e.dataset.commentCategory,e.dataset.commentPath]),ce=e=>Number.isSafeInteger(e)&&Number(e)>=0;async function tt(e,t){if(document.documentElement.dataset.commentsDisabled==="true")return;let o=_e(e),n=_.get(o);if(!n||n.expires<=Date.now()){let s=new URLSearchParams({repo:e.dataset.commentRepo||"",category:e.dataset.commentCategory||"",term:e.dataset.commentPath||"",strict:"true",number:"0",first:"1"}),r=await fetch(`https://giscus.app/api/discussions?${s}`,{credentials:"omit",signal:AbortSignal.any([t,AbortSignal.timeout(8e3)])}),d=await r.json(),g;if(r.status===404&&d.error==="Discussion not found")g=0;else if(r.ok&&ce(d.discussion?.totalCommentCount)&&ce(d.discussion?.totalReplyCount))g=d.discussion.totalCommentCount+d.discussion.totalReplyCount;else return;if(t.aborted)return;n=_.get(o)!==n?_.get(o):{count:g,expires:Date.now()+6e4},n||(n={count:g,expires:Date.now()+6e4}),_.size>=500&&_.clear(),_.set(o,n)}!t.aborted&&e.isConnected&&A(e.querySelector("[data-comment-count]"),n.count.toLocaleString())}async function ot(e,t){let o=new URLSearchParams({path:e.dataset.path||""}),n=await fetch(`/api/stats?${o}`,{signal:AbortSignal.any([t,AbortSignal.timeout(8e3)])});if(!n.ok)return;let s=await n.json();!t.aborted&&e.isConnected&&ce(s.pageViews)&&Be(s.path)===Be(e.dataset.path)&&A(e,s.pageViews.toLocaleString())}function de(){Ee?.abort(),oe?.disconnect();let e=new AbortController;Ee=e;let t=[],o=0,n=()=>{if(!e.signal.aborted)for(;o<3&&t.length;){let r=t.shift();o++,r().catch(()=>{}).finally(()=>{o--,n()})}},s=r=>{let d=r.querySelector("[data-comment-path]");if(d&&t.push(()=>tt(d,e.signal)),r.hasAttribute("data-memo-card")){let g=r.querySelector("[data-memo-views]");g&&t.push(()=>ot(g,e.signal))}n()};oe=new IntersectionObserver(r=>{for(let d of r)d.isIntersecting&&(oe?.unobserve(d.target),s(d.target))},{rootMargin:"160px"}),document.querySelectorAll(".memo-card, .note-header").forEach(r=>oe.observe(r))}document.addEventListener("daybook:before-swap",()=>{Ee?.abort(),oe?.disconnect()});document.addEventListener("daybook:settings-change",de);document.addEventListener("daybook:comments-loaded",e=>{let{path:t,count:o}=e.detail;if(ce(o))for(let n of document.querySelectorAll("[data-comment-path]"))n.dataset.commentPath===t&&(_.set(_e(n),{count:o,expires:Date.now()+6e4}),A(n.querySelector("[data-comment-count]"),o.toLocaleString()))});document.addEventListener("click",e=>{if(e.defaultPrevented||e.button!==0||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey)return;let t=e.target.closest("a[data-comment-path]");if(!t)return;let o=new URL(t.href);if(o.pathname!==location.pathname||o.search!==location.search)return;let n=document.getElementById("comments");n&&(e.preventDefault(),window.daybookReplaceURL?window.daybookReplaceURL(o.href):history.replaceState(history.state,"",o.href),n.scrollIntoView({behavior:"instant"}),n.focus({preventScroll:!0}))});var Le="daybook:privacy:v1";function $e(){try{let e=JSON.parse(localStorage.getItem(Le)||"null");return typeof e?.analytics=="boolean"?{analytics:e.analytics}:null}catch{return null}}var ne=$e(),Y=null;function Ve(){return ne}function F(){return ne?.analytics===!0}function Se(){let e=Y,t=F();return Y=(async()=>{if(await e,document.body.dataset.statsEnabled!=="true")return!0;try{let o=await fetch("/api/privacy",{method:"PUT",credentials:"same-origin",cache:"no-store",headers:{"Content-Type":"application/json"},body:JSON.stringify({analytics:t}),signal:AbortSignal.timeout(12e3)});if(!o.ok)return!1;let n=await o.json();return n.version===1&&n.analytics===t}catch{return!1}})(),Y}async function X(){Y||Se();let e,t;do e=Y,t=await e;while(e!==Y);return t}async function Ke(e){ne={analytics:e};try{localStorage.setItem(Le,JSON.stringify(ne))}catch{}let t=await Se();return document.dispatchEvent(new CustomEvent("daybook:privacy-change")),t}window.addEventListener("storage",e=>{e.key!==Le&&e.key!==null||(ne=$e(),Se().then(()=>document.dispatchEvent(new CustomEvent("daybook:privacy-change"))))});var ue=new WeakMap;function ke(){return document.documentElement.dataset.reducedMotion==="true"||window.matchMedia("(prefers-reduced-motion: reduce)").matches}function J(e,t,o=!1,n){let s=ue.get(e),r=s?.text??e.textContent?.trim()??"";s&&clearTimeout(s.timer),ue.delete(e);let d=()=>{e.textContent=t,e.classList.remove("text-roll-active"),ue.delete(e),n?.()};if(o||ke()||r===t){d();return}let g=Array.from(r),b=Array.from(t),l=Math.max(g.length,b.length);e.replaceChildren(),e.classList.add("text-roll-active");for(let c=0;c!e||t.dataset.likePath===e)}function Te(e){for(let t of G(e.path))t.dataset.likeReady="true",t.setAttribute("aria-pressed",String(e.liked)),A(t.querySelector("[data-like-count]"),e.count.toLocaleString()),t.dataset.uiAria=e.liked?"likes.unlike":"likes.like",t.dataset.uiTooltip=t.dataset.uiAria,t.setAttribute("aria-label",x(t.dataset.uiAria)),t.dataset.tooltip=x(t.dataset.uiAria)}var Ae=new WeakMap;function Ce(e){clearTimeout(Ae.get(e)),Ae.delete(e),delete e.dataset.likeFeedback,e.dataset.uiAria=e.getAttribute("aria-pressed")==="true"?"likes.unlike":"likes.like",e.setAttribute("aria-label",x(e.dataset.uiAria))}function ze(e,t){for(let o of G(e)){Ce(o);let n=o.querySelector(".material-symbol");n&&n.offsetWidth,o.dataset.likeFeedback=t,t==="error"&&(o.dataset.uiAria="likes.failed",o.setAttribute("aria-label",x("likes.failed"))),Ae.set(o,setTimeout(()=>Ce(o),700))}}async function Me(e,t){if(!await X())throw new Error("Privacy API unavailable");let o=new URLSearchParams;for(let r of e)o.append("path",r);let n=await fetch(t===void 0?`/api/likes?${o}`:"/api/likes",{method:t===void 0?"GET":"PUT",credentials:"same-origin",cache:"no-store",signal:AbortSignal.timeout(12e3),...t===void 0?{}:{headers:{"Content-Type":"application/json"},body:JSON.stringify({path:e[0],liked:t})}});if(!n.ok)throw new Error("Likes unavailable");let s=await n.json();if(!Array.isArray(s.items)||s.items.length!==e.length||s.items.some(r=>!e.includes(r.path)||typeof r.liked!="boolean"||!Number.isSafeInteger(r.count)||r.count<0))throw new Error("Invalid likes response");return s.items}var je=Promise.resolve();function Fe(e){je=je.then(e).catch(()=>{})}var me=new Set;function xe(e,t){for(let o of G(e))o.disabled=t,o.setAttribute("aria-busy",String(t))}function Pe(e){let t=G();for(let n of t)try{n.dataset.likePath=decodeURI(new URL(n.dataset.likePath,location.origin).pathname).replace(/\/+$/,"")+"/"}catch{}if(!t.length||document.body.dataset.statsEnabled!=="true")return;let o=[...new Set(t.map(n=>n.dataset.likePath))];Fe(async()=>{if(await e?.catch(()=>{}),!!t.some(n=>n.isConnected))for(let n=0;nxe(r,me.has(r)))}}})}document.addEventListener("click",e=>{let t=e.target?.closest("[data-like-path]");if(!t||t.disabled)return;let o=t.dataset.likePath;me.has(o)||(me.add(o),G(o).forEach(Ce),xe(o,!0),Fe(async()=>{try{let n=t.getAttribute("aria-pressed")==="true";if(t.dataset.likeReady!=="true"){let[r]=await Me([o]);if(!r)throw new Error("Missing like state");Te(r),n=r.liked}(await Me([o],!n)).forEach(Te),ze(o,"success")}catch{ze(o,"error")}finally{me.delete(o),xe(o,!1)}}))});function Ye(){let e=document.querySelector("#rss-dialog");if(!e||e.dataset.bound)return;e.dataset.bound="true";let t=e.querySelector("[data-rss-address]"),o=e.querySelector("[data-rss-feed]"),n=e.querySelector('[role="status"]'),s=e.querySelector("[data-rss-copy]"),r=s.querySelector("[data-rss-copy-text]"),d=0,g=0;function b(){g++,clearTimeout(d),s.dataset.uiAria="rss.copy",s.setAttribute("aria-label",x("rss.copy")),J(r,x("rss.copy"),!0),n.textContent=""}document.addEventListener("click",l=>{let c=l.target?.closest("[data-rss-open]");!c||l.button!==0||l.ctrlKey||l.metaKey||l.shiftKey||l.altKey||(l.preventDefault(),t.value=c.href,o.href=c.href,b(),e.open||(e.classList.add("is-open"),e.showModal()))},!0),s.addEventListener("click",async()=>{let l=t.value,c=++g;clearTimeout(d),n.textContent="";try{if(await navigator.clipboard.writeText(l),!e.open||c!==g)return;s.dataset.uiAria="action.copied",s.setAttribute("aria-label",x("action.copied")),J(r,x("action.copied")),d=window.setTimeout(()=>{s.dataset.uiAria="rss.copy",s.setAttribute("aria-label",x("rss.copy")),J(r,x("rss.copy"))},1500)}catch{if(!e.open||c!==g)return;b(),t.focus(),t.select(),n.textContent=x("rss.copy_fallback")}}),e.addEventListener("keydown",l=>{l.key==="Escape"&&l.stopPropagation()}),e.querySelector("[data-rss-close]").addEventListener("click",()=>e.close()),e.addEventListener("close",()=>{e.classList.remove("is-open"),b()}),document.addEventListener("daybook:before-swap",()=>e.close()),document.addEventListener("daybook:lang-change",b)}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",Ye,{once:!0}):Ye();function He(e){try{let t=new URL(e,window.location.origin),o=decodeURI(t.pathname);return o=o.replace(/\/+/g,"/"),o.startsWith("/")||(o="/"+o),o!=="/"&&!o.endsWith("/")&&(o+="/"),o}catch{return"/"}}var ae=null,Xe="";async function nt(e,t){let o=He(e);if(!(document.body.dataset.statsEnabled==="true"))return null;let s="/api";if(t&&ae&&Xe===o)return ae;Xe=o;let r=ae;return ae=(async()=>{if(await r,!await X())return null;try{let d=await fetch(`${s}/hit`,{method:"POST",headers:{"Content-Type":"application/json"},credentials:F()?"same-origin":"omit",body:JSON.stringify({path:o,analytics:F(),countView:t}),signal:AbortSignal.timeout(12e3)});if(d.ok)return await d.json()}catch(d){console.error("[Site Stats] Post hit failed",d)}return null})(),ae}function fe(e=document,t=!0){let o=nt(window.location.pathname,t);return o?(o.then(n=>{if(!n)return;e.querySelectorAll("[data-site-visitors]").forEach(m=>{A(m,n.visitors.toLocaleString())}),e.querySelectorAll("[data-site-views]").forEach(m=>{A(m,n.totalViews.toLocaleString())}),e.querySelectorAll("[data-page-views]").forEach(m=>{let C=m.getAttribute("data-path");C&&He(C)===n.path&&A(m,n.pageViews.toLocaleString())}),e.querySelectorAll("[data-page-views-label]").forEach(m=>{let C=m.getAttribute("data-path");C&&He(C)===n.path&&(m.textContent=n.pageViews===1?"view":"views")}),e.querySelectorAll("[data-site-visitors-anim]").forEach(m=>{m.setAttribute("data-target",n.visitors.toString())}),e.querySelectorAll("[data-site-visitors-label]").forEach(m=>{m.textContent=n.visitors===1?"visitor":"visitors"}),e.querySelectorAll("[data-site-views-anim]").forEach(m=>{m.setAttribute("data-target",n.totalViews.toString())}),e.querySelectorAll("[data-site-views-label]").forEach(m=>{m.textContent=n.totalViews===1?"k view":"k views"}),document.dispatchEvent(new CustomEvent("daybook:stats-loaded"))}),o):null}document.addEventListener("daybook:privacy-change",()=>{fe(document,!1)});function Re(e=document){e.querySelectorAll("[data-site-uptime]").forEach(o=>{let n=o.getAttribute("data-started-at");if(!n)return;let s=new Date(n).getTime(),r=new Date().getTime();if(isNaN(s)||s>r){o.textContent="--";return}let d=Math.floor((r-s)/(1e3*60*60*24));o.textContent=`${d} \u5929`})}function Ue(e){try{let t=new URL(e,window.location.origin),o=decodeURI(t.pathname);return o=o.replace(/\/+/g,"/"),o.startsWith("/")||(o="/"+o),o!=="/"&&!o.endsWith("/")&&(o+="/"),o}catch{return"/"}}var k=null,he=!1,pe=null,ie=0,at=10,$="",qe=!0;function it(e,t,o){document.querySelectorAll("[data-site-viewers]").forEach(r=>{r.classList.contains("archive-stat-num")?r.classList.contains("anim-done")?r.textContent=o.toLocaleString():(r.setAttribute("data-target",o.toString()),document.dispatchEvent(new CustomEvent("daybook:stats-loaded"))):A(r,o.toLocaleString())}),document.querySelectorAll("[data-page-viewers]").forEach(r=>{let d=r.getAttribute("data-path");d&&Ue(d)===e&&A(r,t.toLocaleString())})}function Ge(){if(k&&(k.readyState===WebSocket.OPEN||k.readyState===WebSocket.CONNECTING)||ie>at)return;he=!0,$=Ue(window.location.pathname);let t=`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}/api/presence?path=${encodeURIComponent($)}`;try{k=new WebSocket(t)}catch{he=!1,Je();return}k.onopen=()=>{he=!1,ie=0},k.onmessage=o=>{try{let n=JSON.parse(o.data);n.type==="presence"&&it(n.path,n.pageViewers,n.siteViewers)}catch{}},k.onclose=()=>{k=null,he=!1,Je()}}function Je(){if(!qe)return;pe&&clearTimeout(pe),ie++;let e=Math.min(1e3*Math.pow(2,ie),3e4);pe=setTimeout(()=>{Ge()},e)}async function Q(){if(qe=document.body.dataset.statsEnabled==="true"&&await X(),!qe){clearTimeout(pe),k&&(k.close(),k=null);return}let t=Ue(window.location.pathname);!k||k.readyState===WebSocket.CLOSED||k.readyState===WebSocket.CLOSING?($=t,ie=0,Ge()):k.readyState===WebSocket.OPEN?$!==t&&($=t,k.send(JSON.stringify({type:"navigate",path:$}))):$=t}document.addEventListener("daybook:privacy-change",()=>{Q()});function Qe(){let e=document.querySelector("#privacy-overlay");if(!e||e.dataset.bound)return;e.dataset.bound="true";let t=e.querySelector("#privacy-analytics"),o=e.querySelector("#privacy-necessary"),n=e.querySelector("[data-privacy-main]"),s=e.querySelector("[data-privacy-detail-page]"),r=e.querySelector("[data-privacy-details]"),d=e.querySelector("[data-privacy-save]"),g=e.querySelector('[role="status"]'),b=e.querySelector(".privacy-content"),l=b.parentElement,c=document.getElementById("settings-overlay"),L=c.querySelector("[data-settings-page]"),m=c.querySelector(".settings-paper"),C=b.querySelector("[data-privacy-settings-back]"),S=!1,W=null,P=!1,V=!1,re="",N=null;function K(y){W?.cancel(),!(matchMedia("(prefers-reduced-motion: reduce)").matches||document.documentElement.dataset.reducedMotion==="true")&&(W=y.animate([{opacity:0,transform:"scale(0.95)"},{opacity:1,transform:"scale(1)"}],{duration:320,easing:"cubic-bezier(0.32, 0.72, 0, 1)"}))}function Z(y=!0){S&&(W?.cancel(),l.append(b),C.hidden=!0,L.hidden=!1,m.classList.remove("has-privacy-page"),m.style.height="",c.setAttribute("aria-labelledby","settings-title"),c.removeAttribute("aria-describedby"),S=!1,y&&(K(L),c.querySelector("[data-privacy-open]").focus({preventScroll:!0})))}function O(){let y=document.documentElement.lang.toLowerCase().startsWith("en");d.textContent=P?y?"Saving\u2026":"\u4FDD\u5B58\u4E2D\u2026":y?"Save selection":"\u4FDD\u5B58\u9009\u62E9",g.textContent=V?y?"Could not confirm Cookie cleanup. Please try again.":"\u6682\u65F6\u65E0\u6CD5\u786E\u8BA4 Cookie \u5DF2\u6E05\u7406\uFF0C\u8BF7\u91CD\u8BD5\u3002":""}function ee(y,M=!0){n.hidden=y,s.hidden=!y;let R=S?c:e;R.setAttribute("aria-labelledby",y?"privacy-details-title":"privacy-title"),R.setAttribute("aria-describedby",y?"privacy-details-intro":"privacy-intro"),b.scrollTop=0,M&&(K(y?s:n),y?s.querySelector("h2").focus():r.focus())}function te(){t.checked=F(),o.checked=!t.checked}function se(y=!1){if(!(e.open||S)){if(N=document.activeElement instanceof HTMLElement?document.activeElement:null,te(),y&&(m.style.height=`${m.offsetHeight}px`,m.classList.add("has-privacy-page"),L.hidden=!0,m.append(b),C.hidden=!1,S=!0),ee(!1,!1),V=!1,O(),S){K(b),n.querySelector("h2").focus({preventScroll:!0});return}re=document.body.style.overflow,e.classList.add("is-open"),e.showModal(),document.body.style.overflow="hidden"}}function le(){P||(S?document.dispatchEvent(new CustomEvent("daybook:settings-dismiss")):e.close())}e.addEventListener("close",()=>{e.classList.remove("is-open"),document.body.style.overflow=re,N?.focus({preventScroll:!0})}),e.addEventListener("cancel",y=>{P&&y.preventDefault()}),e.querySelectorAll("[data-privacy-close]").forEach(y=>y.addEventListener("click",le)),t.addEventListener("change",()=>{o.checked=!t.checked}),o.addEventListener("change",()=>{o.checked=!0,t.checked=!1}),r.addEventListener("click",()=>ee(!0)),e.querySelector("[data-privacy-back]").addEventListener("click",()=>ee(!1)),document.addEventListener("daybook:lang-change",O),C.addEventListener("click",()=>{P||Z()}),document.addEventListener("daybook:privacy-open",y=>se(y.detail?.withinSettings===!0)),document.addEventListener("daybook:settings-close",y=>{if(P&&S){y.preventDefault();return}Z(!1)}),document.addEventListener("keydown",y=>{if(!S||y.key!=="Tab")return;let M=[...c.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex="0"]')].filter(i=>i.getClientRects().length>0),R=M[0],a=M[M.length-1];y.shiftKey&&(document.activeElement===R||document.activeElement?.tagName==="H2")?(y.preventDefault(),a?.focus()):!y.shiftKey&&document.activeElement===a&&(y.preventDefault(),R?.focus())}),document.addEventListener("daybook:privacy-change",()=>{!P&&(e.open||S)&&(te(),O())});async function ge(y){if(P)return;P=!0,V=!1;let M=(S?c:e).querySelectorAll("button, input"),R=[...M].map(i=>i.disabled);M.forEach(i=>{i.disabled=!0}),O();let a=await Ke(y);P=!1,M.forEach((i,f)=>{i.disabled=R[f]}),te(),V=!a,O(),a&&le()}d.addEventListener("click",()=>{ge(t.checked)}),document.body.dataset.statsEnabled==="true"&&!Ve()&&se()}function Ze(){let e=document.createElement("span");e.id="home-tooltip",e.className="floating-tooltip",e.setAttribute("role","tooltip"),e.setAttribute("aria-hidden","true"),document.body.append(e);let t=null,o=null;function n(){e.classList.remove("is-visible"),e.setAttribute("aria-hidden","true"),t&&(o===null?t.removeAttribute("aria-describedby"):t.setAttribute("aria-describedby",o)),t=null}function s(){n(),document.querySelectorAll("[data-github-home] [title]").forEach(l=>{l.dataset.tooltip=l.getAttribute("title")||"",l.removeAttribute("title")})}function r(l){let c=l.getBoundingClientRect();if(c.bottom<0||c.top>innerHeight||c.right<0||c.left>innerWidth){n();return}let L=e.offsetWidth,m=e.offsetHeight,C=Math.max(8,Math.min(c.left+c.width/2-L/2,innerWidth-L-8)),S=c.bottom+9,W=S+m<=innerHeight-8?S:Math.max(8,c.top-m-9);e.style.left=`${C}px`,e.style.top=`${W}px`}function d(l){let c=l.dataset.tooltip;!c||l===t||(n(),t=l,o=l.getAttribute("aria-describedby"),l.setAttribute("aria-describedby",[o,e.id].filter(Boolean).join(" ")),e.textContent=c,r(l),t&&(e.setAttribute("aria-hidden","false"),e.classList.add("is-visible")))}let g=l=>l instanceof Element?l.closest("[data-github-home] [data-tooltip]"):null;document.addEventListener("pointerover",l=>{if(l.pointerType==="touch")return;let c=g(l.target);c&&d(c)}),document.addEventListener("pointerout",l=>{t&&g(l.target)===t&&g(l.relatedTarget)!==t&&n()}),document.addEventListener("focusin",l=>{let c=g(l.target);c&&d(c)}),document.addEventListener("focusout",l=>{g(l.target)===t&&n()}),document.addEventListener("keydown",l=>{l.key==="Escape"&&n()});let b=()=>{t&&(t.matches(":hover")||document.activeElement===t?r(t):n())};document.addEventListener("scroll",b,!0),window.addEventListener("resize",b),document.addEventListener("daybook:before-swap",n),document.addEventListener("daybook:page-load",s),s()}var ye=class{constructor(){this.id=0;this.timer=0;this.visible=!1;this.mobile=matchMedia("(max-width: 960px)");this.motion=matchMedia("(prefers-reduced-motion: reduce)");this.logo=document.querySelector("[data-navigation-logo]");this.logoText=this.logo?.textContent??"";this.logoWaiting=!1;this.status=document.getElementById("navigation-status");this.mobile.addEventListener("change",()=>this.syncLogo(!0)),this.motion.addEventListener("change",()=>this.syncLogo(!0)),document.addEventListener("daybook:settings-change",()=>this.syncLogo(!0)),window.addEventListener("pagehide",()=>this.finish(this.id,!0))}start(t){this.id=t,clearTimeout(this.timer),document.documentElement.dataset.navigationPending="true",!this.visible&&(this.timer=window.setTimeout(()=>{t===this.id&&(this.visible=!0,document.documentElement.dataset.navigationLoading="true",document.querySelector("[data-daybook-page]")?.setAttribute("aria-busy","true"),this.status&&(this.status.textContent=document.documentElement.lang.startsWith("en")?"Loading page\u2026":"\u6B63\u5728\u8F7D\u5165\u9875\u9762\u2026"),this.syncLogo(),document.dispatchEvent(new CustomEvent("daybook:navigation-loading")))},400))}finish(t,o=!1){if(t===this.id){if(clearTimeout(this.timer),delete document.documentElement.dataset.navigationPending,!this.visible){o&&this.syncLogo(!0);return}this.visible=!1,delete document.documentElement.dataset.navigationLoading,document.querySelector("[data-daybook-page]")?.removeAttribute("aria-busy"),this.status&&(this.status.textContent=""),this.syncLogo(o),document.dispatchEvent(new CustomEvent("daybook:navigation-loading"))}}syncLogo(t=!1){if(!this.logo)return;let o=this.visible&&this.mobile.matches;if(!(o===this.logoWaiting&&!t)){if(this.logoWaiting=o,o&&!this.logo.style.minWidth){let n=this.logo.cloneNode(!1);n.removeAttribute("data-navigation-logo"),n.style.cssText="position:absolute;visibility:hidden;white-space:nowrap;pointer-events:none",this.logo.parentElement?.append(n),n.textContent=this.logoText;let s=n.getBoundingClientRect().width;n.textContent="Waiting...",this.logo.style.minWidth=`${Math.ceil(Math.max(s,n.getBoundingClientRect().width))}px`,n.remove()}J(this.logo,o?"Waiting...":this.logoText,t||ke(),()=>{this.logoWaiting||this.logo?.style.removeProperty("min-width")}),this.mobile.matches||this.logo.style.removeProperty("min-width")}}};(()=>{let e="daybook-router",t=0,o=null,n=0,s=null,r=new ye,d=location.href,g=new Map,b=new Map,l="";function c(a){let f=a.querySelector("[data-github-login]")?.querySelector("[data-site-avatar] img");f&&(l=f.src),l&&a.querySelectorAll(".side-avatar").forEach(p=>{let u=new URL(l,location.origin);u.searchParams.set("s","96"),p.src=u.href})}function L(a){return a&&a.__daybook===!0}function m(){Ze(),c(document),L(history.state)?t=history.state.index:history.replaceState({__daybook:!0,index:t,url:location.href,fromUrl:null,scrollX:window.scrollX,scrollY:window.scrollY},""),history.scrollRestoration="manual",document.addEventListener("click",S),window.addEventListener("popstate",ge);let a=()=>{setTimeout(()=>{Qe(),M("initial",location.href,location.href);let i=fe();Pe(i),de(),i?i.finally(()=>Q()):Q(),Re()},0)};document.readyState==="loading"?window.addEventListener("DOMContentLoaded",a):a()}function C(a){try{let i=new URL(a,location.origin);return i.pathname==="/notes/"||i.pathname==="/notes"}catch{return!1}}function S(a){if(a.defaultPrevented||a.button!==0||a.metaKey||a.ctrlKey||a.shiftKey||a.altKey)return;let i=a.target.closest("a");if(i){if(i.classList.contains("note-back-link")){a.preventDefault();let f=history.state;if(f&&f.__daybook===!0&&f.fromUrl&&f.index>0)try{let p=new URL(f.fromUrl,location.origin),u=new URL(location.href),w=p.pathname.match(/\.([a-z0-9]+)$/i),h=!1;if(w&&w[1]&&(h=["pdf","zip","mp3","png","jpg","jpeg","webp","svg","gif","xml","json"].includes(w[1].toLowerCase())),p.origin===u.origin&&p.pathname!==u.pathname&&!h){history.back();return}}catch{}N(i.href,!1,null,i);return}W(i)&&(a.preventDefault(),N(i.href,!1,null,i))}}function W(a){if(!a.href||a.target&&a.target!=="_self"||a.hasAttribute("download")||a.rel&&a.rel.includes("external")||a.hasAttribute("data-daybook-reload")||a.href.startsWith("mailto:")||a.href.startsWith("tel:")||a.href.startsWith("javascript:"))return!1;let i=new URL(a.href,location.href);if(i.origin!==location.origin||i.protocol!=="http:"&&i.protocol!=="https:")return!1;let f=i.pathname.match(/\.([a-z0-9]+)$/i);if(f&&f[1]){let p=f[1].toLowerCase();if(["pdf","zip","mp3","png","jpg","jpeg","webp","svg","gif","xml","json"].includes(p))return!1}return!(i.pathname===location.pathname&&i.search===location.search&&i.hash)}function P(a){if(!a||a==="#")return null;let i=a.slice(1);try{i=decodeURIComponent(i)}catch{}return document.getElementById(i)}function V(){L(history.state)&&history.state.url===d&&history.replaceState({...history.state,scrollX:window.scrollX,scrollY:window.scrollY},"")}function re(){window.daybookCloseMobileOverlays?.(),document.body.classList.remove("is-mobile-drawer-open"),document.body.classList.remove("is-search-overlay-open"),document.body.classList.remove("is-tags-overlay-open"),document.body.classList.remove("is-media-overlay-open"),document.body.classList.remove("is-mobile-scroll-locked"),document.getElementById("daybook-media-manager")?.classList.remove("is-mobile-active")}async function N(a,i=!1,f=null,p=null){let u=new URL(a,location.origin),w=new URL(d),h=++n;if(o?.abort(),s?.skipTransition(),s=null,window.DaybookTransitionEngine?.clearTransitionClasses(),window.DaybookTransitionEngine?.clearArticleSharedTransitions(document),r.start(h),!i&&u.pathname===location.pathname&&u.search===location.search&&u.pathname===w.pathname&&u.search===w.search){r.finish(h),window.location.hash=u.hash;return}let T=new AbortController;o=T;let v=T.signal,H=!1,q=window.setTimeout(()=>{H=!0,T.abort()},15e3),B=()=>{if(h!==n||v.aborted)throw new DOMException("Navigation aborted","AbortError")},U=d;try{i||V(),re();let z=await fetch(u.href,{signal:v});if(!z.ok)throw new Error("Fetch failed");if(!(z.headers.get("content-type")||"").includes("text/html"))throw new Error("Not HTML");let et=await z.text();B();let I=new DOMParser().parseFromString(et,"text/html");c(I);let De=document.querySelector("[data-daybook-page]"),Ne=I.querySelector("[data-daybook-page]");if(await K(Promise.all([te(I),se(I)]),v),B(),!De||!Ne)throw new Error("Missing data-daybook-page");clearTimeout(q),r.finish(h);let j;i?j=f:j={__daybook:!0,index:(L(history.state)?history.state.index:t)+1,url:u.href,fromUrl:U,scrollX:0,scrollY:0};let Ie=()=>{if(B(),t=j.index,y(U,u.href),le(I),ee(I),O(De,Ne,I.body),i||history.pushState(j,"",u.href),i)window.scrollTo({left:j.scrollX,top:j.scrollY,behavior:"instant"});else if(u.hash){let Oe=P(u.hash);Oe?Oe.scrollIntoView({behavior:"instant"}):window.scrollTo({left:0,top:0,behavior:"instant"})}else window.scrollTo({left:0,top:0,behavior:"instant"});document.body.offsetHeight,d=u.href,M(i?"traverse":"push",U,u.href);let D=fe();Pe(D),de(),D?D.finally(()=>Q()):Q(),Re()},E=window.DaybookTransitionEngine,We=E&&!E.reducedMotion(),be=E&&E.isArticleTransition(U,u.href);E&&(E.clearTransitionClasses(),E.clearArticleSharedTransitions(document));let ve=null;if(We&&(document.documentElement.classList.add("is-transitioning"),be?(document.documentElement.classList.add("article-transition"),ve=E.prepareArticleTransitionSource(U,u.href,p)):i||(E.resolveStableRegions(document,I),document.body.classList.add(E.exitClassName(document.body)),await K(new Promise(D=>setTimeout(D,E.cssDuration("--transition-exit-delay",260))),v),B())),We&&document.startViewTransition){let D=document.startViewTransition(()=>{h!==n||v.aborted||(Ie(),be&&ve&&E.prepareArticleTransitionTarget(ve),!be&&!i&&E&&document.body.classList.add(E.enterClassName(document.body)))});s=D,D.finished.catch(()=>{}).finally(()=>{h===n&&(s=null,E&&(E.clearTransitionClasses(),E.clearArticleSharedTransitions(document)),R(U,u.href))}),await D.updateCallbackDone}else Ie(),E&&(E.clearTransitionClasses(),E.clearArticleSharedTransitions(document)),R(U,u.href)}catch(z){if(h!==n||z?.name==="AbortError"&&!H)return;r.finish(h,!0),console.error("Router navigation failed:",z),window.DaybookTransitionEngine&&(window.DaybookTransitionEngine.clearTransitionClasses(),window.DaybookTransitionEngine.clearArticleSharedTransitions(document)),Z(u)}finally{clearTimeout(q),r.finish(h),o&&o.signal===v&&(o=null)}}function K(a,i){return new Promise((f,p)=>{let u=()=>p(new DOMException("Navigation aborted","AbortError"));if(i.aborted){u();return}i.addEventListener("abort",u,{once:!0}),a.then(f,p).finally(()=>i.removeEventListener("abort",u))})}function Z(a){window.location.href=a.href}function O(a,i,f){for(let h of Array.from(a.attributes))h.name!=="id"&&h.name!=="data-daybook-page"&&a.removeAttribute(h.name);for(let h of Array.from(i.attributes))h.name!=="id"&&h.name!=="data-daybook-page"&&a.setAttribute(h.name,h.value);a.innerHTML=i.innerHTML;let p=document.body;f.hasAttribute("data-page-kind")?p.setAttribute("data-page-kind",f.getAttribute("data-page-kind")):p.removeAttribute("data-page-kind");let u=Array.from(p.classList),w=Array.from(f.classList);u.forEach(h=>{(h.endsWith("-body")||h==="page-body")&&p.classList.remove(h)}),w.forEach(h=>{(h.endsWith("-body")||h==="page-body")&&p.classList.add(h)})}function ee(a){let i=["#mobile-drawer","#mobile-overlay-container","#mobile-drawer-mask"];for(let f of i){let p=document.querySelector(f),u=a.querySelector(f);p&&u&&p.replaceWith(u.cloneNode(!0))}}function te(a){let i=Array.from(a.head.querySelectorAll('link[rel="stylesheet"]'));return Promise.all(i.map(f=>{let p=f.getAttribute("href");if(!p)return Promise.resolve();let u=new URL(p,location.href).href,w=g.get(u);if(w)return w;if(Array.from(document.head.querySelectorAll('link[rel="stylesheet"]')).some(v=>v.href&&new URL(v.href,location.href).href===u))return Promise.resolve();let T=new Promise((v,H)=>{let q=f.cloneNode(!0),B=window.setTimeout(()=>{q.remove(),H(new Error(`Stylesheet timed out: ${p}`))},1e4);q.onload=()=>{clearTimeout(B),v()},q.onerror=()=>{clearTimeout(B),q.remove(),H(new Error(`Stylesheet failed: ${p}`))};let U=document.head.querySelector('link[data-daybook-style="pages"]');q.dataset.daybookStyle==="home"&&U?U.before(q):document.head.appendChild(q)});return g.set(u,T),T.catch(()=>g.delete(u)),T})).then(()=>{})}function se(a){let i=Array.from(a.head.querySelectorAll("script[data-daybook-page-script][src]"));return Promise.all(i.map(f=>{let p=new URL(f.getAttribute("src"),location.href).href,u=b.get(p);if(u)return u;if(Array.from(document.scripts).some(h=>h.src===p))return Promise.resolve();let w=new Promise((h,T)=>{let v=document.createElement("script");v.src=p,v.dataset.daybookPageScript="";let H=window.setTimeout(()=>{v.remove(),T(new Error(`Page script timed out: ${p}`))},1e4);v.onload=()=>{clearTimeout(H),h()},v.onerror=()=>{clearTimeout(H),v.remove(),T(new Error(`Page script failed: ${p}`))},document.head.appendChild(v)});return b.set(p,w),w.catch(()=>b.delete(p)),w})).then(()=>{})}function le(a){a.title&&(document.title=a.title);let i=a.documentElement.lang,f=document.documentElement.lang;i&&i!==f&&(document.documentElement.lang=i,document.dispatchEvent(new CustomEvent("daybook:lang-change",{detail:{lang:i,previousLang:f}}))),['meta[name="description"]','link[rel="canonical"]','link[rel="alternate"][hreflang]','link[rel="alternate"][type="application/rss+xml"]','script[type="application/ld+json"]','meta[property^="og:"]','meta[name^="twitter:"]'].forEach(w=>{document.head.querySelectorAll(w).forEach(v=>v.remove()),a.head.querySelectorAll(w).forEach(v=>{document.head.appendChild(v.cloneNode(!0))})}),Array.from(a.head.querySelectorAll('link[rel="stylesheet"]')).forEach(w=>{let h=w.getAttribute("href");if(!h)return;let T=new URL(h,location.href).href;Array.from(document.head.querySelectorAll('link[rel="stylesheet"]')).some(H=>H.href&&new URL(H.href,location.href).href===T)||document.head.appendChild(w.cloneNode(!0))})}async function ge(a){if(!L(a.state)){Z(new URL(location.href));return}await N(location.href,!0,a.state)}function y(a,i){document.dispatchEvent(new CustomEvent("daybook:before-swap",{detail:{oldUrl:a,newUrl:i}}))}function M(a,i,f){document.dispatchEvent(new CustomEvent("daybook:page-load",{detail:{url:new URL(location.href),navigationType:a,oldUrl:i,newUrl:f}}))}function R(a,i){document.dispatchEvent(new CustomEvent("daybook:transition-finished",{detail:{oldUrl:a,newUrl:i}}))}window.daybookNavigate=a=>N(a),window.daybookNavigateTo=a=>N(a),window.daybookReplaceURL=a=>{let i=new URL(a,location.origin),f=history.state;L(f)?history.replaceState({...f,url:i.href},"",i.href):history.replaceState({__daybook:!0,index:t,url:i.href,fromUrl:null,scrollX:window.scrollX,scrollY:window.scrollY},"",i.href),d=i.href},m()})();})(); diff --git a/internal/embedded/static/js/embeds.js b/internal/embedded/static/js/embeds.js new file mode 100644 index 00000000..ac900e62 --- /dev/null +++ b/internal/embedded/static/js/embeds.js @@ -0,0 +1,8 @@ +"use strict";(()=>{function P(f){let v=document.createElement("div");v.className="embed-fallback";let o=document.createElement("div");if(o.innerHTML='',v.appendChild(o),f.message){let s=document.createElement("span");s.textContent=f.message,v.appendChild(s)}if(f.linkText&&f.linkUrl){let s=document.createElement("a");s.href=f.linkUrl,s.textContent=f.linkText,s.target="_blank",s.rel="noopener noreferrer",v.appendChild(s)}return v}function j(){document.querySelectorAll(".embed-frame iframe").forEach(v=>{let o=v,s=o.parentElement;if(!s||!s.classList.contains("embed-frame")||s.dataset.embedStatus==="loading"||s.dataset.embedStatus==="ready"||s.dataset.embedStatus==="error")return;s.dataset.embedStatus="loading";let S=!1,T=null,k=a=>{if(!S&&(S=!0,T&&window.clearTimeout(T),s.dataset.embedStatus=a,a==="error")){let t="\u5916\u94FE",r=o.src;r.includes("youtube")||r.includes("youtu.be")?t="YouTube":r.includes("bilibili")?t="Bilibili":r.includes("spotify")?t="Spotify":r.includes("codepen")&&(t="CodePen"),o.style.display="none";let i=P({message:`\u65E0\u6CD5\u52A0\u8F7D ${t} \u5D4C\u5165\u5185\u5BB9`,linkText:`\u524D\u5F80 ${t} \u67E5\u770B`,linkUrl:r});s.appendChild(i)}};o.addEventListener("load",()=>k("ready")),o.addEventListener("error",()=>k("error")),T=window.setTimeout(()=>k("error"),15e3)})}function O(){document.querySelectorAll(".markdown img, .gallery img").forEach(v=>{let o=v;if(o.classList.contains("music-cover")||o.closest(".persistent-logo")||o.closest(".side-nav-avatar")||o.dataset.embedStatus==="loading"||o.dataset.embedStatus==="ready"||o.dataset.embedStatus==="error")return;if(o.complete&&o.naturalHeight>0){o.dataset.embedStatus="ready";return}o.dataset.embedStatus="loading";let s=!1,S=window.setTimeout(()=>{s||(s=!0,o.dataset.embedStatus="error")},2e4),T=()=>{s||(s=!0,window.clearTimeout(S),o.dataset.embedStatus="ready")},k=()=>{s||(s=!0,window.clearTimeout(S),o.dataset.embedStatus="error")};o.addEventListener("load",T),o.addEventListener("error",k)})}(function(){var f=new Intl.NumberFormat("en-US",{notation:"compact",maximumFractionDigits:1});async function v(a){var t="github-repo-"+a;try{var r=sessionStorage.getItem(t);if(r)return JSON.parse(r)}catch{try{sessionStorage.removeItem(t)}catch{}}try{var i=await fetch("https://api.github.com/repos/"+a);if(!i.ok)return console.warn("[GithubCard] Failed to fetch "+a+": "+i.status+" "+i.statusText),null;var n=await i.json(),e={owner:{avatar_url:n.owner&&n.owner.avatar_url},description:n.description,stargazers_count:n.stargazers_count,forks_count:n.forks_count,license:n.license?{spdx_id:n.license.spdx_id}:null};try{sessionStorage.setItem(t,JSON.stringify(e))}catch{}return e}catch(u){return console.error("[GithubCard] Failed to fetch "+a+":",u),null}}function o(a,t){var r=function(n,e){var u=a.querySelector(n);u&&(u.textContent=String(e))};if(!t){r(".gc-repo-description","Failed to load data");return}var i=a.querySelector(".gc-owner-avatar");i&&t.owner&&t.owner.avatar_url&&(i.style.backgroundImage="url("+t.owner.avatar_url+")",i.style.backgroundSize="cover",i.style.backgroundPosition="center"),r(".gc-repo-description",t.description||"No description"),r(".gc-stars-count",f.format(t.stargazers_count||0)),r(".gc-forks-count",f.format(t.forks_count||0)),r(".gc-license-info",t.license&&t.license.spdx_id||"No License")}async function s(a){var t=a.getAttribute("data-repo");if(!t)return;a.dataset.embedStatus="loading";let r=!1,i=window.setTimeout(()=>{r||(r=!0,a.dataset.embedStatus="error",a.innerHTML="",a.appendChild(P({message:"\u52A0\u8F7D GitHub \u4ED3\u5E93\u4FE1\u606F\u8D85\u65F6",linkText:"\u524D\u5F80 GitHub \u67E5\u770B",linkUrl:"https://github.com/"+t})))},1e4);var n=await v(t);if(!r){if(r=!0,window.clearTimeout(i),!n){a.dataset.embedStatus="error",a.innerHTML="",a.appendChild(P({message:"\u65E0\u6CD5\u52A0\u8F7D GitHub \u4ED3\u5E93\u4FE1\u606F",linkText:"\u524D\u5F80 GitHub \u67E5\u770B",linkUrl:"https://github.com/"+t}));return}a.dataset.embedStatus="ready",o(a,n)}}function S(){var a=document.querySelectorAll(".gc-container");a.forEach(function(t){let r=t;r.dataset.embedStatus==="loading"||r.dataset.embedStatus==="ready"||r.dataset.embedStatus==="error"||s(r)})}function T(){var a=document.querySelectorAll(".twitter-tweet");if(a.length===0)return;let t=!1;if(a.forEach(function(i){let n=i;if(n.dataset.embedStatus==="loading"||n.dataset.embedStatus==="ready"||n.dataset.embedStatus==="error")return;n.setAttribute("data-theme","light"),n.dataset.embedStatus="loading",t=!0;let e=document.createElement("div");e.className="tweet-skeleton",e.innerHTML=` +
+
+
+
+
+
+ `,n.appendChild(e);let u=!1,g=window.setTimeout(()=>{if(u)return;u=!0,n.dataset.embedStatus="error",n.innerHTML="";let y=n.querySelector("a")?.href||"https://x.com/";n.parentElement?.appendChild(P({message:"\u65E0\u6CD5\u52A0\u8F7D\u63A8\u6587",linkText:"\u524D\u5F80 X / Twitter \u67E5\u770B",linkUrl:y})),n.style.display="none"},15e3);window.twttr&&window.twttr.events&&window.twttr.events.bind("rendered",function(y){y.target===n&&(u=!0,window.clearTimeout(g),n.dataset.embedStatus="ready")})}),!!t){if(window.twttr&&window.twttr.widgets)window.twttr.widgets.load();else if(!document.getElementById("twitter-wjs")){var r=document.createElement("script");r.id="twitter-wjs",r.src="https://platform.twitter.com/widgets.js",r.async=!0,document.head.appendChild(r)}}}function k(){var a=document.querySelectorAll(".music-custom-player");if(a.length===0)return;function t(r){if(isNaN(r))return"0:00";var i=Math.floor(r/60),n=Math.floor(r%60);return i+":"+(n<10?"0":"")+n}a.forEach(function(r){let i=r;if(i.dataset.tsbound==="true")return;i.dataset.tsbound="true";var n=i.querySelector(".music-player"),e=i.querySelector("audio"),u=i.querySelector(".music-playbtn"),g=i.querySelector(".music-icon"),y=i.querySelector(".music-time"),w=i.querySelector(".music-canvas");if(!n||!e||!u||!g||!y||!w)return;var l=w.getContext("2d");if(!l)return;var _=!1,L=null,M=!1,p=0,x=0,E=0,A=!1,N=0,z=0;function R(d){g.textContent!==d&&(g.style.transition="transform 200ms cubic-bezier(0.3, 0, 1, 1), color 400ms cubic-bezier(0.2, 0, 0, 1)",g.style.transform="scale(0)",setTimeout(function(){g.textContent=d,g.style.transition="transform 200ms cubic-bezier(0, 0, 0, 1), color 400ms cubic-bezier(0.2, 0, 0, 1)",g.style.transform="scale(1)"},200))}u.addEventListener("click",function(){e.paused?e.play():e.pause()}),e.addEventListener("play",function(){_=!0,n.classList.add("is-playing"),R("pause"),document.dispatchEvent(new CustomEvent("daybook:embed-play",{detail:{audio:e}})),E=performance.now(),L||q(E)}),e.addEventListener("pause",function(){_=!1,n.classList.remove("is-playing"),R("play_arrow")}),e.addEventListener("ended",function(){_=!1,n.classList.remove("is-playing"),R("play_arrow"),A=!0,N=0,z=p,e.currentTime=0,L||(E=performance.now(),q(E))}),e.addEventListener("timeupdate",function(){M||(y.textContent=t(e.currentTime)+" / "+t(e.duration))}),e.addEventListener("loadedmetadata",function(){y.textContent=t(e.currentTime)+" / "+t(e.duration),I(e.duration?e.currentTime/e.duration:0,x)}),e.readyState>=1&&(y.textContent=t(e.currentTime)+" / "+t(e.duration),p=e.duration?e.currentTime/e.duration:0,I(p,x)),w.addEventListener("pointerdown",function(d){M=!0,A=!1,U(d)}),window.addEventListener("pointermove",function(d){M&&U(d)}),window.addEventListener("pointerup",function(d){if(M){M=!1;var c=w.getBoundingClientRect(),b=Math.max(0,Math.min(d.clientX-c.left,c.width))/c.width;e.duration&&(e.currentTime=b*e.duration),L||(E=performance.now(),q(E))}});function U(d){var c=w.getBoundingClientRect(),b=Math.max(0,Math.min(d.clientX-c.left,c.width))/c.width;e.duration&&(y.textContent=t(b*e.duration)+" / "+t(e.duration)),p=b,I(b,x)}function I(d,c){var b=w.getBoundingClientRect(),h=b.width*2,m=b.height*2;if(!(h===0||m===0)){w.width!==h&&(w.width=h),w.height!==m&&(w.height=m),l.clearRect(0,0,h,m);var B=10,C=10,W=5,J=.08,$=c%1200/1200*Math.PI*2,D=h*d;l.beginPath(),l.lineWidth=C,l.lineCap="round",l.lineJoin="round",l.strokeStyle="rgba(255, 255, 255, 1)";var F=C/2,G=Math.max(F,D-(B+C/2));if(G>F){for(var H=F;H<=G;H++){var X=m/2+Math.sin((H-F)*J+$)*W;H===F?l.moveTo(H,X):l.lineTo(H,X)}l.stroke()}var K=Math.min(h-C/2,D+B);l.beginPath(),l.moveTo(K,m/2),l.lineTo(h-C/2,m/2),l.strokeStyle="rgba(255, 255, 255, 0.3)",l.stroke(),l.beginPath(),l.arc(h-C/2,m/2,3,0,Math.PI*2),l.fillStyle="rgba(255, 255, 255, 1)",l.fill()}}function q(d){var c=d-(E||d);if(E=d,_&&(x+=c),A){N+=c;var b=Math.min(1,N/1e3),h=Math.pow(b,3);p=z*(1-h),I(p,x),b>=1?(A=!1,L=null):L=requestAnimationFrame(q);return}var m=e.duration?e.currentTime/e.duration:0;M?p=m:p+=(m-p)*.15,I(p,x),_||Math.abs(p-m)>.001?L=requestAnimationFrame(q):L=null}document.addEventListener("daybook:global-play",()=>{e.paused||e.pause()}),e.addEventListener("error",()=>{console.error("Music audio error for url:",e.src),i.dataset.status="error"})})}window.daybookSyncEmbeds=function(){S(),T(),k(),j(),O()},document.addEventListener("daybook:page-load",function(){window.daybookSyncEmbeds()}),document.addEventListener("daybook:article-content-swapped",function(){window.daybookSyncEmbeds()}),document.addEventListener("daybook:before-swap",function(){})})();})(); diff --git a/internal/embedded/static/js/gallery.js b/internal/embedded/static/js/gallery.js new file mode 100644 index 00000000..65dcd9b5 --- /dev/null +++ b/internal/embedded/static/js/gallery.js @@ -0,0 +1 @@ +"use strict";(()=>{(()=>{let l=(r,t,e)=>Math.min(e,Math.max(t,r)),p=(r,t,e)=>r+(t-r)*e,o=new Map,g=window.matchMedia("(prefers-reduced-motion: reduce)");class M{constructor(t,e){this.container=t;this.items=e;this.track=document.createElement("div");this.stage=document.createElement("div");this.width=0;this.gap=12;this.large=0;this.sizes=[];this.step=1;this.maxScroll=0;this.frame=0;this.timer=0;this.target=null;this.lastTime=0;this.drag=null;this.suppressClick=!1;this.destroyed=!1;this.reducedMotion=()=>g.matches||document.documentElement.dataset.reducedMotion==="true";this.syncMotion=()=>{this.reducedMotion()&&this.target!==null&&this.moveTo(this.target,!1)};this.localize=()=>{let t=document.documentElement.lang.startsWith("en");this.container.setAttribute("aria-label",t?"Image gallery":"\u56FE\u7247\u753B\u5ECA"),this.container.setAttribute("aria-roledescription",t?"Carousel":"\u8F6E\u64AD"),this.items.forEach((e,s)=>{e.setAttribute("aria-roledescription",t?"Slide":"\u56FE\u7247"),e.setAttribute("aria-label",`${s+1} / ${this.items.length}`)})};this.measure=()=>{if(this.destroyed)return;let t=this.container.clientWidth;if(!t||t===this.width)return;let e=this.container.scrollLeft/this.step;this.stop(),this.width=t;let s=Math.min(3,this.items.length);this.gap=t<480?8:12;let i=t-this.gap*(s-1);this.sizes=s===1?[i]:s===2?[i*.62,i*.38]:[i*.54,i*.34,i*.12],this.large=this.sizes[0],this.step=this.large+this.gap,this.maxScroll=(this.items.length-1)*this.step,this.track.style.width=`${t+this.maxScroll}px`,this.stage.style.width=`${t}px`,this.container.style.setProperty("--gallery-image-width",`${this.large}px`),this.container.scrollLeft=l(e*this.step,0,this.maxScroll),this.render()};this.animate=t=>{if(this.frame=0,this.target===null||this.destroyed)return;let e=this.target-this.container.scrollLeft,s=Math.min(32,t-this.lastTime);this.lastTime=t,this.container.scrollLeft+=e*(1-Math.exp(-s/65)),this.render(),Math.abs(e)>2.5?this.frame=requestAnimationFrame(this.animate):(this.container.scrollLeft=this.target,this.target=null,this.render(),this.scheduleSnap())};this.onScroll=()=>{this.render(),this.target===null&&this.scheduleSnap()};this.onWheel=t=>{if(t.ctrlKey||!this.maxScroll)return;if(Math.abs(t.deltaX)>Math.abs(t.deltaY)){this.stop();return}let e=t.deltaMode===1?20:t.deltaMode===2?this.width:1,s=t.deltaY*e,i=this.target??this.container.scrollLeft;if(s>0&&i>=this.maxScroll-1||s<0&&i<=1)return;let c=l(i+s,0,this.maxScroll);c!==i&&(t.preventDefault(),this.moveTo(c))};this.onKeyDown=t=>{let e=t.target;if(e!==this.container&&e.tagName!=="IMG")return;let s=Math.round((this.target??this.container.scrollLeft)/this.step);if(t.key==="ArrowRight")s++;else if(t.key==="ArrowLeft")s--;else if(t.key==="Home")s=0;else if(t.key==="End")s=this.items.length-1;else if(t.key==="Enter"||t.key===" "){let i=e.tagName==="IMG"?e:this.items[s]?.querySelector("img");i&&(t.preventDefault(),i.click());return}else return;t.preventDefault(),this.moveTo(s*this.step)};this.onFocus=t=>{let e=t.target;if(!e.matches(":focus-visible"))return;let s=this.items.findIndex(i=>i.contains(e));s>=0&&this.moveTo(s*this.step,!1)};this.onPointerDown=t=>{this.suppressClick=!1,this.stop(),!(t.pointerType!=="mouse"||t.button!==0||!this.maxScroll)&&(this.drag={id:t.pointerId,x:t.clientX,scroll:this.container.scrollLeft,moved:!1})};this.onPointerMove=t=>{if(!this.drag||t.pointerId!==this.drag.id)return;let e=this.drag.x-t.clientX;!this.drag.moved&&Math.abs(e)<5||(this.drag.moved=!0,this.container.classList.add("is-dragging"),this.container.setPointerCapture(t.pointerId),this.container.scrollLeft=l(this.drag.scroll+e,0,this.maxScroll),this.render(),t.preventDefault())};this.onPointerEnd=t=>{!this.drag||t.pointerId!==this.drag.id||(this.suppressClick=this.drag.moved,this.drag=null,this.container.classList.remove("is-dragging"),this.container.hasPointerCapture(t.pointerId)&&this.container.releasePointerCapture(t.pointerId),this.scheduleSnap())};this.onClick=t=>{this.stop(),this.suppressClick&&(this.suppressClick=!1,t.preventDefault(),t.stopImmediatePropagation())};this.track.className="md-carousel-track",this.stage.className="md-carousel-stage",this.items.forEach(s=>{s.classList.add("md-carousel-item"),s.setAttribute("role","group"),s.querySelectorAll("img").forEach(i=>{i.draggable=!1,!i.closest("a[href]")&&!i.matches('.no-lightbox, [data-no-lightbox="true"]')&&(i.tabIndex=0,i.setAttribute("role","button"))}),this.stage.appendChild(s)}),this.track.appendChild(this.stage),t.appendChild(this.track),t.classList.add("is-carousel"),t.tabIndex=0,t.setAttribute("role","region"),this.localize(),t.addEventListener("scroll",this.onScroll,{passive:!0}),t.addEventListener("wheel",this.onWheel,{passive:!1}),t.addEventListener("keydown",this.onKeyDown),t.addEventListener("focusin",this.onFocus),t.addEventListener("pointerdown",this.onPointerDown),t.addEventListener("pointermove",this.onPointerMove),window.addEventListener("pointerup",this.onPointerEnd),window.addEventListener("pointercancel",this.onPointerEnd),t.addEventListener("lostpointercapture",this.onPointerEnd),t.addEventListener("click",this.onClick,!0),this.resizeObserver=new ResizeObserver(this.measure),this.resizeObserver.observe(t),this.measure()}render(){let t=l(this.container.scrollLeft/this.step,0,this.items.length-1),e=this.items.length-this.sizes.length,s=Math.min(t,e),i=Math.max(0,t-e),c=n=>n===0?this.sizes:this.sizes.map((u,a)=>a===n?this.large:this.sizes[ap(n,z[u],i%1)),v=[],E=0;m.forEach(n=>{v.push(E+n/2),E+=n+this.gap});let h=this.sizes[this.sizes.length-1],L=n=>n<0?{center:-this.gap-h/2+(n+1)*(h+this.gap),size:h}:n>=m.length?{center:this.width+this.gap+h/2+(n-m.length)*(h+this.gap),size:h}:{center:v[n],size:m[n]};this.items.forEach((n,u)=>{let a=u-s,b=L(Math.floor(a)),y=L(Math.ceil(a)),w=a-Math.floor(a),f=p(b.size,y.size,w),S=p(b.center,y.center,w);n.style.width=`${f}px`,n.style.transform=`translate3d(${S-f/2}px, 0, 0)`,n.style.setProperty("--gallery-caption-opacity",`${l((f-90)/24,0,1)}`)})}stop(){cancelAnimationFrame(this.frame),window.clearTimeout(this.timer),this.frame=0,this.timer=0,this.target=null}moveTo(t,e=!0){if(this.target=l(t,0,this.maxScroll),!e||this.reducedMotion()){let s=this.target;this.stop(),this.container.scrollLeft=s,this.render()}else this.frame||(this.lastTime=performance.now(),this.frame=requestAnimationFrame(this.animate))}scheduleSnap(){window.clearTimeout(this.timer),this.timer=window.setTimeout(()=>{if(this.drag||this.target!==null)return;let t=Math.round(this.container.scrollLeft/this.step)*this.step;Math.abs(t-this.container.scrollLeft)>1&&this.moveTo(t)},160)}destroy(){this.destroyed=!0,this.stop(),this.resizeObserver.disconnect(),this.container.removeEventListener("scroll",this.onScroll),this.container.removeEventListener("wheel",this.onWheel),this.container.removeEventListener("keydown",this.onKeyDown),this.container.removeEventListener("focusin",this.onFocus),this.container.removeEventListener("pointerdown",this.onPointerDown),this.container.removeEventListener("pointermove",this.onPointerMove),window.removeEventListener("pointerup",this.onPointerEnd),window.removeEventListener("pointercancel",this.onPointerEnd),this.container.removeEventListener("lostpointercapture",this.onPointerEnd),this.container.removeEventListener("click",this.onClick,!0)}}function d(){o.forEach((r,t)=>{t.isConnected||(r.destroy(),o.delete(t))}),document.querySelectorAll(".md-gallery").forEach(r=>{if(r.closest("[data-memo-card]")||o.has(r))return;let t=Array.from(r.children).filter(e=>e instanceof HTMLElement&&e.matches("figure, p")&&e.querySelectorAll("img").length===1);!t.length||t.length!==r.children.length||o.set(r,new M(r,t))})}document.addEventListener("daybook:page-load",d),document.addEventListener("daybook:article-content-swapped",d),document.addEventListener("daybook:lang-change",()=>o.forEach(r=>r.localize())),document.addEventListener("daybook:settings-change",()=>o.forEach(r=>r.syncMotion())),g.addEventListener("change",()=>o.forEach(r=>r.syncMotion())),document.addEventListener("daybook:before-swap",()=>{o.forEach(r=>r.destroy()),o.clear()}),document.readyState==="loading"?document.addEventListener("DOMContentLoaded",d,{once:!0}):d()})();})(); diff --git a/internal/embedded/static/js/giscus-loader.js b/internal/embedded/static/js/giscus-loader.js new file mode 100644 index 00000000..f69d864f --- /dev/null +++ b/internal/embedded/static/js/giscus-loader.js @@ -0,0 +1 @@ +var u="https://giscus.app",h="giscus-session";function m(){try{localStorage.removeItem(h)}catch{}}function f(){let n=new URL(location.href),t=n.searchParams.get("giscus")||"";if(t)try{localStorage.setItem(h,JSON.stringify(t))}catch{}else try{let s=localStorage.getItem(h);if(s){let i=JSON.parse(s);typeof i=="string"?t=i:m()}}catch{m()}return n.searchParams.has("giscus")&&(n.searchParams.delete("giscus"),window.daybookReplaceURL?window.daybookReplaceURL(n.href):history.replaceState(history.state,"",n.href)),t}var o=f(),a=null,l=!1;function p(){return document.documentElement.dataset.commentsDisabled==="true"}var g=class{constructor(e){this.container=e;this.lifetime=new AbortController;this.intersection=null;this.frame=null;this.loaded=!1;this.acknowledged=!1;this.sentAppearance="";this.handleMessage=e=>{if(!this.active()||e.origin!==u||e.source!==this.frame?.contentWindow)return;let t=e.data;if(!t||typeof t!="object"||!("giscus"in t)||!t.giscus||typeof t.giscus!="object")return;let s=t.giscus;if(typeof s.resizeHeight=="number"&&Number.isFinite(s.resizeHeight)&&s.resizeHeight>0&&(this.frame.style.height=`${Math.ceil(s.resizeHeight)}px`,this.acknowledged||(this.acknowledged=!0,this.loaded=!0,this.syncAppearance(!0))),s.discussion&&typeof s.discussion=="object"){let i=s.discussion,{totalCommentCount:r,totalReplyCount:c}=i;typeof r=="number"&&Number.isSafeInteger(r)&&r>=0&&typeof c=="number"&&Number.isSafeInteger(c)&&c>=0&&document.dispatchEvent(new CustomEvent("daybook:comments-loaded",{detail:{path:this.container.dataset.path,count:r+c}}))}if(s.signOut===!0){this.signOut();return}typeof s.error=="string"&&(/Bad credentials|Invalid state value|State has expired/.test(s.error)&&o?(this.signOut(),console.warn("[giscus] Session has expired and was cleared.")):s.error.includes("Discussion not found")?console.info("[giscus] A discussion will be created when the first comment is submitted."):console.error("[giscus]",s.error))};this.attributes=new MutationObserver(()=>{p()?d():this.syncAppearance()}),this.attributes.observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme","data-palette","lang","data-comments-disabled"]}),"IntersectionObserver"in window?(this.intersection=new IntersectionObserver(t=>{t.some(s=>s.isIntersecting)&&this.mount()}),this.intersection.observe(e)):this.mount()}active(){return!this.lifetime.signal.aborted&&!l&&!p()&&this.container.isConnected&&document.getElementById("giscus")===this.container}appearance(){let e=document.documentElement,t=e.dataset.theme==="dark",s=e.dataset.palette==="warm"?"Warm":"Default",i=this.container.dataset[`theme${s}${t?"Dark":"Light"}`];return{theme:i?new URL(i,location.href).href:t?"dark":"light",lang:e.lang.toLowerCase().startsWith("en")?"en":"zh-CN"}}source(){let e=this.container.dataset,{theme:t,lang:s}=this.appearance(),i=new URL(location.href);i.searchParams.delete("giscus"),i.hash="";let r=new URLSearchParams({origin:`${i.href}#${this.container.id}`,session:o,repo:e.repo||"",repoId:e.repoId||"",category:e.category||"",categoryId:e.categoryId||"",term:e.path||"",strict:"1",reactionsEnabled:"0",emitMetadata:e.commentCounts==="true"?"1":"0",inputPosition:"top",theme:t,description:document.querySelector('meta[name="description"]')?.content||"",backLink:i.href});return`${u}/${s}/widget?${r}`}mount(){if(!this.active()||this.frame)return;this.intersection?.disconnect(),this.intersection=null;let e=document.createElement("iframe");this.frame=e,e.className="giscus-frame giscus-frame--loading",e.title=this.appearance().lang==="en"?"Comments":"\u8BC4\u8BBA",e.setAttribute("scrolling","no");let t=["localhost","127.0.0.1","[::1]"].includes(location.hostname);e.setAttribute("allow",t?"clipboard-write; local-network-access; loopback-network":"clipboard-write"),e.addEventListener("load",()=>{this.active()&&(e.classList.remove("giscus-frame--loading"),this.loaded=!0,this.syncAppearance(!0))},{signal:this.lifetime.signal}),window.addEventListener("message",this.handleMessage,{signal:this.lifetime.signal}),e.src=this.source(),this.container.appendChild(e)}syncAppearance(e=!1){if(!this.active()||!this.frame)return;let t=this.appearance();this.frame.title=t.lang==="en"?"Comments":"\u8BC4\u8BBA";let s=JSON.stringify(t);!this.loaded||!e&&s===this.sentAppearance||(this.frame.contentWindow?.postMessage({giscus:{setConfig:t}},u),this.sentAppearance=s)}signOut(){!o||!this.frame||(o="",m(),this.loaded=!1,this.acknowledged=!1,this.sentAppearance="",this.frame.src=this.source())}destroy(){this.lifetime.abort(),this.intersection?.disconnect(),this.attributes.disconnect(),this.frame?.remove(),this.frame=null}};function d(){let n=document.getElementById("giscus"),e=p();if(n&&(n.hidden=e),l||!n||e){a?.destroy(),a=null;return}if(a?.container===n){a.syncAppearance();return}a?.destroy(),a=new g(n)}document.addEventListener("daybook:before-swap",()=>{l=!0,a?.destroy(),a=null});document.addEventListener("daybook:page-load",()=>{l=!1,new URL(location.href).searchParams.has("giscus")&&(o=f()),d()});document.addEventListener("daybook:settings-change",d);document.addEventListener("daybook:lang-change",()=>a?.syncAppearance());d();export{d as setupGiscus}; diff --git a/internal/embedded/static/js/graph-loader.js b/internal/embedded/static/js/graph-loader.js new file mode 100644 index 00000000..060ec7ae --- /dev/null +++ b/internal/embedded/static/js/graph-loader.js @@ -0,0 +1 @@ +"use strict";(()=>{(function(){let p="/js/vendor/d3.min.js",w="/js/graph.js",m="/assets-manifest.json",u=null,a=null,d=null;function g(){return u||(u=fetch(m,{credentials:"same-origin"}).then(function(n){if(!n.ok)throw new Error("assets manifest not found");return n.json()}).catch(function(){return{}})),u}function y(n){return g().then(function(t){return t[n]||n})}function h(n,t,o){return y(n).then(function(r){return new Promise(function(l,s){let f=document.querySelector("script["+t+"]");if(f){if(o()){l();return}f.addEventListener("load",function(){o()?l():s(new Error("Script did not initialize: "+r))},{once:!0}),f.addEventListener("error",function(){s(new Error("Script failed to load: "+r))},{once:!0});return}let e=document.createElement("script");e.async=!0,e.src=r,e.setAttribute(t,"true"),e.addEventListener("load",function(){o()?l():s(new Error("Script did not initialize: "+r))},{once:!0}),e.addEventListener("error",function(){s(new Error("Script failed to load: "+r))},{once:!0}),document.head.appendChild(e)})})}function P(){return window.d3?Promise.resolve():(a||(a=h(p,"data-daybook-d3",function(){return!!window.d3}).catch(function(n){throw a=null,n})),a)}function b(){return window.DaybookGraph?Promise.resolve():(d||(d=h(w,"data-daybook-graph",function(){return!!window.DaybookGraph}).catch(function(n){throw d=null,n})),d)}function k(){let n=document.querySelector(".graph-shell");if(!n){window.DaybookGraph&&typeof window.DaybookGraph.destroy=="function"&&window.DaybookGraph.destroy();return}if(n.dataset.graphInitialized==="true"||n.dataset.graphInitializing==="true")return;n.dataset.graphInitializing="true";let t=c;Promise.all([P(),b()]).then(async function(){t!==c||!n.isConnected||document.querySelector(".graph-shell")!==n||window.DaybookGraph&&typeof window.DaybookGraph.init=="function"&&(await window.DaybookGraph.init(document),n.dataset.graphInitialized="true")}).catch(function(o){console.error("Failed to load graph dependencies",o)}).finally(function(){delete n.dataset.graphInitializing})}let i=0,c=0;function v(){i&&window.clearTimeout(i),i=window.setTimeout(function(){i=0,k()},10)}document.addEventListener("daybook:page-load",v),document.addEventListener("daybook:before-swap",function(){c++,window.clearTimeout(i);let n=document.querySelector(".graph-shell");n&&(delete n.dataset.graphInitialized,delete n.dataset.graphInitializing),window.DaybookGraph&&typeof window.DaybookGraph.destroy=="function"&&window.DaybookGraph.destroy()})})();})(); diff --git a/internal/embedded/static/js/graph.js b/internal/embedded/static/js/graph.js new file mode 100644 index 00000000..23368352 --- /dev/null +++ b/internal/embedded/static/js/graph.js @@ -0,0 +1,3 @@ +"use strict";(()=>{var De=new Set(["path","file","tag","line","section"]),ee=t=>t.toLowerCase(),C=(t,a)=>new Error(`${t}\uFF08\u4F4D\u7F6E ${a+1}\uFF09`);function be(t,a){let e="";for(let o=a+1;o=t.length)throw C("\u5F15\u53F7\u5185\u7684\u8F6C\u4E49\u5B57\u7B26\u4E0D\u5B8C\u6574",o);e+=t[++o]}else e+=p}throw C("\u7F3A\u5C11\u7ED3\u675F\u5F15\u53F7",a)}function Pe(t){let a=[],e=0;for(;e=t.length)throw C("\u8F6C\u4E49\u5B57\u7B26\u4E0D\u5B8C\u6574",e);e++}u+=t[e++]}a.push({kind:/^OR$/i.test(u)?"or":"word",value:u,position:p})}}}return a.push({kind:"end",value:"",position:t.length}),a}function ve(t,a,e){if(!t.length)throw C("\u641C\u7D22\u6761\u4EF6\u4E0D\u80FD\u4E3A\u7A7A",e);if(!a&&/^\/.*\/[a-z]*$/i.test(t))throw C("\u6682\u4E0D\u652F\u6301\u6B63\u5219\u8868\u8FBE\u5F0F\uFF0C\u8BF7\u4F7F\u7528\u666E\u901A\u8BCD\u6216\u5F15\u53F7\u77ED\u8BED",e);if(!a&&/^[<>=]/.test(t))throw C("\u6682\u4E0D\u652F\u6301\u6570\u503C\u6BD4\u8F83",e);return ee(t)}function ze(t){let a=-1;for(let o=0;o64)throw C("\u6761\u4EF6\u5D4C\u5957\u8FC7\u6DF1\uFF0C\u8BF7\u7B80\u5316\u67E5\u8BE2",e.position);if(e.kind==="-")return this.consume(),{kind:"not",expression:this.parseUnary(a+1)};if(e.kind==="("){this.consume();let o=this.parseOr(a+1);if(this.current().kind!==")")throw C("\u7F3A\u5C11\u7ED3\u675F\u62EC\u53F7 )",e.position);return this.consume(),o}if(e.kind==="property")return this.consume(),ze(e);if(e.kind!=="word"&&e.kind!=="quoted")throw C("\u6B64\u5904\u9700\u8981\u641C\u7D22\u8BCD\u6216\u6761\u4EF6",e.position);if(this.consume(),e.kind==="word"&&this.current().kind===":"){this.consume();let o=ee(e.value);if(!De.has(o))throw C(`\u4E0D\u652F\u6301\u7684\u641C\u7D22\u64CD\u4F5C\u7B26 ${e.value}:`,e.position);return{kind:"field",field:o,expression:this.parseUnary(a+1)}}return{kind:"text",value:ve(e.value,e.kind==="quoted",e.position)}}};function we(t,a=!1){switch(t.kind){case"all":return!1;case"text":return!a;case"property":return!0;case"field":return t.field==="line"||t.field==="section"||we(t.expression,!0);case"not":return we(t.expression,a);case"and":case"or":return t.expressions.some(e=>we(e,a))}}function me(t){if(t.length>16384)throw C("\u67E5\u8BE2\u8FC7\u957F\uFF0C\u8BF7\u63A7\u5236\u5728 16384 \u4E2A\u5B57\u7B26\u4EE5\u5185",16384);let a=new Se(Pe(t)).parse();return{needsIndex:we(a),matches(e){let o=ee(e.file??e.title??""),p=ee(e.title??""),u,$,q,k=g=>o.includes(g)||p.includes(g)?!0:(u??(u=ee(e.text??e.lines?.join(` +`)??e.sections?.join(` +`)??"")),u.includes(g)),G=g=>{let F=ee(g);return m=>F.includes(m)},N=(g,F)=>{switch(g.kind){case"all":return!0;case"text":return F(g.value);case"not":return!N(g.expression,F);case"and":return g.expressions.every(m=>N(m,F));case"or":return g.expressions.some(m=>N(m,F));case"property":{if(q??(q=new Map(Object.entries(e.properties??{}).map(([v,h])=>[ee(v),h]))),!q.has(g.key))return!1;if(g.value===void 0)return!0;let m=q.get(g.key);return(Array.isArray(m)?m:[m]).some(v=>v!=null&&ee(String(v)).includes(g.value))}case"field":return g.field==="file"?N(g.expression,G(e.file??e.title??"")):g.field==="path"?N(g.expression,G(e.path??"")):g.field==="tag"?($??($=(e.tags??[]).map(v=>ee(v.replace(/^#/,"")))),N(g.expression,v=>{let h=v.replace(/^#/,"");return $.some(T=>T===h||T.startsWith(`${h}/`))})):(g.field==="line"?e.lines??e.text?.split(/\r?\n/)??[]:e.sections??(e.text===void 0?[]:[e.text])).some(v=>N(g.expression,G(v)))}};return N(a,k)}}}function ie(){return{query:"",showTags:!1,showAttachments:!1,existingOnly:!0,showOrphans:!0,arrows:!1,textFade:0,nodeSize:1,lineWidth:1,centerForce:1,repelForce:1,linkForce:1,linkDistance:120}}function qe(t=window.location.pathname){return`daybook:graph:${t.replace(/\/graph\/?$/,"").replace(/\/(?:en_US|zh_CN)$/,"").replace(/\/$/,"")||"/"}`}function Oe(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function Re(t){let a=ie();if(!Oe(t))return a;typeof t.query=="string"&&(a.query=t.query);for(let o of["showTags","showAttachments","existingOnly","showOrphans","arrows"])typeof t[o]=="boolean"&&(a[o]=t[o]);let e={textFade:[-1,1],nodeSize:[.25,3],lineWidth:[.25,3],centerForce:[0,3],repelForce:[0,3],linkForce:[0,3],linkDistance:[30,400]};for(let o of Object.keys(e)){let p=t[o];typeof p=="number"&&Number.isFinite(p)&&(a[o]=Math.min(e[o][1],Math.max(e[o][0],p)))}return a}function Ce(t){try{let a=localStorage.getItem(t);if(!a)return ie();let e=JSON.parse(a);return!Oe(e)||e.version!==1?ie():Re(e.settings)}catch{return ie()}}function Ae(t,a){try{localStorage.setItem(t,JSON.stringify({version:1,settings:Re(a)}))}catch{}}var Ie={settings:["\u56FE\u8C31\u8BBE\u7F6E","Graph settings"],center:["\u56DE\u5230\u4E2D\u5FC3","Recenter"],full:["\u8FD4\u56DE\u5B8C\u6574\u56FE\u8C31","Full graph"],close:["\u5173\u95ED","Close"],reset:["\u6062\u590D\u9ED8\u8BA4","Restore defaults"],appearance:["\u5916\u89C2","Display"],forces:["\u529B\u5EA6","Forces"],search:["\u641C\u7D22","Search"],query:["\u641C\u7D22\u6587\u4EF6\u6216\u6B63\u6587\u2026","Search files or content\u2026"],tags:["\u6807\u7B7E","Tags"],attachments:["\u9644\u4EF6","Attachments"],existing:["\u4EC5\u663E\u793A\u5DF2\u521B\u5EFA\u7684\u7B14\u8BB0","Existing notes only"],orphans:["\u5B64\u7ACB\u8282\u70B9","Orphans"],arrows:["\u7BAD\u5934","Arrows"],textFade:["\u6587\u5B57\u6DE1\u51FA\u9608\u503C","Text fade threshold"],nodeSize:["\u8282\u70B9\u5927\u5C0F","Node size"],lineWidth:["\u8FDE\u7EBF\u7C97\u7EC6","Link thickness"],centerForce:["\u56FE\u8C31\u5411\u5FC3\u529B","Center force"],repelForce:["\u8282\u70B9\u6392\u65A5\u529B","Repel force"],linkForce:["\u8FDE\u63A5\u5438\u5F15\u529B","Link force"],linkDistance:["\u8FDE\u7EBF\u957F\u5EA6","Link distance"],play:["\u64AD\u653E\u751F\u957F\u52A8\u753B","Growth animation"],retry:["\u91CD\u8BD5","Retry"],empty:["\u6CA1\u6709\u5339\u914D\u7684\u8282\u70B9\uFF0C\u8BF7\u8C03\u6574\u7B5B\u9009\u3002","No matching nodes. Adjust your filters."],loading:["\u6B63\u5728\u52A0\u8F7D\u641C\u7D22\u7D22\u5F15\u2026","Loading search index\u2026"],loadError:["\u641C\u7D22\u7D22\u5F15\u52A0\u8F7D\u5931\u8D25\uFF0C\u53EF\u91CD\u8BD5\u6216\u4F7F\u7528 path/file/tag \u7B5B\u9009\u3002","Search index unavailable. Retry or use path/file/tag filters."],graphError:["\u56FE\u8C31\u52A0\u8F7D\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5\u3002","Unable to load graph. Please retry."],noDates:["\u5F53\u524D\u7B5B\u9009\u6CA1\u6709\u53EF\u7528\u4E8E\u52A8\u753B\u7684\u65E5\u671F","No dated notes in this selection"]};function M(t){return Ie[t][document.documentElement.lang.toLowerCase().startsWith("en")?1:0]}function Ee(t,a,e,o){let p=[],u=(s,y="",O="")=>{let S=document.createElement(s);return S.className=y,S.textContent=O,S},$=(s,y,O="graph-button")=>{let S=u("button",O,s);return S.type="button",S.onclick=y,S};t.replaceChildren();let q=u("div","graph-toolbar"),k=u("dialog","graph-panel");k.id="graph-settings-panel",k.hidden=!0,k.setAttribute("aria-label",M("settings"));let G=(s,y,O)=>{let S=$("",O,"notes-action-button");S.setAttribute("aria-label",M(s)),S.setAttribute("data-tooltip",M(s));let P=u("span","material-symbol",y);return P.setAttribute("aria-hidden","true"),S.append(P,u("span","graph-action-text",M(s))),S},N=G("settings","tune",()=>ne(!!k.hidden));N.id="graph-settings-btn",N.setAttribute("aria-controls",k.id),N.setAttribute("aria-expanded","false");let g=G("center","center_focus_strong",o.center);g.id="graph-reset";let F=G("full","zoom_out_map",o.full);F.id="graph-full-btn",F.hidden=!new URLSearchParams(location.search).has("node");let m=G("search","search",()=>oe(T.inert));m.id="graph-search-btn",m.setAttribute("aria-controls","graph-local-search-panel"),m.setAttribute("aria-expanded","false");let v=new Map;q.append(m);for(let[s,y,O,S]of[["showOrphans","orphans","scatter_plot","graph-orphan-btn"],["showTags","tags","sell","graph-tags-btn"],["showAttachments","attachments","attach_file","graph-attachments-btn"],["existingOnly","existing","description","graph-existing-btn"]]){let P=G(y,O,()=>{a()[s]=!a()[s],ge(),e(s)});P.id=S,v.set(s,P),q.append(P)}let h=G("play","play_arrow",o.play);h.id="graph-play",h.setAttribute("aria-pressed","false"),h.disabled=!0,q.append(h,g,N,F);let T=u("div","graph-search-panel");T.id="graph-local-search-panel",T.inert=!0,T.setAttribute("aria-hidden","true");let D=u("div","graph-panel-header"),W=u("div","graph-panel-actions"),te=G("reset","restart_alt",o.reset);te.id="graph-defaults";let Q=G("close","close",()=>ne(!1));for(let s of[te,Q])s.className="graph-panel-action",s.querySelector(".graph-action-text")?.remove();Q.classList.add("graph-close"),W.append(te,Q),D.append(u("strong","",M("settings")),W),k.append(D);let B=new Map;for(let s of["appearance","forces"]){let y=u("section","graph-section"),O=u("h2","graph-section-title"),S=u("span","material-symbol",s==="appearance"?"palette":"hub");S.setAttribute("aria-hidden","true"),O.append(S,u("span","",M(s))),O.id=`graph-${s}-title`,y.setAttribute("aria-labelledby",O.id);let P=u("div","graph-section-body");y.append(O,P),k.append(y),B.set(s,P)}let x=u("input","notes-search-input graph-query");x.id="graph-search-input",x.type="search",x.placeholder=M("query"),x.setAttribute("aria-label",M("query")),x.autocomplete="off",x.spellcheck=!1,x.oninput=()=>{a().query=x.value,e("query")};let z=u("p","graph-error");z.id="graph-query-error",z.setAttribute("role","status"),x.setAttribute("aria-describedby",z.id),T.append(x,z);let I=new Map,K=u("label","graph-switch-row"),b=$("",()=>{a().arrows=!a().arrows,b.setAttribute("aria-checked",String(a().arrows)),e("arrows")},"material-switch graph-switch");b.id="graph-arrows",b.setAttribute("role","switch"),b.setAttribute("aria-label",M("arrows"));for(let s of["switch-track","switch-thumb"]){let y=u("span",s);y.setAttribute("aria-hidden","true"),b.append(y)}b.onpointerdown=s=>{s.button===0&&(b.setPointerCapture(s.pointerId),b.classList.add("is-pressed"))};let _=()=>b.classList.remove("is-pressed");b.onpointerup=_,b.onpointercancel=_,b.onlostpointercapture=_,b.onkeydown=s=>{(s.key===" "||s.key==="Enter")&&b.classList.add("is-pressed")},b.onkeyup=_,b.onblur=_,K.append(u("span","",M("arrows")),b),B.get("appearance").append(K);function J(s){let y=s.closest(".graph-slider");y.style.setProperty("--graph-progress",`${(s.valueAsNumber-Number(s.min))/(Number(s.max)-Number(s.min))*100}%`),y.querySelector(".graph-slider-value").textContent=s.value}for(let[s,y,O,S]of[["textFade",-1,1,.05],["nodeSize",.25,3,.05],["lineWidth",.25,3,.05],["centerForce",0,3,.05],["repelForce",0,3,.05],["linkForce",0,3,.05],["linkDistance",30,400,1]]){let P=u("div","graph-slider-row"),Y=u("label","",M(s));Y.htmlFor=`graph-${s}`;let A=u("input");A.type="range",A.id=Y.htmlFor;let ce=u("div","graph-slider"),Z=u("div","graph-slider-visual");Z.setAttribute("aria-hidden","true");let de=u("span","graph-slider-active"),ye=u("span","graph-slider-inactive");ye.append(u("span","graph-slider-end")),Z.append(de,ye,u("span","graph-slider-handle"),u("span","graph-slider-value")),ce.append(Z,A),A.onpointerdown=ue=>{ue.button===0&&(A.setPointerCapture(ue.pointerId),ce.classList.add("is-dragging"))};let j=()=>ce.classList.remove("is-dragging");A.onpointerup=j,A.onpointercancel=j,A.onlostpointercapture=j,A.onblur=j,A.min=String(y),A.max=String(O),A.step=String(S),A.dataset.setting=s,A.oninput=()=>{a()[s]=A.valueAsNumber,J(A),e(s)},P.append(Y,ce),(s.endsWith("Force")||s==="linkDistance"?B.get("forces"):B.get("appearance")).append(P),I.set(s,A)}let V=u("div","graph-status");V.setAttribute("role","status");let U=u("span","",M("empty"));U.hidden=!0;let X=u("span","graph-error"),H=$(M("retry"),o.retry);H.hidden=!0,V.append(U,X,H),V.hidden=!0,q.append(T),t.append(q,k,V);let re=window.matchMedia("(max-width: 960px)");function ae(){let s=k.contains(document.activeElement)?document.activeElement:null;k.close(),re.matches?k.showModal():k.show(),document.body.classList.toggle("graph-modal-open",re.matches),s?.focus({preventScroll:!0})}let he=()=>{k.hidden||ae()};re.addEventListener("change",he),p.push(()=>re.removeEventListener("change",he)),k.oncancel=s=>{s.preventDefault(),ne(!1)};function ne(s){k.hidden=!s,N.setAttribute("aria-expanded",String(s)),s?(T.inert||oe(!1),ae(),Q.focus({preventScroll:!0})):(k.close(),document.body.classList.remove("graph-modal-open"),N.focus({preventScroll:!0}))}function oe(s){T.inert=!s,T.setAttribute("aria-hidden",String(!s)),q.classList.toggle("is-search-open",s),m.setAttribute("aria-expanded",String(s)),s?(k.hidden||ne(!1),x.focus()):m.focus()}let fe=s=>{s.key==="Escape"&&(T.inert?k.hidden||(s.preventDefault(),s.stopPropagation(),ne(!1)):(s.stopPropagation(),oe(!1)))};t.addEventListener("keydown",fe),p.push(()=>t.removeEventListener("keydown",fe));function le(){x.value=a().query,b.setAttribute("aria-checked",String(a().arrows));for(let[s,y]of I)y.value=String(a()[s]),J(y);ge()}function ge(){for(let[s,y]of v)y.setAttribute("aria-pressed",String(a()[s]))}return le(),{sync:le,fullButton:F,setEmpty(s){U.hidden=!s,V.hidden=!s&&!X.textContent},setError(s,y=!1){X.textContent=s,H.hidden=!y,V.hidden=U.hidden&&!s},queryError(s){z.textContent=s,x.setAttribute("aria-invalid",String(!!s))},animationAvailable(s){h.disabled=!s,h.setAttribute("data-tooltip",M(s?"play":"noDates"))},animation(s){h.setAttribute("aria-pressed",String(s==="playing")),h.querySelector(".material-symbol").textContent=s==="playing"?"stop":"play_arrow"},destroy(){k.close(),document.body.classList.remove("graph-modal-open"),p.forEach(s=>s()),t.replaceChildren()}}}var Le=8e3,L=t=>typeof t=="string"?t:t.id;(()=>{let t=null,a=null,e=null,o={nodes:[],links:[]},p=ie(),u="",$="",q=me(""),k=null,G=null,N=null,g=0,F=0,m=null,v=null,h=null,T=null,D=null,W=null,te=null,Q=0,B=new Map,x=[],z=[],I=[],K=[],b="idle",_=0,J=0,V=0,U=[],X=-1,H=()=>window.matchMedia("(prefers-reduced-motion: reduce)").matches,re=n=>(5+Math.sqrt(n)*1.5)*p.nodeSize,ae=()=>({w:t?.clientWidth||800,h:t?.clientHeight||600}),he=n=>({...k?.get(n.id),id:n.id,title:n.title,file:n.file||n.title,path:n.path||n.id,tags:n.isTag?[n.title.replace(/^#/,"")]:n.tags?.map(l=>l.title)});async function ne(n=document){if(oe(),t=n.querySelector("#graph-container"),!t)return;a=n.querySelector("#graph-controls"),a||(a=document.createElement("div"),a.id="graph-controls",t.before(a));let l=g;N=new AbortController,$=location.pathname.replace(/\/graph\/?$/,""),u=qe(location.pathname),p=Ce(u),e=Ee(a,()=>p,S,{center:s,reset:O,full:ge,play:Ge,retry:()=>{o.nodes.length?Y():ne(n)}}),e.setError(M("loading"));try{let d=await fetch(`${$}/graph.json`,{signal:N.signal});if(!d.ok)throw Error("graph");let c=await d.json();if(l!==g)return;if(!Array.isArray(c.nodes)||!Array.isArray(c.links))throw Error("graph");if(o=c,q=me(""),e?.setError(""),Z(),await Y(),l!==g)return;te=new ResizeObserver(()=>{let{w,h:f}=ae();m?.attr("viewBox",[0,0,w,f]),h&&(h.force("x").x(w/2),h.force("y").y(f/2))}),te.observe(t),window.addEventListener("popstate",le),document.addEventListener("daybook:lang-change",fe)}catch(d){l===g&&d.name!=="AbortError"&&e?.setError(M("graphError"),!0)}}function oe(){g++,F++,N?.abort(),N=null,window.clearTimeout(Q),cancelAnimationFrame(_),_=0,window.removeEventListener("popstate",le),document.removeEventListener("daybook:lang-change",fe),te?.disconnect(),te=null,e?.destroy(),e=null,h?.on("tick",null).stop(),h=null,m&&(window.d3.select(window).on(".drag",null).on(".zoom",null),window.d3.dragEnable(window)),m?.interrupt(),m?.selectAll("*").interrupt().interrupt("hover"),t&&(t.replaceChildren(),t.classList.remove("graph-dimmed")),t=null,a=null,m=null,v=null,T=null,D=null,W=null,B.clear(),o={nodes:[],links:[]},x=[],z=[],I=[],K=[],k=null,G=null,b="idle",J=0,U=[],X=-1,A="",window.__graphNodes=null}function fe(){a&&(e?.destroy(),e=Ee(a,()=>p,S,{center:s,reset:O,full:ge,play:Ge,retry:()=>{Y()}}),e.setEmpty(I.length===0),e.animation(b),Y())}function le(){pe(!1),Z(),e&&(e.fullButton.hidden=!new URLSearchParams(location.search).has("node"))}function ge(){let n=new URL(location.href);n.searchParams.delete("node"),n.searchParams.delete("depth"),history.pushState({},"",n),le(),s()}function s(){!m||!T||(m.interrupt(),H()?m.call(T.transform,y()):m.transition().duration(500).call(T.transform,y()))}function y(){let{w:n,h:l}=ae(),d=Math.max(.1,Math.min(1.8,Math.min(n,l)*.82/((o.meta?.layoutDiameter||10)*120)));return window.d3.zoomIdentity.translate(n/2,l/2).scale(d).translate(-n/2,-l/2)}function O(){pe(!1),window.clearTimeout(Q),F++,p=ie(),q=me(""),A="",Ae(u,p),e?.sync(),e?.queryError(""),e?.setError(""),Z(),s()}function S(n){if(Ae(u,p),n==="query"){F++,pe(!0),window.clearTimeout(Q),Q=window.setTimeout(()=>{Y()},180);return}if(["showTags","showAttachments","showOrphans","existingOnly"].includes(n)){pe(!1),Z();return}if(["centerForce","repelForce","linkForce","linkDistance"].includes(n)){Ne();return}Te(),n==="nodeSize"&&(h?.force("collide").radius(l=>l.radius+6),ue(.12))}async function P(){if(k)return;if(G)return G;let n=g,l=N?.signal,d=(async()=>{let c=await fetch(`${$}/graph-search.json`,{signal:l});if(!c.ok)throw Error("index");let w=await c.json();if(w.version!==1||!Array.isArray(w.documents))throw Error("index");n===g&&(k=new Map(w.documents.map(f=>[f.id,f])))})();G=d;try{await d}finally{n===g&&(G=null)}}async function Y(){let n=++F,l=g,d;try{d=me(p.query),e?.queryError("")}catch(c){e?.queryError(c.message);return}if(d.needsIndex&&!k){e?.setError(M("loading"));try{await P()}catch{l===g&&n===F&&e?.setError(M("loadError"),!0);return}}l!==g||n!==F||(e?.setError(""),q=d,p.query!==A&&(A=p.query,pe(!1),Z()))}let A="";function ce(){let n=new URLSearchParams(location.search),l=n.get("node");if(!l||!o.nodes.some(r=>r.id===l))return null;let d=Math.max(1,Math.min(o.nodes.length,Number.parseInt(n.get("depth")||"1",10)||1)),c=new Map;for(let r of o.links)c.has(r.source)||c.set(r.source,new Set),c.has(r.target)||c.set(r.target,new Set),c.get(r.source).add(r.target),c.get(r.target).add(r.source);let w=new Set([l]),f=[l];for(let r=0;r(!p.existingOnly||r.exists)&&(!n||n.has(r.id))),d=new Map;for(let r of l)q.matches(he(r))&&d.set(r.id,r);let c=[];for(let r of l){let i=d.has(r.id);if(p.showTags&&i)for(let E of r.tags||[])d.set(E.id,{...E,title:"#"+E.title,exists:!0,degree:0,isTag:!0}),c.push({source:r.id,target:E.id,type:"tag"});if(p.showAttachments)for(let E of r.attachments||[]){let R={...E,exists:!0,degree:0,isAttachment:!0};(i||q.matches(he(R)))&&d.set(E.id,R),i&&c.push({source:r.id,target:E.id,type:"attachment"})}}let w=new Map;for(let r of[...o.links,...c]){if(r.source===r.target||!d.has(r.source)||!d.has(r.target))continue;let[i,E]=[r.source,r.target].sort(),R=JSON.stringify([i,E]),se=w.get(R);se||(se={source:i,target:E,forward:!1,reverse:!1,type:r.type||"wikilink"},w.set(R,se)),r.source===i?se.forward=!0:se.reverse=!0}let f=new Map;for(let r of w.values())f.set(L(r.source),(f.get(L(r.source))||0)+1),f.set(L(r.target),(f.get(L(r.target))||0)+1);x=[...d.values()].filter(r=>p.showOrphans||(f.get(r.id)||0)>0).map(r=>({...r,degree:f.get(r.id)||0})),z=[...w.values()],e?.animationAvailable(x.some(r=>!!r.date)),de(x,z,.12)}function de(n,l,d=.12){if(!t)return;let{w:c,h:w}=ae(),f=Math.max(50,Math.sqrt(n.length)*15);I=n.map((i,E)=>{let R=B.get(i.id);if(!R){let se=E*Math.PI*2/Math.max(1,n.length);R={...i,radius:re(i.degree),x:c/2+Math.cos(se)*f,y:w/2+Math.sin(se)*f},B.set(i.id,R)}return Object.assign(R,i,{radius:re(i.degree)}),R});let r=new Set(I.map(i=>i.id));K=l.filter(i=>r.has(L(i.source))&&r.has(L(i.target))).map(i=>({...i,source:L(i.source),target:L(i.target)}));for(let[i,E]of B)r.has(i)||(E.vx=0,E.vy=0,E.fx=null,E.fy=null);ye(d),e?.setEmpty(I.length===0)}function ye(n){let l=window.d3,{w:d,h:c}=ae();if(!m){m=l.select(t).append("svg").attr("width","100%").attr("height","100%").attr("viewBox",[0,0,d,c]);let r=m.append("defs");for(let[i,E,R]of[["end","M0,-3L6,0L0,3",6],["start","M6,-3L0,0L6,3",0]])r.append("marker").attr("id",`graph-arrow-${i}`).attr("viewBox","0 -4 8 8").attr("markerWidth",8).attr("markerHeight",8).attr("refX",R).attr("refY",0).attr("orient","auto").attr("markerUnits","userSpaceOnUse").append("path").attr("d",E).attr("class","graph-arrow");v=m.append("g"),v.append("g").attr("class","graph-links"),v.append("g").attr("class","graph-nodes"),T=l.zoom().scaleExtent([.1,5]).on("zoom",i=>{v.attr("transform",i.transform),ke()}),m.call(T),m.call(T.transform,y())}t?.classList.remove("graph-dimmed");let w=!h;h||(h=l.forceSimulation(I).alpha(1).force("link",l.forceLink([]).id(r=>r.id)).force("charge",l.forceManyBody()).force("x",l.forceX(d/2)).force("y",l.forceY(c/2)).force("collide",l.forceCollide().radius(r=>r.radius+6))),h.force("link").links([]),h.nodes(I),h.force("link").links(K),Ne(!1),W=v.select(".graph-links").selectAll("line").data(K,r=>JSON.stringify([L(r.source),L(r.target)])).join("line").attr("class","graph-link"),D=v.select(".graph-nodes").selectAll("g").data(I,r=>r.id).join(r=>{let i=r.append("g");return i.append("circle"),i.append("text"),i},r=>r,r=>(r.selectAll("*").interrupt("hover"),r.remove())).on("mouseover",(r,i)=>xe(i.id)).on("mouseout",()=>xe(null)).on("click",(r,i)=>{r.defaultPrevented||!i.url||(i.isAttachment?window.open(i.url,"_blank","noopener"):window.daybookNavigateTo?window.daybookNavigateTo(i.url):location.href=i.url)}).call(l.drag().on("start",(r,i)=>{h&&(!r.active&&!H()&&h.alphaTarget(.3).restart(),i.fx=i.x,i.fy=i.y)}).on("drag",(r,i)=>{h&&(i.x=i.fx=r.x,i.y=i.fy=r.y,j())}).on("end",(r,i)=>{h&&(r.active||h.alphaTarget(0),i.fx=null,i.fy=null,xe(null))}));let f=new URLSearchParams(location.search).get("node");D.select("circle").attr("class",r=>`graph-node${r.isTag?" is-tag":""}${r.isAttachment?" is-attachment":""}${r.exists?"":" is-missing"}${r.id===f?" is-center":""}`),D.select("text").attr("class","graph-label").attr("text-anchor","middle").text(r=>r.title),window.__graphNodes=D,h.on("tick",j),Te(),H()?(h.stop(),w&&h.alpha(1).tick(100),j()):ue(n)}function j(){W&&(W.each(function(n){let l=n.source,d=n.target,c=(d.x||0)-(l.x||0),w=(d.y||0)-(l.y||0),f=Math.hypot(c,w)||1,r=Math.min(f/2,l.radius+2),i=Math.min(f/2,d.radius+2);this.setAttribute("x1",String((l.x||0)+c*r/f)),this.setAttribute("y1",String((l.y||0)+w*r/f)),this.setAttribute("x2",String((d.x||0)-c*i/f)),this.setAttribute("y2",String((d.y||0)-w*i/f))}),D.attr("transform",n=>`translate(${n.fx??n.x},${n.fy??n.y})`))}function ue(n){h&&(H()?(h.stop(),j()):h.alpha(Math.max(h.alpha(),n)).restart())}function Ne(n=!0){if(!h)return;let l=new Map;for(let d of K)for(let c of[d.source,d.target])l.set(L(c),(l.get(L(c))||0)+1);h.force("link").distance(p.linkDistance).strength(d=>p.linkForce/Math.max(1,Math.min(l.get(L(d.source))||1,l.get(L(d.target))||1))),h.force("charge").strength(-280*p.repelForce),h.force("x").strength(.05*p.centerForce),h.force("y").strength(.05*p.centerForce),n&&(H()?(h.alpha(1).stop().tick(100),j()):ue(.3))}function Te(){if(D){for(let n of I)n.radius=re(n.degree);Me(D),W.attr("stroke-width",p.lineWidth).attr("marker-end",n=>p.arrows&&n.type==="wikilink"&&n.forward?"url(#graph-arrow-end)":null).attr("marker-start",n=>p.arrows&&n.type==="wikilink"&&n.reverse?"url(#graph-arrow-start)":null),ke(),j()}}function ke(){if(!m||!D)return;let n=window.d3.zoomTransform(m.node()).k/y().k,l=.8+p.textFade*.6,d=Math.max(3,(o.meta?.linkCount||1)*2/Math.max(1,o.meta?.nodeCount||1)*1.5);D.select("text").style("opacity",function(c){return this.classList.contains("is-highlight")||n>=l||n>=l*.6875&&c.degree>=d?1:0})}function Me(n,l=!1){for(let[d,c]of[["circle","r"],["text","dy"]]){let w=n.select(d).interrupt("hover");l&&!H()&&(w=w.transition("hover").duration(250).ease(window.d3.easeCubicOut)),w.attr(c,function(f){let r=this.classList.contains("is-hovered"),i=f.radius*(r?1.5:1);return d==="circle"?i:i+(r?15:12)})}}function xe(n){if(!D)return;t?.classList.toggle("graph-dimmed",n!==null);let l=new Set;if(n){l.add(n);for(let c of K)L(c.source)===n&&l.add(L(c.target)),L(c.target)===n&&l.add(L(c.source))}let d=D.filter(function(c){return c.id===n||!!this.querySelector(".is-hovered")});D.selectAll("circle,text").classed("is-highlight",c=>l.has(c.id)).classed("is-hovered",c=>c.id===n),W.classed("is-highlight",c=>L(c.source)===n||L(c.target)===n),Me(d,!0),ke()}function pe(n){let l=b!=="idle";cancelAnimationFrame(_),_=0,b="idle",J=0,X=-1,e?.animation("idle"),n&&l&&de(x,z)}function Ge(){if(b==="playing"){pe(!0);return}U=[...new Set(x.filter(n=>n.date).map(n=>n.date.slice(0,10)))].sort(),U.length&&(J=0,X=-1,b="playing",V=performance.now(),e?.animation(b),Fe())}function Fe(){if(b!=="playing")return;J=Math.min(Le,performance.now()-V);let n=Math.min(U.length-1,Math.floor(J/Le*U.length));if(n!==X){X=n;let l=U[n],d=new Set(x.filter(f=>f.date&&f.date.slice(0,10)<=l).map(f=>f.id)),c=new Set(d),w=new Map(x.map(f=>[f.id,f]));for(let f of z){let r=L(f.source),i=L(f.target);c.has(r)&&!w.get(i)?.date&&d.add(i),c.has(i)&&!w.get(r)?.date&&d.add(r)}de(x.filter(f=>d.has(f.id)),z)}J>=Le?(b="idle",de(x,z),e?.animation("idle"),_=0):_=requestAnimationFrame(Fe)}window.DaybookGraph={init:ne,destroy:oe}})();})(); diff --git a/internal/embedded/static/js/heading-anchors.js b/internal/embedded/static/js/heading-anchors.js new file mode 100644 index 00000000..b00b3ffc --- /dev/null +++ b/internal/embedded/static/js/heading-anchors.js @@ -0,0 +1 @@ +"use strict";(()=>{(function(){function a(c){(c||document).querySelectorAll(".post-content h1, .post-content h2, .post-content h3, .post-content h4, .memo-content h1, .memo-content h2, .memo-content h3, .memo-content h4").forEach(function(d){let e=d;if(e.dataset.headingAnchorReady==="true"||!e.id)return;var o=e.textContent?.trim()||"section",n=document.createElement("a");n.className="heading-anchor",n.href="#"+e.id,document.documentElement.lang.toLowerCase().startsWith("en")?n.setAttribute("aria-label","Link to "+o):n.setAttribute("aria-label",o+" \u7684\u6C38\u4E45\u94FE\u63A5");var t=document.createElement("span");t.className="material-symbol",t.setAttribute("aria-hidden","true"),t.textContent="link_2",n.appendChild(t),e.appendChild(n),e.dataset.headingAnchorReady="true"})}window.daybookSyncHeadingAnchors=function(){a(document)},document.addEventListener("daybook:page-load",window.daybookSyncHeadingAnchors),document.addEventListener("daybook:article-content-swapped",window.daybookSyncHeadingAnchors)})();})(); diff --git a/internal/embedded/static/js/katex-loader.js b/internal/embedded/static/js/katex-loader.js new file mode 100644 index 00000000..7c4a893f --- /dev/null +++ b/internal/embedded/static/js/katex-loader.js @@ -0,0 +1 @@ +"use strict";(()=>{function d(){let n=document.querySelectorAll(".math-inline, .math-display");if(n.length!==0)if(window.katex)o(n);else{if(window.katexLoading)return;window.katexLoading=!0;let t=document.createElement("script");if(t.src="/vendor/katex/katex.js",t.onload=()=>{window.katexLoading=!1,o(document.querySelectorAll(".math-inline, .math-display"))},document.head.appendChild(t),!document.querySelector('link[rel="stylesheet"][href*="/vendor/katex/katex.min."]')){let e=document.createElement("link");e.rel="stylesheet",e.href="/vendor/katex/katex.min.css",document.head.appendChild(e)}}}function o(n){let t=window.katex;n.forEach(e=>{if(e.getAttribute("data-rendered")==="true")return;let a=e.textContent||"",r=e.classList.contains("math-display"),s=r?a.replace(/^\$\$/,"").replace(/\$\$$/,""):a.replace(/^\\\(/,"").replace(/\\\)$/,"");try{t.render(s,e,{displayMode:r,throwOnError:!1}),e.setAttribute("data-rendered","true")}catch(i){console.error("KaTeX render error:",i)}})}document.addEventListener("daybook:page-load",()=>{d()});document.addEventListener("daybook:article-content-swapped",()=>{d()});})(); diff --git a/internal/embedded/static/js/lightbox.js b/internal/embedded/static/js/lightbox.js new file mode 100644 index 00000000..6a883674 --- /dev/null +++ b/internal/embedded/static/js/lightbox.js @@ -0,0 +1 @@ +"use strict";(()=>{(function(){class r{constructor(){this.state="idle";this.overlay=document.createElement("div");this.image=null;this.original=null;this.originalVisibility="";this.images=[];this.index=0;this.generation=0;this.previousOverflow="";this.returnFocus=null;this.inertElements=[];this.frame={left:0,top:0,width:0,height:0};this.zoom=1;this.pan={x:0,y:0};this.pointer=null;this.status=document.createElement("div");this.caption=document.createElement("div");this.failed=!1;this.tap=null;this.overlay.className="zoom-overlay",this.overlay.setAttribute("role","dialog"),this.overlay.setAttribute("aria-modal","true"),this.overlay.tabIndex=-1;let e=(t,i,s)=>{let a=document.createElement("button");a.type="button",a.className=`zoom-control zoom-${t}`;let o=document.createElement("span");return o.className="material-symbol",o.setAttribute("aria-hidden","true"),o.textContent=i,a.append(o),a.addEventListener("click",s),this.overlay.append(a),a};this.prev=e("previous","chevron_left",()=>{this.navigate(this.index-1)}),this.next=e("next","chevron_right",()=>{this.navigate(this.index+1)}),this.closer=e("close","close",()=>{this.close()}),this.zoomButton=e("toggle","zoom_in",()=>this.setZoom(this.zoom>1?1:2)),this.status.className="zoom-status",this.status.setAttribute("role","status"),this.status.setAttribute("aria-live","polite"),this.caption.className="zoom-caption",this.overlay.append(this.status,this.caption),document.body.append(this.overlay),this.labels(),document.addEventListener("click",t=>this.openFromClick(t)),document.addEventListener("pointerdown",t=>{this.tap=this.state==="idle"&&t.pointerType==="touch"&&t.isPrimary&&t.target instanceof HTMLImageElement?{id:t.pointerId,x:t.clientX,y:t.clientY,image:t.target}:null}),document.addEventListener("pointermove",t=>{this.tap?.id===t.pointerId&&Math.hypot(t.clientX-this.tap.x,t.clientY-this.tap.y)>10&&(this.tap=null)},{passive:!0}),document.addEventListener("pointercancel",()=>{this.tap=null}),document.addEventListener("pointerup",t=>{let i=this.tap;this.tap=null,i?.id===t.pointerId&&i.image===t.target&&this.openFromClick(t)}),document.addEventListener("keydown",t=>this.keydown(t),!0),this.overlay.addEventListener("click",t=>{t.target===this.overlay&&this.close()}),this.overlay.addEventListener("dblclick",t=>{t.target===this.image&&(t.preventDefault(),this.setZoom(this.zoom>1?1:2))}),this.overlay.addEventListener("wheel",t=>{t.preventDefault(),this.state==="open"&&this.setZoom(this.zoom*Math.exp(-t.deltaY*.002))},{passive:!1}),this.overlay.addEventListener("pointerdown",t=>{t.target!==this.image||this.state!=="open"||t.button!==0||!t.isPrimary||(this.pointer={id:t.pointerId,x:t.clientX,y:t.clientY,panX:this.pan.x,panY:this.pan.y},this.image.setPointerCapture(t.pointerId))}),this.overlay.addEventListener("pointermove",t=>{!this.pointer||this.pointer.id!==t.pointerId||this.zoom===1||(this.pan={x:this.pointer.panX+t.clientX-this.pointer.x,y:this.pointer.panY+t.clientY-this.pointer.y},this.applyZoom())}),this.overlay.addEventListener("pointerup",t=>{let i=this.pointer;if(this.pointer=null,!i||i.id!==t.pointerId)return;this.image?.hasPointerCapture(t.pointerId)&&this.image.releasePointerCapture(t.pointerId);let s=t.clientX-i.x,a=t.clientY-i.y;this.zoom===1&&Math.abs(s)>50&&Math.abs(s)>Math.abs(a)*1.5&&this.navigate(this.index+(s<0?1:-1))}),this.overlay.addEventListener("pointercancel",()=>{this.pointer=null}),window.addEventListener("resize",()=>{this.state==="open"&&this.original?(this.frame=this.fit(this.original),this.place(this.frame),this.setZoom(1)):this.state!=="idle"&&this.cleanup()});for(let t of["daybook:before-swap","daybook:page-load","daybook:article-content-swapped"])document.addEventListener(t,()=>this.cleanup());document.addEventListener("daybook:lang-change",()=>this.labels()),window.addEventListener("beforeunload",()=>this.cleanup())}english(){return document.documentElement.lang.startsWith("en")}labels(){let e=this.english();this.overlay.setAttribute("aria-label",e?"Image viewer":"\u56FE\u7247\u6D4F\u89C8\u5668");for(let[t,i]of[[this.prev,e?"Previous image (\u2190)":"\u4E0A\u4E00\u5F20\uFF08\u2190\uFF09"],[this.next,e?"Next image (\u2192)":"\u4E0B\u4E00\u5F20\uFF08\u2192\uFF09"],[this.closer,e?"Close (Esc)":"\u5173\u95ED\uFF08Esc\uFF09"],[this.zoomButton,this.zoom>1?e?"Fit image (0)":"\u9002\u5E94\u7A97\u53E3\uFF080\uFF09":e?"Zoom in (+)":"\u653E\u5927\uFF08+\uFF09"]])t.setAttribute("aria-label",i),t.dataset.tooltip=i;this.zoomButton.firstElementChild.textContent=this.zoom>1?"zoom_out":"zoom_in",this.zoomButton.setAttribute("aria-pressed",String(this.zoom>1)),this.prev.disabled=this.index<=0,this.next.disabled=this.index>=this.images.length-1,this.status.textContent=this.failed?e?"Image unavailable. Try another image.":"\u56FE\u7247\u6682\u65F6\u65E0\u6CD5\u52A0\u8F7D\uFF0C\u53EF\u5207\u6362\u5176\u4ED6\u56FE\u7247\u3002":`${this.index+1} / ${this.images.length}`}eligible(e){return!e.closest("a[href], .embed-card, .music-custom-player, .katex")&&!e.matches('.no-lightbox, [data-no-lightbox="true"]')}openFromClick(e){let t=e.target;this.state!=="idle"||!(t instanceof HTMLImageElement)||!t.closest(".post-content, .memo-content")||!this.eligible(t)||!t.complete||t.naturalWidth<100||t.naturalHeight<100||(e.preventDefault(),this.open(t))}reducedMotion(){return document.documentElement.dataset.reducedMotion==="true"||matchMedia("(prefers-reduced-motion: reduce)").matches}async animate(e,t,i=260){try{await e.animate(t,{duration:this.reducedMotion()?0:i,easing:"cubic-bezier(.22, .61, .36, 1)",fill:"forwards"}).finished.catch(()=>{})}catch{}}fit(e){let t=innerWidth<768?innerWidth-24:innerWidth*.8,i=Math.min(innerHeight*.8,innerHeight-144),s=Math.min(t/e.naturalWidth,Math.max(80,i)/e.naturalHeight);return{width:e.naturalWidth*s,height:e.naturalHeight*s,left:(innerWidth-e.naturalWidth*s)/2,top:(innerHeight-e.naturalHeight*s)/2}}styleFrame(e){return{left:`${e.left}px`,top:`${e.top}px`,width:`${e.width}px`,height:`${e.height}px`}}place(e){this.image&&(this.image.getAnimations().forEach(t=>t.cancel()),Object.assign(this.image.style,this.styleFrame(e),{clipPath:"none",objectFit:"contain",transform:"none"}))}restoreOriginal(){this.original&&(this.original.style.visibility=this.originalVisibility)}clone(e){this.restoreOriginal(),this.image?.remove(),this.original=e,this.originalVisibility=e.style.visibility,this.image=e.cloneNode();for(let t of["id","style","width","height","loading","tabindex","role"])this.image.removeAttribute(t);this.image.className="zoom-img",this.image.draggable=!1,this.overlay.append(this.image),e.style.visibility="hidden",this.zoom=1,this.pan={x:0,y:0},this.pointer=null,this.failed=!1,this.caption.textContent=e.closest("figure")?.querySelector("figcaption")?.textContent||e.alt,this.labels()}async open(e){this.overlay.isConnected||document.body.append(this.overlay),this.state="opening";let t=++this.generation;this.images=Array.from(e.closest(".post-content, .memo-content").querySelectorAll("img")).filter(n=>this.eligible(n)&&(!n.complete||n.naturalWidth>=100&&n.naturalHeight>=100)),this.index=this.images.indexOf(e),this.returnFocus=document.activeElement instanceof HTMLElement?document.activeElement:e,this.returnFocus===document.body&&(this.returnFocus=e),this.previousOverflow=document.body.style.overflow,document.body.style.overflow="hidden";for(let n of document.body.children)n instanceof HTMLElement&&n!==this.overlay&&!n.inert&&(n.inert=!0,this.inertElements.push(n));let i=e.getBoundingClientRect(),s=e.closest(".md-carousel-item"),o=`inset(0 ${s?Math.max(0,(i.width-s.getBoundingClientRect().width)/2):0}px round ${s?getComputedStyle(s).borderRadius:"0px"})`;this.clone(e),Object.assign(this.image.style,this.styleFrame(i),{clipPath:o,objectFit:"cover"}),this.overlay.style.display="block",this.overlay.style.opacity="1",this.overlay.setAttribute("aria-busy","true"),this.overlay.focus({preventScroll:!0}),this.frame=this.fit(e),await this.animate(this.image,[{...this.styleFrame(i),clipPath:o},{...this.styleFrame(this.frame),clipPath:"inset(0 0px round 0px)"}]),!(t!==this.generation||this.state!=="opening")&&(this.place(this.frame),this.state="open",this.overlay.setAttribute("aria-busy","false"))}async navigate(e){if(this.state!=="open"||e<0||e>=this.images.length||e===this.index)return;this.state="switching";let t=++this.generation,i=this.images[e];this.overlay.setAttribute("aria-busy","true");let s=0;try{i.loading="eager",await Promise.race([i.decode(),new Promise((a,o)=>{s=window.setTimeout(()=>o(new Error("Image loading timed out")),1e4)})])}catch{t===this.generation&&this.state==="switching"&&(this.index=e,this.failed=!0,this.labels(),this.state="open",this.overlay.setAttribute("aria-busy","false"));return}finally{clearTimeout(s)}t!==this.generation||this.state!=="switching"||(this.index=e,this.clone(i),this.frame=this.fit(i),this.place(this.frame),await this.animate(this.image,[{opacity:0},{opacity:1}],160),!(t!==this.generation||this.state!=="switching")&&(this.image.getAnimations().forEach(a=>a.cancel()),this.state="open",this.overlay.setAttribute("aria-busy","false")))}setZoom(e){this.state==="open"&&(this.zoom=Math.max(1,Math.min(4,e)),this.applyZoom(),this.labels())}applyZoom(){let e=Math.max(0,(this.frame.width*this.zoom-innerWidth+24)/2),t=Math.max(0,(this.frame.height*this.zoom-innerHeight+100)/2);this.pan.x=Math.max(-e,Math.min(e,this.pan.x)),this.pan.y=Math.max(-t,Math.min(t,this.pan.y)),this.image&&(this.image.style.transform=`translate3d(${this.pan.x}px, ${this.pan.y}px, 0) scale(${this.zoom})`,this.image.style.cursor=this.zoom>1?"grab":"zoom-in")}async close(){if(this.state==="idle"||this.state==="closing")return;this.state="closing";let e=++this.generation;if(this.image&&this.original){let t=this.image.getBoundingClientRect(),i=this.original.getBoundingClientRect(),s=i.width>0&&i.height>0&&i.bottom>0&&i.topt.cancel()),this.image?.remove(),this.restoreOriginal(),this.overlay.style.display="none",this.overlay.style.opacity="0",this.overlay.removeAttribute("aria-busy");for(let t of this.inertElements)t.inert=!1;this.inertElements=[],document.body.style.overflow=this.previousOverflow;let e=this.returnFocus;if(e?.isConnected){let t=e.getAttribute("tabindex");t===null&&(e.tabIndex=-1),e.focus({preventScroll:!0}),t===null&&e.removeAttribute("tabindex")}this.image=null,this.original=null,this.pointer=null,this.tap=null,this.images=[],this.state="idle"}keydown(e){if(this.state!=="idle"&&["Escape","ArrowLeft","ArrowRight","Home","End","+","=","-","0","Tab"].includes(e.key))if(e.preventDefault(),e.stopImmediatePropagation(),e.key==="Escape")this.close();else if(e.key==="ArrowLeft")this.navigate(this.index-1);else if(e.key==="ArrowRight")this.navigate(this.index+1);else if(e.key==="Home")this.navigate(0);else if(e.key==="End")this.navigate(this.images.length-1);else if(e.key==="+"||e.key==="=")this.setZoom(this.zoom+.5);else if(e.key==="-")this.setZoom(this.zoom-.5);else if(e.key==="0")this.setZoom(1);else{let t=Array.from(this.overlay.querySelectorAll("button:not(:disabled)")),i=t.indexOf(document.activeElement);t[(i+(e.shiftKey?-1:1)+t.length)%t.length]?.focus()}}}new r})();})(); diff --git a/internal/embedded/static/js/memos.js b/internal/embedded/static/js/memos.js new file mode 100644 index 00000000..e0d908f6 --- /dev/null +++ b/internal/embedded/static/js/memos.js @@ -0,0 +1 @@ +"use strict";(()=>{var N=new WeakMap;function B(l,p){if(!(l instanceof HTMLElement)||l.textContent===p)return;let o=l.textContent||"";clearTimeout(N.get(l)),l.classList.remove("is-number-flipping"),l.removeAttribute("data-number-previous"),l.classList.add("number-flip");let f=document.createElement("span");f.className="number-flip-current",f.textContent=p,l.replaceChildren(f),!(!o||!l.isConnected||matchMedia("(prefers-reduced-motion: reduce)").matches||document.documentElement.dataset.reducedMotion==="true")&&(l.dataset.numberPrevious=o,l.offsetWidth,l.classList.add("is-number-flipping"),N.set(l,setTimeout(()=>{l.classList.remove("is-number-flipping"),l.removeAttribute("data-number-previous"),N.delete(l)},440)))}(()=>{let l=null,p=[],o={q:"",tag:[],date:[],month:""},f="",H=0,L=()=>document.documentElement.lang.startsWith("en"),k=()=>`daybook:memos:${location.pathname}`,w=e=>e.slice(0,7),v=e=>new Date(Number(e.slice(0,4)),Number(e.slice(5,7))-1,1),x=e=>`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}`,q=e=>e.toLocaleLowerCase();function $(){let e=new URLSearchParams(location.search);return{q:e.get("q")||"",tag:[...new Set(e.getAll("tag").filter(Boolean))],date:[...new Set(e.getAll("date").filter(Boolean))],month:e.get("month")||""}}function D(){let e=new URL(location.href);Object.entries(o).forEach(([t,a])=>{e.searchParams.delete(t),(Array.isArray(a)?a:[a]).filter(Boolean).forEach(m=>e.searchParams.append(t,m))}),window.daybookReplaceURL?window.daybookReplaceURL(e.href):history.replaceState(history.state,"",e);try{sessionStorage.setItem(k(),JSON.stringify({...o,calendarMonth:f}))}catch{}}function P(e){return!o.q||e.search.includes(q(o.q.trim()))}function F(e,t=!0){return P(e)&&(!o.tag.length||o.tag.some(a=>e.tags.includes(a)))&&(!t||(!o.date.length||o.date.includes(e.date))&&(!o.month||w(e.date)===o.month))}function U(){document.querySelectorAll("mark.memo-search-highlight").forEach(s=>{let n=s.parentNode;s.replaceWith(document.createTextNode(s.textContent||"")),n?.normalize()});let e=CSS;e.highlights?.delete("memo-search");let t=q(o.q.trim());if(!t)return;let a=[],m=[];p.filter(s=>!s.element.hidden).forEach(s=>{let n=document.createTreeWalker(s.element,NodeFilter.SHOW_TEXT,{acceptNode(i){let E=i.parentElement;return E&&!E.closest("script, style, textarea, [hidden], [data-memo-overflow], .katex, .mermaid-block, svg")?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_REJECT}}),c=[],u="";for(;n.nextNode();){let i=n.currentNode;c.push({node:i,offset:u.length}),u+=i.data}let h=q(u),r=h.indexOf(t);for(;r!==-1;){let i=r+t.length,E=c.find(y=>y.offset+y.node.length>r),g=c.find(y=>y.offset+y.node.length>=i);if(E&&g){let y=document.createRange();y.setStart(E.node,r-E.offset),y.setEnd(g.node,i-g.offset),a.push(y),c.filter(M=>M.offsetr).forEach(M=>{m.push({node:M.node,start:Math.max(0,r-M.offset),end:Math.min(M.node.length,i-M.offset)})})}r=h.indexOf(t,i)}});let d=window.Highlight;e.highlights&&d?e.highlights.set("memo-search",new d(...a)):m.reverse().forEach(({node:s,start:n,end:c})=>{let u=s.splitText(n);u.splitText(c-n);let h=document.createElement("mark");h.className="memo-search-highlight",u.replaceWith(h),h.append(u)})}function R(){if(!f)return;let e=v(f),t=new Map;p.filter(s=>F(s,!1)).forEach(s=>t.set(s.date,(t.get(s.date)||0)+1));let a=p.map(s=>w(s.date)).filter(Boolean).sort(),m=a[0]||f,d=a[a.length-1]||f;document.querySelectorAll("[data-memos-filters]").forEach(s=>{let n=s.querySelector("[data-memos-month-label]");n&&(n.textContent=e.toLocaleDateString(L()?"en-US":"zh-CN",{year:"numeric",month:"long"}),n.setAttribute("aria-pressed",String(o.month===f))),s.querySelectorAll("[data-memos-month]").forEach(r=>{r.disabled=Number(r.dataset.memosMonth)<0?f<=m:f>=d});let c=s.querySelector("[data-memos-calendar]");if(!c)return;c.replaceChildren(),(L()?["S","M","T","W","T","F","S"]:["\u65E5","\u4E00","\u4E8C","\u4E09","\u56DB","\u4E94","\u516D"]).forEach(r=>{let i=document.createElement("span");i.className="memos-weekday",i.textContent=r,c.append(i)});for(let r=0;rt.tags.forEach(a=>e.set(a,(e.get(a)||0)+1))),document.querySelectorAll("[data-memos-tags]").forEach(t=>{if(t.replaceChildren(),!e.size){t.textContent=L()?"No tags":"\u6682\u65E0\u6807\u7B7E";return}[...e].sort((a,m)=>m[1]-a[1]||a[0].localeCompare(m[0])).forEach(([a,m])=>{let d=document.createElement("button");d.type="button",d.dataset.memoTag=a,d.setAttribute("aria-pressed",String(o.tag.includes(a)));let s=document.createElement("span");s.textContent=`#${a}`;let n=document.createElement("small");n.textContent=String(m),d.append(s,n),t.append(d)})})}function b(e=!0){if(!l)return;let t=document.activeElement,a=t?.closest("[data-memos-filters]"),m=t?.hasAttribute("data-memo-tag")?"data-memo-tag":t?.hasAttribute("data-memos-date")?"data-memos-date":"",d=m?t?.getAttribute(m):null,s=0;p.forEach(r=>{r.element.hidden=!F(r),r.element.hidden||s++});let n=l.querySelector("[data-memos-count]");if(n){let r=n.querySelector(".memo-number");r||(r=document.createElement("span"),r.className="memo-number",n.replaceChildren(r,document.createTextNode(""))),B(r,String(s)),n.lastChild.textContent=L()?" memos":" \u6761"}let c=l.querySelector("[data-memos-empty]");c&&(c.hidden=s>0||p.length===0);let u=l.querySelector("[data-memos-active]");u&&(u.hidden=!(o.q||o.tag.length||o.date.length||o.month));let h=l.querySelector("[data-memos-active-label]");h&&(h.textContent=[o.q?`\u201C${o.q}\u201D`:"",...o.tag.map(r=>`#${r}`),...o.date,o.month].filter(Boolean).join(" / ")),l.querySelectorAll("[data-memos-search]").forEach(r=>{r.value!==o.q&&(r.value=o.q)}),document.querySelectorAll(".memo-card [data-memo-tag]").forEach(r=>r.setAttribute("aria-pressed",String(o.tag.includes(r.dataset.memoTag||"")))),l.querySelectorAll("[data-memo-more-count]").forEach(r=>{let i=r.dataset.memoMoreCount,E=L()?`View ${i} more photos`:`\u67E5\u770B\u5269\u4F59 ${i} \u5F20\u56FE\u7247`;r.setAttribute("aria-label",E);let g=r.querySelector(".memo-photo-hint");g&&(g.textContent=L()?`View ${i} more`:`\u67E5\u770B\u5269\u4F59${i}\u5F20`)}),R(),O(),U(),a&&m&&d&&a.querySelector(`[${m}="${CSS.escape(d)}"]`)?.focus({preventScroll:!0}),e&&D()}function W(e){let t=e.querySelector(".memo-content");if(!t||t.dataset.memoImagesReady)return;t.dataset.memoImagesReady="true";let a=Array.from(t.querySelectorAll("img")).filter(n=>!n.closest(".embed-card, .music-custom-player, .katex"));a.slice(4).forEach(n=>{let c=n.closest("figure, picture"),u=n.parentElement,h=c&&c.querySelectorAll("img").length===1?c:u?.tagName==="P"&&u.querySelectorAll("img").length===1&&!u.textContent?.trim()?u:n;h.setAttribute("data-memo-overflow",""),h.setAttribute("hidden","")});let m=a.slice(0,4).map(n=>{let c=n.closest("figure"),u=n.parentElement,h=c&&c.querySelectorAll("img").length===1?c:u?.tagName==="P"&&u.querySelectorAll("img").length===1&&!u.textContent?.trim()?u:null;if(!h){let r=n.closest("picture");h=document.createElement("span");let i=n.closest("a")||r||n;i.before(h),h.append(i)}return h.classList.add("memo-photo-tile"),h});t.querySelectorAll(".md-gallery").forEach(n=>n.classList.add("memo-photo-grid")),t.querySelectorAll("p").forEach(n=>{!n.textContent?.trim()&&n.querySelectorAll("img").length>1&&n.classList.add("memo-photo-grid")});let d=[],s=()=>{if(d.length>1){let n=document.createElement("div");n.className="memo-photo-grid",d[0]?.before(n),d.forEach(c=>n.append(c))}d=[]};if(Array.from(t.children).forEach(n=>{n instanceof HTMLElement&&n.matches("p, figure")&&n.querySelectorAll("img").length===1&&(n.tagName==="FIGURE"||!n.textContent?.trim())?d.push(n):s()}),s(),a.length>4){let n=m[3];n.classList.add("has-more-photos");let c=document.createElement("a");c.className="memo-more-photos",c.href=e.dataset.memoUrl||"#",c.dataset.memoMoreCount=String(a.length-4);let u=document.createElement("span");u.className="memo-photo-count memo-number",u.textContent=`+${a.length-4}`;let h=document.createElement("span");h.className="memo-photo-hint",u.setAttribute("aria-hidden","true"),h.setAttribute("aria-hidden","true"),c.append(u,h),n.append(c)}}function C(){if(clearTimeout(H),l=document.querySelector("[data-memos-page]"),!l){p=[],CSS.highlights?.delete("memo-search");return}if(p=Array.from(l.querySelectorAll("[data-memo-card]")).map(e=>(W(e),{element:e,date:e.dataset.memoDate||"",search:q(e.dataset.memoSearch||""),tags:Array.from(e.querySelectorAll("[data-memo-tag]")).map(t=>t.dataset.memoTag||"")})),o=$(),f=o.month||w(o.date[0]||"")||p.map(e=>w(e.date)).filter(Boolean).sort().pop()||x(new Date),!location.search)try{let e=JSON.parse(sessionStorage.getItem(k())||"null");if(e&&typeof e.q=="string"&&typeof e.month=="string"){let t=a=>Array.isArray(a)?[...new Set(a.filter(m=>typeof m=="string"&&!!m))]:typeof a=="string"&&a?[a]:[];o={q:e.q,tag:t(e.tag),date:t(e.date),month:e.month},/^\d{4}-\d{2}$/.test(e.calendarMonth)&&(f=e.calendarMonth)}}catch{}/^\d{4}-(0[1-9]|1[0-2])$/.test(f)||(f=x(new Date)),b()}function I(e,t){let a=e.hasAttribute("data-memo-tag")?"tag":"date",m=a==="tag"?e.dataset.memoTag:e.dataset.memosDate,d=o[a];o[a]=t?d.includes(m)?d.filter(s=>s!==m):[...d,m]:d.length===1&&d[0]===m?[]:[m],a==="date"&&(o.month=""),b()}let T=null,S=0,A=()=>{T&&clearTimeout(T.timer),T=null};document.addEventListener("pointerdown",e=>{if(A(),S=0,!l||e.pointerType!=="touch"||!e.isPrimary)return;let t=e.target.closest("button[data-memo-tag], button[data-memos-date]");t&&(T={id:e.pointerId,x:e.clientX,y:e.clientY,target:t,timer:window.setTimeout(()=>{S=Date.now()+6e4,I(t,!0)},500)})}),document.addEventListener("pointermove",e=>{T?.id===e.pointerId&&Math.hypot(e.clientX-T.x,e.clientY-T.y)>10&&A()},{passive:!0}),document.addEventListener("pointerup",()=>{S&&(S=Date.now()+800),A()}),document.addEventListener("pointercancel",A),document.addEventListener("contextmenu",e=>{(T||Date.now(){A(),S=0}),document.addEventListener("input",e=>{let t=e.target;!(t instanceof HTMLInputElement)||!t.matches("[data-memos-search]")||(clearTimeout(H),H=window.setTimeout(()=>{o.q=t.value,b()},100))}),document.addEventListener("click",e=>{if(!l)return;if(Date.now(){l&&(o=$(),f=o.month||w(o.date[0]||"")||f,b(!1))}),document.addEventListener("daybook:page-load",C),document.addEventListener("daybook:lang-change",()=>{l&&b(!1)}),document.readyState==="loading"?document.addEventListener("DOMContentLoaded",C):C()})();})(); diff --git a/internal/embedded/static/js/mermaid-loader.js b/internal/embedded/static/js/mermaid-loader.js new file mode 100644 index 00000000..e968cd12 --- /dev/null +++ b/internal/embedded/static/js/mermaid-loader.js @@ -0,0 +1 @@ +"use strict";(()=>{(function(){var h="/js/vendor/mermaid.min.js",E="/assets-manifest.json",f=null,o=null,y=0,w=l();function g(r){return Array.prototype.slice.call((r||document).querySelectorAll(".mermaid-block"))}function l(){return document.documentElement.dataset.theme==="dark"?"dark":"default"}function L(){return f||(f=fetch(E,{credentials:"same-origin"}).then(function(r){if(!r.ok)throw new Error("assets manifest not found");return r.json()}).catch(function(){return{}})),f}function M(r){return L().then(function(e){return e[r]||r})}function T(){return window.mermaid?Promise.resolve(window.mermaid):o||(o=M(h).then(function(r){return new Promise(function(e,n){var a=document.querySelector("script[data-daybook-mermaid-lib]");if(a){if(window.mermaid){e(window.mermaid);return}a.addEventListener("load",function(){window.mermaid?e(window.mermaid):n(new Error("Mermaid library did not initialize."))},{once:!0}),a.addEventListener("error",function(){n(new Error("Mermaid library failed to load."))},{once:!0});return}var t=document.createElement("script");t.async=!0,t.src=r,t.dataset.daybookMermaidLib="true",t.addEventListener("load",function(){window.mermaid?e(window.mermaid):n(new Error("Mermaid library did not initialize."))},{once:!0}),t.addEventListener("error",function(){n(new Error("Mermaid library failed to load."))},{once:!0}),document.head.appendChild(t)})}),o=o.catch(function(r){throw o=null,r}),o)}function P(r){var e=r.querySelector(".mermaid-source code");return e&&e.textContent||""}function u(r,e){var n=r.querySelector(".mermaid-diagram"),a=r.querySelector(".mermaid-error");r.classList.remove("is-rendered"),r.classList.add("is-error"),r.dataset.mermaidStatus="error",n&&(n&&(n.innerHTML=""),n.setAttribute("aria-hidden","true")),a&&(a.hidden=!1,a.textContent=e)}function b(r){var e=r.querySelector(".mermaid-error");r.classList.remove("is-error"),e&&(e.hidden=!0,e.textContent="")}function p(r,e,n,a,t){if(!t&&e.dataset.mermaidStatus==="rendered"&&e.dataset.mermaidTheme===a)return Promise.resolve();var m=P(e);if(m.trim()==="")return u(e,"Mermaid source is empty."),Promise.resolve();var i=e.querySelector(".mermaid-diagram");if(!i)return u(e,"Mermaid diagram container is missing."),Promise.resolve();var v=String(y)+"-"+String(n),H="daybook-mermaid-"+v;return e.dataset.mermaidToken=v,e.dataset.mermaidStatus="rendering",e.classList.remove("is-rendered"),b(e),i&&(i.innerHTML=""),i.setAttribute("aria-hidden","true"),Promise.resolve(r.render(H,m)).then(function(d){e.dataset.mermaidToken===v&&(i&&(i.innerHTML=d.svg||""),typeof d.bindFunctions=="function"&&d.bindFunctions(i),i&&i.removeAttribute("aria-hidden"),e.classList.add("is-rendered"),e.dataset.mermaidStatus="rendered",e.dataset.mermaidTheme=a)}).catch(function(d){var q=d&&d.message?d.message:"Mermaid render failed.";u(e,q)})}function S(r){var e=g(document);if(e.length===0)return Promise.resolve();var n=l(),a=!!(r&&r.force);return y+=1,T().then(async function(t){if(!t||typeof t.initialize!="function"||typeof t.render!="function")throw new Error("Mermaid library is not available.");return await document.fonts.ready,t.initialize({startOnLoad:!1,theme:n,securityLevel:"strict",fontFamily:getComputedStyle(document.documentElement).getPropertyValue("--font-body").trim()}),Promise.all(e.map(function(m,i){return p(t,m,i,n,a)}))}).catch(function(t){var m=t&&t.message?t.message:"Mermaid failed to load.";e.forEach(function(i){u(i,m)})})}var c=0;function s(r){c&&window.clearTimeout(c),c=window.setTimeout(function(){c=0,S(r)},10)}window.DaybookMermaid={init:s},window.MutationObserver&&new MutationObserver(function(){var r=l();r!==w&&(w=r,s({force:!0}))}).observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme"]}),document.addEventListener("daybook:page-load",function(){s()}),document.addEventListener("daybook:article-content-swapped",function(){s()}),document.addEventListener("daybook:lang-change",function(){s({force:!0})})})();})(); diff --git a/internal/embedded/static/js/mobile-drawer.js b/internal/embedded/static/js/mobile-drawer.js new file mode 100644 index 00000000..840ea2d7 --- /dev/null +++ b/internal/embedded/static/js/mobile-drawer.js @@ -0,0 +1 @@ +"use strict";(()=>{(function(){let l=null;function v(){return document.getElementById("mobile-menu-toggle")}function b(){return document.getElementById("mobile-drawer")}function p(){return document.getElementById("mobile-drawer-mask")}function w(){return document.getElementById("mobile-overlay-mask")}function c(){var e=document.body.classList.contains("is-mobile-drawer-open"),t=document.body.classList.contains("is-tags-overlay-open"),n=document.body.classList.contains("is-search-overlay-open");document.getElementById("mobile-overlay-container")?.setAttribute("aria-hidden",String(!t&&!n)),document.querySelectorAll("[data-mobile-overlay-target]").forEach(s=>{s.setAttribute("aria-expanded",String(s.dataset.mobileOverlayTarget==="tags"?t:n))});let o=document.querySelector(".page-frame main");o&&(o.inert=t&&(window.matchMedia("(min-width: 961px)").matches||document.body.dataset.pageKind==="memos")),e||t||n?document.body.style.overflow="hidden":document.body.style.overflow=""}function d(e){var t=v(),n=b(),a=p(),o=e?"true":"false";t&&t.setAttribute("aria-expanded",o),n&&n.setAttribute("aria-hidden",e?"false":"true"),a&&a.setAttribute("aria-hidden",e?"false":"true"),e?document.body.classList.add("is-mobile-drawer-open"):document.body.classList.remove("is-mobile-drawer-open"),c()}function m(e){var t="is-"+e+"-overlay-open";if(document.body.classList.remove("is-tags-overlay-open","is-search-overlay-open"),document.body.classList.add(t),c(),e==="tags"){let a=()=>{if(!document.body.classList.contains("is-tags-overlay-open"))return;let o=document.querySelector("#mobile-tags-overlay [data-overlay-close]");if(o){if(getComputedStyle(o).visibility!=="visible"){requestAnimationFrame(a);return}o.focus({preventScroll:!0})}};requestAnimationFrame(a)}if(e==="search"){var n=document.getElementById("mobile-search-input");n&&window.setTimeout(function(){n&&n.focus()},50)}}function r(){document.body.classList.remove("is-tags-overlay-open","is-search-overlay-open"),c(),l?.isConnected&&(document.body.dataset.pageKind==="memos"&&l.closest("#mobile-drawer")&&!document.body.classList.contains("is-mobile-drawer-open")?v():l)?.focus({preventScroll:!0}),l=null}document.addEventListener("keydown",function(e){if(e.key==="Tab"&&document.body.dataset.pageKind==="memos"&&document.body.classList.contains("is-tags-overlay-open")){let t=document.getElementById("mobile-tags-overlay"),n=Array.from(t?.querySelectorAll('button:not(:disabled), a[href], input:not(:disabled), [tabindex="0"]')||[]).filter(s=>s.getClientRects().length>0),a=n[0],o=n[n.length-1];a&&o&&(e.shiftKey&&(document.activeElement===a||!t?.contains(document.activeElement))?(e.preventDefault(),o.focus()):!e.shiftKey&&(document.activeElement===o||!t?.contains(document.activeElement))&&(e.preventDefault(),a.focus()));return}if(e.key==="Escape"){if(document.body.classList.contains("is-tags-overlay-open")||document.body.classList.contains("is-search-overlay-open")){r();return}document.body.classList.contains("is-mobile-drawer-open")&&d(!1)}}),document.addEventListener("click",function(e){var t=e.target,n=t.closest("#mobile-menu-toggle");if(n){var a=document.body.classList.contains("is-mobile-drawer-open");d(!a);return}if(t.closest("#mobile-drawer-mask")){d(!1);return}if(t.closest("#mobile-overlay-mask")){r();return}if(t.closest(".drawer-nav-link[href]:not([data-rss-open]), .drawer-footer-row a")){d(!1);return}var o=t.closest("[data-mobile-overlay-target]");if(o){o.tagName==="A"&&e.preventDefault();var s=o.dataset.mobileOverlayTarget;if(!s)return;if(document.body.classList.contains("is-"+s+"-overlay-open")){r();return}if(l=o,document.body.classList.contains("is-mobile-drawer-open")){d(!1);var g=window.matchMedia("(prefers-reduced-motion: reduce)");if(g&&g.matches)m(s||"");else{var u=!1,i=b(),f=function(y){y&&y.target!==i||y.propertyName!=="transform"||(i&&i.removeEventListener("transitionend",f),u||(u=!0,m(s||"")))};i&&i.addEventListener("transitionend",f),window.setTimeout(function(){u||(i&&i.removeEventListener("transitionend",f),u=!0,m(s||""))},450)}}else m(s||"");return}if(t.closest("[data-overlay-close]")){r();return}var L=t.closest("[data-mobile-tag]");L&&r()}),window.addEventListener("resize",()=>{(document.body.classList.contains("is-tags-overlay-open")||document.body.classList.contains("is-search-overlay-open"))&&c()}),document.addEventListener("daybook:page-load",c),window.daybookCloseMobileOverlays=r})();})(); diff --git a/internal/embedded/static/js/mobile-toc.js b/internal/embedded/static/js/mobile-toc.js new file mode 100644 index 00000000..3e67818c --- /dev/null +++ b/internal/embedded/static/js/mobile-toc.js @@ -0,0 +1 @@ +"use strict";(()=>{var u=class{constructor(e,t,i,o,s,r,l,n,a){this.headings=[];this.observer=null;this.events=new AbortController;this.previousOverflow="";this.isOpen=!1;this.lastScrollY=window.scrollY;this.activeIndex=-1;this.endActiveIndex=-1;this.startY=0;this.currentY=0;this.isDragging=!1;this.handleTouchStart=e=>{let t=e.touches[0];!this.isOpen||!t||(this.isDragging=!0,this.startY=t.clientY,this.currentY=this.startY,this.sheet.classList.add("is-dragging"))};this.handleTouchMove=e=>{let t=e.touches[0];if(!this.isDragging||!t)return;this.currentY=t.clientY;let i=Math.max(0,this.currentY-this.startY);i>0&&(e.preventDefault(),this.panel.style.transform=`translateY(${i}px)`)};this.handleTouchEnd=()=>{if(!this.isDragging)return;this.isDragging=!1,this.sheet.classList.remove("is-dragging"),this.currentY-this.startY>100?this.closeSheet():this.panel.style.transform=""};this.fab=e,this.sheet=t,this.backdrop=i,this.panel=o,this.dragHandle=s,this.tocNav=r,this.indicator=l,this.listItems=n,this.postContent=a,this.init()}init(){document.body.append(this.fab,this.sheet);let e=this.events.signal;this.listItems.forEach(t=>{let i=t.querySelector("a");if(i){let o=this.headingID(i);if(o){let s=document.getElementById(o);s&&this.headings.push({id:o,element:s})}}}),this.fab.addEventListener("click",()=>this.openSheet(),{signal:e}),this.backdrop.addEventListener("click",()=>this.closeSheet(),{signal:e}),this.listItems.forEach(t=>{let i=t.querySelector("a");i?.addEventListener("click",o=>{o.preventDefault();let s=this.headingID(i),r=document.getElementById(s||"");r&&(this.closeSheet(),requestAnimationFrame(()=>{let l=document.documentElement.dataset.reducedMotion==="true"||window.matchMedia("(prefers-reduced-motion: reduce)").matches,n=Number.parseFloat(getComputedStyle(document.documentElement).getPropertyValue("--mobile-topbar-height"))||64;window.scrollTo({top:Math.max(0,r.getBoundingClientRect().top+window.scrollY-n-16),behavior:l?"instant":"smooth"});let a=new URL(location.href);a.hash=encodeURIComponent(s||""),window.daybookReplaceURL?window.daybookReplaceURL(a.href):history.replaceState(history.state,"",a.href)}))},{signal:e})}),this.dragHandle.addEventListener("touchstart",this.handleTouchStart,{passive:!0,signal:e}),document.addEventListener("touchmove",this.handleTouchMove,{passive:!1,signal:e}),document.addEventListener("touchend",this.handleTouchEnd,{signal:e}),document.addEventListener("keydown",t=>{t.key==="Escape"&&this.isOpen&&(t.preventDefault(),this.closeSheet())},{signal:e}),window.addEventListener("scroll",()=>this.handleScroll(),{passive:!0,signal:e}),this.setupIntersectionObserver(),this.handleScroll()}headingID(e){let t=e.getAttribute("href")?.slice(1)||"";try{return decodeURIComponent(t)}catch{return t}}isForContent(e){return this.postContent===e}handleScroll(){let e=window.scrollY;e<100||ethis.lastScrollY+10&&this.fab.classList.add("is-hidden"),this.lastScrollY=e}openSheet(){this.isOpen||(this.isOpen=!0,this.sheet.classList.add("is-open"),this.sheet.removeAttribute("inert"),this.sheet.setAttribute("aria-hidden","false"),this.fab.setAttribute("aria-expanded","true"),this.previousOverflow=document.body.style.overflow,document.body.style.overflow="hidden",this.syncIndicator())}closeSheet(){this.isOpen&&(this.isOpen=!1,this.sheet.classList.remove("is-open"),this.sheet.setAttribute("inert",""),this.sheet.setAttribute("aria-hidden","true"),this.fab.setAttribute("aria-expanded","false"),document.body.style.overflow=this.previousOverflow,this.panel.style.transform="")}setupIntersectionObserver(){this.headings.length!==0&&(this.observer=new IntersectionObserver(e=>{this.updateActiveHeading()},{rootMargin:"-10% 0px -80% 0px",threshold:0}),this.headings.forEach(e=>this.observer?.observe(e.element)),window.addEventListener("scroll",()=>this.updateActiveHeading(),{passive:!0,signal:this.events.signal}),this.updateActiveHeading())}updateActiveHeading(){if(this.headings.length===0)return;let e=window.scrollY,t=e+window.innerHeight,i=-1,o=window.scrollY+120;for(let n=0;n0&&(i=0);let s=-1,r=-1;for(let n=0;n=e&&d<=t&&(s===-1&&(s=n),r=n)}let l=s!==-1?Math.max(i,r):i;this.setActiveIndex(i,l)}setActiveIndex(e,t){if(e<0||e>=this.listItems.length)return;this.activeIndex=e,this.endActiveIndex=t;let i=!1;this.listItems.forEach((o,s)=>{let r=s===e;r!==o.classList.contains("is-active")&&(i=!0,o.classList.toggle("is-active",r))}),(i||this.isOpen)&&this.syncIndicator()}syncIndicator(){if(this.activeIndex===-1||this.endActiveIndex===-1){this.tocNav.classList.remove("has-active");return}this.tocNav.classList.add("has-active"),requestAnimationFrame(()=>{let e=this.listItems[this.activeIndex],t=this.listItems[this.endActiveIndex];if(!e||!t)return;let i=this.tocNav.getBoundingClientRect(),o=e.getBoundingClientRect(),s=t.getBoundingClientRect(),r=o.top-i.top+this.tocNav.scrollTop,l=18,n=Math.max(1,s.bottom-o.top),a=n/l,d=r+(n-l*a)/2;this.indicator.style.setProperty("--indicator-y",`${d}px`),this.indicator.style.setProperty("--indicator-scale",`${a}`)})}destroy(){this.closeSheet(),this.events.abort(),this.observer?.disconnect(),this.fab.remove(),this.sheet.remove()}},c=null;function v(){if(c?.isForContent(document.querySelector(".post-content")))return;c&&(c.destroy(),c=null);let h=document.querySelector("[data-mobile-toc-fab]"),e=document.querySelector("[data-mobile-toc-sheet]"),t=document.querySelector("[data-mobile-toc-backdrop]"),i=e?.querySelector(".mobile-toc-panel"),o=e?.querySelector("[data-mobile-toc-drag-handle]"),s=e?.querySelector(".mobile-toc-nav"),r=s?.querySelector("[data-mobile-toc-indicator]"),l=s?.querySelectorAll("li"),n=document.querySelector(".post-content");h&&e&&t&&i&&o&&s&&r&&l&&n&&(c=new u(h,e,t,i,o,s,r,l,n))}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",v):v();document.addEventListener("daybook:page-load",v);document.addEventListener("daybook:before-swap",()=>{c?.destroy(),c=null});})(); diff --git a/internal/embedded/static/js/note-filters.js b/internal/embedded/static/js/note-filters.js new file mode 100644 index 00000000..39965fc6 --- /dev/null +++ b/internal/embedded/static/js/note-filters.js @@ -0,0 +1,17 @@ +"use strict";(()=>{(()=>{let l=null,M=!1;function m(){return!!document.querySelector("[data-notes-tools]")}function d(e,a=!1){let t=document.querySelector("[data-notes-tools]");if(t&&(l=e,document.querySelectorAll("[data-notes-tool]").forEach(n=>{n.setAttribute("aria-expanded","false")}),document.querySelectorAll("[data-notes-panel]").forEach(n=>{n.setAttribute("aria-hidden","true"),n.classList.remove("is-active")}),t.classList.remove("is-search-open","is-tags-open","has-open-panel"),e)){t.classList.add(`is-${e}-open`,"has-open-panel");let n=document.querySelector(`[data-notes-tool="${e}"]`);n&&n.setAttribute("aria-expanded","true");let i=document.querySelector(`[data-notes-panel="${e}"]`);if(i&&(i.setAttribute("aria-hidden","false"),i.classList.add("is-active")),e==="search"&&a){let s=document.querySelector("[data-notes-search]");s&&s.focus()}}}function E(e,a){let t=window.daybookSearchEngine,n=t.highlightMatches(e.title,a),i=e.summary?`

${t.highlightMatches(e.summary,a)}

`:"",s="";e.pinned&&(s+=''),e.hasMusic&&(s+=''),e.hasTranslation&&(s+='');let r=``;e.section!=="memos"&&(r+=` ${e.readingMinutes} min`),e.updated&&(r+=` • updated `);let h=a&&n!==t.escapeHTML(e.title),f=a&&h?n:e.titleLayout||n;return` +
+
+

+ + ${f} + +

+
+ ${s} +
+

+ ${r} +

+
+ ${i} +
`}async function p(){let e=window.daybookSearchEngine;if(!e)return;let a=e.getCollectionContext();if(!document.querySelector(".notes-list")){let o=document.querySelector("[data-notes-search]"),y=document.querySelector("[data-desktop-search-results]");if(!o||!y)return;let c=o.value.trim(),L=c?await e.searchNotes(c):[];if(!o.isConnected||o.value.trim()!==c)return;if(y.hidden=!c,y.innerHTML=L.map(u=>E(u,c)).join(""),c&&!L.length){let u=document.createElement("p");u.className="notes-tool-empty",u.textContent=document.documentElement.lang.startsWith("en")?"No results found":"\u6CA1\u6709\u627E\u5230\u76F8\u5173\u5185\u5BB9",y.append(u)}return}let t=e.getCurrentQuery(),n=document.querySelector("[data-notes-search]");n&&(n.value=t);let i=document.querySelectorAll(".notes-pinned, .notes-divider, .notes-month, .pagination, .notes-empty:not(.notes-filter-empty)"),s=document.querySelector(".notes-search-results"),r=document.querySelector(".notes-filter-empty");if(!t){i.forEach(o=>o.hidden=!1),s&&(s.innerHTML="",s.hidden=!0),r&&(r.hidden=!0);return}i.forEach(o=>o.hidden=!0),l!=="search"&&d("search",!1);let h=await e.searchNotes(t,a.tagSlug),f=a.kind==="notes"?h.filter(o=>o.section!=="memos"):h;s&&(s.hidden=!1,s.innerHTML=f.map(o=>E(o,t)).join("")),r&&(r.hidden=f.length===0)}let g;function T(e){clearTimeout(g),g=window.setTimeout(()=>{let a=e.value.trim(),t=window.daybookSearchEngine;t&&m()&&(document.querySelector(".notes-list")&&t.updateSearchURL(a),p())},150)}document.addEventListener("click",function(e){let a=e.target;a.closest('[data-mobile-overlay-target="tags"]')&&d(null);let t=a.closest("[data-notes-tool]");if(t){let n=t.dataset.notesTool;n==="search"&&(window.daybookCloseMobileOverlays?.(),l===n?d(null):d(n,n==="search"))}}),document.addEventListener("input",function(e){let a=e.target;a.matches("[data-notes-search]")&&T(a)}),document.addEventListener("keydown",function(e){e.key==="Escape"&&(l==="search"||l==="tags")&&d(null)}),document.addEventListener("daybook:page-load",function(){clearTimeout(g),l=null,m()&&p()}),document.readyState==="loading"?document.addEventListener("DOMContentLoaded",function(){m()&&p()}):m()&&p()})();})(); diff --git a/internal/embedded/static/js/page-transition-engine.js b/internal/embedded/static/js/page-transition-engine.js new file mode 100644 index 00000000..a60c7594 --- /dev/null +++ b/internal/embedded/static/js/page-transition-engine.js @@ -0,0 +1 @@ +"use strict";(()=>{(()=>{let w="(max-width: 1280px)";function u(){return document.documentElement.getAttribute("data-reduced-motion")==="true"||window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches}function p(e,t){let n=window.getComputedStyle(document.documentElement).getPropertyValue(e).trim(),i=Number.parseFloat(n);return Number.isFinite(i)?n.endsWith("s")&&!n.endsWith("ms")?i*1e3:i:t}function d(e){let t=e.pathname;return t.length>1&&t.endsWith("/")&&(t=t.slice(0,-1)),t.endsWith("/index.html")&&(t=t.slice(0,-11)||"/"),t}function m(e){let t=d(e);return t.endsWith("/index.html")&&(t=t.substring(0,t.length-11)),t.endsWith("/")&&(t=t.substring(0,t.length-1)),/^(?:\/en_US)?\/notes\/.+/.test(t)?decodeURIComponent(t)+"/":null}function g(e){let t=d(e);return t.endsWith("/index.html")&&(t=t.substring(0,t.length-11)),t.endsWith("/")&&(t=t.substring(0,t.length-1)),t.startsWith("/en_US/")&&(t="/"+t.substring(7)),t==="/notes"}function h(e,t){try{let n=new URL(e,location.origin),i=new URL(t,location.origin),s=m(n),r=m(i),o=g(n),a=g(i);if(o&&r)return{direction:"to-detail",slug:r};if(s&&a)return{direction:"to-list",slug:s}}catch{return null}return null}function E(e,t){return u()?!1:!!h(e,t)}function l(e,t,n){if(!e||!n)return null;let i=e.querySelectorAll(`[${t}]`);for(let s of Array.from(i))if(s.getAttribute(t)===n)return s;return null}function f(e,t){return l(e,"data-title-transition-key",t)||l(e,"data-title-id",t)}function y(e){e&&(e.querySelectorAll(".title-glyph").forEach(t=>{t.style.removeProperty("view-transition-name")}),e.querySelectorAll("[data-title-transition-key]").forEach(t=>{t.style.removeProperty("view-transition-name")}),e.querySelectorAll("[data-article-shared]").forEach(t=>{t.style.removeProperty("view-transition-name")}))}function L(e,t,n){y(document);let i=h(e,t);if(!i||!i.slug)return null;let s=f(document,i.slug);n&&n.matches("[data-title-transition-key]")&&(s=n),s&&s.querySelectorAll(".title-glyph").forEach(a=>{let c=a;c.style.viewTransitionName=`title-glyph-${c.dataset.glyphIndex}`});let r=l(document,"data-transition-scope",i.slug);return r&&(r.querySelectorAll("[data-article-shared]").forEach(a=>{let c=a.getAttribute("data-article-shared");a.style.viewTransitionName=`article-shared-${c}`}),document.documentElement.classList.add("meta-shared-transition")),i}function T(e){if(!e||!e.slug)return;let t=f(document,e.slug);t&&t.querySelectorAll(".title-glyph").forEach(s=>{let r=s;r.style.viewTransitionName=`title-glyph-${r.dataset.glyphIndex}`});let n=l(document,"data-transition-scope",e.slug);n&&(n.querySelectorAll("[data-article-shared]").forEach(s=>{let r=s.getAttribute("data-article-shared");s.style.viewTransitionName=`article-shared-${r}`}),n.classList.add("meta-shared-target"))}function b(e){return e.classList.contains("home-body")?"home-exiting":"page-exiting"}function A(e){return e.classList.contains("home-body")?"home-entering":"page-entering"}function M(){document.documentElement.classList.remove("is-transitioning","article-transition","meta-shared-transition"),document.body&&document.body.classList.remove("home-exiting","page-exiting","home-entering","page-entering")}function S(e,t){let n=e.querySelectorAll("[data-transition-region]"),i=t.querySelectorAll("[data-transition-region]"),s=new Map;n.forEach(r=>{s.set(r.getAttribute("data-transition-region"),r),r.classList.remove("transition-stable")}),i.forEach(r=>{let o=r.getAttribute("data-transition-region"),a=s.get(o);r.classList.remove("transition-stable"),a&&(a.classList.add("transition-stable"),r.classList.add("transition-stable"))})}window.DaybookTransitionEngine={reducedMotion:u,cssDuration:p,isArticleTransition:E,prepareArticleTransitionSource:L,prepareArticleTransitionTarget:T,clearArticleSharedTransitions:y,exitClassName:b,enterClassName:A,clearTransitionClasses:M,resolveStableRegions:S}})();})(); diff --git a/internal/embedded/static/js/reader-mode.js b/internal/embedded/static/js/reader-mode.js new file mode 100644 index 00000000..9426b0db --- /dev/null +++ b/internal/embedded/static/js/reader-mode.js @@ -0,0 +1 @@ +var r=!1;function s(){let e=document.body.dataset.readerMode==="immersive";o(!e)}function o(e){e?document.body.dataset.readerMode="immersive":delete document.body.dataset.readerMode,n(),document.dispatchEvent(new CustomEvent("daybook:reader-mode-change",{detail:{enabled:e}}))}function i(){document.body.dataset.readerMode==="immersive"&&delete document.body.dataset.readerMode}function n(){let e=document.body.dataset.readerMode==="immersive";document.querySelectorAll("[data-reader-toggle]").forEach(t=>{t.setAttribute("aria-pressed",e.toString())}),document.querySelectorAll("[data-reader-exit]").forEach(t=>{e?t.removeAttribute("hidden"):t.setAttribute("hidden","true")})}function c(e){e.key==="Escape"&&!e.defaultPrevented&&!document.querySelector(".mobile-toc-sheet.is-open")&&document.body.dataset.readerMode==="immersive"&&(e.preventDefault(),o(!1))}function u(){r||(r=!0,document.addEventListener("click",e=>{let d=e.target;if(d.closest("[data-reader-toggle]")){e.preventDefault(),s();return}if(d.closest("[data-reader-exit]")){e.preventDefault(),o(!1);return}}),document.addEventListener("keydown",c),document.addEventListener("daybook:before-swap",i),document.addEventListener("daybook:page-load",n))}function l(){u(),n()}export{l as initReaderMode}; diff --git a/internal/embedded/static/js/reading-controls.js b/internal/embedded/static/js/reading-controls.js new file mode 100644 index 00000000..0b6950a0 --- /dev/null +++ b/internal/embedded/static/js/reading-controls.js @@ -0,0 +1 @@ +var h=!1,c=!1,e=!1,u=window.scrollY,m=!1,p=null;function k(){let l=document.body.dataset.pageKind!=="memo"&&document.querySelector(".note")!==null;h||(window.addEventListener("scroll",A,{passive:!0}),document.addEventListener("daybook:reader-mode-change",r=>{let s=r;requestAnimationFrame(()=>{b()}),s.detail&&s.detail.enabled&&d()}),window.visualViewport&&(window.visualViewport.addEventListener("scroll",d,{passive:!0}),window.visualViewport.addEventListener("resize",d,{passive:!0})),h=!0),l?(requestAnimationFrame(()=>{b()}),d()):(document.body.classList.remove("mobile-top-bar-hidden"),e=!1)}function d(){m||(m=!0,requestAnimationFrame(()=>{B(),m=!1}))}function B(){let l=document.body.dataset.readerMode==="immersive",r=window.innerWidth<=960;if(!l||!r)return;let s=window.visualViewport?window.visualViewport.offsetTop:0;(p===null||Math.abs(s-p)>.05)&&(document.body.style.setProperty("--reader-progress-visual-top",`${s}px`),p=s)}function A(){c||(window.requestAnimationFrame(()=>{b(),c=!1}),c=!0)}function b(){if(!(document.body.dataset.pageKind!=="memo"&&document.querySelector(".note")!==null))return;let r=document.getElementById("mobile-top-bar"),s=document.querySelectorAll("[data-desktop-progress-text]"),w=document.querySelectorAll("[data-mobile-progress-text]"),v=document.querySelectorAll(".back-to-top-btn, .mobile-top-btn"),L=document.querySelectorAll(".go-to-bottom-btn, .mobile-bottom-btn, .reading-progress-btn");v.forEach(t=>{let o=t;o.dataset.rcBound||(o.addEventListener("click",()=>window.scrollTo({top:0,behavior:"smooth"})),o.dataset.rcBound="true")}),L.forEach(t=>{let o=t;o.dataset.rcBound||(o.addEventListener("click",()=>{let a=document.querySelectorAll(".post-content h1, .post-content h2, .post-content h3, .post-content h4, .post-content h5, .post-content h6");if(a.length>0){let y=a[a.length-1];if(y){let C=y.getBoundingClientRect().top+window.scrollY-100;window.scrollTo({top:C,behavior:"smooth"});return}}window.scrollTo({top:document.documentElement.scrollHeight,behavior:"smooth"})}),o.dataset.rcBound="true")});let n=window.scrollY,E=80;n<=0?document.body.classList.add("is-at-top"):document.body.classList.remove("is-at-top");let S=document.documentElement.scrollHeight,T=window.innerHeight,f=S-T,i=0;f>0&&(i=Math.round(n/f*100),i=Math.max(0,Math.min(100,i))),s.forEach(t=>t.textContent=`${i}%`),w.forEach(t=>t.textContent=`${i}%`);let M=document.querySelectorAll("[data-progress-circle]"),g=62.8318;M.forEach(t=>{let o=g-i/100*g;t.style.strokeDashoffset=o.toString()});let R=`${i}%`;document.body.style.setProperty("--reading-progress",R);let q=document.body.dataset.readerMode==="immersive";window.innerWidth<=960?!q&&r&&(document.body.classList.contains("is-mobile-drawer-open")||document.body.classList.contains("is-search-overlay-open")||document.body.classList.contains("is-tags-overlay-open")||n<=0?e&&(document.body.classList.remove("mobile-top-bar-hidden"),e=!1):n>u?(document.body.classList.add("is-scrolling-down"),document.body.classList.remove("is-scrolling-up"),n>E&&!e&&(document.body.classList.add("mobile-top-bar-hidden"),e=!0)):n{(()=>{let c=null;function g(n){return(n||"").toLowerCase()}function f(){return c||(c=fetch("/search.json").then(n=>{if(!n.ok)throw new Error("Search index fetch failed");return n.json()}).then(n=>{let e=[];for(let o of n)for(let r of["zh_CN","en_US"]){let t=o.versions[r];t&&e.push(t)}return{flattened:e}}).catch(n=>(console.error("Failed to load search index:",n),c=null,{flattened:[]})),c)}function w(n,e){return f().then(o=>{if(!n&&!e)return o.flattened;let r=g(n);return o.flattened.filter(t=>{if(e){let s=!1;for(let a of t.tags||[])if(a.toLowerCase().replace(/\s+/g,"-")===e.toLowerCase()){s=!0;break}if(!s&&(!t.tagIDs||!t.tagIDs.includes(e)))return!1}return!(r&&!g(t.title+" "+(t.summary||"")+" "+(t.date||"")+" "+(t.location||"")+" "+(t.tags||[]).join(" ")).includes(r))})})}function u(n=window.location.pathname){let o=new URL(n,window.location.origin).pathname;o=o.replace(/\/page\/\d+\/?$/,"/");let r=o.split("/").filter(Boolean),t=r.indexOf("tags");if(t!==-1&&t+1'"]/g,e=>({"&":"&","<":"<",">":">","'":"'",'"':"""})[e]||e):""}function U(n,e){if(!e||!n)return i(n);let o=n.toLowerCase(),r=e.toLowerCase(),t=o.indexOf(r);if(t===-1)return i(n);let s=i(n.substring(0,t)),a=i(n.substring(t,t+e.length)),d=i(n.substring(t+e.length));return`${s}${a}${d}`}window.daybookSearchEngine={loadSearchIndex:f,searchNotes:w,getCollectionContext:u,buildSearchURL:h,getCurrentQuery:L,updateSearchURL:R,escapeHTML:i,highlightMatches:U};function l(){let n=new URLSearchParams(window.location.search);if(n.has("tag")&&window.location.pathname.includes("/notes/")){let e=n.get("tag"),o=window.location.pathname.replace("/notes/",`/tags/${encodeURIComponent(e||"")}/`);window.daybookNavigateTo&&window.daybookNavigateTo(o)}}document.addEventListener("daybook:page-load",()=>{l()}),document.readyState==="loading"?document.addEventListener("DOMContentLoaded",l):l()})();})(); diff --git a/internal/embedded/static/js/search-overlay.js b/internal/embedded/static/js/search-overlay.js new file mode 100644 index 00000000..56379e7c --- /dev/null +++ b/internal/embedded/static/js/search-overlay.js @@ -0,0 +1,17 @@ +"use strict";(()=>{(()=>{function h(){return document.getElementById("mobile-search-input")}function u(){return document.getElementById("mobile-search-results")}function m(){return document.getElementById("mobile-search-empty")}function f(){return document.getElementById("mobile-search-loading")}function p(e,t){let n=window.daybookSearchEngine;if(!n)return"";let a=n.highlightMatches(e.title,t),i=e.summary?`

${n.highlightMatches(e.summary,t)}

`:"",s="";e.pinned&&(s+=''),e.hasMusic&&(s+=''),e.hasTranslation&&(s+='');let o=``;e.section!=="memos"&&(o+=` ${e.readingMinutes} min`),e.updated&&(o+=` • updated `);let c=t&&a!==n.escapeHTML(e.title),l=t&&c?a:e.titleLayout||a;return` +
+
+

+ + ${l} + +

+
+ ${s} +
+

+ ${o} +

+
+ ${i} +
`}async function r(){let e=window.daybookSearchEngine;if(!e)return;let t=e.getCurrentQuery(),n=h();if(n&&n.value!==t&&(n.value=t),t&&n){let a=e.getCollectionContext(),i=await e.searchNotes(t,a.tagSlug),s=a.kind==="notes"?i.filter(l=>l.section!=="memos"):i,o=u(),c=m();o&&(o.innerHTML=s.map(l=>p(l,t)).join("")),c&&(c.hidden=s.length>0)}else{let a=u(),i=m();a&&(a.innerHTML=""),i&&(i.hidden=!0)}}let d;function g(e){let t=window.daybookSearchEngine;t&&(clearTimeout(d),d=window.setTimeout(()=>{let n=e.value.trim();t.updateSearchURL(n),r()},150))}document.addEventListener("input",function(e){let t=e.target;t&&t.id==="mobile-search-input"&&g(t)}),document.addEventListener("focusin",function(e){let t=e.target;if(t&&t.closest("[data-notes-search]")){let n=window.daybookSearchEngine;n&&n.loadSearchIndex()}}),document.addEventListener("click",function(e){let t=e.target;if(!t)return;if(t.closest('[data-mobile-overlay-target="search"]')){let a=window.daybookSearchEngine;a&&a.loadSearchIndex()}}),document.addEventListener("daybook:page-load",()=>{clearTimeout(d),r()}),document.readyState==="loading"?document.addEventListener("DOMContentLoaded",r):r()})();})(); diff --git a/internal/embedded/static/js/settings-overlay.js b/internal/embedded/static/js/settings-overlay.js new file mode 100644 index 00000000..ae4bb28e --- /dev/null +++ b/internal/embedded/static/js/settings-overlay.js @@ -0,0 +1 @@ +var E="daybook:user-settings",f={useCustomCursor:!1,enableClockCursor:!1,disableComments:!1,reducedMotion:!1},s={...f};function y(){try{let e=localStorage.getItem(E);if(e){let{useSystemCursor:n,...r}=JSON.parse(e);s={...f,...r,useCustomCursor:typeof r.useCustomCursor=="boolean"?r.useCustomCursor:n===!1}}}catch(e){console.error("[Daybook] Failed to parse settings from localStorage",e)}return s}function v(e,n){s[e]=n;try{localStorage.setItem(E,JSON.stringify(s))}catch(r){console.error("[Daybook] Failed to save settings to localStorage",r)}p(),document.dispatchEvent(new CustomEvent("daybook:settings-change",{detail:s}))}function p(){let e=document.documentElement;s.useCustomCursor?e.removeAttribute("data-use-system-cursor"):e.setAttribute("data-use-system-cursor","true"),s.enableClockCursor?e.setAttribute("data-clock-cursor","true"):e.removeAttribute("data-clock-cursor"),s.disableComments?e.setAttribute("data-comments-disabled","true"):e.removeAttribute("data-comments-disabled"),s.reducedMotion?e.setAttribute("data-reduced-motion","true"):e.removeAttribute("data-reduced-motion")}y();p();document.addEventListener("daybook:settings-change",e=>{let n=e;n.detail&&(s={...s,...n.detail})});function L(){let e=document.querySelector(".persistent-logo");if(!e)return;e.addEventListener("click",t=>{t.preventDefault();let o=document.getElementById("settings-overlay");o&&(o.removeAttribute("inert"),o.setAttribute("aria-hidden","false"),o.classList.add("is-open"),document.body.style.overflow="hidden")});let n=t=>{document.dispatchEvent(new CustomEvent("daybook:settings-close",{cancelable:!0}))&&(t.setAttribute("inert",""),t.setAttribute("aria-hidden","true"),t.classList.remove("is-open"),document.body.style.overflow="",e.focus({preventScroll:!0}))};document.addEventListener("daybook:settings-dismiss",()=>{let t=document.getElementById("settings-overlay");t&&n(t)}),document.addEventListener("click",t=>{let o=t.target,a=document.getElementById("settings-overlay");if(!(!a||!a.classList.contains("is-open"))){if(o.closest("[data-privacy-open]")){document.dispatchEvent(new CustomEvent("daybook:privacy-open",{detail:{withinSettings:!0}}));return}o.closest("[data-settings-close]")&&n(a)}}),document.addEventListener("pointerdown",t=>{t.target.closest(".settings-overlay")&&t.stopPropagation()}),document.addEventListener("mousedown",t=>{t.target.closest(".settings-overlay")&&t.stopPropagation()}),document.addEventListener("touchstart",t=>{t.target.closest(".settings-overlay")&&t.stopPropagation()}),document.addEventListener("keydown",t=>{let o=document.getElementById("settings-overlay");t.key==="Escape"&&o&&o.classList.contains("is-open")&&n(o)});let r=y(),u=(t,o)=>{let a=document.getElementById(t);a&&(a.checked=r[o],a.addEventListener("change",d=>{let i=d.target.checked;v(o,i)}))};u("setting-custom-cursor","useCustomCursor"),u("setting-clock-cursor","enableClockCursor"),u("setting-disable-comments","disableComments"),u("setting-reduced-motion","reducedMotion");let m=document.getElementById("setting-custom-cursor"),g=document.getElementById("setting-clock-cursor"),c=document.querySelector(".setting-item-clock-cursor");if(m&&g&&c){let t=()=>{m.checked?(c.style.opacity="1",c.style.pointerEvents="auto",g.disabled=!1):(c.style.opacity="0.5",c.style.pointerEvents="none",g.disabled=!0)};m.addEventListener("change",t),t()}let b=t=>{let o=t.toLowerCase().startsWith("en"),a=o?"data-i18n-en":"data-i18n-zh",d=o?"data-i18n-aria-en":"data-i18n-aria-zh";document.body.querySelectorAll(`[${a}]`).forEach(i=>{let l=i.getAttribute(a);l&&(i.textContent=l)}),document.body.querySelectorAll(`[${d}]`).forEach(i=>{let l=i.getAttribute(d);l&&i.setAttribute("aria-label",l)})};b(document.documentElement.lang),document.addEventListener("daybook:lang-change",t=>{t.detail&&t.detail.lang&&b(t.detail.lang)})}export{L as initSettingsOverlay}; diff --git a/internal/embedded/static/js/share-overlay.js b/internal/embedded/static/js/share-overlay.js new file mode 100644 index 00000000..f7a87930 --- /dev/null +++ b/internal/embedded/static/js/share-overlay.js @@ -0,0 +1,6 @@ +var g=new WeakMap;function b(){return document.documentElement.dataset.reducedMotion==="true"||window.matchMedia("(prefers-reduced-motion: reduce)").matches}function x(e,d,l=!1,f){let u=g.get(e),h=u?.text??e.textContent?.trim()??"";u&&clearTimeout(u.timer),g.delete(e);let i=()=>{e.textContent=d,e.classList.remove("text-roll-active"),g.delete(e),f?.()};if(l||b()||h===d){i();return}let c=Array.from(h),m=Array.from(d),p=Math.max(c.length,m.length);e.replaceChildren(),e.classList.add("text-roll-active");for(let s=0;s{let o=t.target.closest("[data-share-open]");if(o){let r=o.getAttribute("data-share-title")||"",a=o.getAttribute("data-share-link")||"",y=o.getAttribute("data-share-text")||"";m(r,a,y)}}),d.forEach(t=>{t.addEventListener("click",p)}),document.addEventListener("keydown",t=>{t.key==="Escape"&&e.classList.contains("is-open")&&p()}),f&&f.addEventListener("click",()=>{let t=l.value,n=`https://twitter.com/intent/tweet?text=${encodeURIComponent(t)}`;window.open(n,"_blank","noopener,noreferrer")});function s(t,n){if(!n||!t.includes(n))return t;let o=t.indexOf(n),r=t.substring(0,o),a=t.substring(o+n.length);return r.endsWith(` +`)&&a.startsWith(` +`)?r=r.substring(0,r.length-1):r.trim()===""&&a.startsWith(` +`)?a=a.substring(1):a.trim()===""&&r.endsWith(` +`)&&(r=r.substring(0,r.length-1)),(r+a).trim()}u&&u.addEventListener("click",()=>{let t=l.value,n=s(t,c),o=`https://t.me/share/url?url=${encodeURIComponent(c)}&text=${encodeURIComponent(n)}`;window.open(o,"_blank","noopener,noreferrer")}),h&&i&&h.addEventListener("click",()=>{let t=l.value;navigator.clipboard.writeText(t).then(()=>{let n=document.documentElement.lang.toLowerCase().startsWith("en")?"en_US":"zh",o=i.getAttribute(`data-text-copied-${n}`)||"Copied";x(i,o),setTimeout(()=>{let r=document.documentElement.lang.toLowerCase().startsWith("en")?"en_US":"zh",a=i.getAttribute(`data-text-copy-${r}`)||"Copy";x(i,a)},1500)})})}export{E as initShareOverlay}; diff --git a/internal/embedded/static/js/theme.js b/internal/embedded/static/js/theme.js new file mode 100644 index 00000000..766e6a1b --- /dev/null +++ b/internal/embedded/static/js/theme.js @@ -0,0 +1 @@ +"use strict";(()=>{(function(){let a=document.documentElement,S={zh_CN:{"theme.light":"\u6D45\u8272","theme.dark":"\u6DF1\u8272","theme.system":"\u8DDF\u968F\u7CFB\u7EDF","theme.system_light":"\u8DDF\u968F\u7CFB\u7EDF\uFF08\u6D45\u8272\uFF09","theme.system_dark":"\u8DDF\u968F\u7CFB\u7EDF\uFF08\u6DF1\u8272\uFF09","palette.cool":"\u51B7\u8272","palette.warm":"\u6696\u8272"},en_US:{"theme.light":"Light","theme.dark":"Dark","theme.system":"System","theme.system_light":"System (Light)","theme.system_dark":"System (Dark)","palette.cool":"Cool","palette.warm":"Warm"}};function m(e){let t=a.lang.toLowerCase().startsWith("en")?"en_US":"zh_CN";return S[t][e]||e}function k(){try{return localStorage.getItem("theme-mode")||""}catch{return""}}function A(){try{return localStorage.getItem("theme")||""}catch{return""}}function M(){try{return localStorage.getItem("palette")||""}catch{return""}}function b(){try{return localStorage.getItem("eyeCare")||""}catch{return""}}function y(e){try{localStorage.setItem("theme-mode",e)}catch{}}function w(e){try{localStorage.setItem("palette",e)}catch{}}function p(){return window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}function C(){let e=k();if(e==="system"||e==="light"||e==="dark")return e;let t=A();if(t==="light"||t==="dark"){y(t);try{localStorage.removeItem("theme")}catch{}return t}return"system"}function E(){let e=M();if(e==="warm"||e==="default")return e;let t=b();if(t==="true"){w("warm");try{localStorage.removeItem("eyeCare")}catch{}return"warm"}else if(t==="false"){w("default");try{localStorage.removeItem("eyeCare")}catch{}return"default"}return"default"}function d(e,t){let r=e==="system"?p():e;a.dataset.themeMode=e,a.dataset.theme=r,t&&y(e),u()}function u(){let e=a.dataset.themeMode||"system",t=a.dataset.theme||"light";document.querySelectorAll(".theme-toggle").forEach(function(n){n.tagName.toLowerCase()==="button"&&(e==="system"?(n.setAttribute("aria-label",m(`theme.system_${t}`)),n.hasAttribute("data-tooltip")&&n.setAttribute("data-tooltip",m(`theme.system_${t}`))):(n.setAttribute("aria-label",m(`theme.${e}`)),n.hasAttribute("data-tooltip")&&n.setAttribute("data-tooltip",m(`theme.${e}`))))});let r=["light","system","dark"];document.querySelectorAll(".mobile-theme-selector").forEach(function(n){let c=n.dataset.mode;c&&c!==e&&(n.dataset.direction=r.indexOf(e)>r.indexOf(c)?"right":"left"),n.dataset.mode=e}),document.querySelectorAll(".theme-selector-btn").forEach(function(n){n.getAttribute("data-mode")===e?n.setAttribute("aria-checked","true"):n.setAttribute("aria-checked","false")})}function h(e,t){let r=e==="warm"?"warm":"default";a.dataset.palette=r,t&&w(r),document.querySelectorAll(".palette-toggle").forEach(function(n){n.setAttribute("aria-pressed",r==="warm"?"true":"false"),n.hasAttribute("data-tooltip")&&n.setAttribute("data-tooltip",m(r==="warm"?"palette.warm":"palette.cool")),n.setAttribute("aria-label",m(r==="warm"?"palette.warm":"palette.cool")),n.getAttribute("role")==="switch"&&n.setAttribute("aria-checked",r==="warm"?"true":"false")})}function f(){return document.startViewTransition?window.matchMedia?!window.matchMedia("(prefers-reduced-motion: reduce)").matches:!0:!1}function l(e){a.style.removeProperty("view-transition-name"),delete a.dataset[e]}let P=C();d(P,!1);let L=E();h(L,!1),window.daybookSyncThemeButtons=function(){u(),h(a.dataset.palette||"default",!1)},window.daybookSetTheme=function(e,t){d(e,t)},window.daybookSetPalette=h,window.daybookShouldAnimateTheme=f,window.daybookClearThemeTransition=l,document.addEventListener("daybook:page-load",function(){d(a.dataset.themeMode||"system",!1),h(a.dataset.palette||"default",!1)}),window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",function(e){if(a.dataset.themeMode==="system"){let t=e.matches?"dark":"light";if(!f()){a.dataset.theme=t,u();return}a.style.setProperty("view-transition-name","theme-toggle-transition"),a.dataset.themeChanging="true",document.startViewTransition(function(){a.dataset.theme=t,u()}).finished.then(function(){l("themeChanging")},function(){l("themeChanging")})}}),document.addEventListener("pointerdown",function(e){let t=e.target;if(!t)return;let r=t.closest(".material-switch");r&&r.classList.add("is-pressed")});function v(){document.querySelectorAll(".material-switch.is-pressed").forEach(function(e){e.classList.remove("is-pressed")})}document.addEventListener("pointerup",v),document.addEventListener("pointercancel",v);let i=!1;document.addEventListener("click",function(e){if(i)return;let t=e.target;if(!t)return;let r=t.closest(".theme-selector-btn");if(r){let s=r.getAttribute("data-mode");if(s&&s!==a.dataset.themeMode){let o=s==="system"?p():s,g=a.dataset.theme;if(o===g||!f()){d(s,!0);return}i=!0,a.dataset.themeMode=s,y(s),u(),setTimeout(function(){a.style.setProperty("view-transition-name","theme-toggle-transition"),a.dataset.themeChanging="true",document.startViewTransition(function(){a.dataset.theme=o,u()}).finished.then(function(){l("themeChanging"),i=!1},function(){l("themeChanging"),i=!1})},350)}return}if(t.closest(".theme-toggle")){let s=a.dataset.themeMode||"system",o=s==="system"?"light":s==="light"?"dark":"system",g=o==="system"?p():o,T=a.dataset.theme;if(g===T||!f()){d(o,!0);return}i=!0,a.style.setProperty("view-transition-name","theme-toggle-transition"),a.dataset.themeChanging="true",document.startViewTransition(function(){d(o,!0)}).finished.then(function(){l("themeChanging"),i=!1},function(){l("themeChanging"),i=!1});return}let c=t.closest(".palette-toggle");if(c){let o=(a.dataset.palette==="warm"?"warm":"default")==="warm"?"default":"warm";if(!f()){h(o,!0);return}i=!0,c.getAttribute("role")==="switch"&&c.setAttribute("aria-checked",o==="warm"?"true":"false"),setTimeout(function(){a.style.setProperty("view-transition-name","palette-toggle-transition"),a.dataset.paletteChanging=o==="warm"?"to-warm":"from-warm",document.startViewTransition(function(){h(o,!0)}).finished.then(function(){l("paletteChanging"),i=!1},function(){l("paletteChanging"),i=!1})},350)}})})();})(); diff --git a/internal/embedded/static/js/toc.js b/internal/embedded/static/js/toc.js new file mode 100644 index 00000000..b04eeea3 --- /dev/null +++ b/internal/embedded/static/js/toc.js @@ -0,0 +1 @@ +"use strict";(()=>{var x={width:208,height:640,direction:1,lineInset:12,idleAmplitude:10.4,maxExtraAmplitude:14,bulgeHalfHeight:56,labelGap:12},Q=90,et=2*Math.sqrt(Q)*.75,it=.064,nt=.016,q=.035,rt=.05,B=.025,Y=.5,at=.14,st=.08,ot=.012,lt=2.2,dt=.6,ht=9e3,z=-4,ct=5e3,U=1;function y(i,t,e){return Number.isFinite(i)?Math.min(e,Math.max(t,i)):t}function f(i,t){return Number.isFinite(i)?i:t}function M(i,t,e=.001){return Math.abs(i-t)<=e}function u(i){return Number.isFinite(i)?String(Math.round(i*1e3)/1e3):"0"}function I(i,t){let e=i.querySelector(t);if(!e)throw new Error(`[Daybook] Reading TOC rail is missing ${t}`);return e}function N(i){return{current:i,target:i,velocity:0}}function w(i){i.current=i.target,i.velocity=0}function X(i,t,e,n){let r=t*(i.target-i.current)-e*i.velocity;i.velocity+=r*n,i.current+=i.velocity*n,(!Number.isFinite(i.current)||!Number.isFinite(i.velocity))&&w(i)}function G(i,t,e=rt){return Math.abs(i.target-i.current)<=t&&Math.abs(i.velocity)<=e}function ut(i,t){return i.direction===t.direction&&M(i.width,t.width)&&M(i.height,t.height)&&M(i.lineInset,t.lineInset)&&M(i.idleAmplitude,t.idleAmplitude)&&M(i.maxExtraAmplitude,t.maxExtraAmplitude)&&M(i.bulgeHalfHeight,t.bulgeHalfHeight)&&M(i.labelGap,t.labelGap)}function j(i){let t=Math.max(U,f(i.width,x.width)),e=Math.max(U,f(i.height,x.height));return{width:t,height:e,direction:i.direction<0?-1:1,lineInset:y(f(i.lineInset,x.lineInset),0,t),idleAmplitude:Math.max(0,f(i.idleAmplitude,x.idleAmplitude)),maxExtraAmplitude:Math.max(0,f(i.maxExtraAmplitude,x.maxExtraAmplitude)),bulgeHalfHeight:Math.max(1,f(i.bulgeHalfHeight,x.bulgeHalfHeight)),labelGap:Math.max(0,f(i.labelGap,x.labelGap))}}function P(i,t,e,n,r=0){let a=(m,v)=>Math.hypot(v[0]-m[0],v[1]-m[1]),s=a(i,n),o=a(i,t)+a(t,e)+a(e,n);if(o-s<=.001||r>=12)return(o+s)/2;let l=(m,v)=>[(m[0]+v[0])/2,(m[1]+v[1])/2],c=l(i,t),h=l(t,e),b=l(e,n),g=l(c,h),p=l(h,b),d=l(g,p);return P(i,c,g,d,r+1)+P(d,p,b,n,r+1)}function O(i,t){let e=(c,h)=>[c[0]+(h[0]-c[0])*t,c[1]+(h[1]-c[1])*t],n=e(i[0],i[1]),r=e(i[1],i[2]),a=e(i[2],i[3]),s=e(n,r),o=e(r,a),l=e(s,o);return[[i[0],n,s,l],[l,o,a,i[3]]]}function W(i,t,e){if(t<=0)return 0;if(t>=e)return 1;let n=0,r=1;for(let a=0;a<18;a++){let s=(n+r)/2;P(...O(i,s)[0])`${u(v[0])} ${u(v[1])}`,d=v=>{g.length===0&&g.push(`M ${p(v)}`)};hS){let H=W(v,S,E),T=W(v,A,E),tt=O(v,T)[0],C=O(tt,H/T)[1];d(C[0]),g.push(`C ${p(C[1])} ${p(C[2])} ${p(C[3])}`)}m+=E}return b>m&&(d([o,s+Math.max(0,h-m)]),g.push(`L ${p([o,s+b-m])}`)),g.join(" ")}function pt(i,t,e,n=i.bulgeHalfHeight){let r=j(i),a=r.height,s=r.lineInset,o=y(f(t,0),0,a),l=Math.max(1,f(n,r.bulgeHalfHeight)),c=Math.max(0,o-l),h=Math.min(a,o+l),b=y(Math.min(o/l,(a-o)/l),0,1),g=r.direction>0?Math.max(0,r.width-s):Math.max(0,s),p=Math.min(g,Math.max(0,f(e,r.idleAmplitude))*b),d=s+r.direction*p,m=[`C ${u(s)} ${u(o-.6*l)}`,`${u(d)} ${u(o-.3*l)}`,`${u(d)} ${u(o)}`,`C ${u(d)} ${u(o+.3*l)}`,`${u(s)} ${u(o+.6*l)}`,`${u(s)} ${u(h)}`].join(" "),v=[[s,c],[s,o-.6*l],[d,o-.3*l],[d,o]],E=[[d,o],[d,o+.3*l],[s,o+.6*l],[s,h]],S=P(...v),A=P(...E),H=c+S;return{basePath:[`M ${u(s)} ${u(Math.min(0,c))}`,`L ${u(s)} ${u(c)}`,m,`L ${u(s)} ${u(Math.max(a,h))}`].join(" "),accentPath:mt(v,E,S,A,a),peakX:d,effectiveAmplitude:p,effectiveHalfHeight:l,topY:c,bottomY:h,markerLength:H,totalLength:H+A+a-h}}function gt(i,t,e,n,r){let a=Math.max(1,f(e,1)),s=Math.abs(f(i,0)-f(t,0))/a;if(s>=1)return 0;let o=Math.cos(s*Math.PI/2)**2;return r*Math.max(0,f(n,0))*o}function vt(i){let t=String(i.text||"").trim();return{id:String(i.id||""),text:t,level:Math.round(y(f(i.level,2),1,6)),ratio:y(f(i.ratio,0),0,1),ariaLabel:String(i.ariaLabel||t)}}var D=class{constructor(t){this.geometry=x;this.headings=[];this.dotButtons=[];this.markerY=N(0);this.amplitude=N(0);this.hoverSpring=N(0);this.progressTarget=0;this.activeIndex=-1;this.endActiveIndex=-1;this.renderedActiveIndex=-2;this.renderedEndActiveIndex=-2;this.renderedPercent=-1;this.renderedTitle="";this.visibleTitleSlot=0;this.speedTarget=0;this.smoothedSpeed=0;this.lastTimestamp=null;this.frameInitialized=!1;this.reducedMotion=!1;this.interactive=!1;this.destroyed=!1;this.snapRequested=!0;this.geometryDirty=!0;this.dotsDirty=!0;this.interactionDirty=!0;this.root=t,this.svg=I(t,"[data-reading-toc-rail-svg]"),this.basePath=I(t,"[data-reading-toc-rail-base]"),this.accentPath=I(t,"[data-reading-toc-rail-accent]"),this.dotsRoot=I(t,"[data-reading-toc-rail-dots]"),this.label=I(t,"[data-reading-toc-rail-label]"),this.currentLink=I(t,"[data-reading-toc-rail-link]"),this.percent=I(t,"[data-reading-toc-rail-percent]");let e=Array.from(t.querySelectorAll("[data-reading-toc-rail-title]")),n=e[0],r=e[1];if(!n||!r)throw new Error("[Daybook] Reading TOC rail requires two title slots");this.titleSlots=[n,r],this.baseTop=this.basePath.cloneNode(),this.baseBottom=this.basePath.cloneNode(),this.accentTop=this.accentPath.cloneNode(),this.accentBottom=this.accentPath.cloneNode(),this.reflections=document.createElementNS("http://www.w3.org/2000/svg","g"),this.reflections.setAttribute("clip-path","inset(0) view-box"),this.reflections.append(this.baseTop,this.baseBottom,this.accentTop,this.accentBottom),this.svg.appendChild(this.reflections),this.refreshPositionTargets()}setHeadings(t){if(this.destroyed)return;this.headings=t.map(vt);let e=document.createDocumentFragment();this.dotButtons=this.headings.map(n=>{let r=document.createElement("div");return r.setAttribute("data-reading-toc-rail-dot",""),r.setAttribute("data-heading-level",String(n.level)),r.setAttribute("aria-hidden","true"),e.appendChild(r),r}),this.dotsRoot.replaceChildren(e),this.activeIndex=this.normalizeActiveIndex(this.activeIndex),this.endActiveIndex=this.normalizeActiveIndex(this.endActiveIndex),this.renderedActiveIndex=-2,this.renderedEndActiveIndex=-2,this.renderedTitle="",this.renderedPercent=-1,this.dotsDirty=!0,this.interactionDirty=!0}updateHeadingRatios(t){if(this.destroyed)return;let e=!1;this.headings.forEach((n,r)=>{let a=t[r];if(a===void 0)return;let s=y(f(a,n.ratio),0,1);M(s,n.ratio)||(n.ratio=s,e=!0)}),e&&(this.dotsDirty=!0)}setGeometry(t){if(this.destroyed)return;let e=j(t);ut(e,this.geometry)||(this.geometry=e,this.refreshPositionTargets(),this.clampSpringPositions(),this.amplitude.target=this.targetAmplitude(),this.geometryDirty=!0,this.dotsDirty=!0)}setTargets(t,e,n,r=null){if(this.destroyed)return;let a=y(f(t,this.progressTarget),0,1);M(a,this.progressTarget,1e-5)||(this.progressTarget=a,this.refreshPositionTargets());let s=this.normalizeActiveIndex(e),o=this.normalizeActiveIndex(n);(s!==this.activeIndex||o!==this.endActiveIndex)&&(this.activeIndex=s,this.endActiveIndex=o,this.interactionDirty=!0),this.speedTarget=!this.reducedMotion&&r!==null?y(Math.abs(f(r,0)),0,ct):0}setReducedMotion(t){this.destroyed||t===this.reducedMotion||(this.reducedMotion=t,t?this.snapToTargets():(this.lastTimestamp=null,this.frameInitialized=!0))}setInteractive(t){this.destroyed||t===this.interactive||(this.interactive=t,this.root.inert=!t,t||(this.speedTarget=0,this.amplitude.target=0),this.interactionDirty=!0)}setHovered(t){this.destroyed||(this.hoverSpring.target=t?1:0)}advance(t){if(this.destroyed)return!1;let e=f(t,this.lastTimestamp??0),n=this.lastTimestamp===null?0:y((e-this.lastTimestamp)/1e3,0,it);this.lastTimestamp=e,!this.frameInitialized||this.snapRequested||this.reducedMotion?(this.applySnap(),n=0):n>0&&this.stepAnimation(n);let r=!this.reducedMotion&&(this.interactive||!this.animationIsSettled());return r||(this.speedTarget=0,this.smoothedSpeed=0,this.amplitude.target=0,w(this.markerY),w(this.amplitude)),this.writeDOM(e),r}snapToTargets(){this.destroyed||(this.speedTarget=0,this.smoothedSpeed=0,this.amplitude.target=0,this.snapRequested=!0,this.lastTimestamp=null)}resumeAfterVisibility(){this.destroyed||this.snapToTargets()}destroy(){this.destroyed||(this.destroyed=!0,this.dotsRoot.replaceChildren(),this.dotButtons=[],this.headings=[],this.basePath.setAttribute("d","M 0 0"),this.accentPath.setAttribute("d","M 0 0"),this.reflections.remove(),this.label.style.left="",this.label.style.top="",this.label.style.transform="",this.label.style.maxWidth="",this.currentLink.setAttribute("href","#"),this.currentLink.removeAttribute("aria-current"),this.currentLink.tabIndex=-1,this.titleSlots.forEach(t=>{t.textContent="",t.classList.remove("is-active","is-leaving"),t.setAttribute("aria-hidden","true")}),this.percent.textContent="0%",this.root.inert=!0,this.root.dataset.interactive="false",this.root.style.removeProperty("--reading-toc-rail-direction"),this.root.style.removeProperty("--reading-toc-rail-overflow"),this.lastTimestamp=null,this.speedTarget=0,this.smoothedSpeed=0)}refreshPositionTargets(){let t=this.mapRatioToY(this.progressTarget);this.markerY.target=t}mapRatioToY(t){return this.geometry.height*y(t,0,1)}normalizeActiveIndex(t){return this.headings.length===0||!Number.isFinite(t)?-1:Math.round(y(t,0,this.headings.length-1))}targetAmplitude(){return this.reducedMotion||!this.interactive?0:Math.min(this.geometry.maxExtraAmplitude,ot*Math.abs(this.smoothedSpeed))}clampSpringPositions(){this.markerY.target=y(this.markerY.target,0,this.geometry.height);let t=y(this.markerY.current,0,this.geometry.height);M(t,this.markerY.current)||(this.markerY.current=t,this.markerY.velocity=0)}applySnap(){this.refreshPositionTargets(),this.speedTarget=0,this.smoothedSpeed=0,this.amplitude.target=0,w(this.markerY),w(this.amplitude),this.frameInitialized=!0,this.snapRequested=!1}stepAnimation(t){let e=Math.min(1,1.4*(1-Math.exp(-t/at)));this.markerY.current+=(this.markerY.target-this.markerY.current)*e,Math.abs(this.markerY.target-this.markerY.current)<=q&&(this.markerY.current=this.markerY.target);let n=Math.min(1,t/st);this.smoothedSpeed+=(this.speedTarget-this.smoothedSpeed)*n,this.speedTarget=0,Math.abs(this.smoothedSpeed)<=Y&&this.speedTarget===0&&(this.smoothedSpeed=0),this.amplitude.target=this.targetAmplitude();let r=Math.max(1,Math.ceil(t/nt)),a=t/r;for(let s=0;s{let m=this.headings[d];m&&(p.style.left=`${u(g)}px`,p.style.top=`${u(this.mapRatioToY(m.ratio))}px`)}),this.dotsDirty=!1}let e=y(f(this.markerY.current,this.markerY.target),0,this.geometry.height),n=Math.max(0,Math.min(1,this.hoverSpring.current)),r=this.amplitude.current,a=this.reducedMotion?0:dt*Math.sin(t/ht*Math.PI*2),s=Math.max(0,this.geometry.idleAmplitude+a+r),o=Math.max(1,this.geometry.bulgeHalfHeight+lt*r);this.root.style.setProperty("--hover-opacity",`${1-Math.pow(n,2)}`),this.root.style.pointerEvents=n>.5?"none":"auto";let l=pt(this.geometry,e,s,o);this.root.style.setProperty("--reading-toc-rail-overflow",`${u(o+2)}px`),this.basePath.setAttribute("d",l.basePath),this.accentPath.setAttribute("d",l.accentPath),this.baseTop.setAttribute("d",l.basePath),this.baseTop.setAttribute("transform","scale(1, -1)"),this.accentTop.setAttribute("d",l.accentPath),this.accentTop.setAttribute("transform","scale(1, -1)");let c=`scale(1, -1) translate(0, -${u(2*this.geometry.height)})`;this.baseBottom.setAttribute("d",l.basePath),this.baseBottom.setAttribute("transform",c),this.accentBottom.setAttribute("d",l.accentPath),this.accentBottom.setAttribute("transform",c),this.dotButtons.forEach((g,p)=>{let d=this.headings[p];if(!d)return;let m=this.mapRatioToY(d.ratio),v=gt(m,e,l.effectiveHalfHeight,l.effectiveAmplitude,this.geometry.direction);g.style.transform=`translate3d(calc(-50% + ${u(v)}px), -50%, 0)`});let h=l.peakX+this.geometry.direction*this.geometry.labelGap,b=this.geometry.direction>0?this.geometry.width-h:h;this.label.style.maxWidth=`min(var(--reading-toc-rail-title-max-width), ${u(Math.max(0,b))}px)`,this.label.style.left="0",this.label.style.top=`clamp(var(--reading-toc-rail-label-edge-inset), ${u(e)}px, calc(100% - var(--reading-toc-rail-label-edge-inset)))`,this.label.style.transform=[`translate3d(${u(h)}px, 0, 0)`,this.geometry.direction>0?"translate(0, -50%)":"translate(-100%, -50%)"].join(" "),this.writeLabelContent(),this.writeInteractionState()}writeLabelContent(){let t=Math.round(y(this.progressTarget,0,1)*100),e=this.headings[this.activeIndex];if(t!==this.renderedPercent&&(this.percent.textContent=`${t}%`,e&&this.currentLink.setAttribute("aria-label",`${e.ariaLabel}, ${t}%`),this.renderedPercent=t),!e){this.renderedActiveIndex!==-1&&(this.titleSlots.forEach(n=>{n.classList.remove("is-active","is-leaving"),n.setAttribute("aria-hidden","true")}),this.currentLink.setAttribute("href","#"),this.currentLink.removeAttribute("aria-current"),this.renderedActiveIndex=-1,this.renderedTitle="");return}if(this.activeIndex!==this.renderedActiveIndex){if(this.currentLink.setAttribute("href",`#${encodeURIComponent(e.id)}`),this.currentLink.setAttribute("aria-label",`${e.ariaLabel}, ${t}%`),this.currentLink.setAttribute("aria-current","location"),e.text!==this.renderedTitle){if(this.renderedTitle===""){let n=this.titleSlots[this.visibleTitleSlot];n.textContent=e.text,n.classList.remove("is-leaving"),n.classList.add("is-active"),n.removeAttribute("aria-hidden")}else{let n=this.titleSlots[this.visibleTitleSlot],r=this.visibleTitleSlot===0?1:0,a=this.titleSlots[r];a.textContent=e.text,a.classList.remove("is-leaving"),a.classList.add("is-active"),a.removeAttribute("aria-hidden"),n.classList.remove("is-active"),n.classList.add("is-leaving"),n.setAttribute("aria-hidden","true"),this.visibleTitleSlot=r}this.renderedTitle=e.text}this.renderedActiveIndex=this.activeIndex,this.renderedEndActiveIndex=this.endActiveIndex}}writeInteractionState(){!this.interactionDirty&&this.renderedActiveIndex===this.activeIndex&&this.renderedEndActiveIndex===this.endActiveIndex||(this.dotButtons.forEach((t,e)=>{let n=e>=this.activeIndex&&e<=this.endActiveIndex;t.classList.toggle("is-active",n)}),this.currentLink.tabIndex=this.interactive&&this.activeIndex>=0?0:-1,this.root.dataset.interactive=this.interactive?"true":"false",this.interactionDirty=!1)}};var bt="(min-width: 1200px)",ft="(prefers-reduced-motion: reduce)",yt=96,Tt=96,Mt=2,Et=240,St=320,Lt=160,K=8,Rt=5e3,J=1;function $(i,t,e){return Math.min(e,Math.max(t,i))}function Z(i,t){return Number.isFinite(i)?i:t}function L(i,t,e){let n=Number.parseFloat(i.getPropertyValue(t));return Z(n,e)}function _(i){let t=0,e=i;for(;e;)t+=e.offsetTop,e=e.offsetParent;return t}function Ht(i,t){let e=0,n=i.length;for(;e{if(this.destroyed||document.hidden||this.metrics&&!this.metrics.tocVisible&&!this.metrics.railEligible)return;let t=performance.now(),e=window.scrollY,n=t-this.lastScrollTime,r=0;n>0&&n<180&&(r=Math.abs(e-this.lastScrollY)/n*1e3),this.pendingScrollSpeed=Math.max(this.pendingScrollSpeed||0,$(Z(r,0),0,Rt)),this.latestScrollY=e,this.lastScrollY=e,this.lastScrollTime=t,this.readingStateDirty=!0,this.ensureFrame()};this.handleResize=()=>{this.latestScrollY=window.scrollY,this.lastScrollY=window.scrollY,this.lastScrollTime=performance.now(),this.pendingScrollSpeed=0,this.requestMeasure(!0)};this.handleTocListScroll=()=>{this.indicatorDirty=!0,this.readingStateDirty=!0,this.ensureFrame()};this.handleStageMouseEnter=()=>{this.setStageHovered(!0)};this.handleStageMouseLeave=()=>{this.setStageHovered(!1)};this.handleContentLoad=()=>{this.requestMeasure()};this.handleFontLoad=()=>{this.requestMeasure(!0)};this.handleRailMediaChange=()=>{this.requestMeasure(!0)};this.handleMotionChange=()=>{let t=this.motionDisabled();t!==this.reducedMotion&&(this.reducedMotion=t,this.rail?.setReducedMotion(t),this.snapOnNextFrame=t,this.ensureFrame())};this.handleVisibilityChange=()=>{if(document.hidden){this.frameId&&(window.cancelAnimationFrame(this.frameId),this.frameId=0),this.pendingScrollSpeed=null;return}this.latestScrollY=window.scrollY,this.lastScrollY=window.scrollY,this.lastScrollTime=performance.now(),this.pendingScrollSpeed=0,this.readingStateDirty=!0,this.snapOnNextFrame=!0,this.requestMeasure(!0)};this.handleStageClick=t=>{let e=t.target;if(t.button!==0||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey)return;let n=e.closest("[data-reading-toc-rail-link]"),r=e.closest('.note-toc-panel a[href^="#"]');if(n)t.preventDefault(),this.jumpToHeading(this.activeIndex);else if(r){let a=r.hash.slice(1);try{a=decodeURIComponent(a)}catch{}let s=this.headings.findIndex(o=>o.id===a);s>=0&&(t.preventDefault(),this.jumpToHeading(s))}};this.runFrame=t=>{if(this.frameId=0,this.destroyed||document.hidden)return;let e=this.needsMeasure;e&&this.measure();let n=this.metrics;if(!n||this.headings.length===0)return;let r=!1;if(e||this.readingStateDirty){this.readingStateDirty=!1;let a=this.latestScrollY+n.activationLine,s=Ht(this.headings,a),o=this.readingModeFor(a,n),l=n.tocVisible?e?n.tocListScrollTop:this.tocList.scrollTop:0,c=this.latestScrollY,h=c+window.innerHeight,b=-1,g=-1;for(let d=0;d=c&&m.documentY<=h&&(b===-1&&(b=d),g=d)}let p=b!==-1?Math.max(s,g):s;if(n.railEligible&&this.rail){let d=$((a-n.contentTop)/n.readingTravel,0,1),m=this.pendingScrollSpeed;this.pendingScrollSpeed=null,this.rail.setTargets(d,s,p,m),this.snapOnNextFrame&&(this.rail.snapToTargets(),this.snapOnNextFrame=!1)}else this.pendingScrollSpeed=null,this.snapOnNextFrame=!1;this.updateActiveHeading(s,p,n.tocListTop,l,n.tocVisible),this.setReadingMode(o)}n.railEligible&&this.rail&&(r=this.rail.advance(t)),(r||this.needsMeasure||this.readingStateDirty)&&this.ensureFrame()};this.stage=t,this.toc=e,this.tocPanel=n,this.tocList=r,this.tocIndicator=xt(n),this.railRoot=a,this.note=s,this.noteHeader=o,this.postContent=l,this.tocWrapper=c,this.headings=h}init(){V(this.toc),this.reducedMotion=this.motionDisabled(),this.bindPageListeners(),this.setupHoverEvents(),this.observeLayout(),this.waitForFonts(),this.requestMeasure(!0)}setupHoverEvents(){}requestMeasure(t=!1){this.destroyed||(this.needsMeasure=!0,this.readingStateDirty=!0,this.snapOnNextFrame||(this.snapOnNextFrame=t),this.ensureFrame())}destroy(){this.destroyed||(this.destroyed=!0,this.generation+=1,this.abortController.abort(),this.resizeObserver?.disconnect(),this.resizeObserver=null,this.railMediaQuery.removeEventListener("change",this.handleRailMediaChange),this.motionMediaQuery.removeEventListener("change",this.handleMotionChange),this.frameId&&(window.cancelAnimationFrame(this.frameId),this.frameId=0),this.disableRail(!0),this.rail?.destroy(),this.rail=null,this.headings=[],this.metrics=null)}bindPageListeners(){let t=this.abortController.signal;window.addEventListener("scroll",this.handleScroll,{passive:!0,signal:t}),window.addEventListener("resize",this.handleResize,{passive:!0,signal:t}),this.tocList.addEventListener("scroll",this.handleTocListScroll,{passive:!0,signal:t}),this.stage.addEventListener("click",this.handleStageClick,{signal:t}),this.stage.addEventListener("mouseenter",this.handleStageMouseEnter,{signal:t}),this.stage.addEventListener("mouseleave",this.handleStageMouseLeave,{signal:t}),this.postContent.addEventListener("load",this.handleContentLoad,{capture:!0,signal:t}),document.addEventListener("visibilitychange",this.handleVisibilityChange,{signal:t}),document.addEventListener("daybook:settings-change",this.handleMotionChange,{signal:t}),document.fonts?.addEventListener("loadingdone",this.handleFontLoad,{signal:t}),this.railMediaQuery.addEventListener("change",this.handleRailMediaChange),this.motionMediaQuery.addEventListener("change",this.handleMotionChange)}observeLayout(){"ResizeObserver"in window&&(this.resizeObserver=new ResizeObserver(()=>{this.requestMeasure()}),this.resizeObserver.observe(this.noteHeader),this.resizeObserver.observe(this.postContent))}waitForFonts(){if(!document.fonts)return;let t=this.generation;document.fonts.ready.then(()=>{!this.destroyed&&t===this.generation&&this.requestMeasure(!0)}).catch(()=>{})}setStageHovered(t){this.isStageHovered!==t&&(this.isStageHovered=t,this.stage.classList.toggle("is-hovered",t),this.rail?.setHovered(t),this.syncReadingPresentation(),this.ensureFrame())}jumpToHeading(t){let e=this.headings[t],n=this.metrics;if(!e||!n)return;let r=Math.max(0,e.documentY-n.activationLine);window.scrollTo({top:r,behavior:this.reducedMotion?"instant":"smooth"});let a=new URL(window.location.href);if(a.hash=encodeURIComponent(e.id),window.daybookReplaceURL)window.daybookReplaceURL(a.href);else{let s=history.state,o=s&&typeof s=="object"?{...s,url:a.href}:s;history.replaceState(o,"",`${a.pathname}${a.search}${a.hash}`)}}motionDisabled(){return document.documentElement.getAttribute("data-reduced-motion")==="true"||this.motionMediaQuery.matches}ensureFrame(){this.destroyed||this.frameId||(this.frameId=window.requestAnimationFrame(this.runFrame))}measure(){this.needsMeasure=!1;let t=window.getComputedStyle(this.railRoot),e=window.getComputedStyle(this.stage),n=window.getComputedStyle(this.tocWrapper),r=this.railRoot.getBoundingClientRect(),a=this.tocWrapper.getBoundingClientRect(),s=this.note.getBoundingClientRect(),o=_(this.postContent),l=this.postContent.offsetHeight,c=_(this.noteHeader)+this.noteHeader.offsetHeight,h=L(e,"--reading-toc-activation-line",yt),b=L(e,"--reading-toc-bottom-inset",Tt),g=window.innerHeight-h-b,p=l-g,d=L(e,"--reading-toc-rail-direction",1)<0?-1:1,m=L(e,"--reading-toc-rail-eligible",0)===1,v=a.left+J>=s.right&&a.right<=window.innerWidth+J,E=g>0&&r.height>=St,S=this.railMediaQuery.matches&&m&&r.width>=Lt&&v&&E&&this.headings.length>=Mt&&p>=Et,A=n.display!=="none"&&a.width>0&&a.height>0;this.headings.forEach(T=>{T.documentY=_(T.element),T.railRatio=l>0?$((T.documentY-o)/l,0,1):0,T.tocTop=T.item.offsetTop,T.tocHeight=Math.max(1,T.item.offsetHeight)});let H=S?{width:r.width,height:r.height,direction:d,lineInset:L(t,"--reading-toc-rail-line-inset",6),idleAmplitude:L(t,"--reading-toc-rail-idle-amplitude",10.4),maxExtraAmplitude:L(t,"--reading-toc-rail-max-extra-amplitude",14),bulgeHalfHeight:L(t,"--reading-toc-rail-bulge-half-height",56),labelGap:L(t,"--reading-toc-rail-label-gap",12)}:null;this.metrics={activationLine:h,contentHeight:l,contentTop:o,headerBottom:c,railEligible:S,railGeometry:H,readingTravel:p,tocListScrollTop:this.tocList.scrollTop,tocListTop:this.tocList.offsetTop,tocVisible:A},this.indicatorDirty=!0,S&&H?this.enableRail(H):this.disableRail(!0)}enableRail(t){this.rail||(this.rail=new D(this.railRoot),this.rail.setReducedMotion(this.reducedMotion),this.railHeadingsReady=!1),this.stage.dataset.railDirection=String(t.direction),this.stage.classList.add("has-reading-rail"),this.rail.setGeometry(t);let n=(this.postContent.lang||document.documentElement.lang).toLowerCase().startsWith("en");if(this.railHeadingsReady)this.rail.updateHeadingRatios(this.headings.map(r=>r.railRatio));else{let r=this.headings.map(a=>({id:a.id,text:a.text,level:a.level,ratio:a.railRatio,ariaLabel:n?`Jump to section: ${a.text}`:`\u8DF3\u8F6C\u5230\u7AE0\u8282\uFF1A${a.text}`}));this.rail.setHeadings(r),this.railHeadingsReady=!0}this.railRoot.setAttribute("aria-label",n?"Reading outline":"\u9605\u8BFB\u76EE\u5F55"),this.syncReadingPresentation()}disableRail(t){this.stage.classList.remove("has-reading-rail","is-reading"),this.stage.removeAttribute("data-rail-direction"),this.isReadingMode=!1,this.toc.removeAttribute("aria-hidden"),this.toc.inert=!1,this.railRoot.setAttribute("aria-hidden","true"),this.rail?.setInteractive(!1),t&&this.rail&&(this.rail.destroy(),this.rail=null,this.railHeadingsReady=!1)}readingModeFor(t,e){return e.railEligible?this.isReadingMode?t>=e.headerBottom-K:t>=e.headerBottom+K:!1}setReadingMode(t){t!==this.isReadingMode&&(this.isReadingMode=t,this.stage.classList.toggle("is-reading",t),this.setStageHovered(this.stage.matches(":hover"))),this.syncReadingPresentation()}syncReadingPresentation(){let t=this.isReadingMode&&!this.isStageHovered;t?(this.toc.setAttribute("aria-hidden","true"),this.toc.inert=!0):(this.toc.removeAttribute("aria-hidden"),this.toc.inert=!1),this.railRoot.setAttribute("aria-hidden",t?"false":"true"),this.rail?.setInteractive(t)}updateActiveHeading(t,e,n,r,a){if(!this.headings[t])return;let o=!1;if((t!==this.activeIndex||e!==this.endActiveIndex)&&(this.headings.forEach((d,m)=>{let v=m===t;d.link.classList.toggle("is-active",v),v?d.link.setAttribute("aria-current","location"):d.link.removeAttribute("aria-current")}),this.activeIndex=t,this.endActiveIndex=e,o=!0),!a){this.indicatorDirty=!0;return}let l=t,c=e,h=this.headings[l],b=this.headings[c];if(!h||!b)return;let g=n+h.tocTop-r,p=Math.max(1,b.tocTop+b.tocHeight-h.tocTop);!o&&!this.indicatorDirty&&g===this.indicatorTop&&p===this.indicatorHeight||(this.indicatorDirty=!1,this.indicatorTop=g,this.indicatorHeight=p,this.tocIndicator.style.setProperty("--indicator-opacity","1"),this.tocIndicator.style.setProperty("--indicator-y",`${g}px`),this.tocIndicator.style.setProperty("--indicator-scale",`${p}`))}},R=null;function It(i,t){let e=Array.from(t.querySelectorAll('a[href^="#"]')),n=new Map;return e.forEach(r=>{let a=At(r);a&&n.set(a,r)}),Array.from(i.querySelectorAll("h1, h2, h3, h4, h5, h6")).map(r=>{let a=n.get(r.id),s=a?.closest("li");return!r.id||!a||!s?null:{id:r.id,text:(a.textContent||"").trim(),level:Number.parseInt(r.tagName.slice(1),10)||2,element:r,link:a,item:s,documentY:0,railRatio:0,tocTop:0,tocHeight:1}}).filter(r=>r!==null)}function k(){R?.destroy(),R=null,document.querySelectorAll(".note-toc").forEach(V);let i=document.querySelector("[data-note-toc-stage]"),t=i?.querySelector("[data-note-toc]"),e=t?.querySelector(".note-toc-panel"),n=e?.querySelector("ol"),r=i?.querySelector("[data-reading-toc-rail]"),a=document.querySelector(".note"),s=a?.querySelector(".note-header"),o=a?.querySelector(".post-content"),l=i?.closest(".note-toc-wrapper");if(!i||!t||!e||!n||!r||!a||!s||!o||!l)return;let c=It(o,e);c.length!==0&&(R=new F(i,t,e,n,r,a,s,o,l,c),R.init())}window.daybookSyncNoteTocs=k;document.addEventListener("daybook:before-swap",()=>{R?.destroy(),R=null});document.addEventListener("daybook:reader-mode-change",()=>{R?.requestMeasure(!0)});document.addEventListener("daybook:page-load",k);document.addEventListener("daybook:article-content-swapped",k);document.addEventListener("daybook:transition-finished",()=>{R?.requestMeasure(!0)});document.addEventListener("click",i=>{let e=i.target.closest(".note-toc-toggle");if(!e)return;let n=e.closest(".note-toc");n&&(n.classList.toggle("is-open"),V(n),R?.requestMeasure())});k();})(); diff --git a/internal/embedded/static/js/ui-language.js b/internal/embedded/static/js/ui-language.js new file mode 100644 index 00000000..9f3fb10a --- /dev/null +++ b/internal/embedded/static/js/ui-language.js @@ -0,0 +1 @@ +"use strict";(()=>{(()=>{let s="daybook-ui-language";function l(e){if(!e)return null;let a=e.replace("-","_").toLowerCase();return a==="en_us"?"en_US":a==="zh_cn"?"zh_CN":null}function h(){try{return l(sessionStorage.getItem(s))}catch{return null}}function f(e){try{sessionStorage.setItem(s,e)}catch{}}function i(){return document.body.dataset.pageKind==="note"||document.body.dataset.pageKind==="memo"}function d(e){let a=document.documentElement.lang,g=document.getElementById("daybook-ui-translations"),o={};try{o=JSON.parse(g?.textContent||"{}")[e]||{}}catch{}document.documentElement.lang=e.replace("_","-"),document.documentElement.dataset.uiLanguage=e;let c={"data-ui-aria":"aria-label","data-ui-tooltip":"data-tooltip","data-ui-placeholder":"placeholder"};document.querySelectorAll("[data-ui-text]").forEach(n=>{let t=o[n.dataset.uiText||""];t&&(n.textContent=t)});for(let[n,t]of Object.entries(c))document.querySelectorAll(`[${n}]`).forEach(r=>{let m=o[r.getAttribute(n)||""];m&&r.setAttribute(t,m)});let L=e==="en_US"?"/en_US":"";if(document.querySelectorAll(".side-nav a:not(.lang-toggle), .site-nav a:not(.lang-toggle), .mobile-drawer-nav a:not(.lang-toggle), .side-avatar-link, .note-back-link, .memo-detail-back, .tag-back-btn, .notes-tag-link, .note-tag-capsule").forEach(n=>{let t=new URL(n.href,location.href);if(t.origin!==location.origin)return;let r=t.pathname.replace(/^\/en_US(?=\/)/,"");n.href=L+r+t.search+t.hash}),i()){let n=e==="en_US"?"zh_CN":"en_US",t=new URL(location.href);t.searchParams.set("ui",n),document.querySelectorAll(".lang-toggle").forEach(r=>{r.href=t.pathname+t.search+t.hash})}f(e),window.daybookSyncThemeButtons?.(),document.dispatchEvent(new CustomEvent("daybook:lang-change",{detail:{lang:document.documentElement.lang,previousLang:a}}))}function u(){let e=l(new URL(location.href).searchParams.get("ui")),a=location.pathname.startsWith("/en_US/")?"en_US":"zh_CN";d(i()&&(e||h())||a)}document.addEventListener("click",e=>{if(!e.target?.closest(".lang-toggle")||!i()||e.button!==0||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey)return;e.preventDefault(),e.stopImmediatePropagation();let o=l(document.documentElement.lang)==="en_US"?"zh_CN":"en_US",c=new URL(location.href);c.searchParams.set("ui",o),window.daybookReplaceURL?window.daybookReplaceURL(c.href):history.replaceState(history.state,"",c.href),d(o)},!0),document.addEventListener("daybook:page-load",u),document.readyState==="loading"?document.addEventListener("DOMContentLoaded",u,{once:!0}):u()})();})(); diff --git a/internal/embedded/static/js/vendor/d3.min.js b/internal/embedded/static/js/vendor/d3.min.js new file mode 100644 index 00000000..33bb8802 --- /dev/null +++ b/internal/embedded/static/js/vendor/d3.min.js @@ -0,0 +1,2 @@ +// https://d3js.org v7.9.0 Copyright 2010-2023 Mike Bostock +!function(t,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((t="undefined"!=typeof globalThis?globalThis:t||self).d3=t.d3||{})}(this,(function(t){"use strict";function n(t,n){return null==t||null==n?NaN:tn?1:t>=n?0:NaN}function e(t,n){return null==t||null==n?NaN:nt?1:n>=t?0:NaN}function r(t){let r,o,a;function u(t,n,e=0,i=t.length){if(e>>1;o(t[r],n)<0?e=r+1:i=r}while(en(t(e),r),a=(n,e)=>t(n)-e):(r=t===n||t===e?t:i,o=t,a=t),{left:u,center:function(t,n,e=0,r=t.length){const i=u(t,n,e,r-1);return i>e&&a(t[i-1],n)>-a(t[i],n)?i-1:i},right:function(t,n,e=0,i=t.length){if(e>>1;o(t[r],n)<=0?e=r+1:i=r}while(e{n(t,e,(r<<=2)+0,(i<<=2)+0,o<<=2),n(t,e,r+1,i+1,o),n(t,e,r+2,i+2,o),n(t,e,r+3,i+3,o)}}));function d(t){return function(n,e,r=e){if(!((e=+e)>=0))throw new RangeError("invalid rx");if(!((r=+r)>=0))throw new RangeError("invalid ry");let{data:i,width:o,height:a}=n;if(!((o=Math.floor(o))>=0))throw new RangeError("invalid width");if(!((a=Math.floor(void 0!==a?a:i.length/o))>=0))throw new RangeError("invalid height");if(!o||!a||!e&&!r)return n;const u=e&&t(e),c=r&&t(r),f=i.slice();return u&&c?(p(u,f,i,o,a),p(u,i,f,o,a),p(u,f,i,o,a),g(c,i,f,o,a),g(c,f,i,o,a),g(c,i,f,o,a)):u?(p(u,i,f,o,a),p(u,f,i,o,a),p(u,i,f,o,a)):c&&(g(c,i,f,o,a),g(c,f,i,o,a),g(c,i,f,o,a)),n}}function p(t,n,e,r,i){for(let o=0,a=r*i;o{if(!((o-=a)>=i))return;let u=t*r[i];const c=a*t;for(let t=i,n=i+c;t{if(!((a-=u)>=o))return;let c=n*i[o];const f=u*n,s=f+u;for(let t=o,n=o+f;t=n&&++e;else{let r=-1;for(let i of t)null!=(i=n(i,++r,t))&&(i=+i)>=i&&++e}return e}function _(t){return 0|t.length}function b(t){return!(t>0)}function m(t){return"object"!=typeof t||"length"in t?t:Array.from(t)}function x(t,n){let e,r=0,i=0,o=0;if(void 0===n)for(let n of t)null!=n&&(n=+n)>=n&&(e=n-i,i+=e/++r,o+=e*(n-i));else{let a=-1;for(let u of t)null!=(u=n(u,++a,t))&&(u=+u)>=u&&(e=u-i,i+=e/++r,o+=e*(u-i))}if(r>1)return o/(r-1)}function w(t,n){const e=x(t,n);return e?Math.sqrt(e):e}function M(t,n){let e,r;if(void 0===n)for(const n of t)null!=n&&(void 0===e?n>=n&&(e=r=n):(e>n&&(e=n),r=o&&(e=r=o):(e>o&&(e=o),r0){for(o=t[--i];i>0&&(n=o,e=t[--i],o=n+e,r=e-(o-n),!r););i>0&&(r<0&&t[i-1]<0||r>0&&t[i-1]>0)&&(e=2*r,n=o+e,e==n-o&&(o=n))}return o}}class InternMap extends Map{constructor(t,n=N){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:n}}),null!=t)for(const[n,e]of t)this.set(n,e)}get(t){return super.get(A(this,t))}has(t){return super.has(A(this,t))}set(t,n){return super.set(S(this,t),n)}delete(t){return super.delete(E(this,t))}}class InternSet extends Set{constructor(t,n=N){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:n}}),null!=t)for(const n of t)this.add(n)}has(t){return super.has(A(this,t))}add(t){return super.add(S(this,t))}delete(t){return super.delete(E(this,t))}}function A({_intern:t,_key:n},e){const r=n(e);return t.has(r)?t.get(r):e}function S({_intern:t,_key:n},e){const r=n(e);return t.has(r)?t.get(r):(t.set(r,e),e)}function E({_intern:t,_key:n},e){const r=n(e);return t.has(r)&&(e=t.get(r),t.delete(r)),e}function N(t){return null!==t&&"object"==typeof t?t.valueOf():t}function k(t){return t}function C(t,...n){return F(t,k,k,n)}function P(t,...n){return F(t,Array.from,k,n)}function z(t,n){for(let e=1,r=n.length;et.pop().map((([n,e])=>[...t,n,e]))));return t}function $(t,n,...e){return F(t,k,n,e)}function D(t,n,...e){return F(t,Array.from,n,e)}function R(t){if(1!==t.length)throw new Error("duplicate key");return t[0]}function F(t,n,e,r){return function t(i,o){if(o>=r.length)return e(i);const a=new InternMap,u=r[o++];let c=-1;for(const t of i){const n=u(t,++c,i),e=a.get(n);e?e.push(t):a.set(n,[t])}for(const[n,e]of a)a.set(n,t(e,o));return n(a)}(t,0)}function q(t,n){return Array.from(n,(n=>t[n]))}function U(t,...n){if("function"!=typeof t[Symbol.iterator])throw new TypeError("values is not iterable");t=Array.from(t);let[e]=n;if(e&&2!==e.length||n.length>1){const r=Uint32Array.from(t,((t,n)=>n));return n.length>1?(n=n.map((n=>t.map(n))),r.sort(((t,e)=>{for(const r of n){const n=O(r[t],r[e]);if(n)return n}}))):(e=t.map(e),r.sort(((t,n)=>O(e[t],e[n])))),q(t,r)}return t.sort(I(e))}function I(t=n){if(t===n)return O;if("function"!=typeof t)throw new TypeError("compare is not a function");return(n,e)=>{const r=t(n,e);return r||0===r?r:(0===t(e,e))-(0===t(n,n))}}function O(t,n){return(null==t||!(t>=t))-(null==n||!(n>=n))||(tn?1:0)}var B=Array.prototype.slice;function Y(t){return()=>t}const L=Math.sqrt(50),j=Math.sqrt(10),H=Math.sqrt(2);function X(t,n,e){const r=(n-t)/Math.max(0,e),i=Math.floor(Math.log10(r)),o=r/Math.pow(10,i),a=o>=L?10:o>=j?5:o>=H?2:1;let u,c,f;return i<0?(f=Math.pow(10,-i)/a,u=Math.round(t*f),c=Math.round(n*f),u/fn&&--c,f=-f):(f=Math.pow(10,i)*a,u=Math.round(t/f),c=Math.round(n/f),u*fn&&--c),c0))return[];if((t=+t)===(n=+n))return[t];const r=n=i))return[];const u=o-i+1,c=new Array(u);if(r)if(a<0)for(let t=0;t0?(t=Math.floor(t/i)*i,n=Math.ceil(n/i)*i):i<0&&(t=Math.ceil(t*i)/i,n=Math.floor(n*i)/i),r=i}}function K(t){return Math.max(1,Math.ceil(Math.log(v(t))/Math.LN2)+1)}function Q(){var t=k,n=M,e=K;function r(r){Array.isArray(r)||(r=Array.from(r));var i,o,a,u=r.length,c=new Array(u);for(i=0;i=h)if(t>=h&&n===M){const t=V(l,h,e);isFinite(t)&&(t>0?h=(Math.floor(h/t)+1)*t:t<0&&(h=(Math.ceil(h*-t)+1)/-t))}else d.pop()}for(var p=d.length,g=0,y=p;d[g]<=l;)++g;for(;d[y-1]>h;)--y;(g||y0?d[i-1]:l,v.x1=i0)for(i=0;i=n)&&(e=n);else{let r=-1;for(let i of t)null!=(i=n(i,++r,t))&&(e=i)&&(e=i)}return e}function tt(t,n){let e,r=-1,i=-1;if(void 0===n)for(const n of t)++i,null!=n&&(e=n)&&(e=n,r=i);else for(let o of t)null!=(o=n(o,++i,t))&&(e=o)&&(e=o,r=i);return r}function nt(t,n){let e;if(void 0===n)for(const n of t)null!=n&&(e>n||void 0===e&&n>=n)&&(e=n);else{let r=-1;for(let i of t)null!=(i=n(i,++r,t))&&(e>i||void 0===e&&i>=i)&&(e=i)}return e}function et(t,n){let e,r=-1,i=-1;if(void 0===n)for(const n of t)++i,null!=n&&(e>n||void 0===e&&n>=n)&&(e=n,r=i);else for(let o of t)null!=(o=n(o,++i,t))&&(e>o||void 0===e&&o>=o)&&(e=o,r=i);return r}function rt(t,n,e=0,r=1/0,i){if(n=Math.floor(n),e=Math.floor(Math.max(0,e)),r=Math.floor(Math.min(t.length-1,r)),!(e<=n&&n<=r))return t;for(i=void 0===i?O:I(i);r>e;){if(r-e>600){const o=r-e+1,a=n-e+1,u=Math.log(o),c=.5*Math.exp(2*u/3),f=.5*Math.sqrt(u*c*(o-c)/o)*(a-o/2<0?-1:1);rt(t,n,Math.max(e,Math.floor(n-a*c/o+f)),Math.min(r,Math.floor(n+(o-a)*c/o+f)),i)}const o=t[n];let a=e,u=r;for(it(t,e,n),i(t[r],o)>0&&it(t,e,r);a0;)--u}0===i(t[e],o)?it(t,e,u):(++u,it(t,u,r)),u<=n&&(e=u+1),n<=u&&(r=u-1)}return t}function it(t,n,e){const r=t[n];t[n]=t[e],t[e]=r}function ot(t,e=n){let r,i=!1;if(1===e.length){let o;for(const a of t){const t=e(a);(i?n(t,o)>0:0===n(t,t))&&(r=a,o=t,i=!0)}}else for(const n of t)(i?e(n,r)>0:0===e(n,n))&&(r=n,i=!0);return r}function at(t,n,e){if(t=Float64Array.from(function*(t,n){if(void 0===n)for(let n of t)null!=n&&(n=+n)>=n&&(yield n);else{let e=-1;for(let r of t)null!=(r=n(r,++e,t))&&(r=+r)>=r&&(yield r)}}(t,e)),(r=t.length)&&!isNaN(n=+n)){if(n<=0||r<2)return nt(t);if(n>=1)return J(t);var r,i=(r-1)*n,o=Math.floor(i),a=J(rt(t,o).subarray(0,o+1));return a+(nt(t.subarray(o+1))-a)*(i-o)}}function ut(t,n,e=o){if((r=t.length)&&!isNaN(n=+n)){if(n<=0||r<2)return+e(t[0],0,t);if(n>=1)return+e(t[r-1],r-1,t);var r,i=(r-1)*n,a=Math.floor(i),u=+e(t[a],a,t);return u+(+e(t[a+1],a+1,t)-u)*(i-a)}}function ct(t,n,e=o){if(!isNaN(n=+n)){if(r=Float64Array.from(t,((n,r)=>o(e(t[r],r,t)))),n<=0)return et(r);if(n>=1)return tt(r);var r,i=Uint32Array.from(t,((t,n)=>n)),a=r.length-1,u=Math.floor(a*n);return rt(i,u,0,a,((t,n)=>O(r[t],r[n]))),(u=ot(i.subarray(0,u+1),(t=>r[t])))>=0?u:-1}}function ft(t){return Array.from(function*(t){for(const n of t)yield*n}(t))}function st(t,n){return[t,n]}function lt(t,n,e){t=+t,n=+n,e=(i=arguments.length)<2?(n=t,t=0,1):i<3?1:+e;for(var r=-1,i=0|Math.max(0,Math.ceil((n-t)/e)),o=new Array(i);++r+t(n)}function kt(t,n){return n=Math.max(0,t.bandwidth()-2*n)/2,t.round()&&(n=Math.round(n)),e=>+t(e)+n}function Ct(){return!this.__axis}function Pt(t,n){var e=[],r=null,i=null,o=6,a=6,u=3,c="undefined"!=typeof window&&window.devicePixelRatio>1?0:.5,f=t===xt||t===Tt?-1:1,s=t===Tt||t===wt?"x":"y",l=t===xt||t===Mt?St:Et;function h(h){var d=null==r?n.ticks?n.ticks.apply(n,e):n.domain():r,p=null==i?n.tickFormat?n.tickFormat.apply(n,e):mt:i,g=Math.max(o,0)+u,y=n.range(),v=+y[0]+c,_=+y[y.length-1]+c,b=(n.bandwidth?kt:Nt)(n.copy(),c),m=h.selection?h.selection():h,x=m.selectAll(".domain").data([null]),w=m.selectAll(".tick").data(d,n).order(),M=w.exit(),T=w.enter().append("g").attr("class","tick"),A=w.select("line"),S=w.select("text");x=x.merge(x.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),w=w.merge(T),A=A.merge(T.append("line").attr("stroke","currentColor").attr(s+"2",f*o)),S=S.merge(T.append("text").attr("fill","currentColor").attr(s,f*g).attr("dy",t===xt?"0em":t===Mt?"0.71em":"0.32em")),h!==m&&(x=x.transition(h),w=w.transition(h),A=A.transition(h),S=S.transition(h),M=M.transition(h).attr("opacity",At).attr("transform",(function(t){return isFinite(t=b(t))?l(t+c):this.getAttribute("transform")})),T.attr("opacity",At).attr("transform",(function(t){var n=this.parentNode.__axis;return l((n&&isFinite(n=n(t))?n:b(t))+c)}))),M.remove(),x.attr("d",t===Tt||t===wt?a?"M"+f*a+","+v+"H"+c+"V"+_+"H"+f*a:"M"+c+","+v+"V"+_:a?"M"+v+","+f*a+"V"+c+"H"+_+"V"+f*a:"M"+v+","+c+"H"+_),w.attr("opacity",1).attr("transform",(function(t){return l(b(t)+c)})),A.attr(s+"2",f*o),S.attr(s,f*g).text(p),m.filter(Ct).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===wt?"start":t===Tt?"end":"middle"),m.each((function(){this.__axis=b}))}return h.scale=function(t){return arguments.length?(n=t,h):n},h.ticks=function(){return e=Array.from(arguments),h},h.tickArguments=function(t){return arguments.length?(e=null==t?[]:Array.from(t),h):e.slice()},h.tickValues=function(t){return arguments.length?(r=null==t?null:Array.from(t),h):r&&r.slice()},h.tickFormat=function(t){return arguments.length?(i=t,h):i},h.tickSize=function(t){return arguments.length?(o=a=+t,h):o},h.tickSizeInner=function(t){return arguments.length?(o=+t,h):o},h.tickSizeOuter=function(t){return arguments.length?(a=+t,h):a},h.tickPadding=function(t){return arguments.length?(u=+t,h):u},h.offset=function(t){return arguments.length?(c=+t,h):c},h}var zt={value:()=>{}};function $t(){for(var t,n=0,e=arguments.length,r={};n=0&&(n=t.slice(e+1),t=t.slice(0,e)),t&&!r.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:n}}))),a=-1,u=o.length;if(!(arguments.length<2)){if(null!=n&&"function"!=typeof n)throw new Error("invalid callback: "+n);for(;++a0)for(var e,r,i=new Array(e),o=0;o=0&&"xmlns"!==(n=t.slice(0,e))&&(t=t.slice(e+1)),Ut.hasOwnProperty(n)?{space:Ut[n],local:t}:t}function Ot(t){return function(){var n=this.ownerDocument,e=this.namespaceURI;return e===qt&&n.documentElement.namespaceURI===qt?n.createElement(t):n.createElementNS(e,t)}}function Bt(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function Yt(t){var n=It(t);return(n.local?Bt:Ot)(n)}function Lt(){}function jt(t){return null==t?Lt:function(){return this.querySelector(t)}}function Ht(t){return null==t?[]:Array.isArray(t)?t:Array.from(t)}function Xt(){return[]}function Gt(t){return null==t?Xt:function(){return this.querySelectorAll(t)}}function Vt(t){return function(){return this.matches(t)}}function Wt(t){return function(n){return n.matches(t)}}var Zt=Array.prototype.find;function Kt(){return this.firstElementChild}var Qt=Array.prototype.filter;function Jt(){return Array.from(this.children)}function tn(t){return new Array(t.length)}function nn(t,n){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=n}function en(t,n,e,r,i,o){for(var a,u=0,c=n.length,f=o.length;un?1:t>=n?0:NaN}function cn(t){return function(){this.removeAttribute(t)}}function fn(t){return function(){this.removeAttributeNS(t.space,t.local)}}function sn(t,n){return function(){this.setAttribute(t,n)}}function ln(t,n){return function(){this.setAttributeNS(t.space,t.local,n)}}function hn(t,n){return function(){var e=n.apply(this,arguments);null==e?this.removeAttribute(t):this.setAttribute(t,e)}}function dn(t,n){return function(){var e=n.apply(this,arguments);null==e?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,e)}}function pn(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}function gn(t){return function(){this.style.removeProperty(t)}}function yn(t,n,e){return function(){this.style.setProperty(t,n,e)}}function vn(t,n,e){return function(){var r=n.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,e)}}function _n(t,n){return t.style.getPropertyValue(n)||pn(t).getComputedStyle(t,null).getPropertyValue(n)}function bn(t){return function(){delete this[t]}}function mn(t,n){return function(){this[t]=n}}function xn(t,n){return function(){var e=n.apply(this,arguments);null==e?delete this[t]:this[t]=e}}function wn(t){return t.trim().split(/^|\s+/)}function Mn(t){return t.classList||new Tn(t)}function Tn(t){this._node=t,this._names=wn(t.getAttribute("class")||"")}function An(t,n){for(var e=Mn(t),r=-1,i=n.length;++r=0&&(this._names.splice(n,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};var Gn=[null];function Vn(t,n){this._groups=t,this._parents=n}function Wn(){return new Vn([[document.documentElement]],Gn)}function Zn(t){return"string"==typeof t?new Vn([[document.querySelector(t)]],[document.documentElement]):new Vn([[t]],Gn)}Vn.prototype=Wn.prototype={constructor:Vn,select:function(t){"function"!=typeof t&&(t=jt(t));for(var n=this._groups,e=n.length,r=new Array(e),i=0;i=m&&(m=b+1);!(_=y[m])&&++m=0;)(r=i[o])&&(a&&4^r.compareDocumentPosition(a)&&a.parentNode.insertBefore(r,a),a=r);return this},sort:function(t){function n(n,e){return n&&e?t(n.__data__,e.__data__):!n-!e}t||(t=un);for(var e=this._groups,r=e.length,i=new Array(r),o=0;o1?this.each((null==n?gn:"function"==typeof n?vn:yn)(t,n,null==e?"":e)):_n(this.node(),t)},property:function(t,n){return arguments.length>1?this.each((null==n?bn:"function"==typeof n?xn:mn)(t,n)):this.node()[t]},classed:function(t,n){var e=wn(t+"");if(arguments.length<2){for(var r=Mn(this.node()),i=-1,o=e.length;++i=0&&(n=t.slice(e+1),t=t.slice(0,e)),{type:t,name:n}}))}(t+""),a=o.length;if(!(arguments.length<2)){for(u=n?Ln:Yn,r=0;r()=>t;function fe(t,{sourceEvent:n,subject:e,target:r,identifier:i,active:o,x:a,y:u,dx:c,dy:f,dispatch:s}){Object.defineProperties(this,{type:{value:t,enumerable:!0,configurable:!0},sourceEvent:{value:n,enumerable:!0,configurable:!0},subject:{value:e,enumerable:!0,configurable:!0},target:{value:r,enumerable:!0,configurable:!0},identifier:{value:i,enumerable:!0,configurable:!0},active:{value:o,enumerable:!0,configurable:!0},x:{value:a,enumerable:!0,configurable:!0},y:{value:u,enumerable:!0,configurable:!0},dx:{value:c,enumerable:!0,configurable:!0},dy:{value:f,enumerable:!0,configurable:!0},_:{value:s}})}function se(t){return!t.ctrlKey&&!t.button}function le(){return this.parentNode}function he(t,n){return null==n?{x:t.x,y:t.y}:n}function de(){return navigator.maxTouchPoints||"ontouchstart"in this}function pe(t,n,e){t.prototype=n.prototype=e,e.constructor=t}function ge(t,n){var e=Object.create(t.prototype);for(var r in n)e[r]=n[r];return e}function ye(){}fe.prototype.on=function(){var t=this._.on.apply(this._,arguments);return t===this._?this:t};var ve=.7,_e=1/ve,be="\\s*([+-]?\\d+)\\s*",me="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",xe="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",we=/^#([0-9a-f]{3,8})$/,Me=new RegExp(`^rgb\\(${be},${be},${be}\\)$`),Te=new RegExp(`^rgb\\(${xe},${xe},${xe}\\)$`),Ae=new RegExp(`^rgba\\(${be},${be},${be},${me}\\)$`),Se=new RegExp(`^rgba\\(${xe},${xe},${xe},${me}\\)$`),Ee=new RegExp(`^hsl\\(${me},${xe},${xe}\\)$`),Ne=new RegExp(`^hsla\\(${me},${xe},${xe},${me}\\)$`),ke={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function Ce(){return this.rgb().formatHex()}function Pe(){return this.rgb().formatRgb()}function ze(t){var n,e;return t=(t+"").trim().toLowerCase(),(n=we.exec(t))?(e=n[1].length,n=parseInt(n[1],16),6===e?$e(n):3===e?new qe(n>>8&15|n>>4&240,n>>4&15|240&n,(15&n)<<4|15&n,1):8===e?De(n>>24&255,n>>16&255,n>>8&255,(255&n)/255):4===e?De(n>>12&15|n>>8&240,n>>8&15|n>>4&240,n>>4&15|240&n,((15&n)<<4|15&n)/255):null):(n=Me.exec(t))?new qe(n[1],n[2],n[3],1):(n=Te.exec(t))?new qe(255*n[1]/100,255*n[2]/100,255*n[3]/100,1):(n=Ae.exec(t))?De(n[1],n[2],n[3],n[4]):(n=Se.exec(t))?De(255*n[1]/100,255*n[2]/100,255*n[3]/100,n[4]):(n=Ee.exec(t))?Le(n[1],n[2]/100,n[3]/100,1):(n=Ne.exec(t))?Le(n[1],n[2]/100,n[3]/100,n[4]):ke.hasOwnProperty(t)?$e(ke[t]):"transparent"===t?new qe(NaN,NaN,NaN,0):null}function $e(t){return new qe(t>>16&255,t>>8&255,255&t,1)}function De(t,n,e,r){return r<=0&&(t=n=e=NaN),new qe(t,n,e,r)}function Re(t){return t instanceof ye||(t=ze(t)),t?new qe((t=t.rgb()).r,t.g,t.b,t.opacity):new qe}function Fe(t,n,e,r){return 1===arguments.length?Re(t):new qe(t,n,e,null==r?1:r)}function qe(t,n,e,r){this.r=+t,this.g=+n,this.b=+e,this.opacity=+r}function Ue(){return`#${Ye(this.r)}${Ye(this.g)}${Ye(this.b)}`}function Ie(){const t=Oe(this.opacity);return`${1===t?"rgb(":"rgba("}${Be(this.r)}, ${Be(this.g)}, ${Be(this.b)}${1===t?")":`, ${t})`}`}function Oe(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function Be(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function Ye(t){return((t=Be(t))<16?"0":"")+t.toString(16)}function Le(t,n,e,r){return r<=0?t=n=e=NaN:e<=0||e>=1?t=n=NaN:n<=0&&(t=NaN),new Xe(t,n,e,r)}function je(t){if(t instanceof Xe)return new Xe(t.h,t.s,t.l,t.opacity);if(t instanceof ye||(t=ze(t)),!t)return new Xe;if(t instanceof Xe)return t;var n=(t=t.rgb()).r/255,e=t.g/255,r=t.b/255,i=Math.min(n,e,r),o=Math.max(n,e,r),a=NaN,u=o-i,c=(o+i)/2;return u?(a=n===o?(e-r)/u+6*(e0&&c<1?0:a,new Xe(a,u,c,t.opacity)}function He(t,n,e,r){return 1===arguments.length?je(t):new Xe(t,n,e,null==r?1:r)}function Xe(t,n,e,r){this.h=+t,this.s=+n,this.l=+e,this.opacity=+r}function Ge(t){return(t=(t||0)%360)<0?t+360:t}function Ve(t){return Math.max(0,Math.min(1,t||0))}function We(t,n,e){return 255*(t<60?n+(e-n)*t/60:t<180?e:t<240?n+(e-n)*(240-t)/60:n)}pe(ye,ze,{copy(t){return Object.assign(new this.constructor,this,t)},displayable(){return this.rgb().displayable()},hex:Ce,formatHex:Ce,formatHex8:function(){return this.rgb().formatHex8()},formatHsl:function(){return je(this).formatHsl()},formatRgb:Pe,toString:Pe}),pe(qe,Fe,ge(ye,{brighter(t){return t=null==t?_e:Math.pow(_e,t),new qe(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=null==t?ve:Math.pow(ve,t),new qe(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new qe(Be(this.r),Be(this.g),Be(this.b),Oe(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Ue,formatHex:Ue,formatHex8:function(){return`#${Ye(this.r)}${Ye(this.g)}${Ye(this.b)}${Ye(255*(isNaN(this.opacity)?1:this.opacity))}`},formatRgb:Ie,toString:Ie})),pe(Xe,He,ge(ye,{brighter(t){return t=null==t?_e:Math.pow(_e,t),new Xe(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=null==t?ve:Math.pow(ve,t),new Xe(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+360*(this.h<0),n=isNaN(t)||isNaN(this.s)?0:this.s,e=this.l,r=e+(e<.5?e:1-e)*n,i=2*e-r;return new qe(We(t>=240?t-240:t+120,i,r),We(t,i,r),We(t<120?t+240:t-120,i,r),this.opacity)},clamp(){return new Xe(Ge(this.h),Ve(this.s),Ve(this.l),Oe(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const t=Oe(this.opacity);return`${1===t?"hsl(":"hsla("}${Ge(this.h)}, ${100*Ve(this.s)}%, ${100*Ve(this.l)}%${1===t?")":`, ${t})`}`}}));const Ze=Math.PI/180,Ke=180/Math.PI,Qe=.96422,Je=1,tr=.82521,nr=4/29,er=6/29,rr=3*er*er,ir=er*er*er;function or(t){if(t instanceof ur)return new ur(t.l,t.a,t.b,t.opacity);if(t instanceof pr)return gr(t);t instanceof qe||(t=Re(t));var n,e,r=lr(t.r),i=lr(t.g),o=lr(t.b),a=cr((.2225045*r+.7168786*i+.0606169*o)/Je);return r===i&&i===o?n=e=a:(n=cr((.4360747*r+.3850649*i+.1430804*o)/Qe),e=cr((.0139322*r+.0971045*i+.7141733*o)/tr)),new ur(116*a-16,500*(n-a),200*(a-e),t.opacity)}function ar(t,n,e,r){return 1===arguments.length?or(t):new ur(t,n,e,null==r?1:r)}function ur(t,n,e,r){this.l=+t,this.a=+n,this.b=+e,this.opacity=+r}function cr(t){return t>ir?Math.pow(t,1/3):t/rr+nr}function fr(t){return t>er?t*t*t:rr*(t-nr)}function sr(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function lr(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function hr(t){if(t instanceof pr)return new pr(t.h,t.c,t.l,t.opacity);if(t instanceof ur||(t=or(t)),0===t.a&&0===t.b)return new pr(NaN,0=1?(e=1,n-1):Math.floor(e*n),i=t[r],o=t[r+1],a=r>0?t[r-1]:2*i-o,u=r()=>t;function Cr(t,n){return function(e){return t+e*n}}function Pr(t,n){var e=n-t;return e?Cr(t,e>180||e<-180?e-360*Math.round(e/360):e):kr(isNaN(t)?n:t)}function zr(t){return 1==(t=+t)?$r:function(n,e){return e-n?function(t,n,e){return t=Math.pow(t,e),n=Math.pow(n,e)-t,e=1/e,function(r){return Math.pow(t+r*n,e)}}(n,e,t):kr(isNaN(n)?e:n)}}function $r(t,n){var e=n-t;return e?Cr(t,e):kr(isNaN(t)?n:t)}var Dr=function t(n){var e=zr(n);function r(t,n){var r=e((t=Fe(t)).r,(n=Fe(n)).r),i=e(t.g,n.g),o=e(t.b,n.b),a=$r(t.opacity,n.opacity);return function(n){return t.r=r(n),t.g=i(n),t.b=o(n),t.opacity=a(n),t+""}}return r.gamma=t,r}(1);function Rr(t){return function(n){var e,r,i=n.length,o=new Array(i),a=new Array(i),u=new Array(i);for(e=0;eo&&(i=n.slice(o,i),u[a]?u[a]+=i:u[++a]=i),(e=e[0])===(r=r[0])?u[a]?u[a]+=r:u[++a]=r:(u[++a]=null,c.push({i:a,x:Yr(e,r)})),o=Hr.lastIndex;return o180?n+=360:n-t>180&&(t+=360),o.push({i:e.push(i(e)+"rotate(",null,r)-2,x:Yr(t,n)})):n&&e.push(i(e)+"rotate("+n+r)}(o.rotate,a.rotate,u,c),function(t,n,e,o){t!==n?o.push({i:e.push(i(e)+"skewX(",null,r)-2,x:Yr(t,n)}):n&&e.push(i(e)+"skewX("+n+r)}(o.skewX,a.skewX,u,c),function(t,n,e,r,o,a){if(t!==e||n!==r){var u=o.push(i(o)+"scale(",null,",",null,")");a.push({i:u-4,x:Yr(t,e)},{i:u-2,x:Yr(n,r)})}else 1===e&&1===r||o.push(i(o)+"scale("+e+","+r+")")}(o.scaleX,o.scaleY,a.scaleX,a.scaleY,u,c),o=a=null,function(t){for(var n,e=-1,r=c.length;++e=0&&n._call.call(void 0,t),n=n._next;--yi}function Ci(){xi=(mi=Mi.now())+wi,yi=vi=0;try{ki()}finally{yi=0,function(){var t,n,e=pi,r=1/0;for(;e;)e._call?(r>e._time&&(r=e._time),t=e,e=e._next):(n=e._next,e._next=null,e=t?t._next=n:pi=n);gi=t,zi(r)}(),xi=0}}function Pi(){var t=Mi.now(),n=t-mi;n>bi&&(wi-=n,mi=t)}function zi(t){yi||(vi&&(vi=clearTimeout(vi)),t-xi>24?(t<1/0&&(vi=setTimeout(Ci,t-Mi.now()-wi)),_i&&(_i=clearInterval(_i))):(_i||(mi=Mi.now(),_i=setInterval(Pi,bi)),yi=1,Ti(Ci)))}function $i(t,n,e){var r=new Ei;return n=null==n?0:+n,r.restart((e=>{r.stop(),t(e+n)}),n,e),r}Ei.prototype=Ni.prototype={constructor:Ei,restart:function(t,n,e){if("function"!=typeof t)throw new TypeError("callback is not a function");e=(null==e?Ai():+e)+(null==n?0:+n),this._next||gi===this||(gi?gi._next=this:pi=this,gi=this),this._call=t,this._time=e,zi()},stop:function(){this._call&&(this._call=null,this._time=1/0,zi())}};var Di=$t("start","end","cancel","interrupt"),Ri=[],Fi=0,qi=1,Ui=2,Ii=3,Oi=4,Bi=5,Yi=6;function Li(t,n,e,r,i,o){var a=t.__transition;if(a){if(e in a)return}else t.__transition={};!function(t,n,e){var r,i=t.__transition;function o(t){e.state=qi,e.timer.restart(a,e.delay,e.time),e.delay<=t&&a(t-e.delay)}function a(o){var f,s,l,h;if(e.state!==qi)return c();for(f in i)if((h=i[f]).name===e.name){if(h.state===Ii)return $i(a);h.state===Oi?(h.state=Yi,h.timer.stop(),h.on.call("interrupt",t,t.__data__,h.index,h.group),delete i[f]):+fFi)throw new Error("too late; already scheduled");return e}function Hi(t,n){var e=Xi(t,n);if(e.state>Ii)throw new Error("too late; already running");return e}function Xi(t,n){var e=t.__transition;if(!e||!(e=e[n]))throw new Error("transition not found");return e}function Gi(t,n){var e,r,i,o=t.__transition,a=!0;if(o){for(i in n=null==n?null:n+"",o)(e=o[i]).name===n?(r=e.state>Ui&&e.state=0&&(t=t.slice(0,n)),!t||"start"===t}))}(n)?ji:Hi;return function(){var a=o(this,t),u=a.on;u!==r&&(i=(r=u).copy()).on(n,e),a.on=i}}(e,t,n))},attr:function(t,n){var e=It(t),r="transform"===e?ni:Ki;return this.attrTween(t,"function"==typeof n?(e.local?ro:eo)(e,r,Zi(this,"attr."+t,n)):null==n?(e.local?Ji:Qi)(e):(e.local?no:to)(e,r,n))},attrTween:function(t,n){var e="attr."+t;if(arguments.length<2)return(e=this.tween(e))&&e._value;if(null==n)return this.tween(e,null);if("function"!=typeof n)throw new Error;var r=It(t);return this.tween(e,(r.local?io:oo)(r,n))},style:function(t,n,e){var r="transform"==(t+="")?ti:Ki;return null==n?this.styleTween(t,function(t,n){var e,r,i;return function(){var o=_n(this,t),a=(this.style.removeProperty(t),_n(this,t));return o===a?null:o===e&&a===r?i:i=n(e=o,r=a)}}(t,r)).on("end.style."+t,lo(t)):"function"==typeof n?this.styleTween(t,function(t,n,e){var r,i,o;return function(){var a=_n(this,t),u=e(this),c=u+"";return null==u&&(this.style.removeProperty(t),c=u=_n(this,t)),a===c?null:a===r&&c===i?o:(i=c,o=n(r=a,u))}}(t,r,Zi(this,"style."+t,n))).each(function(t,n){var e,r,i,o,a="style."+n,u="end."+a;return function(){var c=Hi(this,t),f=c.on,s=null==c.value[a]?o||(o=lo(n)):void 0;f===e&&i===s||(r=(e=f).copy()).on(u,i=s),c.on=r}}(this._id,t)):this.styleTween(t,function(t,n,e){var r,i,o=e+"";return function(){var a=_n(this,t);return a===o?null:a===r?i:i=n(r=a,e)}}(t,r,n),e).on("end.style."+t,null)},styleTween:function(t,n,e){var r="style."+(t+="");if(arguments.length<2)return(r=this.tween(r))&&r._value;if(null==n)return this.tween(r,null);if("function"!=typeof n)throw new Error;return this.tween(r,function(t,n,e){var r,i;function o(){var o=n.apply(this,arguments);return o!==i&&(r=(i=o)&&function(t,n,e){return function(r){this.style.setProperty(t,n.call(this,r),e)}}(t,o,e)),r}return o._value=n,o}(t,n,null==e?"":e))},text:function(t){return this.tween("text","function"==typeof t?function(t){return function(){var n=t(this);this.textContent=null==n?"":n}}(Zi(this,"text",t)):function(t){return function(){this.textContent=t}}(null==t?"":t+""))},textTween:function(t){var n="text";if(arguments.length<1)return(n=this.tween(n))&&n._value;if(null==t)return this.tween(n,null);if("function"!=typeof t)throw new Error;return this.tween(n,function(t){var n,e;function r(){var r=t.apply(this,arguments);return r!==e&&(n=(e=r)&&function(t){return function(n){this.textContent=t.call(this,n)}}(r)),n}return r._value=t,r}(t))},remove:function(){return this.on("end.remove",function(t){return function(){var n=this.parentNode;for(var e in this.__transition)if(+e!==t)return;n&&n.removeChild(this)}}(this._id))},tween:function(t,n){var e=this._id;if(t+="",arguments.length<2){for(var r,i=Xi(this.node(),e).tween,o=0,a=i.length;o()=>t;function Qo(t,{sourceEvent:n,target:e,selection:r,mode:i,dispatch:o}){Object.defineProperties(this,{type:{value:t,enumerable:!0,configurable:!0},sourceEvent:{value:n,enumerable:!0,configurable:!0},target:{value:e,enumerable:!0,configurable:!0},selection:{value:r,enumerable:!0,configurable:!0},mode:{value:i,enumerable:!0,configurable:!0},_:{value:o}})}function Jo(t){t.preventDefault(),t.stopImmediatePropagation()}var ta={name:"drag"},na={name:"space"},ea={name:"handle"},ra={name:"center"};const{abs:ia,max:oa,min:aa}=Math;function ua(t){return[+t[0],+t[1]]}function ca(t){return[ua(t[0]),ua(t[1])]}var fa={name:"x",handles:["w","e"].map(va),input:function(t,n){return null==t?null:[[+t[0],n[0][1]],[+t[1],n[1][1]]]},output:function(t){return t&&[t[0][0],t[1][0]]}},sa={name:"y",handles:["n","s"].map(va),input:function(t,n){return null==t?null:[[n[0][0],+t[0]],[n[1][0],+t[1]]]},output:function(t){return t&&[t[0][1],t[1][1]]}},la={name:"xy",handles:["n","w","e","s","nw","ne","sw","se"].map(va),input:function(t){return null==t?null:ca(t)},output:function(t){return t}},ha={overlay:"crosshair",selection:"move",n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},da={e:"w",w:"e",nw:"ne",ne:"nw",se:"sw",sw:"se"},pa={n:"s",s:"n",nw:"sw",ne:"se",se:"ne",sw:"nw"},ga={overlay:1,selection:1,n:null,e:1,s:null,w:-1,nw:-1,ne:1,se:1,sw:-1},ya={overlay:1,selection:1,n:-1,e:null,s:1,w:null,nw:-1,ne:-1,se:1,sw:1};function va(t){return{type:t}}function _a(t){return!t.ctrlKey&&!t.button}function ba(){var t=this.ownerSVGElement||this;return t.hasAttribute("viewBox")?[[(t=t.viewBox.baseVal).x,t.y],[t.x+t.width,t.y+t.height]]:[[0,0],[t.width.baseVal.value,t.height.baseVal.value]]}function ma(){return navigator.maxTouchPoints||"ontouchstart"in this}function xa(t){for(;!t.__brush;)if(!(t=t.parentNode))return;return t.__brush}function wa(t){var n,e=ba,r=_a,i=ma,o=!0,a=$t("start","brush","end"),u=6;function c(n){var e=n.property("__brush",g).selectAll(".overlay").data([va("overlay")]);e.enter().append("rect").attr("class","overlay").attr("pointer-events","all").attr("cursor",ha.overlay).merge(e).each((function(){var t=xa(this).extent;Zn(this).attr("x",t[0][0]).attr("y",t[0][1]).attr("width",t[1][0]-t[0][0]).attr("height",t[1][1]-t[0][1])})),n.selectAll(".selection").data([va("selection")]).enter().append("rect").attr("class","selection").attr("cursor",ha.selection).attr("fill","#777").attr("fill-opacity",.3).attr("stroke","#fff").attr("shape-rendering","crispEdges");var r=n.selectAll(".handle").data(t.handles,(function(t){return t.type}));r.exit().remove(),r.enter().append("rect").attr("class",(function(t){return"handle handle--"+t.type})).attr("cursor",(function(t){return ha[t.type]})),n.each(f).attr("fill","none").attr("pointer-events","all").on("mousedown.brush",h).filter(i).on("touchstart.brush",h).on("touchmove.brush",d).on("touchend.brush touchcancel.brush",p).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function f(){var t=Zn(this),n=xa(this).selection;n?(t.selectAll(".selection").style("display",null).attr("x",n[0][0]).attr("y",n[0][1]).attr("width",n[1][0]-n[0][0]).attr("height",n[1][1]-n[0][1]),t.selectAll(".handle").style("display",null).attr("x",(function(t){return"e"===t.type[t.type.length-1]?n[1][0]-u/2:n[0][0]-u/2})).attr("y",(function(t){return"s"===t.type[0]?n[1][1]-u/2:n[0][1]-u/2})).attr("width",(function(t){return"n"===t.type||"s"===t.type?n[1][0]-n[0][0]+u:u})).attr("height",(function(t){return"e"===t.type||"w"===t.type?n[1][1]-n[0][1]+u:u}))):t.selectAll(".selection,.handle").style("display","none").attr("x",null).attr("y",null).attr("width",null).attr("height",null)}function s(t,n,e){var r=t.__brush.emitter;return!r||e&&r.clean?new l(t,n,e):r}function l(t,n,e){this.that=t,this.args=n,this.state=t.__brush,this.active=0,this.clean=e}function h(e){if((!n||e.touches)&&r.apply(this,arguments)){var i,a,u,c,l,h,d,p,g,y,v,_=this,b=e.target.__data__.type,m="selection"===(o&&e.metaKey?b="overlay":b)?ta:o&&e.altKey?ra:ea,x=t===sa?null:ga[b],w=t===fa?null:ya[b],M=xa(_),T=M.extent,A=M.selection,S=T[0][0],E=T[0][1],N=T[1][0],k=T[1][1],C=0,P=0,z=x&&w&&o&&e.shiftKey,$=Array.from(e.touches||[e],(t=>{const n=t.identifier;return(t=ne(t,_)).point0=t.slice(),t.identifier=n,t}));Gi(_);var D=s(_,arguments,!0).beforestart();if("overlay"===b){A&&(g=!0);const n=[$[0],$[1]||$[0]];M.selection=A=[[i=t===sa?S:aa(n[0][0],n[1][0]),u=t===fa?E:aa(n[0][1],n[1][1])],[l=t===sa?N:oa(n[0][0],n[1][0]),d=t===fa?k:oa(n[0][1],n[1][1])]],$.length>1&&I(e)}else i=A[0][0],u=A[0][1],l=A[1][0],d=A[1][1];a=i,c=u,h=l,p=d;var R=Zn(_).attr("pointer-events","none"),F=R.selectAll(".overlay").attr("cursor",ha[b]);if(e.touches)D.moved=U,D.ended=O;else{var q=Zn(e.view).on("mousemove.brush",U,!0).on("mouseup.brush",O,!0);o&&q.on("keydown.brush",(function(t){switch(t.keyCode){case 16:z=x&&w;break;case 18:m===ea&&(x&&(l=h-C*x,i=a+C*x),w&&(d=p-P*w,u=c+P*w),m=ra,I(t));break;case 32:m!==ea&&m!==ra||(x<0?l=h-C:x>0&&(i=a-C),w<0?d=p-P:w>0&&(u=c-P),m=na,F.attr("cursor",ha.selection),I(t));break;default:return}Jo(t)}),!0).on("keyup.brush",(function(t){switch(t.keyCode){case 16:z&&(y=v=z=!1,I(t));break;case 18:m===ra&&(x<0?l=h:x>0&&(i=a),w<0?d=p:w>0&&(u=c),m=ea,I(t));break;case 32:m===na&&(t.altKey?(x&&(l=h-C*x,i=a+C*x),w&&(d=p-P*w,u=c+P*w),m=ra):(x<0?l=h:x>0&&(i=a),w<0?d=p:w>0&&(u=c),m=ea),F.attr("cursor",ha[b]),I(t));break;default:return}Jo(t)}),!0),ae(e.view)}f.call(_),D.start(e,m.name)}function U(t){for(const n of t.changedTouches||[t])for(const t of $)t.identifier===n.identifier&&(t.cur=ne(n,_));if(z&&!y&&!v&&1===$.length){const t=$[0];ia(t.cur[0]-t[0])>ia(t.cur[1]-t[1])?v=!0:y=!0}for(const t of $)t.cur&&(t[0]=t.cur[0],t[1]=t.cur[1]);g=!0,Jo(t),I(t)}function I(t){const n=$[0],e=n.point0;var r;switch(C=n[0]-e[0],P=n[1]-e[1],m){case na:case ta:x&&(C=oa(S-i,aa(N-l,C)),a=i+C,h=l+C),w&&(P=oa(E-u,aa(k-d,P)),c=u+P,p=d+P);break;case ea:$[1]?(x&&(a=oa(S,aa(N,$[0][0])),h=oa(S,aa(N,$[1][0])),x=1),w&&(c=oa(E,aa(k,$[0][1])),p=oa(E,aa(k,$[1][1])),w=1)):(x<0?(C=oa(S-i,aa(N-i,C)),a=i+C,h=l):x>0&&(C=oa(S-l,aa(N-l,C)),a=i,h=l+C),w<0?(P=oa(E-u,aa(k-u,P)),c=u+P,p=d):w>0&&(P=oa(E-d,aa(k-d,P)),c=u,p=d+P));break;case ra:x&&(a=oa(S,aa(N,i-C*x)),h=oa(S,aa(N,l+C*x))),w&&(c=oa(E,aa(k,u-P*w)),p=oa(E,aa(k,d+P*w)))}ht+e))}function za(t,n){var e=0,r=null,i=null,o=null;function a(a){var u,c=a.length,f=new Array(c),s=Pa(0,c),l=new Array(c*c),h=new Array(c),d=0;a=Float64Array.from({length:c*c},n?(t,n)=>a[n%c][n/c|0]:(t,n)=>a[n/c|0][n%c]);for(let n=0;nr(f[t],f[n])));for(const e of s){const r=n;if(t){const t=Pa(1+~c,c).filter((t=>t<0?a[~t*c+e]:a[e*c+t]));i&&t.sort(((t,n)=>i(t<0?-a[~t*c+e]:a[e*c+t],n<0?-a[~n*c+e]:a[e*c+n])));for(const r of t)if(r<0){(l[~r*c+e]||(l[~r*c+e]={source:null,target:null})).target={index:e,startAngle:n,endAngle:n+=a[~r*c+e]*d,value:a[~r*c+e]}}else{(l[e*c+r]||(l[e*c+r]={source:null,target:null})).source={index:e,startAngle:n,endAngle:n+=a[e*c+r]*d,value:a[e*c+r]}}h[e]={index:e,startAngle:r,endAngle:n,value:f[e]}}else{const t=Pa(0,c).filter((t=>a[e*c+t]||a[t*c+e]));i&&t.sort(((t,n)=>i(a[e*c+t],a[e*c+n])));for(const r of t){let t;if(e=0))throw new Error(`invalid digits: ${t}`);if(n>15)return qa;const e=10**n;return function(t){this._+=t[0];for(let n=1,r=t.length;nRa)if(Math.abs(s*u-c*f)>Ra&&i){let h=e-o,d=r-a,p=u*u+c*c,g=h*h+d*d,y=Math.sqrt(p),v=Math.sqrt(l),_=i*Math.tan(($a-Math.acos((p+l-g)/(2*y*v)))/2),b=_/v,m=_/y;Math.abs(b-1)>Ra&&this._append`L${t+b*f},${n+b*s}`,this._append`A${i},${i},0,0,${+(s*h>f*d)},${this._x1=t+m*u},${this._y1=n+m*c}`}else this._append`L${this._x1=t},${this._y1=n}`;else;}arc(t,n,e,r,i,o){if(t=+t,n=+n,o=!!o,(e=+e)<0)throw new Error(`negative radius: ${e}`);let a=e*Math.cos(r),u=e*Math.sin(r),c=t+a,f=n+u,s=1^o,l=o?r-i:i-r;null===this._x1?this._append`M${c},${f}`:(Math.abs(this._x1-c)>Ra||Math.abs(this._y1-f)>Ra)&&this._append`L${c},${f}`,e&&(l<0&&(l=l%Da+Da),l>Fa?this._append`A${e},${e},0,1,${s},${t-a},${n-u}A${e},${e},0,1,${s},${this._x1=c},${this._y1=f}`:l>Ra&&this._append`A${e},${e},0,${+(l>=$a)},${s},${this._x1=t+e*Math.cos(i)},${this._y1=n+e*Math.sin(i)}`)}rect(t,n,e,r){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+n}h${e=+e}v${+r}h${-e}Z`}toString(){return this._}};function Ia(){return new Ua}Ia.prototype=Ua.prototype;var Oa=Array.prototype.slice;function Ba(t){return function(){return t}}function Ya(t){return t.source}function La(t){return t.target}function ja(t){return t.radius}function Ha(t){return t.startAngle}function Xa(t){return t.endAngle}function Ga(){return 0}function Va(){return 10}function Wa(t){var n=Ya,e=La,r=ja,i=ja,o=Ha,a=Xa,u=Ga,c=null;function f(){var f,s=n.apply(this,arguments),l=e.apply(this,arguments),h=u.apply(this,arguments)/2,d=Oa.call(arguments),p=+r.apply(this,(d[0]=s,d)),g=o.apply(this,d)-Ea,y=a.apply(this,d)-Ea,v=+i.apply(this,(d[0]=l,d)),_=o.apply(this,d)-Ea,b=a.apply(this,d)-Ea;if(c||(c=f=Ia()),h>Ca&&(Ma(y-g)>2*h+Ca?y>g?(g+=h,y-=h):(g-=h,y+=h):g=y=(g+y)/2,Ma(b-_)>2*h+Ca?b>_?(_+=h,b-=h):(_-=h,b+=h):_=b=(_+b)/2),c.moveTo(p*Ta(g),p*Aa(g)),c.arc(0,0,p,g,y),g!==_||y!==b)if(t){var m=v-+t.apply(this,arguments),x=(_+b)/2;c.quadraticCurveTo(0,0,m*Ta(_),m*Aa(_)),c.lineTo(v*Ta(x),v*Aa(x)),c.lineTo(m*Ta(b),m*Aa(b))}else c.quadraticCurveTo(0,0,v*Ta(_),v*Aa(_)),c.arc(0,0,v,_,b);if(c.quadraticCurveTo(0,0,p*Ta(g),p*Aa(g)),c.closePath(),f)return c=null,f+""||null}return t&&(f.headRadius=function(n){return arguments.length?(t="function"==typeof n?n:Ba(+n),f):t}),f.radius=function(t){return arguments.length?(r=i="function"==typeof t?t:Ba(+t),f):r},f.sourceRadius=function(t){return arguments.length?(r="function"==typeof t?t:Ba(+t),f):r},f.targetRadius=function(t){return arguments.length?(i="function"==typeof t?t:Ba(+t),f):i},f.startAngle=function(t){return arguments.length?(o="function"==typeof t?t:Ba(+t),f):o},f.endAngle=function(t){return arguments.length?(a="function"==typeof t?t:Ba(+t),f):a},f.padAngle=function(t){return arguments.length?(u="function"==typeof t?t:Ba(+t),f):u},f.source=function(t){return arguments.length?(n=t,f):n},f.target=function(t){return arguments.length?(e=t,f):e},f.context=function(t){return arguments.length?(c=null==t?null:t,f):c},f}var Za=Array.prototype.slice;function Ka(t,n){return t-n}var Qa=t=>()=>t;function Ja(t,n){for(var e,r=-1,i=n.length;++rr!=d>r&&e<(h-f)*(r-s)/(d-s)+f&&(i=-i)}return i}function nu(t,n,e){var r,i,o,a;return function(t,n,e){return(n[0]-t[0])*(e[1]-t[1])==(e[0]-t[0])*(n[1]-t[1])}(t,n,e)&&(i=t[r=+(t[0]===n[0])],o=e[r],a=n[r],i<=o&&o<=a||a<=o&&o<=i)}function eu(){}var ru=[[],[[[1,1.5],[.5,1]]],[[[1.5,1],[1,1.5]]],[[[1.5,1],[.5,1]]],[[[1,.5],[1.5,1]]],[[[1,1.5],[.5,1]],[[1,.5],[1.5,1]]],[[[1,.5],[1,1.5]]],[[[1,.5],[.5,1]]],[[[.5,1],[1,.5]]],[[[1,1.5],[1,.5]]],[[[.5,1],[1,.5]],[[1.5,1],[1,1.5]]],[[[1.5,1],[1,.5]]],[[[.5,1],[1.5,1]]],[[[1,1.5],[1.5,1]]],[[[.5,1],[1,1.5]]],[]];function iu(){var t=1,n=1,e=K,r=u;function i(t){var n=e(t);if(Array.isArray(n))n=n.slice().sort(Ka);else{const e=M(t,ou);for(n=G(...Z(e[0],e[1],n),n);n[n.length-1]>=e[1];)n.pop();for(;n[1]o(t,n)))}function o(e,i){const o=null==i?NaN:+i;if(isNaN(o))throw new Error(`invalid value: ${i}`);var u=[],c=[];return function(e,r,i){var o,u,c,f,s,l,h=new Array,d=new Array;o=u=-1,f=au(e[0],r),ru[f<<1].forEach(p);for(;++o=r,ru[s<<2].forEach(p);for(;++o0?u.push([t]):c.push(t)})),c.forEach((function(t){for(var n,e=0,r=u.length;e0&&o0&&a=0&&o>=0))throw new Error("invalid size");return t=r,n=o,i},i.thresholds=function(t){return arguments.length?(e="function"==typeof t?t:Array.isArray(t)?Qa(Za.call(t)):Qa(t),i):e},i.smooth=function(t){return arguments.length?(r=t?u:eu,i):r===u},i}function ou(t){return isFinite(t)?t:NaN}function au(t,n){return null!=t&&+t>=n}function uu(t){return null==t||isNaN(t=+t)?-1/0:t}function cu(t,n,e,r){const i=r-n,o=e-n,a=isFinite(i)||isFinite(o)?i/o:Math.sign(i)/Math.sign(o);return isNaN(a)?t:t+a-.5}function fu(t){return t[0]}function su(t){return t[1]}function lu(){return 1}const hu=134217729,du=33306690738754706e-32;function pu(t,n,e,r,i){let o,a,u,c,f=n[0],s=r[0],l=0,h=0;s>f==s>-f?(o=f,f=n[++l]):(o=s,s=r[++h]);let d=0;if(lf==s>-f?(a=f+o,u=o-(a-f),f=n[++l]):(a=s+o,u=o-(a-s),s=r[++h]),o=a,0!==u&&(i[d++]=u);lf==s>-f?(a=o+f,c=a-o,u=o-(a-c)+(f-c),f=n[++l]):(a=o+s,c=a-o,u=o-(a-c)+(s-c),s=r[++h]),o=a,0!==u&&(i[d++]=u);for(;l=33306690738754716e-32*f?c:-function(t,n,e,r,i,o,a){let u,c,f,s,l,h,d,p,g,y,v,_,b,m,x,w,M,T;const A=t-i,S=e-i,E=n-o,N=r-o;m=A*N,h=hu*A,d=h-(h-A),p=A-d,h=hu*N,g=h-(h-N),y=N-g,x=p*y-(m-d*g-p*g-d*y),w=E*S,h=hu*E,d=h-(h-E),p=E-d,h=hu*S,g=h-(h-S),y=S-g,M=p*y-(w-d*g-p*g-d*y),v=x-M,l=x-v,_u[0]=x-(v+l)+(l-M),_=m+v,l=_-m,b=m-(_-l)+(v-l),v=b-w,l=b-v,_u[1]=b-(v+l)+(l-w),T=_+v,l=T-_,_u[2]=_-(T-l)+(v-l),_u[3]=T;let k=function(t,n){let e=n[0];for(let r=1;r=C||-k>=C)return k;if(l=t-A,u=t-(A+l)+(l-i),l=e-S,f=e-(S+l)+(l-i),l=n-E,c=n-(E+l)+(l-o),l=r-N,s=r-(N+l)+(l-o),0===u&&0===c&&0===f&&0===s)return k;if(C=vu*a+du*Math.abs(k),k+=A*s+N*u-(E*f+S*c),k>=C||-k>=C)return k;m=u*N,h=hu*u,d=h-(h-u),p=u-d,h=hu*N,g=h-(h-N),y=N-g,x=p*y-(m-d*g-p*g-d*y),w=c*S,h=hu*c,d=h-(h-c),p=c-d,h=hu*S,g=h-(h-S),y=S-g,M=p*y-(w-d*g-p*g-d*y),v=x-M,l=x-v,wu[0]=x-(v+l)+(l-M),_=m+v,l=_-m,b=m-(_-l)+(v-l),v=b-w,l=b-v,wu[1]=b-(v+l)+(l-w),T=_+v,l=T-_,wu[2]=_-(T-l)+(v-l),wu[3]=T;const P=pu(4,_u,4,wu,bu);m=A*s,h=hu*A,d=h-(h-A),p=A-d,h=hu*s,g=h-(h-s),y=s-g,x=p*y-(m-d*g-p*g-d*y),w=E*f,h=hu*E,d=h-(h-E),p=E-d,h=hu*f,g=h-(h-f),y=f-g,M=p*y-(w-d*g-p*g-d*y),v=x-M,l=x-v,wu[0]=x-(v+l)+(l-M),_=m+v,l=_-m,b=m-(_-l)+(v-l),v=b-w,l=b-v,wu[1]=b-(v+l)+(l-w),T=_+v,l=T-_,wu[2]=_-(T-l)+(v-l),wu[3]=T;const z=pu(P,bu,4,wu,mu);m=u*s,h=hu*u,d=h-(h-u),p=u-d,h=hu*s,g=h-(h-s),y=s-g,x=p*y-(m-d*g-p*g-d*y),w=c*f,h=hu*c,d=h-(h-c),p=c-d,h=hu*f,g=h-(h-f),y=f-g,M=p*y-(w-d*g-p*g-d*y),v=x-M,l=x-v,wu[0]=x-(v+l)+(l-M),_=m+v,l=_-m,b=m-(_-l)+(v-l),v=b-w,l=b-v,wu[1]=b-(v+l)+(l-w),T=_+v,l=T-_,wu[2]=_-(T-l)+(v-l),wu[3]=T;const $=pu(z,mu,4,wu,xu);return xu[$-1]}(t,n,e,r,i,o,f)}const Tu=Math.pow(2,-52),Au=new Uint32Array(512);class Su{static from(t,n=zu,e=$u){const r=t.length,i=new Float64Array(2*r);for(let o=0;o>1;if(n>0&&"number"!=typeof t[0])throw new Error("Expected coords to contain numbers.");this.coords=t;const e=Math.max(2*n-5,0);this._triangles=new Uint32Array(3*e),this._halfedges=new Int32Array(3*e),this._hashSize=Math.ceil(Math.sqrt(n)),this._hullPrev=new Uint32Array(n),this._hullNext=new Uint32Array(n),this._hullTri=new Uint32Array(n),this._hullHash=new Int32Array(this._hashSize),this._ids=new Uint32Array(n),this._dists=new Float64Array(n),this.update()}update(){const{coords:t,_hullPrev:n,_hullNext:e,_hullTri:r,_hullHash:i}=this,o=t.length>>1;let a=1/0,u=1/0,c=-1/0,f=-1/0;for(let n=0;nc&&(c=e),r>f&&(f=r),this._ids[n]=n}const s=(a+c)/2,l=(u+f)/2;let h,d,p;for(let n=0,e=1/0;n0&&(d=n,e=r)}let v=t[2*d],_=t[2*d+1],b=1/0;for(let n=0;nr&&(n[e++]=i,r=o)}return this.hull=n.subarray(0,e),this.triangles=new Uint32Array(0),void(this.halfedges=new Uint32Array(0))}if(Mu(g,y,v,_,m,x)<0){const t=d,n=v,e=_;d=p,v=m,_=x,p=t,m=n,x=e}const w=function(t,n,e,r,i,o){const a=e-t,u=r-n,c=i-t,f=o-n,s=a*a+u*u,l=c*c+f*f,h=.5/(a*f-u*c),d=t+(f*s-u*l)*h,p=n+(a*l-c*s)*h;return{x:d,y:p}}(g,y,v,_,m,x);this._cx=w.x,this._cy=w.y;for(let n=0;n0&&Math.abs(f-o)<=Tu&&Math.abs(s-a)<=Tu)continue;if(o=f,a=s,c===h||c===d||c===p)continue;let l=0;for(let t=0,n=this._hashKey(f,s);t=0;)if(y=g,y===l){y=-1;break}if(-1===y)continue;let v=this._addTriangle(y,c,e[y],-1,-1,r[y]);r[c]=this._legalize(v+2),r[y]=v,M++;let _=e[y];for(;g=e[_],Mu(f,s,t[2*_],t[2*_+1],t[2*g],t[2*g+1])<0;)v=this._addTriangle(_,c,g,r[c],-1,r[_]),r[c]=this._legalize(v+2),e[_]=_,M--,_=g;if(y===l)for(;g=n[y],Mu(f,s,t[2*g],t[2*g+1],t[2*y],t[2*y+1])<0;)v=this._addTriangle(g,c,y,-1,r[y],r[g]),this._legalize(v+2),r[g]=v,e[y]=y,M--,y=g;this._hullStart=n[c]=y,e[y]=n[_]=c,e[c]=_,i[this._hashKey(f,s)]=c,i[this._hashKey(t[2*y],t[2*y+1])]=y}this.hull=new Uint32Array(M);for(let t=0,n=this._hullStart;t0?3-e:1+e)/4}(t-this._cx,n-this._cy)*this._hashSize)%this._hashSize}_legalize(t){const{_triangles:n,_halfedges:e,coords:r}=this;let i=0,o=0;for(;;){const a=e[t],u=t-t%3;if(o=u+(t+2)%3,-1===a){if(0===i)break;t=Au[--i];continue}const c=a-a%3,f=u+(t+1)%3,s=c+(a+2)%3,l=n[o],h=n[t],d=n[f],p=n[s];if(Nu(r[2*l],r[2*l+1],r[2*h],r[2*h+1],r[2*d],r[2*d+1],r[2*p],r[2*p+1])){n[t]=p,n[a]=l;const r=e[s];if(-1===r){let n=this._hullStart;do{if(this._hullTri[n]===s){this._hullTri[n]=t;break}n=this._hullPrev[n]}while(n!==this._hullStart)}this._link(t,r),this._link(a,e[o]),this._link(o,s);const u=c+(a+1)%3;i=e&&n[t[a]]>o;)t[a+1]=t[a--];t[a+1]=r}else{let i=e+1,o=r;Pu(t,e+r>>1,i),n[t[e]]>n[t[r]]&&Pu(t,e,r),n[t[i]]>n[t[r]]&&Pu(t,i,r),n[t[e]]>n[t[i]]&&Pu(t,e,i);const a=t[i],u=n[a];for(;;){do{i++}while(n[t[i]]u);if(o=o-e?(Cu(t,n,i,r),Cu(t,n,e,o-1)):(Cu(t,n,e,o-1),Cu(t,n,i,r))}}function Pu(t,n,e){const r=t[n];t[n]=t[e],t[e]=r}function zu(t){return t[0]}function $u(t){return t[1]}const Du=1e-6;class Ru{constructor(){this._x0=this._y0=this._x1=this._y1=null,this._=""}moveTo(t,n){this._+=`M${this._x0=this._x1=+t},${this._y0=this._y1=+n}`}closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")}lineTo(t,n){this._+=`L${this._x1=+t},${this._y1=+n}`}arc(t,n,e){const r=(t=+t)+(e=+e),i=n=+n;if(e<0)throw new Error("negative radius");null===this._x1?this._+=`M${r},${i}`:(Math.abs(this._x1-r)>Du||Math.abs(this._y1-i)>Du)&&(this._+="L"+r+","+i),e&&(this._+=`A${e},${e},0,1,1,${t-e},${n}A${e},${e},0,1,1,${this._x1=r},${this._y1=i}`)}rect(t,n,e,r){this._+=`M${this._x0=this._x1=+t},${this._y0=this._y1=+n}h${+e}v${+r}h${-e}Z`}value(){return this._||null}}class Fu{constructor(){this._=[]}moveTo(t,n){this._.push([t,n])}closePath(){this._.push(this._[0].slice())}lineTo(t,n){this._.push([t,n])}value(){return this._.length?this._:null}}class qu{constructor(t,[n,e,r,i]=[0,0,960,500]){if(!((r=+r)>=(n=+n)&&(i=+i)>=(e=+e)))throw new Error("invalid bounds");this.delaunay=t,this._circumcenters=new Float64Array(2*t.points.length),this.vectors=new Float64Array(2*t.points.length),this.xmax=r,this.xmin=n,this.ymax=i,this.ymin=e,this._init()}update(){return this.delaunay.update(),this._init(),this}_init(){const{delaunay:{points:t,hull:n,triangles:e},vectors:r}=this;let i,o;const a=this.circumcenters=this._circumcenters.subarray(0,e.length/3*2);for(let r,u,c=0,f=0,s=e.length;c1;)i-=2;for(let t=2;t0){if(n>=this.ymax)return null;(i=(this.ymax-n)/r)0){if(t>=this.xmax)return null;(i=(this.xmax-t)/e)this.xmax?2:0)|(nthis.ymax?8:0)}_simplify(t){if(t&&t.length>4){for(let n=0;n2&&function(t){const{triangles:n,coords:e}=t;for(let t=0;t1e-10)return!1}return!0}(t)){this.collinear=Int32Array.from({length:n.length/2},((t,n)=>n)).sort(((t,e)=>n[2*t]-n[2*e]||n[2*t+1]-n[2*e+1]));const t=this.collinear[0],e=this.collinear[this.collinear.length-1],r=[n[2*t],n[2*t+1],n[2*e],n[2*e+1]],i=1e-8*Math.hypot(r[3]-r[1],r[2]-r[0]);for(let t=0,e=n.length/2;t0&&(this.triangles=new Int32Array(3).fill(-1),this.halfedges=new Int32Array(3).fill(-1),this.triangles[0]=r[0],o[r[0]]=1,2===r.length&&(o[r[1]]=0,this.triangles[1]=r[1],this.triangles[2]=r[1]))}voronoi(t){return new qu(this,t)}*neighbors(t){const{inedges:n,hull:e,_hullIndex:r,halfedges:i,triangles:o,collinear:a}=this;if(a){const n=a.indexOf(t);return n>0&&(yield a[n-1]),void(n=0&&i!==e&&i!==r;)e=i;return i}_step(t,n,e){const{inedges:r,hull:i,_hullIndex:o,halfedges:a,triangles:u,points:c}=this;if(-1===r[t]||!c.length)return(t+1)%(c.length>>1);let f=t,s=Iu(n-c[2*t],2)+Iu(e-c[2*t+1],2);const l=r[t];let h=l;do{let r=u[h];const l=Iu(n-c[2*r],2)+Iu(e-c[2*r+1],2);if(l9999?"+"+Ku(n,6):Ku(n,4))+"-"+Ku(t.getUTCMonth()+1,2)+"-"+Ku(t.getUTCDate(),2)+(o?"T"+Ku(e,2)+":"+Ku(r,2)+":"+Ku(i,2)+"."+Ku(o,3)+"Z":i?"T"+Ku(e,2)+":"+Ku(r,2)+":"+Ku(i,2)+"Z":r||e?"T"+Ku(e,2)+":"+Ku(r,2)+"Z":"")}function Ju(t){var n=new RegExp('["'+t+"\n\r]"),e=t.charCodeAt(0);function r(t,n){var r,i=[],o=t.length,a=0,u=0,c=o<=0,f=!1;function s(){if(c)return Hu;if(f)return f=!1,ju;var n,r,i=a;if(t.charCodeAt(i)===Xu){for(;a++=o?c=!0:(r=t.charCodeAt(a++))===Gu?f=!0:r===Vu&&(f=!0,t.charCodeAt(a)===Gu&&++a),t.slice(i+1,n-1).replace(/""/g,'"')}for(;amc(n,e).then((n=>(new DOMParser).parseFromString(n,t)))}var Sc=Ac("application/xml"),Ec=Ac("text/html"),Nc=Ac("image/svg+xml");function kc(t,n,e,r){if(isNaN(n)||isNaN(e))return t;var i,o,a,u,c,f,s,l,h,d=t._root,p={data:r},g=t._x0,y=t._y0,v=t._x1,_=t._y1;if(!d)return t._root=p,t;for(;d.length;)if((f=n>=(o=(g+v)/2))?g=o:v=o,(s=e>=(a=(y+_)/2))?y=a:_=a,i=d,!(d=d[l=s<<1|f]))return i[l]=p,t;if(u=+t._x.call(null,d.data),c=+t._y.call(null,d.data),n===u&&e===c)return p.next=d,i?i[l]=p:t._root=p,t;do{i=i?i[l]=new Array(4):t._root=new Array(4),(f=n>=(o=(g+v)/2))?g=o:v=o,(s=e>=(a=(y+_)/2))?y=a:_=a}while((l=s<<1|f)==(h=(c>=a)<<1|u>=o));return i[h]=d,i[l]=p,t}function Cc(t,n,e,r,i){this.node=t,this.x0=n,this.y0=e,this.x1=r,this.y1=i}function Pc(t){return t[0]}function zc(t){return t[1]}function $c(t,n,e){var r=new Dc(null==n?Pc:n,null==e?zc:e,NaN,NaN,NaN,NaN);return null==t?r:r.addAll(t)}function Dc(t,n,e,r,i,o){this._x=t,this._y=n,this._x0=e,this._y0=r,this._x1=i,this._y1=o,this._root=void 0}function Rc(t){for(var n={data:t.data},e=n;t=t.next;)e=e.next={data:t.data};return n}var Fc=$c.prototype=Dc.prototype;function qc(t){return function(){return t}}function Uc(t){return 1e-6*(t()-.5)}function Ic(t){return t.x+t.vx}function Oc(t){return t.y+t.vy}function Bc(t){return t.index}function Yc(t,n){var e=t.get(n);if(!e)throw new Error("node not found: "+n);return e}Fc.copy=function(){var t,n,e=new Dc(this._x,this._y,this._x0,this._y0,this._x1,this._y1),r=this._root;if(!r)return e;if(!r.length)return e._root=Rc(r),e;for(t=[{source:r,target:e._root=new Array(4)}];r=t.pop();)for(var i=0;i<4;++i)(n=r.source[i])&&(n.length?t.push({source:n,target:r.target[i]=new Array(4)}):r.target[i]=Rc(n));return e},Fc.add=function(t){const n=+this._x.call(null,t),e=+this._y.call(null,t);return kc(this.cover(n,e),n,e,t)},Fc.addAll=function(t){var n,e,r,i,o=t.length,a=new Array(o),u=new Array(o),c=1/0,f=1/0,s=-1/0,l=-1/0;for(e=0;es&&(s=r),il&&(l=i));if(c>s||f>l)return this;for(this.cover(c,f).cover(s,l),e=0;et||t>=i||r>n||n>=o;)switch(u=(nh||(o=c.y0)>d||(a=c.x1)=v)<<1|t>=y)&&(c=p[p.length-1],p[p.length-1]=p[p.length-1-f],p[p.length-1-f]=c)}else{var _=t-+this._x.call(null,g.data),b=n-+this._y.call(null,g.data),m=_*_+b*b;if(m=(u=(p+y)/2))?p=u:y=u,(s=a>=(c=(g+v)/2))?g=c:v=c,n=d,!(d=d[l=s<<1|f]))return this;if(!d.length)break;(n[l+1&3]||n[l+2&3]||n[l+3&3])&&(e=n,h=l)}for(;d.data!==t;)if(r=d,!(d=d.next))return this;return(i=d.next)&&delete d.next,r?(i?r.next=i:delete r.next,this):n?(i?n[l]=i:delete n[l],(d=n[0]||n[1]||n[2]||n[3])&&d===(n[3]||n[2]||n[1]||n[0])&&!d.length&&(e?e[h]=d:this._root=d),this):(this._root=i,this)},Fc.removeAll=function(t){for(var n=0,e=t.length;n1?r[0]+r.slice(2):r,+t.slice(e+1)]}function Zc(t){return(t=Wc(Math.abs(t)))?t[1]:NaN}var Kc,Qc=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Jc(t){if(!(n=Qc.exec(t)))throw new Error("invalid format: "+t);var n;return new tf({fill:n[1],align:n[2],sign:n[3],symbol:n[4],zero:n[5],width:n[6],comma:n[7],precision:n[8]&&n[8].slice(1),trim:n[9],type:n[10]})}function tf(t){this.fill=void 0===t.fill?" ":t.fill+"",this.align=void 0===t.align?">":t.align+"",this.sign=void 0===t.sign?"-":t.sign+"",this.symbol=void 0===t.symbol?"":t.symbol+"",this.zero=!!t.zero,this.width=void 0===t.width?void 0:+t.width,this.comma=!!t.comma,this.precision=void 0===t.precision?void 0:+t.precision,this.trim=!!t.trim,this.type=void 0===t.type?"":t.type+""}function nf(t,n){var e=Wc(t,n);if(!e)return t+"";var r=e[0],i=e[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")}Jc.prototype=tf.prototype,tf.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};var ef={"%":(t,n)=>(100*t).toFixed(n),b:t=>Math.round(t).toString(2),c:t=>t+"",d:function(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)},e:(t,n)=>t.toExponential(n),f:(t,n)=>t.toFixed(n),g:(t,n)=>t.toPrecision(n),o:t=>Math.round(t).toString(8),p:(t,n)=>nf(100*t,n),r:nf,s:function(t,n){var e=Wc(t,n);if(!e)return t+"";var r=e[0],i=e[1],o=i-(Kc=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,a=r.length;return o===a?r:o>a?r+new Array(o-a+1).join("0"):o>0?r.slice(0,o)+"."+r.slice(o):"0."+new Array(1-o).join("0")+Wc(t,Math.max(0,n+o-1))[0]},X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function rf(t){return t}var of,af=Array.prototype.map,uf=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function cf(t){var n,e,r=void 0===t.grouping||void 0===t.thousands?rf:(n=af.call(t.grouping,Number),e=t.thousands+"",function(t,r){for(var i=t.length,o=[],a=0,u=n[0],c=0;i>0&&u>0&&(c+u+1>r&&(u=Math.max(1,r-c)),o.push(t.substring(i-=u,i+u)),!((c+=u+1)>r));)u=n[a=(a+1)%n.length];return o.reverse().join(e)}),i=void 0===t.currency?"":t.currency[0]+"",o=void 0===t.currency?"":t.currency[1]+"",a=void 0===t.decimal?".":t.decimal+"",u=void 0===t.numerals?rf:function(t){return function(n){return n.replace(/[0-9]/g,(function(n){return t[+n]}))}}(af.call(t.numerals,String)),c=void 0===t.percent?"%":t.percent+"",f=void 0===t.minus?"−":t.minus+"",s=void 0===t.nan?"NaN":t.nan+"";function l(t){var n=(t=Jc(t)).fill,e=t.align,l=t.sign,h=t.symbol,d=t.zero,p=t.width,g=t.comma,y=t.precision,v=t.trim,_=t.type;"n"===_?(g=!0,_="g"):ef[_]||(void 0===y&&(y=12),v=!0,_="g"),(d||"0"===n&&"="===e)&&(d=!0,n="0",e="=");var b="$"===h?i:"#"===h&&/[boxX]/.test(_)?"0"+_.toLowerCase():"",m="$"===h?o:/[%p]/.test(_)?c:"",x=ef[_],w=/[defgprs%]/.test(_);function M(t){var i,o,c,h=b,M=m;if("c"===_)M=x(t)+M,t="";else{var T=(t=+t)<0||1/t<0;if(t=isNaN(t)?s:x(Math.abs(t),y),v&&(t=function(t){t:for(var n,e=t.length,r=1,i=-1;r0&&(i=0)}return i>0?t.slice(0,i)+t.slice(n+1):t}(t)),T&&0==+t&&"+"!==l&&(T=!1),h=(T?"("===l?l:f:"-"===l||"("===l?"":l)+h,M=("s"===_?uf[8+Kc/3]:"")+M+(T&&"("===l?")":""),w)for(i=-1,o=t.length;++i(c=t.charCodeAt(i))||c>57){M=(46===c?a+t.slice(i+1):t.slice(i))+M,t=t.slice(0,i);break}}g&&!d&&(t=r(t,1/0));var A=h.length+t.length+M.length,S=A>1)+h+t+M+S.slice(A);break;default:t=S+h+t+M}return u(t)}return y=void 0===y?6:/[gprs]/.test(_)?Math.max(1,Math.min(21,y)):Math.max(0,Math.min(20,y)),M.toString=function(){return t+""},M}return{format:l,formatPrefix:function(t,n){var e=l(((t=Jc(t)).type="f",t)),r=3*Math.max(-8,Math.min(8,Math.floor(Zc(n)/3))),i=Math.pow(10,-r),o=uf[8+r/3];return function(t){return e(i*t)+o}}}}function ff(n){return of=cf(n),t.format=of.format,t.formatPrefix=of.formatPrefix,of}function sf(t){return Math.max(0,-Zc(Math.abs(t)))}function lf(t,n){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(Zc(n)/3)))-Zc(Math.abs(t)))}function hf(t,n){return t=Math.abs(t),n=Math.abs(n)-t,Math.max(0,Zc(n)-Zc(t))+1}t.format=void 0,t.formatPrefix=void 0,ff({thousands:",",grouping:[3],currency:["$",""]});var df=1e-6,pf=1e-12,gf=Math.PI,yf=gf/2,vf=gf/4,_f=2*gf,bf=180/gf,mf=gf/180,xf=Math.abs,wf=Math.atan,Mf=Math.atan2,Tf=Math.cos,Af=Math.ceil,Sf=Math.exp,Ef=Math.hypot,Nf=Math.log,kf=Math.pow,Cf=Math.sin,Pf=Math.sign||function(t){return t>0?1:t<0?-1:0},zf=Math.sqrt,$f=Math.tan;function Df(t){return t>1?0:t<-1?gf:Math.acos(t)}function Rf(t){return t>1?yf:t<-1?-yf:Math.asin(t)}function Ff(t){return(t=Cf(t/2))*t}function qf(){}function Uf(t,n){t&&Of.hasOwnProperty(t.type)&&Of[t.type](t,n)}var If={Feature:function(t,n){Uf(t.geometry,n)},FeatureCollection:function(t,n){for(var e=t.features,r=-1,i=e.length;++r=0?1:-1,i=r*e,o=Tf(n=(n*=mf)/2+vf),a=Cf(n),u=Vf*a,c=Gf*o+u*Tf(i),f=u*r*Cf(i);as.add(Mf(f,c)),Xf=t,Gf=o,Vf=a}function ds(t){return[Mf(t[1],t[0]),Rf(t[2])]}function ps(t){var n=t[0],e=t[1],r=Tf(e);return[r*Tf(n),r*Cf(n),Cf(e)]}function gs(t,n){return t[0]*n[0]+t[1]*n[1]+t[2]*n[2]}function ys(t,n){return[t[1]*n[2]-t[2]*n[1],t[2]*n[0]-t[0]*n[2],t[0]*n[1]-t[1]*n[0]]}function vs(t,n){t[0]+=n[0],t[1]+=n[1],t[2]+=n[2]}function _s(t,n){return[t[0]*n,t[1]*n,t[2]*n]}function bs(t){var n=zf(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=n,t[1]/=n,t[2]/=n}var ms,xs,ws,Ms,Ts,As,Ss,Es,Ns,ks,Cs,Ps,zs,$s,Ds,Rs,Fs={point:qs,lineStart:Is,lineEnd:Os,polygonStart:function(){Fs.point=Bs,Fs.lineStart=Ys,Fs.lineEnd=Ls,rs=new T,cs.polygonStart()},polygonEnd:function(){cs.polygonEnd(),Fs.point=qs,Fs.lineStart=Is,Fs.lineEnd=Os,as<0?(Wf=-(Kf=180),Zf=-(Qf=90)):rs>df?Qf=90:rs<-df&&(Zf=-90),os[0]=Wf,os[1]=Kf},sphere:function(){Wf=-(Kf=180),Zf=-(Qf=90)}};function qs(t,n){is.push(os=[Wf=t,Kf=t]),nQf&&(Qf=n)}function Us(t,n){var e=ps([t*mf,n*mf]);if(es){var r=ys(es,e),i=ys([r[1],-r[0],0],r);bs(i),i=ds(i);var o,a=t-Jf,u=a>0?1:-1,c=i[0]*bf*u,f=xf(a)>180;f^(u*JfQf&&(Qf=o):f^(u*Jf<(c=(c+360)%360-180)&&cQf&&(Qf=n)),f?tjs(Wf,Kf)&&(Kf=t):js(t,Kf)>js(Wf,Kf)&&(Wf=t):Kf>=Wf?(tKf&&(Kf=t)):t>Jf?js(Wf,t)>js(Wf,Kf)&&(Kf=t):js(t,Kf)>js(Wf,Kf)&&(Wf=t)}else is.push(os=[Wf=t,Kf=t]);nQf&&(Qf=n),es=e,Jf=t}function Is(){Fs.point=Us}function Os(){os[0]=Wf,os[1]=Kf,Fs.point=qs,es=null}function Bs(t,n){if(es){var e=t-Jf;rs.add(xf(e)>180?e+(e>0?360:-360):e)}else ts=t,ns=n;cs.point(t,n),Us(t,n)}function Ys(){cs.lineStart()}function Ls(){Bs(ts,ns),cs.lineEnd(),xf(rs)>df&&(Wf=-(Kf=180)),os[0]=Wf,os[1]=Kf,es=null}function js(t,n){return(n-=t)<0?n+360:n}function Hs(t,n){return t[0]-n[0]}function Xs(t,n){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:ngf&&(t-=Math.round(t/_f)*_f),[t,n]}function ul(t,n,e){return(t%=_f)?n||e?ol(fl(t),sl(n,e)):fl(t):n||e?sl(n,e):al}function cl(t){return function(n,e){return xf(n+=t)>gf&&(n-=Math.round(n/_f)*_f),[n,e]}}function fl(t){var n=cl(t);return n.invert=cl(-t),n}function sl(t,n){var e=Tf(t),r=Cf(t),i=Tf(n),o=Cf(n);function a(t,n){var a=Tf(n),u=Tf(t)*a,c=Cf(t)*a,f=Cf(n),s=f*e+u*r;return[Mf(c*i-s*o,u*e-f*r),Rf(s*i+c*o)]}return a.invert=function(t,n){var a=Tf(n),u=Tf(t)*a,c=Cf(t)*a,f=Cf(n),s=f*i-c*o;return[Mf(c*i+f*o,u*e+s*r),Rf(s*e-u*r)]},a}function ll(t){function n(n){return(n=t(n[0]*mf,n[1]*mf))[0]*=bf,n[1]*=bf,n}return t=ul(t[0]*mf,t[1]*mf,t.length>2?t[2]*mf:0),n.invert=function(n){return(n=t.invert(n[0]*mf,n[1]*mf))[0]*=bf,n[1]*=bf,n},n}function hl(t,n,e,r,i,o){if(e){var a=Tf(n),u=Cf(n),c=r*e;null==i?(i=n+r*_f,o=n-c/2):(i=dl(a,i),o=dl(a,o),(r>0?io)&&(i+=r*_f));for(var f,s=i;r>0?s>o:s1&&n.push(n.pop().concat(n.shift()))},result:function(){var e=n;return n=[],t=null,e}}}function gl(t,n){return xf(t[0]-n[0])=0;--o)i.point((s=f[o])[0],s[1]);else r(h.x,h.p.x,-1,i);h=h.p}f=(h=h.o).z,d=!d}while(!h.v);i.lineEnd()}}}function _l(t){if(n=t.length){for(var n,e,r=0,i=t[0];++r=0?1:-1,E=S*A,N=E>gf,k=y*w;if(c.add(Mf(k*S*Cf(E),v*M+k*Tf(E))),a+=N?A+S*_f:A,N^p>=e^m>=e){var C=ys(ps(d),ps(b));bs(C);var P=ys(o,C);bs(P);var z=(N^A>=0?-1:1)*Rf(P[2]);(r>z||r===z&&(C[0]||C[1]))&&(u+=N^A>=0?1:-1)}}return(a<-df||a0){for(l||(i.polygonStart(),l=!0),i.lineStart(),t=0;t1&&2&c&&h.push(h.pop().concat(h.shift())),a.push(h.filter(wl))}return h}}function wl(t){return t.length>1}function Ml(t,n){return((t=t.x)[0]<0?t[1]-yf-df:yf-t[1])-((n=n.x)[0]<0?n[1]-yf-df:yf-n[1])}al.invert=al;var Tl=xl((function(){return!0}),(function(t){var n,e=NaN,r=NaN,i=NaN;return{lineStart:function(){t.lineStart(),n=1},point:function(o,a){var u=o>0?gf:-gf,c=xf(o-e);xf(c-gf)0?yf:-yf),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(u,r),t.point(o,r),n=0):i!==u&&c>=gf&&(xf(e-i)df?wf((Cf(n)*(o=Tf(r))*Cf(e)-Cf(r)*(i=Tf(n))*Cf(t))/(i*o*a)):(n+r)/2}(e,r,o,a),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(u,r),n=0),t.point(e=o,r=a),i=u},lineEnd:function(){t.lineEnd(),e=r=NaN},clean:function(){return 2-n}}}),(function(t,n,e,r){var i;if(null==t)i=e*yf,r.point(-gf,i),r.point(0,i),r.point(gf,i),r.point(gf,0),r.point(gf,-i),r.point(0,-i),r.point(-gf,-i),r.point(-gf,0),r.point(-gf,i);else if(xf(t[0]-n[0])>df){var o=t[0]0,i=xf(n)>df;function o(t,e){return Tf(t)*Tf(e)>n}function a(t,e,r){var i=[1,0,0],o=ys(ps(t),ps(e)),a=gs(o,o),u=o[0],c=a-u*u;if(!c)return!r&&t;var f=n*a/c,s=-n*u/c,l=ys(i,o),h=_s(i,f);vs(h,_s(o,s));var d=l,p=gs(h,d),g=gs(d,d),y=p*p-g*(gs(h,h)-1);if(!(y<0)){var v=zf(y),_=_s(d,(-p-v)/g);if(vs(_,h),_=ds(_),!r)return _;var b,m=t[0],x=e[0],w=t[1],M=e[1];x0^_[1]<(xf(_[0]-m)gf^(m<=_[0]&&_[0]<=x)){var S=_s(d,(-p+v)/g);return vs(S,h),[_,ds(S)]}}}function u(n,e){var i=r?t:gf-t,o=0;return n<-i?o|=1:n>i&&(o|=2),e<-i?o|=4:e>i&&(o|=8),o}return xl(o,(function(t){var n,e,c,f,s;return{lineStart:function(){f=c=!1,s=1},point:function(l,h){var d,p=[l,h],g=o(l,h),y=r?g?0:u(l,h):g?u(l+(l<0?gf:-gf),h):0;if(!n&&(f=c=g)&&t.lineStart(),g!==c&&(!(d=a(n,p))||gl(n,d)||gl(p,d))&&(p[2]=1),g!==c)s=0,g?(t.lineStart(),d=a(p,n),t.point(d[0],d[1])):(d=a(n,p),t.point(d[0],d[1],2),t.lineEnd()),n=d;else if(i&&n&&r^g){var v;y&e||!(v=a(p,n,!0))||(s=0,r?(t.lineStart(),t.point(v[0][0],v[0][1]),t.point(v[1][0],v[1][1]),t.lineEnd()):(t.point(v[1][0],v[1][1]),t.lineEnd(),t.lineStart(),t.point(v[0][0],v[0][1],3)))}!g||n&&gl(n,p)||t.point(p[0],p[1]),n=p,c=g,e=y},lineEnd:function(){c&&t.lineEnd(),n=null},clean:function(){return s|(f&&c)<<1}}}),(function(n,r,i,o){hl(o,t,e,i,n,r)}),r?[0,-t]:[-gf,t-gf])}var Sl,El,Nl,kl,Cl=1e9,Pl=-Cl;function zl(t,n,e,r){function i(i,o){return t<=i&&i<=e&&n<=o&&o<=r}function o(i,o,u,f){var s=0,l=0;if(null==i||(s=a(i,u))!==(l=a(o,u))||c(i,o)<0^u>0)do{f.point(0===s||3===s?t:e,s>1?r:n)}while((s=(s+u+4)%4)!==l);else f.point(o[0],o[1])}function a(r,i){return xf(r[0]-t)0?0:3:xf(r[0]-e)0?2:1:xf(r[1]-n)0?1:0:i>0?3:2}function u(t,n){return c(t.x,n.x)}function c(t,n){var e=a(t,1),r=a(n,1);return e!==r?e-r:0===e?n[1]-t[1]:1===e?t[0]-n[0]:2===e?t[1]-n[1]:n[0]-t[0]}return function(a){var c,f,s,l,h,d,p,g,y,v,_,b=a,m=pl(),x={point:w,lineStart:function(){x.point=M,f&&f.push(s=[]);v=!0,y=!1,p=g=NaN},lineEnd:function(){c&&(M(l,h),d&&y&&m.rejoin(),c.push(m.result()));x.point=w,y&&b.lineEnd()},polygonStart:function(){b=m,c=[],f=[],_=!0},polygonEnd:function(){var n=function(){for(var n=0,e=0,i=f.length;er&&(h-o)*(r-a)>(d-a)*(t-o)&&++n:d<=r&&(h-o)*(r-a)<(d-a)*(t-o)&&--n;return n}(),e=_&&n,i=(c=ft(c)).length;(e||i)&&(a.polygonStart(),e&&(a.lineStart(),o(null,null,1,a),a.lineEnd()),i&&vl(c,u,n,o,a),a.polygonEnd());b=a,c=f=s=null}};function w(t,n){i(t,n)&&b.point(t,n)}function M(o,a){var u=i(o,a);if(f&&s.push([o,a]),v)l=o,h=a,d=u,v=!1,u&&(b.lineStart(),b.point(o,a));else if(u&&y)b.point(o,a);else{var c=[p=Math.max(Pl,Math.min(Cl,p)),g=Math.max(Pl,Math.min(Cl,g))],m=[o=Math.max(Pl,Math.min(Cl,o)),a=Math.max(Pl,Math.min(Cl,a))];!function(t,n,e,r,i,o){var a,u=t[0],c=t[1],f=0,s=1,l=n[0]-u,h=n[1]-c;if(a=e-u,l||!(a>0)){if(a/=l,l<0){if(a0){if(a>s)return;a>f&&(f=a)}if(a=i-u,l||!(a<0)){if(a/=l,l<0){if(a>s)return;a>f&&(f=a)}else if(l>0){if(a0)){if(a/=h,h<0){if(a0){if(a>s)return;a>f&&(f=a)}if(a=o-c,h||!(a<0)){if(a/=h,h<0){if(a>s)return;a>f&&(f=a)}else if(h>0){if(a0&&(t[0]=u+f*l,t[1]=c+f*h),s<1&&(n[0]=u+s*l,n[1]=c+s*h),!0}}}}}(c,m,t,n,e,r)?u&&(b.lineStart(),b.point(o,a),_=!1):(y||(b.lineStart(),b.point(c[0],c[1])),b.point(m[0],m[1]),u||b.lineEnd(),_=!1)}p=o,g=a,y=u}return x}}var $l={sphere:qf,point:qf,lineStart:function(){$l.point=Rl,$l.lineEnd=Dl},lineEnd:qf,polygonStart:qf,polygonEnd:qf};function Dl(){$l.point=$l.lineEnd=qf}function Rl(t,n){El=t*=mf,Nl=Cf(n*=mf),kl=Tf(n),$l.point=Fl}function Fl(t,n){t*=mf;var e=Cf(n*=mf),r=Tf(n),i=xf(t-El),o=Tf(i),a=r*Cf(i),u=kl*e-Nl*r*o,c=Nl*e+kl*r*o;Sl.add(Mf(zf(a*a+u*u),c)),El=t,Nl=e,kl=r}function ql(t){return Sl=new T,Lf(t,$l),+Sl}var Ul=[null,null],Il={type:"LineString",coordinates:Ul};function Ol(t,n){return Ul[0]=t,Ul[1]=n,ql(Il)}var Bl={Feature:function(t,n){return Ll(t.geometry,n)},FeatureCollection:function(t,n){for(var e=t.features,r=-1,i=e.length;++r0&&(i=Ol(t[o],t[o-1]))>0&&e<=i&&r<=i&&(e+r-i)*(1-Math.pow((e-r)/i,2))df})).map(c)).concat(lt(Af(o/d)*d,i,d).filter((function(t){return xf(t%g)>df})).map(f))}return v.lines=function(){return _().map((function(t){return{type:"LineString",coordinates:t}}))},v.outline=function(){return{type:"Polygon",coordinates:[s(r).concat(l(a).slice(1),s(e).reverse().slice(1),l(u).reverse().slice(1))]}},v.extent=function(t){return arguments.length?v.extentMajor(t).extentMinor(t):v.extentMinor()},v.extentMajor=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],u=+t[0][1],a=+t[1][1],r>e&&(t=r,r=e,e=t),u>a&&(t=u,u=a,a=t),v.precision(y)):[[r,u],[e,a]]},v.extentMinor=function(e){return arguments.length?(n=+e[0][0],t=+e[1][0],o=+e[0][1],i=+e[1][1],n>t&&(e=n,n=t,t=e),o>i&&(e=o,o=i,i=e),v.precision(y)):[[n,o],[t,i]]},v.step=function(t){return arguments.length?v.stepMajor(t).stepMinor(t):v.stepMinor()},v.stepMajor=function(t){return arguments.length?(p=+t[0],g=+t[1],v):[p,g]},v.stepMinor=function(t){return arguments.length?(h=+t[0],d=+t[1],v):[h,d]},v.precision=function(h){return arguments.length?(y=+h,c=Wl(o,i,90),f=Zl(n,t,y),s=Wl(u,a,90),l=Zl(r,e,y),v):y},v.extentMajor([[-180,-90+df],[180,90-df]]).extentMinor([[-180,-80-df],[180,80+df]])}var Ql,Jl,th,nh,eh=t=>t,rh=new T,ih=new T,oh={point:qf,lineStart:qf,lineEnd:qf,polygonStart:function(){oh.lineStart=ah,oh.lineEnd=fh},polygonEnd:function(){oh.lineStart=oh.lineEnd=oh.point=qf,rh.add(xf(ih)),ih=new T},result:function(){var t=rh/2;return rh=new T,t}};function ah(){oh.point=uh}function uh(t,n){oh.point=ch,Ql=th=t,Jl=nh=n}function ch(t,n){ih.add(nh*t-th*n),th=t,nh=n}function fh(){ch(Ql,Jl)}var sh=oh,lh=1/0,hh=lh,dh=-lh,ph=dh,gh={point:function(t,n){tdh&&(dh=t);nph&&(ph=n)},lineStart:qf,lineEnd:qf,polygonStart:qf,polygonEnd:qf,result:function(){var t=[[lh,hh],[dh,ph]];return dh=ph=-(hh=lh=1/0),t}};var yh,vh,_h,bh,mh=gh,xh=0,wh=0,Mh=0,Th=0,Ah=0,Sh=0,Eh=0,Nh=0,kh=0,Ch={point:Ph,lineStart:zh,lineEnd:Rh,polygonStart:function(){Ch.lineStart=Fh,Ch.lineEnd=qh},polygonEnd:function(){Ch.point=Ph,Ch.lineStart=zh,Ch.lineEnd=Rh},result:function(){var t=kh?[Eh/kh,Nh/kh]:Sh?[Th/Sh,Ah/Sh]:Mh?[xh/Mh,wh/Mh]:[NaN,NaN];return xh=wh=Mh=Th=Ah=Sh=Eh=Nh=kh=0,t}};function Ph(t,n){xh+=t,wh+=n,++Mh}function zh(){Ch.point=$h}function $h(t,n){Ch.point=Dh,Ph(_h=t,bh=n)}function Dh(t,n){var e=t-_h,r=n-bh,i=zf(e*e+r*r);Th+=i*(_h+t)/2,Ah+=i*(bh+n)/2,Sh+=i,Ph(_h=t,bh=n)}function Rh(){Ch.point=Ph}function Fh(){Ch.point=Uh}function qh(){Ih(yh,vh)}function Uh(t,n){Ch.point=Ih,Ph(yh=_h=t,vh=bh=n)}function Ih(t,n){var e=t-_h,r=n-bh,i=zf(e*e+r*r);Th+=i*(_h+t)/2,Ah+=i*(bh+n)/2,Sh+=i,Eh+=(i=bh*t-_h*n)*(_h+t),Nh+=i*(bh+n),kh+=3*i,Ph(_h=t,bh=n)}var Oh=Ch;function Bh(t){this._context=t}Bh.prototype={_radius:4.5,pointRadius:function(t){return this._radius=t,this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._context.closePath(),this._point=NaN},point:function(t,n){switch(this._point){case 0:this._context.moveTo(t,n),this._point=1;break;case 1:this._context.lineTo(t,n);break;default:this._context.moveTo(t+this._radius,n),this._context.arc(t,n,this._radius,0,_f)}},result:qf};var Yh,Lh,jh,Hh,Xh,Gh=new T,Vh={point:qf,lineStart:function(){Vh.point=Wh},lineEnd:function(){Yh&&Zh(Lh,jh),Vh.point=qf},polygonStart:function(){Yh=!0},polygonEnd:function(){Yh=null},result:function(){var t=+Gh;return Gh=new T,t}};function Wh(t,n){Vh.point=Zh,Lh=Hh=t,jh=Xh=n}function Zh(t,n){Hh-=t,Xh-=n,Gh.add(zf(Hh*Hh+Xh*Xh)),Hh=t,Xh=n}var Kh=Vh;let Qh,Jh,td,nd;class ed{constructor(t){this._append=null==t?rd:function(t){const n=Math.floor(t);if(!(n>=0))throw new RangeError(`invalid digits: ${t}`);if(n>15)return rd;if(n!==Qh){const t=10**n;Qh=n,Jh=function(n){let e=1;this._+=n[0];for(const r=n.length;e4*n&&g--){var m=a+h,x=u+d,w=c+p,M=zf(m*m+x*x+w*w),T=Rf(w/=M),A=xf(xf(w)-1)n||xf((v*k+_*C)/b-.5)>.3||a*h+u*d+c*p2?t[2]%360*mf:0,k()):[y*bf,v*bf,_*bf]},E.angle=function(t){return arguments.length?(b=t%360*mf,k()):b*bf},E.reflectX=function(t){return arguments.length?(m=t?-1:1,k()):m<0},E.reflectY=function(t){return arguments.length?(x=t?-1:1,k()):x<0},E.precision=function(t){return arguments.length?(a=dd(u,S=t*t),C()):zf(S)},E.fitExtent=function(t,n){return ud(E,t,n)},E.fitSize=function(t,n){return cd(E,t,n)},E.fitWidth=function(t,n){return fd(E,t,n)},E.fitHeight=function(t,n){return sd(E,t,n)},function(){return n=t.apply(this,arguments),E.invert=n.invert&&N,k()}}function _d(t){var n=0,e=gf/3,r=vd(t),i=r(n,e);return i.parallels=function(t){return arguments.length?r(n=t[0]*mf,e=t[1]*mf):[n*bf,e*bf]},i}function bd(t,n){var e=Cf(t),r=(e+Cf(n))/2;if(xf(r)0?n<-yf+df&&(n=-yf+df):n>yf-df&&(n=yf-df);var e=i/kf(Nd(n),r);return[e*Cf(r*t),i-e*Tf(r*t)]}return o.invert=function(t,n){var e=i-n,o=Pf(r)*zf(t*t+e*e),a=Mf(t,xf(e))*Pf(e);return e*r<0&&(a-=gf*Pf(t)*Pf(e)),[a/r,2*wf(kf(i/o,1/r))-yf]},o}function Cd(t,n){return[t,n]}function Pd(t,n){var e=Tf(t),r=t===n?Cf(t):(e-Tf(n))/(n-t),i=e/r+t;if(xf(r)=0;)n+=e[r].value;else n=1;t.value=n}function Gd(t,n){t instanceof Map?(t=[void 0,t],void 0===n&&(n=Wd)):void 0===n&&(n=Vd);for(var e,r,i,o,a,u=new Qd(t),c=[u];e=c.pop();)if((i=n(e.data))&&(a=(i=Array.from(i)).length))for(e.children=i,o=a-1;o>=0;--o)c.push(r=i[o]=new Qd(i[o])),r.parent=e,r.depth=e.depth+1;return u.eachBefore(Kd)}function Vd(t){return t.children}function Wd(t){return Array.isArray(t)?t[1]:null}function Zd(t){void 0!==t.data.value&&(t.value=t.data.value),t.data=t.data.data}function Kd(t){var n=0;do{t.height=n}while((t=t.parent)&&t.height<++n)}function Qd(t){this.data=t,this.depth=this.height=0,this.parent=null}function Jd(t){return null==t?null:tp(t)}function tp(t){if("function"!=typeof t)throw new Error;return t}function np(){return 0}function ep(t){return function(){return t}}qd.invert=function(t,n){for(var e,r=n,i=r*r,o=i*i*i,a=0;a<12&&(o=(i=(r-=e=(r*(zd+$d*i+o*(Dd+Rd*i))-n)/(zd+3*$d*i+o*(7*Dd+9*Rd*i)))*r)*i*i,!(xf(e)df&&--i>0);return[t/(.8707+(o=r*r)*(o*(o*o*o*(.003971-.001529*o)-.013791)-.131979)),r]},Od.invert=Md(Rf),Bd.invert=Md((function(t){return 2*wf(t)})),Yd.invert=function(t,n){return[-n,2*wf(Sf(t))-yf]},Qd.prototype=Gd.prototype={constructor:Qd,count:function(){return this.eachAfter(Xd)},each:function(t,n){let e=-1;for(const r of this)t.call(n,r,++e,this);return this},eachAfter:function(t,n){for(var e,r,i,o=this,a=[o],u=[],c=-1;o=a.pop();)if(u.push(o),e=o.children)for(r=0,i=e.length;r=0;--r)o.push(e[r]);return this},find:function(t,n){let e=-1;for(const r of this)if(t.call(n,r,++e,this))return r},sum:function(t){return this.eachAfter((function(n){for(var e=+t(n.data)||0,r=n.children,i=r&&r.length;--i>=0;)e+=r[i].value;n.value=e}))},sort:function(t){return this.eachBefore((function(n){n.children&&n.children.sort(t)}))},path:function(t){for(var n=this,e=function(t,n){if(t===n)return t;var e=t.ancestors(),r=n.ancestors(),i=null;t=e.pop(),n=r.pop();for(;t===n;)i=t,t=e.pop(),n=r.pop();return i}(n,t),r=[n];n!==e;)n=n.parent,r.push(n);for(var i=r.length;t!==e;)r.splice(i,0,t),t=t.parent;return r},ancestors:function(){for(var t=this,n=[t];t=t.parent;)n.push(t);return n},descendants:function(){return Array.from(this)},leaves:function(){var t=[];return this.eachBefore((function(n){n.children||t.push(n)})),t},links:function(){var t=this,n=[];return t.each((function(e){e!==t&&n.push({source:e.parent,target:e})})),n},copy:function(){return Gd(this).eachBefore(Zd)},[Symbol.iterator]:function*(){var t,n,e,r,i=this,o=[i];do{for(t=o.reverse(),o=[];i=t.pop();)if(yield i,n=i.children)for(e=0,r=n.length;e(t=(rp*t+ip)%op)/op}function up(t,n){for(var e,r,i=0,o=(t=function(t,n){let e,r,i=t.length;for(;i;)r=n()*i--|0,e=t[i],t[i]=t[r],t[r]=e;return t}(Array.from(t),n)).length,a=[];i0&&e*e>r*r+i*i}function lp(t,n){for(var e=0;e1e-6?(E+Math.sqrt(E*E-4*S*N))/(2*S):N/E);return{x:r+w+M*k,y:i+T+A*k,r:k}}function gp(t,n,e){var r,i,o,a,u=t.x-n.x,c=t.y-n.y,f=u*u+c*c;f?(i=n.r+e.r,i*=i,a=t.r+e.r,i>(a*=a)?(r=(f+a-i)/(2*f),o=Math.sqrt(Math.max(0,a/f-r*r)),e.x=t.x-r*u-o*c,e.y=t.y-r*c+o*u):(r=(f+i-a)/(2*f),o=Math.sqrt(Math.max(0,i/f-r*r)),e.x=n.x+r*u-o*c,e.y=n.y+r*c+o*u)):(e.x=n.x+e.r,e.y=n.y)}function yp(t,n){var e=t.r+n.r-1e-6,r=n.x-t.x,i=n.y-t.y;return e>0&&e*e>r*r+i*i}function vp(t){var n=t._,e=t.next._,r=n.r+e.r,i=(n.x*e.r+e.x*n.r)/r,o=(n.y*e.r+e.y*n.r)/r;return i*i+o*o}function _p(t){this._=t,this.next=null,this.previous=null}function bp(t,n){if(!(o=(t=function(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}(t)).length))return 0;var e,r,i,o,a,u,c,f,s,l,h;if((e=t[0]).x=0,e.y=0,!(o>1))return e.r;if(r=t[1],e.x=-r.r,r.x=e.r,r.y=0,!(o>2))return e.r+r.r;gp(r,e,i=t[2]),e=new _p(e),r=new _p(r),i=new _p(i),e.next=i.previous=r,r.next=e.previous=i,i.next=r.previous=e;t:for(c=3;c1&&!zp(t,n););return t.slice(0,n)}function zp(t,n){if("/"===t[n]){let e=0;for(;n>0&&"\\"===t[--n];)++e;if(!(1&e))return!0}return!1}function $p(t,n){return t.parent===n.parent?1:2}function Dp(t){var n=t.children;return n?n[0]:t.t}function Rp(t){var n=t.children;return n?n[n.length-1]:t.t}function Fp(t,n,e){var r=e/(n.i-t.i);n.c-=r,n.s+=e,t.c+=r,n.z+=e,n.m+=e}function qp(t,n,e){return t.a.parent===n.parent?t.a:e}function Up(t,n){this._=t,this.parent=null,this.children=null,this.A=null,this.a=this,this.z=0,this.m=0,this.c=0,this.s=0,this.t=null,this.i=n}function Ip(t,n,e,r,i){for(var o,a=t.children,u=-1,c=a.length,f=t.value&&(i-e)/t.value;++uh&&(h=u),y=s*s*g,(d=Math.max(h/y,y/l))>p){s-=u;break}p=d}v.push(a={value:s,dice:c1?n:1)},e}(Op);var Lp=function t(n){function e(t,e,r,i,o){if((a=t._squarify)&&a.ratio===n)for(var a,u,c,f,s,l=-1,h=a.length,d=t.value;++l1?n:1)},e}(Op);function jp(t,n,e){return(n[0]-t[0])*(e[1]-t[1])-(n[1]-t[1])*(e[0]-t[0])}function Hp(t,n){return t[0]-n[0]||t[1]-n[1]}function Xp(t){const n=t.length,e=[0,1];let r,i=2;for(r=2;r1&&jp(t[e[i-2]],t[e[i-1]],t[r])<=0;)--i;e[i++]=r}return e.slice(0,i)}var Gp=Math.random,Vp=function t(n){function e(t,e){return t=null==t?0:+t,e=null==e?1:+e,1===arguments.length?(e=t,t=0):e-=t,function(){return n()*e+t}}return e.source=t,e}(Gp),Wp=function t(n){function e(t,e){return arguments.length<2&&(e=t,t=0),t=Math.floor(t),e=Math.floor(e)-t,function(){return Math.floor(n()*e+t)}}return e.source=t,e}(Gp),Zp=function t(n){function e(t,e){var r,i;return t=null==t?0:+t,e=null==e?1:+e,function(){var o;if(null!=r)o=r,r=null;else do{r=2*n()-1,o=2*n()-1,i=r*r+o*o}while(!i||i>1);return t+e*o*Math.sqrt(-2*Math.log(i)/i)}}return e.source=t,e}(Gp),Kp=function t(n){var e=Zp.source(n);function r(){var t=e.apply(this,arguments);return function(){return Math.exp(t())}}return r.source=t,r}(Gp),Qp=function t(n){function e(t){return(t=+t)<=0?()=>0:function(){for(var e=0,r=t;r>1;--r)e+=n();return e+r*n()}}return e.source=t,e}(Gp),Jp=function t(n){var e=Qp.source(n);function r(t){if(0==(t=+t))return n;var r=e(t);return function(){return r()/t}}return r.source=t,r}(Gp),tg=function t(n){function e(t){return function(){return-Math.log1p(-n())/t}}return e.source=t,e}(Gp),ng=function t(n){function e(t){if((t=+t)<0)throw new RangeError("invalid alpha");return t=1/-t,function(){return Math.pow(1-n(),t)}}return e.source=t,e}(Gp),eg=function t(n){function e(t){if((t=+t)<0||t>1)throw new RangeError("invalid p");return function(){return Math.floor(n()+t)}}return e.source=t,e}(Gp),rg=function t(n){function e(t){if((t=+t)<0||t>1)throw new RangeError("invalid p");return 0===t?()=>1/0:1===t?()=>1:(t=Math.log1p(-t),function(){return 1+Math.floor(Math.log1p(-n())/t)})}return e.source=t,e}(Gp),ig=function t(n){var e=Zp.source(n)();function r(t,r){if((t=+t)<0)throw new RangeError("invalid k");if(0===t)return()=>0;if(r=null==r?1:+r,1===t)return()=>-Math.log1p(-n())*r;var i=(t<1?t+1:t)-1/3,o=1/(3*Math.sqrt(i)),a=t<1?()=>Math.pow(n(),1/t):()=>1;return function(){do{do{var t=e(),u=1+o*t}while(u<=0);u*=u*u;var c=1-n()}while(c>=1-.0331*t*t*t*t&&Math.log(c)>=.5*t*t+i*(1-u+Math.log(u)));return i*u*a()*r}}return r.source=t,r}(Gp),og=function t(n){var e=ig.source(n);function r(t,n){var r=e(t),i=e(n);return function(){var t=r();return 0===t?0:t/(t+i())}}return r.source=t,r}(Gp),ag=function t(n){var e=rg.source(n),r=og.source(n);function i(t,n){return t=+t,(n=+n)>=1?()=>t:n<=0?()=>0:function(){for(var i=0,o=t,a=n;o*a>16&&o*(1-a)>16;){var u=Math.floor((o+1)*a),c=r(u,o-u+1)();c<=a?(i+=u,o-=u,a=(a-c)/(1-c)):(o=u-1,a/=c)}for(var f=a<.5,s=e(f?a:1-a),l=s(),h=0;l<=o;++h)l+=s();return i+(f?h:o-h)}}return i.source=t,i}(Gp),ug=function t(n){function e(t,e,r){var i;return 0==(t=+t)?i=t=>-Math.log(t):(t=1/t,i=n=>Math.pow(n,t)),e=null==e?0:+e,r=null==r?1:+r,function(){return e+r*i(-Math.log1p(-n()))}}return e.source=t,e}(Gp),cg=function t(n){function e(t,e){return t=null==t?0:+t,e=null==e?1:+e,function(){return t+e*Math.tan(Math.PI*n())}}return e.source=t,e}(Gp),fg=function t(n){function e(t,e){return t=null==t?0:+t,e=null==e?1:+e,function(){var r=n();return t+e*Math.log(r/(1-r))}}return e.source=t,e}(Gp),sg=function t(n){var e=ig.source(n),r=ag.source(n);function i(t){return function(){for(var i=0,o=t;o>16;){var a=Math.floor(.875*o),u=e(a)();if(u>o)return i+r(a-1,o/u)();i+=a,o-=u}for(var c=-Math.log1p(-n()),f=0;c<=o;++f)c-=Math.log1p(-n());return i+f}}return i.source=t,i}(Gp);const lg=1/4294967296;function hg(t,n){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(n).domain(t)}return this}function dg(t,n){switch(arguments.length){case 0:break;case 1:"function"==typeof t?this.interpolator(t):this.range(t);break;default:this.domain(t),"function"==typeof n?this.interpolator(n):this.range(n)}return this}const pg=Symbol("implicit");function gg(){var t=new InternMap,n=[],e=[],r=pg;function i(i){let o=t.get(i);if(void 0===o){if(r!==pg)return r;t.set(i,o=n.push(i)-1)}return e[o%e.length]}return i.domain=function(e){if(!arguments.length)return n.slice();n=[],t=new InternMap;for(const r of e)t.has(r)||t.set(r,n.push(r)-1);return i},i.range=function(t){return arguments.length?(e=Array.from(t),i):e.slice()},i.unknown=function(t){return arguments.length?(r=t,i):r},i.copy=function(){return gg(n,e).unknown(r)},hg.apply(i,arguments),i}function yg(){var t,n,e=gg().unknown(void 0),r=e.domain,i=e.range,o=0,a=1,u=!1,c=0,f=0,s=.5;function l(){var e=r().length,l=an&&(e=t,t=n,n=e),function(e){return Math.max(t,Math.min(n,e))}}(a[0],a[t-1])),r=t>2?Mg:wg,i=o=null,l}function l(n){return null==n||isNaN(n=+n)?e:(i||(i=r(a.map(t),u,c)))(t(f(n)))}return l.invert=function(e){return f(n((o||(o=r(u,a.map(t),Yr)))(e)))},l.domain=function(t){return arguments.length?(a=Array.from(t,_g),s()):a.slice()},l.range=function(t){return arguments.length?(u=Array.from(t),s()):u.slice()},l.rangeRound=function(t){return u=Array.from(t),c=Vr,s()},l.clamp=function(t){return arguments.length?(f=!!t||mg,s()):f!==mg},l.interpolate=function(t){return arguments.length?(c=t,s()):c},l.unknown=function(t){return arguments.length?(e=t,l):e},function(e,r){return t=e,n=r,s()}}function Sg(){return Ag()(mg,mg)}function Eg(n,e,r,i){var o,a=W(n,e,r);switch((i=Jc(null==i?",f":i)).type){case"s":var u=Math.max(Math.abs(n),Math.abs(e));return null!=i.precision||isNaN(o=lf(a,u))||(i.precision=o),t.formatPrefix(i,u);case"":case"e":case"g":case"p":case"r":null!=i.precision||isNaN(o=hf(a,Math.max(Math.abs(n),Math.abs(e))))||(i.precision=o-("e"===i.type));break;case"f":case"%":null!=i.precision||isNaN(o=sf(a))||(i.precision=o-2*("%"===i.type))}return t.format(i)}function Ng(t){var n=t.domain;return t.ticks=function(t){var e=n();return G(e[0],e[e.length-1],null==t?10:t)},t.tickFormat=function(t,e){var r=n();return Eg(r[0],r[r.length-1],null==t?10:t,e)},t.nice=function(e){null==e&&(e=10);var r,i,o=n(),a=0,u=o.length-1,c=o[a],f=o[u],s=10;for(f0;){if((i=V(c,f,e))===r)return o[a]=c,o[u]=f,n(o);if(i>0)c=Math.floor(c/i)*i,f=Math.ceil(f/i)*i;else{if(!(i<0))break;c=Math.ceil(c*i)/i,f=Math.floor(f*i)/i}r=i}return t},t}function kg(t,n){var e,r=0,i=(t=t.slice()).length-1,o=t[r],a=t[i];return a-t(-n,e)}function Fg(n){const e=n(Cg,Pg),r=e.domain;let i,o,a=10;function u(){return i=function(t){return t===Math.E?Math.log:10===t&&Math.log10||2===t&&Math.log2||(t=Math.log(t),n=>Math.log(n)/t)}(a),o=function(t){return 10===t?Dg:t===Math.E?Math.exp:n=>Math.pow(t,n)}(a),r()[0]<0?(i=Rg(i),o=Rg(o),n(zg,$g)):n(Cg,Pg),e}return e.base=function(t){return arguments.length?(a=+t,u()):a},e.domain=function(t){return arguments.length?(r(t),u()):r()},e.ticks=t=>{const n=r();let e=n[0],u=n[n.length-1];const c=u0){for(;l<=h;++l)for(f=1;fu)break;p.push(s)}}else for(;l<=h;++l)for(f=a-1;f>=1;--f)if(s=l>0?f/o(-l):f*o(l),!(su)break;p.push(s)}2*p.length{if(null==n&&(n=10),null==r&&(r=10===a?"s":","),"function"!=typeof r&&(a%1||null!=(r=Jc(r)).precision||(r.trim=!0),r=t.format(r)),n===1/0)return r;const u=Math.max(1,a*n/e.ticks().length);return t=>{let n=t/o(Math.round(i(t)));return n*ar(kg(r(),{floor:t=>o(Math.floor(i(t))),ceil:t=>o(Math.ceil(i(t)))})),e}function qg(t){return function(n){return Math.sign(n)*Math.log1p(Math.abs(n/t))}}function Ug(t){return function(n){return Math.sign(n)*Math.expm1(Math.abs(n))*t}}function Ig(t){var n=1,e=t(qg(n),Ug(n));return e.constant=function(e){return arguments.length?t(qg(n=+e),Ug(n)):n},Ng(e)}function Og(t){return function(n){return n<0?-Math.pow(-n,t):Math.pow(n,t)}}function Bg(t){return t<0?-Math.sqrt(-t):Math.sqrt(t)}function Yg(t){return t<0?-t*t:t*t}function Lg(t){var n=t(mg,mg),e=1;return n.exponent=function(n){return arguments.length?1===(e=+n)?t(mg,mg):.5===e?t(Bg,Yg):t(Og(e),Og(1/e)):e},Ng(n)}function jg(){var t=Lg(Ag());return t.copy=function(){return Tg(t,jg()).exponent(t.exponent())},hg.apply(t,arguments),t}function Hg(t){return Math.sign(t)*t*t}const Xg=new Date,Gg=new Date;function Vg(t,n,e,r){function i(n){return t(n=0===arguments.length?new Date:new Date(+n)),n}return i.floor=n=>(t(n=new Date(+n)),n),i.ceil=e=>(t(e=new Date(e-1)),n(e,1),t(e),e),i.round=t=>{const n=i(t),e=i.ceil(t);return t-n(n(t=new Date(+t),null==e?1:Math.floor(e)),t),i.range=(e,r,o)=>{const a=[];if(e=i.ceil(e),o=null==o?1:Math.floor(o),!(e0))return a;let u;do{a.push(u=new Date(+e)),n(e,o),t(e)}while(uVg((n=>{if(n>=n)for(;t(n),!e(n);)n.setTime(n-1)}),((t,r)=>{if(t>=t)if(r<0)for(;++r<=0;)for(;n(t,-1),!e(t););else for(;--r>=0;)for(;n(t,1),!e(t););})),e&&(i.count=(n,r)=>(Xg.setTime(+n),Gg.setTime(+r),t(Xg),t(Gg),Math.floor(e(Xg,Gg))),i.every=t=>(t=Math.floor(t),isFinite(t)&&t>0?t>1?i.filter(r?n=>r(n)%t==0:n=>i.count(0,n)%t==0):i:null)),i}const Wg=Vg((()=>{}),((t,n)=>{t.setTime(+t+n)}),((t,n)=>n-t));Wg.every=t=>(t=Math.floor(t),isFinite(t)&&t>0?t>1?Vg((n=>{n.setTime(Math.floor(n/t)*t)}),((n,e)=>{n.setTime(+n+e*t)}),((n,e)=>(e-n)/t)):Wg:null);const Zg=Wg.range,Kg=1e3,Qg=6e4,Jg=36e5,ty=864e5,ny=6048e5,ey=2592e6,ry=31536e6,iy=Vg((t=>{t.setTime(t-t.getMilliseconds())}),((t,n)=>{t.setTime(+t+n*Kg)}),((t,n)=>(n-t)/Kg),(t=>t.getUTCSeconds())),oy=iy.range,ay=Vg((t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*Kg)}),((t,n)=>{t.setTime(+t+n*Qg)}),((t,n)=>(n-t)/Qg),(t=>t.getMinutes())),uy=ay.range,cy=Vg((t=>{t.setUTCSeconds(0,0)}),((t,n)=>{t.setTime(+t+n*Qg)}),((t,n)=>(n-t)/Qg),(t=>t.getUTCMinutes())),fy=cy.range,sy=Vg((t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*Kg-t.getMinutes()*Qg)}),((t,n)=>{t.setTime(+t+n*Jg)}),((t,n)=>(n-t)/Jg),(t=>t.getHours())),ly=sy.range,hy=Vg((t=>{t.setUTCMinutes(0,0,0)}),((t,n)=>{t.setTime(+t+n*Jg)}),((t,n)=>(n-t)/Jg),(t=>t.getUTCHours())),dy=hy.range,py=Vg((t=>t.setHours(0,0,0,0)),((t,n)=>t.setDate(t.getDate()+n)),((t,n)=>(n-t-(n.getTimezoneOffset()-t.getTimezoneOffset())*Qg)/ty),(t=>t.getDate()-1)),gy=py.range,yy=Vg((t=>{t.setUTCHours(0,0,0,0)}),((t,n)=>{t.setUTCDate(t.getUTCDate()+n)}),((t,n)=>(n-t)/ty),(t=>t.getUTCDate()-1)),vy=yy.range,_y=Vg((t=>{t.setUTCHours(0,0,0,0)}),((t,n)=>{t.setUTCDate(t.getUTCDate()+n)}),((t,n)=>(n-t)/ty),(t=>Math.floor(t/ty))),by=_y.range;function my(t){return Vg((n=>{n.setDate(n.getDate()-(n.getDay()+7-t)%7),n.setHours(0,0,0,0)}),((t,n)=>{t.setDate(t.getDate()+7*n)}),((t,n)=>(n-t-(n.getTimezoneOffset()-t.getTimezoneOffset())*Qg)/ny))}const xy=my(0),wy=my(1),My=my(2),Ty=my(3),Ay=my(4),Sy=my(5),Ey=my(6),Ny=xy.range,ky=wy.range,Cy=My.range,Py=Ty.range,zy=Ay.range,$y=Sy.range,Dy=Ey.range;function Ry(t){return Vg((n=>{n.setUTCDate(n.getUTCDate()-(n.getUTCDay()+7-t)%7),n.setUTCHours(0,0,0,0)}),((t,n)=>{t.setUTCDate(t.getUTCDate()+7*n)}),((t,n)=>(n-t)/ny))}const Fy=Ry(0),qy=Ry(1),Uy=Ry(2),Iy=Ry(3),Oy=Ry(4),By=Ry(5),Yy=Ry(6),Ly=Fy.range,jy=qy.range,Hy=Uy.range,Xy=Iy.range,Gy=Oy.range,Vy=By.range,Wy=Yy.range,Zy=Vg((t=>{t.setDate(1),t.setHours(0,0,0,0)}),((t,n)=>{t.setMonth(t.getMonth()+n)}),((t,n)=>n.getMonth()-t.getMonth()+12*(n.getFullYear()-t.getFullYear())),(t=>t.getMonth())),Ky=Zy.range,Qy=Vg((t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)}),((t,n)=>{t.setUTCMonth(t.getUTCMonth()+n)}),((t,n)=>n.getUTCMonth()-t.getUTCMonth()+12*(n.getUTCFullYear()-t.getUTCFullYear())),(t=>t.getUTCMonth())),Jy=Qy.range,tv=Vg((t=>{t.setMonth(0,1),t.setHours(0,0,0,0)}),((t,n)=>{t.setFullYear(t.getFullYear()+n)}),((t,n)=>n.getFullYear()-t.getFullYear()),(t=>t.getFullYear()));tv.every=t=>isFinite(t=Math.floor(t))&&t>0?Vg((n=>{n.setFullYear(Math.floor(n.getFullYear()/t)*t),n.setMonth(0,1),n.setHours(0,0,0,0)}),((n,e)=>{n.setFullYear(n.getFullYear()+e*t)})):null;const nv=tv.range,ev=Vg((t=>{t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),((t,n)=>{t.setUTCFullYear(t.getUTCFullYear()+n)}),((t,n)=>n.getUTCFullYear()-t.getUTCFullYear()),(t=>t.getUTCFullYear()));ev.every=t=>isFinite(t=Math.floor(t))&&t>0?Vg((n=>{n.setUTCFullYear(Math.floor(n.getUTCFullYear()/t)*t),n.setUTCMonth(0,1),n.setUTCHours(0,0,0,0)}),((n,e)=>{n.setUTCFullYear(n.getUTCFullYear()+e*t)})):null;const rv=ev.range;function iv(t,n,e,i,o,a){const u=[[iy,1,Kg],[iy,5,5e3],[iy,15,15e3],[iy,30,3e4],[a,1,Qg],[a,5,3e5],[a,15,9e5],[a,30,18e5],[o,1,Jg],[o,3,108e5],[o,6,216e5],[o,12,432e5],[i,1,ty],[i,2,1728e5],[e,1,ny],[n,1,ey],[n,3,7776e6],[t,1,ry]];function c(n,e,i){const o=Math.abs(e-n)/i,a=r((([,,t])=>t)).right(u,o);if(a===u.length)return t.every(W(n/ry,e/ry,i));if(0===a)return Wg.every(Math.max(W(n,e,i),1));const[c,f]=u[o/u[a-1][2]=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:k_,s:C_,S:Zv,u:Kv,U:Qv,V:t_,w:n_,W:e_,x:null,X:null,y:r_,Y:o_,Z:u_,"%":N_},m={a:function(t){return a[t.getUTCDay()]},A:function(t){return o[t.getUTCDay()]},b:function(t){return c[t.getUTCMonth()]},B:function(t){return u[t.getUTCMonth()]},c:null,d:c_,e:c_,f:d_,g:T_,G:S_,H:f_,I:s_,j:l_,L:h_,m:p_,M:g_,p:function(t){return i[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:k_,s:C_,S:y_,u:v_,U:__,V:m_,w:x_,W:w_,x:null,X:null,y:M_,Y:A_,Z:E_,"%":N_},x={a:function(t,n,e){var r=d.exec(n.slice(e));return r?(t.w=p.get(r[0].toLowerCase()),e+r[0].length):-1},A:function(t,n,e){var r=l.exec(n.slice(e));return r?(t.w=h.get(r[0].toLowerCase()),e+r[0].length):-1},b:function(t,n,e){var r=v.exec(n.slice(e));return r?(t.m=_.get(r[0].toLowerCase()),e+r[0].length):-1},B:function(t,n,e){var r=g.exec(n.slice(e));return r?(t.m=y.get(r[0].toLowerCase()),e+r[0].length):-1},c:function(t,e,r){return T(t,n,e,r)},d:zv,e:zv,f:Uv,g:Nv,G:Ev,H:Dv,I:Dv,j:$v,L:qv,m:Pv,M:Rv,p:function(t,n,e){var r=f.exec(n.slice(e));return r?(t.p=s.get(r[0].toLowerCase()),e+r[0].length):-1},q:Cv,Q:Ov,s:Bv,S:Fv,u:Mv,U:Tv,V:Av,w:wv,W:Sv,x:function(t,n,r){return T(t,e,n,r)},X:function(t,n,e){return T(t,r,n,e)},y:Nv,Y:Ev,Z:kv,"%":Iv};function w(t,n){return function(e){var r,i,o,a=[],u=-1,c=0,f=t.length;for(e instanceof Date||(e=new Date(+e));++u53)return null;"w"in o||(o.w=1),"Z"in o?(i=(r=sv(lv(o.y,0,1))).getUTCDay(),r=i>4||0===i?qy.ceil(r):qy(r),r=yy.offset(r,7*(o.V-1)),o.y=r.getUTCFullYear(),o.m=r.getUTCMonth(),o.d=r.getUTCDate()+(o.w+6)%7):(i=(r=fv(lv(o.y,0,1))).getDay(),r=i>4||0===i?wy.ceil(r):wy(r),r=py.offset(r,7*(o.V-1)),o.y=r.getFullYear(),o.m=r.getMonth(),o.d=r.getDate()+(o.w+6)%7)}else("W"in o||"U"in o)&&("w"in o||(o.w="u"in o?o.u%7:"W"in o?1:0),i="Z"in o?sv(lv(o.y,0,1)).getUTCDay():fv(lv(o.y,0,1)).getDay(),o.m=0,o.d="W"in o?(o.w+6)%7+7*o.W-(i+5)%7:o.w+7*o.U-(i+6)%7);return"Z"in o?(o.H+=o.Z/100|0,o.M+=o.Z%100,sv(o)):fv(o)}}function T(t,n,e,r){for(var i,o,a=0,u=n.length,c=e.length;a=c)return-1;if(37===(i=n.charCodeAt(a++))){if(i=n.charAt(a++),!(o=x[i in pv?n.charAt(a++):i])||(r=o(t,e,r))<0)return-1}else if(i!=e.charCodeAt(r++))return-1}return r}return b.x=w(e,b),b.X=w(r,b),b.c=w(n,b),m.x=w(e,m),m.X=w(r,m),m.c=w(n,m),{format:function(t){var n=w(t+="",b);return n.toString=function(){return t},n},parse:function(t){var n=M(t+="",!1);return n.toString=function(){return t},n},utcFormat:function(t){var n=w(t+="",m);return n.toString=function(){return t},n},utcParse:function(t){var n=M(t+="",!0);return n.toString=function(){return t},n}}}var dv,pv={"-":"",_:" ",0:"0"},gv=/^\s*\d+/,yv=/^%/,vv=/[\\^$*+?|[\]().{}]/g;function _v(t,n,e){var r=t<0?"-":"",i=(r?-t:t)+"",o=i.length;return r+(o[t.toLowerCase(),n])))}function wv(t,n,e){var r=gv.exec(n.slice(e,e+1));return r?(t.w=+r[0],e+r[0].length):-1}function Mv(t,n,e){var r=gv.exec(n.slice(e,e+1));return r?(t.u=+r[0],e+r[0].length):-1}function Tv(t,n,e){var r=gv.exec(n.slice(e,e+2));return r?(t.U=+r[0],e+r[0].length):-1}function Av(t,n,e){var r=gv.exec(n.slice(e,e+2));return r?(t.V=+r[0],e+r[0].length):-1}function Sv(t,n,e){var r=gv.exec(n.slice(e,e+2));return r?(t.W=+r[0],e+r[0].length):-1}function Ev(t,n,e){var r=gv.exec(n.slice(e,e+4));return r?(t.y=+r[0],e+r[0].length):-1}function Nv(t,n,e){var r=gv.exec(n.slice(e,e+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),e+r[0].length):-1}function kv(t,n,e){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(n.slice(e,e+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),e+r[0].length):-1}function Cv(t,n,e){var r=gv.exec(n.slice(e,e+1));return r?(t.q=3*r[0]-3,e+r[0].length):-1}function Pv(t,n,e){var r=gv.exec(n.slice(e,e+2));return r?(t.m=r[0]-1,e+r[0].length):-1}function zv(t,n,e){var r=gv.exec(n.slice(e,e+2));return r?(t.d=+r[0],e+r[0].length):-1}function $v(t,n,e){var r=gv.exec(n.slice(e,e+3));return r?(t.m=0,t.d=+r[0],e+r[0].length):-1}function Dv(t,n,e){var r=gv.exec(n.slice(e,e+2));return r?(t.H=+r[0],e+r[0].length):-1}function Rv(t,n,e){var r=gv.exec(n.slice(e,e+2));return r?(t.M=+r[0],e+r[0].length):-1}function Fv(t,n,e){var r=gv.exec(n.slice(e,e+2));return r?(t.S=+r[0],e+r[0].length):-1}function qv(t,n,e){var r=gv.exec(n.slice(e,e+3));return r?(t.L=+r[0],e+r[0].length):-1}function Uv(t,n,e){var r=gv.exec(n.slice(e,e+6));return r?(t.L=Math.floor(r[0]/1e3),e+r[0].length):-1}function Iv(t,n,e){var r=yv.exec(n.slice(e,e+1));return r?e+r[0].length:-1}function Ov(t,n,e){var r=gv.exec(n.slice(e));return r?(t.Q=+r[0],e+r[0].length):-1}function Bv(t,n,e){var r=gv.exec(n.slice(e));return r?(t.s=+r[0],e+r[0].length):-1}function Yv(t,n){return _v(t.getDate(),n,2)}function Lv(t,n){return _v(t.getHours(),n,2)}function jv(t,n){return _v(t.getHours()%12||12,n,2)}function Hv(t,n){return _v(1+py.count(tv(t),t),n,3)}function Xv(t,n){return _v(t.getMilliseconds(),n,3)}function Gv(t,n){return Xv(t,n)+"000"}function Vv(t,n){return _v(t.getMonth()+1,n,2)}function Wv(t,n){return _v(t.getMinutes(),n,2)}function Zv(t,n){return _v(t.getSeconds(),n,2)}function Kv(t){var n=t.getDay();return 0===n?7:n}function Qv(t,n){return _v(xy.count(tv(t)-1,t),n,2)}function Jv(t){var n=t.getDay();return n>=4||0===n?Ay(t):Ay.ceil(t)}function t_(t,n){return t=Jv(t),_v(Ay.count(tv(t),t)+(4===tv(t).getDay()),n,2)}function n_(t){return t.getDay()}function e_(t,n){return _v(wy.count(tv(t)-1,t),n,2)}function r_(t,n){return _v(t.getFullYear()%100,n,2)}function i_(t,n){return _v((t=Jv(t)).getFullYear()%100,n,2)}function o_(t,n){return _v(t.getFullYear()%1e4,n,4)}function a_(t,n){var e=t.getDay();return _v((t=e>=4||0===e?Ay(t):Ay.ceil(t)).getFullYear()%1e4,n,4)}function u_(t){var n=t.getTimezoneOffset();return(n>0?"-":(n*=-1,"+"))+_v(n/60|0,"0",2)+_v(n%60,"0",2)}function c_(t,n){return _v(t.getUTCDate(),n,2)}function f_(t,n){return _v(t.getUTCHours(),n,2)}function s_(t,n){return _v(t.getUTCHours()%12||12,n,2)}function l_(t,n){return _v(1+yy.count(ev(t),t),n,3)}function h_(t,n){return _v(t.getUTCMilliseconds(),n,3)}function d_(t,n){return h_(t,n)+"000"}function p_(t,n){return _v(t.getUTCMonth()+1,n,2)}function g_(t,n){return _v(t.getUTCMinutes(),n,2)}function y_(t,n){return _v(t.getUTCSeconds(),n,2)}function v_(t){var n=t.getUTCDay();return 0===n?7:n}function __(t,n){return _v(Fy.count(ev(t)-1,t),n,2)}function b_(t){var n=t.getUTCDay();return n>=4||0===n?Oy(t):Oy.ceil(t)}function m_(t,n){return t=b_(t),_v(Oy.count(ev(t),t)+(4===ev(t).getUTCDay()),n,2)}function x_(t){return t.getUTCDay()}function w_(t,n){return _v(qy.count(ev(t)-1,t),n,2)}function M_(t,n){return _v(t.getUTCFullYear()%100,n,2)}function T_(t,n){return _v((t=b_(t)).getUTCFullYear()%100,n,2)}function A_(t,n){return _v(t.getUTCFullYear()%1e4,n,4)}function S_(t,n){var e=t.getUTCDay();return _v((t=e>=4||0===e?Oy(t):Oy.ceil(t)).getUTCFullYear()%1e4,n,4)}function E_(){return"+0000"}function N_(){return"%"}function k_(t){return+t}function C_(t){return Math.floor(+t/1e3)}function P_(n){return dv=hv(n),t.timeFormat=dv.format,t.timeParse=dv.parse,t.utcFormat=dv.utcFormat,t.utcParse=dv.utcParse,dv}t.timeFormat=void 0,t.timeParse=void 0,t.utcFormat=void 0,t.utcParse=void 0,P_({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});var z_="%Y-%m-%dT%H:%M:%S.%LZ";var $_=Date.prototype.toISOString?function(t){return t.toISOString()}:t.utcFormat(z_),D_=$_;var R_=+new Date("2000-01-01T00:00:00.000Z")?function(t){var n=new Date(t);return isNaN(n)?null:n}:t.utcParse(z_),F_=R_;function q_(t){return new Date(t)}function U_(t){return t instanceof Date?+t:+new Date(+t)}function I_(t,n,e,r,i,o,a,u,c,f){var s=Sg(),l=s.invert,h=s.domain,d=f(".%L"),p=f(":%S"),g=f("%I:%M"),y=f("%I %p"),v=f("%a %d"),_=f("%b %d"),b=f("%B"),m=f("%Y");function x(t){return(c(t)Fr(t[t.length-1]),ib=new Array(3).concat("d8b365f5f5f55ab4ac","a6611adfc27d80cdc1018571","a6611adfc27df5f5f580cdc1018571","8c510ad8b365f6e8c3c7eae55ab4ac01665e","8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e","8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e","8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e","5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30","5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30").map(H_),ob=rb(ib),ab=new Array(3).concat("af8dc3f7f7f77fbf7b","7b3294c2a5cfa6dba0008837","7b3294c2a5cff7f7f7a6dba0008837","762a83af8dc3e7d4e8d9f0d37fbf7b1b7837","762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837","762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837","762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837","40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b","40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b").map(H_),ub=rb(ab),cb=new Array(3).concat("e9a3c9f7f7f7a1d76a","d01c8bf1b6dab8e1864dac26","d01c8bf1b6daf7f7f7b8e1864dac26","c51b7de9a3c9fde0efe6f5d0a1d76a4d9221","c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221","c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221","c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221","8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419","8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419").map(H_),fb=rb(cb),sb=new Array(3).concat("998ec3f7f7f7f1a340","5e3c99b2abd2fdb863e66101","5e3c99b2abd2f7f7f7fdb863e66101","542788998ec3d8daebfee0b6f1a340b35806","542788998ec3d8daebf7f7f7fee0b6f1a340b35806","5427888073acb2abd2d8daebfee0b6fdb863e08214b35806","5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806","2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08","2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08").map(H_),lb=rb(sb),hb=new Array(3).concat("ef8a62f7f7f767a9cf","ca0020f4a58292c5de0571b0","ca0020f4a582f7f7f792c5de0571b0","b2182bef8a62fddbc7d1e5f067a9cf2166ac","b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac","b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac","b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac","67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061","67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061").map(H_),db=rb(hb),pb=new Array(3).concat("ef8a62ffffff999999","ca0020f4a582bababa404040","ca0020f4a582ffffffbababa404040","b2182bef8a62fddbc7e0e0e09999994d4d4d","b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d","b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d","b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d","67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a","67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a").map(H_),gb=rb(pb),yb=new Array(3).concat("fc8d59ffffbf91bfdb","d7191cfdae61abd9e92c7bb6","d7191cfdae61ffffbfabd9e92c7bb6","d73027fc8d59fee090e0f3f891bfdb4575b4","d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4","d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4","d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4","a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695","a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695").map(H_),vb=rb(yb),_b=new Array(3).concat("fc8d59ffffbf91cf60","d7191cfdae61a6d96a1a9641","d7191cfdae61ffffbfa6d96a1a9641","d73027fc8d59fee08bd9ef8b91cf601a9850","d73027fc8d59fee08bffffbfd9ef8b91cf601a9850","d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850","d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850","a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837","a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837").map(H_),bb=rb(_b),mb=new Array(3).concat("fc8d59ffffbf99d594","d7191cfdae61abdda42b83ba","d7191cfdae61ffffbfabdda42b83ba","d53e4ffc8d59fee08be6f59899d5943288bd","d53e4ffc8d59fee08bffffbfe6f59899d5943288bd","d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd","d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd","9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2","9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2").map(H_),xb=rb(mb),wb=new Array(3).concat("e5f5f999d8c92ca25f","edf8fbb2e2e266c2a4238b45","edf8fbb2e2e266c2a42ca25f006d2c","edf8fbccece699d8c966c2a42ca25f006d2c","edf8fbccece699d8c966c2a441ae76238b45005824","f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824","f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b").map(H_),Mb=rb(wb),Tb=new Array(3).concat("e0ecf49ebcda8856a7","edf8fbb3cde38c96c688419d","edf8fbb3cde38c96c68856a7810f7c","edf8fbbfd3e69ebcda8c96c68856a7810f7c","edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b","f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b","f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b").map(H_),Ab=rb(Tb),Sb=new Array(3).concat("e0f3dba8ddb543a2ca","f0f9e8bae4bc7bccc42b8cbe","f0f9e8bae4bc7bccc443a2ca0868ac","f0f9e8ccebc5a8ddb57bccc443a2ca0868ac","f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e","f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e","f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081").map(H_),Eb=rb(Sb),Nb=new Array(3).concat("fee8c8fdbb84e34a33","fef0d9fdcc8afc8d59d7301f","fef0d9fdcc8afc8d59e34a33b30000","fef0d9fdd49efdbb84fc8d59e34a33b30000","fef0d9fdd49efdbb84fc8d59ef6548d7301f990000","fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000","fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000").map(H_),kb=rb(Nb),Cb=new Array(3).concat("ece2f0a6bddb1c9099","f6eff7bdc9e167a9cf02818a","f6eff7bdc9e167a9cf1c9099016c59","f6eff7d0d1e6a6bddb67a9cf1c9099016c59","f6eff7d0d1e6a6bddb67a9cf3690c002818a016450","fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450","fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636").map(H_),Pb=rb(Cb),zb=new Array(3).concat("ece7f2a6bddb2b8cbe","f1eef6bdc9e174a9cf0570b0","f1eef6bdc9e174a9cf2b8cbe045a8d","f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d","f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b","fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b","fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858").map(H_),$b=rb(zb),Db=new Array(3).concat("e7e1efc994c7dd1c77","f1eef6d7b5d8df65b0ce1256","f1eef6d7b5d8df65b0dd1c77980043","f1eef6d4b9dac994c7df65b0dd1c77980043","f1eef6d4b9dac994c7df65b0e7298ace125691003f","f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f","f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f").map(H_),Rb=rb(Db),Fb=new Array(3).concat("fde0ddfa9fb5c51b8a","feebe2fbb4b9f768a1ae017e","feebe2fbb4b9f768a1c51b8a7a0177","feebe2fcc5c0fa9fb5f768a1c51b8a7a0177","feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177","fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177","fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a").map(H_),qb=rb(Fb),Ub=new Array(3).concat("edf8b17fcdbb2c7fb8","ffffcca1dab441b6c4225ea8","ffffcca1dab441b6c42c7fb8253494","ffffccc7e9b47fcdbb41b6c42c7fb8253494","ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84","ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84","ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58").map(H_),Ib=rb(Ub),Ob=new Array(3).concat("f7fcb9addd8e31a354","ffffccc2e69978c679238443","ffffccc2e69978c67931a354006837","ffffccd9f0a3addd8e78c67931a354006837","ffffccd9f0a3addd8e78c67941ab5d238443005a32","ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32","ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529").map(H_),Bb=rb(Ob),Yb=new Array(3).concat("fff7bcfec44fd95f0e","ffffd4fed98efe9929cc4c02","ffffd4fed98efe9929d95f0e993404","ffffd4fee391fec44ffe9929d95f0e993404","ffffd4fee391fec44ffe9929ec7014cc4c028c2d04","ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04","ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506").map(H_),Lb=rb(Yb),jb=new Array(3).concat("ffeda0feb24cf03b20","ffffb2fecc5cfd8d3ce31a1c","ffffb2fecc5cfd8d3cf03b20bd0026","ffffb2fed976feb24cfd8d3cf03b20bd0026","ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026","ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026","ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026").map(H_),Hb=rb(jb),Xb=new Array(3).concat("deebf79ecae13182bd","eff3ffbdd7e76baed62171b5","eff3ffbdd7e76baed63182bd08519c","eff3ffc6dbef9ecae16baed63182bd08519c","eff3ffc6dbef9ecae16baed64292c62171b5084594","f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594","f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b").map(H_),Gb=rb(Xb),Vb=new Array(3).concat("e5f5e0a1d99b31a354","edf8e9bae4b374c476238b45","edf8e9bae4b374c47631a354006d2c","edf8e9c7e9c0a1d99b74c47631a354006d2c","edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32","f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32","f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b").map(H_),Wb=rb(Vb),Zb=new Array(3).concat("f0f0f0bdbdbd636363","f7f7f7cccccc969696525252","f7f7f7cccccc969696636363252525","f7f7f7d9d9d9bdbdbd969696636363252525","f7f7f7d9d9d9bdbdbd969696737373525252252525","fffffff0f0f0d9d9d9bdbdbd969696737373525252252525","fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000").map(H_),Kb=rb(Zb),Qb=new Array(3).concat("efedf5bcbddc756bb1","f2f0f7cbc9e29e9ac86a51a3","f2f0f7cbc9e29e9ac8756bb154278f","f2f0f7dadaebbcbddc9e9ac8756bb154278f","f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486","fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486","fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d").map(H_),Jb=rb(Qb),tm=new Array(3).concat("fee0d2fc9272de2d26","fee5d9fcae91fb6a4acb181d","fee5d9fcae91fb6a4ade2d26a50f15","fee5d9fcbba1fc9272fb6a4ade2d26a50f15","fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d","fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d","fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d").map(H_),nm=rb(tm),em=new Array(3).concat("fee6cefdae6be6550d","feeddefdbe85fd8d3cd94701","feeddefdbe85fd8d3ce6550da63603","feeddefdd0a2fdae6bfd8d3ce6550da63603","feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04","fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04","fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704").map(H_),rm=rb(em);var im=hi(Tr(300,.5,0),Tr(-240,.5,1)),om=hi(Tr(-100,.75,.35),Tr(80,1.5,.8)),am=hi(Tr(260,.75,.35),Tr(80,1.5,.8)),um=Tr();var cm=Fe(),fm=Math.PI/3,sm=2*Math.PI/3;function lm(t){var n=t.length;return function(e){return t[Math.max(0,Math.min(n-1,Math.floor(e*n)))]}}var hm=lm(H_("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")),dm=lm(H_("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),pm=lm(H_("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),gm=lm(H_("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921"));function ym(t){return function(){return t}}const vm=Math.abs,_m=Math.atan2,bm=Math.cos,mm=Math.max,xm=Math.min,wm=Math.sin,Mm=Math.sqrt,Tm=1e-12,Am=Math.PI,Sm=Am/2,Em=2*Am;function Nm(t){return t>=1?Sm:t<=-1?-Sm:Math.asin(t)}function km(t){let n=3;return t.digits=function(e){if(!arguments.length)return n;if(null==e)n=null;else{const t=Math.floor(e);if(!(t>=0))throw new RangeError(`invalid digits: ${e}`);n=t}return t},()=>new Ua(n)}function Cm(t){return t.innerRadius}function Pm(t){return t.outerRadius}function zm(t){return t.startAngle}function $m(t){return t.endAngle}function Dm(t){return t&&t.padAngle}function Rm(t,n,e,r,i,o,a){var u=t-e,c=n-r,f=(a?o:-o)/Mm(u*u+c*c),s=f*c,l=-f*u,h=t+s,d=n+l,p=e+s,g=r+l,y=(h+p)/2,v=(d+g)/2,_=p-h,b=g-d,m=_*_+b*b,x=i-o,w=h*g-p*d,M=(b<0?-1:1)*Mm(mm(0,x*x*m-w*w)),T=(w*b-_*M)/m,A=(-w*_-b*M)/m,S=(w*b+_*M)/m,E=(-w*_+b*M)/m,N=T-y,k=A-v,C=S-y,P=E-v;return N*N+k*k>C*C+P*P&&(T=S,A=E),{cx:T,cy:A,x01:-s,y01:-l,x11:T*(i/x-1),y11:A*(i/x-1)}}var Fm=Array.prototype.slice;function qm(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}function Um(t){this._context=t}function Im(t){return new Um(t)}function Om(t){return t[0]}function Bm(t){return t[1]}function Ym(t,n){var e=ym(!0),r=null,i=Im,o=null,a=km(u);function u(u){var c,f,s,l=(u=qm(u)).length,h=!1;for(null==r&&(o=i(s=a())),c=0;c<=l;++c)!(c=l;--h)u.point(v[h],_[h]);u.lineEnd(),u.areaEnd()}y&&(v[s]=+t(d,s,f),_[s]=+n(d,s,f),u.point(r?+r(d,s,f):v[s],e?+e(d,s,f):_[s]))}if(p)return u=null,p+""||null}function s(){return Ym().defined(i).curve(a).context(o)}return t="function"==typeof t?t:void 0===t?Om:ym(+t),n="function"==typeof n?n:ym(void 0===n?0:+n),e="function"==typeof e?e:void 0===e?Bm:ym(+e),f.x=function(n){return arguments.length?(t="function"==typeof n?n:ym(+n),r=null,f):t},f.x0=function(n){return arguments.length?(t="function"==typeof n?n:ym(+n),f):t},f.x1=function(t){return arguments.length?(r=null==t?null:"function"==typeof t?t:ym(+t),f):r},f.y=function(t){return arguments.length?(n="function"==typeof t?t:ym(+t),e=null,f):n},f.y0=function(t){return arguments.length?(n="function"==typeof t?t:ym(+t),f):n},f.y1=function(t){return arguments.length?(e=null==t?null:"function"==typeof t?t:ym(+t),f):e},f.lineX0=f.lineY0=function(){return s().x(t).y(n)},f.lineY1=function(){return s().x(t).y(e)},f.lineX1=function(){return s().x(r).y(n)},f.defined=function(t){return arguments.length?(i="function"==typeof t?t:ym(!!t),f):i},f.curve=function(t){return arguments.length?(a=t,null!=o&&(u=a(o)),f):a},f.context=function(t){return arguments.length?(null==t?o=u=null:u=a(o=t),f):o},f}function jm(t,n){return nt?1:n>=t?0:NaN}function Hm(t){return t}Um.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;default:this._context.lineTo(t,n)}}};var Xm=Vm(Im);function Gm(t){this._curve=t}function Vm(t){function n(n){return new Gm(t(n))}return n._curve=t,n}function Wm(t){var n=t.curve;return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t.curve=function(t){return arguments.length?n(Vm(t)):n()._curve},t}function Zm(){return Wm(Ym().curve(Xm))}function Km(){var t=Lm().curve(Xm),n=t.curve,e=t.lineX0,r=t.lineX1,i=t.lineY0,o=t.lineY1;return t.angle=t.x,delete t.x,t.startAngle=t.x0,delete t.x0,t.endAngle=t.x1,delete t.x1,t.radius=t.y,delete t.y,t.innerRadius=t.y0,delete t.y0,t.outerRadius=t.y1,delete t.y1,t.lineStartAngle=function(){return Wm(e())},delete t.lineX0,t.lineEndAngle=function(){return Wm(r())},delete t.lineX1,t.lineInnerRadius=function(){return Wm(i())},delete t.lineY0,t.lineOuterRadius=function(){return Wm(o())},delete t.lineY1,t.curve=function(t){return arguments.length?n(Vm(t)):n()._curve},t}function Qm(t,n){return[(n=+n)*Math.cos(t-=Math.PI/2),n*Math.sin(t)]}Gm.prototype={areaStart:function(){this._curve.areaStart()},areaEnd:function(){this._curve.areaEnd()},lineStart:function(){this._curve.lineStart()},lineEnd:function(){this._curve.lineEnd()},point:function(t,n){this._curve.point(n*Math.sin(t),n*-Math.cos(t))}};class Jm{constructor(t,n){this._context=t,this._x=n}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line}point(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;default:this._x?this._context.bezierCurveTo(this._x0=(this._x0+t)/2,this._y0,this._x0,n,t,n):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+n)/2,t,this._y0,t,n)}this._x0=t,this._y0=n}}class tx{constructor(t){this._context=t}lineStart(){this._point=0}lineEnd(){}point(t,n){if(t=+t,n=+n,0===this._point)this._point=1;else{const e=Qm(this._x0,this._y0),r=Qm(this._x0,this._y0=(this._y0+n)/2),i=Qm(t,this._y0),o=Qm(t,n);this._context.moveTo(...e),this._context.bezierCurveTo(...r,...i,...o)}this._x0=t,this._y0=n}}function nx(t){return new Jm(t,!0)}function ex(t){return new Jm(t,!1)}function rx(t){return new tx(t)}function ix(t){return t.source}function ox(t){return t.target}function ax(t){let n=ix,e=ox,r=Om,i=Bm,o=null,a=null,u=km(c);function c(){let c;const f=Fm.call(arguments),s=n.apply(this,f),l=e.apply(this,f);if(null==o&&(a=t(c=u())),a.lineStart(),f[0]=s,a.point(+r.apply(this,f),+i.apply(this,f)),f[0]=l,a.point(+r.apply(this,f),+i.apply(this,f)),a.lineEnd(),c)return a=null,c+""||null}return c.source=function(t){return arguments.length?(n=t,c):n},c.target=function(t){return arguments.length?(e=t,c):e},c.x=function(t){return arguments.length?(r="function"==typeof t?t:ym(+t),c):r},c.y=function(t){return arguments.length?(i="function"==typeof t?t:ym(+t),c):i},c.context=function(n){return arguments.length?(null==n?o=a=null:a=t(o=n),c):o},c}const ux=Mm(3);var cx={draw(t,n){const e=.59436*Mm(n+xm(n/28,.75)),r=e/2,i=r*ux;t.moveTo(0,e),t.lineTo(0,-e),t.moveTo(-i,-r),t.lineTo(i,r),t.moveTo(-i,r),t.lineTo(i,-r)}},fx={draw(t,n){const e=Mm(n/Am);t.moveTo(e,0),t.arc(0,0,e,0,Em)}},sx={draw(t,n){const e=Mm(n/5)/2;t.moveTo(-3*e,-e),t.lineTo(-e,-e),t.lineTo(-e,-3*e),t.lineTo(e,-3*e),t.lineTo(e,-e),t.lineTo(3*e,-e),t.lineTo(3*e,e),t.lineTo(e,e),t.lineTo(e,3*e),t.lineTo(-e,3*e),t.lineTo(-e,e),t.lineTo(-3*e,e),t.closePath()}};const lx=Mm(1/3),hx=2*lx;var dx={draw(t,n){const e=Mm(n/hx),r=e*lx;t.moveTo(0,-e),t.lineTo(r,0),t.lineTo(0,e),t.lineTo(-r,0),t.closePath()}},px={draw(t,n){const e=.62625*Mm(n);t.moveTo(0,-e),t.lineTo(e,0),t.lineTo(0,e),t.lineTo(-e,0),t.closePath()}},gx={draw(t,n){const e=.87559*Mm(n-xm(n/7,2));t.moveTo(-e,0),t.lineTo(e,0),t.moveTo(0,e),t.lineTo(0,-e)}},yx={draw(t,n){const e=Mm(n),r=-e/2;t.rect(r,r,e,e)}},vx={draw(t,n){const e=.4431*Mm(n);t.moveTo(e,e),t.lineTo(e,-e),t.lineTo(-e,-e),t.lineTo(-e,e),t.closePath()}};const _x=wm(Am/10)/wm(7*Am/10),bx=wm(Em/10)*_x,mx=-bm(Em/10)*_x;var xx={draw(t,n){const e=Mm(.8908130915292852*n),r=bx*e,i=mx*e;t.moveTo(0,-e),t.lineTo(r,i);for(let n=1;n<5;++n){const o=Em*n/5,a=bm(o),u=wm(o);t.lineTo(u*e,-a*e),t.lineTo(a*r-u*i,u*r+a*i)}t.closePath()}};const wx=Mm(3);var Mx={draw(t,n){const e=-Mm(n/(3*wx));t.moveTo(0,2*e),t.lineTo(-wx*e,-e),t.lineTo(wx*e,-e),t.closePath()}};const Tx=Mm(3);var Ax={draw(t,n){const e=.6824*Mm(n),r=e/2,i=e*Tx/2;t.moveTo(0,-e),t.lineTo(i,r),t.lineTo(-i,r),t.closePath()}};const Sx=-.5,Ex=Mm(3)/2,Nx=1/Mm(12),kx=3*(Nx/2+1);var Cx={draw(t,n){const e=Mm(n/kx),r=e/2,i=e*Nx,o=r,a=e*Nx+e,u=-o,c=a;t.moveTo(r,i),t.lineTo(o,a),t.lineTo(u,c),t.lineTo(Sx*r-Ex*i,Ex*r+Sx*i),t.lineTo(Sx*o-Ex*a,Ex*o+Sx*a),t.lineTo(Sx*u-Ex*c,Ex*u+Sx*c),t.lineTo(Sx*r+Ex*i,Sx*i-Ex*r),t.lineTo(Sx*o+Ex*a,Sx*a-Ex*o),t.lineTo(Sx*u+Ex*c,Sx*c-Ex*u),t.closePath()}},Px={draw(t,n){const e=.6189*Mm(n-xm(n/6,1.7));t.moveTo(-e,-e),t.lineTo(e,e),t.moveTo(-e,e),t.lineTo(e,-e)}};const zx=[fx,sx,dx,yx,xx,Mx,Cx],$x=[fx,gx,Px,Ax,cx,vx,px];function Dx(){}function Rx(t,n,e){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+n)/6,(t._y0+4*t._y1+e)/6)}function Fx(t){this._context=t}function qx(t){this._context=t}function Ux(t){this._context=t}function Ix(t,n){this._basis=new Fx(t),this._beta=n}Fx.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:Rx(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:Rx(this,t,n)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=n}},qx.prototype={areaStart:Dx,areaEnd:Dx,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._x2=t,this._y2=n;break;case 1:this._point=2,this._x3=t,this._y3=n;break;case 2:this._point=3,this._x4=t,this._y4=n,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+n)/6);break;default:Rx(this,t,n)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=n}},Ux.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var e=(this._x0+4*this._x1+t)/6,r=(this._y0+4*this._y1+n)/6;this._line?this._context.lineTo(e,r):this._context.moveTo(e,r);break;case 3:this._point=4;default:Rx(this,t,n)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=n}},Ix.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,n=this._y,e=t.length-1;if(e>0)for(var r,i=t[0],o=n[0],a=t[e]-i,u=n[e]-o,c=-1;++c<=e;)r=c/e,this._basis.point(this._beta*t[c]+(1-this._beta)*(i+r*a),this._beta*n[c]+(1-this._beta)*(o+r*u));this._x=this._y=null,this._basis.lineEnd()},point:function(t,n){this._x.push(+t),this._y.push(+n)}};var Ox=function t(n){function e(t){return 1===n?new Fx(t):new Ix(t,n)}return e.beta=function(n){return t(+n)},e}(.85);function Bx(t,n,e){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-n),t._y2+t._k*(t._y1-e),t._x2,t._y2)}function Yx(t,n){this._context=t,this._k=(1-n)/6}Yx.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:Bx(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2,this._x1=t,this._y1=n;break;case 2:this._point=3;default:Bx(this,t,n)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var Lx=function t(n){function e(t){return new Yx(t,n)}return e.tension=function(n){return t(+n)},e}(0);function jx(t,n){this._context=t,this._k=(1-n)/6}jx.prototype={areaStart:Dx,areaEnd:Dx,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._x3=t,this._y3=n;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=n);break;case 2:this._point=3,this._x5=t,this._y5=n;break;default:Bx(this,t,n)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var Hx=function t(n){function e(t){return new jx(t,n)}return e.tension=function(n){return t(+n)},e}(0);function Xx(t,n){this._context=t,this._k=(1-n)/6}Xx.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Bx(this,t,n)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var Gx=function t(n){function e(t){return new Xx(t,n)}return e.tension=function(n){return t(+n)},e}(0);function Vx(t,n,e){var r=t._x1,i=t._y1,o=t._x2,a=t._y2;if(t._l01_a>Tm){var u=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,c=3*t._l01_a*(t._l01_a+t._l12_a);r=(r*u-t._x0*t._l12_2a+t._x2*t._l01_2a)/c,i=(i*u-t._y0*t._l12_2a+t._y2*t._l01_2a)/c}if(t._l23_a>Tm){var f=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,s=3*t._l23_a*(t._l23_a+t._l12_a);o=(o*f+t._x1*t._l23_2a-n*t._l12_2a)/s,a=(a*f+t._y1*t._l23_2a-e*t._l12_2a)/s}t._context.bezierCurveTo(r,i,o,a,t._x2,t._y2)}function Wx(t,n){this._context=t,this._alpha=n}Wx.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){if(t=+t,n=+n,this._point){var e=this._x2-t,r=this._y2-n;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(e*e+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;break;case 2:this._point=3;default:Vx(this,t,n)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var Zx=function t(n){function e(t){return n?new Wx(t,n):new Yx(t,0)}return e.alpha=function(n){return t(+n)},e}(.5);function Kx(t,n){this._context=t,this._alpha=n}Kx.prototype={areaStart:Dx,areaEnd:Dx,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,n){if(t=+t,n=+n,this._point){var e=this._x2-t,r=this._y2-n;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(e*e+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=n;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=n);break;case 2:this._point=3,this._x5=t,this._y5=n;break;default:Vx(this,t,n)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var Qx=function t(n){function e(t){return n?new Kx(t,n):new jx(t,0)}return e.alpha=function(n){return t(+n)},e}(.5);function Jx(t,n){this._context=t,this._alpha=n}Jx.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){if(t=+t,n=+n,this._point){var e=this._x2-t,r=this._y2-n;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(e*e+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Vx(this,t,n)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var tw=function t(n){function e(t){return n?new Jx(t,n):new Xx(t,0)}return e.alpha=function(n){return t(+n)},e}(.5);function nw(t){this._context=t}function ew(t){return t<0?-1:1}function rw(t,n,e){var r=t._x1-t._x0,i=n-t._x1,o=(t._y1-t._y0)/(r||i<0&&-0),a=(e-t._y1)/(i||r<0&&-0),u=(o*i+a*r)/(r+i);return(ew(o)+ew(a))*Math.min(Math.abs(o),Math.abs(a),.5*Math.abs(u))||0}function iw(t,n){var e=t._x1-t._x0;return e?(3*(t._y1-t._y0)/e-n)/2:n}function ow(t,n,e){var r=t._x0,i=t._y0,o=t._x1,a=t._y1,u=(o-r)/3;t._context.bezierCurveTo(r+u,i+u*n,o-u,a-u*e,o,a)}function aw(t){this._context=t}function uw(t){this._context=new cw(t)}function cw(t){this._context=t}function fw(t){this._context=t}function sw(t){var n,e,r=t.length-1,i=new Array(r),o=new Array(r),a=new Array(r);for(i[0]=0,o[0]=2,a[0]=t[0]+2*t[1],n=1;n=0;--n)i[n]=(a[n]-i[n+1])/o[n];for(o[r-1]=(t[r]+i[r-1])/2,n=0;n1)for(var e,r,i,o=1,a=t[n[0]],u=a.length;o=0;)e[n]=n;return e}function pw(t,n){return t[n]}function gw(t){const n=[];return n.key=t,n}function yw(t){var n=t.map(vw);return dw(t).sort((function(t,e){return n[t]-n[e]}))}function vw(t){for(var n,e=-1,r=0,i=t.length,o=-1/0;++eo&&(o=n,r=e);return r}function _w(t){var n=t.map(bw);return dw(t).sort((function(t,e){return n[t]-n[e]}))}function bw(t){for(var n,e=0,r=-1,i=t.length;++r=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,n),this._context.lineTo(t,n);else{var e=this._x*(1-this._t)+t*this._t;this._context.lineTo(e,this._y),this._context.lineTo(e,n)}}this._x=t,this._y=n}};var mw=t=>()=>t;function xw(t,{sourceEvent:n,target:e,transform:r,dispatch:i}){Object.defineProperties(this,{type:{value:t,enumerable:!0,configurable:!0},sourceEvent:{value:n,enumerable:!0,configurable:!0},target:{value:e,enumerable:!0,configurable:!0},transform:{value:r,enumerable:!0,configurable:!0},_:{value:i}})}function ww(t,n,e){this.k=t,this.x=n,this.y=e}ww.prototype={constructor:ww,scale:function(t){return 1===t?this:new ww(this.k*t,this.x,this.y)},translate:function(t,n){return 0===t&0===n?this:new ww(this.k,this.x+this.k*t,this.y+this.k*n)},apply:function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},applyX:function(t){return t*this.k+this.x},applyY:function(t){return t*this.k+this.y},invert:function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},invertX:function(t){return(t-this.x)/this.k},invertY:function(t){return(t-this.y)/this.k},rescaleX:function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},rescaleY:function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};var Mw=new ww(1,0,0);function Tw(t){for(;!t.__zoom;)if(!(t=t.parentNode))return Mw;return t.__zoom}function Aw(t){t.stopImmediatePropagation()}function Sw(t){t.preventDefault(),t.stopImmediatePropagation()}function Ew(t){return!(t.ctrlKey&&"wheel"!==t.type||t.button)}function Nw(){var t=this;return t instanceof SVGElement?(t=t.ownerSVGElement||t).hasAttribute("viewBox")?[[(t=t.viewBox.baseVal).x,t.y],[t.x+t.width,t.y+t.height]]:[[0,0],[t.width.baseVal.value,t.height.baseVal.value]]:[[0,0],[t.clientWidth,t.clientHeight]]}function kw(){return this.__zoom||Mw}function Cw(t){return-t.deltaY*(1===t.deltaMode?.05:t.deltaMode?1:.002)*(t.ctrlKey?10:1)}function Pw(){return navigator.maxTouchPoints||"ontouchstart"in this}function zw(t,n,e){var r=t.invertX(n[0][0])-e[0][0],i=t.invertX(n[1][0])-e[1][0],o=t.invertY(n[0][1])-e[0][1],a=t.invertY(n[1][1])-e[1][1];return t.translate(i>r?(r+i)/2:Math.min(0,r)||Math.max(0,i),a>o?(o+a)/2:Math.min(0,o)||Math.max(0,a))}Tw.prototype=ww.prototype,t.Adder=T,t.Delaunay=Lu,t.FormatSpecifier=tf,t.InternMap=InternMap,t.InternSet=InternSet,t.Node=Qd,t.Path=Ua,t.Voronoi=qu,t.ZoomTransform=ww,t.active=function(t,n){var e,r,i=t.__transition;if(i)for(r in n=null==n?null:n+"",i)if((e=i[r]).state>qi&&e.name===n)return new po([[t]],Zo,n,+r);return null},t.arc=function(){var t=Cm,n=Pm,e=ym(0),r=null,i=zm,o=$m,a=Dm,u=null,c=km(f);function f(){var f,s,l=+t.apply(this,arguments),h=+n.apply(this,arguments),d=i.apply(this,arguments)-Sm,p=o.apply(this,arguments)-Sm,g=vm(p-d),y=p>d;if(u||(u=f=c()),hTm)if(g>Em-Tm)u.moveTo(h*bm(d),h*wm(d)),u.arc(0,0,h,d,p,!y),l>Tm&&(u.moveTo(l*bm(p),l*wm(p)),u.arc(0,0,l,p,d,y));else{var v,_,b=d,m=p,x=d,w=p,M=g,T=g,A=a.apply(this,arguments)/2,S=A>Tm&&(r?+r.apply(this,arguments):Mm(l*l+h*h)),E=xm(vm(h-l)/2,+e.apply(this,arguments)),N=E,k=E;if(S>Tm){var C=Nm(S/l*wm(A)),P=Nm(S/h*wm(A));(M-=2*C)>Tm?(x+=C*=y?1:-1,w-=C):(M=0,x=w=(d+p)/2),(T-=2*P)>Tm?(b+=P*=y?1:-1,m-=P):(T=0,b=m=(d+p)/2)}var z=h*bm(b),$=h*wm(b),D=l*bm(w),R=l*wm(w);if(E>Tm){var F,q=h*bm(m),U=h*wm(m),I=l*bm(x),O=l*wm(x);if(g1?0:t<-1?Am:Math.acos(t)}((B*L+Y*j)/(Mm(B*B+Y*Y)*Mm(L*L+j*j)))/2),X=Mm(F[0]*F[0]+F[1]*F[1]);N=xm(E,(l-X)/(H-1)),k=xm(E,(h-X)/(H+1))}else N=k=0}T>Tm?k>Tm?(v=Rm(I,O,z,$,h,k,y),_=Rm(q,U,D,R,h,k,y),u.moveTo(v.cx+v.x01,v.cy+v.y01),kTm&&M>Tm?N>Tm?(v=Rm(D,R,q,U,l,-N,y),_=Rm(z,$,I,O,l,-N,y),u.lineTo(v.cx+v.x01,v.cy+v.y01),N=0))throw new RangeError("invalid r");let e=t.length;if(!((e=Math.floor(e))>=0))throw new RangeError("invalid length");if(!e||!n)return t;const r=y(n),i=t.slice();return r(t,i,0,e,1),r(i,t,0,e,1),r(t,i,0,e,1),t},t.blur2=l,t.blurImage=h,t.brush=function(){return wa(la)},t.brushSelection=function(t){var n=t.__brush;return n?n.dim.output(n.selection):null},t.brushX=function(){return wa(fa)},t.brushY=function(){return wa(sa)},t.buffer=function(t,n){return fetch(t,n).then(_c)},t.chord=function(){return za(!1,!1)},t.chordDirected=function(){return za(!0,!1)},t.chordTranspose=function(){return za(!1,!0)},t.cluster=function(){var t=Ld,n=1,e=1,r=!1;function i(i){var o,a=0;i.eachAfter((function(n){var e=n.children;e?(n.x=function(t){return t.reduce(jd,0)/t.length}(e),n.y=function(t){return 1+t.reduce(Hd,0)}(e)):(n.x=o?a+=t(n,o):0,n.y=0,o=n)}));var u=function(t){for(var n;n=t.children;)t=n[0];return t}(i),c=function(t){for(var n;n=t.children;)t=n[n.length-1];return t}(i),f=u.x-t(u,c)/2,s=c.x+t(c,u)/2;return i.eachAfter(r?function(t){t.x=(t.x-i.x)*n,t.y=(i.y-t.y)*e}:function(t){t.x=(t.x-f)/(s-f)*n,t.y=(1-(i.y?t.y/i.y:1))*e})}return i.separation=function(n){return arguments.length?(t=n,i):t},i.size=function(t){return arguments.length?(r=!1,n=+t[0],e=+t[1],i):r?null:[n,e]},i.nodeSize=function(t){return arguments.length?(r=!0,n=+t[0],e=+t[1],i):r?[n,e]:null},i},t.color=ze,t.contourDensity=function(){var t=fu,n=su,e=lu,r=960,i=500,o=20,a=2,u=3*o,c=r+2*u>>a,f=i+2*u>>a,s=Qa(20);function h(r){var i=new Float32Array(c*f),s=Math.pow(2,-a),h=-1;for(const o of r){var d=(t(o,++h,r)+u)*s,p=(n(o,h,r)+u)*s,g=+e(o,h,r);if(g&&d>=0&&d=0&&pt*r)))(n).map(((t,n)=>(t.value=+e[n],p(t))))}function p(t){return t.coordinates.forEach(g),t}function g(t){t.forEach(y)}function y(t){t.forEach(v)}function v(t){t[0]=t[0]*Math.pow(2,a)-u,t[1]=t[1]*Math.pow(2,a)-u}function _(){return c=r+2*(u=3*o)>>a,f=i+2*u>>a,d}return d.contours=function(t){var n=h(t),e=iu().size([c,f]),r=Math.pow(2,2*a),i=t=>{t=+t;var i=p(e.contour(n,t*r));return i.value=t,i};return Object.defineProperty(i,"max",{get:()=>J(n)/r}),i},d.x=function(n){return arguments.length?(t="function"==typeof n?n:Qa(+n),d):t},d.y=function(t){return arguments.length?(n="function"==typeof t?t:Qa(+t),d):n},d.weight=function(t){return arguments.length?(e="function"==typeof t?t:Qa(+t),d):e},d.size=function(t){if(!arguments.length)return[r,i];var n=+t[0],e=+t[1];if(!(n>=0&&e>=0))throw new Error("invalid size");return r=n,i=e,_()},d.cellSize=function(t){if(!arguments.length)return 1<=1))throw new Error("invalid cell size");return a=Math.floor(Math.log(t)/Math.LN2),_()},d.thresholds=function(t){return arguments.length?(s="function"==typeof t?t:Array.isArray(t)?Qa(Za.call(t)):Qa(t),d):s},d.bandwidth=function(t){if(!arguments.length)return Math.sqrt(o*(o+1));if(!((t=+t)>=0))throw new Error("invalid bandwidth");return o=(Math.sqrt(4*t*t+1)-1)/2,_()},d},t.contours=iu,t.count=v,t.create=function(t){return Zn(Yt(t).call(document.documentElement))},t.creator=Yt,t.cross=function(...t){const n="function"==typeof t[t.length-1]&&function(t){return n=>t(...n)}(t.pop()),e=(t=t.map(m)).map(_),r=t.length-1,i=new Array(r+1).fill(0),o=[];if(r<0||e.some(b))return o;for(;;){o.push(i.map(((n,e)=>t[e][n])));let a=r;for(;++i[a]===e[a];){if(0===a)return n?o.map(n):o;i[a--]=0}}},t.csv=wc,t.csvFormat=rc,t.csvFormatBody=ic,t.csvFormatRow=ac,t.csvFormatRows=oc,t.csvFormatValue=uc,t.csvParse=nc,t.csvParseRows=ec,t.cubehelix=Tr,t.cumsum=function(t,n){var e=0,r=0;return Float64Array.from(t,void 0===n?t=>e+=+t||0:i=>e+=+n(i,r++,t)||0)},t.curveBasis=function(t){return new Fx(t)},t.curveBasisClosed=function(t){return new qx(t)},t.curveBasisOpen=function(t){return new Ux(t)},t.curveBumpX=nx,t.curveBumpY=ex,t.curveBundle=Ox,t.curveCardinal=Lx,t.curveCardinalClosed=Hx,t.curveCardinalOpen=Gx,t.curveCatmullRom=Zx,t.curveCatmullRomClosed=Qx,t.curveCatmullRomOpen=tw,t.curveLinear=Im,t.curveLinearClosed=function(t){return new nw(t)},t.curveMonotoneX=function(t){return new aw(t)},t.curveMonotoneY=function(t){return new uw(t)},t.curveNatural=function(t){return new fw(t)},t.curveStep=function(t){return new lw(t,.5)},t.curveStepAfter=function(t){return new lw(t,1)},t.curveStepBefore=function(t){return new lw(t,0)},t.descending=e,t.deviation=w,t.difference=function(t,...n){t=new InternSet(t);for(const e of n)for(const n of e)t.delete(n);return t},t.disjoint=function(t,n){const e=n[Symbol.iterator](),r=new InternSet;for(const n of t){if(r.has(n))return!1;let t,i;for(;({value:t,done:i}=e.next())&&!i;){if(Object.is(n,t))return!1;r.add(t)}}return!0},t.dispatch=$t,t.drag=function(){var t,n,e,r,i=se,o=le,a=he,u=de,c={},f=$t("start","drag","end"),s=0,l=0;function h(t){t.on("mousedown.drag",d).filter(u).on("touchstart.drag",y).on("touchmove.drag",v,ee).on("touchend.drag touchcancel.drag",_).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function d(a,u){if(!r&&i.call(this,a,u)){var c=b(this,o.call(this,a,u),a,u,"mouse");c&&(Zn(a.view).on("mousemove.drag",p,re).on("mouseup.drag",g,re),ae(a.view),ie(a),e=!1,t=a.clientX,n=a.clientY,c("start",a))}}function p(r){if(oe(r),!e){var i=r.clientX-t,o=r.clientY-n;e=i*i+o*o>l}c.mouse("drag",r)}function g(t){Zn(t.view).on("mousemove.drag mouseup.drag",null),ue(t.view,e),oe(t),c.mouse("end",t)}function y(t,n){if(i.call(this,t,n)){var e,r,a=t.changedTouches,u=o.call(this,t,n),c=a.length;for(e=0;e+t,t.easePoly=wo,t.easePolyIn=mo,t.easePolyInOut=wo,t.easePolyOut=xo,t.easeQuad=_o,t.easeQuadIn=function(t){return t*t},t.easeQuadInOut=_o,t.easeQuadOut=function(t){return t*(2-t)},t.easeSin=Ao,t.easeSinIn=function(t){return 1==+t?1:1-Math.cos(t*To)},t.easeSinInOut=Ao,t.easeSinOut=function(t){return Math.sin(t*To)},t.every=function(t,n){if("function"!=typeof n)throw new TypeError("test is not a function");let e=-1;for(const r of t)if(!n(r,++e,t))return!1;return!0},t.extent=M,t.fcumsum=function(t,n){const e=new T;let r=-1;return Float64Array.from(t,void 0===n?t=>e.add(+t||0):i=>e.add(+n(i,++r,t)||0))},t.filter=function(t,n){if("function"!=typeof n)throw new TypeError("test is not a function");const e=[];let r=-1;for(const i of t)n(i,++r,t)&&e.push(i);return e},t.flatGroup=function(t,...n){return z(P(t,...n),n)},t.flatRollup=function(t,n,...e){return z(D(t,n,...e),e)},t.forceCenter=function(t,n){var e,r=1;function i(){var i,o,a=e.length,u=0,c=0;for(i=0;if+p||os+p||ac.index){var g=f-u.x-u.vx,y=s-u.y-u.vy,v=g*g+y*y;vt.r&&(t.r=t[n].r)}function c(){if(n){var r,i,o=n.length;for(e=new Array(o),r=0;r[u(t,n,r),t])));for(a=0,i=new Array(f);a=u)){(t.data!==n||t.next)&&(0===l&&(p+=(l=Uc(e))*l),0===h&&(p+=(h=Uc(e))*h),p(t=(Lc*t+jc)%Hc)/Hc}();function l(){h(),f.call("tick",n),e1?(null==e?u.delete(t):u.set(t,p(e)),n):u.get(t)},find:function(n,e,r){var i,o,a,u,c,f=0,s=t.length;for(null==r?r=1/0:r*=r,f=0;f1?(f.on(t,e),n):f.on(t)}}},t.forceX=function(t){var n,e,r,i=qc(.1);function o(t){for(var i,o=0,a=n.length;o=.12&&i<.234&&r>=-.425&&r<-.214?u:i>=.166&&i<.234&&r>=-.214&&r<-.115?c:a).invert(t)},s.stream=function(e){return t&&n===e?t:(r=[a.stream(n=e),u.stream(e),c.stream(e)],i=r.length,t={point:function(t,n){for(var e=-1;++ejs(r[0],r[1])&&(r[1]=i[1]),js(i[0],r[1])>js(r[0],r[1])&&(r[0]=i[0])):o.push(r=i);for(a=-1/0,n=0,r=o[e=o.length-1];n<=e;r=i,++n)i=o[n],(u=js(r[1],i[0]))>a&&(a=u,Wf=i[0],Kf=r[1])}return is=os=null,Wf===1/0||Zf===1/0?[[NaN,NaN],[NaN,NaN]]:[[Wf,Zf],[Kf,Qf]]},t.geoCentroid=function(t){ms=xs=ws=Ms=Ts=As=Ss=Es=0,Ns=new T,ks=new T,Cs=new T,Lf(t,Gs);var n=+Ns,e=+ks,r=+Cs,i=Ef(n,e,r);return i=0))throw new RangeError(`invalid digits: ${t}`);i=n}return null===n&&(r=new ed(i)),a},a.projection(t).digits(i).context(n)},t.geoProjection=yd,t.geoProjectionMutator=vd,t.geoRotation=ll,t.geoStereographic=function(){return yd(Bd).scale(250).clipAngle(142)},t.geoStereographicRaw=Bd,t.geoStream=Lf,t.geoTransform=function(t){return{stream:id(t)}},t.geoTransverseMercator=function(){var t=Ed(Yd),n=t.center,e=t.rotate;return t.center=function(t){return arguments.length?n([-t[1],t[0]]):[(t=n())[1],-t[0]]},t.rotate=function(t){return arguments.length?e([t[0],t[1],t.length>2?t[2]+90:90]):[(t=e())[0],t[1],t[2]-90]},e([0,0,90]).scale(159.155)},t.geoTransverseMercatorRaw=Yd,t.gray=function(t,n){return new ur(t,0,0,null==n?1:n)},t.greatest=ot,t.greatestIndex=function(t,e=n){if(1===e.length)return tt(t,e);let r,i=-1,o=-1;for(const n of t)++o,(i<0?0===e(n,n):e(n,r)>0)&&(r=n,i=o);return i},t.group=C,t.groupSort=function(t,e,r){return(2!==e.length?U($(t,e,r),(([t,e],[r,i])=>n(e,i)||n(t,r))):U(C(t,r),(([t,r],[i,o])=>e(r,o)||n(t,i)))).map((([t])=>t))},t.groups=P,t.hcl=dr,t.hierarchy=Gd,t.histogram=Q,t.hsl=He,t.html=Ec,t.image=function(t,n){return new Promise((function(e,r){var i=new Image;for(var o in n)i[o]=n[o];i.onerror=r,i.onload=function(){e(i)},i.src=t}))},t.index=function(t,...n){return F(t,k,R,n)},t.indexes=function(t,...n){return F(t,Array.from,R,n)},t.interpolate=Gr,t.interpolateArray=function(t,n){return(Ir(n)?Ur:Or)(t,n)},t.interpolateBasis=Er,t.interpolateBasisClosed=Nr,t.interpolateBlues=Gb,t.interpolateBrBG=ob,t.interpolateBuGn=Mb,t.interpolateBuPu=Ab,t.interpolateCividis=function(t){return t=Math.max(0,Math.min(1,t)),"rgb("+Math.max(0,Math.min(255,Math.round(-4.54-t*(35.34-t*(2381.73-t*(6402.7-t*(7024.72-2710.57*t)))))))+", "+Math.max(0,Math.min(255,Math.round(32.49+t*(170.73+t*(52.82-t*(131.46-t*(176.58-67.37*t)))))))+", "+Math.max(0,Math.min(255,Math.round(81.24+t*(442.36-t*(2482.43-t*(6167.24-t*(6614.94-2475.67*t)))))))+")"},t.interpolateCool=am,t.interpolateCubehelix=li,t.interpolateCubehelixDefault=im,t.interpolateCubehelixLong=hi,t.interpolateDate=Br,t.interpolateDiscrete=function(t){var n=t.length;return function(e){return t[Math.max(0,Math.min(n-1,Math.floor(e*n)))]}},t.interpolateGnBu=Eb,t.interpolateGreens=Wb,t.interpolateGreys=Kb,t.interpolateHcl=ci,t.interpolateHclLong=fi,t.interpolateHsl=oi,t.interpolateHslLong=ai,t.interpolateHue=function(t,n){var e=Pr(+t,+n);return function(t){var n=e(t);return n-360*Math.floor(n/360)}},t.interpolateInferno=pm,t.interpolateLab=function(t,n){var e=$r((t=ar(t)).l,(n=ar(n)).l),r=$r(t.a,n.a),i=$r(t.b,n.b),o=$r(t.opacity,n.opacity);return function(n){return t.l=e(n),t.a=r(n),t.b=i(n),t.opacity=o(n),t+""}},t.interpolateMagma=dm,t.interpolateNumber=Yr,t.interpolateNumberArray=Ur,t.interpolateObject=Lr,t.interpolateOrRd=kb,t.interpolateOranges=rm,t.interpolatePRGn=ub,t.interpolatePiYG=fb,t.interpolatePlasma=gm,t.interpolatePuBu=$b,t.interpolatePuBuGn=Pb,t.interpolatePuOr=lb,t.interpolatePuRd=Rb,t.interpolatePurples=Jb,t.interpolateRainbow=function(t){(t<0||t>1)&&(t-=Math.floor(t));var n=Math.abs(t-.5);return um.h=360*t-100,um.s=1.5-1.5*n,um.l=.8-.9*n,um+""},t.interpolateRdBu=db,t.interpolateRdGy=gb,t.interpolateRdPu=qb,t.interpolateRdYlBu=vb,t.interpolateRdYlGn=bb,t.interpolateReds=nm,t.interpolateRgb=Dr,t.interpolateRgbBasis=Fr,t.interpolateRgbBasisClosed=qr,t.interpolateRound=Vr,t.interpolateSinebow=function(t){var n;return t=(.5-t)*Math.PI,cm.r=255*(n=Math.sin(t))*n,cm.g=255*(n=Math.sin(t+fm))*n,cm.b=255*(n=Math.sin(t+sm))*n,cm+""},t.interpolateSpectral=xb,t.interpolateString=Xr,t.interpolateTransformCss=ti,t.interpolateTransformSvg=ni,t.interpolateTurbo=function(t){return t=Math.max(0,Math.min(1,t)),"rgb("+Math.max(0,Math.min(255,Math.round(34.61+t*(1172.33-t*(10793.56-t*(33300.12-t*(38394.49-14825.05*t)))))))+", "+Math.max(0,Math.min(255,Math.round(23.31+t*(557.33+t*(1225.33-t*(3574.96-t*(1073.77+707.56*t)))))))+", "+Math.max(0,Math.min(255,Math.round(27.2+t*(3211.1-t*(15327.97-t*(27814-t*(22569.18-6838.66*t)))))))+")"},t.interpolateViridis=hm,t.interpolateWarm=om,t.interpolateYlGn=Bb,t.interpolateYlGnBu=Ib,t.interpolateYlOrBr=Lb,t.interpolateYlOrRd=Hb,t.interpolateZoom=ri,t.interrupt=Gi,t.intersection=function(t,...n){t=new InternSet(t),n=n.map(vt);t:for(const e of t)for(const r of n)if(!r.has(e)){t.delete(e);continue t}return t},t.interval=function(t,n,e){var r=new Ei,i=n;return null==n?(r.restart(t,n,e),r):(r._restart=r.restart,r.restart=function(t,n,e){n=+n,e=null==e?Ai():+e,r._restart((function o(a){a+=i,r._restart(o,i+=n,e),t(a)}),n,e)},r.restart(t,n,e),r)},t.isoFormat=D_,t.isoParse=F_,t.json=function(t,n){return fetch(t,n).then(Tc)},t.lab=ar,t.lch=function(t,n,e,r){return 1===arguments.length?hr(t):new pr(e,n,t,null==r?1:r)},t.least=function(t,e=n){let r,i=!1;if(1===e.length){let o;for(const a of t){const t=e(a);(i?n(t,o)<0:0===n(t,t))&&(r=a,o=t,i=!0)}}else for(const n of t)(i?e(n,r)<0:0===e(n,n))&&(r=n,i=!0);return r},t.leastIndex=ht,t.line=Ym,t.lineRadial=Zm,t.link=ax,t.linkHorizontal=function(){return ax(nx)},t.linkRadial=function(){const t=ax(rx);return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t},t.linkVertical=function(){return ax(ex)},t.local=Qn,t.map=function(t,n){if("function"!=typeof t[Symbol.iterator])throw new TypeError("values is not iterable");if("function"!=typeof n)throw new TypeError("mapper is not a function");return Array.from(t,((e,r)=>n(e,r,t)))},t.matcher=Vt,t.max=J,t.maxIndex=tt,t.mean=function(t,n){let e=0,r=0;if(void 0===n)for(let n of t)null!=n&&(n=+n)>=n&&(++e,r+=n);else{let i=-1;for(let o of t)null!=(o=n(o,++i,t))&&(o=+o)>=o&&(++e,r+=o)}if(e)return r/e},t.median=function(t,n){return at(t,.5,n)},t.medianIndex=function(t,n){return ct(t,.5,n)},t.merge=ft,t.min=nt,t.minIndex=et,t.mode=function(t,n){const e=new InternMap;if(void 0===n)for(let n of t)null!=n&&n>=n&&e.set(n,(e.get(n)||0)+1);else{let r=-1;for(let i of t)null!=(i=n(i,++r,t))&&i>=i&&e.set(i,(e.get(i)||0)+1)}let r,i=0;for(const[t,n]of e)n>i&&(i=n,r=t);return r},t.namespace=It,t.namespaces=Ut,t.nice=Z,t.now=Ai,t.pack=function(){var t=null,n=1,e=1,r=np;function i(i){const o=ap();return i.x=n/2,i.y=e/2,t?i.eachBefore(xp(t)).eachAfter(wp(r,.5,o)).eachBefore(Mp(1)):i.eachBefore(xp(mp)).eachAfter(wp(np,1,o)).eachAfter(wp(r,i.r/Math.min(n,e),o)).eachBefore(Mp(Math.min(n,e)/(2*i.r))),i}return i.radius=function(n){return arguments.length?(t=Jd(n),i):t},i.size=function(t){return arguments.length?(n=+t[0],e=+t[1],i):[n,e]},i.padding=function(t){return arguments.length?(r="function"==typeof t?t:ep(+t),i):r},i},t.packEnclose=function(t){return up(t,ap())},t.packSiblings=function(t){return bp(t,ap()),t},t.pairs=function(t,n=st){const e=[];let r,i=!1;for(const o of t)i&&e.push(n(r,o)),r=o,i=!0;return e},t.partition=function(){var t=1,n=1,e=0,r=!1;function i(i){var o=i.height+1;return i.x0=i.y0=e,i.x1=t,i.y1=n/o,i.eachBefore(function(t,n){return function(r){r.children&&Ap(r,r.x0,t*(r.depth+1)/n,r.x1,t*(r.depth+2)/n);var i=r.x0,o=r.y0,a=r.x1-e,u=r.y1-e;a0&&(d+=l);for(null!=n?p.sort((function(t,e){return n(g[t],g[e])})):null!=e&&p.sort((function(t,n){return e(a[t],a[n])})),u=0,f=d?(v-h*b)/d:0;u0?l*f:0)+b,g[c]={data:a[c],index:u,value:l,startAngle:y,endAngle:s,padAngle:_};return g}return a.value=function(n){return arguments.length?(t="function"==typeof n?n:ym(+n),a):t},a.sortValues=function(t){return arguments.length?(n=t,e=null,a):n},a.sort=function(t){return arguments.length?(e=t,n=null,a):e},a.startAngle=function(t){return arguments.length?(r="function"==typeof t?t:ym(+t),a):r},a.endAngle=function(t){return arguments.length?(i="function"==typeof t?t:ym(+t),a):i},a.padAngle=function(t){return arguments.length?(o="function"==typeof t?t:ym(+t),a):o},a},t.piecewise=di,t.pointRadial=Qm,t.pointer=ne,t.pointers=function(t,n){return t.target&&(t=te(t),void 0===n&&(n=t.currentTarget),t=t.touches||[t]),Array.from(t,(t=>ne(t,n)))},t.polygonArea=function(t){for(var n,e=-1,r=t.length,i=t[r-1],o=0;++eu!=f>u&&a<(c-e)*(u-r)/(f-r)+e&&(s=!s),c=e,f=r;return s},t.polygonHull=function(t){if((e=t.length)<3)return null;var n,e,r=new Array(e),i=new Array(e);for(n=0;n=0;--n)f.push(t[r[o[n]][2]]);for(n=+u;n(n=1664525*n+1013904223|0,lg*(n>>>0))},t.randomLogNormal=Kp,t.randomLogistic=fg,t.randomNormal=Zp,t.randomPareto=ng,t.randomPoisson=sg,t.randomUniform=Vp,t.randomWeibull=ug,t.range=lt,t.rank=function(t,e=n){if("function"!=typeof t[Symbol.iterator])throw new TypeError("values is not iterable");let r=Array.from(t);const i=new Float64Array(r.length);2!==e.length&&(r=r.map(e),e=n);const o=(t,n)=>e(r[t],r[n]);let a,u;return(t=Uint32Array.from(r,((t,n)=>n))).sort(e===n?(t,n)=>O(r[t],r[n]):I(o)),t.forEach(((t,n)=>{const e=o(t,void 0===a?t:a);e>=0?((void 0===a||e>0)&&(a=t,u=n),i[t]=u):i[t]=NaN})),i},t.reduce=function(t,n,e){if("function"!=typeof n)throw new TypeError("reducer is not a function");const r=t[Symbol.iterator]();let i,o,a=-1;if(arguments.length<3){if(({done:i,value:e}=r.next()),i)return;++a}for(;({done:i,value:o}=r.next()),!i;)e=n(e,o,++a,t);return e},t.reverse=function(t){if("function"!=typeof t[Symbol.iterator])throw new TypeError("values is not iterable");return Array.from(t).reverse()},t.rgb=Fe,t.ribbon=function(){return Wa()},t.ribbonArrow=function(){return Wa(Va)},t.rollup=$,t.rollups=D,t.scaleBand=yg,t.scaleDiverging=function t(){var n=Ng(L_()(mg));return n.copy=function(){return B_(n,t())},dg.apply(n,arguments)},t.scaleDivergingLog=function t(){var n=Fg(L_()).domain([.1,1,10]);return n.copy=function(){return B_(n,t()).base(n.base())},dg.apply(n,arguments)},t.scaleDivergingPow=j_,t.scaleDivergingSqrt=function(){return j_.apply(null,arguments).exponent(.5)},t.scaleDivergingSymlog=function t(){var n=Ig(L_());return n.copy=function(){return B_(n,t()).constant(n.constant())},dg.apply(n,arguments)},t.scaleIdentity=function t(n){var e;function r(t){return null==t||isNaN(t=+t)?e:t}return r.invert=r,r.domain=r.range=function(t){return arguments.length?(n=Array.from(t,_g),r):n.slice()},r.unknown=function(t){return arguments.length?(e=t,r):e},r.copy=function(){return t(n).unknown(e)},n=arguments.length?Array.from(n,_g):[0,1],Ng(r)},t.scaleImplicit=pg,t.scaleLinear=function t(){var n=Sg();return n.copy=function(){return Tg(n,t())},hg.apply(n,arguments),Ng(n)},t.scaleLog=function t(){const n=Fg(Ag()).domain([1,10]);return n.copy=()=>Tg(n,t()).base(n.base()),hg.apply(n,arguments),n},t.scaleOrdinal=gg,t.scalePoint=function(){return vg(yg.apply(null,arguments).paddingInner(1))},t.scalePow=jg,t.scaleQuantile=function t(){var e,r=[],i=[],o=[];function a(){var t=0,n=Math.max(1,i.length);for(o=new Array(n-1);++t0?o[n-1]:r[0],n=i?[o[i-1],r]:[o[n-1],o[n]]},u.unknown=function(t){return arguments.length?(n=t,u):u},u.thresholds=function(){return o.slice()},u.copy=function(){return t().domain([e,r]).range(a).unknown(n)},hg.apply(Ng(u),arguments)},t.scaleRadial=function t(){var n,e=Sg(),r=[0,1],i=!1;function o(t){var r=function(t){return Math.sign(t)*Math.sqrt(Math.abs(t))}(e(t));return isNaN(r)?n:i?Math.round(r):r}return o.invert=function(t){return e.invert(Hg(t))},o.domain=function(t){return arguments.length?(e.domain(t),o):e.domain()},o.range=function(t){return arguments.length?(e.range((r=Array.from(t,_g)).map(Hg)),o):r.slice()},o.rangeRound=function(t){return o.range(t).round(!0)},o.round=function(t){return arguments.length?(i=!!t,o):i},o.clamp=function(t){return arguments.length?(e.clamp(t),o):e.clamp()},o.unknown=function(t){return arguments.length?(n=t,o):n},o.copy=function(){return t(e.domain(),r).round(i).clamp(e.clamp()).unknown(n)},hg.apply(o,arguments),Ng(o)},t.scaleSequential=function t(){var n=Ng(O_()(mg));return n.copy=function(){return B_(n,t())},dg.apply(n,arguments)},t.scaleSequentialLog=function t(){var n=Fg(O_()).domain([1,10]);return n.copy=function(){return B_(n,t()).base(n.base())},dg.apply(n,arguments)},t.scaleSequentialPow=Y_,t.scaleSequentialQuantile=function t(){var e=[],r=mg;function i(t){if(null!=t&&!isNaN(t=+t))return r((s(e,t,1)-1)/(e.length-1))}return i.domain=function(t){if(!arguments.length)return e.slice();e=[];for(let n of t)null==n||isNaN(n=+n)||e.push(n);return e.sort(n),i},i.interpolator=function(t){return arguments.length?(r=t,i):r},i.range=function(){return e.map(((t,n)=>r(n/(e.length-1))))},i.quantiles=function(t){return Array.from({length:t+1},((n,r)=>at(e,r/t)))},i.copy=function(){return t(r).domain(e)},dg.apply(i,arguments)},t.scaleSequentialSqrt=function(){return Y_.apply(null,arguments).exponent(.5)},t.scaleSequentialSymlog=function t(){var n=Ig(O_());return n.copy=function(){return B_(n,t()).constant(n.constant())},dg.apply(n,arguments)},t.scaleSqrt=function(){return jg.apply(null,arguments).exponent(.5)},t.scaleSymlog=function t(){var n=Ig(Ag());return n.copy=function(){return Tg(n,t()).constant(n.constant())},hg.apply(n,arguments)},t.scaleThreshold=function t(){var n,e=[.5],r=[0,1],i=1;function o(t){return null!=t&&t<=t?r[s(e,t,0,i)]:n}return o.domain=function(t){return arguments.length?(e=Array.from(t),i=Math.min(e.length,r.length-1),o):e.slice()},o.range=function(t){return arguments.length?(r=Array.from(t),i=Math.min(e.length,r.length-1),o):r.slice()},o.invertExtent=function(t){var n=r.indexOf(t);return[e[n-1],e[n]]},o.unknown=function(t){return arguments.length?(n=t,o):n},o.copy=function(){return t().domain(e).range(r).unknown(n)},hg.apply(o,arguments)},t.scaleTime=function(){return hg.apply(I_(uv,cv,tv,Zy,xy,py,sy,ay,iy,t.timeFormat).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)},t.scaleUtc=function(){return hg.apply(I_(ov,av,ev,Qy,Fy,yy,hy,cy,iy,t.utcFormat).domain([Date.UTC(2e3,0,1),Date.UTC(2e3,0,2)]),arguments)},t.scan=function(t,n){const e=ht(t,n);return e<0?void 0:e},t.schemeAccent=G_,t.schemeBlues=Xb,t.schemeBrBG=ib,t.schemeBuGn=wb,t.schemeBuPu=Tb,t.schemeCategory10=X_,t.schemeDark2=V_,t.schemeGnBu=Sb,t.schemeGreens=Vb,t.schemeGreys=Zb,t.schemeObservable10=W_,t.schemeOrRd=Nb,t.schemeOranges=em,t.schemePRGn=ab,t.schemePaired=Z_,t.schemePastel1=K_,t.schemePastel2=Q_,t.schemePiYG=cb,t.schemePuBu=zb,t.schemePuBuGn=Cb,t.schemePuOr=sb,t.schemePuRd=Db,t.schemePurples=Qb,t.schemeRdBu=hb,t.schemeRdGy=pb,t.schemeRdPu=Fb,t.schemeRdYlBu=yb,t.schemeRdYlGn=_b,t.schemeReds=tm,t.schemeSet1=J_,t.schemeSet2=tb,t.schemeSet3=nb,t.schemeSpectral=mb,t.schemeTableau10=eb,t.schemeYlGn=Ob,t.schemeYlGnBu=Ub,t.schemeYlOrBr=Yb,t.schemeYlOrRd=jb,t.select=Zn,t.selectAll=function(t){return"string"==typeof t?new Vn([document.querySelectorAll(t)],[document.documentElement]):new Vn([Ht(t)],Gn)},t.selection=Wn,t.selector=jt,t.selectorAll=Gt,t.shuffle=dt,t.shuffler=pt,t.some=function(t,n){if("function"!=typeof n)throw new TypeError("test is not a function");let e=-1;for(const r of t)if(n(r,++e,t))return!0;return!1},t.sort=U,t.stack=function(){var t=ym([]),n=dw,e=hw,r=pw;function i(i){var o,a,u=Array.from(t.apply(this,arguments),gw),c=u.length,f=-1;for(const t of i)for(o=0,++f;o0)for(var e,r,i,o,a,u,c=0,f=t[n[0]].length;c0?(r[0]=o,r[1]=o+=i):i<0?(r[1]=a,r[0]=a+=i):(r[0]=0,r[1]=i)},t.stackOffsetExpand=function(t,n){if((r=t.length)>0){for(var e,r,i,o=0,a=t[0].length;o0){for(var e,r=0,i=t[n[0]],o=i.length;r0&&(r=(e=t[n[0]]).length)>0){for(var e,r,i,o=0,a=1;afunction(t){t=`${t}`;let n=t.length;zp(t,n-1)&&!zp(t,n-2)&&(t=t.slice(0,-1));return"/"===t[0]?t:`/${t}`}(t(n,e,r)))),e=n.map(Pp),i=new Set(n).add("");for(const t of e)i.has(t)||(i.add(t),n.push(t),e.push(Pp(t)),h.push(Np));d=(t,e)=>n[e],p=(t,n)=>e[n]}for(a=0,i=h.length;a=0&&(f=h[t]).data===Np;--t)f.data=null}if(u.parent=Sp,u.eachBefore((function(t){t.depth=t.parent.depth+1,--i})).eachBefore(Kd),u.parent=null,i>0)throw new Error("cycle");return u}return r.id=function(t){return arguments.length?(n=Jd(t),r):n},r.parentId=function(t){return arguments.length?(e=Jd(t),r):e},r.path=function(n){return arguments.length?(t=Jd(n),r):t},r},t.style=_n,t.subset=function(t,n){return _t(n,t)},t.sum=function(t,n){let e=0;if(void 0===n)for(let n of t)(n=+n)&&(e+=n);else{let r=-1;for(let i of t)(i=+n(i,++r,t))&&(e+=i)}return e},t.superset=_t,t.svg=Nc,t.symbol=function(t,n){let e=null,r=km(i);function i(){let i;if(e||(e=i=r()),t.apply(this,arguments).draw(e,+n.apply(this,arguments)),i)return e=null,i+""||null}return t="function"==typeof t?t:ym(t||fx),n="function"==typeof n?n:ym(void 0===n?64:+n),i.type=function(n){return arguments.length?(t="function"==typeof n?n:ym(n),i):t},i.size=function(t){return arguments.length?(n="function"==typeof t?t:ym(+t),i):n},i.context=function(t){return arguments.length?(e=null==t?null:t,i):e},i},t.symbolAsterisk=cx,t.symbolCircle=fx,t.symbolCross=sx,t.symbolDiamond=dx,t.symbolDiamond2=px,t.symbolPlus=gx,t.symbolSquare=yx,t.symbolSquare2=vx,t.symbolStar=xx,t.symbolTimes=Px,t.symbolTriangle=Mx,t.symbolTriangle2=Ax,t.symbolWye=Cx,t.symbolX=Px,t.symbols=zx,t.symbolsFill=zx,t.symbolsStroke=$x,t.text=mc,t.thresholdFreedmanDiaconis=function(t,n,e){const r=v(t),i=at(t,.75)-at(t,.25);return r&&i?Math.ceil((e-n)/(2*i*Math.pow(r,-1/3))):1},t.thresholdScott=function(t,n,e){const r=v(t),i=w(t);return r&&i?Math.ceil((e-n)*Math.cbrt(r)/(3.49*i)):1},t.thresholdSturges=K,t.tickFormat=Eg,t.tickIncrement=V,t.tickStep=W,t.ticks=G,t.timeDay=py,t.timeDays=gy,t.timeFormatDefaultLocale=P_,t.timeFormatLocale=hv,t.timeFriday=Sy,t.timeFridays=$y,t.timeHour=sy,t.timeHours=ly,t.timeInterval=Vg,t.timeMillisecond=Wg,t.timeMilliseconds=Zg,t.timeMinute=ay,t.timeMinutes=uy,t.timeMonday=wy,t.timeMondays=ky,t.timeMonth=Zy,t.timeMonths=Ky,t.timeSaturday=Ey,t.timeSaturdays=Dy,t.timeSecond=iy,t.timeSeconds=oy,t.timeSunday=xy,t.timeSundays=Ny,t.timeThursday=Ay,t.timeThursdays=zy,t.timeTickInterval=cv,t.timeTicks=uv,t.timeTuesday=My,t.timeTuesdays=Cy,t.timeWednesday=Ty,t.timeWednesdays=Py,t.timeWeek=xy,t.timeWeeks=Ny,t.timeYear=tv,t.timeYears=nv,t.timeout=$i,t.timer=Ni,t.timerFlush=ki,t.transition=go,t.transpose=gt,t.tree=function(){var t=$p,n=1,e=1,r=null;function i(i){var c=function(t){for(var n,e,r,i,o,a=new Up(t,0),u=[a];n=u.pop();)if(r=n._.children)for(n.children=new Array(o=r.length),i=o-1;i>=0;--i)u.push(e=n.children[i]=new Up(r[i],i)),e.parent=n;return(a.parent=new Up(null,0)).children=[a],a}(i);if(c.eachAfter(o),c.parent.m=-c.z,c.eachBefore(a),r)i.eachBefore(u);else{var f=i,s=i,l=i;i.eachBefore((function(t){t.xs.x&&(s=t),t.depth>l.depth&&(l=t)}));var h=f===s?1:t(f,s)/2,d=h-f.x,p=n/(s.x+h+d),g=e/(l.depth||1);i.eachBefore((function(t){t.x=(t.x+d)*p,t.y=t.depth*g}))}return i}function o(n){var e=n.children,r=n.parent.children,i=n.i?r[n.i-1]:null;if(e){!function(t){for(var n,e=0,r=0,i=t.children,o=i.length;--o>=0;)(n=i[o]).z+=e,n.m+=e,e+=n.s+(r+=n.c)}(n);var o=(e[0].z+e[e.length-1].z)/2;i?(n.z=i.z+t(n._,i._),n.m=n.z-o):n.z=o}else i&&(n.z=i.z+t(n._,i._));n.parent.A=function(n,e,r){if(e){for(var i,o=n,a=n,u=e,c=o.parent.children[0],f=o.m,s=a.m,l=u.m,h=c.m;u=Rp(u),o=Dp(o),u&&o;)c=Dp(c),(a=Rp(a)).a=n,(i=u.z+l-o.z-f+t(u._,o._))>0&&(Fp(qp(u,n,r),n,i),f+=i,s+=i),l+=u.m,f+=o.m,h+=c.m,s+=a.m;u&&!Rp(a)&&(a.t=u,a.m+=l-s),o&&!Dp(c)&&(c.t=o,c.m+=f-h,r=n)}return r}(n,i,n.parent.A||r[0])}function a(t){t._.x=t.z+t.parent.m,t.m+=t.parent.m}function u(t){t.x*=n,t.y=t.depth*e}return i.separation=function(n){return arguments.length?(t=n,i):t},i.size=function(t){return arguments.length?(r=!1,n=+t[0],e=+t[1],i):r?null:[n,e]},i.nodeSize=function(t){return arguments.length?(r=!0,n=+t[0],e=+t[1],i):r?[n,e]:null},i},t.treemap=function(){var t=Yp,n=!1,e=1,r=1,i=[0],o=np,a=np,u=np,c=np,f=np;function s(t){return t.x0=t.y0=0,t.x1=e,t.y1=r,t.eachBefore(l),i=[0],n&&t.eachBefore(Tp),t}function l(n){var e=i[n.depth],r=n.x0+e,s=n.y0+e,l=n.x1-e,h=n.y1-e;l=e-1){var s=u[n];return s.x0=i,s.y0=o,s.x1=a,void(s.y1=c)}var l=f[n],h=r/2+l,d=n+1,p=e-1;for(;d>>1;f[g]c-o){var _=r?(i*v+a*y)/r:a;t(n,d,y,i,o,_,c),t(d,e,v,_,o,a,c)}else{var b=r?(o*v+c*y)/r:c;t(n,d,y,i,o,a,b),t(d,e,v,i,b,a,c)}}(0,c,t.value,n,e,r,i)},t.treemapDice=Ap,t.treemapResquarify=Lp,t.treemapSlice=Ip,t.treemapSliceDice=function(t,n,e,r,i){(1&t.depth?Ip:Ap)(t,n,e,r,i)},t.treemapSquarify=Yp,t.tsv=Mc,t.tsvFormat=lc,t.tsvFormatBody=hc,t.tsvFormatRow=pc,t.tsvFormatRows=dc,t.tsvFormatValue=gc,t.tsvParse=fc,t.tsvParseRows=sc,t.union=function(...t){const n=new InternSet;for(const e of t)for(const t of e)n.add(t);return n},t.unixDay=_y,t.unixDays=by,t.utcDay=yy,t.utcDays=vy,t.utcFriday=By,t.utcFridays=Vy,t.utcHour=hy,t.utcHours=dy,t.utcMillisecond=Wg,t.utcMilliseconds=Zg,t.utcMinute=cy,t.utcMinutes=fy,t.utcMonday=qy,t.utcMondays=jy,t.utcMonth=Qy,t.utcMonths=Jy,t.utcSaturday=Yy,t.utcSaturdays=Wy,t.utcSecond=iy,t.utcSeconds=oy,t.utcSunday=Fy,t.utcSundays=Ly,t.utcThursday=Oy,t.utcThursdays=Gy,t.utcTickInterval=av,t.utcTicks=ov,t.utcTuesday=Uy,t.utcTuesdays=Hy,t.utcWednesday=Iy,t.utcWednesdays=Xy,t.utcWeek=Fy,t.utcWeeks=Ly,t.utcYear=ev,t.utcYears=rv,t.variance=x,t.version="7.9.0",t.window=pn,t.xml=Sc,t.zip=function(){return gt(arguments)},t.zoom=function(){var t,n,e,r=Ew,i=Nw,o=zw,a=Cw,u=Pw,c=[0,1/0],f=[[-1/0,-1/0],[1/0,1/0]],s=250,l=ri,h=$t("start","zoom","end"),d=500,p=150,g=0,y=10;function v(t){t.property("__zoom",kw).on("wheel.zoom",T,{passive:!1}).on("mousedown.zoom",A).on("dblclick.zoom",S).filter(u).on("touchstart.zoom",E).on("touchmove.zoom",N).on("touchend.zoom touchcancel.zoom",k).style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function _(t,n){return(n=Math.max(c[0],Math.min(c[1],n)))===t.k?t:new ww(n,t.x,t.y)}function b(t,n,e){var r=n[0]-e[0]*t.k,i=n[1]-e[1]*t.k;return r===t.x&&i===t.y?t:new ww(t.k,r,i)}function m(t){return[(+t[0][0]+ +t[1][0])/2,(+t[0][1]+ +t[1][1])/2]}function x(t,n,e,r){t.on("start.zoom",(function(){w(this,arguments).event(r).start()})).on("interrupt.zoom end.zoom",(function(){w(this,arguments).event(r).end()})).tween("zoom",(function(){var t=this,o=arguments,a=w(t,o).event(r),u=i.apply(t,o),c=null==e?m(u):"function"==typeof e?e.apply(t,o):e,f=Math.max(u[1][0]-u[0][0],u[1][1]-u[0][1]),s=t.__zoom,h="function"==typeof n?n.apply(t,o):n,d=l(s.invert(c).concat(f/s.k),h.invert(c).concat(f/h.k));return function(t){if(1===t)t=h;else{var n=d(t),e=f/n[2];t=new ww(e,c[0]-n[0]*e,c[1]-n[1]*e)}a.zoom(null,t)}}))}function w(t,n,e){return!e&&t.__zooming||new M(t,n)}function M(t,n){this.that=t,this.args=n,this.active=0,this.sourceEvent=null,this.extent=i.apply(t,n),this.taps=0}function T(t,...n){if(r.apply(this,arguments)){var e=w(this,n).event(t),i=this.__zoom,u=Math.max(c[0],Math.min(c[1],i.k*Math.pow(2,a.apply(this,arguments)))),s=ne(t);if(e.wheel)e.mouse[0][0]===s[0]&&e.mouse[0][1]===s[1]||(e.mouse[1]=i.invert(e.mouse[0]=s)),clearTimeout(e.wheel);else{if(i.k===u)return;e.mouse=[s,i.invert(s)],Gi(this),e.start()}Sw(t),e.wheel=setTimeout((function(){e.wheel=null,e.end()}),p),e.zoom("mouse",o(b(_(i,u),e.mouse[0],e.mouse[1]),e.extent,f))}}function A(t,...n){if(!e&&r.apply(this,arguments)){var i=t.currentTarget,a=w(this,n,!0).event(t),u=Zn(t.view).on("mousemove.zoom",(function(t){if(Sw(t),!a.moved){var n=t.clientX-s,e=t.clientY-l;a.moved=n*n+e*e>g}a.event(t).zoom("mouse",o(b(a.that.__zoom,a.mouse[0]=ne(t,i),a.mouse[1]),a.extent,f))}),!0).on("mouseup.zoom",(function(t){u.on("mousemove.zoom mouseup.zoom",null),ue(t.view,a.moved),Sw(t),a.event(t).end()}),!0),c=ne(t,i),s=t.clientX,l=t.clientY;ae(t.view),Aw(t),a.mouse=[c,this.__zoom.invert(c)],Gi(this),a.start()}}function S(t,...n){if(r.apply(this,arguments)){var e=this.__zoom,a=ne(t.changedTouches?t.changedTouches[0]:t,this),u=e.invert(a),c=e.k*(t.shiftKey?.5:2),l=o(b(_(e,c),a,u),i.apply(this,n),f);Sw(t),s>0?Zn(this).transition().duration(s).call(x,l,a,t):Zn(this).call(v.transform,l,a,t)}}function E(e,...i){if(r.apply(this,arguments)){var o,a,u,c,f=e.touches,s=f.length,l=w(this,i,e.changedTouches.length===s).event(e);for(Aw(e),a=0;a{var s8e=Object.create;var Ax=Object.defineProperty;var o8e=Object.getOwnPropertyDescriptor;var l8e=Object.getOwnPropertyNames;var c8e=Object.getPrototypeOf,u8e=Object.prototype.hasOwnProperty;var o=(t,e)=>Ax(t,"name",{value:e,configurable:!0});var P=(t,e)=>()=>(t&&(e=t(t=0)),e);var ar=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),ur=(t,e)=>{for(var r in e)Ax(t,r,{get:e[r],enumerable:!0})},a4=(t,e,r,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of l8e(e))!u8e.call(t,n)&&n!==r&&Ax(t,n,{get:()=>e[n],enumerable:!(i=o8e(e,n))||i.enumerable});return t},Kr=(t,e,r)=>(a4(t,e,"default"),r&&a4(r,e,"default")),Wa=(t,e,r)=>(r=t!=null?s8e(c8e(t)):{},a4(e||!t||!t.__esModule?Ax(r,"default",{value:t,enumerable:!0}):r,t)),s4=t=>a4(Ax({},"__esModule",{value:!0}),t);var h8e,Tg,_8,TY,o4=P(()=>{"use strict";h8e=Object.freeze({left:0,top:0,width:16,height:16}),Tg=Object.freeze({rotate:0,vFlip:!1,hFlip:!1}),_8=Object.freeze({...h8e,...Tg}),TY=Object.freeze({..._8,body:"",hidden:!1})});var f8e,kY,CY=P(()=>{"use strict";o4();f8e=Object.freeze({width:null,height:null}),kY=Object.freeze({...f8e,...Tg})});var D8,l4,wY=P(()=>{"use strict";D8=o((t,e,r,i="")=>{let n=t.split(":");if(t.slice(0,1)==="@"){if(n.length<2||n.length>3)return null;i=n.shift().slice(1)}if(n.length>3||!n.length)return null;if(n.length>1){let l=n.pop(),u=n.pop(),h={provider:n.length>0?n[0]:i,prefix:u,name:l};return e&&!l4(h)?null:h}let a=n[0],s=a.split("-");if(s.length>1){let l={provider:i,prefix:s.shift(),name:s.join("-")};return e&&!l4(l)?null:l}if(r&&i===""){let l={provider:i,prefix:"",name:a};return e&&!l4(l,r)?null:l}return null},"stringToIcon"),l4=o((t,e)=>t?!!((e&&t.prefix===""||t.prefix)&&t.name):!1,"validateIconName")});function EY(t,e){let r={};!t.hFlip!=!e.hFlip&&(r.hFlip=!0),!t.vFlip!=!e.vFlip&&(r.vFlip=!0);let i=((t.rotate||0)+(e.rotate||0))%4;return i&&(r.rotate=i),r}var SY=P(()=>{"use strict";o(EY,"mergeIconTransformations")});function L8(t,e){let r=EY(t,e);for(let i in TY)i in Tg?i in t&&!(i in r)&&(r[i]=Tg[i]):i in e?r[i]=e[i]:i in t&&(r[i]=t[i]);return r}var AY=P(()=>{"use strict";o4();SY();o(L8,"mergeIconData")});function _Y(t,e){let r=t.icons,i=t.aliases||Object.create(null),n=Object.create(null);function a(s){if(r[s])return n[s]=[];if(!(s in n)){n[s]=null;let l=i[s]&&i[s].parent,u=l&&a(l);u&&(n[s]=[l].concat(u))}return n[s]}return o(a,"resolve"),(e||Object.keys(r).concat(Object.keys(i))).forEach(a),n}var DY=P(()=>{"use strict";o(_Y,"getIconsTree")});function LY(t,e,r){let i=t.icons,n=t.aliases||Object.create(null),a={};function s(l){a=L8(i[l]||n[l],a)}return o(s,"parse"),s(e),r.forEach(s),L8(t,a)}function R8(t,e){if(t.icons[e])return LY(t,e,[]);let r=_Y(t,[e])[e];return r?LY(t,e,r):null}var RY=P(()=>{"use strict";AY();DY();o(LY,"internalGetIconData");o(R8,"getIconData")});function N8(t,e,r){if(e===1)return t;if(r=r||100,typeof t=="number")return Math.ceil(t*e*r)/r;if(typeof t!="string")return t;let i=t.split(d8e);if(i===null||!i.length)return t;let n=[],a=i.shift(),s=p8e.test(a);for(;;){if(s){let l=parseFloat(a);isNaN(l)?n.push(a):n.push(Math.ceil(l*e*r)/r)}else n.push(a);if(a=i.shift(),a===void 0)return n.join("");s=!s}}var d8e,p8e,NY=P(()=>{"use strict";d8e=/(-?[0-9.]*[0-9]+[0-9.]*)/g,p8e=/^-?[0-9.]*[0-9]+[0-9.]*$/g;o(N8,"calculateSize")});function m8e(t,e="defs"){let r="",i=t.indexOf("<"+e);for(;i>=0;){let n=t.indexOf(">",i),a=t.indexOf("",a);if(s===-1)break;r+=t.slice(n+1,a).trim(),t=t.slice(0,i).trim()+t.slice(s+1)}return{defs:r,content:t}}function g8e(t,e){return t?""+t+""+e:e}function IY(t,e,r){let i=m8e(t);return g8e(i.defs,e+i.content+r)}var MY=P(()=>{"use strict";o(m8e,"splitSVGDefs");o(g8e,"mergeDefsAndContent");o(IY,"wrapSVGContent")});function I8(t,e){let r={..._8,...t},i={...kY,...e},n={left:r.left,top:r.top,width:r.width,height:r.height},a=r.body;[r,i].forEach(y=>{let v=[],x=y.hFlip,b=y.vFlip,T=y.rotate;x?b?T+=2:(v.push("translate("+(n.width+n.left).toString()+" "+(0-n.top).toString()+")"),v.push("scale(-1 1)"),n.top=n.left=0):b&&(v.push("translate("+(0-n.left).toString()+" "+(n.height+n.top).toString()+")"),v.push("scale(1 -1)"),n.top=n.left=0);let w;switch(T<0&&(T-=Math.floor(T/4)*4),T=T%4,T){case 1:w=n.height/2+n.top,v.unshift("rotate(90 "+w.toString()+" "+w.toString()+")");break;case 2:v.unshift("rotate(180 "+(n.width/2+n.left).toString()+" "+(n.height/2+n.top).toString()+")");break;case 3:w=n.width/2+n.left,v.unshift("rotate(-90 "+w.toString()+" "+w.toString()+")");break}T%2===1&&(n.left!==n.top&&(w=n.left,n.left=n.top,n.top=w),n.width!==n.height&&(w=n.width,n.width=n.height,n.height=w)),v.length&&(a=IY(a,'',""))});let s=i.width,l=i.height,u=n.width,h=n.height,f,d;s===null?(d=l===null?"1em":l==="auto"?h:l,f=N8(d,u/h)):(f=s==="auto"?u:s,d=l===null?N8(f,h/u):l==="auto"?h:l);let p={},m=o((y,v)=>{y8e(v)||(p[y]=v.toString())},"setAttr");m("width",f),m("height",d);let g=[n.left,n.top,u,h];return p.viewBox=g.join(" "),{attributes:p,viewBox:g,body:a}}var y8e,OY=P(()=>{"use strict";o4();CY();NY();MY();y8e=o(t=>t==="unset"||t==="undefined"||t==="none","isUnsetKeyword");o(I8,"iconToSVG")});function M8(t,e=x8e){let r=[],i;for(;i=v8e.exec(t);)r.push(i[1]);if(!r.length)return t;let n="suffix"+(Math.random()*16777216|Date.now()).toString(16);return r.forEach(a=>{let s=typeof e=="function"?e(a):e+(b8e++).toString(),l=a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");t=t.replace(new RegExp('([#;"])('+l+')([")]|\\.[a-z])',"g"),"$1"+s+n+"$3")}),t=t.replace(new RegExp(n,"g"),""),t}var v8e,x8e,b8e,PY=P(()=>{"use strict";v8e=/\sid="(\S+)"/g,x8e="IconifyId"+Date.now().toString(16)+(Math.random()*16777216|0).toString(16),b8e=0;o(M8,"replaceIDs")});function O8(t,e){let r=t.indexOf("xlink:")===-1?"":' xmlns:xlink="http://www.w3.org/1999/xlink"';for(let i in e)r+=" "+i+'="'+e[i]+'"';return'"+t+""}var BY=P(()=>{"use strict";o(O8,"iconToHTML")});var FY=P(()=>{"use strict";wY();RY();OY();PY();BY()});var P8,Yi,kg=P(()=>{"use strict";P8=o((t,e,{depth:r=2,clobber:i=!1}={})=>{let n={depth:r,clobber:i};return Array.isArray(e)&&!Array.isArray(t)?(e.forEach(a=>P8(t,a,n)),t):Array.isArray(e)&&Array.isArray(t)?(e.forEach(a=>{t.includes(a)||t.push(a)}),t):t===void 0||r<=0?t!=null&&typeof t=="object"&&typeof e=="object"?Object.assign(t,e):e:(e!==void 0&&typeof t=="object"&&typeof e=="object"&&Object.keys(e).forEach(a=>{typeof e[a]=="object"&&e[a]!==null&&(t[a]===void 0||typeof t[a]=="object")?(t[a]===void 0&&(t[a]=Array.isArray(e[a])?[]:{}),t[a]=P8(t[a],e[a],{depth:r-1,clobber:i})):(i||typeof t[a]!="object"&&typeof e[a]!="object")&&(t[a]=e[a])}),t)},"assignWithDepth"),Yi=P8});var c4=ar((B8,F8)=>{"use strict";(function(t,e){typeof B8=="object"&&typeof F8<"u"?F8.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs=e()})(B8,(function(){"use strict";var t=1e3,e=6e4,r=36e5,i="millisecond",n="second",a="minute",s="hour",l="day",u="week",h="month",f="quarter",d="year",p="date",m="Invalid Date",g=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,y=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,v={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:o(function(A){var _=["th","st","nd","rd"],D=A%100;return"["+A+(_[(D-20)%10]||_[D]||_[0])+"]"},"ordinal")},x=o(function(A,_,D){var N=String(A);return!N||N.length>=_?A:""+Array(_+1-N.length).join(D)+A},"m"),b={s:x,z:o(function(A){var _=-A.utcOffset(),D=Math.abs(_),N=Math.floor(D/60),R=D%60;return(_<=0?"+":"-")+x(N,2,"0")+":"+x(R,2,"0")},"z"),m:o(function A(_,D){if(_.date()1)return A(O[0])}else{var $=_.name;w[$]=_,R=$}return!N&&R&&(T=R),R||!N&&T},"t"),S=o(function(A,_){if(C(A))return A.clone();var D=typeof _=="object"?_:{};return D.date=A,D.args=arguments,new M(D)},"O"),L=b;L.l=E,L.i=C,L.w=function(A,_){return S(A,{locale:_.$L,utc:_.$u,x:_.$x,$offset:_.$offset})};var M=(function(){function A(D){this.$L=E(D.locale,null,!0),this.parse(D),this.$x=this.$x||D.x||{},this[k]=!0}o(A,"M");var _=A.prototype;return _.parse=function(D){this.$d=(function(N){var R=N.date,B=N.utc;if(R===null)return new Date(NaN);if(L.u(R))return new Date;if(R instanceof Date)return new Date(R);if(typeof R=="string"&&!/Z$/i.test(R)){var O=R.match(g);if(O){var $=O[2]-1||0,z=(O[7]||"0").substring(0,3);return B?new Date(Date.UTC(O[1],$,O[3]||1,O[4]||0,O[5]||0,O[6]||0,z)):new Date(O[1],$,O[3]||1,O[4]||0,O[5]||0,O[6]||0,z)}}return new Date(R)})(D),this.init()},_.init=function(){var D=this.$d;this.$y=D.getFullYear(),this.$M=D.getMonth(),this.$D=D.getDate(),this.$W=D.getDay(),this.$H=D.getHours(),this.$m=D.getMinutes(),this.$s=D.getSeconds(),this.$ms=D.getMilliseconds()},_.$utils=function(){return L},_.isValid=function(){return this.$d.toString()!==m},_.isSame=function(D,N){var R=S(D);return this.startOf(N)<=R&&R<=this.endOf(N)},_.isAfter=function(D,N){return S(D){"use strict";$Y=Wa(c4(),1),dh={trace:0,debug:1,info:2,warn:3,error:4,fatal:5},Q={trace:o((...t)=>{},"trace"),debug:o((...t)=>{},"debug"),info:o((...t)=>{},"info"),warn:o((...t)=>{},"warn"),error:o((...t)=>{},"error"),fatal:o((...t)=>{},"fatal")},_x=o(function(t="fatal"){let e=dh.fatal;typeof t=="string"?t.toLowerCase()in dh&&(e=dh[t]):typeof t=="number"&&(e=t),Q.trace=()=>{},Q.debug=()=>{},Q.info=()=>{},Q.warn=()=>{},Q.error=()=>{},Q.fatal=()=>{},e<=dh.fatal&&(Q.fatal=console.error?console.error.bind(console,yl("FATAL"),"color: orange"):console.log.bind(console,"\x1B[35m",yl("FATAL"))),e<=dh.error&&(Q.error=console.error?console.error.bind(console,yl("ERROR"),"color: orange"):console.log.bind(console,"\x1B[31m",yl("ERROR"))),e<=dh.warn&&(Q.warn=console.warn?console.warn.bind(console,yl("WARN"),"color: orange"):console.log.bind(console,"\x1B[33m",yl("WARN"))),e<=dh.info&&(Q.info=console.info?console.info.bind(console,yl("INFO"),"color: lightblue"):console.log.bind(console,"\x1B[34m",yl("INFO"))),e<=dh.debug&&(Q.debug=console.debug?console.debug.bind(console,yl("DEBUG"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",yl("DEBUG"))),e<=dh.trace&&(Q.trace=console.debug?console.debug.bind(console,yl("TRACE"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",yl("TRACE")))},"setLogLevel"),yl=o(t=>`%c${(0,$Y.default)().format("ss.SSS")} : ${t} : `,"format")});var u4,zY,GY=P(()=>{"use strict";u4={min:{r:0,g:0,b:0,s:0,l:0,a:0},max:{r:255,g:255,b:255,h:360,s:100,l:100,a:1},clamp:{r:o(t=>t>=255?255:t<0?0:t,"r"),g:o(t=>t>=255?255:t<0?0:t,"g"),b:o(t=>t>=255?255:t<0?0:t,"b"),h:o(t=>t%360,"h"),s:o(t=>t>=100?100:t<0?0:t,"s"),l:o(t=>t>=100?100:t<0?0:t,"l"),a:o(t=>t>=1?1:t<0?0:t,"a")},toLinear:o(t=>{let e=t/255;return t>.03928?Math.pow((e+.055)/1.055,2.4):e/12.92},"toLinear"),hue2rgb:o((t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<.16666666666666666?t+(e-t)*6*r:r<.5?e:r<.6666666666666666?t+(e-t)*(.6666666666666666-r)*6:t),"hue2rgb"),hsl2rgb:o(({h:t,s:e,l:r},i)=>{if(!e)return r*2.55;t/=360,e/=100,r/=100;let n=r<.5?r*(1+e):r+e-r*e,a=2*r-n;switch(i){case"r":return u4.hue2rgb(a,n,t+.3333333333333333)*255;case"g":return u4.hue2rgb(a,n,t)*255;case"b":return u4.hue2rgb(a,n,t-.3333333333333333)*255}},"hsl2rgb"),rgb2hsl:o(({r:t,g:e,b:r},i)=>{t/=255,e/=255,r/=255;let n=Math.max(t,e,r),a=Math.min(t,e,r),s=(n+a)/2;if(i==="l")return s*100;if(n===a)return 0;let l=n-a,u=s>.5?l/(2-n-a):l/(n+a);if(i==="s")return u*100;switch(n){case t:return((e-r)/l+(e{"use strict";T8e={clamp:o((t,e,r)=>e>r?Math.min(e,Math.max(r,t)):Math.min(r,Math.max(e,t)),"clamp"),round:o(t=>Math.round(t*1e10)/1e10,"round")},VY=T8e});var k8e,WY,UY=P(()=>{"use strict";k8e={dec2hex:o(t=>{let e=Math.round(t).toString(16);return e.length>1?e:`0${e}`},"dec2hex")},WY=k8e});var C8e,sr,Qc=P(()=>{"use strict";GY();qY();UY();C8e={channel:zY,lang:VY,unit:WY},sr=C8e});var ph,oa,Dx=P(()=>{"use strict";Qc();ph={};for(let t=0;t<=255;t++)ph[t]=sr.unit.dec2hex(t);oa={ALL:0,RGB:1,HSL:2}});var $8,HY,YY=P(()=>{"use strict";Dx();$8=class{static{o(this,"Type")}constructor(){this.type=oa.ALL}get(){return this.type}set(e){if(this.type&&this.type!==e)throw new Error("Cannot change both RGB and HSL channels at the same time");this.type=e}reset(){this.type=oa.ALL}is(e){return this.type===e}},HY=$8});var z8,jY,XY=P(()=>{"use strict";Qc();YY();Dx();z8=class{static{o(this,"Channels")}constructor(e,r){this.color=r,this.changed=!1,this.data=e,this.type=new HY}set(e,r){return this.color=r,this.changed=!1,this.data=e,this.type.type=oa.ALL,this}_ensureHSL(){let e=this.data,{h:r,s:i,l:n}=e;r===void 0&&(e.h=sr.channel.rgb2hsl(e,"h")),i===void 0&&(e.s=sr.channel.rgb2hsl(e,"s")),n===void 0&&(e.l=sr.channel.rgb2hsl(e,"l"))}_ensureRGB(){let e=this.data,{r,g:i,b:n}=e;r===void 0&&(e.r=sr.channel.hsl2rgb(e,"r")),i===void 0&&(e.g=sr.channel.hsl2rgb(e,"g")),n===void 0&&(e.b=sr.channel.hsl2rgb(e,"b"))}get r(){let e=this.data,r=e.r;return!this.type.is(oa.HSL)&&r!==void 0?r:(this._ensureHSL(),sr.channel.hsl2rgb(e,"r"))}get g(){let e=this.data,r=e.g;return!this.type.is(oa.HSL)&&r!==void 0?r:(this._ensureHSL(),sr.channel.hsl2rgb(e,"g"))}get b(){let e=this.data,r=e.b;return!this.type.is(oa.HSL)&&r!==void 0?r:(this._ensureHSL(),sr.channel.hsl2rgb(e,"b"))}get h(){let e=this.data,r=e.h;return!this.type.is(oa.RGB)&&r!==void 0?r:(this._ensureRGB(),sr.channel.rgb2hsl(e,"h"))}get s(){let e=this.data,r=e.s;return!this.type.is(oa.RGB)&&r!==void 0?r:(this._ensureRGB(),sr.channel.rgb2hsl(e,"s"))}get l(){let e=this.data,r=e.l;return!this.type.is(oa.RGB)&&r!==void 0?r:(this._ensureRGB(),sr.channel.rgb2hsl(e,"l"))}get a(){return this.data.a}set r(e){this.type.set(oa.RGB),this.changed=!0,this.data.r=e}set g(e){this.type.set(oa.RGB),this.changed=!0,this.data.g=e}set b(e){this.type.set(oa.RGB),this.changed=!0,this.data.b=e}set h(e){this.type.set(oa.HSL),this.changed=!0,this.data.h=e}set s(e){this.type.set(oa.HSL),this.changed=!0,this.data.s=e}set l(e){this.type.set(oa.HSL),this.changed=!0,this.data.l=e}set a(e){this.changed=!0,this.data.a=e}},jY=z8});var w8e,Rf,Lx=P(()=>{"use strict";XY();w8e=new jY({r:0,g:0,b:0,a:0},"transparent"),Rf=w8e});var KY,$p,G8=P(()=>{"use strict";Lx();Dx();KY={re:/^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,parse:o(t=>{if(t.charCodeAt(0)!==35)return;let e=t.match(KY.re);if(!e)return;let r=e[1],i=parseInt(r,16),n=r.length,a=n%4===0,s=n>4,l=s?1:17,u=s?8:4,h=a?0:-1,f=s?255:15;return Rf.set({r:(i>>u*(h+3)&f)*l,g:(i>>u*(h+2)&f)*l,b:(i>>u*(h+1)&f)*l,a:a?(i&f)*l/255:1},t)},"parse"),stringify:o(t=>{let{r:e,g:r,b:i,a:n}=t;return n<1?`#${ph[Math.round(e)]}${ph[Math.round(r)]}${ph[Math.round(i)]}${ph[Math.round(n*255)]}`:`#${ph[Math.round(e)]}${ph[Math.round(r)]}${ph[Math.round(i)]}`},"stringify")},$p=KY});var h4,Rx,QY=P(()=>{"use strict";Qc();Lx();h4={re:/^hsla?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(?:deg|grad|rad|turn)?)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(%)?))?\s*?\)$/i,hueRe:/^(.+?)(deg|grad|rad|turn)$/i,_hue2deg:o(t=>{let e=t.match(h4.hueRe);if(e){let[,r,i]=e;switch(i){case"grad":return sr.channel.clamp.h(parseFloat(r)*.9);case"rad":return sr.channel.clamp.h(parseFloat(r)*180/Math.PI);case"turn":return sr.channel.clamp.h(parseFloat(r)*360)}}return sr.channel.clamp.h(parseFloat(t))},"_hue2deg"),parse:o(t=>{let e=t.charCodeAt(0);if(e!==104&&e!==72)return;let r=t.match(h4.re);if(!r)return;let[,i,n,a,s,l]=r;return Rf.set({h:h4._hue2deg(i),s:sr.channel.clamp.s(parseFloat(n)),l:sr.channel.clamp.l(parseFloat(a)),a:s?sr.channel.clamp.a(l?parseFloat(s)/100:parseFloat(s)):1},t)},"parse"),stringify:o(t=>{let{h:e,s:r,l:i,a:n}=t;return n<1?`hsla(${sr.lang.round(e)}, ${sr.lang.round(r)}%, ${sr.lang.round(i)}%, ${n})`:`hsl(${sr.lang.round(e)}, ${sr.lang.round(r)}%, ${sr.lang.round(i)}%)`},"stringify")},Rx=h4});var f4,V8,ZY=P(()=>{"use strict";G8();f4={colors:{aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyanaqua:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",transparent:"#00000000",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},parse:o(t=>{t=t.toLowerCase();let e=f4.colors[t];if(e)return $p.parse(e)},"parse"),stringify:o(t=>{let e=$p.stringify(t);for(let r in f4.colors)if(f4.colors[r]===e)return r},"stringify")},V8=f4});var JY,Nx,ej=P(()=>{"use strict";Qc();Lx();JY={re:/^rgba?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?)))?\s*?\)$/i,parse:o(t=>{let e=t.charCodeAt(0);if(e!==114&&e!==82)return;let r=t.match(JY.re);if(!r)return;let[,i,n,a,s,l,u,h,f]=r;return Rf.set({r:sr.channel.clamp.r(n?parseFloat(i)*2.55:parseFloat(i)),g:sr.channel.clamp.g(s?parseFloat(a)*2.55:parseFloat(a)),b:sr.channel.clamp.b(u?parseFloat(l)*2.55:parseFloat(l)),a:h?sr.channel.clamp.a(f?parseFloat(h)/100:parseFloat(h)):1},t)},"parse"),stringify:o(t=>{let{r:e,g:r,b:i,a:n}=t;return n<1?`rgba(${sr.lang.round(e)}, ${sr.lang.round(r)}, ${sr.lang.round(i)}, ${sr.lang.round(n)})`:`rgb(${sr.lang.round(e)}, ${sr.lang.round(r)}, ${sr.lang.round(i)})`},"stringify")},Nx=JY});var E8e,la,mh=P(()=>{"use strict";G8();QY();ZY();ej();Dx();E8e={format:{keyword:V8,hex:$p,rgb:Nx,rgba:Nx,hsl:Rx,hsla:Rx},parse:o(t=>{if(typeof t!="string")return t;let e=$p.parse(t)||Nx.parse(t)||Rx.parse(t)||V8.parse(t);if(e)return e;throw new Error(`Unsupported color format: "${t}"`)},"parse"),stringify:o(t=>!t.changed&&t.color?t.color:t.type.is(oa.HSL)||t.data.r===void 0?Rx.stringify(t):t.a<1||!Number.isInteger(t.r)||!Number.isInteger(t.g)||!Number.isInteger(t.b)?Nx.stringify(t):$p.stringify(t),"stringify")},la=E8e});var S8e,d4,q8=P(()=>{"use strict";Qc();mh();S8e=o((t,e)=>{let r=la.parse(t);for(let i in e)r[i]=sr.channel.clamp[i](e[i]);return la.stringify(r)},"change"),d4=S8e});var A8e,Fn,W8=P(()=>{"use strict";Qc();Lx();mh();q8();A8e=o((t,e,r=0,i=1)=>{if(typeof t!="number")return d4(t,{a:e});let n=Rf.set({r:sr.channel.clamp.r(t),g:sr.channel.clamp.g(e),b:sr.channel.clamp.b(r),a:sr.channel.clamp.a(i)});return la.stringify(n)},"rgba"),Fn=A8e});var _8e,zp,tj=P(()=>{"use strict";Qc();mh();_8e=o((t,e)=>sr.lang.round(la.parse(t)[e]),"channel"),zp=_8e});var D8e,rj,ij=P(()=>{"use strict";Qc();mh();D8e=o(t=>{let{r:e,g:r,b:i}=la.parse(t),n=.2126*sr.channel.toLinear(e)+.7152*sr.channel.toLinear(r)+.0722*sr.channel.toLinear(i);return sr.lang.round(n)},"luminance"),rj=D8e});var L8e,nj,aj=P(()=>{"use strict";ij();L8e=o(t=>rj(t)>=.5,"isLight"),nj=L8e});var R8e,yi,sj=P(()=>{"use strict";aj();R8e=o(t=>!nj(t),"isDark"),yi=R8e});var N8e,Cg,p4=P(()=>{"use strict";Qc();mh();N8e=o((t,e,r)=>{let i=la.parse(t),n=i[e],a=sr.channel.clamp[e](n+r);return n!==a&&(i[e]=a),la.stringify(i)},"adjustChannel"),Cg=N8e});var I8e,Ke,oj=P(()=>{"use strict";p4();I8e=o((t,e)=>Cg(t,"l",e),"lighten"),Ke=I8e});var M8e,Ye,lj=P(()=>{"use strict";p4();M8e=o((t,e)=>Cg(t,"l",-e),"darken"),Ye=M8e});var O8e,m4,cj=P(()=>{"use strict";p4();O8e=o((t,e)=>Cg(t,"a",-e),"transparentize"),m4=O8e});var P8e,ie,uj=P(()=>{"use strict";mh();q8();P8e=o((t,e)=>{let r=la.parse(t),i={};for(let n in e)e[n]&&(i[n]=r[n]+e[n]);return d4(t,i)},"adjust"),ie=P8e});var B8e,hj,fj=P(()=>{"use strict";mh();W8();B8e=o((t,e,r=50)=>{let{r:i,g:n,b:a,a:s}=la.parse(t),{r:l,g:u,b:h,a:f}=la.parse(e),d=r/100,p=d*2-1,m=s-f,y=((p*m===-1?p:(p+m)/(1+p*m))+1)/2,v=1-y,x=i*y+l*v,b=n*y+u*v,T=a*y+h*v,w=s*d+f*(1-d);return Fn(x,b,T,w)},"mix"),hj=B8e});var F8e,Ge,dj=P(()=>{"use strict";mh();fj();F8e=o((t,e=100)=>{let r=la.parse(t);return r.r=255-r.r,r.g=255-r.g,r.b=255-r.b,hj(r,t,e)},"invert"),Ge=F8e});var pj=P(()=>{"use strict";W8();tj();sj();oj();lj();cj();uj();dj()});var Yn=P(()=>{"use strict";pj()});var jn,Xn,oc=P(()=>{"use strict";jn="#ffffff",Xn="#f2f2f2"});var Jt,vl=P(()=>{"use strict";Yn();Jt=o((t,e)=>e?ie(t,{s:-40,l:10}):ie(t,{s:-40,l:-10}),"mkBorder")});var H8,mj,gj=P(()=>{"use strict";Yn();oc();vl();H8=class{static{o(this,"Theme")}constructor(){this.background="#f4f4f4",this.primaryColor="#fff4dd",this.noteBkgColor="#fff5ad",this.noteTextColor="#333",this.THEME_COLOR_LIMIT=12,this.radius=5,this.strokeWidth=1,this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.useGradient=!0,this.dropShadow="drop-shadow( 1px 2px 2px rgba(185,185,185,1))"}updateColors(){if(this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#333"),this.secondaryColor=this.secondaryColor||ie(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||ie(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||Jt(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||Jt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||Jt(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||Jt(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#333",this.secondaryTextColor=this.secondaryTextColor||Ge(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||Ge(this.tertiaryColor),this.lineColor=this.lineColor||Ge(this.background),this.arrowheadColor=this.arrowheadColor||Ge(this.background),this.textColor=this.textColor||this.primaryTextColor,this.border2=this.border2||this.tertiaryBorderColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.primaryBorderColor,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?Ye(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||this.actorBorder,this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||Ye(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||Ge(this.lineColor),this.sectionBkgColor=this.sectionBkgColor||this.tertiaryColor,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||this.secondaryColor,this.sectionBkgColor2=this.sectionBkgColor2||this.primaryColor,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||this.primaryColor,this.activeTaskBorderColor=this.activeTaskBorderColor||this.primaryColor,this.activeTaskBkgColor=this.activeTaskBkgColor||Ke(this.primaryColor,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.vertLineColor=this.vertLineColor||"navy",this.taskTextColor=this.taskTextColor||this.textColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.noteFontWeight=this.noteFontWeight||"normal",this.fontWeight=this.fontWeight||"normal",this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.darkMode?(this.rowOdd=this.rowOdd||Ye(this.mainBkg,5)||"#ffffff",this.rowEven=this.rowEven||Ye(this.mainBkg,10)):(this.rowOdd=this.rowOdd||Ke(this.mainBkg,75)||"#ffffff",this.rowEven=this.rowEven||Ke(this.mainBkg,5)),this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||this.tertiaryColor,this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||ie(this.primaryColor,{h:30}),this.cScale4=this.cScale4||ie(this.primaryColor,{h:60}),this.cScale5=this.cScale5||ie(this.primaryColor,{h:90}),this.cScale6=this.cScale6||ie(this.primaryColor,{h:120}),this.cScale7=this.cScale7||ie(this.primaryColor,{h:150}),this.cScale8=this.cScale8||ie(this.primaryColor,{h:210,l:150}),this.cScale9=this.cScale9||ie(this.primaryColor,{h:270}),this.cScale10=this.cScale10||ie(this.primaryColor,{h:300}),this.cScale11=this.cScale11||ie(this.primaryColor,{h:330}),this.darkMode)for(let r=0;r{this[i]=e[i]}),this.updateColors(),r.forEach(i=>{this[i]=e[i]})}},mj=o(t=>{let e=new H8;return e.calculate(t),e},"getThemeVariables")});var Y8,yj,vj=P(()=>{"use strict";Yn();vl();Y8=class{static{o(this,"Theme")}constructor(){this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=Ke(this.primaryColor,16),this.tertiaryColor=ie(this.primaryColor,{h:-160}),this.primaryBorderColor=Ge(this.background),this.secondaryBorderColor=Jt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Jt(this.tertiaryColor,this.darkMode),this.primaryTextColor=Ge(this.primaryColor),this.secondaryTextColor=Ge(this.secondaryColor),this.tertiaryTextColor=Ge(this.tertiaryColor),this.lineColor=Ge(this.background),this.textColor=Ge(this.background),this.mainBkg="#1f2020",this.secondBkg="calculated",this.mainContrastColor="lightgrey",this.darkTextColor=Ke(Ge("#323D47"),10),this.lineColor="calculated",this.border1="#ccc",this.border2=Fn(255,255,255,.25),this.arrowheadColor="calculated",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#181818",this.textColor="#ccc",this.THEME_COLOR_LIMIT=12,this.radius=5,this.strokeWidth=1,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#F9FFFE",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="calculated",this.activationBkgColor="calculated",this.sequenceNumberColor="black",this.clusterBkg="#302F3D",this.sectionBkgColor=Ye("#EAE8D9",30),this.altSectionBkgColor="calculated",this.sectionBkgColor2="#EAE8D9",this.excludeBkgColor=Ye(this.sectionBkgColor,10),this.taskBorderColor=Fn(255,255,255,70),this.taskBkgColor="calculated",this.taskTextColor="calculated",this.taskTextLightColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor=Fn(255,255,255,50),this.activeTaskBkgColor="#81B1DB",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="grey",this.critBorderColor="#E83737",this.critBkgColor="#E83737",this.taskTextDarkColor="calculated",this.todayLineColor="#DB5757",this.vertLineColor="#00BFFF",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.rowOdd=this.rowOdd||Ke(this.mainBkg,5)||"#ffffff",this.rowEven=this.rowEven||Ye(this.mainBkg,10),this.labelColor="calculated",this.errorBkgColor="#a44141",this.errorTextColor="#ddd",this.useGradient=!0,this.gradientStart=this.primaryBorderColor,this.gradientStop=this.secondaryBorderColor,this.dropShadow="drop-shadow( 1px 2px 2px rgba(185,185,185,1))",this.noteFontWeight=this.noteFontWeight||"normal",this.fontWeight=this.fontWeight||"normal"}updateColors(){this.secondBkg=Ke(this.mainBkg,16),this.lineColor=this.mainContrastColor,this.arrowheadColor=this.mainContrastColor,this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.edgeLabelBackground=Ke(this.labelBackground,25),this.actorBorder=this.border1,this.actorBkg=this.mainBkg,this.actorTextColor=this.mainContrastColor,this.actorLineColor=this.actorBorder,this.signalColor=this.mainContrastColor,this.signalTextColor=this.mainContrastColor,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.mainContrastColor,this.loopTextColor=this.mainContrastColor,this.noteBorderColor=this.secondaryBorderColor,this.noteBkgColor=this.secondBkg,this.noteTextColor=this.secondaryTextColor,this.activationBorderColor=this.border1,this.activationBkgColor=this.secondBkg,this.altSectionBkgColor=this.background,this.taskBkgColor=Ke(this.mainBkg,23),this.taskTextColor=this.darkTextColor,this.taskTextLightColor=this.mainContrastColor,this.taskTextOutsideColor=this.taskTextLightColor,this.gridColor=this.mainContrastColor,this.doneTaskBkgColor=this.mainContrastColor,this.taskTextDarkColor=Ge(this.doneTaskBkgColor),this.archEdgeColor=this.lineColor,this.archEdgeArrowColor=this.lineColor,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#555",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#f4f4f4",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=ie(this.primaryColor,{h:64}),this.fillType3=ie(this.secondaryColor,{h:64}),this.fillType4=ie(this.primaryColor,{h:-64}),this.fillType5=ie(this.secondaryColor,{h:-64}),this.fillType6=ie(this.primaryColor,{h:128}),this.fillType7=ie(this.secondaryColor,{h:128}),this.cScale1=this.cScale1||"#0b0000",this.cScale2=this.cScale2||"#4d1037",this.cScale3=this.cScale3||"#3f5258",this.cScale4=this.cScale4||"#4f2f1b",this.cScale5=this.cScale5||"#6e0a0a",this.cScale6=this.cScale6||"#3b0048",this.cScale7=this.cScale7||"#995a01",this.cScale8=this.cScale8||"#154706",this.cScale9=this.cScale9||"#161722",this.cScale10=this.cScale10||"#00296f",this.cScale11=this.cScale11||"#01629c",this.cScale12=this.cScale12||"#010029",this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||ie(this.primaryColor,{h:30}),this.cScale4=this.cScale4||ie(this.primaryColor,{h:60}),this.cScale5=this.cScale5||ie(this.primaryColor,{h:90}),this.cScale6=this.cScale6||ie(this.primaryColor,{h:120}),this.cScale7=this.cScale7||ie(this.primaryColor,{h:150}),this.cScale8=this.cScale8||ie(this.primaryColor,{h:210}),this.cScale9=this.cScale9||ie(this.primaryColor,{h:270}),this.cScale10=this.cScale10||ie(this.primaryColor,{h:300}),this.cScale11=this.cScale11||ie(this.primaryColor,{h:330});for(let e=0;e{this[i]=e[i]}),this.updateColors(),r.forEach(i=>{this[i]=e[i]})}},yj=o(t=>{let e=new Y8;return e.calculate(t),e},"getThemeVariables")});var j8,Zc,wg=P(()=>{"use strict";Yn();vl();oc();j8=class{static{o(this,"Theme")}constructor(){this.background="#f4f4f4",this.primaryColor="#ECECFF",this.secondaryColor=ie(this.primaryColor,{h:120}),this.secondaryColor="#ffffde",this.tertiaryColor=ie(this.primaryColor,{h:-160}),this.primaryBorderColor=Jt(this.primaryColor,this.darkMode),this.secondaryBorderColor=Jt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Jt(this.tertiaryColor,this.darkMode),this.primaryTextColor=Ge(this.primaryColor),this.secondaryTextColor=Ge(this.secondaryColor),this.tertiaryTextColor=Ge(this.tertiaryColor),this.lineColor=Ge(this.background),this.textColor=Ge(this.background),this.background="white",this.mainBkg="#ECECFF",this.secondBkg="#ffffde",this.lineColor="#333333",this.border1="#9370DB",this.primaryBorderColor=Jt(this.primaryColor,this.darkMode),this.border2="#aaaa33",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="rgba(232,232,232, 0.8)",this.textColor="#333",this.THEME_COLOR_LIMIT=12,this.radius=5,this.strokeWidth=1,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.clusterBkg="#FBFBFF",this.sectionBkgColor="calculated",this.altSectionBkgColor="calculated",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="calculated",this.taskTextColor=this.taskTextLightColor,this.taskTextDarkColor="calculated",this.taskTextOutsideColor=this.taskTextDarkColor,this.taskTextClickableColor="calculated",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBorderColor="calculated",this.critBkgColor="calculated",this.todayLineColor="calculated",this.vertLineColor="calculated",this.sectionBkgColor=Fn(102,102,255,.49),this.altSectionBkgColor="white",this.sectionBkgColor2="#fff400",this.taskBorderColor="#534fbc",this.taskBkgColor="#8a90dd",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="#534fbc",this.activeTaskBkgColor="#bfc7ff",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.vertLineColor="navy",this.noteFontWeight=this.noteFontWeight||"normal",this.fontWeight=this.fontWeight||"normal",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.rowOdd="calculated",this.rowEven="calculated",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222",this.useGradient=!1,this.gradientStart=this.primaryBorderColor,this.gradientStop=this.secondaryBorderColor,this.dropShadow="drop-shadow(1px 2px 2px rgba(185, 185, 185, 1))",this.updateColors()}updateColors(){this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||ie(this.primaryColor,{h:30}),this.cScale4=this.cScale4||ie(this.primaryColor,{h:60}),this.cScale5=this.cScale5||ie(this.primaryColor,{h:90}),this.cScale6=this.cScale6||ie(this.primaryColor,{h:120}),this.cScale7=this.cScale7||ie(this.primaryColor,{h:150}),this.cScale8=this.cScale8||ie(this.primaryColor,{h:210}),this.cScale9=this.cScale9||ie(this.primaryColor,{h:270}),this.cScale10=this.cScale10||ie(this.primaryColor,{h:300}),this.cScale11=this.cScale11||ie(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||Ye(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||Ye(this.tertiaryColor,40);for(let e=0;e{this[i]==="calculated"&&(this[i]=void 0)}),typeof e!="object"){this.updateColors();return}let r=Object.keys(e);r.forEach(i=>{this[i]=e[i]}),this.updateColors(),r.forEach(i=>{this[i]=e[i]})}},Zc=o(t=>{let e=new j8;return e.calculate(t),e},"getThemeVariables")});var X8,xj,bj=P(()=>{"use strict";Yn();oc();vl();X8=class{static{o(this,"Theme")}constructor(){this.background="#f4f4f4",this.primaryColor="#cde498",this.secondaryColor="#cdffb2",this.background="white",this.mainBkg="#cde498",this.secondBkg="#cdffb2",this.lineColor="green",this.border1="#13540c",this.border2="#6eaa49",this.arrowheadColor="green",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.tertiaryColor=Ke("#cde498",10),this.primaryBorderColor=Jt(this.primaryColor,this.darkMode),this.secondaryBorderColor=Jt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Jt(this.tertiaryColor,this.darkMode),this.primaryTextColor=Ge(this.primaryColor),this.secondaryTextColor=Ge(this.secondaryColor),this.tertiaryTextColor=Ge(this.primaryColor),this.lineColor=Ge(this.background),this.textColor=Ge(this.background),this.THEME_COLOR_LIMIT=12,this.radius=5,this.strokeWidth=1,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#333",this.edgeLabelBackground="#e8e8e8",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="calculated",this.signalColor="#333",this.signalTextColor="#333",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="#326932",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="#6eaa49",this.altSectionBkgColor="white",this.sectionBkgColor2="#6eaa49",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="#487e3a",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.vertLineColor="#00BFFF",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.noteFontWeight="normal",this.fontWeight="normal",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222",this.useGradient=!0,this.gradientStart=this.primaryBorderColor,this.gradientStop=this.secondaryBorderColor,this.dropShadow="drop-shadow( 1px 2px 2px rgba(185,185,185,0.5))"}updateColors(){this.actorBorder=Ye(this.mainBkg,20),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.actorLineColor=this.actorBorder,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||ie(this.primaryColor,{h:30}),this.cScale4=this.cScale4||ie(this.primaryColor,{h:60}),this.cScale5=this.cScale5||ie(this.primaryColor,{h:90}),this.cScale6=this.cScale6||ie(this.primaryColor,{h:120}),this.cScale7=this.cScale7||ie(this.primaryColor,{h:150}),this.cScale8=this.cScale8||ie(this.primaryColor,{h:210}),this.cScale9=this.cScale9||ie(this.primaryColor,{h:270}),this.cScale10=this.cScale10||ie(this.primaryColor,{h:300}),this.cScale11=this.cScale11||ie(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||Ye(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||Ye(this.tertiaryColor,40);for(let e=0;e{this[i]=e[i]}),this.updateColors(),r.forEach(i=>{this[i]=e[i]})}},xj=o(t=>{let e=new X8;return e.calculate(t),e},"getThemeVariables")});var K8,Tj,kj=P(()=>{"use strict";Yn();vl();oc();K8=class{static{o(this,"Theme")}constructor(){this.primaryColor="#eee",this.contrast="#707070",this.secondaryColor=Ke(this.contrast,55),this.background="#ffffff",this.tertiaryColor=ie(this.primaryColor,{h:-160}),this.primaryBorderColor=Jt(this.primaryColor,this.darkMode),this.secondaryBorderColor=Jt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Jt(this.tertiaryColor,this.darkMode),this.primaryTextColor=Ge(this.primaryColor),this.secondaryTextColor=Ge(this.secondaryColor),this.tertiaryTextColor=Ge(this.tertiaryColor),this.lineColor=Ge(this.background),this.textColor=Ge(this.background),this.mainBkg="#eee",this.secondBkg="calculated",this.lineColor="#666",this.border1="#999",this.border2="calculated",this.note="#ffa",this.text="#333",this.critical="#d42",this.done="#bbb",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.THEME_COLOR_LIMIT=12,this.radius=5,this.strokeWidth=1,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="white",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor=this.actorBorder,this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="calculated",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="white",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBkgColor="calculated",this.critBorderColor="calculated",this.todayLineColor="calculated",this.vertLineColor="calculated",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.noteFontWeight="normal",this.fontWeight="normal",this.rowOdd=this.rowOdd||Ke(this.mainBkg,75)||"#ffffff",this.rowEven=this.rowEven||"#f4f4f4",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222",this.useGradient=!0,this.gradientStart=this.primaryBorderColor,this.gradientStop=this.secondaryBorderColor,this.dropShadow="drop-shadow( 1px 2px 2px rgba(185,185,185,1))"}updateColors(){this.secondBkg=Ke(this.contrast,55),this.border2=this.contrast,this.actorBorder=Ke(this.border1,23),this.actorBkg=this.mainBkg,this.actorTextColor=this.text,this.actorLineColor=this.actorBorder,this.signalColor=this.text,this.signalTextColor=this.text,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.text,this.loopTextColor=this.text,this.noteBorderColor="#999",this.noteBkgColor="#666",this.noteTextColor="#fff",this.cScale0=this.cScale0||"#555",this.cScale1=this.cScale1||"#F4F4F4",this.cScale2=this.cScale2||"#555",this.cScale3=this.cScale3||"#BBB",this.cScale4=this.cScale4||"#777",this.cScale5=this.cScale5||"#999",this.cScale6=this.cScale6||"#DDD",this.cScale7=this.cScale7||"#FFF",this.cScale8=this.cScale8||"#DDD",this.cScale9=this.cScale9||"#BBB",this.cScale10=this.cScale10||"#999",this.cScale11=this.cScale11||"#777";for(let e=0;e{this[i]=e[i]}),this.updateColors(),r.forEach(i=>{this[i]=e[i]})}},Tj=o(t=>{let e=new K8;return e.calculate(t),e},"getThemeVariables")});var Q8,Cj,wj=P(()=>{"use strict";Yn();vl();oc();Q8=class{static{o(this,"Theme")}constructor(){this.background="#ffffff",this.primaryColor="#cccccc",this.mainBkg="#ffffff",this.noteBkgColor="#fff5ad",this.noteTextColor="#333",this.THEME_COLOR_LIMIT=12,this.radius=3,this.strokeWidth=2,this.primaryBorderColor=Jt(this.primaryColor,this.darkMode),this.fontFamily="arial, sans-serif",this.fontSize="14px",this.nodeBorder="#000000",this.stateBorder="#000000",this.useGradient=!0,this.gradientStart="#0042eb",this.gradientStop="#eb0042",this.dropShadow="drop-shadow( 0px 1px 2px rgba(0, 0, 0, 0.25));",this.tertiaryColor="#ffffff",this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.noteFontWeight="normal",this.fontWeight="normal"}updateColors(){this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#333"),this.secondaryColor=this.secondaryColor||ie(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||ie(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||Jt(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||Jt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||Jt(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||Jt(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#333",this.secondaryTextColor=this.secondaryTextColor||Ge(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||Ge(this.tertiaryColor),this.lineColor=this.lineColor||Ge(this.background),this.arrowheadColor=this.arrowheadColor||Ge(this.background),this.textColor=this.textColor||this.primaryTextColor,this.border2=this.border2||this.tertiaryBorderColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.primaryBorderColor,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?Ye(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||this.actorBorder,this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||Ye(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||Ge(this.lineColor);let e="#ECECFE",r="#E9E9F1",i=ie(e,{h:180,l:5});if(this.sectionBkgColor=this.sectionBkgColor||i,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||r,this.sectionBkgColor2=this.sectionBkgColor2||e,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||e,this.activeTaskBorderColor=this.activeTaskBorderColor||e,this.activeTaskBkgColor=this.activeTaskBkgColor||Ke(e,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.taskTextColor=this.taskTextColor||this.textColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.vertLineColor=this.vertLineColor||this.primaryBorderColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.archEdgeColor=this.lineColor,this.archEdgeArrowColor=this.lineColor,this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.cScale0=this.cScale0||e,this.cScale1=this.cScale1||r,this.cScale2=this.cScale2||i,this.cScale3=this.cScale3||ie(e,{h:30}),this.cScale4=this.cScale4||ie(e,{h:60}),this.cScale5=this.cScale5||ie(e,{h:90}),this.cScale6=this.cScale6||ie(e,{h:120}),this.cScale7=this.cScale7||ie(e,{h:150}),this.cScale8=this.cScale8||ie(e,{h:210,l:150}),this.cScale9=this.cScale9||ie(e,{h:270}),this.cScale10=this.cScale10||ie(e,{h:300}),this.cScale11=this.cScale11||ie(e,{h:330}),this.darkMode)for(let a=0;a{this[i]=e[i]}),this.updateColors(),r.forEach(i=>{this[i]=e[i]})}},Cj=o(t=>{let e=new Q8;return e.calculate(t),e},"getThemeVariables")});var Z8,Ej,Sj=P(()=>{"use strict";Yn();vl();oc();Z8=class{static{o(this,"Theme")}constructor(){this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=Ke(this.primaryColor,16),this.tertiaryColor=ie(this.primaryColor,{h:-160}),this.primaryBorderColor=Ge(this.background),this.secondaryBorderColor=Jt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Jt(this.tertiaryColor,this.darkMode),this.primaryTextColor=Ge(this.primaryColor),this.secondaryTextColor=Ge(this.secondaryColor),this.tertiaryTextColor=Ge(this.tertiaryColor),this.mainBkg="#2a2020",this.secondBkg="calculated",this.mainContrastColor="lightgrey",this.darkTextColor=Ke(Ge("#323D47"),10),this.border1="#ccc",this.border2=Fn(255,255,255,.25),this.arrowheadColor=Ge(this.background),this.fontFamily="arial, sans-serif",this.fontSize="14px",this.labelBackground="#181818",this.textColor="#ccc",this.THEME_COLOR_LIMIT=12,this.radius=3,this.strokeWidth=1,this.noteBkgColor="#fff5ad",this.noteTextColor="#333",this.THEME_COLOR_LIMIT=12,this.fontFamily="arial, sans-serif",this.fontSize="14px",this.useGradient=!0,this.gradientStart="#0042eb",this.gradientStop="#eb0042",this.dropShadow="drop-shadow( 1px 2px 2px rgba(185,185,185,0.2))",this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.noteFontWeight="normal",this.fontWeight="normal"}updateColors(){if(this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#333"),this.secondaryColor=this.secondaryColor||ie(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||ie(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||Jt(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||Jt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||Jt(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||Jt(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#333",this.secondaryTextColor=this.secondaryTextColor||Ge(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||Ge(this.tertiaryColor),this.lineColor=this.lineColor||Ge(this.background),this.arrowheadColor=this.arrowheadColor||Ge(this.background),this.textColor=this.textColor||this.primaryTextColor,this.border2=this.border2||this.tertiaryBorderColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.border1,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?Ye(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||this.actorBorder,this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||Ye(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||Ge(this.lineColor),this.sectionBkgColor=this.sectionBkgColor||this.tertiaryColor,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||this.secondaryColor,this.sectionBkgColor2=this.sectionBkgColor2||this.primaryColor,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||this.primaryColor,this.activeTaskBorderColor=this.activeTaskBorderColor||this.primaryColor,this.activeTaskBkgColor=this.activeTaskBkgColor||Ke(this.primaryColor,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.vertLineColor=this.vertLineColor||this.primaryBorderColor,this.taskTextColor=this.taskTextColor||this.textColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.archEdgeColor=this.lineColor,this.archEdgeArrowColor=this.lineColor,this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||ie(this.primaryColor,{h:30}),this.cScale4=this.cScale4||ie(this.primaryColor,{h:60}),this.cScale5=this.cScale5||ie(this.primaryColor,{h:90}),this.cScale6=this.cScale6||ie(this.primaryColor,{h:120}),this.cScale7=this.cScale7||ie(this.primaryColor,{h:150}),this.cScale8=this.cScale8||ie(this.primaryColor,{h:210,l:150}),this.cScale9=this.cScale9||ie(this.primaryColor,{h:270}),this.cScale10=this.cScale10||ie(this.primaryColor,{h:300}),this.cScale11=this.cScale11||ie(this.primaryColor,{h:330}),this.darkMode)for(let r=0;r{this[i]=e[i]}),this.updateColors(),r.forEach(i=>{this[i]=e[i]})}},Ej=o(t=>{let e=new Z8;return e.calculate(t),e},"getThemeVariables")});var J8,Aj,_j=P(()=>{"use strict";Yn();vl();oc();J8=class{static{o(this,"Theme")}constructor(){this.background="#ffffff",this.primaryColor="#cccccc",this.mainBkg="#ffffff",this.noteBkgColor="#fff5ad",this.noteTextColor="#28253D",this.THEME_COLOR_LIMIT=12,this.radius=12,this.strokeWidth=2,this.primaryBorderColor=Jt("#28253D",this.darkMode),this.fontFamily='"Recursive Variable", arial, sans-serif',this.fontSize="14px",this.nodeBorder="#28253D",this.stateBorder="#28253D",this.useGradient=!1,this.gradientStart="#0042eb",this.gradientStop="#eb0042",this.dropShadow="url(#drop-shadow)",this.nodeShadow=!0,this.tertiaryColor="#ffffff",this.clusterBkg="#F9F9FB",this.clusterBorder="#BDBCCC",this.noteBorderColor="#FACC15",this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.actorBorder="#28253D",this.filterColor="#000000"}updateColors(){this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#28253D"),this.secondaryColor=this.secondaryColor||ie(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||ie(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||Jt(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||Jt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||Jt(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||Jt(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#FEF9C3",this.noteTextColor=this.noteTextColor||"#28253D",this.secondaryTextColor=this.secondaryTextColor||Ge(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||Ge(this.tertiaryColor),this.lineColor=this.lineColor||Ge(this.background),this.arrowheadColor=this.arrowheadColor||Ge(this.background),this.textColor=this.textColor||this.primaryTextColor,this.border2=this.border2||this.tertiaryBorderColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.primaryBorderColor,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?Ye(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.noteFontWeight=600,this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||this.actorBorder,this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||Ye(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||Ge(this.lineColor);let e="#ECECFE",r="#E9E9F1",i=ie(e,{h:180,l:5});this.sectionBkgColor=this.sectionBkgColor||i,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||r,this.sectionBkgColor2=this.sectionBkgColor2||e,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||e,this.activeTaskBorderColor=this.activeTaskBorderColor||e,this.activeTaskBkgColor=this.activeTaskBkgColor||Ke(e,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.taskTextColor=this.taskTextColor||this.textColor,this.vertLineColor=this.vertLineColor||this.primaryBorderColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.archEdgeColor=this.lineColor,this.archEdgeArrowColor=this.lineColor,this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.compositeTitleBackground="#F9F9FB",this.altBackground="#F9F9FB",this.stateEdgeLabelBackground="#FFFFFF",this.fontWeight=600,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor;for(let a=0;a{this[i]=e[i]}),this.updateColors(),r.forEach(i=>{this[i]=e[i]})}},Aj=o(t=>{let e=new J8;return e.calculate(t),e},"getThemeVariables")});var eD,Dj,Lj=P(()=>{"use strict";Yn();vl();oc();eD=class{static{o(this,"Theme")}constructor(){this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=Ke(this.primaryColor,16),this.tertiaryColor=ie(this.primaryColor,{h:-160}),this.primaryBorderColor=Ge(this.background),this.secondaryBorderColor=Jt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Jt(this.tertiaryColor,this.darkMode),this.primaryTextColor=Ge(this.primaryColor),this.secondaryTextColor=Ge(this.secondaryColor),this.tertiaryTextColor=Ge(this.tertiaryColor),this.mainBkg="#111113",this.secondBkg="calculated",this.mainContrastColor="lightgrey",this.darkTextColor=Ke(Ge("#323D47"),10),this.border1="#ccc",this.border2=Fn(255,255,255,.25),this.arrowheadColor=Ge(this.background),this.fontFamily='"Recursive Variable", arial, sans-serif',this.fontSize="14px",this.labelBackground="#111113",this.textColor="#ccc",this.THEME_COLOR_LIMIT=12,this.radius=12,this.strokeWidth=2,this.noteBkgColor=this.noteBkgColor??"#FEF9C3",this.noteTextColor=this.noteTextColor??"#28253D",this.THEME_COLOR_LIMIT=12,this.fontFamily='"Recursive Variable", arial, sans-serif',this.fontSize="14px",this.nodeBorder="#FFFFFF",this.stateBorder="#FFFFFF",this.useGradient=!1,this.gradientStart="#0042eb",this.gradientStop="#eb0042",this.dropShadow="url(#drop-shadow)",this.nodeShadow=!0,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.clusterBkg="#1E1A2E",this.clusterBorder="#BDBCCC",this.noteBorderColor="#FACC15",this.noteFontWeight=600,this.filterColor="#FFFFFF"}updateColors(){if(this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#FFFFFF"),this.secondaryColor=this.secondaryColor||ie(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||ie(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||Jt(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||Jt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||Jt(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||Jt(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#FFFFFF",this.secondaryTextColor=this.secondaryTextColor||Ge(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||Ge(this.tertiaryColor),this.lineColor=this.lineColor||Ge(this.background),this.arrowheadColor=this.arrowheadColor||Ge(this.background),this.textColor=this.textColor||this.primaryTextColor,this.border2=this.border2||this.tertiaryBorderColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.border1,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?Ye(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder="#FFFFFF",this.signalColor="#FFFFFF",this.labelBoxBorderColor="#BDBCCC",this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||this.actorBorder,this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||Ye(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||Ge(this.lineColor),this.sectionBkgColor=this.sectionBkgColor||this.tertiaryColor,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||this.secondaryColor,this.sectionBkgColor2=this.sectionBkgColor2||this.primaryColor,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||this.primaryColor,this.activeTaskBorderColor=this.activeTaskBorderColor||this.primaryColor,this.activeTaskBkgColor=this.activeTaskBkgColor||Ke(this.primaryColor,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.taskTextColor=this.taskTextColor||this.textColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.archEdgeColor=this.lineColor,this.archEdgeArrowColor=this.lineColor,this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.vertLineColor=this.vertLineColor||this.primaryBorderColor,this.compositeBackground="#16141F",this.altBackground="#16141F",this.compositeTitleBackground="#16141F",this.stateEdgeLabelBackground="#16141F",this.fontWeight=600,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||ie(this.primaryColor,{h:30}),this.cScale4=this.cScale4||ie(this.primaryColor,{h:60}),this.cScale5=this.cScale5||ie(this.primaryColor,{h:90}),this.cScale6=this.cScale6||ie(this.primaryColor,{h:120}),this.cScale7=this.cScale7||ie(this.primaryColor,{h:150}),this.cScale8=this.cScale8||ie(this.primaryColor,{h:210,l:150}),this.cScale9=this.cScale9||ie(this.primaryColor,{h:270}),this.cScale10=this.cScale10||ie(this.primaryColor,{h:300}),this.cScale11=this.cScale11||ie(this.primaryColor,{h:330}),this.darkMode)for(let r=0;r{this[i]=e[i]}),this.updateColors(),r.forEach(i=>{this[i]=e[i]})}},Dj=o(t=>{let e=new eD;return e.calculate(t),e},"getThemeVariables")});var tD,Rj,Nj=P(()=>{"use strict";Yn();vl();oc();tD=class{static{o(this,"Theme")}constructor(){this.background="#ffffff",this.primaryColor="#cccccc",this.mainBkg="#ffffff",this.noteBkgColor="#fff5ad",this.noteTextColor="#28253D",this.THEME_COLOR_LIMIT=12,this.radius=12,this.strokeWidth=2,this.primaryBorderColor=Jt(this.primaryColor,this.darkMode),this.fontFamily='"Recursive Variable", arial, sans-serif',this.fontSize="14px",this.nodeBorder="#28253D",this.stateBorder="#28253D",this.useGradient=!1,this.gradientStart="#0042eb",this.gradientStop="#eb0042",this.dropShadow="url(#drop-shadow)",this.nodeShadow=!0,this.tertiaryColor="#ffffff",this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.actorBorder="#28253D",this.noteBorderColor="#FACC15",this.noteFontWeight=600,this.borderColorArray=["#E879F9","#2DD4BF","#FB923C","#22D3EE","#4ADE80","#A78BFA","#F87171","#FACC15","#818CF8","#A3E635 ","#38BDF8","#FB7185"],this.bkgColorArray=["#FDF4FF","#F0FDFA","#FFF7ED","#ECFEFF","#F0FDF4","#F5F3FF","#FEF2F2","#FEFCE8","#EEF2FF","#F7FEE7","#F0F9FF","#FFF1F2"],this.filterColor="#000000"}updateColors(){this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#28253D"),this.secondaryColor=this.secondaryColor||ie(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||ie(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||Jt(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||Jt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||Jt(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||Jt(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#28253D",this.secondaryTextColor=this.secondaryTextColor||Ge(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||Ge(this.tertiaryColor),this.lineColor=this.lineColor||Ge(this.background),this.arrowheadColor=this.arrowheadColor||Ge(this.background),this.textColor=this.textColor||this.primaryTextColor,this.border2=this.border2||this.tertiaryBorderColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.primaryBorderColor,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?Ye(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||this.actorBorder,this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||Ye(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||Ge(this.lineColor);let e="#ECECFE",r="#E9E9F1",i=ie(e,{h:180,l:5});this.sectionBkgColor=this.sectionBkgColor||i,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||r,this.sectionBkgColor2=this.sectionBkgColor2||e,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||e,this.activeTaskBorderColor=this.activeTaskBorderColor||e,this.activeTaskBkgColor=this.activeTaskBkgColor||Ke(e,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.taskTextColor=this.taskTextColor||this.textColor,this.vertLineColor=this.vertLineColor||this.primaryBorderColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.archEdgeColor=this.lineColor,this.archEdgeArrowColor=this.lineColor,this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.cScale0=this.cScale0||"#f4a8ff",this.cScale1=this.cScale1||"#46ecd5",this.cScale2=this.cScale2||"#ffb86a",this.cScale3=this.cScale3||"#dab2ff",this.cScale4=this.cScale4||"#7bf1a8",this.cScale5=this.cScale5||"#c4b4ff",this.cScale6=this.cScale6||"#ffa2a2",this.cScale7=this.cScale7||"#ffdf20",this.cScale8=this.cScale8||"#a3b3ff",this.cScale9=this.cScale9||"#bbf451",this.cScale10=this.cScale10||"#74d4ff",this.cScale11=this.cScale11||"#ffa1ad";for(let a=0;a{this[i]=e[i]}),this.updateColors(),r.forEach(i=>{this[i]=e[i]})}},Rj=o(t=>{let e=new tD;return e.calculate(t),e},"getThemeVariables")});var rD,Ij,Mj=P(()=>{"use strict";Yn();vl();oc();rD=class{static{o(this,"Theme")}constructor(){this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=Ke(this.primaryColor,16),this.tertiaryColor=ie(this.primaryColor,{h:-160}),this.primaryBorderColor=Ge(this.background),this.secondaryBorderColor=Jt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Jt(this.tertiaryColor,this.darkMode),this.primaryTextColor=Ge(this.primaryColor),this.secondaryTextColor=Ge(this.secondaryColor),this.tertiaryTextColor=Ge(this.tertiaryColor),this.mainBkg="#111113",this.secondBkg="calculated",this.mainContrastColor="lightgrey",this.darkTextColor=Ke(Ge("#323D47"),10),this.border1="#ccc",this.border2=Fn(255,255,255,.25),this.arrowheadColor=Ge(this.background),this.fontFamily='"Recursive Variable", arial, sans-serif',this.fontSize="14px",this.labelBackground="#111113",this.textColor="#ccc",this.THEME_COLOR_LIMIT=12,this.radius=12,this.strokeWidth=2,this.noteBkgColor=this.noteBkgColor??"#FEF9C3",this.noteTextColor=this.noteTextColor??"#28253D",this.THEME_COLOR_LIMIT=12,this.fontFamily='"Recursive Variable", arial, sans-serif',this.fontSize="14px",this.nodeBorder="#FFFFFF",this.stateBorder="#FFFFFF",this.useGradient=!1,this.gradientStart="#0042eb",this.gradientStop="#eb0042",this.dropShadow="url(#drop-shadow)",this.nodeShadow=!0,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.clusterBkg="#1E1A2E",this.clusterBorder="#BDBCCC",this.noteBorderColor="#FACC15",this.noteFontWeight=600,this.borderColorArray=["#E879F9","#2DD4BF","#FB923C","#22D3EE","#4ADE80","#A78BFA","#F87171","#FACC15","#818CF8","#A3E635 ","#38BDF8","#FB7185"],this.bkgColorArray=[],this.filterColor="#FFFFFF"}updateColors(){this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#FFFFFF"),this.secondaryColor=this.secondaryColor||ie(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||ie(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||Jt(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||Jt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||Jt(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||Jt(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#FFFFFF",this.secondaryTextColor=this.secondaryTextColor||Ge(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||Ge(this.tertiaryColor),this.lineColor=this.lineColor||Ge(this.background),this.arrowheadColor=this.arrowheadColor||Ge(this.background),this.textColor=this.textColor||this.primaryTextColor,this.border2=this.border2||this.tertiaryBorderColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.border1,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?Ye(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder="#FFFFFF",this.signalColor="#FFFFFF",this.labelBoxBorderColor="#BDBCCC",this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||this.actorBorder,this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||Ye(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||Ge(this.lineColor),this.rootLabelColor="#FFFFFF",this.sectionBkgColor=this.sectionBkgColor||this.tertiaryColor,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||this.secondaryColor,this.sectionBkgColor2=this.sectionBkgColor2||this.primaryColor,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||this.primaryColor,this.activeTaskBorderColor=this.activeTaskBorderColor||this.primaryColor,this.activeTaskBkgColor=this.activeTaskBkgColor||Ke(this.primaryColor,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.taskTextColor=this.taskTextColor||this.textColor,this.vertLineColor=this.vertLineColor||this.primaryBorderColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.archEdgeColor=this.lineColor,this.archEdgeArrowColor=this.lineColor,this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.cScale0=this.cScale0||"#f4a8ff",this.cScale1=this.cScale1||"#46ecd5",this.cScale2=this.cScale2||"#ffb86a",this.cScale3=this.cScale3||"#dab2ff",this.cScale4=this.cScale4||"#7bf1a8",this.cScale5=this.cScale5||"#c4b4ff",this.cScale6=this.cScale6||"#ffa2a2",this.cScale7=this.cScale7||"#ffdf20",this.cScale8=this.cScale8||"#a3b3ff",this.cScale9=this.cScale9||"#bbf451",this.cScale10=this.cScale10||"#74d4ff",this.cScale11=this.cScale11||"#ffa1ad";for(let r=0;r{this[i]=e[i]}),this.updateColors(),r.forEach(i=>{this[i]=e[i]})}},Ij=o(t=>{let e=new rD;return e.calculate(t),e},"getThemeVariables")});var xl,g4=P(()=>{"use strict";gj();vj();wg();bj();kj();wj();Sj();_j();Lj();Nj();Mj();xl={base:{getThemeVariables:mj},dark:{getThemeVariables:yj},default:{getThemeVariables:Zc},forest:{getThemeVariables:xj},neutral:{getThemeVariables:Tj},neo:{getThemeVariables:Cj},"neo-dark":{getThemeVariables:Ej},redux:{getThemeVariables:Aj},"redux-dark":{getThemeVariables:Dj},"redux-color":{getThemeVariables:Rj},"redux-dark-color":{getThemeVariables:Ij}}});var so,Oj=P(()=>{"use strict";so={flowchart:{useMaxWidth:!0,titleTopMargin:25,subGraphTitleMargin:{top:0,bottom:0},diagramPadding:8,htmlLabels:null,nodeSpacing:50,rankSpacing:50,curve:"basis",padding:15,defaultRenderer:"dagre-wrapper",wrappingWidth:200,inheritDir:!1},sequence:{useMaxWidth:!0,hideUnusedParticipants:!1,activationWidth:10,diagramMarginX:50,diagramMarginY:10,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",mirrorActors:!0,forceMenus:!1,bottomMarginAdj:1,rightAngles:!1,showSequenceNumbers:!1,actorFontSize:14,actorFontFamily:'"Open Sans", sans-serif',actorFontWeight:400,noteFontSize:14,noteFontFamily:'"trebuchet ms", verdana, arial, sans-serif',noteFontWeight:400,noteAlign:"center",messageFontSize:16,messageFontFamily:'"trebuchet ms", verdana, arial, sans-serif',messageFontWeight:400,wrap:!1,wrapPadding:10,labelBoxWidth:50,labelBoxHeight:20},gantt:{useMaxWidth:!0,titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,rightPadding:75,leftPadding:75,gridLineStartPadding:35,fontSize:11,sectionFontSize:11,numberSectionStyles:4,axisFormat:"%Y-%m-%d",topAxis:!1,displayMode:"",weekday:"sunday"},journey:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,maxLabelWidth:360,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"],titleColor:"",titleFontFamily:'"trebuchet ms", verdana, arial, sans-serif',titleFontSize:"4ex"},class:{useMaxWidth:!0,titleTopMargin:25,arrowMarkerAbsolute:!1,dividerMargin:10,padding:5,textHeight:10,defaultRenderer:"dagre-wrapper",htmlLabels:!1,hideEmptyMembersBox:!1},state:{useMaxWidth:!0,titleTopMargin:25,dividerMargin:10,sizeUnit:5,padding:8,textHeight:10,titleShift:-15,noteMargin:10,forkWidth:70,forkHeight:7,miniPadding:2,fontSizeFactor:5.02,fontSize:24,labelHeight:16,edgeLengthFactor:"20",compositTitleSize:35,radius:5,defaultRenderer:"dagre-wrapper"},er:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:20,layoutDirection:"TB",minEntityWidth:100,minEntityHeight:75,entityPadding:15,nodeSpacing:140,rankSpacing:80,stroke:"gray",fill:"honeydew",fontSize:12},pie:{useMaxWidth:!0,textPosition:.75},quadrantChart:{useMaxWidth:!0,chartWidth:500,chartHeight:500,titleFontSize:20,titlePadding:10,quadrantPadding:5,xAxisLabelPadding:5,yAxisLabelPadding:5,xAxisLabelFontSize:16,yAxisLabelFontSize:16,quadrantLabelFontSize:16,quadrantTextTopPadding:5,pointTextPadding:5,pointLabelFontSize:12,pointRadius:5,xAxisPosition:"top",yAxisPosition:"left",quadrantInternalBorderStrokeWidth:1,quadrantExternalBorderStrokeWidth:2},xyChart:{useMaxWidth:!0,width:700,height:500,titleFontSize:20,titlePadding:10,showDataLabel:!1,showDataLabelOutsideBar:!1,showTitle:!0,xAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},yAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},chartOrientation:"vertical",plotReservedSpacePercent:50},requirement:{useMaxWidth:!0,rect_fill:"#f9f9f9",text_color:"#333",rect_border_size:"0.5px",rect_border_color:"#bbb",rect_min_width:200,rect_min_height:200,fontSize:14,rect_padding:10,line_height:20},mindmap:{useMaxWidth:!0,padding:10,maxNodeWidth:200,layoutAlgorithm:"cose-bilkent"},ishikawa:{useMaxWidth:!0,diagramPadding:20},kanban:{useMaxWidth:!0,padding:8,sectionWidth:200,ticketBaseUrl:""},timeline:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"],disableMulticolor:!1},gitGraph:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:8,nodeLabel:{width:75,height:100,x:-25,y:0},mainBranchName:"main",mainBranchOrder:0,showCommitLabel:!0,showBranches:!0,rotateCommitLabel:!0,parallelCommits:!1,arrowMarkerAbsolute:!1},c4:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,c4ShapeMargin:50,c4ShapePadding:20,width:216,height:60,boxMargin:10,c4ShapeInRow:4,nextLinePaddingX:0,c4BoundaryInRow:2,personFontSize:14,personFontFamily:'"Open Sans", sans-serif',personFontWeight:"normal",external_personFontSize:14,external_personFontFamily:'"Open Sans", sans-serif',external_personFontWeight:"normal",systemFontSize:14,systemFontFamily:'"Open Sans", sans-serif',systemFontWeight:"normal",external_systemFontSize:14,external_systemFontFamily:'"Open Sans", sans-serif',external_systemFontWeight:"normal",system_dbFontSize:14,system_dbFontFamily:'"Open Sans", sans-serif',system_dbFontWeight:"normal",external_system_dbFontSize:14,external_system_dbFontFamily:'"Open Sans", sans-serif',external_system_dbFontWeight:"normal",system_queueFontSize:14,system_queueFontFamily:'"Open Sans", sans-serif',system_queueFontWeight:"normal",external_system_queueFontSize:14,external_system_queueFontFamily:'"Open Sans", sans-serif',external_system_queueFontWeight:"normal",boundaryFontSize:14,boundaryFontFamily:'"Open Sans", sans-serif',boundaryFontWeight:"normal",messageFontSize:12,messageFontFamily:'"Open Sans", sans-serif',messageFontWeight:"normal",containerFontSize:14,containerFontFamily:'"Open Sans", sans-serif',containerFontWeight:"normal",external_containerFontSize:14,external_containerFontFamily:'"Open Sans", sans-serif',external_containerFontWeight:"normal",container_dbFontSize:14,container_dbFontFamily:'"Open Sans", sans-serif',container_dbFontWeight:"normal",external_container_dbFontSize:14,external_container_dbFontFamily:'"Open Sans", sans-serif',external_container_dbFontWeight:"normal",container_queueFontSize:14,container_queueFontFamily:'"Open Sans", sans-serif',container_queueFontWeight:"normal",external_container_queueFontSize:14,external_container_queueFontFamily:'"Open Sans", sans-serif',external_container_queueFontWeight:"normal",componentFontSize:14,componentFontFamily:'"Open Sans", sans-serif',componentFontWeight:"normal",external_componentFontSize:14,external_componentFontFamily:'"Open Sans", sans-serif',external_componentFontWeight:"normal",component_dbFontSize:14,component_dbFontFamily:'"Open Sans", sans-serif',component_dbFontWeight:"normal",external_component_dbFontSize:14,external_component_dbFontFamily:'"Open Sans", sans-serif',external_component_dbFontWeight:"normal",component_queueFontSize:14,component_queueFontFamily:'"Open Sans", sans-serif',component_queueFontWeight:"normal",external_component_queueFontSize:14,external_component_queueFontFamily:'"Open Sans", sans-serif',external_component_queueFontWeight:"normal",wrap:!0,wrapPadding:10,person_bg_color:"#08427B",person_border_color:"#073B6F",external_person_bg_color:"#686868",external_person_border_color:"#8A8A8A",system_bg_color:"#1168BD",system_border_color:"#3C7FC0",system_db_bg_color:"#1168BD",system_db_border_color:"#3C7FC0",system_queue_bg_color:"#1168BD",system_queue_border_color:"#3C7FC0",external_system_bg_color:"#999999",external_system_border_color:"#8A8A8A",external_system_db_bg_color:"#999999",external_system_db_border_color:"#8A8A8A",external_system_queue_bg_color:"#999999",external_system_queue_border_color:"#8A8A8A",container_bg_color:"#438DD5",container_border_color:"#3C7FC0",container_db_bg_color:"#438DD5",container_db_border_color:"#3C7FC0",container_queue_bg_color:"#438DD5",container_queue_border_color:"#3C7FC0",external_container_bg_color:"#B3B3B3",external_container_border_color:"#A6A6A6",external_container_db_bg_color:"#B3B3B3",external_container_db_border_color:"#A6A6A6",external_container_queue_bg_color:"#B3B3B3",external_container_queue_border_color:"#A6A6A6",component_bg_color:"#85BBF0",component_border_color:"#78A8D8",component_db_bg_color:"#85BBF0",component_db_border_color:"#78A8D8",component_queue_bg_color:"#85BBF0",component_queue_border_color:"#78A8D8",external_component_bg_color:"#CCCCCC",external_component_border_color:"#BFBFBF",external_component_db_bg_color:"#CCCCCC",external_component_db_border_color:"#BFBFBF",external_component_queue_bg_color:"#CCCCCC",external_component_queue_border_color:"#BFBFBF"},sankey:{useMaxWidth:!0,width:600,height:400,linkColor:"gradient",nodeAlignment:"justify",showValues:!0,prefix:"",suffix:""},block:{useMaxWidth:!0,padding:8},packet:{useMaxWidth:!0,rowHeight:32,bitWidth:32,bitsPerRow:32,showBits:!0,paddingX:5,paddingY:5},treeView:{useMaxWidth:!0,rowIndent:10,paddingX:5,paddingY:5,lineThickness:1},architecture:{useMaxWidth:!0,padding:40,iconSize:80,fontSize:16,randomize:!1},radar:{useMaxWidth:!0,width:600,height:600,marginTop:50,marginRight:50,marginBottom:50,marginLeft:50,axisScaleFactor:1,axisLabelFactor:1.05,curveTension:.17},venn:{useMaxWidth:!0,width:800,height:450,padding:8,useDebugLayout:!1},theme:"default",look:"classic",handDrawnSeed:0,layout:"dagre",maxTextSize:5e4,maxEdges:500,darkMode:!1,fontFamily:'"trebuchet ms", verdana, arial, sans-serif;',logLevel:5,securityLevel:"strict",startOnLoad:!0,arrowMarkerAbsolute:!1,secure:["secure","securityLevel","startOnLoad","maxTextSize","suppressErrorRendering","maxEdges"],legacyMathML:!1,forceLegacyMathML:!1,deterministicIds:!1,fontSize:16,markdownAutoWrap:!0,suppressErrorRendering:!1}});var Pj,Bj,Fj,fr,wa=P(()=>{"use strict";g4();Oj();Pj={...so,deterministicIDSeed:void 0,elk:{mergeEdges:!1,nodePlacementStrategy:"BRANDES_KOEPF",forceNodeModelOrder:!1,considerModelOrder:"NODES_AND_EDGES"},themeCSS:void 0,themeVariables:xl.default.getThemeVariables(),sequence:{...so.sequence,messageFont:o(function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},"messageFont"),noteFont:o(function(){return{fontFamily:this.noteFontFamily,fontSize:this.noteFontSize,fontWeight:this.noteFontWeight}},"noteFont"),actorFont:o(function(){return{fontFamily:this.actorFontFamily,fontSize:this.actorFontSize,fontWeight:this.actorFontWeight}},"actorFont")},class:{hideEmptyMembersBox:!1},gantt:{...so.gantt,tickInterval:void 0,useWidth:void 0},c4:{...so.c4,useWidth:void 0,personFont:o(function(){return{fontFamily:this.personFontFamily,fontSize:this.personFontSize,fontWeight:this.personFontWeight}},"personFont"),flowchart:{...so.flowchart,inheritDir:!1},external_personFont:o(function(){return{fontFamily:this.external_personFontFamily,fontSize:this.external_personFontSize,fontWeight:this.external_personFontWeight}},"external_personFont"),systemFont:o(function(){return{fontFamily:this.systemFontFamily,fontSize:this.systemFontSize,fontWeight:this.systemFontWeight}},"systemFont"),external_systemFont:o(function(){return{fontFamily:this.external_systemFontFamily,fontSize:this.external_systemFontSize,fontWeight:this.external_systemFontWeight}},"external_systemFont"),system_dbFont:o(function(){return{fontFamily:this.system_dbFontFamily,fontSize:this.system_dbFontSize,fontWeight:this.system_dbFontWeight}},"system_dbFont"),external_system_dbFont:o(function(){return{fontFamily:this.external_system_dbFontFamily,fontSize:this.external_system_dbFontSize,fontWeight:this.external_system_dbFontWeight}},"external_system_dbFont"),system_queueFont:o(function(){return{fontFamily:this.system_queueFontFamily,fontSize:this.system_queueFontSize,fontWeight:this.system_queueFontWeight}},"system_queueFont"),external_system_queueFont:o(function(){return{fontFamily:this.external_system_queueFontFamily,fontSize:this.external_system_queueFontSize,fontWeight:this.external_system_queueFontWeight}},"external_system_queueFont"),containerFont:o(function(){return{fontFamily:this.containerFontFamily,fontSize:this.containerFontSize,fontWeight:this.containerFontWeight}},"containerFont"),external_containerFont:o(function(){return{fontFamily:this.external_containerFontFamily,fontSize:this.external_containerFontSize,fontWeight:this.external_containerFontWeight}},"external_containerFont"),container_dbFont:o(function(){return{fontFamily:this.container_dbFontFamily,fontSize:this.container_dbFontSize,fontWeight:this.container_dbFontWeight}},"container_dbFont"),external_container_dbFont:o(function(){return{fontFamily:this.external_container_dbFontFamily,fontSize:this.external_container_dbFontSize,fontWeight:this.external_container_dbFontWeight}},"external_container_dbFont"),container_queueFont:o(function(){return{fontFamily:this.container_queueFontFamily,fontSize:this.container_queueFontSize,fontWeight:this.container_queueFontWeight}},"container_queueFont"),external_container_queueFont:o(function(){return{fontFamily:this.external_container_queueFontFamily,fontSize:this.external_container_queueFontSize,fontWeight:this.external_container_queueFontWeight}},"external_container_queueFont"),componentFont:o(function(){return{fontFamily:this.componentFontFamily,fontSize:this.componentFontSize,fontWeight:this.componentFontWeight}},"componentFont"),external_componentFont:o(function(){return{fontFamily:this.external_componentFontFamily,fontSize:this.external_componentFontSize,fontWeight:this.external_componentFontWeight}},"external_componentFont"),component_dbFont:o(function(){return{fontFamily:this.component_dbFontFamily,fontSize:this.component_dbFontSize,fontWeight:this.component_dbFontWeight}},"component_dbFont"),external_component_dbFont:o(function(){return{fontFamily:this.external_component_dbFontFamily,fontSize:this.external_component_dbFontSize,fontWeight:this.external_component_dbFontWeight}},"external_component_dbFont"),component_queueFont:o(function(){return{fontFamily:this.component_queueFontFamily,fontSize:this.component_queueFontSize,fontWeight:this.component_queueFontWeight}},"component_queueFont"),external_component_queueFont:o(function(){return{fontFamily:this.external_component_queueFontFamily,fontSize:this.external_component_queueFontSize,fontWeight:this.external_component_queueFontWeight}},"external_component_queueFont"),boundaryFont:o(function(){return{fontFamily:this.boundaryFontFamily,fontSize:this.boundaryFontSize,fontWeight:this.boundaryFontWeight}},"boundaryFont"),messageFont:o(function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},"messageFont")},pie:{...so.pie,useWidth:984},xyChart:{...so.xyChart,useWidth:void 0},requirement:{...so.requirement,useWidth:void 0},packet:{...so.packet},treeView:{...so.treeView,useWidth:void 0},radar:{...so.radar},ishikawa:{...so.ishikawa},treemap:{useMaxWidth:!0,padding:10,diagramPadding:8,showValues:!0,nodeWidth:100,nodeHeight:40,borderWidth:1,valueFontSize:12,labelFontSize:14,valueFormat:","},venn:{...so.venn}},Bj=o((t,e="")=>Object.keys(t).reduce((r,i)=>Array.isArray(t[i])?r:typeof t[i]=="object"&&t[i]!==null?[...r,e+i,...Bj(t[i],"")]:[...r,e+i],[]),"keyify"),Fj=new Set(Bj(Pj,"")),fr=Pj});var Eg,$8e,iD=P(()=>{"use strict";wa();bt();Eg=o(t=>{if(Q.debug("sanitizeDirective called with",t),!(typeof t!="object"||t==null)){if(Array.isArray(t)){t.forEach(e=>Eg(e));return}for(let e of Object.keys(t)){if(Q.debug("Checking key",e),e.startsWith("__")||e.includes("proto")||e.includes("constr")||!Fj.has(e)||t[e]==null){Q.debug("sanitize deleting key: ",e),delete t[e];continue}if(typeof t[e]=="object"){Q.debug("sanitizing object",e),Eg(t[e]);continue}let r=["themeCSS","fontFamily","altFontFamily"];for(let i of r)e.includes(i)&&(Q.debug("sanitizing css option",e),t[e]=$8e(t[e]))}if(t.themeVariables)for(let e of Object.keys(t.themeVariables)){let r=t.themeVariables[e];r?.match&&!r.match(/^[\d "#%(),.;A-Za-z]+$/)&&(t.themeVariables[e]="")}Q.debug("After sanitization",t)}},"sanitizeDirective"),$8e=o(t=>{let e=0,r=0;for(let i of t){if(e{"use strict";kg();bt();g4();wa();iD();Nf=Object.freeze(fr),ls=o(t=>!(t===!1||["false","null","0"].includes(String(t).trim().toLowerCase())),"evaluate"),oo=Yi({},Nf),Gp=[],Ix=Yi({},Nf),v4=o((t,e)=>{let r=Yi({},t),i={};for(let n of e)Vj(n),i=Yi(i,n);if(r=Yi(r,i),i.theme&&i.theme in xl){let n=Yi({},y4),a=Yi(n.themeVariables||{},i.themeVariables);r.theme&&r.theme in xl&&(r.themeVariables=xl[r.theme].getThemeVariables(a))}return Ix=r,Uj(Ix),Ix},"updateCurrentConfig"),nD=o(t=>(oo=Yi({},Nf),oo=Yi(oo,t),t.theme&&xl[t.theme]&&(oo.themeVariables=xl[t.theme].getThemeVariables(t.themeVariables)),v4(oo,Gp),oo),"setSiteConfig"),zj=o(t=>{y4=Yi({},t)},"saveConfigFromInitialize"),Gj=o(t=>(oo=Yi(oo,t),v4(oo,Gp),oo),"updateSiteConfig"),aD=o(()=>Yi({},oo),"getSiteConfig"),x4=o(t=>(Uj(t),Yi(Ix,t),Lt()),"setConfig"),Lt=o(()=>Yi({},Ix),"getConfig"),Vj=o(t=>{t&&(["secure",...oo.secure??[]].forEach(e=>{Object.hasOwn(t,e)&&(Q.debug(`Denied attempt to modify a secure key ${e}`,t[e]),delete t[e])}),Object.keys(t).forEach(e=>{e.startsWith("__")&&delete t[e]}),Object.keys(t).forEach(e=>{typeof t[e]=="string"&&(t[e].includes("<")||t[e].includes(">")||t[e].includes("url(data:"))&&delete t[e],typeof t[e]=="object"&&Vj(t[e])}))},"sanitize"),qj=o(t=>{Eg(t),t.fontFamily&&!t.themeVariables?.fontFamily&&(t.themeVariables={...t.themeVariables,fontFamily:t.fontFamily}),Gp.push(t),v4(oo,Gp)},"addDirective"),Mx=o((t=oo)=>{Gp=[],v4(t,Gp)},"reset"),z8e={LAZY_LOAD_DEPRECATED:"The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead.",FLOWCHART_HTML_LABELS_DEPRECATED:"flowchart.htmlLabels is deprecated. Please use global htmlLabels instead."},$j={},Wj=o(t=>{$j[t]||(Q.warn(z8e[t]),$j[t]=!0)},"issueWarning"),Uj=o(t=>{t&&(t.lazyLoadedDiagrams||t.loadExternalDiagramsAtStartup)&&Wj("LAZY_LOAD_DEPRECATED")},"checkConfig"),Hj=o(()=>{let t={};y4&&(t=Yi(t,y4));for(let e of Gp)t=Yi(t,e);return t},"getUserDefinedConfig"),Or=o(t=>(t.flowchart?.htmlLabels!=null&&Wj("FLOWCHART_HTML_LABELS_DEPRECATED"),ls(t.htmlLabels??t.flowchart?.htmlLabels??!0)),"getEffectiveHtmlLabels")});function Is(t){return function(e){e instanceof RegExp&&(e.lastIndex=0);for(var r=arguments.length,i=new Array(r>1?r-1:0),n=1;n2&&arguments[2]!==void 0?arguments[2]:k4;Yj&&Yj(t,null);let i=e.length;for(;i--;){let n=e[i];if(typeof n=="string"){let a=r(n);a!==n&&(G8e(e)||(e[i]=a),n=a)}t[n]=!0}return t}function X8e(t){for(let e=0;e0&&arguments[0]!==void 0?arguments[0]:sDe(),e=o(xt=>nX(xt),"DOMPurify");if(e.version="3.3.1",e.removed=[],!t||!t.document||t.document.nodeType!==$x.document||!t.Element)return e.isSupported=!1,e;let{document:r}=t,i=r,n=i.currentScript,{DocumentFragment:a,HTMLTemplateElement:s,Node:l,Element:u,NodeFilter:h,NamedNodeMap:f=t.NamedNodeMap||t.MozNamedAttrMap,HTMLFormElement:d,DOMParser:p,trustedTypes:m}=t,g=u.prototype,y=Fx(g,"cloneNode"),v=Fx(g,"remove"),x=Fx(g,"nextSibling"),b=Fx(g,"childNodes"),T=Fx(g,"parentNode");if(typeof s=="function"){let xt=r.createElement("template");xt.content&&xt.content.ownerDocument&&(r=xt.content.ownerDocument)}let w,k="",{implementation:C,createNodeIterator:E,createDocumentFragment:S,getElementsByTagName:L}=r,{importNode:M}=i,I=eX();e.isSupported=typeof tX=="function"&&typeof T=="function"&&C&&C.createHTMLDocument!==void 0;let{MUSTACHE_EXPR:A,ERB_EXPR:_,TMPLIT_EXPR:D,DATA_ATTR:N,ARIA_ATTR:R,IS_SCRIPT_OR_DATA:B,ATTR_WHITESPACE:O,CUSTOM_ELEMENT:$}=Jj,{IS_ALLOWED_URI:z}=Jj,F=null,V=Qr({},[...Xj,...lD,...cD,...uD,...Kj]),H=null,X=Qr({},[...Qj,...hD,...Zj,...T4]),W=Object.seal(fD(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),Z=null,Y=null,ae=Object.seal(fD(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}})),J=!0,ee=!0,re=!1,te=!0,be=!1,de=!0,Ee=!1,Ne=!1,we=!1,Te=!1,De=!1,$e=!1,pe=!0,Je=!1,Ce="user-content-",Fe=!0,Ue=!1,qe={},Me=null,He=Qr({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),K=null,oe=Qr({},["audio","video","img","source","image","track"]),U=null,ue=Qr({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),G="http://www.w3.org/1998/Math/MathML",se="http://www.w3.org/2000/svg",le="http://www.w3.org/1999/xhtml",ke=le,me=!1,ye=null,Re=Qr({},[G,se,le],sD),ve=Qr({},["mi","mo","mn","ms","mtext"]),Oe=Qr({},["annotation-xml"]),We=Qr({},["title","style","font","a","script"]),Be=null,Qe=["application/xhtml+xml","text/html"],ce="text/html",it=null,fe=null,ut=r.createElement("form"),Nt=o(function(Ie){return Ie instanceof RegExp||Ie instanceof Function},"isRegexOrFunction"),Pt=o(function(){let Ie=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!(fe&&fe===Ie)){if((!Ie||typeof Ie!="object")&&(Ie={}),Ie=Jc(Ie),Be=Qe.indexOf(Ie.PARSER_MEDIA_TYPE)===-1?ce:Ie.PARSER_MEDIA_TYPE,it=Be==="application/xhtml+xml"?sD:k4,F=lc(Ie,"ALLOWED_TAGS")?Qr({},Ie.ALLOWED_TAGS,it):V,H=lc(Ie,"ALLOWED_ATTR")?Qr({},Ie.ALLOWED_ATTR,it):X,ye=lc(Ie,"ALLOWED_NAMESPACES")?Qr({},Ie.ALLOWED_NAMESPACES,sD):Re,U=lc(Ie,"ADD_URI_SAFE_ATTR")?Qr(Jc(ue),Ie.ADD_URI_SAFE_ATTR,it):ue,K=lc(Ie,"ADD_DATA_URI_TAGS")?Qr(Jc(oe),Ie.ADD_DATA_URI_TAGS,it):oe,Me=lc(Ie,"FORBID_CONTENTS")?Qr({},Ie.FORBID_CONTENTS,it):He,Z=lc(Ie,"FORBID_TAGS")?Qr({},Ie.FORBID_TAGS,it):Jc({}),Y=lc(Ie,"FORBID_ATTR")?Qr({},Ie.FORBID_ATTR,it):Jc({}),qe=lc(Ie,"USE_PROFILES")?Ie.USE_PROFILES:!1,J=Ie.ALLOW_ARIA_ATTR!==!1,ee=Ie.ALLOW_DATA_ATTR!==!1,re=Ie.ALLOW_UNKNOWN_PROTOCOLS||!1,te=Ie.ALLOW_SELF_CLOSE_IN_ATTR!==!1,be=Ie.SAFE_FOR_TEMPLATES||!1,de=Ie.SAFE_FOR_XML!==!1,Ee=Ie.WHOLE_DOCUMENT||!1,Te=Ie.RETURN_DOM||!1,De=Ie.RETURN_DOM_FRAGMENT||!1,$e=Ie.RETURN_TRUSTED_TYPE||!1,we=Ie.FORCE_BODY||!1,pe=Ie.SANITIZE_DOM!==!1,Je=Ie.SANITIZE_NAMED_PROPS||!1,Fe=Ie.KEEP_CONTENT!==!1,Ue=Ie.IN_PLACE||!1,z=Ie.ALLOWED_URI_REGEXP||rX,ke=Ie.NAMESPACE||le,ve=Ie.MATHML_TEXT_INTEGRATION_POINTS||ve,Oe=Ie.HTML_INTEGRATION_POINTS||Oe,W=Ie.CUSTOM_ELEMENT_HANDLING||{},Ie.CUSTOM_ELEMENT_HANDLING&&Nt(Ie.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(W.tagNameCheck=Ie.CUSTOM_ELEMENT_HANDLING.tagNameCheck),Ie.CUSTOM_ELEMENT_HANDLING&&Nt(Ie.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(W.attributeNameCheck=Ie.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),Ie.CUSTOM_ELEMENT_HANDLING&&typeof Ie.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(W.allowCustomizedBuiltInElements=Ie.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),be&&(ee=!1),De&&(Te=!0),qe&&(F=Qr({},Kj),H=[],qe.html===!0&&(Qr(F,Xj),Qr(H,Qj)),qe.svg===!0&&(Qr(F,lD),Qr(H,hD),Qr(H,T4)),qe.svgFilters===!0&&(Qr(F,cD),Qr(H,hD),Qr(H,T4)),qe.mathMl===!0&&(Qr(F,uD),Qr(H,Zj),Qr(H,T4))),Ie.ADD_TAGS&&(typeof Ie.ADD_TAGS=="function"?ae.tagCheck=Ie.ADD_TAGS:(F===V&&(F=Jc(F)),Qr(F,Ie.ADD_TAGS,it))),Ie.ADD_ATTR&&(typeof Ie.ADD_ATTR=="function"?ae.attributeCheck=Ie.ADD_ATTR:(H===X&&(H=Jc(H)),Qr(H,Ie.ADD_ATTR,it))),Ie.ADD_URI_SAFE_ATTR&&Qr(U,Ie.ADD_URI_SAFE_ATTR,it),Ie.FORBID_CONTENTS&&(Me===He&&(Me=Jc(Me)),Qr(Me,Ie.FORBID_CONTENTS,it)),Ie.ADD_FORBID_CONTENTS&&(Me===He&&(Me=Jc(Me)),Qr(Me,Ie.ADD_FORBID_CONTENTS,it)),Fe&&(F["#text"]=!0),Ee&&Qr(F,["html","head","body"]),F.table&&(Qr(F,["tbody"]),delete Z.tbody),Ie.TRUSTED_TYPES_POLICY){if(typeof Ie.TRUSTED_TYPES_POLICY.createHTML!="function")throw Bx('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof Ie.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw Bx('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');w=Ie.TRUSTED_TYPES_POLICY,k=w.createHTML("")}else w===void 0&&(w=oDe(m,n)),w!==null&&typeof k=="string"&&(k=w.createHTML(""));Ns&&Ns(Ie),fe=Ie}},"_parseConfig"),St=Qr({},[...lD,...cD,...K8e]),It=Qr({},[...uD,...Q8e]),ot=o(function(Ie){let ft=T(Ie);(!ft||!ft.tagName)&&(ft={namespaceURI:ke,tagName:"template"});let _t=k4(Ie.tagName),zr=k4(ft.tagName);return ye[Ie.namespaceURI]?Ie.namespaceURI===se?ft.namespaceURI===le?_t==="svg":ft.namespaceURI===G?_t==="svg"&&(zr==="annotation-xml"||ve[zr]):!!St[_t]:Ie.namespaceURI===G?ft.namespaceURI===le?_t==="math":ft.namespaceURI===se?_t==="math"&&Oe[zr]:!!It[_t]:Ie.namespaceURI===le?ft.namespaceURI===se&&!Oe[zr]||ft.namespaceURI===G&&!ve[zr]?!1:!It[_t]&&(We[_t]||!St[_t]):!!(Be==="application/xhtml+xml"&&ye[Ie.namespaceURI]):!1},"_checkValidNamespace"),ct=o(function(Ie){Ox(e.removed,{element:Ie});try{T(Ie).removeChild(Ie)}catch{v(Ie)}},"_forceRemove"),Dt=o(function(Ie,ft){try{Ox(e.removed,{attribute:ft.getAttributeNode(Ie),from:ft})}catch{Ox(e.removed,{attribute:null,from:ft})}if(ft.removeAttribute(Ie),Ie==="is")if(Te||De)try{ct(ft)}catch{}else try{ft.setAttribute(Ie,"")}catch{}},"_removeAttribute"),kt=o(function(Ie){let ft=null,_t=null;if(we)Ie=""+Ie;else{let ci=oD(Ie,/^[\r\n\t ]+/);_t=ci&&ci[0]}Be==="application/xhtml+xml"&&ke===le&&(Ie=''+Ie+"");let zr=w?w.createHTML(Ie):Ie;if(ke===le)try{ft=new p().parseFromString(zr,Be)}catch{}if(!ft||!ft.documentElement){ft=C.createDocument(ke,"template",null);try{ft.documentElement.innerHTML=me?k:zr}catch{}}let ri=ft.body||ft.documentElement;return Ie&&_t&&ri.insertBefore(r.createTextNode(_t),ri.childNodes[0]||null),ke===le?L.call(ft,Ee?"html":"body")[0]:Ee?ft.documentElement:ri},"_initDocument"),yt=o(function(Ie){return E.call(Ie.ownerDocument||Ie,Ie,h.SHOW_ELEMENT|h.SHOW_COMMENT|h.SHOW_TEXT|h.SHOW_PROCESSING_INSTRUCTION|h.SHOW_CDATA_SECTION,null)},"_createNodeIterator"),jt=o(function(Ie){return Ie instanceof d&&(typeof Ie.nodeName!="string"||typeof Ie.textContent!="string"||typeof Ie.removeChild!="function"||!(Ie.attributes instanceof f)||typeof Ie.removeAttribute!="function"||typeof Ie.setAttribute!="function"||typeof Ie.namespaceURI!="string"||typeof Ie.insertBefore!="function"||typeof Ie.hasChildNodes!="function")},"_isClobbered"),hr=o(function(Ie){return typeof l=="function"&&Ie instanceof l},"_isNode");function Qt(xt,Ie,ft){b4(xt,_t=>{_t.call(e,Ie,ft,fe)})}o(Qt,"_executeHooks");let Er=o(function(Ie){let ft=null;if(Qt(I.beforeSanitizeElements,Ie,null),jt(Ie))return ct(Ie),!0;let _t=it(Ie.nodeName);if(Qt(I.uponSanitizeElement,Ie,{tagName:_t,allowedTags:F}),de&&Ie.hasChildNodes()&&!hr(Ie.firstElementChild)&&Rs(/<[/\w!]/g,Ie.innerHTML)&&Rs(/<[/\w!]/g,Ie.textContent)||Ie.nodeType===$x.progressingInstruction||de&&Ie.nodeType===$x.comment&&Rs(/<[/\w]/g,Ie.data))return ct(Ie),!0;if(!(ae.tagCheck instanceof Function&&ae.tagCheck(_t))&&(!F[_t]||Z[_t])){if(!Z[_t]&&ir(_t)&&(W.tagNameCheck instanceof RegExp&&Rs(W.tagNameCheck,_t)||W.tagNameCheck instanceof Function&&W.tagNameCheck(_t)))return!1;if(Fe&&!Me[_t]){let zr=T(Ie)||Ie.parentNode,ri=b(Ie)||Ie.childNodes;if(ri&&zr){let ci=ri.length;for(let Ir=ci-1;Ir>=0;--Ir){let sa=y(ri[Ir],!0);sa.__removalCount=(Ie.__removalCount||0)+1,zr.insertBefore(sa,x(Ie))}}}return ct(Ie),!0}return Ie instanceof u&&!ot(Ie)||(_t==="noscript"||_t==="noembed"||_t==="noframes")&&Rs(/<\/no(script|embed|frames)/i,Ie.innerHTML)?(ct(Ie),!0):(be&&Ie.nodeType===$x.text&&(ft=Ie.textContent,b4([A,_,D],zr=>{ft=Px(ft,zr," ")}),Ie.textContent!==ft&&(Ox(e.removed,{element:Ie.cloneNode()}),Ie.textContent=ft)),Qt(I.afterSanitizeElements,Ie,null),!1)},"_sanitizeElements"),dr=o(function(Ie,ft,_t){if(pe&&(ft==="id"||ft==="name")&&(_t in r||_t in ut))return!1;if(!(ee&&!Y[ft]&&Rs(N,ft))){if(!(J&&Rs(R,ft))){if(!(ae.attributeCheck instanceof Function&&ae.attributeCheck(ft,Ie))){if(!H[ft]||Y[ft]){if(!(ir(Ie)&&(W.tagNameCheck instanceof RegExp&&Rs(W.tagNameCheck,Ie)||W.tagNameCheck instanceof Function&&W.tagNameCheck(Ie))&&(W.attributeNameCheck instanceof RegExp&&Rs(W.attributeNameCheck,ft)||W.attributeNameCheck instanceof Function&&W.attributeNameCheck(ft,Ie))||ft==="is"&&W.allowCustomizedBuiltInElements&&(W.tagNameCheck instanceof RegExp&&Rs(W.tagNameCheck,_t)||W.tagNameCheck instanceof Function&&W.tagNameCheck(_t))))return!1}else if(!U[ft]){if(!Rs(z,Px(_t,O,""))){if(!((ft==="src"||ft==="xlink:href"||ft==="href")&&Ie!=="script"&&H8e(_t,"data:")===0&&K[Ie])){if(!(re&&!Rs(B,Px(_t,O,"")))){if(_t)return!1}}}}}}}return!0},"_isValidAttribute"),ir=o(function(Ie){return Ie!=="annotation-xml"&&oD(Ie,$)},"_isBasicCustomElement"),pr=o(function(Ie){Qt(I.beforeSanitizeAttributes,Ie,null);let{attributes:ft}=Ie;if(!ft||jt(Ie))return;let _t={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:H,forceKeepAttr:void 0},zr=ft.length;for(;zr--;){let ri=ft[zr],{name:ci,namespaceURI:Ir,value:sa}=ri,qa=it(ci),Mi=sa,Ft=ci==="value"?Mi:Y8e(Mi);if(_t.attrName=qa,_t.attrValue=Ft,_t.keepAttr=!0,_t.forceKeepAttr=void 0,Qt(I.uponSanitizeAttribute,Ie,_t),Ft=_t.attrValue,Je&&(qa==="id"||qa==="name")&&(Dt(ci,Ie),Ft=Ce+Ft),de&&Rs(/((--!?|])>)|<\/(style|title|textarea)/i,Ft)){Dt(ci,Ie);continue}if(qa==="attributename"&&oD(Ft,"href")){Dt(ci,Ie);continue}if(_t.forceKeepAttr)continue;if(!_t.keepAttr){Dt(ci,Ie);continue}if(!te&&Rs(/\/>/i,Ft)){Dt(ci,Ie);continue}be&&b4([A,_,D],qt=>{Ft=Px(Ft,qt," ")});let Et=it(Ie.nodeName);if(!dr(Et,qa,Ft)){Dt(ci,Ie);continue}if(w&&typeof m=="object"&&typeof m.getAttributeType=="function"&&!Ir)switch(m.getAttributeType(Et,qa)){case"TrustedHTML":{Ft=w.createHTML(Ft);break}case"TrustedScriptURL":{Ft=w.createScriptURL(Ft);break}}if(Ft!==Mi)try{Ir?Ie.setAttributeNS(Ir,ci,Ft):Ie.setAttribute(ci,Ft),jt(Ie)?ct(Ie):jj(e.removed)}catch{Dt(ci,Ie)}}Qt(I.afterSanitizeAttributes,Ie,null)},"_sanitizeAttributes"),Ii=o(function xt(Ie){let ft=null,_t=yt(Ie);for(Qt(I.beforeSanitizeShadowDOM,Ie,null);ft=_t.nextNode();)Qt(I.uponSanitizeShadowNode,ft,null),Er(ft),pr(ft),ft.content instanceof a&&xt(ft.content);Qt(I.afterSanitizeShadowDOM,Ie,null)},"_sanitizeShadowDOM");return e.sanitize=function(xt){let Ie=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},ft=null,_t=null,zr=null,ri=null;if(me=!xt,me&&(xt=""),typeof xt!="string"&&!hr(xt))if(typeof xt.toString=="function"){if(xt=xt.toString(),typeof xt!="string")throw Bx("dirty is not a string, aborting")}else throw Bx("toString is not a function");if(!e.isSupported)return xt;if(Ne||Pt(Ie),e.removed=[],typeof xt=="string"&&(Ue=!1),Ue){if(xt.nodeName){let sa=it(xt.nodeName);if(!F[sa]||Z[sa])throw Bx("root node is forbidden and cannot be sanitized in-place")}}else if(xt instanceof l)ft=kt(""),_t=ft.ownerDocument.importNode(xt,!0),_t.nodeType===$x.element&&_t.nodeName==="BODY"||_t.nodeName==="HTML"?ft=_t:ft.appendChild(_t);else{if(!Te&&!be&&!Ee&&xt.indexOf("<")===-1)return w&&$e?w.createHTML(xt):xt;if(ft=kt(xt),!ft)return Te?null:$e?k:""}ft&&we&&ct(ft.firstChild);let ci=yt(Ue?xt:ft);for(;zr=ci.nextNode();)Er(zr),pr(zr),zr.content instanceof a&&Ii(zr.content);if(Ue)return xt;if(Te){if(De)for(ri=S.call(ft.ownerDocument);ft.firstChild;)ri.appendChild(ft.firstChild);else ri=ft;return(H.shadowroot||H.shadowrootmode)&&(ri=M.call(i,ri,!0)),ri}let Ir=Ee?ft.outerHTML:ft.innerHTML;return Ee&&F["!doctype"]&&ft.ownerDocument&&ft.ownerDocument.doctype&&ft.ownerDocument.doctype.name&&Rs(iX,ft.ownerDocument.doctype.name)&&(Ir=" +`+Ir),be&&b4([A,_,D],sa=>{Ir=Px(Ir,sa," ")}),w&&$e?w.createHTML(Ir):Ir},e.setConfig=function(){let xt=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Pt(xt),Ne=!0},e.clearConfig=function(){fe=null,Ne=!1},e.isValidAttribute=function(xt,Ie,ft){fe||Pt({});let _t=it(xt),zr=it(Ie);return dr(_t,zr,ft)},e.addHook=function(xt,Ie){typeof Ie=="function"&&Ox(I[xt],Ie)},e.removeHook=function(xt,Ie){if(Ie!==void 0){let ft=W8e(I[xt],Ie);return ft===-1?void 0:U8e(I[xt],ft,1)[0]}return jj(I[xt])},e.removeHooks=function(xt){I[xt]=[]},e.removeAllHooks=function(){I=eX()},e}var tX,Yj,G8e,V8e,q8e,Ns,bl,fD,dD,pD,b4,W8e,jj,Ox,U8e,k4,sD,oD,Px,H8e,Y8e,lc,Rs,Bx,Xj,lD,cD,K8e,uD,Q8e,Kj,Qj,hD,Zj,T4,Z8e,J8e,eDe,tDe,rDe,rX,iDe,nDe,iX,aDe,Jj,$x,sDe,oDe,eX,Tl,zx=P(()=>{"use strict";({entries:tX,setPrototypeOf:Yj,isFrozen:G8e,getPrototypeOf:V8e,getOwnPropertyDescriptor:q8e}=Object),{freeze:Ns,seal:bl,create:fD}=Object,{apply:dD,construct:pD}=typeof Reflect<"u"&&Reflect;Ns||(Ns=o(function(e){return e},"freeze"));bl||(bl=o(function(e){return e},"seal"));dD||(dD=o(function(e,r){for(var i=arguments.length,n=new Array(i>2?i-2:0),a=2;a1?r-1:0),n=1;n/gm),eDe=bl(/\$\{[\w\W]*/gm),tDe=bl(/^data-[\-\w.\u00B7-\uFFFF]+$/),rDe=bl(/^aria-[\-\w]+$/),rX=bl(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),iDe=bl(/^(?:\w+script|data):/i),nDe=bl(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),iX=bl(/^html$/i),aDe=bl(/^[a-z][.\w]*(-[.\w]+)+$/i),Jj=Object.freeze({__proto__:null,ARIA_ATTR:rDe,ATTR_WHITESPACE:nDe,CUSTOM_ELEMENT:aDe,DATA_ATTR:tDe,DOCTYPE_NAME:iX,ERB_EXPR:J8e,IS_ALLOWED_URI:rX,IS_SCRIPT_OR_DATA:iDe,MUSTACHE_EXPR:Z8e,TMPLIT_EXPR:eDe}),$x={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,progressingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},sDe=o(function(){return typeof window>"u"?null:window},"getGlobal"),oDe=o(function(e,r){if(typeof e!="object"||typeof e.createPolicy!="function")return null;let i=null,n="data-tt-policy-suffix";r&&r.hasAttribute(n)&&(i=r.getAttribute(n));let a="dompurify"+(i?"#"+i:"");try{return e.createPolicy(a,{createHTML(s){return s},createScriptURL(s){return s}})}catch{return console.warn("TrustedTypes policy "+a+" could not be created."),null}},"_createTrustedTypesPolicy"),eX=o(function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}},"_createHooksMap");o(nX,"createDOMPurify");Tl=nX()});var PK={};ur(PK,{ParseError:()=>wt,SETTINGS_SCHEMA:()=>Wx,__defineFunction:()=>Bt,__defineMacro:()=>he,__defineSymbol:()=>q,__domTree:()=>OK,__parse:()=>RK,__renderToDomTree:()=>X4,__renderToHTMLTree:()=>IK,__setFontMetrics:()=>FX,default:()=>QLe,render:()=>iL,renderToString:()=>LK,version:()=>MK});function dDe(t){return String(t).replace(fDe,e=>hDe[e])}function yDe(t){if(t.default)return t.default;var e=t.type,r=Array.isArray(e)?e[0]:e;if(typeof r!="string")return r.enum[0];switch(r){case"boolean":return!1;case"string":return"";case"number":return 0;case"object":return{}}}function wDe(t){for(var e=0;e<_D.length;e++)for(var r=_D[e],i=0;i=n[0]&&t<=n[1])return r.name}return null}function BX(t){for(var e=0;e=M4[e]&&t<=M4[e+1])return!0;return!1}function FX(t,e){ru[t]=e}function GD(t,e,r){if(!ru[e])throw new Error("Font metrics not found for font: "+e+".");var i=t.charCodeAt(0),n=ru[e][i];if(!n&&t[0]in sX&&(i=sX[t[0]].charCodeAt(0),n=ru[e][i]),!n&&r==="text"&&BX(i)&&(n=ru[e][77]),n)return{depth:n[0],height:n[1],italic:n[2],skew:n[3],width:n[4]}}function ODe(t){var e;if(t>=5?e=0:t>=3?e=1:e=2,!mD[e]){var r=mD[e]={cssEmPerMu:C4.quad[e]/18};for(var i in C4)C4.hasOwnProperty(i)&&(r[i]=C4[i][e])}return mD[e]}function cX(t){if(t instanceof uo)return t;throw new Error("Expected symbolNode but got "+String(t)+".")}function zDe(t){if(t instanceof Wp)return t;throw new Error("Expected span but got "+String(t)+".")}function q(t,e,r,i,n,a){ji[t][n]={font:e,group:r,replace:i},a&&i&&(ji[t][i]=ji[t][n])}function Bt(t){for(var{type:e,names:r,props:i,handler:n,htmlBuilder:a,mathmlBuilder:s}=t,l={type:e,numArgs:i.numArgs,argTypes:i.argTypes,allowedInArgument:!!i.allowedInArgument,allowedInText:!!i.allowedInText,allowedInMath:i.allowedInMath===void 0?!0:i.allowedInMath,numOptionalArgs:i.numOptionalArgs||0,infix:!!i.infix,primitive:!!i.primitive,handler:n},u=0;u0&&(a.push(L4(s,e)),s=[]),a.push(i[l]));s.length>0&&a.push(L4(s,e));var h;r?(h=L4(ca(r,e,!0)),h.classes=["tag"],a.push(h)):n&&a.push(n);var f=Th(["katex-html"],a);if(f.setAttribute("aria-hidden","true"),h){var d=h.children[0];d.style.height=Rt(f.height+f.depth),f.depth&&(d.style.verticalAlign=Rt(-f.depth))}return f}function KX(t){return new qp(t)}function vD(t){if(!t)return!1;if(t.type==="mi"&&t.children.length===1){var e=t.children[0];return e instanceof Cl&&e.text==="."}else if(t.type==="mo"&&t.children.length===1&&t.getAttribute("separator")==="true"&&t.getAttribute("lspace")==="0em"&&t.getAttribute("rspace")==="0em"){var r=t.children[0];return r instanceof Cl&&r.text===","}else return!1}function pX(t,e,r,i,n){var a=ho(t,r),s;a.length===1&&a[0]instanceof Ms&&["mrow","mtable"].includes(a[0].type)?s=a[0]:s=new Ct.MathNode("mrow",a);var l=new Ct.MathNode("annotation",[new Ct.TextNode(e)]);l.setAttribute("encoding","application/x-tex");var u=new Ct.MathNode("semantics",[s,l]),h=new Ct.MathNode("math",[u]);h.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML"),i&&h.setAttribute("display","block");var f=n?"katex":"katex-mathml";return je.makeSpan([f],[h])}function Gr(t,e){if(!t||t.type!==e)throw new Error("Expected node of type "+e+", but got "+(t?"node of type "+t.type:String(t)));return t}function UD(t){var e=U4(t);if(!e)throw new Error("Expected node of symbol group type, but got "+(t?"node of type "+t.type:String(t)));return e}function U4(t){return t&&(t.type==="atom"||VDe.hasOwnProperty(t.type))?t:null}function eK(t,e){var r=ca(t.body,e,!0);return vLe([t.mclass],r,e)}function tK(t,e){var r,i=ho(t.body,e);return t.mclass==="minner"?r=new Ct.MathNode("mpadded",i):t.mclass==="mord"?t.isCharacterBox?(r=i[0],r.type="mi"):r=new Ct.MathNode("mi",i):(t.isCharacterBox?(r=i[0],r.type="mo"):r=new Ct.MathNode("mo",i),t.mclass==="mbin"?(r.attributes.lspace="0.22em",r.attributes.rspace="0.22em"):t.mclass==="mpunct"?(r.attributes.lspace="0em",r.attributes.rspace="0.17em"):t.mclass==="mopen"||t.mclass==="mclose"?(r.attributes.lspace="0em",r.attributes.rspace="0em"):t.mclass==="minner"&&(r.attributes.lspace="0.0556em",r.attributes.width="+0.1111em")),r}function TLe(t,e,r){var i=xLe[t];switch(i){case"\\\\cdrightarrow":case"\\\\cdleftarrow":return r.callFunction(i,[e[0]],[e[1]]);case"\\uparrow":case"\\downarrow":{var n=r.callFunction("\\\\cdleft",[e[0]],[]),a={type:"atom",text:i,mode:"math",family:"rel"},s=r.callFunction("\\Big",[a],[]),l=r.callFunction("\\\\cdright",[e[1]],[]),u={type:"ordgroup",mode:"math",body:[n,s,l]};return r.callFunction("\\\\cdparent",[u],[])}case"\\\\cdlongequal":return r.callFunction("\\\\cdlongequal",[],[]);case"\\Vert":{var h={type:"textord",text:"\\Vert",mode:"math"};return r.callFunction("\\Big",[h],[])}default:return{type:"textord",text:" ",mode:"math"}}}function kLe(t){var e=[];for(t.gullet.beginGroup(),t.gullet.macros.set("\\cr","\\\\\\relax"),t.gullet.beginGroup();;){e.push(t.parseExpression(!1,"\\\\")),t.gullet.endGroup(),t.gullet.beginGroup();var r=t.fetch().text;if(r==="&"||r==="\\\\")t.consume();else if(r==="\\end"){e[e.length-1].length===0&&e.pop();break}else throw new wt("Expected \\\\ or \\cr or \\end",t.nextToken)}for(var i=[],n=[i],a=0;a-1))if("<>AV".indexOf(h)>-1)for(var d=0;d<2;d++){for(var p=!0,m=u+1;mAV=|." after @',s[u]);var g=TLe(h,f,t),y={type:"styling",body:[g],mode:"math",style:"display"};i.push(y),l=mX()}a%2===0?i.push(l):i.shift(),i=[],n.push(i)}t.gullet.endGroup(),t.gullet.endGroup();var v=new Array(n[0].length).fill({type:"align",align:"c",pregap:.25,postgap:.25});return{type:"array",mode:"math",body:n,arraystretch:1,addJot:!0,rowGaps:[null],cols:v,colSeparationType:"CD",hLinesBeforeRow:new Array(n.length+1).fill([])}}function Y4(t,e){var r=U4(t);if(r&&OLe.includes(r.text))return r;throw r?new wt("Invalid delimiter '"+r.text+"' after '"+e.funcName+"'",t):new wt("Invalid delimiter type '"+t.type+"'",t)}function vX(t){if(!t.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}function nu(t){for(var{type:e,names:r,props:i,handler:n,htmlBuilder:a,mathmlBuilder:s}=t,l={type:e,numArgs:i.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:n},u=0;u1||!f)&&y.pop(),x.length{"use strict";co=class t{static{o(this,"SourceLocation")}constructor(e,r,i){this.lexer=void 0,this.start=void 0,this.end=void 0,this.lexer=e,this.start=r,this.end=i}static range(e,r){return r?!e||!e.loc||!r.loc||e.loc.lexer!==r.loc.lexer?null:new t(e.loc.lexer,e.loc.start,r.loc.end):e&&e.loc}},Ho=class t{static{o(this,"Token")}constructor(e,r){this.text=void 0,this.loc=void 0,this.noexpand=void 0,this.treatAsRelax=void 0,this.text=e,this.loc=r}range(e,r){return new t(r,co.range(this,e))}},wt=class t{static{o(this,"ParseError")}constructor(e,r){this.name=void 0,this.position=void 0,this.length=void 0,this.rawMessage=void 0;var i="KaTeX parse error: "+e,n,a,s=r&&r.loc;if(s&&s.start<=s.end){var l=s.lexer.input;n=s.start,a=s.end,n===l.length?i+=" at end of input: ":i+=" at position "+(n+1)+": ";var u=l.slice(n,a).replace(/[^]/g,"$&\u0332"),h;n>15?h="\u2026"+l.slice(n-15,n):h=l.slice(0,n);var f;a+15":">","<":"<",'"':""","'":"'"},fDe=/[&><"']/g;o(dDe,"escape");PX=o(function t(e){return e.type==="ordgroup"||e.type==="color"?e.body.length===1?t(e.body[0]):e:e.type==="font"?t(e.body):e},"getBaseElem"),pDe=o(function(e){var r=PX(e);return r.type==="mathord"||r.type==="textord"||r.type==="atom"},"isCharacterBox"),mDe=o(function(e){if(!e)throw new Error("Expected non-null, but got "+String(e));return e},"assert"),gDe=o(function(e){var r=/^[\x00-\x20]*([^\\/#?]*?)(:|�*58|�*3a|&colon)/i.exec(e);return r?r[2]!==":"||!/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(r[1])?null:r[1].toLowerCase():"_relative"},"protocolFromUrl"),ui={deflt:lDe,escape:dDe,hyphenate:uDe,getBaseElem:PX,isCharacterBox:pDe,protocolFromUrl:gDe},Wx={displayMode:{type:"boolean",description:"Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.",cli:"-d, --display-mode"},output:{type:{enum:["htmlAndMathml","html","mathml"]},description:"Determines the markup language of the output.",cli:"-F, --format "},leqno:{type:"boolean",description:"Render display math in leqno style (left-justified tags)."},fleqn:{type:"boolean",description:"Render display math flush left."},throwOnError:{type:"boolean",default:!0,cli:"-t, --no-throw-on-error",cliDescription:"Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error."},errorColor:{type:"string",default:"#cc0000",cli:"-c, --error-color ",cliDescription:"A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.",cliProcessor:o(t=>"#"+t,"cliProcessor")},macros:{type:"object",cli:"-m, --macro ",cliDescription:"Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",cliDefault:[],cliProcessor:o((t,e)=>(e.push(t),e),"cliProcessor")},minRuleThickness:{type:"number",description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:o(t=>Math.max(0,t),"processor"),cli:"--min-rule-thickness ",cliProcessor:parseFloat},colorIsTextColor:{type:"boolean",description:"Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.",cli:"-b, --color-is-text-color"},strict:{type:[{enum:["warn","ignore","error"]},"boolean","function"],description:"Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.",cli:"-S, --strict",cliDefault:!1},trust:{type:["boolean","function"],description:"Trust the input, enabling all HTML features such as \\url.",cli:"-T, --trust"},maxSize:{type:"number",default:1/0,description:"If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large",processor:o(t=>Math.max(0,t),"processor"),cli:"-s, --max-size ",cliProcessor:parseInt},maxExpand:{type:"number",default:1e3,description:"Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.",processor:o(t=>Math.max(0,t),"processor"),cli:"-e, --max-expand ",cliProcessor:o(t=>t==="Infinity"?1/0:parseInt(t),"cliProcessor")},globalGroup:{type:"boolean",cli:!1}};o(yDe,"getDefaultValue");Hx=class{static{o(this,"Settings")}constructor(e){this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,e=e||{};for(var r in Wx)if(Wx.hasOwnProperty(r)){var i=Wx[r];this[r]=e[r]!==void 0?i.processor?i.processor(e[r]):e[r]:yDe(i)}}reportNonstrict(e,r,i){var n=this.strict;if(typeof n=="function"&&(n=n(e,r,i)),!(!n||n==="ignore")){if(n===!0||n==="error")throw new wt("LaTeX-incompatible input and strict mode is set to 'error': "+(r+" ["+e+"]"),i);n==="warn"?typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(r+" ["+e+"]")):typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+n+"': "+r+" ["+e+"]"))}}useStrictBehavior(e,r,i){var n=this.strict;if(typeof n=="function")try{n=n(e,r,i)}catch{n="error"}return!n||n==="ignore"?!1:n===!0||n==="error"?!0:n==="warn"?(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(r+" ["+e+"]")),!1):(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+n+"': "+r+" ["+e+"]")),!1)}isTrusted(e){if(e.url&&!e.protocol){var r=ui.protocolFromUrl(e.url);if(r==null)return!1;e.protocol=r}var i=typeof this.trust=="function"?this.trust(e):this.trust;return!!i}},eu=class{static{o(this,"Style")}constructor(e,r,i){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=e,this.size=r,this.cramped=i}sup(){return tu[vDe[this.id]]}sub(){return tu[xDe[this.id]]}fracNum(){return tu[bDe[this.id]]}fracDen(){return tu[TDe[this.id]]}cramp(){return tu[kDe[this.id]]}text(){return tu[CDe[this.id]]}isTight(){return this.size>=2}},zD=0,O4=1,Ag=2,xh=3,Yx=4,kl=5,_g=6,Os=7,tu=[new eu(zD,0,!1),new eu(O4,0,!0),new eu(Ag,1,!1),new eu(xh,1,!0),new eu(Yx,2,!1),new eu(kl,2,!0),new eu(_g,3,!1),new eu(Os,3,!0)],vDe=[Yx,kl,Yx,kl,_g,Os,_g,Os],xDe=[kl,kl,kl,kl,Os,Os,Os,Os],bDe=[Ag,xh,Yx,kl,_g,Os,_g,Os],TDe=[xh,xh,kl,kl,Os,Os,Os,Os],kDe=[O4,O4,xh,xh,kl,kl,Os,Os],CDe=[zD,O4,Ag,xh,Ag,xh,Ag,xh],gr={DISPLAY:tu[zD],TEXT:tu[Ag],SCRIPT:tu[Yx],SCRIPTSCRIPT:tu[_g]},_D=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"armenian",blocks:[[1328,1423]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}];o(wDe,"scriptFromCodepoint");M4=[];_D.forEach(t=>t.blocks.forEach(e=>M4.push(...e)));o(BX,"supportedCodepoint");Sg=80,EDe=o(function(e,r){return"M95,"+(622+e+r)+` +c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14 +c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54 +c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10 +s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429 +c69,-144,104.5,-217.7,106.5,-221 +l`+e/2.075+" -"+e+` +c5.3,-9.3,12,-14,20,-14 +H400000v`+(40+e)+`H845.2724 +s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7 +c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z +M`+(834+e)+" "+r+"h400000v"+(40+e)+"h-400000z"},"sqrtMain"),SDe=o(function(e,r){return"M263,"+(601+e+r)+`c0.7,0,18,39.7,52,119 +c34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120 +c340,-704.7,510.7,-1060.3,512,-1067 +l`+e/2.084+" -"+e+` +c4.7,-7.3,11,-11,19,-11 +H40000v`+(40+e)+`H1012.3 +s-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232 +c-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1 +s-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26 +c-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z +M`+(1001+e)+" "+r+"h400000v"+(40+e)+"h-400000z"},"sqrtSize1"),ADe=o(function(e,r){return"M983 "+(10+e+r)+` +l`+e/3.13+" -"+e+` +c4,-6.7,10,-10,18,-10 H400000v`+(40+e)+` +H1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7 +s-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744 +c-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30 +c26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722 +c56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5 +c53.7,-170.3,84.5,-266.8,92.5,-289.5z +M`+(1001+e)+" "+r+"h400000v"+(40+e)+"h-400000z"},"sqrtSize2"),_De=o(function(e,r){return"M424,"+(2398+e+r)+` +c-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514 +c0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20 +s-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121 +s209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081 +l`+e/4.223+" -"+e+`c4,-6.7,10,-10,18,-10 H400000 +v`+(40+e)+`H1014.6 +s-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185 +c-2,6,-10,9,-24,9 +c-8,0,-12,-0.7,-12,-2z M`+(1001+e)+" "+r+` +h400000v`+(40+e)+"h-400000z"},"sqrtSize3"),DDe=o(function(e,r){return"M473,"+(2713+e+r)+` +c339.3,-1799.3,509.3,-2700,510,-2702 l`+e/5.298+" -"+e+` +c3.3,-7.3,9.3,-11,18,-11 H400000v`+(40+e)+`H1017.7 +s-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9 +c-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200 +c0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26 +s76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104, +606zM`+(1001+e)+" "+r+"h400000v"+(40+e)+"H1017.7z"},"sqrtSize4"),LDe=o(function(e){var r=e/2;return"M400000 "+e+" H0 L"+r+" 0 l65 45 L145 "+(e-80)+" H400000z"},"phasePath"),RDe=o(function(e,r,i){var n=i-54-r-e;return"M702 "+(e+r)+"H400000"+(40+e)+` +H742v`+n+`l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1 +h-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170 +c-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667 +219 661 l218 661zM702 `+r+"H400000v"+(40+e)+"H742z"},"sqrtTall"),NDe=o(function(e,r,i){r=1e3*r;var n="";switch(e){case"sqrtMain":n=EDe(r,Sg);break;case"sqrtSize1":n=SDe(r,Sg);break;case"sqrtSize2":n=ADe(r,Sg);break;case"sqrtSize3":n=_De(r,Sg);break;case"sqrtSize4":n=DDe(r,Sg);break;case"sqrtTall":n=RDe(r,Sg,i)}return n},"sqrtPath"),IDe=o(function(e,r){switch(e){case"\u239C":return"M291 0 H417 V"+r+" H291z M291 0 H417 V"+r+" H291z";case"\u2223":return"M145 0 H188 V"+r+" H145z M145 0 H188 V"+r+" H145z";case"\u2225":return"M145 0 H188 V"+r+" H145z M145 0 H188 V"+r+" H145z"+("M367 0 H410 V"+r+" H367z M367 0 H410 V"+r+" H367z");case"\u239F":return"M457 0 H583 V"+r+" H457z M457 0 H583 V"+r+" H457z";case"\u23A2":return"M319 0 H403 V"+r+" H319z M319 0 H403 V"+r+" H319z";case"\u23A5":return"M263 0 H347 V"+r+" H263z M263 0 H347 V"+r+" H263z";case"\u23AA":return"M384 0 H504 V"+r+" H384z M384 0 H504 V"+r+" H384z";case"\u23D0":return"M312 0 H355 V"+r+" H312z M312 0 H355 V"+r+" H312z";case"\u2016":return"M257 0 H300 V"+r+" H257z M257 0 H300 V"+r+" H257z"+("M478 0 H521 V"+r+" H478z M478 0 H521 V"+r+" H478z");default:return""}},"innerPath"),aX={doubleleftarrow:`M262 157 +l10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3 + 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28 + 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5 +c2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5 + 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87 +-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7 +-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z +m8 0v40h399730v-40zm0 194v40h399730v-40z`,doublerightarrow:`M399738 392l +-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5 + 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88 +-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68 +-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18 +-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782 +c-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3 +-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z`,leftarrow:`M400000 241H110l3-3c68.7-52.7 113.7-120 + 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8 +-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247 +c-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208 + 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3 + 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202 + l-3-3h399890zM100 241v40h399900v-40z`,leftbrace:`M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117 +-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7 + 5-6 9-10 13-.7 1-7.3 1-20 1H6z`,leftbraceunder:`M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13 + 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688 + 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7 +-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z`,leftgroup:`M400000 80 +H435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0 + 435 0h399565z`,leftgroupunder:`M400000 262 +H435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219 + 435 219h399565z`,leftharpoon:`M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3 +-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5 +-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7 +-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z`,leftharpoonplus:`M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5 + 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3 +-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7 +-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z +m0 0v40h400000v-40z`,leftharpoondown:`M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333 + 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5 + 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667 +-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z`,leftharpoondownplus:`M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12 + 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7 +-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0 +v40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z`,lefthook:`M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5 +-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3 +-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21 + 71.5 23h399859zM103 281v-40h399897v40z`,leftlinesegment:`M40 281 V428 H0 V94 H40 V241 H400000 v40z +M40 281 V428 H0 V94 H40 V241 H400000 v40z`,leftmapsto:`M40 281 V448H0V74H40V241H400000v40z +M40 281 V448H0V74H40V241H400000v40z`,leftToFrom:`M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23 +-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8 +c28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3 + 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z`,longequal:`M0 50 h400000 v40H0z m0 194h40000v40H0z +M0 50 h400000 v40H0z m0 194h40000v40H0z`,midbrace:`M200428 334 +c-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14 +-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7 + 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11 + 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z`,midbraceunder:`M199572 214 +c100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14 + 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3 + 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0 +-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z`,oiintSize1:`M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6 +-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z +m368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8 +60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z`,oiintSize2:`M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8 +-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z +m502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2 +c0 110 84 276 504 276s502.4-166 502.4-276z`,oiiintSize1:`M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6 +-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z +m525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0 +85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z`,oiiintSize2:`M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8 +-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z +m770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1 +c0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z`,rightarrow:`M0 241v40h399891c-47.3 35.3-84 78-110 128 +-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 + 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 + 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85 +-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5 +-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 + 151.7 139 205zm0 0v40h399900v-40z`,rightbrace:`M400000 542l +-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5 +s-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1 +c124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z`,rightbraceunder:`M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3 + 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237 +-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z`,rightgroup:`M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0 + 3-1 3-3v-38c-76-158-257-219-435-219H0z`,rightgroupunder:`M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18 + 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z`,rightharpoon:`M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3 +-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2 +-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 + 69.2 92 94.5zm0 0v40h399900v-40z`,rightharpoonplus:`M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11 +-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7 + 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z +m0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z`,rightharpoondown:`M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8 + 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5 +-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95 +-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z`,rightharpoondownplus:`M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8 + 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 + 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3 +-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z +m0-194v40h400000v-40zm0 0v40h400000v-40z`,righthook:`M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3 + 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0 +-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21 + 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z`,rightlinesegment:`M399960 241 V94 h40 V428 h-40 V281 H0 v-40z +M399960 241 V94 h40 V428 h-40 V281 H0 v-40z`,rightToFrom:`M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23 + 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32 +-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142 +-167z M100 147v40h399900v-40zM0 341v40h399900v-40z`,twoheadleftarrow:`M0 167c68 40 + 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69 +-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3 +-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19 +-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101 + 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z`,twoheadrightarrow:`M400000 167 +c-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3 + 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42 + 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333 +-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70 + 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z`,tilde1:`M200 55.538c-77 0-168 73.953-177 73.953-3 0-7 +-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0 + 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0 + 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128 +-68.267.847-113-73.952-191-73.952z`,tilde2:`M344 55.266c-142 0-300.638 81.316-311.5 86.418 +-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9 + 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114 +c1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751 + 181.476 676 181.476c-149 0-189-126.21-332-126.21z`,tilde3:`M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457 +-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0 + 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697 + 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696 + -338 0-409-156.573-744-156.573z`,tilde4:`M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345 +-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409 + 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9 + 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409 + -175.236-744-175.236z`,vec:`M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5 +3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11 +10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63 +-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1 +-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59 +H213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359 +c-16-25.333-24-45-24-59z`,widehat1:`M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22 +c-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z`,widehat2:`M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10 +-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widehat3:`M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10 +-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widehat4:`M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10 +-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widecheck1:`M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1, +-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z`,widecheck2:`M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, +-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,widecheck3:`M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, +-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,widecheck4:`M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, +-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,baraboveleftarrow:`M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202 +c4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5 +c-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130 +s-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47 +121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6 +s2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11 +c0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z +M100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z`,rightarrowabovebar:`M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32 +-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0 +13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39 +-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5 +-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5 +-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 +151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z`,baraboveshortleftharpoon:`M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11 +c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17 +c2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21 +c-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40 +c-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z +M0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z`,rightharpoonaboveshortbar:`M0,241 l0,40c399126,0,399993,0,399993,0 +c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199, +-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6 +c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z +M0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z`,shortbaraboveleftharpoon:`M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11 +c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9, +1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7, +-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z +M93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z`,shortrightharpoonabovebar:`M53,241l0,40c398570,0,399437,0,399437,0 +c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199, +-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6 +c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z +M500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z`},MDe=o(function(e,r){switch(e){case"lbrack":return"M403 1759 V84 H666 V0 H319 V1759 v"+r+` v1759 h347 v-84 +H403z M403 1759 V0 H319 V1759 v`+r+" v1759 h84z";case"rbrack":return"M347 1759 V0 H0 V84 H263 V1759 v"+r+` v1759 H0 v84 H347z +M347 1759 V0 H263 V1759 v`+r+" v1759 h84z";case"vert":return"M145 15 v585 v"+r+` v585 c2.667,10,9.667,15,21,15 +c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15 +c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v`+r+" v585 h43z";case"doublevert":return"M145 15 v585 v"+r+` v585 c2.667,10,9.667,15,21,15 +c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15 +c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v`+r+` v585 h43z +M367 15 v585 v`+r+` v585 c2.667,10,9.667,15,21,15 +c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15 +c-10,0,-16.667,5,-20,15z M410 15 H367 v585 v`+r+" v585 h43z";case"lfloor":return"M319 602 V0 H403 V602 v"+r+` v1715 h263 v84 H319z +MM319 602 V0 H403 V602 v`+r+" v1715 H319z";case"rfloor":return"M319 602 V0 H403 V602 v"+r+` v1799 H0 v-84 H319z +MM319 602 V0 H403 V602 v`+r+" v1715 H319z";case"lceil":return"M403 1759 V84 H666 V0 H319 V1759 v"+r+` v602 h84z +M403 1759 V0 H319 V1759 v`+r+" v602 h84z";case"rceil":return"M347 1759 V0 H0 V84 H263 V1759 v"+r+` v602 h84z +M347 1759 V0 h-84 V1759 v`+r+" v602 h84z";case"lparen":return`M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1 +c-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349, +-36,557 l0,`+(r+84)+`c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210, +949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9 +c0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5, +-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189 +l0,-`+(r+92)+`c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3, +-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z`;case"rparen":return`M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3, +63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5 +c11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,`+(r+9)+` +c-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664 +c-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11 +c0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17 +c242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558 +l0,-`+(r+144)+`c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7, +-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z`;default:throw new Error("Unknown stretchy delimiter.")}},"tallDelim"),qp=class{static{o(this,"DocumentFragment")}constructor(e){this.children=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.children=e,this.classes=[],this.height=0,this.depth=0,this.maxFontSize=0,this.style={}}hasClass(e){return this.classes.includes(e)}toNode(){for(var e=document.createDocumentFragment(),r=0;rr.toText(),"toText");return this.children.map(e).join("")}},ru={"AMS-Regular":{32:[0,0,0,0,.25],65:[0,.68889,0,0,.72222],66:[0,.68889,0,0,.66667],67:[0,.68889,0,0,.72222],68:[0,.68889,0,0,.72222],69:[0,.68889,0,0,.66667],70:[0,.68889,0,0,.61111],71:[0,.68889,0,0,.77778],72:[0,.68889,0,0,.77778],73:[0,.68889,0,0,.38889],74:[.16667,.68889,0,0,.5],75:[0,.68889,0,0,.77778],76:[0,.68889,0,0,.66667],77:[0,.68889,0,0,.94445],78:[0,.68889,0,0,.72222],79:[.16667,.68889,0,0,.77778],80:[0,.68889,0,0,.61111],81:[.16667,.68889,0,0,.77778],82:[0,.68889,0,0,.72222],83:[0,.68889,0,0,.55556],84:[0,.68889,0,0,.66667],85:[0,.68889,0,0,.72222],86:[0,.68889,0,0,.72222],87:[0,.68889,0,0,1],88:[0,.68889,0,0,.72222],89:[0,.68889,0,0,.72222],90:[0,.68889,0,0,.66667],107:[0,.68889,0,0,.55556],160:[0,0,0,0,.25],165:[0,.675,.025,0,.75],174:[.15559,.69224,0,0,.94666],240:[0,.68889,0,0,.55556],295:[0,.68889,0,0,.54028],710:[0,.825,0,0,2.33334],732:[0,.9,0,0,2.33334],770:[0,.825,0,0,2.33334],771:[0,.9,0,0,2.33334],989:[.08167,.58167,0,0,.77778],1008:[0,.43056,.04028,0,.66667],8245:[0,.54986,0,0,.275],8463:[0,.68889,0,0,.54028],8487:[0,.68889,0,0,.72222],8498:[0,.68889,0,0,.55556],8502:[0,.68889,0,0,.66667],8503:[0,.68889,0,0,.44445],8504:[0,.68889,0,0,.66667],8513:[0,.68889,0,0,.63889],8592:[-.03598,.46402,0,0,.5],8594:[-.03598,.46402,0,0,.5],8602:[-.13313,.36687,0,0,1],8603:[-.13313,.36687,0,0,1],8606:[.01354,.52239,0,0,1],8608:[.01354,.52239,0,0,1],8610:[.01354,.52239,0,0,1.11111],8611:[.01354,.52239,0,0,1.11111],8619:[0,.54986,0,0,1],8620:[0,.54986,0,0,1],8621:[-.13313,.37788,0,0,1.38889],8622:[-.13313,.36687,0,0,1],8624:[0,.69224,0,0,.5],8625:[0,.69224,0,0,.5],8630:[0,.43056,0,0,1],8631:[0,.43056,0,0,1],8634:[.08198,.58198,0,0,.77778],8635:[.08198,.58198,0,0,.77778],8638:[.19444,.69224,0,0,.41667],8639:[.19444,.69224,0,0,.41667],8642:[.19444,.69224,0,0,.41667],8643:[.19444,.69224,0,0,.41667],8644:[.1808,.675,0,0,1],8646:[.1808,.675,0,0,1],8647:[.1808,.675,0,0,1],8648:[.19444,.69224,0,0,.83334],8649:[.1808,.675,0,0,1],8650:[.19444,.69224,0,0,.83334],8651:[.01354,.52239,0,0,1],8652:[.01354,.52239,0,0,1],8653:[-.13313,.36687,0,0,1],8654:[-.13313,.36687,0,0,1],8655:[-.13313,.36687,0,0,1],8666:[.13667,.63667,0,0,1],8667:[.13667,.63667,0,0,1],8669:[-.13313,.37788,0,0,1],8672:[-.064,.437,0,0,1.334],8674:[-.064,.437,0,0,1.334],8705:[0,.825,0,0,.5],8708:[0,.68889,0,0,.55556],8709:[.08167,.58167,0,0,.77778],8717:[0,.43056,0,0,.42917],8722:[-.03598,.46402,0,0,.5],8724:[.08198,.69224,0,0,.77778],8726:[.08167,.58167,0,0,.77778],8733:[0,.69224,0,0,.77778],8736:[0,.69224,0,0,.72222],8737:[0,.69224,0,0,.72222],8738:[.03517,.52239,0,0,.72222],8739:[.08167,.58167,0,0,.22222],8740:[.25142,.74111,0,0,.27778],8741:[.08167,.58167,0,0,.38889],8742:[.25142,.74111,0,0,.5],8756:[0,.69224,0,0,.66667],8757:[0,.69224,0,0,.66667],8764:[-.13313,.36687,0,0,.77778],8765:[-.13313,.37788,0,0,.77778],8769:[-.13313,.36687,0,0,.77778],8770:[-.03625,.46375,0,0,.77778],8774:[.30274,.79383,0,0,.77778],8776:[-.01688,.48312,0,0,.77778],8778:[.08167,.58167,0,0,.77778],8782:[.06062,.54986,0,0,.77778],8783:[.06062,.54986,0,0,.77778],8785:[.08198,.58198,0,0,.77778],8786:[.08198,.58198,0,0,.77778],8787:[.08198,.58198,0,0,.77778],8790:[0,.69224,0,0,.77778],8791:[.22958,.72958,0,0,.77778],8796:[.08198,.91667,0,0,.77778],8806:[.25583,.75583,0,0,.77778],8807:[.25583,.75583,0,0,.77778],8808:[.25142,.75726,0,0,.77778],8809:[.25142,.75726,0,0,.77778],8812:[.25583,.75583,0,0,.5],8814:[.20576,.70576,0,0,.77778],8815:[.20576,.70576,0,0,.77778],8816:[.30274,.79383,0,0,.77778],8817:[.30274,.79383,0,0,.77778],8818:[.22958,.72958,0,0,.77778],8819:[.22958,.72958,0,0,.77778],8822:[.1808,.675,0,0,.77778],8823:[.1808,.675,0,0,.77778],8828:[.13667,.63667,0,0,.77778],8829:[.13667,.63667,0,0,.77778],8830:[.22958,.72958,0,0,.77778],8831:[.22958,.72958,0,0,.77778],8832:[.20576,.70576,0,0,.77778],8833:[.20576,.70576,0,0,.77778],8840:[.30274,.79383,0,0,.77778],8841:[.30274,.79383,0,0,.77778],8842:[.13597,.63597,0,0,.77778],8843:[.13597,.63597,0,0,.77778],8847:[.03517,.54986,0,0,.77778],8848:[.03517,.54986,0,0,.77778],8858:[.08198,.58198,0,0,.77778],8859:[.08198,.58198,0,0,.77778],8861:[.08198,.58198,0,0,.77778],8862:[0,.675,0,0,.77778],8863:[0,.675,0,0,.77778],8864:[0,.675,0,0,.77778],8865:[0,.675,0,0,.77778],8872:[0,.69224,0,0,.61111],8873:[0,.69224,0,0,.72222],8874:[0,.69224,0,0,.88889],8876:[0,.68889,0,0,.61111],8877:[0,.68889,0,0,.61111],8878:[0,.68889,0,0,.72222],8879:[0,.68889,0,0,.72222],8882:[.03517,.54986,0,0,.77778],8883:[.03517,.54986,0,0,.77778],8884:[.13667,.63667,0,0,.77778],8885:[.13667,.63667,0,0,.77778],8888:[0,.54986,0,0,1.11111],8890:[.19444,.43056,0,0,.55556],8891:[.19444,.69224,0,0,.61111],8892:[.19444,.69224,0,0,.61111],8901:[0,.54986,0,0,.27778],8903:[.08167,.58167,0,0,.77778],8905:[.08167,.58167,0,0,.77778],8906:[.08167,.58167,0,0,.77778],8907:[0,.69224,0,0,.77778],8908:[0,.69224,0,0,.77778],8909:[-.03598,.46402,0,0,.77778],8910:[0,.54986,0,0,.76042],8911:[0,.54986,0,0,.76042],8912:[.03517,.54986,0,0,.77778],8913:[.03517,.54986,0,0,.77778],8914:[0,.54986,0,0,.66667],8915:[0,.54986,0,0,.66667],8916:[0,.69224,0,0,.66667],8918:[.0391,.5391,0,0,.77778],8919:[.0391,.5391,0,0,.77778],8920:[.03517,.54986,0,0,1.33334],8921:[.03517,.54986,0,0,1.33334],8922:[.38569,.88569,0,0,.77778],8923:[.38569,.88569,0,0,.77778],8926:[.13667,.63667,0,0,.77778],8927:[.13667,.63667,0,0,.77778],8928:[.30274,.79383,0,0,.77778],8929:[.30274,.79383,0,0,.77778],8934:[.23222,.74111,0,0,.77778],8935:[.23222,.74111,0,0,.77778],8936:[.23222,.74111,0,0,.77778],8937:[.23222,.74111,0,0,.77778],8938:[.20576,.70576,0,0,.77778],8939:[.20576,.70576,0,0,.77778],8940:[.30274,.79383,0,0,.77778],8941:[.30274,.79383,0,0,.77778],8994:[.19444,.69224,0,0,.77778],8995:[.19444,.69224,0,0,.77778],9416:[.15559,.69224,0,0,.90222],9484:[0,.69224,0,0,.5],9488:[0,.69224,0,0,.5],9492:[0,.37788,0,0,.5],9496:[0,.37788,0,0,.5],9585:[.19444,.68889,0,0,.88889],9586:[.19444,.74111,0,0,.88889],9632:[0,.675,0,0,.77778],9633:[0,.675,0,0,.77778],9650:[0,.54986,0,0,.72222],9651:[0,.54986,0,0,.72222],9654:[.03517,.54986,0,0,.77778],9660:[0,.54986,0,0,.72222],9661:[0,.54986,0,0,.72222],9664:[.03517,.54986,0,0,.77778],9674:[.11111,.69224,0,0,.66667],9733:[.19444,.69224,0,0,.94445],10003:[0,.69224,0,0,.83334],10016:[0,.69224,0,0,.83334],10731:[.11111,.69224,0,0,.66667],10846:[.19444,.75583,0,0,.61111],10877:[.13667,.63667,0,0,.77778],10878:[.13667,.63667,0,0,.77778],10885:[.25583,.75583,0,0,.77778],10886:[.25583,.75583,0,0,.77778],10887:[.13597,.63597,0,0,.77778],10888:[.13597,.63597,0,0,.77778],10889:[.26167,.75726,0,0,.77778],10890:[.26167,.75726,0,0,.77778],10891:[.48256,.98256,0,0,.77778],10892:[.48256,.98256,0,0,.77778],10901:[.13667,.63667,0,0,.77778],10902:[.13667,.63667,0,0,.77778],10933:[.25142,.75726,0,0,.77778],10934:[.25142,.75726,0,0,.77778],10935:[.26167,.75726,0,0,.77778],10936:[.26167,.75726,0,0,.77778],10937:[.26167,.75726,0,0,.77778],10938:[.26167,.75726,0,0,.77778],10949:[.25583,.75583,0,0,.77778],10950:[.25583,.75583,0,0,.77778],10955:[.28481,.79383,0,0,.77778],10956:[.28481,.79383,0,0,.77778],57350:[.08167,.58167,0,0,.22222],57351:[.08167,.58167,0,0,.38889],57352:[.08167,.58167,0,0,.77778],57353:[0,.43056,.04028,0,.66667],57356:[.25142,.75726,0,0,.77778],57357:[.25142,.75726,0,0,.77778],57358:[.41951,.91951,0,0,.77778],57359:[.30274,.79383,0,0,.77778],57360:[.30274,.79383,0,0,.77778],57361:[.41951,.91951,0,0,.77778],57366:[.25142,.75726,0,0,.77778],57367:[.25142,.75726,0,0,.77778],57368:[.25142,.75726,0,0,.77778],57369:[.25142,.75726,0,0,.77778],57370:[.13597,.63597,0,0,.77778],57371:[.13597,.63597,0,0,.77778]},"Caligraphic-Regular":{32:[0,0,0,0,.25],65:[0,.68333,0,.19445,.79847],66:[0,.68333,.03041,.13889,.65681],67:[0,.68333,.05834,.13889,.52653],68:[0,.68333,.02778,.08334,.77139],69:[0,.68333,.08944,.11111,.52778],70:[0,.68333,.09931,.11111,.71875],71:[.09722,.68333,.0593,.11111,.59487],72:[0,.68333,.00965,.11111,.84452],73:[0,.68333,.07382,0,.54452],74:[.09722,.68333,.18472,.16667,.67778],75:[0,.68333,.01445,.05556,.76195],76:[0,.68333,0,.13889,.68972],77:[0,.68333,0,.13889,1.2009],78:[0,.68333,.14736,.08334,.82049],79:[0,.68333,.02778,.11111,.79611],80:[0,.68333,.08222,.08334,.69556],81:[.09722,.68333,0,.11111,.81667],82:[0,.68333,0,.08334,.8475],83:[0,.68333,.075,.13889,.60556],84:[0,.68333,.25417,0,.54464],85:[0,.68333,.09931,.08334,.62583],86:[0,.68333,.08222,0,.61278],87:[0,.68333,.08222,.08334,.98778],88:[0,.68333,.14643,.13889,.7133],89:[.09722,.68333,.08222,.08334,.66834],90:[0,.68333,.07944,.13889,.72473],160:[0,0,0,0,.25]},"Fraktur-Regular":{32:[0,0,0,0,.25],33:[0,.69141,0,0,.29574],34:[0,.69141,0,0,.21471],38:[0,.69141,0,0,.73786],39:[0,.69141,0,0,.21201],40:[.24982,.74947,0,0,.38865],41:[.24982,.74947,0,0,.38865],42:[0,.62119,0,0,.27764],43:[.08319,.58283,0,0,.75623],44:[0,.10803,0,0,.27764],45:[.08319,.58283,0,0,.75623],46:[0,.10803,0,0,.27764],47:[.24982,.74947,0,0,.50181],48:[0,.47534,0,0,.50181],49:[0,.47534,0,0,.50181],50:[0,.47534,0,0,.50181],51:[.18906,.47534,0,0,.50181],52:[.18906,.47534,0,0,.50181],53:[.18906,.47534,0,0,.50181],54:[0,.69141,0,0,.50181],55:[.18906,.47534,0,0,.50181],56:[0,.69141,0,0,.50181],57:[.18906,.47534,0,0,.50181],58:[0,.47534,0,0,.21606],59:[.12604,.47534,0,0,.21606],61:[-.13099,.36866,0,0,.75623],63:[0,.69141,0,0,.36245],65:[0,.69141,0,0,.7176],66:[0,.69141,0,0,.88397],67:[0,.69141,0,0,.61254],68:[0,.69141,0,0,.83158],69:[0,.69141,0,0,.66278],70:[.12604,.69141,0,0,.61119],71:[0,.69141,0,0,.78539],72:[.06302,.69141,0,0,.7203],73:[0,.69141,0,0,.55448],74:[.12604,.69141,0,0,.55231],75:[0,.69141,0,0,.66845],76:[0,.69141,0,0,.66602],77:[0,.69141,0,0,1.04953],78:[0,.69141,0,0,.83212],79:[0,.69141,0,0,.82699],80:[.18906,.69141,0,0,.82753],81:[.03781,.69141,0,0,.82699],82:[0,.69141,0,0,.82807],83:[0,.69141,0,0,.82861],84:[0,.69141,0,0,.66899],85:[0,.69141,0,0,.64576],86:[0,.69141,0,0,.83131],87:[0,.69141,0,0,1.04602],88:[0,.69141,0,0,.71922],89:[.18906,.69141,0,0,.83293],90:[.12604,.69141,0,0,.60201],91:[.24982,.74947,0,0,.27764],93:[.24982,.74947,0,0,.27764],94:[0,.69141,0,0,.49965],97:[0,.47534,0,0,.50046],98:[0,.69141,0,0,.51315],99:[0,.47534,0,0,.38946],100:[0,.62119,0,0,.49857],101:[0,.47534,0,0,.40053],102:[.18906,.69141,0,0,.32626],103:[.18906,.47534,0,0,.5037],104:[.18906,.69141,0,0,.52126],105:[0,.69141,0,0,.27899],106:[0,.69141,0,0,.28088],107:[0,.69141,0,0,.38946],108:[0,.69141,0,0,.27953],109:[0,.47534,0,0,.76676],110:[0,.47534,0,0,.52666],111:[0,.47534,0,0,.48885],112:[.18906,.52396,0,0,.50046],113:[.18906,.47534,0,0,.48912],114:[0,.47534,0,0,.38919],115:[0,.47534,0,0,.44266],116:[0,.62119,0,0,.33301],117:[0,.47534,0,0,.5172],118:[0,.52396,0,0,.5118],119:[0,.52396,0,0,.77351],120:[.18906,.47534,0,0,.38865],121:[.18906,.47534,0,0,.49884],122:[.18906,.47534,0,0,.39054],160:[0,0,0,0,.25],8216:[0,.69141,0,0,.21471],8217:[0,.69141,0,0,.21471],58112:[0,.62119,0,0,.49749],58113:[0,.62119,0,0,.4983],58114:[.18906,.69141,0,0,.33328],58115:[.18906,.69141,0,0,.32923],58116:[.18906,.47534,0,0,.50343],58117:[0,.69141,0,0,.33301],58118:[0,.62119,0,0,.33409],58119:[0,.47534,0,0,.50073]},"Main-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.35],34:[0,.69444,0,0,.60278],35:[.19444,.69444,0,0,.95833],36:[.05556,.75,0,0,.575],37:[.05556,.75,0,0,.95833],38:[0,.69444,0,0,.89444],39:[0,.69444,0,0,.31944],40:[.25,.75,0,0,.44722],41:[.25,.75,0,0,.44722],42:[0,.75,0,0,.575],43:[.13333,.63333,0,0,.89444],44:[.19444,.15556,0,0,.31944],45:[0,.44444,0,0,.38333],46:[0,.15556,0,0,.31944],47:[.25,.75,0,0,.575],48:[0,.64444,0,0,.575],49:[0,.64444,0,0,.575],50:[0,.64444,0,0,.575],51:[0,.64444,0,0,.575],52:[0,.64444,0,0,.575],53:[0,.64444,0,0,.575],54:[0,.64444,0,0,.575],55:[0,.64444,0,0,.575],56:[0,.64444,0,0,.575],57:[0,.64444,0,0,.575],58:[0,.44444,0,0,.31944],59:[.19444,.44444,0,0,.31944],60:[.08556,.58556,0,0,.89444],61:[-.10889,.39111,0,0,.89444],62:[.08556,.58556,0,0,.89444],63:[0,.69444,0,0,.54305],64:[0,.69444,0,0,.89444],65:[0,.68611,0,0,.86944],66:[0,.68611,0,0,.81805],67:[0,.68611,0,0,.83055],68:[0,.68611,0,0,.88194],69:[0,.68611,0,0,.75555],70:[0,.68611,0,0,.72361],71:[0,.68611,0,0,.90416],72:[0,.68611,0,0,.9],73:[0,.68611,0,0,.43611],74:[0,.68611,0,0,.59444],75:[0,.68611,0,0,.90138],76:[0,.68611,0,0,.69166],77:[0,.68611,0,0,1.09166],78:[0,.68611,0,0,.9],79:[0,.68611,0,0,.86388],80:[0,.68611,0,0,.78611],81:[.19444,.68611,0,0,.86388],82:[0,.68611,0,0,.8625],83:[0,.68611,0,0,.63889],84:[0,.68611,0,0,.8],85:[0,.68611,0,0,.88472],86:[0,.68611,.01597,0,.86944],87:[0,.68611,.01597,0,1.18888],88:[0,.68611,0,0,.86944],89:[0,.68611,.02875,0,.86944],90:[0,.68611,0,0,.70277],91:[.25,.75,0,0,.31944],92:[.25,.75,0,0,.575],93:[.25,.75,0,0,.31944],94:[0,.69444,0,0,.575],95:[.31,.13444,.03194,0,.575],97:[0,.44444,0,0,.55902],98:[0,.69444,0,0,.63889],99:[0,.44444,0,0,.51111],100:[0,.69444,0,0,.63889],101:[0,.44444,0,0,.52708],102:[0,.69444,.10903,0,.35139],103:[.19444,.44444,.01597,0,.575],104:[0,.69444,0,0,.63889],105:[0,.69444,0,0,.31944],106:[.19444,.69444,0,0,.35139],107:[0,.69444,0,0,.60694],108:[0,.69444,0,0,.31944],109:[0,.44444,0,0,.95833],110:[0,.44444,0,0,.63889],111:[0,.44444,0,0,.575],112:[.19444,.44444,0,0,.63889],113:[.19444,.44444,0,0,.60694],114:[0,.44444,0,0,.47361],115:[0,.44444,0,0,.45361],116:[0,.63492,0,0,.44722],117:[0,.44444,0,0,.63889],118:[0,.44444,.01597,0,.60694],119:[0,.44444,.01597,0,.83055],120:[0,.44444,0,0,.60694],121:[.19444,.44444,.01597,0,.60694],122:[0,.44444,0,0,.51111],123:[.25,.75,0,0,.575],124:[.25,.75,0,0,.31944],125:[.25,.75,0,0,.575],126:[.35,.34444,0,0,.575],160:[0,0,0,0,.25],163:[0,.69444,0,0,.86853],168:[0,.69444,0,0,.575],172:[0,.44444,0,0,.76666],176:[0,.69444,0,0,.86944],177:[.13333,.63333,0,0,.89444],184:[.17014,0,0,0,.51111],198:[0,.68611,0,0,1.04166],215:[.13333,.63333,0,0,.89444],216:[.04861,.73472,0,0,.89444],223:[0,.69444,0,0,.59722],230:[0,.44444,0,0,.83055],247:[.13333,.63333,0,0,.89444],248:[.09722,.54167,0,0,.575],305:[0,.44444,0,0,.31944],338:[0,.68611,0,0,1.16944],339:[0,.44444,0,0,.89444],567:[.19444,.44444,0,0,.35139],710:[0,.69444,0,0,.575],711:[0,.63194,0,0,.575],713:[0,.59611,0,0,.575],714:[0,.69444,0,0,.575],715:[0,.69444,0,0,.575],728:[0,.69444,0,0,.575],729:[0,.69444,0,0,.31944],730:[0,.69444,0,0,.86944],732:[0,.69444,0,0,.575],733:[0,.69444,0,0,.575],915:[0,.68611,0,0,.69166],916:[0,.68611,0,0,.95833],920:[0,.68611,0,0,.89444],923:[0,.68611,0,0,.80555],926:[0,.68611,0,0,.76666],928:[0,.68611,0,0,.9],931:[0,.68611,0,0,.83055],933:[0,.68611,0,0,.89444],934:[0,.68611,0,0,.83055],936:[0,.68611,0,0,.89444],937:[0,.68611,0,0,.83055],8211:[0,.44444,.03194,0,.575],8212:[0,.44444,.03194,0,1.14999],8216:[0,.69444,0,0,.31944],8217:[0,.69444,0,0,.31944],8220:[0,.69444,0,0,.60278],8221:[0,.69444,0,0,.60278],8224:[.19444,.69444,0,0,.51111],8225:[.19444,.69444,0,0,.51111],8242:[0,.55556,0,0,.34444],8407:[0,.72444,.15486,0,.575],8463:[0,.69444,0,0,.66759],8465:[0,.69444,0,0,.83055],8467:[0,.69444,0,0,.47361],8472:[.19444,.44444,0,0,.74027],8476:[0,.69444,0,0,.83055],8501:[0,.69444,0,0,.70277],8592:[-.10889,.39111,0,0,1.14999],8593:[.19444,.69444,0,0,.575],8594:[-.10889,.39111,0,0,1.14999],8595:[.19444,.69444,0,0,.575],8596:[-.10889,.39111,0,0,1.14999],8597:[.25,.75,0,0,.575],8598:[.19444,.69444,0,0,1.14999],8599:[.19444,.69444,0,0,1.14999],8600:[.19444,.69444,0,0,1.14999],8601:[.19444,.69444,0,0,1.14999],8636:[-.10889,.39111,0,0,1.14999],8637:[-.10889,.39111,0,0,1.14999],8640:[-.10889,.39111,0,0,1.14999],8641:[-.10889,.39111,0,0,1.14999],8656:[-.10889,.39111,0,0,1.14999],8657:[.19444,.69444,0,0,.70277],8658:[-.10889,.39111,0,0,1.14999],8659:[.19444,.69444,0,0,.70277],8660:[-.10889,.39111,0,0,1.14999],8661:[.25,.75,0,0,.70277],8704:[0,.69444,0,0,.63889],8706:[0,.69444,.06389,0,.62847],8707:[0,.69444,0,0,.63889],8709:[.05556,.75,0,0,.575],8711:[0,.68611,0,0,.95833],8712:[.08556,.58556,0,0,.76666],8715:[.08556,.58556,0,0,.76666],8722:[.13333,.63333,0,0,.89444],8723:[.13333,.63333,0,0,.89444],8725:[.25,.75,0,0,.575],8726:[.25,.75,0,0,.575],8727:[-.02778,.47222,0,0,.575],8728:[-.02639,.47361,0,0,.575],8729:[-.02639,.47361,0,0,.575],8730:[.18,.82,0,0,.95833],8733:[0,.44444,0,0,.89444],8734:[0,.44444,0,0,1.14999],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.31944],8741:[.25,.75,0,0,.575],8743:[0,.55556,0,0,.76666],8744:[0,.55556,0,0,.76666],8745:[0,.55556,0,0,.76666],8746:[0,.55556,0,0,.76666],8747:[.19444,.69444,.12778,0,.56875],8764:[-.10889,.39111,0,0,.89444],8768:[.19444,.69444,0,0,.31944],8771:[.00222,.50222,0,0,.89444],8773:[.027,.638,0,0,.894],8776:[.02444,.52444,0,0,.89444],8781:[.00222,.50222,0,0,.89444],8801:[.00222,.50222,0,0,.89444],8804:[.19667,.69667,0,0,.89444],8805:[.19667,.69667,0,0,.89444],8810:[.08556,.58556,0,0,1.14999],8811:[.08556,.58556,0,0,1.14999],8826:[.08556,.58556,0,0,.89444],8827:[.08556,.58556,0,0,.89444],8834:[.08556,.58556,0,0,.89444],8835:[.08556,.58556,0,0,.89444],8838:[.19667,.69667,0,0,.89444],8839:[.19667,.69667,0,0,.89444],8846:[0,.55556,0,0,.76666],8849:[.19667,.69667,0,0,.89444],8850:[.19667,.69667,0,0,.89444],8851:[0,.55556,0,0,.76666],8852:[0,.55556,0,0,.76666],8853:[.13333,.63333,0,0,.89444],8854:[.13333,.63333,0,0,.89444],8855:[.13333,.63333,0,0,.89444],8856:[.13333,.63333,0,0,.89444],8857:[.13333,.63333,0,0,.89444],8866:[0,.69444,0,0,.70277],8867:[0,.69444,0,0,.70277],8868:[0,.69444,0,0,.89444],8869:[0,.69444,0,0,.89444],8900:[-.02639,.47361,0,0,.575],8901:[-.02639,.47361,0,0,.31944],8902:[-.02778,.47222,0,0,.575],8968:[.25,.75,0,0,.51111],8969:[.25,.75,0,0,.51111],8970:[.25,.75,0,0,.51111],8971:[.25,.75,0,0,.51111],8994:[-.13889,.36111,0,0,1.14999],8995:[-.13889,.36111,0,0,1.14999],9651:[.19444,.69444,0,0,1.02222],9657:[-.02778,.47222,0,0,.575],9661:[.19444,.69444,0,0,1.02222],9667:[-.02778,.47222,0,0,.575],9711:[.19444,.69444,0,0,1.14999],9824:[.12963,.69444,0,0,.89444],9825:[.12963,.69444,0,0,.89444],9826:[.12963,.69444,0,0,.89444],9827:[.12963,.69444,0,0,.89444],9837:[0,.75,0,0,.44722],9838:[.19444,.69444,0,0,.44722],9839:[.19444,.69444,0,0,.44722],10216:[.25,.75,0,0,.44722],10217:[.25,.75,0,0,.44722],10815:[0,.68611,0,0,.9],10927:[.19667,.69667,0,0,.89444],10928:[.19667,.69667,0,0,.89444],57376:[.19444,.69444,0,0,0]},"Main-BoldItalic":{32:[0,0,0,0,.25],33:[0,.69444,.11417,0,.38611],34:[0,.69444,.07939,0,.62055],35:[.19444,.69444,.06833,0,.94444],37:[.05556,.75,.12861,0,.94444],38:[0,.69444,.08528,0,.88555],39:[0,.69444,.12945,0,.35555],40:[.25,.75,.15806,0,.47333],41:[.25,.75,.03306,0,.47333],42:[0,.75,.14333,0,.59111],43:[.10333,.60333,.03306,0,.88555],44:[.19444,.14722,0,0,.35555],45:[0,.44444,.02611,0,.41444],46:[0,.14722,0,0,.35555],47:[.25,.75,.15806,0,.59111],48:[0,.64444,.13167,0,.59111],49:[0,.64444,.13167,0,.59111],50:[0,.64444,.13167,0,.59111],51:[0,.64444,.13167,0,.59111],52:[.19444,.64444,.13167,0,.59111],53:[0,.64444,.13167,0,.59111],54:[0,.64444,.13167,0,.59111],55:[.19444,.64444,.13167,0,.59111],56:[0,.64444,.13167,0,.59111],57:[0,.64444,.13167,0,.59111],58:[0,.44444,.06695,0,.35555],59:[.19444,.44444,.06695,0,.35555],61:[-.10889,.39111,.06833,0,.88555],63:[0,.69444,.11472,0,.59111],64:[0,.69444,.09208,0,.88555],65:[0,.68611,0,0,.86555],66:[0,.68611,.0992,0,.81666],67:[0,.68611,.14208,0,.82666],68:[0,.68611,.09062,0,.87555],69:[0,.68611,.11431,0,.75666],70:[0,.68611,.12903,0,.72722],71:[0,.68611,.07347,0,.89527],72:[0,.68611,.17208,0,.8961],73:[0,.68611,.15681,0,.47166],74:[0,.68611,.145,0,.61055],75:[0,.68611,.14208,0,.89499],76:[0,.68611,0,0,.69777],77:[0,.68611,.17208,0,1.07277],78:[0,.68611,.17208,0,.8961],79:[0,.68611,.09062,0,.85499],80:[0,.68611,.0992,0,.78721],81:[.19444,.68611,.09062,0,.85499],82:[0,.68611,.02559,0,.85944],83:[0,.68611,.11264,0,.64999],84:[0,.68611,.12903,0,.7961],85:[0,.68611,.17208,0,.88083],86:[0,.68611,.18625,0,.86555],87:[0,.68611,.18625,0,1.15999],88:[0,.68611,.15681,0,.86555],89:[0,.68611,.19803,0,.86555],90:[0,.68611,.14208,0,.70888],91:[.25,.75,.1875,0,.35611],93:[.25,.75,.09972,0,.35611],94:[0,.69444,.06709,0,.59111],95:[.31,.13444,.09811,0,.59111],97:[0,.44444,.09426,0,.59111],98:[0,.69444,.07861,0,.53222],99:[0,.44444,.05222,0,.53222],100:[0,.69444,.10861,0,.59111],101:[0,.44444,.085,0,.53222],102:[.19444,.69444,.21778,0,.4],103:[.19444,.44444,.105,0,.53222],104:[0,.69444,.09426,0,.59111],105:[0,.69326,.11387,0,.35555],106:[.19444,.69326,.1672,0,.35555],107:[0,.69444,.11111,0,.53222],108:[0,.69444,.10861,0,.29666],109:[0,.44444,.09426,0,.94444],110:[0,.44444,.09426,0,.64999],111:[0,.44444,.07861,0,.59111],112:[.19444,.44444,.07861,0,.59111],113:[.19444,.44444,.105,0,.53222],114:[0,.44444,.11111,0,.50167],115:[0,.44444,.08167,0,.48694],116:[0,.63492,.09639,0,.385],117:[0,.44444,.09426,0,.62055],118:[0,.44444,.11111,0,.53222],119:[0,.44444,.11111,0,.76777],120:[0,.44444,.12583,0,.56055],121:[.19444,.44444,.105,0,.56166],122:[0,.44444,.13889,0,.49055],126:[.35,.34444,.11472,0,.59111],160:[0,0,0,0,.25],168:[0,.69444,.11473,0,.59111],176:[0,.69444,0,0,.94888],184:[.17014,0,0,0,.53222],198:[0,.68611,.11431,0,1.02277],216:[.04861,.73472,.09062,0,.88555],223:[.19444,.69444,.09736,0,.665],230:[0,.44444,.085,0,.82666],248:[.09722,.54167,.09458,0,.59111],305:[0,.44444,.09426,0,.35555],338:[0,.68611,.11431,0,1.14054],339:[0,.44444,.085,0,.82666],567:[.19444,.44444,.04611,0,.385],710:[0,.69444,.06709,0,.59111],711:[0,.63194,.08271,0,.59111],713:[0,.59444,.10444,0,.59111],714:[0,.69444,.08528,0,.59111],715:[0,.69444,0,0,.59111],728:[0,.69444,.10333,0,.59111],729:[0,.69444,.12945,0,.35555],730:[0,.69444,0,0,.94888],732:[0,.69444,.11472,0,.59111],733:[0,.69444,.11472,0,.59111],915:[0,.68611,.12903,0,.69777],916:[0,.68611,0,0,.94444],920:[0,.68611,.09062,0,.88555],923:[0,.68611,0,0,.80666],926:[0,.68611,.15092,0,.76777],928:[0,.68611,.17208,0,.8961],931:[0,.68611,.11431,0,.82666],933:[0,.68611,.10778,0,.88555],934:[0,.68611,.05632,0,.82666],936:[0,.68611,.10778,0,.88555],937:[0,.68611,.0992,0,.82666],8211:[0,.44444,.09811,0,.59111],8212:[0,.44444,.09811,0,1.18221],8216:[0,.69444,.12945,0,.35555],8217:[0,.69444,.12945,0,.35555],8220:[0,.69444,.16772,0,.62055],8221:[0,.69444,.07939,0,.62055]},"Main-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.12417,0,.30667],34:[0,.69444,.06961,0,.51444],35:[.19444,.69444,.06616,0,.81777],37:[.05556,.75,.13639,0,.81777],38:[0,.69444,.09694,0,.76666],39:[0,.69444,.12417,0,.30667],40:[.25,.75,.16194,0,.40889],41:[.25,.75,.03694,0,.40889],42:[0,.75,.14917,0,.51111],43:[.05667,.56167,.03694,0,.76666],44:[.19444,.10556,0,0,.30667],45:[0,.43056,.02826,0,.35778],46:[0,.10556,0,0,.30667],47:[.25,.75,.16194,0,.51111],48:[0,.64444,.13556,0,.51111],49:[0,.64444,.13556,0,.51111],50:[0,.64444,.13556,0,.51111],51:[0,.64444,.13556,0,.51111],52:[.19444,.64444,.13556,0,.51111],53:[0,.64444,.13556,0,.51111],54:[0,.64444,.13556,0,.51111],55:[.19444,.64444,.13556,0,.51111],56:[0,.64444,.13556,0,.51111],57:[0,.64444,.13556,0,.51111],58:[0,.43056,.0582,0,.30667],59:[.19444,.43056,.0582,0,.30667],61:[-.13313,.36687,.06616,0,.76666],63:[0,.69444,.1225,0,.51111],64:[0,.69444,.09597,0,.76666],65:[0,.68333,0,0,.74333],66:[0,.68333,.10257,0,.70389],67:[0,.68333,.14528,0,.71555],68:[0,.68333,.09403,0,.755],69:[0,.68333,.12028,0,.67833],70:[0,.68333,.13305,0,.65277],71:[0,.68333,.08722,0,.77361],72:[0,.68333,.16389,0,.74333],73:[0,.68333,.15806,0,.38555],74:[0,.68333,.14028,0,.525],75:[0,.68333,.14528,0,.76888],76:[0,.68333,0,0,.62722],77:[0,.68333,.16389,0,.89666],78:[0,.68333,.16389,0,.74333],79:[0,.68333,.09403,0,.76666],80:[0,.68333,.10257,0,.67833],81:[.19444,.68333,.09403,0,.76666],82:[0,.68333,.03868,0,.72944],83:[0,.68333,.11972,0,.56222],84:[0,.68333,.13305,0,.71555],85:[0,.68333,.16389,0,.74333],86:[0,.68333,.18361,0,.74333],87:[0,.68333,.18361,0,.99888],88:[0,.68333,.15806,0,.74333],89:[0,.68333,.19383,0,.74333],90:[0,.68333,.14528,0,.61333],91:[.25,.75,.1875,0,.30667],93:[.25,.75,.10528,0,.30667],94:[0,.69444,.06646,0,.51111],95:[.31,.12056,.09208,0,.51111],97:[0,.43056,.07671,0,.51111],98:[0,.69444,.06312,0,.46],99:[0,.43056,.05653,0,.46],100:[0,.69444,.10333,0,.51111],101:[0,.43056,.07514,0,.46],102:[.19444,.69444,.21194,0,.30667],103:[.19444,.43056,.08847,0,.46],104:[0,.69444,.07671,0,.51111],105:[0,.65536,.1019,0,.30667],106:[.19444,.65536,.14467,0,.30667],107:[0,.69444,.10764,0,.46],108:[0,.69444,.10333,0,.25555],109:[0,.43056,.07671,0,.81777],110:[0,.43056,.07671,0,.56222],111:[0,.43056,.06312,0,.51111],112:[.19444,.43056,.06312,0,.51111],113:[.19444,.43056,.08847,0,.46],114:[0,.43056,.10764,0,.42166],115:[0,.43056,.08208,0,.40889],116:[0,.61508,.09486,0,.33222],117:[0,.43056,.07671,0,.53666],118:[0,.43056,.10764,0,.46],119:[0,.43056,.10764,0,.66444],120:[0,.43056,.12042,0,.46389],121:[.19444,.43056,.08847,0,.48555],122:[0,.43056,.12292,0,.40889],126:[.35,.31786,.11585,0,.51111],160:[0,0,0,0,.25],168:[0,.66786,.10474,0,.51111],176:[0,.69444,0,0,.83129],184:[.17014,0,0,0,.46],198:[0,.68333,.12028,0,.88277],216:[.04861,.73194,.09403,0,.76666],223:[.19444,.69444,.10514,0,.53666],230:[0,.43056,.07514,0,.71555],248:[.09722,.52778,.09194,0,.51111],338:[0,.68333,.12028,0,.98499],339:[0,.43056,.07514,0,.71555],710:[0,.69444,.06646,0,.51111],711:[0,.62847,.08295,0,.51111],713:[0,.56167,.10333,0,.51111],714:[0,.69444,.09694,0,.51111],715:[0,.69444,0,0,.51111],728:[0,.69444,.10806,0,.51111],729:[0,.66786,.11752,0,.30667],730:[0,.69444,0,0,.83129],732:[0,.66786,.11585,0,.51111],733:[0,.69444,.1225,0,.51111],915:[0,.68333,.13305,0,.62722],916:[0,.68333,0,0,.81777],920:[0,.68333,.09403,0,.76666],923:[0,.68333,0,0,.69222],926:[0,.68333,.15294,0,.66444],928:[0,.68333,.16389,0,.74333],931:[0,.68333,.12028,0,.71555],933:[0,.68333,.11111,0,.76666],934:[0,.68333,.05986,0,.71555],936:[0,.68333,.11111,0,.76666],937:[0,.68333,.10257,0,.71555],8211:[0,.43056,.09208,0,.51111],8212:[0,.43056,.09208,0,1.02222],8216:[0,.69444,.12417,0,.30667],8217:[0,.69444,.12417,0,.30667],8220:[0,.69444,.1685,0,.51444],8221:[0,.69444,.06961,0,.51444],8463:[0,.68889,0,0,.54028]},"Main-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.27778],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.77778],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.19444,.10556,0,0,.27778],45:[0,.43056,0,0,.33333],46:[0,.10556,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.64444,0,0,.5],49:[0,.64444,0,0,.5],50:[0,.64444,0,0,.5],51:[0,.64444,0,0,.5],52:[0,.64444,0,0,.5],53:[0,.64444,0,0,.5],54:[0,.64444,0,0,.5],55:[0,.64444,0,0,.5],56:[0,.64444,0,0,.5],57:[0,.64444,0,0,.5],58:[0,.43056,0,0,.27778],59:[.19444,.43056,0,0,.27778],60:[.0391,.5391,0,0,.77778],61:[-.13313,.36687,0,0,.77778],62:[.0391,.5391,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.77778],65:[0,.68333,0,0,.75],66:[0,.68333,0,0,.70834],67:[0,.68333,0,0,.72222],68:[0,.68333,0,0,.76389],69:[0,.68333,0,0,.68056],70:[0,.68333,0,0,.65278],71:[0,.68333,0,0,.78472],72:[0,.68333,0,0,.75],73:[0,.68333,0,0,.36111],74:[0,.68333,0,0,.51389],75:[0,.68333,0,0,.77778],76:[0,.68333,0,0,.625],77:[0,.68333,0,0,.91667],78:[0,.68333,0,0,.75],79:[0,.68333,0,0,.77778],80:[0,.68333,0,0,.68056],81:[.19444,.68333,0,0,.77778],82:[0,.68333,0,0,.73611],83:[0,.68333,0,0,.55556],84:[0,.68333,0,0,.72222],85:[0,.68333,0,0,.75],86:[0,.68333,.01389,0,.75],87:[0,.68333,.01389,0,1.02778],88:[0,.68333,0,0,.75],89:[0,.68333,.025,0,.75],90:[0,.68333,0,0,.61111],91:[.25,.75,0,0,.27778],92:[.25,.75,0,0,.5],93:[.25,.75,0,0,.27778],94:[0,.69444,0,0,.5],95:[.31,.12056,.02778,0,.5],97:[0,.43056,0,0,.5],98:[0,.69444,0,0,.55556],99:[0,.43056,0,0,.44445],100:[0,.69444,0,0,.55556],101:[0,.43056,0,0,.44445],102:[0,.69444,.07778,0,.30556],103:[.19444,.43056,.01389,0,.5],104:[0,.69444,0,0,.55556],105:[0,.66786,0,0,.27778],106:[.19444,.66786,0,0,.30556],107:[0,.69444,0,0,.52778],108:[0,.69444,0,0,.27778],109:[0,.43056,0,0,.83334],110:[0,.43056,0,0,.55556],111:[0,.43056,0,0,.5],112:[.19444,.43056,0,0,.55556],113:[.19444,.43056,0,0,.52778],114:[0,.43056,0,0,.39167],115:[0,.43056,0,0,.39445],116:[0,.61508,0,0,.38889],117:[0,.43056,0,0,.55556],118:[0,.43056,.01389,0,.52778],119:[0,.43056,.01389,0,.72222],120:[0,.43056,0,0,.52778],121:[.19444,.43056,.01389,0,.52778],122:[0,.43056,0,0,.44445],123:[.25,.75,0,0,.5],124:[.25,.75,0,0,.27778],125:[.25,.75,0,0,.5],126:[.35,.31786,0,0,.5],160:[0,0,0,0,.25],163:[0,.69444,0,0,.76909],167:[.19444,.69444,0,0,.44445],168:[0,.66786,0,0,.5],172:[0,.43056,0,0,.66667],176:[0,.69444,0,0,.75],177:[.08333,.58333,0,0,.77778],182:[.19444,.69444,0,0,.61111],184:[.17014,0,0,0,.44445],198:[0,.68333,0,0,.90278],215:[.08333,.58333,0,0,.77778],216:[.04861,.73194,0,0,.77778],223:[0,.69444,0,0,.5],230:[0,.43056,0,0,.72222],247:[.08333,.58333,0,0,.77778],248:[.09722,.52778,0,0,.5],305:[0,.43056,0,0,.27778],338:[0,.68333,0,0,1.01389],339:[0,.43056,0,0,.77778],567:[.19444,.43056,0,0,.30556],710:[0,.69444,0,0,.5],711:[0,.62847,0,0,.5],713:[0,.56778,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.66786,0,0,.27778],730:[0,.69444,0,0,.75],732:[0,.66786,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.68333,0,0,.625],916:[0,.68333,0,0,.83334],920:[0,.68333,0,0,.77778],923:[0,.68333,0,0,.69445],926:[0,.68333,0,0,.66667],928:[0,.68333,0,0,.75],931:[0,.68333,0,0,.72222],933:[0,.68333,0,0,.77778],934:[0,.68333,0,0,.72222],936:[0,.68333,0,0,.77778],937:[0,.68333,0,0,.72222],8211:[0,.43056,.02778,0,.5],8212:[0,.43056,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5],8224:[.19444,.69444,0,0,.44445],8225:[.19444,.69444,0,0,.44445],8230:[0,.123,0,0,1.172],8242:[0,.55556,0,0,.275],8407:[0,.71444,.15382,0,.5],8463:[0,.68889,0,0,.54028],8465:[0,.69444,0,0,.72222],8467:[0,.69444,0,.11111,.41667],8472:[.19444,.43056,0,.11111,.63646],8476:[0,.69444,0,0,.72222],8501:[0,.69444,0,0,.61111],8592:[-.13313,.36687,0,0,1],8593:[.19444,.69444,0,0,.5],8594:[-.13313,.36687,0,0,1],8595:[.19444,.69444,0,0,.5],8596:[-.13313,.36687,0,0,1],8597:[.25,.75,0,0,.5],8598:[.19444,.69444,0,0,1],8599:[.19444,.69444,0,0,1],8600:[.19444,.69444,0,0,1],8601:[.19444,.69444,0,0,1],8614:[.011,.511,0,0,1],8617:[.011,.511,0,0,1.126],8618:[.011,.511,0,0,1.126],8636:[-.13313,.36687,0,0,1],8637:[-.13313,.36687,0,0,1],8640:[-.13313,.36687,0,0,1],8641:[-.13313,.36687,0,0,1],8652:[.011,.671,0,0,1],8656:[-.13313,.36687,0,0,1],8657:[.19444,.69444,0,0,.61111],8658:[-.13313,.36687,0,0,1],8659:[.19444,.69444,0,0,.61111],8660:[-.13313,.36687,0,0,1],8661:[.25,.75,0,0,.61111],8704:[0,.69444,0,0,.55556],8706:[0,.69444,.05556,.08334,.5309],8707:[0,.69444,0,0,.55556],8709:[.05556,.75,0,0,.5],8711:[0,.68333,0,0,.83334],8712:[.0391,.5391,0,0,.66667],8715:[.0391,.5391,0,0,.66667],8722:[.08333,.58333,0,0,.77778],8723:[.08333,.58333,0,0,.77778],8725:[.25,.75,0,0,.5],8726:[.25,.75,0,0,.5],8727:[-.03472,.46528,0,0,.5],8728:[-.05555,.44445,0,0,.5],8729:[-.05555,.44445,0,0,.5],8730:[.2,.8,0,0,.83334],8733:[0,.43056,0,0,.77778],8734:[0,.43056,0,0,1],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.27778],8741:[.25,.75,0,0,.5],8743:[0,.55556,0,0,.66667],8744:[0,.55556,0,0,.66667],8745:[0,.55556,0,0,.66667],8746:[0,.55556,0,0,.66667],8747:[.19444,.69444,.11111,0,.41667],8764:[-.13313,.36687,0,0,.77778],8768:[.19444,.69444,0,0,.27778],8771:[-.03625,.46375,0,0,.77778],8773:[-.022,.589,0,0,.778],8776:[-.01688,.48312,0,0,.77778],8781:[-.03625,.46375,0,0,.77778],8784:[-.133,.673,0,0,.778],8801:[-.03625,.46375,0,0,.77778],8804:[.13597,.63597,0,0,.77778],8805:[.13597,.63597,0,0,.77778],8810:[.0391,.5391,0,0,1],8811:[.0391,.5391,0,0,1],8826:[.0391,.5391,0,0,.77778],8827:[.0391,.5391,0,0,.77778],8834:[.0391,.5391,0,0,.77778],8835:[.0391,.5391,0,0,.77778],8838:[.13597,.63597,0,0,.77778],8839:[.13597,.63597,0,0,.77778],8846:[0,.55556,0,0,.66667],8849:[.13597,.63597,0,0,.77778],8850:[.13597,.63597,0,0,.77778],8851:[0,.55556,0,0,.66667],8852:[0,.55556,0,0,.66667],8853:[.08333,.58333,0,0,.77778],8854:[.08333,.58333,0,0,.77778],8855:[.08333,.58333,0,0,.77778],8856:[.08333,.58333,0,0,.77778],8857:[.08333,.58333,0,0,.77778],8866:[0,.69444,0,0,.61111],8867:[0,.69444,0,0,.61111],8868:[0,.69444,0,0,.77778],8869:[0,.69444,0,0,.77778],8872:[.249,.75,0,0,.867],8900:[-.05555,.44445,0,0,.5],8901:[-.05555,.44445,0,0,.27778],8902:[-.03472,.46528,0,0,.5],8904:[.005,.505,0,0,.9],8942:[.03,.903,0,0,.278],8943:[-.19,.313,0,0,1.172],8945:[-.1,.823,0,0,1.282],8968:[.25,.75,0,0,.44445],8969:[.25,.75,0,0,.44445],8970:[.25,.75,0,0,.44445],8971:[.25,.75,0,0,.44445],8994:[-.14236,.35764,0,0,1],8995:[-.14236,.35764,0,0,1],9136:[.244,.744,0,0,.412],9137:[.244,.745,0,0,.412],9651:[.19444,.69444,0,0,.88889],9657:[-.03472,.46528,0,0,.5],9661:[.19444,.69444,0,0,.88889],9667:[-.03472,.46528,0,0,.5],9711:[.19444,.69444,0,0,1],9824:[.12963,.69444,0,0,.77778],9825:[.12963,.69444,0,0,.77778],9826:[.12963,.69444,0,0,.77778],9827:[.12963,.69444,0,0,.77778],9837:[0,.75,0,0,.38889],9838:[.19444,.69444,0,0,.38889],9839:[.19444,.69444,0,0,.38889],10216:[.25,.75,0,0,.38889],10217:[.25,.75,0,0,.38889],10222:[.244,.744,0,0,.412],10223:[.244,.745,0,0,.412],10229:[.011,.511,0,0,1.609],10230:[.011,.511,0,0,1.638],10231:[.011,.511,0,0,1.859],10232:[.024,.525,0,0,1.609],10233:[.024,.525,0,0,1.638],10234:[.024,.525,0,0,1.858],10236:[.011,.511,0,0,1.638],10815:[0,.68333,0,0,.75],10927:[.13597,.63597,0,0,.77778],10928:[.13597,.63597,0,0,.77778],57376:[.19444,.69444,0,0,0]},"Math-BoldItalic":{32:[0,0,0,0,.25],48:[0,.44444,0,0,.575],49:[0,.44444,0,0,.575],50:[0,.44444,0,0,.575],51:[.19444,.44444,0,0,.575],52:[.19444,.44444,0,0,.575],53:[.19444,.44444,0,0,.575],54:[0,.64444,0,0,.575],55:[.19444,.44444,0,0,.575],56:[0,.64444,0,0,.575],57:[.19444,.44444,0,0,.575],65:[0,.68611,0,0,.86944],66:[0,.68611,.04835,0,.8664],67:[0,.68611,.06979,0,.81694],68:[0,.68611,.03194,0,.93812],69:[0,.68611,.05451,0,.81007],70:[0,.68611,.15972,0,.68889],71:[0,.68611,0,0,.88673],72:[0,.68611,.08229,0,.98229],73:[0,.68611,.07778,0,.51111],74:[0,.68611,.10069,0,.63125],75:[0,.68611,.06979,0,.97118],76:[0,.68611,0,0,.75555],77:[0,.68611,.11424,0,1.14201],78:[0,.68611,.11424,0,.95034],79:[0,.68611,.03194,0,.83666],80:[0,.68611,.15972,0,.72309],81:[.19444,.68611,0,0,.86861],82:[0,.68611,.00421,0,.87235],83:[0,.68611,.05382,0,.69271],84:[0,.68611,.15972,0,.63663],85:[0,.68611,.11424,0,.80027],86:[0,.68611,.25555,0,.67778],87:[0,.68611,.15972,0,1.09305],88:[0,.68611,.07778,0,.94722],89:[0,.68611,.25555,0,.67458],90:[0,.68611,.06979,0,.77257],97:[0,.44444,0,0,.63287],98:[0,.69444,0,0,.52083],99:[0,.44444,0,0,.51342],100:[0,.69444,0,0,.60972],101:[0,.44444,0,0,.55361],102:[.19444,.69444,.11042,0,.56806],103:[.19444,.44444,.03704,0,.5449],104:[0,.69444,0,0,.66759],105:[0,.69326,0,0,.4048],106:[.19444,.69326,.0622,0,.47083],107:[0,.69444,.01852,0,.6037],108:[0,.69444,.0088,0,.34815],109:[0,.44444,0,0,1.0324],110:[0,.44444,0,0,.71296],111:[0,.44444,0,0,.58472],112:[.19444,.44444,0,0,.60092],113:[.19444,.44444,.03704,0,.54213],114:[0,.44444,.03194,0,.5287],115:[0,.44444,0,0,.53125],116:[0,.63492,0,0,.41528],117:[0,.44444,0,0,.68102],118:[0,.44444,.03704,0,.56666],119:[0,.44444,.02778,0,.83148],120:[0,.44444,0,0,.65903],121:[.19444,.44444,.03704,0,.59028],122:[0,.44444,.04213,0,.55509],160:[0,0,0,0,.25],915:[0,.68611,.15972,0,.65694],916:[0,.68611,0,0,.95833],920:[0,.68611,.03194,0,.86722],923:[0,.68611,0,0,.80555],926:[0,.68611,.07458,0,.84125],928:[0,.68611,.08229,0,.98229],931:[0,.68611,.05451,0,.88507],933:[0,.68611,.15972,0,.67083],934:[0,.68611,0,0,.76666],936:[0,.68611,.11653,0,.71402],937:[0,.68611,.04835,0,.8789],945:[0,.44444,0,0,.76064],946:[.19444,.69444,.03403,0,.65972],947:[.19444,.44444,.06389,0,.59003],948:[0,.69444,.03819,0,.52222],949:[0,.44444,0,0,.52882],950:[.19444,.69444,.06215,0,.50833],951:[.19444,.44444,.03704,0,.6],952:[0,.69444,.03194,0,.5618],953:[0,.44444,0,0,.41204],954:[0,.44444,0,0,.66759],955:[0,.69444,0,0,.67083],956:[.19444,.44444,0,0,.70787],957:[0,.44444,.06898,0,.57685],958:[.19444,.69444,.03021,0,.50833],959:[0,.44444,0,0,.58472],960:[0,.44444,.03704,0,.68241],961:[.19444,.44444,0,0,.6118],962:[.09722,.44444,.07917,0,.42361],963:[0,.44444,.03704,0,.68588],964:[0,.44444,.13472,0,.52083],965:[0,.44444,.03704,0,.63055],966:[.19444,.44444,0,0,.74722],967:[.19444,.44444,0,0,.71805],968:[.19444,.69444,.03704,0,.75833],969:[0,.44444,.03704,0,.71782],977:[0,.69444,0,0,.69155],981:[.19444,.69444,0,0,.7125],982:[0,.44444,.03194,0,.975],1009:[.19444,.44444,0,0,.6118],1013:[0,.44444,0,0,.48333],57649:[0,.44444,0,0,.39352],57911:[.19444,.44444,0,0,.43889]},"Math-Italic":{32:[0,0,0,0,.25],48:[0,.43056,0,0,.5],49:[0,.43056,0,0,.5],50:[0,.43056,0,0,.5],51:[.19444,.43056,0,0,.5],52:[.19444,.43056,0,0,.5],53:[.19444,.43056,0,0,.5],54:[0,.64444,0,0,.5],55:[.19444,.43056,0,0,.5],56:[0,.64444,0,0,.5],57:[.19444,.43056,0,0,.5],65:[0,.68333,0,.13889,.75],66:[0,.68333,.05017,.08334,.75851],67:[0,.68333,.07153,.08334,.71472],68:[0,.68333,.02778,.05556,.82792],69:[0,.68333,.05764,.08334,.7382],70:[0,.68333,.13889,.08334,.64306],71:[0,.68333,0,.08334,.78625],72:[0,.68333,.08125,.05556,.83125],73:[0,.68333,.07847,.11111,.43958],74:[0,.68333,.09618,.16667,.55451],75:[0,.68333,.07153,.05556,.84931],76:[0,.68333,0,.02778,.68056],77:[0,.68333,.10903,.08334,.97014],78:[0,.68333,.10903,.08334,.80347],79:[0,.68333,.02778,.08334,.76278],80:[0,.68333,.13889,.08334,.64201],81:[.19444,.68333,0,.08334,.79056],82:[0,.68333,.00773,.08334,.75929],83:[0,.68333,.05764,.08334,.6132],84:[0,.68333,.13889,.08334,.58438],85:[0,.68333,.10903,.02778,.68278],86:[0,.68333,.22222,0,.58333],87:[0,.68333,.13889,0,.94445],88:[0,.68333,.07847,.08334,.82847],89:[0,.68333,.22222,0,.58056],90:[0,.68333,.07153,.08334,.68264],97:[0,.43056,0,0,.52859],98:[0,.69444,0,0,.42917],99:[0,.43056,0,.05556,.43276],100:[0,.69444,0,.16667,.52049],101:[0,.43056,0,.05556,.46563],102:[.19444,.69444,.10764,.16667,.48959],103:[.19444,.43056,.03588,.02778,.47697],104:[0,.69444,0,0,.57616],105:[0,.65952,0,0,.34451],106:[.19444,.65952,.05724,0,.41181],107:[0,.69444,.03148,0,.5206],108:[0,.69444,.01968,.08334,.29838],109:[0,.43056,0,0,.87801],110:[0,.43056,0,0,.60023],111:[0,.43056,0,.05556,.48472],112:[.19444,.43056,0,.08334,.50313],113:[.19444,.43056,.03588,.08334,.44641],114:[0,.43056,.02778,.05556,.45116],115:[0,.43056,0,.05556,.46875],116:[0,.61508,0,.08334,.36111],117:[0,.43056,0,.02778,.57246],118:[0,.43056,.03588,.02778,.48472],119:[0,.43056,.02691,.08334,.71592],120:[0,.43056,0,.02778,.57153],121:[.19444,.43056,.03588,.05556,.49028],122:[0,.43056,.04398,.05556,.46505],160:[0,0,0,0,.25],915:[0,.68333,.13889,.08334,.61528],916:[0,.68333,0,.16667,.83334],920:[0,.68333,.02778,.08334,.76278],923:[0,.68333,0,.16667,.69445],926:[0,.68333,.07569,.08334,.74236],928:[0,.68333,.08125,.05556,.83125],931:[0,.68333,.05764,.08334,.77986],933:[0,.68333,.13889,.05556,.58333],934:[0,.68333,0,.08334,.66667],936:[0,.68333,.11,.05556,.61222],937:[0,.68333,.05017,.08334,.7724],945:[0,.43056,.0037,.02778,.6397],946:[.19444,.69444,.05278,.08334,.56563],947:[.19444,.43056,.05556,0,.51773],948:[0,.69444,.03785,.05556,.44444],949:[0,.43056,0,.08334,.46632],950:[.19444,.69444,.07378,.08334,.4375],951:[.19444,.43056,.03588,.05556,.49653],952:[0,.69444,.02778,.08334,.46944],953:[0,.43056,0,.05556,.35394],954:[0,.43056,0,0,.57616],955:[0,.69444,0,0,.58334],956:[.19444,.43056,0,.02778,.60255],957:[0,.43056,.06366,.02778,.49398],958:[.19444,.69444,.04601,.11111,.4375],959:[0,.43056,0,.05556,.48472],960:[0,.43056,.03588,0,.57003],961:[.19444,.43056,0,.08334,.51702],962:[.09722,.43056,.07986,.08334,.36285],963:[0,.43056,.03588,0,.57141],964:[0,.43056,.1132,.02778,.43715],965:[0,.43056,.03588,.02778,.54028],966:[.19444,.43056,0,.08334,.65417],967:[.19444,.43056,0,.05556,.62569],968:[.19444,.69444,.03588,.11111,.65139],969:[0,.43056,.03588,0,.62245],977:[0,.69444,0,.08334,.59144],981:[.19444,.69444,0,.08334,.59583],982:[0,.43056,.02778,0,.82813],1009:[.19444,.43056,0,.08334,.51702],1013:[0,.43056,0,.05556,.4059],57649:[0,.43056,0,.02778,.32246],57911:[.19444,.43056,0,.08334,.38403]},"SansSerif-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.36667],34:[0,.69444,0,0,.55834],35:[.19444,.69444,0,0,.91667],36:[.05556,.75,0,0,.55],37:[.05556,.75,0,0,1.02912],38:[0,.69444,0,0,.83056],39:[0,.69444,0,0,.30556],40:[.25,.75,0,0,.42778],41:[.25,.75,0,0,.42778],42:[0,.75,0,0,.55],43:[.11667,.61667,0,0,.85556],44:[.10556,.13056,0,0,.30556],45:[0,.45833,0,0,.36667],46:[0,.13056,0,0,.30556],47:[.25,.75,0,0,.55],48:[0,.69444,0,0,.55],49:[0,.69444,0,0,.55],50:[0,.69444,0,0,.55],51:[0,.69444,0,0,.55],52:[0,.69444,0,0,.55],53:[0,.69444,0,0,.55],54:[0,.69444,0,0,.55],55:[0,.69444,0,0,.55],56:[0,.69444,0,0,.55],57:[0,.69444,0,0,.55],58:[0,.45833,0,0,.30556],59:[.10556,.45833,0,0,.30556],61:[-.09375,.40625,0,0,.85556],63:[0,.69444,0,0,.51945],64:[0,.69444,0,0,.73334],65:[0,.69444,0,0,.73334],66:[0,.69444,0,0,.73334],67:[0,.69444,0,0,.70278],68:[0,.69444,0,0,.79445],69:[0,.69444,0,0,.64167],70:[0,.69444,0,0,.61111],71:[0,.69444,0,0,.73334],72:[0,.69444,0,0,.79445],73:[0,.69444,0,0,.33056],74:[0,.69444,0,0,.51945],75:[0,.69444,0,0,.76389],76:[0,.69444,0,0,.58056],77:[0,.69444,0,0,.97778],78:[0,.69444,0,0,.79445],79:[0,.69444,0,0,.79445],80:[0,.69444,0,0,.70278],81:[.10556,.69444,0,0,.79445],82:[0,.69444,0,0,.70278],83:[0,.69444,0,0,.61111],84:[0,.69444,0,0,.73334],85:[0,.69444,0,0,.76389],86:[0,.69444,.01528,0,.73334],87:[0,.69444,.01528,0,1.03889],88:[0,.69444,0,0,.73334],89:[0,.69444,.0275,0,.73334],90:[0,.69444,0,0,.67223],91:[.25,.75,0,0,.34306],93:[.25,.75,0,0,.34306],94:[0,.69444,0,0,.55],95:[.35,.10833,.03056,0,.55],97:[0,.45833,0,0,.525],98:[0,.69444,0,0,.56111],99:[0,.45833,0,0,.48889],100:[0,.69444,0,0,.56111],101:[0,.45833,0,0,.51111],102:[0,.69444,.07639,0,.33611],103:[.19444,.45833,.01528,0,.55],104:[0,.69444,0,0,.56111],105:[0,.69444,0,0,.25556],106:[.19444,.69444,0,0,.28611],107:[0,.69444,0,0,.53056],108:[0,.69444,0,0,.25556],109:[0,.45833,0,0,.86667],110:[0,.45833,0,0,.56111],111:[0,.45833,0,0,.55],112:[.19444,.45833,0,0,.56111],113:[.19444,.45833,0,0,.56111],114:[0,.45833,.01528,0,.37222],115:[0,.45833,0,0,.42167],116:[0,.58929,0,0,.40417],117:[0,.45833,0,0,.56111],118:[0,.45833,.01528,0,.5],119:[0,.45833,.01528,0,.74445],120:[0,.45833,0,0,.5],121:[.19444,.45833,.01528,0,.5],122:[0,.45833,0,0,.47639],126:[.35,.34444,0,0,.55],160:[0,0,0,0,.25],168:[0,.69444,0,0,.55],176:[0,.69444,0,0,.73334],180:[0,.69444,0,0,.55],184:[.17014,0,0,0,.48889],305:[0,.45833,0,0,.25556],567:[.19444,.45833,0,0,.28611],710:[0,.69444,0,0,.55],711:[0,.63542,0,0,.55],713:[0,.63778,0,0,.55],728:[0,.69444,0,0,.55],729:[0,.69444,0,0,.30556],730:[0,.69444,0,0,.73334],732:[0,.69444,0,0,.55],733:[0,.69444,0,0,.55],915:[0,.69444,0,0,.58056],916:[0,.69444,0,0,.91667],920:[0,.69444,0,0,.85556],923:[0,.69444,0,0,.67223],926:[0,.69444,0,0,.73334],928:[0,.69444,0,0,.79445],931:[0,.69444,0,0,.79445],933:[0,.69444,0,0,.85556],934:[0,.69444,0,0,.79445],936:[0,.69444,0,0,.85556],937:[0,.69444,0,0,.79445],8211:[0,.45833,.03056,0,.55],8212:[0,.45833,.03056,0,1.10001],8216:[0,.69444,0,0,.30556],8217:[0,.69444,0,0,.30556],8220:[0,.69444,0,0,.55834],8221:[0,.69444,0,0,.55834]},"SansSerif-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.05733,0,.31945],34:[0,.69444,.00316,0,.5],35:[.19444,.69444,.05087,0,.83334],36:[.05556,.75,.11156,0,.5],37:[.05556,.75,.03126,0,.83334],38:[0,.69444,.03058,0,.75834],39:[0,.69444,.07816,0,.27778],40:[.25,.75,.13164,0,.38889],41:[.25,.75,.02536,0,.38889],42:[0,.75,.11775,0,.5],43:[.08333,.58333,.02536,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,.01946,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,.13164,0,.5],48:[0,.65556,.11156,0,.5],49:[0,.65556,.11156,0,.5],50:[0,.65556,.11156,0,.5],51:[0,.65556,.11156,0,.5],52:[0,.65556,.11156,0,.5],53:[0,.65556,.11156,0,.5],54:[0,.65556,.11156,0,.5],55:[0,.65556,.11156,0,.5],56:[0,.65556,.11156,0,.5],57:[0,.65556,.11156,0,.5],58:[0,.44444,.02502,0,.27778],59:[.125,.44444,.02502,0,.27778],61:[-.13,.37,.05087,0,.77778],63:[0,.69444,.11809,0,.47222],64:[0,.69444,.07555,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,.08293,0,.66667],67:[0,.69444,.11983,0,.63889],68:[0,.69444,.07555,0,.72223],69:[0,.69444,.11983,0,.59722],70:[0,.69444,.13372,0,.56945],71:[0,.69444,.11983,0,.66667],72:[0,.69444,.08094,0,.70834],73:[0,.69444,.13372,0,.27778],74:[0,.69444,.08094,0,.47222],75:[0,.69444,.11983,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,.08094,0,.875],78:[0,.69444,.08094,0,.70834],79:[0,.69444,.07555,0,.73611],80:[0,.69444,.08293,0,.63889],81:[.125,.69444,.07555,0,.73611],82:[0,.69444,.08293,0,.64584],83:[0,.69444,.09205,0,.55556],84:[0,.69444,.13372,0,.68056],85:[0,.69444,.08094,0,.6875],86:[0,.69444,.1615,0,.66667],87:[0,.69444,.1615,0,.94445],88:[0,.69444,.13372,0,.66667],89:[0,.69444,.17261,0,.66667],90:[0,.69444,.11983,0,.61111],91:[.25,.75,.15942,0,.28889],93:[.25,.75,.08719,0,.28889],94:[0,.69444,.0799,0,.5],95:[.35,.09444,.08616,0,.5],97:[0,.44444,.00981,0,.48056],98:[0,.69444,.03057,0,.51667],99:[0,.44444,.08336,0,.44445],100:[0,.69444,.09483,0,.51667],101:[0,.44444,.06778,0,.44445],102:[0,.69444,.21705,0,.30556],103:[.19444,.44444,.10836,0,.5],104:[0,.69444,.01778,0,.51667],105:[0,.67937,.09718,0,.23889],106:[.19444,.67937,.09162,0,.26667],107:[0,.69444,.08336,0,.48889],108:[0,.69444,.09483,0,.23889],109:[0,.44444,.01778,0,.79445],110:[0,.44444,.01778,0,.51667],111:[0,.44444,.06613,0,.5],112:[.19444,.44444,.0389,0,.51667],113:[.19444,.44444,.04169,0,.51667],114:[0,.44444,.10836,0,.34167],115:[0,.44444,.0778,0,.38333],116:[0,.57143,.07225,0,.36111],117:[0,.44444,.04169,0,.51667],118:[0,.44444,.10836,0,.46111],119:[0,.44444,.10836,0,.68334],120:[0,.44444,.09169,0,.46111],121:[.19444,.44444,.10836,0,.46111],122:[0,.44444,.08752,0,.43472],126:[.35,.32659,.08826,0,.5],160:[0,0,0,0,.25],168:[0,.67937,.06385,0,.5],176:[0,.69444,0,0,.73752],184:[.17014,0,0,0,.44445],305:[0,.44444,.04169,0,.23889],567:[.19444,.44444,.04169,0,.26667],710:[0,.69444,.0799,0,.5],711:[0,.63194,.08432,0,.5],713:[0,.60889,.08776,0,.5],714:[0,.69444,.09205,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,.09483,0,.5],729:[0,.67937,.07774,0,.27778],730:[0,.69444,0,0,.73752],732:[0,.67659,.08826,0,.5],733:[0,.69444,.09205,0,.5],915:[0,.69444,.13372,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,.07555,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,.12816,0,.66667],928:[0,.69444,.08094,0,.70834],931:[0,.69444,.11983,0,.72222],933:[0,.69444,.09031,0,.77778],934:[0,.69444,.04603,0,.72222],936:[0,.69444,.09031,0,.77778],937:[0,.69444,.08293,0,.72222],8211:[0,.44444,.08616,0,.5],8212:[0,.44444,.08616,0,1],8216:[0,.69444,.07816,0,.27778],8217:[0,.69444,.07816,0,.27778],8220:[0,.69444,.14205,0,.5],8221:[0,.69444,.00316,0,.5]},"SansSerif-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.31945],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.75834],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,0,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.65556,0,0,.5],49:[0,.65556,0,0,.5],50:[0,.65556,0,0,.5],51:[0,.65556,0,0,.5],52:[0,.65556,0,0,.5],53:[0,.65556,0,0,.5],54:[0,.65556,0,0,.5],55:[0,.65556,0,0,.5],56:[0,.65556,0,0,.5],57:[0,.65556,0,0,.5],58:[0,.44444,0,0,.27778],59:[.125,.44444,0,0,.27778],61:[-.13,.37,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,0,0,.66667],67:[0,.69444,0,0,.63889],68:[0,.69444,0,0,.72223],69:[0,.69444,0,0,.59722],70:[0,.69444,0,0,.56945],71:[0,.69444,0,0,.66667],72:[0,.69444,0,0,.70834],73:[0,.69444,0,0,.27778],74:[0,.69444,0,0,.47222],75:[0,.69444,0,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,0,0,.875],78:[0,.69444,0,0,.70834],79:[0,.69444,0,0,.73611],80:[0,.69444,0,0,.63889],81:[.125,.69444,0,0,.73611],82:[0,.69444,0,0,.64584],83:[0,.69444,0,0,.55556],84:[0,.69444,0,0,.68056],85:[0,.69444,0,0,.6875],86:[0,.69444,.01389,0,.66667],87:[0,.69444,.01389,0,.94445],88:[0,.69444,0,0,.66667],89:[0,.69444,.025,0,.66667],90:[0,.69444,0,0,.61111],91:[.25,.75,0,0,.28889],93:[.25,.75,0,0,.28889],94:[0,.69444,0,0,.5],95:[.35,.09444,.02778,0,.5],97:[0,.44444,0,0,.48056],98:[0,.69444,0,0,.51667],99:[0,.44444,0,0,.44445],100:[0,.69444,0,0,.51667],101:[0,.44444,0,0,.44445],102:[0,.69444,.06944,0,.30556],103:[.19444,.44444,.01389,0,.5],104:[0,.69444,0,0,.51667],105:[0,.67937,0,0,.23889],106:[.19444,.67937,0,0,.26667],107:[0,.69444,0,0,.48889],108:[0,.69444,0,0,.23889],109:[0,.44444,0,0,.79445],110:[0,.44444,0,0,.51667],111:[0,.44444,0,0,.5],112:[.19444,.44444,0,0,.51667],113:[.19444,.44444,0,0,.51667],114:[0,.44444,.01389,0,.34167],115:[0,.44444,0,0,.38333],116:[0,.57143,0,0,.36111],117:[0,.44444,0,0,.51667],118:[0,.44444,.01389,0,.46111],119:[0,.44444,.01389,0,.68334],120:[0,.44444,0,0,.46111],121:[.19444,.44444,.01389,0,.46111],122:[0,.44444,0,0,.43472],126:[.35,.32659,0,0,.5],160:[0,0,0,0,.25],168:[0,.67937,0,0,.5],176:[0,.69444,0,0,.66667],184:[.17014,0,0,0,.44445],305:[0,.44444,0,0,.23889],567:[.19444,.44444,0,0,.26667],710:[0,.69444,0,0,.5],711:[0,.63194,0,0,.5],713:[0,.60889,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.67937,0,0,.27778],730:[0,.69444,0,0,.66667],732:[0,.67659,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.69444,0,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,0,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,0,0,.66667],928:[0,.69444,0,0,.70834],931:[0,.69444,0,0,.72222],933:[0,.69444,0,0,.77778],934:[0,.69444,0,0,.72222],936:[0,.69444,0,0,.77778],937:[0,.69444,0,0,.72222],8211:[0,.44444,.02778,0,.5],8212:[0,.44444,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5]},"Script-Regular":{32:[0,0,0,0,.25],65:[0,.7,.22925,0,.80253],66:[0,.7,.04087,0,.90757],67:[0,.7,.1689,0,.66619],68:[0,.7,.09371,0,.77443],69:[0,.7,.18583,0,.56162],70:[0,.7,.13634,0,.89544],71:[0,.7,.17322,0,.60961],72:[0,.7,.29694,0,.96919],73:[0,.7,.19189,0,.80907],74:[.27778,.7,.19189,0,1.05159],75:[0,.7,.31259,0,.91364],76:[0,.7,.19189,0,.87373],77:[0,.7,.15981,0,1.08031],78:[0,.7,.3525,0,.9015],79:[0,.7,.08078,0,.73787],80:[0,.7,.08078,0,1.01262],81:[0,.7,.03305,0,.88282],82:[0,.7,.06259,0,.85],83:[0,.7,.19189,0,.86767],84:[0,.7,.29087,0,.74697],85:[0,.7,.25815,0,.79996],86:[0,.7,.27523,0,.62204],87:[0,.7,.27523,0,.80532],88:[0,.7,.26006,0,.94445],89:[0,.7,.2939,0,.70961],90:[0,.7,.24037,0,.8212],160:[0,0,0,0,.25]},"Size1-Regular":{32:[0,0,0,0,.25],40:[.35001,.85,0,0,.45834],41:[.35001,.85,0,0,.45834],47:[.35001,.85,0,0,.57778],91:[.35001,.85,0,0,.41667],92:[.35001,.85,0,0,.57778],93:[.35001,.85,0,0,.41667],123:[.35001,.85,0,0,.58334],125:[.35001,.85,0,0,.58334],160:[0,0,0,0,.25],710:[0,.72222,0,0,.55556],732:[0,.72222,0,0,.55556],770:[0,.72222,0,0,.55556],771:[0,.72222,0,0,.55556],8214:[-99e-5,.601,0,0,.77778],8593:[1e-5,.6,0,0,.66667],8595:[1e-5,.6,0,0,.66667],8657:[1e-5,.6,0,0,.77778],8659:[1e-5,.6,0,0,.77778],8719:[.25001,.75,0,0,.94445],8720:[.25001,.75,0,0,.94445],8721:[.25001,.75,0,0,1.05556],8730:[.35001,.85,0,0,1],8739:[-.00599,.606,0,0,.33333],8741:[-.00599,.606,0,0,.55556],8747:[.30612,.805,.19445,0,.47222],8748:[.306,.805,.19445,0,.47222],8749:[.306,.805,.19445,0,.47222],8750:[.30612,.805,.19445,0,.47222],8896:[.25001,.75,0,0,.83334],8897:[.25001,.75,0,0,.83334],8898:[.25001,.75,0,0,.83334],8899:[.25001,.75,0,0,.83334],8968:[.35001,.85,0,0,.47222],8969:[.35001,.85,0,0,.47222],8970:[.35001,.85,0,0,.47222],8971:[.35001,.85,0,0,.47222],9168:[-99e-5,.601,0,0,.66667],10216:[.35001,.85,0,0,.47222],10217:[.35001,.85,0,0,.47222],10752:[.25001,.75,0,0,1.11111],10753:[.25001,.75,0,0,1.11111],10754:[.25001,.75,0,0,1.11111],10756:[.25001,.75,0,0,.83334],10758:[.25001,.75,0,0,.83334]},"Size2-Regular":{32:[0,0,0,0,.25],40:[.65002,1.15,0,0,.59722],41:[.65002,1.15,0,0,.59722],47:[.65002,1.15,0,0,.81111],91:[.65002,1.15,0,0,.47222],92:[.65002,1.15,0,0,.81111],93:[.65002,1.15,0,0,.47222],123:[.65002,1.15,0,0,.66667],125:[.65002,1.15,0,0,.66667],160:[0,0,0,0,.25],710:[0,.75,0,0,1],732:[0,.75,0,0,1],770:[0,.75,0,0,1],771:[0,.75,0,0,1],8719:[.55001,1.05,0,0,1.27778],8720:[.55001,1.05,0,0,1.27778],8721:[.55001,1.05,0,0,1.44445],8730:[.65002,1.15,0,0,1],8747:[.86225,1.36,.44445,0,.55556],8748:[.862,1.36,.44445,0,.55556],8749:[.862,1.36,.44445,0,.55556],8750:[.86225,1.36,.44445,0,.55556],8896:[.55001,1.05,0,0,1.11111],8897:[.55001,1.05,0,0,1.11111],8898:[.55001,1.05,0,0,1.11111],8899:[.55001,1.05,0,0,1.11111],8968:[.65002,1.15,0,0,.52778],8969:[.65002,1.15,0,0,.52778],8970:[.65002,1.15,0,0,.52778],8971:[.65002,1.15,0,0,.52778],10216:[.65002,1.15,0,0,.61111],10217:[.65002,1.15,0,0,.61111],10752:[.55001,1.05,0,0,1.51112],10753:[.55001,1.05,0,0,1.51112],10754:[.55001,1.05,0,0,1.51112],10756:[.55001,1.05,0,0,1.11111],10758:[.55001,1.05,0,0,1.11111]},"Size3-Regular":{32:[0,0,0,0,.25],40:[.95003,1.45,0,0,.73611],41:[.95003,1.45,0,0,.73611],47:[.95003,1.45,0,0,1.04445],91:[.95003,1.45,0,0,.52778],92:[.95003,1.45,0,0,1.04445],93:[.95003,1.45,0,0,.52778],123:[.95003,1.45,0,0,.75],125:[.95003,1.45,0,0,.75],160:[0,0,0,0,.25],710:[0,.75,0,0,1.44445],732:[0,.75,0,0,1.44445],770:[0,.75,0,0,1.44445],771:[0,.75,0,0,1.44445],8730:[.95003,1.45,0,0,1],8968:[.95003,1.45,0,0,.58334],8969:[.95003,1.45,0,0,.58334],8970:[.95003,1.45,0,0,.58334],8971:[.95003,1.45,0,0,.58334],10216:[.95003,1.45,0,0,.75],10217:[.95003,1.45,0,0,.75]},"Size4-Regular":{32:[0,0,0,0,.25],40:[1.25003,1.75,0,0,.79167],41:[1.25003,1.75,0,0,.79167],47:[1.25003,1.75,0,0,1.27778],91:[1.25003,1.75,0,0,.58334],92:[1.25003,1.75,0,0,1.27778],93:[1.25003,1.75,0,0,.58334],123:[1.25003,1.75,0,0,.80556],125:[1.25003,1.75,0,0,.80556],160:[0,0,0,0,.25],710:[0,.825,0,0,1.8889],732:[0,.825,0,0,1.8889],770:[0,.825,0,0,1.8889],771:[0,.825,0,0,1.8889],8730:[1.25003,1.75,0,0,1],8968:[1.25003,1.75,0,0,.63889],8969:[1.25003,1.75,0,0,.63889],8970:[1.25003,1.75,0,0,.63889],8971:[1.25003,1.75,0,0,.63889],9115:[.64502,1.155,0,0,.875],9116:[1e-5,.6,0,0,.875],9117:[.64502,1.155,0,0,.875],9118:[.64502,1.155,0,0,.875],9119:[1e-5,.6,0,0,.875],9120:[.64502,1.155,0,0,.875],9121:[.64502,1.155,0,0,.66667],9122:[-99e-5,.601,0,0,.66667],9123:[.64502,1.155,0,0,.66667],9124:[.64502,1.155,0,0,.66667],9125:[-99e-5,.601,0,0,.66667],9126:[.64502,1.155,0,0,.66667],9127:[1e-5,.9,0,0,.88889],9128:[.65002,1.15,0,0,.88889],9129:[.90001,0,0,0,.88889],9130:[0,.3,0,0,.88889],9131:[1e-5,.9,0,0,.88889],9132:[.65002,1.15,0,0,.88889],9133:[.90001,0,0,0,.88889],9143:[.88502,.915,0,0,1.05556],10216:[1.25003,1.75,0,0,.80556],10217:[1.25003,1.75,0,0,.80556],57344:[-.00499,.605,0,0,1.05556],57345:[-.00499,.605,0,0,1.05556],57680:[0,.12,0,0,.45],57681:[0,.12,0,0,.45],57682:[0,.12,0,0,.45],57683:[0,.12,0,0,.45]},"Typewriter-Regular":{32:[0,0,0,0,.525],33:[0,.61111,0,0,.525],34:[0,.61111,0,0,.525],35:[0,.61111,0,0,.525],36:[.08333,.69444,0,0,.525],37:[.08333,.69444,0,0,.525],38:[0,.61111,0,0,.525],39:[0,.61111,0,0,.525],40:[.08333,.69444,0,0,.525],41:[.08333,.69444,0,0,.525],42:[0,.52083,0,0,.525],43:[-.08056,.53055,0,0,.525],44:[.13889,.125,0,0,.525],45:[-.08056,.53055,0,0,.525],46:[0,.125,0,0,.525],47:[.08333,.69444,0,0,.525],48:[0,.61111,0,0,.525],49:[0,.61111,0,0,.525],50:[0,.61111,0,0,.525],51:[0,.61111,0,0,.525],52:[0,.61111,0,0,.525],53:[0,.61111,0,0,.525],54:[0,.61111,0,0,.525],55:[0,.61111,0,0,.525],56:[0,.61111,0,0,.525],57:[0,.61111,0,0,.525],58:[0,.43056,0,0,.525],59:[.13889,.43056,0,0,.525],60:[-.05556,.55556,0,0,.525],61:[-.19549,.41562,0,0,.525],62:[-.05556,.55556,0,0,.525],63:[0,.61111,0,0,.525],64:[0,.61111,0,0,.525],65:[0,.61111,0,0,.525],66:[0,.61111,0,0,.525],67:[0,.61111,0,0,.525],68:[0,.61111,0,0,.525],69:[0,.61111,0,0,.525],70:[0,.61111,0,0,.525],71:[0,.61111,0,0,.525],72:[0,.61111,0,0,.525],73:[0,.61111,0,0,.525],74:[0,.61111,0,0,.525],75:[0,.61111,0,0,.525],76:[0,.61111,0,0,.525],77:[0,.61111,0,0,.525],78:[0,.61111,0,0,.525],79:[0,.61111,0,0,.525],80:[0,.61111,0,0,.525],81:[.13889,.61111,0,0,.525],82:[0,.61111,0,0,.525],83:[0,.61111,0,0,.525],84:[0,.61111,0,0,.525],85:[0,.61111,0,0,.525],86:[0,.61111,0,0,.525],87:[0,.61111,0,0,.525],88:[0,.61111,0,0,.525],89:[0,.61111,0,0,.525],90:[0,.61111,0,0,.525],91:[.08333,.69444,0,0,.525],92:[.08333,.69444,0,0,.525],93:[.08333,.69444,0,0,.525],94:[0,.61111,0,0,.525],95:[.09514,0,0,0,.525],96:[0,.61111,0,0,.525],97:[0,.43056,0,0,.525],98:[0,.61111,0,0,.525],99:[0,.43056,0,0,.525],100:[0,.61111,0,0,.525],101:[0,.43056,0,0,.525],102:[0,.61111,0,0,.525],103:[.22222,.43056,0,0,.525],104:[0,.61111,0,0,.525],105:[0,.61111,0,0,.525],106:[.22222,.61111,0,0,.525],107:[0,.61111,0,0,.525],108:[0,.61111,0,0,.525],109:[0,.43056,0,0,.525],110:[0,.43056,0,0,.525],111:[0,.43056,0,0,.525],112:[.22222,.43056,0,0,.525],113:[.22222,.43056,0,0,.525],114:[0,.43056,0,0,.525],115:[0,.43056,0,0,.525],116:[0,.55358,0,0,.525],117:[0,.43056,0,0,.525],118:[0,.43056,0,0,.525],119:[0,.43056,0,0,.525],120:[0,.43056,0,0,.525],121:[.22222,.43056,0,0,.525],122:[0,.43056,0,0,.525],123:[.08333,.69444,0,0,.525],124:[.08333,.69444,0,0,.525],125:[.08333,.69444,0,0,.525],126:[0,.61111,0,0,.525],127:[0,.61111,0,0,.525],160:[0,0,0,0,.525],176:[0,.61111,0,0,.525],184:[.19445,0,0,0,.525],305:[0,.43056,0,0,.525],567:[.22222,.43056,0,0,.525],711:[0,.56597,0,0,.525],713:[0,.56555,0,0,.525],714:[0,.61111,0,0,.525],715:[0,.61111,0,0,.525],728:[0,.61111,0,0,.525],730:[0,.61111,0,0,.525],770:[0,.61111,0,0,.525],771:[0,.61111,0,0,.525],776:[0,.61111,0,0,.525],915:[0,.61111,0,0,.525],916:[0,.61111,0,0,.525],920:[0,.61111,0,0,.525],923:[0,.61111,0,0,.525],926:[0,.61111,0,0,.525],928:[0,.61111,0,0,.525],931:[0,.61111,0,0,.525],933:[0,.61111,0,0,.525],934:[0,.61111,0,0,.525],936:[0,.61111,0,0,.525],937:[0,.61111,0,0,.525],8216:[0,.61111,0,0,.525],8217:[0,.61111,0,0,.525],8242:[0,.61111,0,0,.525],9251:[.11111,.21944,0,0,.525]}},C4={slant:[.25,.25,.25],space:[0,0,0],stretch:[0,0,0],shrink:[0,0,0],xHeight:[.431,.431,.431],quad:[1,1.171,1.472],extraSpace:[0,0,0],num1:[.677,.732,.925],num2:[.394,.384,.387],num3:[.444,.471,.504],denom1:[.686,.752,1.025],denom2:[.345,.344,.532],sup1:[.413,.503,.504],sup2:[.363,.431,.404],sup3:[.289,.286,.294],sub1:[.15,.143,.2],sub2:[.247,.286,.4],supDrop:[.386,.353,.494],subDrop:[.05,.071,.1],delim1:[2.39,1.7,1.98],delim2:[1.01,1.157,1.42],axisHeight:[.25,.25,.25],defaultRuleThickness:[.04,.049,.049],bigOpSpacing1:[.111,.111,.111],bigOpSpacing2:[.166,.166,.166],bigOpSpacing3:[.2,.2,.2],bigOpSpacing4:[.6,.611,.611],bigOpSpacing5:[.1,.143,.143],sqrtRuleThickness:[.04,.04,.04],ptPerEm:[10,10,10],doubleRuleSep:[.2,.2,.2],arrayRuleWidth:[.04,.04,.04],fboxsep:[.3,.3,.3],fboxrule:[.04,.04,.04]},sX={\u00C5:"A",\u00D0:"D",\u00DE:"o",\u00E5:"a",\u00F0:"d",\u00FE:"o",\u0410:"A",\u0411:"B",\u0412:"B",\u0413:"F",\u0414:"A",\u0415:"E",\u0416:"K",\u0417:"3",\u0418:"N",\u0419:"N",\u041A:"K",\u041B:"N",\u041C:"M",\u041D:"H",\u041E:"O",\u041F:"N",\u0420:"P",\u0421:"C",\u0422:"T",\u0423:"y",\u0424:"O",\u0425:"X",\u0426:"U",\u0427:"h",\u0428:"W",\u0429:"W",\u042A:"B",\u042B:"X",\u042C:"B",\u042D:"3",\u042E:"X",\u042F:"R",\u0430:"a",\u0431:"b",\u0432:"a",\u0433:"r",\u0434:"y",\u0435:"e",\u0436:"m",\u0437:"e",\u0438:"n",\u0439:"n",\u043A:"n",\u043B:"n",\u043C:"m",\u043D:"n",\u043E:"o",\u043F:"n",\u0440:"p",\u0441:"c",\u0442:"o",\u0443:"y",\u0444:"b",\u0445:"x",\u0446:"n",\u0447:"n",\u0448:"w",\u0449:"w",\u044A:"a",\u044B:"m",\u044C:"a",\u044D:"e",\u044E:"m",\u044F:"r"};o(FX,"setFontMetrics");o(GD,"getCharacterMetrics");mD={};o(ODe,"getGlobalMetrics");PDe=[[1,1,1],[2,1,1],[3,1,1],[4,2,1],[5,2,1],[6,3,1],[7,4,2],[8,6,3],[9,7,6],[10,8,7],[11,10,9]],oX=[.5,.6,.7,.8,.9,1,1.2,1.44,1.728,2.074,2.488],lX=o(function(e,r){return r.size<2?e:PDe[e-1][r.size-1]},"sizeAtStyle"),P4=class t{static{o(this,"Options")}constructor(e){this.style=void 0,this.color=void 0,this.size=void 0,this.textSize=void 0,this.phantom=void 0,this.font=void 0,this.fontFamily=void 0,this.fontWeight=void 0,this.fontShape=void 0,this.sizeMultiplier=void 0,this.maxSize=void 0,this.minRuleThickness=void 0,this._fontMetrics=void 0,this.style=e.style,this.color=e.color,this.size=e.size||t.BASESIZE,this.textSize=e.textSize||this.size,this.phantom=!!e.phantom,this.font=e.font||"",this.fontFamily=e.fontFamily||"",this.fontWeight=e.fontWeight||"",this.fontShape=e.fontShape||"",this.sizeMultiplier=oX[this.size-1],this.maxSize=e.maxSize,this.minRuleThickness=e.minRuleThickness,this._fontMetrics=void 0}extend(e){var r={style:this.style,size:this.size,textSize:this.textSize,color:this.color,phantom:this.phantom,font:this.font,fontFamily:this.fontFamily,fontWeight:this.fontWeight,fontShape:this.fontShape,maxSize:this.maxSize,minRuleThickness:this.minRuleThickness};for(var i in e)e.hasOwnProperty(i)&&(r[i]=e[i]);return new t(r)}havingStyle(e){return this.style===e?this:this.extend({style:e,size:lX(this.textSize,e)})}havingCrampedStyle(){return this.havingStyle(this.style.cramp())}havingSize(e){return this.size===e&&this.textSize===e?this:this.extend({style:this.style.text(),size:e,textSize:e,sizeMultiplier:oX[e-1]})}havingBaseStyle(e){e=e||this.style.text();var r=lX(t.BASESIZE,e);return this.size===r&&this.textSize===t.BASESIZE&&this.style===e?this:this.extend({style:e,size:r})}havingBaseSizing(){var e;switch(this.style.id){case 4:case 5:e=3;break;case 6:case 7:e=1;break;default:e=6}return this.extend({style:this.style.text(),size:e})}withColor(e){return this.extend({color:e})}withPhantom(){return this.extend({phantom:!0})}withFont(e){return this.extend({font:e})}withTextFontFamily(e){return this.extend({fontFamily:e,font:""})}withTextFontWeight(e){return this.extend({fontWeight:e,font:""})}withTextFontShape(e){return this.extend({fontShape:e,font:""})}sizingClasses(e){return e.size!==this.size?["sizing","reset-size"+e.size,"size"+this.size]:[]}baseSizingClasses(){return this.size!==t.BASESIZE?["sizing","reset-size"+this.size,"size"+t.BASESIZE]:[]}fontMetrics(){return this._fontMetrics||(this._fontMetrics=ODe(this.size)),this._fontMetrics}getColor(){return this.phantom?"transparent":this.color}};P4.BASESIZE=6;DD={pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:803/800,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:803/800},BDe={ex:!0,em:!0,mu:!0},$X=o(function(e){return typeof e!="string"&&(e=e.unit),e in DD||e in BDe||e==="ex"},"validUnit"),wn=o(function(e,r){var i;if(e.unit in DD)i=DD[e.unit]/r.fontMetrics().ptPerEm/r.sizeMultiplier;else if(e.unit==="mu")i=r.fontMetrics().cssEmPerMu;else{var n;if(r.style.isTight()?n=r.havingStyle(r.style.text()):n=r,e.unit==="ex")i=n.fontMetrics().xHeight;else if(e.unit==="em")i=n.fontMetrics().quad;else throw new wt("Invalid unit: '"+e.unit+"'");n!==r&&(i*=n.sizeMultiplier/r.sizeMultiplier)}return Math.min(e.number*i,r.maxSize)},"calculateSize"),Rt=o(function(e){return+e.toFixed(4)+"em"},"makeEm"),Of=o(function(e){return e.filter(r=>r).join(" ")},"createClass"),zX=o(function(e,r,i){if(this.classes=e||[],this.attributes={},this.height=0,this.depth=0,this.maxFontSize=0,this.style=i||{},r){r.style.isTight()&&this.classes.push("mtight");var n=r.getColor();n&&(this.style.color=n)}},"initNode"),GX=o(function(e){var r=document.createElement(e);r.className=Of(this.classes);for(var i in this.style)this.style.hasOwnProperty(i)&&(r.style[i]=this.style[i]);for(var n in this.attributes)this.attributes.hasOwnProperty(n)&&r.setAttribute(n,this.attributes[n]);for(var a=0;a/=\x00-\x1f]/,VX=o(function(e){var r="<"+e;this.classes.length&&(r+=' class="'+ui.escape(Of(this.classes))+'"');var i="";for(var n in this.style)this.style.hasOwnProperty(n)&&(i+=ui.hyphenate(n)+":"+this.style[n]+";");i&&(r+=' style="'+ui.escape(i)+'"');for(var a in this.attributes)if(this.attributes.hasOwnProperty(a)){if(FDe.test(a))throw new wt("Invalid attribute name '"+a+"'");r+=" "+a+'="'+ui.escape(this.attributes[a])+'"'}r+=">";for(var s=0;s",r},"toMarkup"),Wp=class{static{o(this,"Span")}constructor(e,r,i,n){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.width=void 0,this.maxFontSize=void 0,this.style=void 0,zX.call(this,e,i,n),this.children=r||[]}setAttribute(e,r){this.attributes[e]=r}hasClass(e){return this.classes.includes(e)}toNode(){return GX.call(this,"span")}toMarkup(){return VX.call(this,"span")}},jx=class{static{o(this,"Anchor")}constructor(e,r,i,n){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,zX.call(this,r,n),this.children=i||[],this.setAttribute("href",e)}setAttribute(e,r){this.attributes[e]=r}hasClass(e){return this.classes.includes(e)}toNode(){return GX.call(this,"a")}toMarkup(){return VX.call(this,"a")}},LD=class{static{o(this,"Img")}constructor(e,r,i){this.src=void 0,this.alt=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.alt=r,this.src=e,this.classes=["mord"],this.style=i}hasClass(e){return this.classes.includes(e)}toNode(){var e=document.createElement("img");e.src=this.src,e.alt=this.alt,e.className="mord";for(var r in this.style)this.style.hasOwnProperty(r)&&(e.style[r]=this.style[r]);return e}toMarkup(){var e=''+ui.escape(this.alt)+'0&&(r=document.createElement("span"),r.style.marginRight=Rt(this.italic)),this.classes.length>0&&(r=r||document.createElement("span"),r.className=Of(this.classes));for(var i in this.style)this.style.hasOwnProperty(i)&&(r=r||document.createElement("span"),r.style[i]=this.style[i]);return r?(r.appendChild(e),r):e}toMarkup(){var e=!1,r="0&&(i+="margin-right:"+this.italic+"em;");for(var n in this.style)this.style.hasOwnProperty(n)&&(i+=ui.hyphenate(n)+":"+this.style[n]+";");i&&(e=!0,r+=' style="'+ui.escape(i)+'"');var a=ui.escape(this.text);return e?(r+=">",r+=a,r+="",r):a}},uc=class{static{o(this,"SvgNode")}constructor(e,r){this.children=void 0,this.attributes=void 0,this.children=e||[],this.attributes=r||{}}toNode(){var e="http://www.w3.org/2000/svg",r=document.createElementNS(e,"svg");for(var i in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,i)&&r.setAttribute(i,this.attributes[i]);for(var n=0;n':''}},Xx=class{static{o(this,"LineNode")}constructor(e){this.attributes=void 0,this.attributes=e||{}}toNode(){var e="http://www.w3.org/2000/svg",r=document.createElementNS(e,"line");for(var i in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,i)&&r.setAttribute(i,this.attributes[i]);return r}toMarkup(){var e="","\\gt",!0);q(j,ne,Le,"\u2208","\\in",!0);q(j,ne,Le,"\uE020","\\@not");q(j,ne,Le,"\u2282","\\subset",!0);q(j,ne,Le,"\u2283","\\supset",!0);q(j,ne,Le,"\u2286","\\subseteq",!0);q(j,ne,Le,"\u2287","\\supseteq",!0);q(j,_e,Le,"\u2288","\\nsubseteq",!0);q(j,_e,Le,"\u2289","\\nsupseteq",!0);q(j,ne,Le,"\u22A8","\\models");q(j,ne,Le,"\u2190","\\leftarrow",!0);q(j,ne,Le,"\u2264","\\le");q(j,ne,Le,"\u2264","\\leq",!0);q(j,ne,Le,"<","\\lt",!0);q(j,ne,Le,"\u2192","\\rightarrow",!0);q(j,ne,Le,"\u2192","\\to");q(j,_e,Le,"\u2271","\\ngeq",!0);q(j,_e,Le,"\u2270","\\nleq",!0);q(j,ne,Ch,"\xA0","\\ ");q(j,ne,Ch,"\xA0","\\space");q(j,ne,Ch,"\xA0","\\nobreakspace");q(gt,ne,Ch,"\xA0","\\ ");q(gt,ne,Ch,"\xA0"," ");q(gt,ne,Ch,"\xA0","\\space");q(gt,ne,Ch,"\xA0","\\nobreakspace");q(j,ne,Ch,null,"\\nobreak");q(j,ne,Ch,null,"\\allowbreak");q(j,ne,q4,",",",");q(j,ne,q4,";",";");q(j,_e,$t,"\u22BC","\\barwedge",!0);q(j,_e,$t,"\u22BB","\\veebar",!0);q(j,ne,$t,"\u2299","\\odot",!0);q(j,ne,$t,"\u2295","\\oplus",!0);q(j,ne,$t,"\u2297","\\otimes",!0);q(j,ne,ze,"\u2202","\\partial",!0);q(j,ne,$t,"\u2298","\\oslash",!0);q(j,_e,$t,"\u229A","\\circledcirc",!0);q(j,_e,$t,"\u22A1","\\boxdot",!0);q(j,ne,$t,"\u25B3","\\bigtriangleup");q(j,ne,$t,"\u25BD","\\bigtriangledown");q(j,ne,$t,"\u2020","\\dagger");q(j,ne,$t,"\u22C4","\\diamond");q(j,ne,$t,"\u22C6","\\star");q(j,ne,$t,"\u25C3","\\triangleleft");q(j,ne,$t,"\u25B9","\\triangleright");q(j,ne,Yo,"{","\\{");q(gt,ne,ze,"{","\\{");q(gt,ne,ze,"{","\\textbraceleft");q(j,ne,Ps,"}","\\}");q(gt,ne,ze,"}","\\}");q(gt,ne,ze,"}","\\textbraceright");q(j,ne,Yo,"{","\\lbrace");q(j,ne,Ps,"}","\\rbrace");q(j,ne,Yo,"[","\\lbrack",!0);q(gt,ne,ze,"[","\\lbrack",!0);q(j,ne,Ps,"]","\\rbrack",!0);q(gt,ne,ze,"]","\\rbrack",!0);q(j,ne,Yo,"(","\\lparen",!0);q(j,ne,Ps,")","\\rparen",!0);q(gt,ne,ze,"<","\\textless",!0);q(gt,ne,ze,">","\\textgreater",!0);q(j,ne,Yo,"\u230A","\\lfloor",!0);q(j,ne,Ps,"\u230B","\\rfloor",!0);q(j,ne,Yo,"\u2308","\\lceil",!0);q(j,ne,Ps,"\u2309","\\rceil",!0);q(j,ne,ze,"\\","\\backslash");q(j,ne,ze,"\u2223","|");q(j,ne,ze,"\u2223","\\vert");q(gt,ne,ze,"|","\\textbar",!0);q(j,ne,ze,"\u2225","\\|");q(j,ne,ze,"\u2225","\\Vert");q(gt,ne,ze,"\u2225","\\textbardbl");q(gt,ne,ze,"~","\\textasciitilde");q(gt,ne,ze,"\\","\\textbackslash");q(gt,ne,ze,"^","\\textasciicircum");q(j,ne,Le,"\u2191","\\uparrow",!0);q(j,ne,Le,"\u21D1","\\Uparrow",!0);q(j,ne,Le,"\u2193","\\downarrow",!0);q(j,ne,Le,"\u21D3","\\Downarrow",!0);q(j,ne,Le,"\u2195","\\updownarrow",!0);q(j,ne,Le,"\u21D5","\\Updownarrow",!0);q(j,ne,Kn,"\u2210","\\coprod");q(j,ne,Kn,"\u22C1","\\bigvee");q(j,ne,Kn,"\u22C0","\\bigwedge");q(j,ne,Kn,"\u2A04","\\biguplus");q(j,ne,Kn,"\u22C2","\\bigcap");q(j,ne,Kn,"\u22C3","\\bigcup");q(j,ne,Kn,"\u222B","\\int");q(j,ne,Kn,"\u222B","\\intop");q(j,ne,Kn,"\u222C","\\iint");q(j,ne,Kn,"\u222D","\\iiint");q(j,ne,Kn,"\u220F","\\prod");q(j,ne,Kn,"\u2211","\\sum");q(j,ne,Kn,"\u2A02","\\bigotimes");q(j,ne,Kn,"\u2A01","\\bigoplus");q(j,ne,Kn,"\u2A00","\\bigodot");q(j,ne,Kn,"\u222E","\\oint");q(j,ne,Kn,"\u222F","\\oiint");q(j,ne,Kn,"\u2230","\\oiiint");q(j,ne,Kn,"\u2A06","\\bigsqcup");q(j,ne,Kn,"\u222B","\\smallint");q(gt,ne,Dg,"\u2026","\\textellipsis");q(j,ne,Dg,"\u2026","\\mathellipsis");q(gt,ne,Dg,"\u2026","\\ldots",!0);q(j,ne,Dg,"\u2026","\\ldots",!0);q(j,ne,Dg,"\u22EF","\\@cdots",!0);q(j,ne,Dg,"\u22F1","\\ddots",!0);q(j,ne,ze,"\u22EE","\\varvdots");q(gt,ne,ze,"\u22EE","\\varvdots");q(j,ne,hn,"\u02CA","\\acute");q(j,ne,hn,"\u02CB","\\grave");q(j,ne,hn,"\xA8","\\ddot");q(j,ne,hn,"~","\\tilde");q(j,ne,hn,"\u02C9","\\bar");q(j,ne,hn,"\u02D8","\\breve");q(j,ne,hn,"\u02C7","\\check");q(j,ne,hn,"^","\\hat");q(j,ne,hn,"\u20D7","\\vec");q(j,ne,hn,"\u02D9","\\dot");q(j,ne,hn,"\u02DA","\\mathring");q(j,ne,mr,"\uE131","\\@imath");q(j,ne,mr,"\uE237","\\@jmath");q(j,ne,ze,"\u0131","\u0131");q(j,ne,ze,"\u0237","\u0237");q(gt,ne,ze,"\u0131","\\i",!0);q(gt,ne,ze,"\u0237","\\j",!0);q(gt,ne,ze,"\xDF","\\ss",!0);q(gt,ne,ze,"\xE6","\\ae",!0);q(gt,ne,ze,"\u0153","\\oe",!0);q(gt,ne,ze,"\xF8","\\o",!0);q(gt,ne,ze,"\xC6","\\AE",!0);q(gt,ne,ze,"\u0152","\\OE",!0);q(gt,ne,ze,"\xD8","\\O",!0);q(gt,ne,hn,"\u02CA","\\'");q(gt,ne,hn,"\u02CB","\\`");q(gt,ne,hn,"\u02C6","\\^");q(gt,ne,hn,"\u02DC","\\~");q(gt,ne,hn,"\u02C9","\\=");q(gt,ne,hn,"\u02D8","\\u");q(gt,ne,hn,"\u02D9","\\.");q(gt,ne,hn,"\xB8","\\c");q(gt,ne,hn,"\u02DA","\\r");q(gt,ne,hn,"\u02C7","\\v");q(gt,ne,hn,"\xA8",'\\"');q(gt,ne,hn,"\u02DD","\\H");q(gt,ne,hn,"\u25EF","\\textcircled");qX={"--":!0,"---":!0,"``":!0,"''":!0};q(gt,ne,ze,"\u2013","--",!0);q(gt,ne,ze,"\u2013","\\textendash");q(gt,ne,ze,"\u2014","---",!0);q(gt,ne,ze,"\u2014","\\textemdash");q(gt,ne,ze,"\u2018","`",!0);q(gt,ne,ze,"\u2018","\\textquoteleft");q(gt,ne,ze,"\u2019","'",!0);q(gt,ne,ze,"\u2019","\\textquoteright");q(gt,ne,ze,"\u201C","``",!0);q(gt,ne,ze,"\u201C","\\textquotedblleft");q(gt,ne,ze,"\u201D","''",!0);q(gt,ne,ze,"\u201D","\\textquotedblright");q(j,ne,ze,"\xB0","\\degree",!0);q(gt,ne,ze,"\xB0","\\degree");q(gt,ne,ze,"\xB0","\\textdegree",!0);q(j,ne,ze,"\xA3","\\pounds");q(j,ne,ze,"\xA3","\\mathsterling",!0);q(gt,ne,ze,"\xA3","\\pounds");q(gt,ne,ze,"\xA3","\\textsterling",!0);q(j,_e,ze,"\u2720","\\maltese");q(gt,_e,ze,"\u2720","\\maltese");uX='0123456789/@."';for(w4=0;w40)return cc(a,h,n,r,s.concat(f));if(u){var d,p;if(u==="boldsymbol"){var m=UDe(a,n,r,s,i);d=m.fontName,p=[m.fontClass]}else l?(d=HX[u].fontName,p=[u]):(d=D4(u,r.fontWeight,r.fontShape),p=[u,r.fontWeight,r.fontShape]);if(W4(a,d,n).metrics)return cc(a,d,n,r,s.concat(p));if(qX.hasOwnProperty(a)&&d.slice(0,10)==="Typewriter"){for(var g=[],y=0;y{if(Of(t.classes)!==Of(e.classes)||t.skew!==e.skew||t.maxFontSize!==e.maxFontSize)return!1;if(t.classes.length===1){var r=t.classes[0];if(r==="mbin"||r==="mord")return!1}for(var i in t.style)if(t.style.hasOwnProperty(i)&&t.style[i]!==e.style[i])return!1;for(var n in e.style)if(e.style.hasOwnProperty(n)&&t.style[n]!==e.style[n])return!1;return!0},"canCombine"),jDe=o(t=>{for(var e=0;er&&(r=s.height),s.depth>i&&(i=s.depth),s.maxFontSize>n&&(n=s.maxFontSize)}e.height=r,e.depth=i,e.maxFontSize=n},"sizeElementFromChildren"),lo=o(function(e,r,i,n){var a=new Wp(e,r,i,n);return VD(a),a},"makeSpan"),WX=o((t,e,r,i)=>new Wp(t,e,r,i),"makeSvgSpan"),XDe=o(function(e,r,i){var n=lo([e],[],r);return n.height=Math.max(i||r.fontMetrics().defaultRuleThickness,r.minRuleThickness),n.style.borderBottomWidth=Rt(n.height),n.maxFontSize=1,n},"makeLineSpan"),KDe=o(function(e,r,i,n){var a=new jx(e,r,i,n);return VD(a),a},"makeAnchor"),UX=o(function(e){var r=new qp(e);return VD(r),r},"makeFragment"),QDe=o(function(e,r){return e instanceof qp?lo([],[e],r):e},"wrapFragment"),ZDe=o(function(e){if(e.positionType==="individualShift"){for(var r=e.children,i=[r[0]],n=-r[0].shift-r[0].elem.depth,a=n,s=1;s{var r=lo(["mspace"],[],e),i=wn(t,e);return r.style.marginRight=Rt(i),r},"makeGlue"),D4=o(function(e,r,i){var n="";switch(e){case"amsrm":n="AMS";break;case"textrm":n="Main";break;case"textsf":n="SansSerif";break;case"texttt":n="Typewriter";break;default:n=e}var a;return r==="textbf"&&i==="textit"?a="BoldItalic":r==="textbf"?a="Bold":r==="textit"?a="Italic":a="Regular",n+"-"+a},"retrieveTextFontName"),HX={mathbf:{variant:"bold",fontName:"Main-Bold"},mathrm:{variant:"normal",fontName:"Main-Regular"},textit:{variant:"italic",fontName:"Main-Italic"},mathit:{variant:"italic",fontName:"Main-Italic"},mathnormal:{variant:"italic",fontName:"Math-Italic"},mathsfit:{variant:"sans-serif-italic",fontName:"SansSerif-Italic"},mathbb:{variant:"double-struck",fontName:"AMS-Regular"},mathcal:{variant:"script",fontName:"Caligraphic-Regular"},mathfrak:{variant:"fraktur",fontName:"Fraktur-Regular"},mathscr:{variant:"script",fontName:"Script-Regular"},mathsf:{variant:"sans-serif",fontName:"SansSerif-Regular"},mathtt:{variant:"monospace",fontName:"Typewriter-Regular"}},YX={vec:["vec",.471,.714],oiintSize1:["oiintSize1",.957,.499],oiintSize2:["oiintSize2",1.472,.659],oiiintSize1:["oiiintSize1",1.304,.499],oiiintSize2:["oiiintSize2",1.98,.659]},tLe=o(function(e,r){var[i,n,a]=YX[e],s=new iu(i),l=new uc([s],{width:Rt(n),height:Rt(a),style:"width:"+Rt(n),viewBox:"0 0 "+1e3*n+" "+1e3*a,preserveAspectRatio:"xMinYMin"}),u=WX(["overlay"],[l],r);return u.height=a,u.style.height=Rt(a),u.style.width=Rt(n),u},"staticSvg"),je={fontMap:HX,makeSymbol:cc,mathsym:WDe,makeSpan:lo,makeSvgSpan:WX,makeLineSpan:XDe,makeAnchor:KDe,makeFragment:UX,wrapFragment:QDe,makeVList:JDe,makeOrd:HDe,makeGlue:eLe,staticSvg:tLe,svgData:YX,tryCombineChars:jDe},Cn={number:3,unit:"mu"},Vp={number:4,unit:"mu"},vh={number:5,unit:"mu"},rLe={mord:{mop:Cn,mbin:Vp,mrel:vh,minner:Cn},mop:{mord:Cn,mop:Cn,mrel:vh,minner:Cn},mbin:{mord:Vp,mop:Vp,mopen:Vp,minner:Vp},mrel:{mord:vh,mop:vh,mopen:vh,minner:vh},mopen:{},mclose:{mop:Cn,mbin:Vp,mrel:vh,minner:Cn},mpunct:{mord:Cn,mop:Cn,mrel:vh,mopen:Cn,mclose:Cn,mpunct:Cn,minner:Cn},minner:{mord:Cn,mop:Cn,mbin:Vp,mrel:vh,mopen:Cn,mpunct:Cn,minner:Cn}},iLe={mord:{mop:Cn},mop:{mord:Cn,mop:Cn},mbin:{},mrel:{},mopen:{},mclose:{mop:Cn},mpunct:{},minner:{mop:Cn}},jX={},F4={},$4={};o(Bt,"defineFunction");o(Up,"defineFunctionBuilders");z4=o(function(e){return e.type==="ordgroup"&&e.body.length===1?e.body[0]:e},"normalizeArgument"),$n=o(function(e){return e.type==="ordgroup"?e.body:[e]},"ordargument"),Th=je.makeSpan,nLe=["leftmost","mbin","mopen","mrel","mop","mpunct"],aLe=["rightmost","mrel","mclose","mpunct"],sLe={display:gr.DISPLAY,text:gr.TEXT,script:gr.SCRIPT,scriptscript:gr.SCRIPTSCRIPT},oLe={mord:"mord",mop:"mop",mbin:"mbin",mrel:"mrel",mopen:"mopen",mclose:"mclose",mpunct:"mpunct",minner:"minner"},ca=o(function(e,r,i,n){n===void 0&&(n=[null,null]);for(var a=[],s=0;s{var v=y.classes[0],x=g.classes[0];v==="mbin"&&aLe.includes(x)?y.classes[0]="mord":x==="mbin"&&nLe.includes(v)&&(g.classes[0]="mord")},{node:d},p,m),dX(a,(g,y)=>{var v=ND(y),x=ND(g),b=v&&x?g.hasClass("mtight")?iLe[v][x]:rLe[v][x]:null;if(b)return je.makeGlue(b,h)},{node:d},p,m),a},"buildExpression"),dX=o(function t(e,r,i,n,a){n&&e.push(n);for(var s=0;sp=>{e.splice(d+1,0,p),s++})(s)}n&&e.pop()},"traverseNonSpaceNodes"),XX=o(function(e){return e instanceof qp||e instanceof jx||e instanceof Wp&&e.hasClass("enclosing")?e:null},"checkPartialGroup"),lLe=o(function t(e,r){var i=XX(e);if(i){var n=i.children;if(n.length){if(r==="right")return t(n[n.length-1],"right");if(r==="left")return t(n[0],"left")}}return e},"getOutermostNode"),ND=o(function(e,r){return e?(r&&(e=lLe(e,r)),oLe[e.classes[0]]||null):null},"getTypeOfDomTree"),Kx=o(function(e,r){var i=["nulldelimiter"].concat(e.baseSizingClasses());return Th(r.concat(i))},"makeNullDelimiter"),ii=o(function(e,r,i){if(!e)return Th();if(F4[e.type]){var n=F4[e.type](e,r);if(i&&r.size!==i.size){n=Th(r.sizingClasses(i),[n],r);var a=r.sizeMultiplier/i.sizeMultiplier;n.height*=a,n.depth*=a}return n}else throw new wt("Got group of unknown type: '"+e.type+"'")},"buildGroup");o(L4,"buildHTMLUnbreakable");o(ID,"buildHTML");o(KX,"newDocumentFragment");Ms=class{static{o(this,"MathNode")}constructor(e,r,i){this.type=void 0,this.attributes=void 0,this.children=void 0,this.classes=void 0,this.type=e,this.attributes={},this.children=r||[],this.classes=i||[]}setAttribute(e,r){this.attributes[e]=r}getAttribute(e){return this.attributes[e]}toNode(){var e=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(var r in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,r)&&e.setAttribute(r,this.attributes[r]);this.classes.length>0&&(e.className=Of(this.classes));for(var i=0;i0&&(e+=' class ="'+ui.escape(Of(this.classes))+'"'),e+=">";for(var i=0;i",e}toText(){return this.children.map(e=>e.toText()).join("")}},Cl=class{static{o(this,"TextNode")}constructor(e){this.text=void 0,this.text=e}toNode(){return document.createTextNode(this.text)}toMarkup(){return ui.escape(this.toText())}toText(){return this.text}},MD=class{static{o(this,"SpaceNode")}constructor(e){this.width=void 0,this.character=void 0,this.width=e,e>=.05555&&e<=.05556?this.character="\u200A":e>=.1666&&e<=.1667?this.character="\u2009":e>=.2222&&e<=.2223?this.character="\u2005":e>=.2777&&e<=.2778?this.character="\u2005\u200A":e>=-.05556&&e<=-.05555?this.character="\u200A\u2063":e>=-.1667&&e<=-.1666?this.character="\u2009\u2063":e>=-.2223&&e<=-.2222?this.character="\u205F\u2063":e>=-.2778&&e<=-.2777?this.character="\u2005\u2063":this.character=null}toNode(){if(this.character)return document.createTextNode(this.character);var e=document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace");return e.setAttribute("width",Rt(this.width)),e}toMarkup(){return this.character?""+this.character+"":''}toText(){return this.character?this.character:" "}},Ct={MathNode:Ms,TextNode:Cl,SpaceNode:MD,newDocumentFragment:KX},wl=o(function(e,r,i){return ji[r][e]&&ji[r][e].replace&&e.charCodeAt(0)!==55349&&!(qX.hasOwnProperty(e)&&i&&(i.fontFamily&&i.fontFamily.slice(4,6)==="tt"||i.font&&i.font.slice(4,6)==="tt"))&&(e=ji[r][e].replace),new Ct.TextNode(e)},"makeText"),qD=o(function(e){return e.length===1?e[0]:new Ct.MathNode("mrow",e)},"makeRow"),WD=o(function(e,r){if(r.fontFamily==="texttt")return"monospace";if(r.fontFamily==="textsf")return r.fontShape==="textit"&&r.fontWeight==="textbf"?"sans-serif-bold-italic":r.fontShape==="textit"?"sans-serif-italic":r.fontWeight==="textbf"?"bold-sans-serif":"sans-serif";if(r.fontShape==="textit"&&r.fontWeight==="textbf")return"bold-italic";if(r.fontShape==="textit")return"italic";if(r.fontWeight==="textbf")return"bold";var i=r.font;if(!i||i==="mathnormal")return null;var n=e.mode;if(i==="mathit")return"italic";if(i==="boldsymbol")return e.type==="textord"?"bold":"bold-italic";if(i==="mathbf")return"bold";if(i==="mathbb")return"double-struck";if(i==="mathsfit")return"sans-serif-italic";if(i==="mathfrak")return"fraktur";if(i==="mathscr"||i==="mathcal")return"script";if(i==="mathsf")return"sans-serif";if(i==="mathtt")return"monospace";var a=e.text;if(["\\imath","\\jmath"].includes(a))return null;ji[n][a]&&ji[n][a].replace&&(a=ji[n][a].replace);var s=je.fontMap[i].fontName;return GD(a,s,n)?je.fontMap[i].variant:null},"getVariant");o(vD,"isNumberPunctuation");ho=o(function(e,r,i){if(e.length===1){var n=$i(e[0],r);return i&&n instanceof Ms&&n.type==="mo"&&(n.setAttribute("lspace","0em"),n.setAttribute("rspace","0em")),[n]}for(var a=[],s,l=0;l=1&&(s.type==="mn"||vD(s))){var h=u.children[0];h instanceof Ms&&h.type==="mn"&&(h.children=[...s.children,...h.children],a.pop())}else if(s.type==="mi"&&s.children.length===1){var f=s.children[0];if(f instanceof Cl&&f.text==="\u0338"&&(u.type==="mo"||u.type==="mi"||u.type==="mn")){var d=u.children[0];d instanceof Cl&&d.text.length>0&&(d.text=d.text.slice(0,1)+"\u0338"+d.text.slice(1),a.pop())}}}a.push(u),s=u}return a},"buildExpression"),Pf=o(function(e,r,i){return qD(ho(e,r,i))},"buildExpressionRow"),$i=o(function(e,r){if(!e)return new Ct.MathNode("mrow");if($4[e.type]){var i=$4[e.type](e,r);return i}else throw new wt("Got group of unknown type: '"+e.type+"'")},"buildGroup");o(pX,"buildMathML");QX=o(function(e){return new P4({style:e.displayMode?gr.DISPLAY:gr.TEXT,maxSize:e.maxSize,minRuleThickness:e.minRuleThickness})},"optionsFromSettings"),ZX=o(function(e,r){if(r.displayMode){var i=["katex-display"];r.leqno&&i.push("leqno"),r.fleqn&&i.push("fleqn"),e=je.makeSpan(i,[e])}return e},"displayWrap"),cLe=o(function(e,r,i){var n=QX(i),a;if(i.output==="mathml")return pX(e,r,n,i.displayMode,!0);if(i.output==="html"){var s=ID(e,n);a=je.makeSpan(["katex"],[s])}else{var l=pX(e,r,n,i.displayMode,!1),u=ID(e,n);a=je.makeSpan(["katex"],[l,u])}return ZX(a,i)},"buildTree"),uLe=o(function(e,r,i){var n=QX(i),a=ID(e,n),s=je.makeSpan(["katex"],[a]);return ZX(s,i)},"buildHTMLTree"),hLe={widehat:"^",widecheck:"\u02C7",widetilde:"~",utilde:"~",overleftarrow:"\u2190",underleftarrow:"\u2190",xleftarrow:"\u2190",overrightarrow:"\u2192",underrightarrow:"\u2192",xrightarrow:"\u2192",underbrace:"\u23DF",overbrace:"\u23DE",overgroup:"\u23E0",undergroup:"\u23E1",overleftrightarrow:"\u2194",underleftrightarrow:"\u2194",xleftrightarrow:"\u2194",Overrightarrow:"\u21D2",xRightarrow:"\u21D2",overleftharpoon:"\u21BC",xleftharpoonup:"\u21BC",overrightharpoon:"\u21C0",xrightharpoonup:"\u21C0",xLeftarrow:"\u21D0",xLeftrightarrow:"\u21D4",xhookleftarrow:"\u21A9",xhookrightarrow:"\u21AA",xmapsto:"\u21A6",xrightharpoondown:"\u21C1",xleftharpoondown:"\u21BD",xrightleftharpoons:"\u21CC",xleftrightharpoons:"\u21CB",xtwoheadleftarrow:"\u219E",xtwoheadrightarrow:"\u21A0",xlongequal:"=",xtofrom:"\u21C4",xrightleftarrows:"\u21C4",xrightequilibrium:"\u21CC",xleftequilibrium:"\u21CB","\\cdrightarrow":"\u2192","\\cdleftarrow":"\u2190","\\cdlongequal":"="},fLe=o(function(e){var r=new Ct.MathNode("mo",[new Ct.TextNode(hLe[e.replace(/^\\/,"")])]);return r.setAttribute("stretchy","true"),r},"mathMLnode"),dLe={overrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],overleftarrow:[["leftarrow"],.888,522,"xMinYMin"],underrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],underleftarrow:[["leftarrow"],.888,522,"xMinYMin"],xrightarrow:[["rightarrow"],1.469,522,"xMaxYMin"],"\\cdrightarrow":[["rightarrow"],3,522,"xMaxYMin"],xleftarrow:[["leftarrow"],1.469,522,"xMinYMin"],"\\cdleftarrow":[["leftarrow"],3,522,"xMinYMin"],Overrightarrow:[["doublerightarrow"],.888,560,"xMaxYMin"],xRightarrow:[["doublerightarrow"],1.526,560,"xMaxYMin"],xLeftarrow:[["doubleleftarrow"],1.526,560,"xMinYMin"],overleftharpoon:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoonup:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoondown:[["leftharpoondown"],.888,522,"xMinYMin"],overrightharpoon:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoonup:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoondown:[["rightharpoondown"],.888,522,"xMaxYMin"],xlongequal:[["longequal"],.888,334,"xMinYMin"],"\\cdlongequal":[["longequal"],3,334,"xMinYMin"],xtwoheadleftarrow:[["twoheadleftarrow"],.888,334,"xMinYMin"],xtwoheadrightarrow:[["twoheadrightarrow"],.888,334,"xMaxYMin"],overleftrightarrow:[["leftarrow","rightarrow"],.888,522],overbrace:[["leftbrace","midbrace","rightbrace"],1.6,548],underbrace:[["leftbraceunder","midbraceunder","rightbraceunder"],1.6,548],underleftrightarrow:[["leftarrow","rightarrow"],.888,522],xleftrightarrow:[["leftarrow","rightarrow"],1.75,522],xLeftrightarrow:[["doubleleftarrow","doublerightarrow"],1.75,560],xrightleftharpoons:[["leftharpoondownplus","rightharpoonplus"],1.75,716],xleftrightharpoons:[["leftharpoonplus","rightharpoondownplus"],1.75,716],xhookleftarrow:[["leftarrow","righthook"],1.08,522],xhookrightarrow:[["lefthook","rightarrow"],1.08,522],overlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],underlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],overgroup:[["leftgroup","rightgroup"],.888,342],undergroup:[["leftgroupunder","rightgroupunder"],.888,342],xmapsto:[["leftmapsto","rightarrow"],1.5,522],xtofrom:[["leftToFrom","rightToFrom"],1.75,528],xrightleftarrows:[["baraboveleftarrow","rightarrowabovebar"],1.75,901],xrightequilibrium:[["baraboveshortleftharpoon","rightharpoonaboveshortbar"],1.75,716],xleftequilibrium:[["shortbaraboveleftharpoon","shortrightharpoonabovebar"],1.75,716]},pLe=o(function(e){return e.type==="ordgroup"?e.body.length:1},"groupLength"),mLe=o(function(e,r){function i(){var l=4e5,u=e.label.slice(1);if(["widehat","widecheck","widetilde","utilde"].includes(u)){var h=e,f=pLe(h.base),d,p,m;if(f>5)u==="widehat"||u==="widecheck"?(d=420,l=2364,m=.42,p=u+"4"):(d=312,l=2340,m=.34,p="tilde4");else{var g=[1,1,2,2,3,3][f];u==="widehat"||u==="widecheck"?(l=[0,1062,2364,2364,2364][g],d=[0,239,300,360,420][g],m=[0,.24,.3,.3,.36,.42][g],p=u+g):(l=[0,600,1033,2339,2340][g],d=[0,260,286,306,312][g],m=[0,.26,.286,.3,.306,.34][g],p="tilde"+g)}var y=new iu(p),v=new uc([y],{width:"100%",height:Rt(m),viewBox:"0 0 "+l+" "+d,preserveAspectRatio:"none"});return{span:je.makeSvgSpan([],[v],r),minWidth:0,height:m}}else{var x=[],b=dLe[u],[T,w,k]=b,C=k/1e3,E=T.length,S,L;if(E===1){var M=b[3];S=["hide-tail"],L=[M]}else if(E===2)S=["halfarrow-left","halfarrow-right"],L=["xMinYMin","xMaxYMin"];else if(E===3)S=["brace-left","brace-center","brace-right"],L=["xMinYMin","xMidYMin","xMaxYMin"];else throw new Error(`Correct katexImagesData or update code here to support + `+E+" children.");for(var I=0;I0&&(n.style.minWidth=Rt(a)),n},"svgSpan"),gLe=o(function(e,r,i,n,a){var s,l=e.height+e.depth+i+n;if(/fbox|color|angl/.test(r)){if(s=je.makeSpan(["stretchy",r],[],a),r==="fbox"){var u=a.color&&a.getColor();u&&(s.style.borderColor=u)}}else{var h=[];/^[bx]cancel$/.test(r)&&h.push(new Xx({x1:"0",y1:"0",x2:"100%",y2:"100%","stroke-width":"0.046em"})),/^x?cancel$/.test(r)&&h.push(new Xx({x1:"0",y1:"100%",x2:"100%",y2:"0","stroke-width":"0.046em"}));var f=new uc(h,{width:"100%",height:Rt(l)});s=je.makeSvgSpan([],[f],a)}return s.height=l,s.style.height=Rt(l),s},"encloseSpan"),kh={encloseSpan:gLe,mathMLnode:fLe,svgSpan:mLe};o(Gr,"assertNodeType");o(UD,"assertSymbolNodeType");o(U4,"checkSymbolNodeType");HD=o((t,e)=>{var r,i,n;t&&t.type==="supsub"?(i=Gr(t.base,"accent"),r=i.base,t.base=r,n=zDe(ii(t,e)),t.base=i):(i=Gr(t,"accent"),r=i.base);var a=ii(r,e.havingCrampedStyle()),s=i.isShifty&&ui.isCharacterBox(r),l=0;if(s){var u=ui.getBaseElem(r),h=ii(u,e.havingCrampedStyle());l=cX(h).skew}var f=i.label==="\\c",d=f?a.height+a.depth:Math.min(a.height,e.fontMetrics().xHeight),p;if(i.isStretchy)p=kh.svgSpan(i,e),p=je.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:a},{type:"elem",elem:p,wrapperClasses:["svg-align"],wrapperStyle:l>0?{width:"calc(100% - "+Rt(2*l)+")",marginLeft:Rt(2*l)}:void 0}]},e);else{var m,g;i.label==="\\vec"?(m=je.staticSvg("vec",e),g=je.svgData.vec[1]):(m=je.makeOrd({mode:i.mode,text:i.label},e,"textord"),m=cX(m),m.italic=0,g=m.width,f&&(d+=m.depth)),p=je.makeSpan(["accent-body"],[m]);var y=i.label==="\\textcircled";y&&(p.classes.push("accent-full"),d=a.height);var v=l;y||(v-=g/2),p.style.left=Rt(v),i.label==="\\textcircled"&&(p.style.top=".2em"),p=je.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:a},{type:"kern",size:-d},{type:"elem",elem:p}]},e)}var x=je.makeSpan(["mord","accent"],[p],e);return n?(n.children[0]=x,n.height=Math.max(x.height,n.height),n.classes[0]="mord",n):x},"htmlBuilder$a"),JX=o((t,e)=>{var r=t.isStretchy?kh.mathMLnode(t.label):new Ct.MathNode("mo",[wl(t.label,t.mode)]),i=new Ct.MathNode("mover",[$i(t.base,e),r]);return i.setAttribute("accent","true"),i},"mathmlBuilder$9"),yLe=new RegExp(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"].map(t=>"\\"+t).join("|"));Bt({type:"accent",names:["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\widecheck","\\widehat","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overlinesegment","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:o((t,e)=>{var r=z4(e[0]),i=!yLe.test(t.funcName),n=!i||t.funcName==="\\widehat"||t.funcName==="\\widetilde"||t.funcName==="\\widecheck";return{type:"accent",mode:t.parser.mode,label:t.funcName,isStretchy:i,isShifty:n,base:r}},"handler"),htmlBuilder:HD,mathmlBuilder:JX});Bt({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\c","\\r","\\H","\\v","\\textcircled"],props:{numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["primitive"]},handler:o((t,e)=>{var r=e[0],i=t.parser.mode;return i==="math"&&(t.parser.settings.reportNonstrict("mathVsTextAccents","LaTeX's accent "+t.funcName+" works only in text mode"),i="text"),{type:"accent",mode:i,label:t.funcName,isStretchy:!1,isShifty:!0,base:r}},"handler"),htmlBuilder:HD,mathmlBuilder:JX});Bt({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\utilde"],props:{numArgs:1},handler:o((t,e)=>{var{parser:r,funcName:i}=t,n=e[0];return{type:"accentUnder",mode:r.mode,label:i,base:n}},"handler"),htmlBuilder:o((t,e)=>{var r=ii(t.base,e),i=kh.svgSpan(t,e),n=t.label==="\\utilde"?.12:0,a=je.makeVList({positionType:"top",positionData:r.height,children:[{type:"elem",elem:i,wrapperClasses:["svg-align"]},{type:"kern",size:n},{type:"elem",elem:r}]},e);return je.makeSpan(["mord","accentunder"],[a],e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=kh.mathMLnode(t.label),i=new Ct.MathNode("munder",[$i(t.base,e),r]);return i.setAttribute("accentunder","true"),i},"mathmlBuilder")});R4=o(t=>{var e=new Ct.MathNode("mpadded",t?[t]:[]);return e.setAttribute("width","+0.6em"),e.setAttribute("lspace","0.3em"),e},"paddedNode");Bt({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xrightleftharpoons","\\xleftrightharpoons","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\xtofrom","\\xrightleftarrows","\\xrightequilibrium","\\xleftequilibrium","\\\\cdrightarrow","\\\\cdleftarrow","\\\\cdlongequal"],props:{numArgs:1,numOptionalArgs:1},handler(t,e,r){var{parser:i,funcName:n}=t;return{type:"xArrow",mode:i.mode,label:n,body:e[0],below:r[0]}},htmlBuilder(t,e){var r=e.style,i=e.havingStyle(r.sup()),n=je.wrapFragment(ii(t.body,i,e),e),a=t.label.slice(0,2)==="\\x"?"x":"cd";n.classes.push(a+"-arrow-pad");var s;t.below&&(i=e.havingStyle(r.sub()),s=je.wrapFragment(ii(t.below,i,e),e),s.classes.push(a+"-arrow-pad"));var l=kh.svgSpan(t,e),u=-e.fontMetrics().axisHeight+.5*l.height,h=-e.fontMetrics().axisHeight-.5*l.height-.111;(n.depth>.25||t.label==="\\xleftequilibrium")&&(h-=n.depth);var f;if(s){var d=-e.fontMetrics().axisHeight+s.height+.5*l.height+.111;f=je.makeVList({positionType:"individualShift",children:[{type:"elem",elem:n,shift:h},{type:"elem",elem:l,shift:u},{type:"elem",elem:s,shift:d}]},e)}else f=je.makeVList({positionType:"individualShift",children:[{type:"elem",elem:n,shift:h},{type:"elem",elem:l,shift:u}]},e);return f.children[0].children[0].children[1].classes.push("svg-align"),je.makeSpan(["mrel","x-arrow"],[f],e)},mathmlBuilder(t,e){var r=kh.mathMLnode(t.label);r.setAttribute("minsize",t.label.charAt(0)==="x"?"1.75em":"3.0em");var i;if(t.body){var n=R4($i(t.body,e));if(t.below){var a=R4($i(t.below,e));i=new Ct.MathNode("munderover",[r,a,n])}else i=new Ct.MathNode("mover",[r,n])}else if(t.below){var s=R4($i(t.below,e));i=new Ct.MathNode("munder",[r,s])}else i=R4(),i=new Ct.MathNode("mover",[r,i]);return i}});vLe=je.makeSpan;o(eK,"htmlBuilder$9");o(tK,"mathmlBuilder$8");Bt({type:"mclass",names:["\\mathord","\\mathbin","\\mathrel","\\mathopen","\\mathclose","\\mathpunct","\\mathinner"],props:{numArgs:1,primitive:!0},handler(t,e){var{parser:r,funcName:i}=t,n=e[0];return{type:"mclass",mode:r.mode,mclass:"m"+i.slice(5),body:$n(n),isCharacterBox:ui.isCharacterBox(n)}},htmlBuilder:eK,mathmlBuilder:tK});H4=o(t=>{var e=t.type==="ordgroup"&&t.body.length?t.body[0]:t;return e.type==="atom"&&(e.family==="bin"||e.family==="rel")?"m"+e.family:"mord"},"binrelClass");Bt({type:"mclass",names:["\\@binrel"],props:{numArgs:2},handler(t,e){var{parser:r}=t;return{type:"mclass",mode:r.mode,mclass:H4(e[0]),body:$n(e[1]),isCharacterBox:ui.isCharacterBox(e[1])}}});Bt({type:"mclass",names:["\\stackrel","\\overset","\\underset"],props:{numArgs:2},handler(t,e){var{parser:r,funcName:i}=t,n=e[1],a=e[0],s;i!=="\\stackrel"?s=H4(n):s="mrel";var l={type:"op",mode:n.mode,limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!1,symbol:!1,suppressBaseShift:i!=="\\stackrel",body:$n(n)},u={type:"supsub",mode:a.mode,base:l,sup:i==="\\underset"?null:a,sub:i==="\\underset"?a:null};return{type:"mclass",mode:r.mode,mclass:s,body:[u],isCharacterBox:ui.isCharacterBox(u)}},htmlBuilder:eK,mathmlBuilder:tK});Bt({type:"pmb",names:["\\pmb"],props:{numArgs:1,allowedInText:!0},handler(t,e){var{parser:r}=t;return{type:"pmb",mode:r.mode,mclass:H4(e[0]),body:$n(e[0])}},htmlBuilder(t,e){var r=ca(t.body,e,!0),i=je.makeSpan([t.mclass],r,e);return i.style.textShadow="0.02em 0.01em 0.04px",i},mathmlBuilder(t,e){var r=ho(t.body,e),i=new Ct.MathNode("mstyle",r);return i.setAttribute("style","text-shadow: 0.02em 0.01em 0.04px"),i}});xLe={">":"\\\\cdrightarrow","<":"\\\\cdleftarrow","=":"\\\\cdlongequal",A:"\\uparrow",V:"\\downarrow","|":"\\Vert",".":"no arrow"},mX=o(()=>({type:"styling",body:[],mode:"math",style:"display"}),"newCell"),gX=o(t=>t.type==="textord"&&t.text==="@","isStartOfArrow"),bLe=o((t,e)=>(t.type==="mathord"||t.type==="atom")&&t.text===e,"isLabelEnd");o(TLe,"cdArrow");o(kLe,"parseCD");Bt({type:"cdlabel",names:["\\\\cdleft","\\\\cdright"],props:{numArgs:1},handler(t,e){var{parser:r,funcName:i}=t;return{type:"cdlabel",mode:r.mode,side:i.slice(4),label:e[0]}},htmlBuilder(t,e){var r=e.havingStyle(e.style.sup()),i=je.wrapFragment(ii(t.label,r,e),e);return i.classes.push("cd-label-"+t.side),i.style.bottom=Rt(.8-i.depth),i.height=0,i.depth=0,i},mathmlBuilder(t,e){var r=new Ct.MathNode("mrow",[$i(t.label,e)]);return r=new Ct.MathNode("mpadded",[r]),r.setAttribute("width","0"),t.side==="left"&&r.setAttribute("lspace","-1width"),r.setAttribute("voffset","0.7em"),r=new Ct.MathNode("mstyle",[r]),r.setAttribute("displaystyle","false"),r.setAttribute("scriptlevel","1"),r}});Bt({type:"cdlabelparent",names:["\\\\cdparent"],props:{numArgs:1},handler(t,e){var{parser:r}=t;return{type:"cdlabelparent",mode:r.mode,fragment:e[0]}},htmlBuilder(t,e){var r=je.wrapFragment(ii(t.fragment,e),e);return r.classes.push("cd-vert-arrow"),r},mathmlBuilder(t,e){return new Ct.MathNode("mrow",[$i(t.fragment,e)])}});Bt({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler(t,e){for(var{parser:r}=t,i=Gr(e[0],"ordgroup"),n=i.body,a="",s=0;s=1114111)throw new wt("\\@char with invalid code point "+a);return u<=65535?h=String.fromCharCode(u):(u-=65536,h=String.fromCharCode((u>>10)+55296,(u&1023)+56320)),{type:"textord",mode:r.mode,text:h}}});rK=o((t,e)=>{var r=ca(t.body,e.withColor(t.color),!1);return je.makeFragment(r)},"htmlBuilder$8"),iK=o((t,e)=>{var r=ho(t.body,e.withColor(t.color)),i=new Ct.MathNode("mstyle",r);return i.setAttribute("mathcolor",t.color),i},"mathmlBuilder$7");Bt({type:"color",names:["\\textcolor"],props:{numArgs:2,allowedInText:!0,argTypes:["color","original"]},handler(t,e){var{parser:r}=t,i=Gr(e[0],"color-token").color,n=e[1];return{type:"color",mode:r.mode,color:i,body:$n(n)}},htmlBuilder:rK,mathmlBuilder:iK});Bt({type:"color",names:["\\color"],props:{numArgs:1,allowedInText:!0,argTypes:["color"]},handler(t,e){var{parser:r,breakOnTokenText:i}=t,n=Gr(e[0],"color-token").color;r.gullet.macros.set("\\current@color",n);var a=r.parseExpression(!0,i);return{type:"color",mode:r.mode,color:n,body:a}},htmlBuilder:rK,mathmlBuilder:iK});Bt({type:"cr",names:["\\\\"],props:{numArgs:0,numOptionalArgs:0,allowedInText:!0},handler(t,e,r){var{parser:i}=t,n=i.gullet.future().text==="["?i.parseSizeGroup(!0):null,a=!i.settings.displayMode||!i.settings.useStrictBehavior("newLineInDisplayMode","In LaTeX, \\\\ or \\newline does nothing in display mode");return{type:"cr",mode:i.mode,newLine:a,size:n&&Gr(n,"size").value}},htmlBuilder(t,e){var r=je.makeSpan(["mspace"],[],e);return t.newLine&&(r.classes.push("newline"),t.size&&(r.style.marginTop=Rt(wn(t.size,e)))),r},mathmlBuilder(t,e){var r=new Ct.MathNode("mspace");return t.newLine&&(r.setAttribute("linebreak","newline"),t.size&&r.setAttribute("height",Rt(wn(t.size,e)))),r}});OD={"\\global":"\\global","\\long":"\\\\globallong","\\\\globallong":"\\\\globallong","\\def":"\\gdef","\\gdef":"\\gdef","\\edef":"\\xdef","\\xdef":"\\xdef","\\let":"\\\\globallet","\\futurelet":"\\\\globalfuture"},nK=o(t=>{var e=t.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(e))throw new wt("Expected a control sequence",t);return e},"checkControlSequence"),CLe=o(t=>{var e=t.gullet.popToken();return e.text==="="&&(e=t.gullet.popToken(),e.text===" "&&(e=t.gullet.popToken())),e},"getRHS"),aK=o((t,e,r,i)=>{var n=t.gullet.macros.get(r.text);n==null&&(r.noexpand=!0,n={tokens:[r],numArgs:0,unexpandable:!t.gullet.isExpandable(r.text)}),t.gullet.macros.set(e,n,i)},"letCommand");Bt({type:"internal",names:["\\global","\\long","\\\\globallong"],props:{numArgs:0,allowedInText:!0},handler(t){var{parser:e,funcName:r}=t;e.consumeSpaces();var i=e.fetch();if(OD[i.text])return(r==="\\global"||r==="\\\\globallong")&&(i.text=OD[i.text]),Gr(e.parseFunction(),"internal");throw new wt("Invalid token after macro prefix",i)}});Bt({type:"internal",names:["\\def","\\gdef","\\edef","\\xdef"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t){var{parser:e,funcName:r}=t,i=e.gullet.popToken(),n=i.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(n))throw new wt("Expected a control sequence",i);for(var a=0,s,l=[[]];e.gullet.future().text!=="{";)if(i=e.gullet.popToken(),i.text==="#"){if(e.gullet.future().text==="{"){s=e.gullet.future(),l[a].push("{");break}if(i=e.gullet.popToken(),!/^[1-9]$/.test(i.text))throw new wt('Invalid argument number "'+i.text+'"');if(parseInt(i.text)!==a+1)throw new wt('Argument number "'+i.text+'" out of order');a++,l.push([])}else{if(i.text==="EOF")throw new wt("Expected a macro definition");l[a].push(i.text)}var{tokens:u}=e.gullet.consumeArg();return s&&u.unshift(s),(r==="\\edef"||r==="\\xdef")&&(u=e.gullet.expandTokens(u),u.reverse()),e.gullet.macros.set(n,{tokens:u,numArgs:a,delimiters:l},r===OD[r]),{type:"internal",mode:e.mode}}});Bt({type:"internal",names:["\\let","\\\\globallet"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t){var{parser:e,funcName:r}=t,i=nK(e.gullet.popToken());e.gullet.consumeSpaces();var n=CLe(e);return aK(e,i,n,r==="\\\\globallet"),{type:"internal",mode:e.mode}}});Bt({type:"internal",names:["\\futurelet","\\\\globalfuture"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t){var{parser:e,funcName:r}=t,i=nK(e.gullet.popToken()),n=e.gullet.popToken(),a=e.gullet.popToken();return aK(e,i,a,r==="\\\\globalfuture"),e.gullet.pushToken(a),e.gullet.pushToken(n),{type:"internal",mode:e.mode}}});qx=o(function(e,r,i){var n=ji.math[e]&&ji.math[e].replace,a=GD(n||e,r,i);if(!a)throw new Error("Unsupported symbol "+e+" and font size "+r+".");return a},"getMetrics"),YD=o(function(e,r,i,n){var a=i.havingBaseStyle(r),s=je.makeSpan(n.concat(a.sizingClasses(i)),[e],i),l=a.sizeMultiplier/i.sizeMultiplier;return s.height*=l,s.depth*=l,s.maxFontSize=a.sizeMultiplier,s},"styleWrap"),sK=o(function(e,r,i){var n=r.havingBaseStyle(i),a=(1-r.sizeMultiplier/n.sizeMultiplier)*r.fontMetrics().axisHeight;e.classes.push("delimcenter"),e.style.top=Rt(a),e.height-=a,e.depth+=a},"centerSpan"),wLe=o(function(e,r,i,n,a,s){var l=je.makeSymbol(e,"Main-Regular",a,n),u=YD(l,r,n,s);return i&&sK(u,n,r),u},"makeSmallDelim"),ELe=o(function(e,r,i,n){return je.makeSymbol(e,"Size"+r+"-Regular",i,n)},"mathrmSize"),oK=o(function(e,r,i,n,a,s){var l=ELe(e,r,a,n),u=YD(je.makeSpan(["delimsizing","size"+r],[l],n),gr.TEXT,n,s);return i&&sK(u,n,gr.TEXT),u},"makeLargeDelim"),xD=o(function(e,r,i){var n;r==="Size1-Regular"?n="delim-size1":n="delim-size4";var a=je.makeSpan(["delimsizinginner",n],[je.makeSpan([],[je.makeSymbol(e,r,i)])]);return{type:"elem",elem:a}},"makeGlyphSpan"),bD=o(function(e,r,i){var n=ru["Size4-Regular"][e.charCodeAt(0)]?ru["Size4-Regular"][e.charCodeAt(0)][4]:ru["Size1-Regular"][e.charCodeAt(0)][4],a=new iu("inner",IDe(e,Math.round(1e3*r))),s=new uc([a],{width:Rt(n),height:Rt(r),style:"width:"+Rt(n),viewBox:"0 0 "+1e3*n+" "+Math.round(1e3*r),preserveAspectRatio:"xMinYMin"}),l=je.makeSvgSpan([],[s],i);return l.height=r,l.style.height=Rt(r),l.style.width=Rt(n),{type:"elem",elem:l}},"makeInner"),PD=.008,N4={type:"kern",size:-1*PD},SLe=["|","\\lvert","\\rvert","\\vert"],ALe=["\\|","\\lVert","\\rVert","\\Vert"],lK=o(function(e,r,i,n,a,s){var l,u,h,f,d="",p=0;l=h=f=e,u=null;var m="Size1-Regular";e==="\\uparrow"?h=f="\u23D0":e==="\\Uparrow"?h=f="\u2016":e==="\\downarrow"?l=h="\u23D0":e==="\\Downarrow"?l=h="\u2016":e==="\\updownarrow"?(l="\\uparrow",h="\u23D0",f="\\downarrow"):e==="\\Updownarrow"?(l="\\Uparrow",h="\u2016",f="\\Downarrow"):SLe.includes(e)?(h="\u2223",d="vert",p=333):ALe.includes(e)?(h="\u2225",d="doublevert",p=556):e==="["||e==="\\lbrack"?(l="\u23A1",h="\u23A2",f="\u23A3",m="Size4-Regular",d="lbrack",p=667):e==="]"||e==="\\rbrack"?(l="\u23A4",h="\u23A5",f="\u23A6",m="Size4-Regular",d="rbrack",p=667):e==="\\lfloor"||e==="\u230A"?(h=l="\u23A2",f="\u23A3",m="Size4-Regular",d="lfloor",p=667):e==="\\lceil"||e==="\u2308"?(l="\u23A1",h=f="\u23A2",m="Size4-Regular",d="lceil",p=667):e==="\\rfloor"||e==="\u230B"?(h=l="\u23A5",f="\u23A6",m="Size4-Regular",d="rfloor",p=667):e==="\\rceil"||e==="\u2309"?(l="\u23A4",h=f="\u23A5",m="Size4-Regular",d="rceil",p=667):e==="("||e==="\\lparen"?(l="\u239B",h="\u239C",f="\u239D",m="Size4-Regular",d="lparen",p=875):e===")"||e==="\\rparen"?(l="\u239E",h="\u239F",f="\u23A0",m="Size4-Regular",d="rparen",p=875):e==="\\{"||e==="\\lbrace"?(l="\u23A7",u="\u23A8",f="\u23A9",h="\u23AA",m="Size4-Regular"):e==="\\}"||e==="\\rbrace"?(l="\u23AB",u="\u23AC",f="\u23AD",h="\u23AA",m="Size4-Regular"):e==="\\lgroup"||e==="\u27EE"?(l="\u23A7",f="\u23A9",h="\u23AA",m="Size4-Regular"):e==="\\rgroup"||e==="\u27EF"?(l="\u23AB",f="\u23AD",h="\u23AA",m="Size4-Regular"):e==="\\lmoustache"||e==="\u23B0"?(l="\u23A7",f="\u23AD",h="\u23AA",m="Size4-Regular"):(e==="\\rmoustache"||e==="\u23B1")&&(l="\u23AB",f="\u23A9",h="\u23AA",m="Size4-Regular");var g=qx(l,m,a),y=g.height+g.depth,v=qx(h,m,a),x=v.height+v.depth,b=qx(f,m,a),T=b.height+b.depth,w=0,k=1;if(u!==null){var C=qx(u,m,a);w=C.height+C.depth,k=2}var E=y+T+w,S=Math.max(0,Math.ceil((r-E)/(k*x))),L=E+S*k*x,M=n.fontMetrics().axisHeight;i&&(M*=n.sizeMultiplier);var I=L/2-M,A=[];if(d.length>0){var _=L-y-T,D=Math.round(L*1e3),N=MDe(d,Math.round(_*1e3)),R=new iu(d,N),B=(p/1e3).toFixed(3)+"em",O=(D/1e3).toFixed(3)+"em",$=new uc([R],{width:B,height:O,viewBox:"0 0 "+p+" "+D}),z=je.makeSvgSpan([],[$],n);z.height=D/1e3,z.style.width=B,z.style.height=O,A.push({type:"elem",elem:z})}else{if(A.push(xD(f,m,a)),A.push(N4),u===null){var F=L-y-T+2*PD;A.push(bD(h,F,n))}else{var V=(L-y-T-w)/2+2*PD;A.push(bD(h,V,n)),A.push(N4),A.push(xD(u,m,a)),A.push(N4),A.push(bD(h,V,n))}A.push(N4),A.push(xD(l,m,a))}var H=n.havingBaseStyle(gr.TEXT),X=je.makeVList({positionType:"bottom",positionData:I,children:A},H);return YD(je.makeSpan(["delimsizing","mult"],[X],H),gr.TEXT,n,s)},"makeStackedDelim"),TD=80,kD=.08,CD=o(function(e,r,i,n,a){var s=NDe(e,n,i),l=new iu(e,s),u=new uc([l],{width:"400em",height:Rt(r),viewBox:"0 0 400000 "+i,preserveAspectRatio:"xMinYMin slice"});return je.makeSvgSpan(["hide-tail"],[u],a)},"sqrtSvg"),_Le=o(function(e,r){var i=r.havingBaseSizing(),n=fK("\\surd",e*i.sizeMultiplier,hK,i),a=i.sizeMultiplier,s=Math.max(0,r.minRuleThickness-r.fontMetrics().sqrtRuleThickness),l,u=0,h=0,f=0,d;return n.type==="small"?(f=1e3+1e3*s+TD,e<1?a=1:e<1.4&&(a=.7),u=(1+s+kD)/a,h=(1+s)/a,l=CD("sqrtMain",u,f,s,r),l.style.minWidth="0.853em",d=.833/a):n.type==="large"?(f=(1e3+TD)*Ux[n.size],h=(Ux[n.size]+s)/a,u=(Ux[n.size]+s+kD)/a,l=CD("sqrtSize"+n.size,u,f,s,r),l.style.minWidth="1.02em",d=1/a):(u=e+s+kD,h=e+s,f=Math.floor(1e3*e+s)+TD,l=CD("sqrtTall",u,f,s,r),l.style.minWidth="0.742em",d=1.056),l.height=h,l.style.height=Rt(u),{span:l,advanceWidth:d,ruleWidth:(r.fontMetrics().sqrtRuleThickness+s)*a}},"makeSqrtImage"),cK=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230A","\u230B","\\lceil","\\rceil","\u2308","\u2309","\\surd"],DLe=["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27EE","\u27EF","\\lmoustache","\\rmoustache","\u23B0","\u23B1"],uK=["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"],Ux=[0,1.2,1.8,2.4,3],LLe=o(function(e,r,i,n,a){if(e==="<"||e==="\\lt"||e==="\u27E8"?e="\\langle":(e===">"||e==="\\gt"||e==="\u27E9")&&(e="\\rangle"),cK.includes(e)||uK.includes(e))return oK(e,r,!1,i,n,a);if(DLe.includes(e))return lK(e,Ux[r],!1,i,n,a);throw new wt("Illegal delimiter: '"+e+"'")},"makeSizedDelim"),RLe=[{type:"small",style:gr.SCRIPTSCRIPT},{type:"small",style:gr.SCRIPT},{type:"small",style:gr.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],NLe=[{type:"small",style:gr.SCRIPTSCRIPT},{type:"small",style:gr.SCRIPT},{type:"small",style:gr.TEXT},{type:"stack"}],hK=[{type:"small",style:gr.SCRIPTSCRIPT},{type:"small",style:gr.SCRIPT},{type:"small",style:gr.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}],ILe=o(function(e){if(e.type==="small")return"Main-Regular";if(e.type==="large")return"Size"+e.size+"-Regular";if(e.type==="stack")return"Size4-Regular";throw new Error("Add support for delim type '"+e.type+"' here.")},"delimTypeToFont"),fK=o(function(e,r,i,n){for(var a=Math.min(2,3-n.style.size),s=a;sr)return i[s]}return i[i.length-1]},"traverseSequence"),dK=o(function(e,r,i,n,a,s){e==="<"||e==="\\lt"||e==="\u27E8"?e="\\langle":(e===">"||e==="\\gt"||e==="\u27E9")&&(e="\\rangle");var l;uK.includes(e)?l=RLe:cK.includes(e)?l=hK:l=NLe;var u=fK(e,r,l,n);return u.type==="small"?wLe(e,u.style,i,n,a,s):u.type==="large"?oK(e,u.size,i,n,a,s):lK(e,r,i,n,a,s)},"makeCustomSizedDelim"),MLe=o(function(e,r,i,n,a,s){var l=n.fontMetrics().axisHeight*n.sizeMultiplier,u=901,h=5/n.fontMetrics().ptPerEm,f=Math.max(r-l,i+l),d=Math.max(f/500*u,2*f-h);return dK(e,d,!0,n,a,s)},"makeLeftRightDelim"),bh={sqrtImage:_Le,sizedDelim:LLe,sizeToMaxHeight:Ux,customSizedDelim:dK,leftRightDelim:MLe},yX={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},OLe=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230A","\u230B","\\lceil","\\rceil","\u2308","\u2309","<",">","\\langle","\u27E8","\\rangle","\u27E9","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27EE","\u27EF","\\lmoustache","\\rmoustache","\u23B0","\u23B1","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."];o(Y4,"checkDelimiter");Bt({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1,argTypes:["primitive"]},handler:o((t,e)=>{var r=Y4(e[0],t);return{type:"delimsizing",mode:t.parser.mode,size:yX[t.funcName].size,mclass:yX[t.funcName].mclass,delim:r.text}},"handler"),htmlBuilder:o((t,e)=>t.delim==="."?je.makeSpan([t.mclass]):bh.sizedDelim(t.delim,t.size,e,t.mode,[t.mclass]),"htmlBuilder"),mathmlBuilder:o(t=>{var e=[];t.delim!=="."&&e.push(wl(t.delim,t.mode));var r=new Ct.MathNode("mo",e);t.mclass==="mopen"||t.mclass==="mclose"?r.setAttribute("fence","true"):r.setAttribute("fence","false"),r.setAttribute("stretchy","true");var i=Rt(bh.sizeToMaxHeight[t.size]);return r.setAttribute("minsize",i),r.setAttribute("maxsize",i),r},"mathmlBuilder")});o(vX,"assertParsed");Bt({type:"leftright-right",names:["\\right"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var r=t.parser.gullet.macros.get("\\current@color");if(r&&typeof r!="string")throw new wt("\\current@color set to non-string in \\right");return{type:"leftright-right",mode:t.parser.mode,delim:Y4(e[0],t).text,color:r}},"handler")});Bt({type:"leftright",names:["\\left"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var r=Y4(e[0],t),i=t.parser;++i.leftrightDepth;var n=i.parseExpression(!1);--i.leftrightDepth,i.expect("\\right",!1);var a=Gr(i.parseFunction(),"leftright-right");return{type:"leftright",mode:i.mode,body:n,left:r.text,right:a.delim,rightColor:a.color}},"handler"),htmlBuilder:o((t,e)=>{vX(t);for(var r=ca(t.body,e,!0,["mopen","mclose"]),i=0,n=0,a=!1,s=0;s{vX(t);var r=ho(t.body,e);if(t.left!=="."){var i=new Ct.MathNode("mo",[wl(t.left,t.mode)]);i.setAttribute("fence","true"),r.unshift(i)}if(t.right!=="."){var n=new Ct.MathNode("mo",[wl(t.right,t.mode)]);n.setAttribute("fence","true"),t.rightColor&&n.setAttribute("mathcolor",t.rightColor),r.push(n)}return qD(r)},"mathmlBuilder")});Bt({type:"middle",names:["\\middle"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var r=Y4(e[0],t);if(!t.parser.leftrightDepth)throw new wt("\\middle without preceding \\left",r);return{type:"middle",mode:t.parser.mode,delim:r.text}},"handler"),htmlBuilder:o((t,e)=>{var r;if(t.delim===".")r=Kx(e,[]);else{r=bh.sizedDelim(t.delim,1,e,t.mode,[]);var i={delim:t.delim,options:e};r.isMiddle=i}return r},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=t.delim==="\\vert"||t.delim==="|"?wl("|","text"):wl(t.delim,t.mode),i=new Ct.MathNode("mo",[r]);return i.setAttribute("fence","true"),i.setAttribute("lspace","0.05em"),i.setAttribute("rspace","0.05em"),i},"mathmlBuilder")});jD=o((t,e)=>{var r=je.wrapFragment(ii(t.body,e),e),i=t.label.slice(1),n=e.sizeMultiplier,a,s=0,l=ui.isCharacterBox(t.body);if(i==="sout")a=je.makeSpan(["stretchy","sout"]),a.height=e.fontMetrics().defaultRuleThickness/n,s=-.5*e.fontMetrics().xHeight;else if(i==="phase"){var u=wn({number:.6,unit:"pt"},e),h=wn({number:.35,unit:"ex"},e),f=e.havingBaseSizing();n=n/f.sizeMultiplier;var d=r.height+r.depth+u+h;r.style.paddingLeft=Rt(d/2+u);var p=Math.floor(1e3*d*n),m=LDe(p),g=new uc([new iu("phase",m)],{width:"400em",height:Rt(p/1e3),viewBox:"0 0 400000 "+p,preserveAspectRatio:"xMinYMin slice"});a=je.makeSvgSpan(["hide-tail"],[g],e),a.style.height=Rt(d),s=r.depth+u+h}else{/cancel/.test(i)?l||r.classes.push("cancel-pad"):i==="angl"?r.classes.push("anglpad"):r.classes.push("boxpad");var y=0,v=0,x=0;/box/.test(i)?(x=Math.max(e.fontMetrics().fboxrule,e.minRuleThickness),y=e.fontMetrics().fboxsep+(i==="colorbox"?0:x),v=y):i==="angl"?(x=Math.max(e.fontMetrics().defaultRuleThickness,e.minRuleThickness),y=4*x,v=Math.max(0,.25-r.depth)):(y=l?.2:0,v=y),a=kh.encloseSpan(r,i,y,v,e),/fbox|boxed|fcolorbox/.test(i)?(a.style.borderStyle="solid",a.style.borderWidth=Rt(x)):i==="angl"&&x!==.049&&(a.style.borderTopWidth=Rt(x),a.style.borderRightWidth=Rt(x)),s=r.depth+v,t.backgroundColor&&(a.style.backgroundColor=t.backgroundColor,t.borderColor&&(a.style.borderColor=t.borderColor))}var b;if(t.backgroundColor)b=je.makeVList({positionType:"individualShift",children:[{type:"elem",elem:a,shift:s},{type:"elem",elem:r,shift:0}]},e);else{var T=/cancel|phase/.test(i)?["svg-align"]:[];b=je.makeVList({positionType:"individualShift",children:[{type:"elem",elem:r,shift:0},{type:"elem",elem:a,shift:s,wrapperClasses:T}]},e)}return/cancel/.test(i)&&(b.height=r.height,b.depth=r.depth),/cancel/.test(i)&&!l?je.makeSpan(["mord","cancel-lap"],[b],e):je.makeSpan(["mord"],[b],e)},"htmlBuilder$7"),XD=o((t,e)=>{var r=0,i=new Ct.MathNode(t.label.indexOf("colorbox")>-1?"mpadded":"menclose",[$i(t.body,e)]);switch(t.label){case"\\cancel":i.setAttribute("notation","updiagonalstrike");break;case"\\bcancel":i.setAttribute("notation","downdiagonalstrike");break;case"\\phase":i.setAttribute("notation","phasorangle");break;case"\\sout":i.setAttribute("notation","horizontalstrike");break;case"\\fbox":i.setAttribute("notation","box");break;case"\\angl":i.setAttribute("notation","actuarial");break;case"\\fcolorbox":case"\\colorbox":if(r=e.fontMetrics().fboxsep*e.fontMetrics().ptPerEm,i.setAttribute("width","+"+2*r+"pt"),i.setAttribute("height","+"+2*r+"pt"),i.setAttribute("lspace",r+"pt"),i.setAttribute("voffset",r+"pt"),t.label==="\\fcolorbox"){var n=Math.max(e.fontMetrics().fboxrule,e.minRuleThickness);i.setAttribute("style","border: "+n+"em solid "+String(t.borderColor))}break;case"\\xcancel":i.setAttribute("notation","updiagonalstrike downdiagonalstrike");break}return t.backgroundColor&&i.setAttribute("mathbackground",t.backgroundColor),i},"mathmlBuilder$6");Bt({type:"enclose",names:["\\colorbox"],props:{numArgs:2,allowedInText:!0,argTypes:["color","text"]},handler(t,e,r){var{parser:i,funcName:n}=t,a=Gr(e[0],"color-token").color,s=e[1];return{type:"enclose",mode:i.mode,label:n,backgroundColor:a,body:s}},htmlBuilder:jD,mathmlBuilder:XD});Bt({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,allowedInText:!0,argTypes:["color","color","text"]},handler(t,e,r){var{parser:i,funcName:n}=t,a=Gr(e[0],"color-token").color,s=Gr(e[1],"color-token").color,l=e[2];return{type:"enclose",mode:i.mode,label:n,backgroundColor:s,borderColor:a,body:l}},htmlBuilder:jD,mathmlBuilder:XD});Bt({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler(t,e){var{parser:r}=t;return{type:"enclose",mode:r.mode,label:"\\fbox",body:e[0]}}});Bt({type:"enclose",names:["\\cancel","\\bcancel","\\xcancel","\\sout","\\phase"],props:{numArgs:1},handler(t,e){var{parser:r,funcName:i}=t,n=e[0];return{type:"enclose",mode:r.mode,label:i,body:n}},htmlBuilder:jD,mathmlBuilder:XD});Bt({type:"enclose",names:["\\angl"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!1},handler(t,e){var{parser:r}=t;return{type:"enclose",mode:r.mode,label:"\\angl",body:e[0]}}});pK={};o(nu,"defineEnvironment");mK={};o(he,"defineMacro");o(xX,"getHLines");j4=o(t=>{var e=t.parser.settings;if(!e.displayMode)throw new wt("{"+t.envName+"} can be used only in display mode.")},"validateAmsEnvironmentContext");o(KD,"getAutoTag");o(Bf,"parseArray");o(QD,"dCellStyle");au=o(function(e,r){var i,n,a=e.body.length,s=e.hLinesBeforeRow,l=0,u=new Array(a),h=[],f=Math.max(r.fontMetrics().arrayRuleWidth,r.minRuleThickness),d=1/r.fontMetrics().ptPerEm,p=5*d;if(e.colSeparationType&&e.colSeparationType==="small"){var m=r.havingStyle(gr.SCRIPT).sizeMultiplier;p=.2778*(m/r.sizeMultiplier)}var g=e.colSeparationType==="CD"?wn({number:3,unit:"ex"},r):12*d,y=3*d,v=e.arraystretch*g,x=.7*v,b=.3*v,T=0;function w(Te){for(var De=0;De0&&(T+=.25),h.push({pos:T,isDashed:Te[De]})}for(o(w,"setHLinePos"),w(s[0]),i=0;i0&&(I+=b,ETe))for(i=0;i=l)){var Y=void 0;(n>0||e.hskipBeforeAndAfter)&&(Y=ui.deflt(V.pregap,p),Y!==0&&(N=je.makeSpan(["arraycolsep"],[]),N.style.width=Rt(Y),D.push(N)));var ae=[];for(i=0;i0){for(var te=je.makeLineSpan("hline",r,f),be=je.makeLineSpan("hdashline",r,f),de=[{type:"elem",elem:u,shift:0}];h.length>0;){var Ee=h.pop(),Ne=Ee.pos-A;Ee.isDashed?de.push({type:"elem",elem:be,shift:Ne}):de.push({type:"elem",elem:te,shift:Ne})}u=je.makeVList({positionType:"individualShift",children:de},r)}if(B.length===0)return je.makeSpan(["mord"],[u],r);var we=je.makeVList({positionType:"individualShift",children:B},r);return we=je.makeSpan(["tag"],[we],r),je.makeFragment([u,we])},"htmlBuilder"),PLe={c:"center ",l:"left ",r:"right "},su=o(function(e,r){for(var i=[],n=new Ct.MathNode("mtd",[],["mtr-glue"]),a=new Ct.MathNode("mtd",[],["mml-eqn-num"]),s=0;s0){var g=e.cols,y="",v=!1,x=0,b=g.length;g[0].type==="separator"&&(p+="top ",x=1),g[g.length-1].type==="separator"&&(p+="bottom ",b-=1);for(var T=x;T0?"left ":"",p+=S[S.length-1].length>0?"right ":"";for(var L=1;L-1?"alignat":"align",a=e.envName==="split",s=Bf(e.parser,{cols:i,addJot:!0,autoTag:a?void 0:KD(e.envName),emptySingleRow:!0,colSeparationType:n,maxNumCols:a?2:void 0,leqno:e.parser.settings.leqno},"display"),l,u=0,h={type:"ordgroup",mode:e.mode,body:[]};if(r[0]&&r[0].type==="ordgroup"){for(var f="",d=0;d0&&m&&(v=1),i[g]={type:"align",align:y,pregap:v,postgap:0}}return s.colSeparationType=m?"align":"alignat",s},"alignedHandler");nu({type:"array",names:["array","darray"],props:{numArgs:1},handler(t,e){var r=U4(e[0]),i=r?[e[0]]:Gr(e[0],"ordgroup").body,n=i.map(function(s){var l=UD(s),u=l.text;if("lcr".indexOf(u)!==-1)return{type:"align",align:u};if(u==="|")return{type:"separator",separator:"|"};if(u===":")return{type:"separator",separator:":"};throw new wt("Unknown column alignment: "+u,s)}),a={cols:n,hskipBeforeAndAfter:!0,maxNumCols:n.length};return Bf(t.parser,a,QD(t.envName))},htmlBuilder:au,mathmlBuilder:su});nu({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","matrix*","pmatrix*","bmatrix*","Bmatrix*","vmatrix*","Vmatrix*"],props:{numArgs:0},handler(t){var e={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[t.envName.replace("*","")],r="c",i={hskipBeforeAndAfter:!1,cols:[{type:"align",align:r}]};if(t.envName.charAt(t.envName.length-1)==="*"){var n=t.parser;if(n.consumeSpaces(),n.fetch().text==="["){if(n.consume(),n.consumeSpaces(),r=n.fetch().text,"lcr".indexOf(r)===-1)throw new wt("Expected l or c or r",n.nextToken);n.consume(),n.consumeSpaces(),n.expect("]"),n.consume(),i.cols=[{type:"align",align:r}]}}var a=Bf(t.parser,i,QD(t.envName)),s=Math.max(0,...a.body.map(l=>l.length));return a.cols=new Array(s).fill({type:"align",align:r}),e?{type:"leftright",mode:t.mode,body:[a],left:e[0],right:e[1],rightColor:void 0}:a},htmlBuilder:au,mathmlBuilder:su});nu({type:"array",names:["smallmatrix"],props:{numArgs:0},handler(t){var e={arraystretch:.5},r=Bf(t.parser,e,"script");return r.colSeparationType="small",r},htmlBuilder:au,mathmlBuilder:su});nu({type:"array",names:["subarray"],props:{numArgs:1},handler(t,e){var r=U4(e[0]),i=r?[e[0]]:Gr(e[0],"ordgroup").body,n=i.map(function(s){var l=UD(s),u=l.text;if("lc".indexOf(u)!==-1)return{type:"align",align:u};throw new wt("Unknown column alignment: "+u,s)});if(n.length>1)throw new wt("{subarray} can contain only one column");var a={cols:n,hskipBeforeAndAfter:!1,arraystretch:.5};if(a=Bf(t.parser,a,"script"),a.body.length>0&&a.body[0].length>1)throw new wt("{subarray} can contain only one column");return a},htmlBuilder:au,mathmlBuilder:su});nu({type:"array",names:["cases","dcases","rcases","drcases"],props:{numArgs:0},handler(t){var e={arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:1},{type:"align",align:"l",pregap:0,postgap:0}]},r=Bf(t.parser,e,QD(t.envName));return{type:"leftright",mode:t.mode,body:[r],left:t.envName.indexOf("r")>-1?".":"\\{",right:t.envName.indexOf("r")>-1?"\\}":".",rightColor:void 0}},htmlBuilder:au,mathmlBuilder:su});nu({type:"array",names:["align","align*","aligned","split"],props:{numArgs:0},handler:gK,htmlBuilder:au,mathmlBuilder:su});nu({type:"array",names:["gathered","gather","gather*"],props:{numArgs:0},handler(t){["gather","gather*"].includes(t.envName)&&j4(t);var e={cols:[{type:"align",align:"c"}],addJot:!0,colSeparationType:"gather",autoTag:KD(t.envName),emptySingleRow:!0,leqno:t.parser.settings.leqno};return Bf(t.parser,e,"display")},htmlBuilder:au,mathmlBuilder:su});nu({type:"array",names:["alignat","alignat*","alignedat"],props:{numArgs:1},handler:gK,htmlBuilder:au,mathmlBuilder:su});nu({type:"array",names:["equation","equation*"],props:{numArgs:0},handler(t){j4(t);var e={autoTag:KD(t.envName),emptySingleRow:!0,singleRow:!0,maxNumCols:1,leqno:t.parser.settings.leqno};return Bf(t.parser,e,"display")},htmlBuilder:au,mathmlBuilder:su});nu({type:"array",names:["CD"],props:{numArgs:0},handler(t){return j4(t),kLe(t.parser)},htmlBuilder:au,mathmlBuilder:su});he("\\nonumber","\\gdef\\@eqnsw{0}");he("\\notag","\\nonumber");Bt({type:"text",names:["\\hline","\\hdashline"],props:{numArgs:0,allowedInText:!0,allowedInMath:!0},handler(t,e){throw new wt(t.funcName+" valid only within array environment")}});bX=pK;Bt({type:"environment",names:["\\begin","\\end"],props:{numArgs:1,argTypes:["text"]},handler(t,e){var{parser:r,funcName:i}=t,n=e[0];if(n.type!=="ordgroup")throw new wt("Invalid environment name",n);for(var a="",s=0;s{var r=t.font,i=e.withFont(r);return ii(t.body,i)},"htmlBuilder$5"),vK=o((t,e)=>{var r=t.font,i=e.withFont(r);return $i(t.body,i)},"mathmlBuilder$4"),TX={"\\Bbb":"\\mathbb","\\bold":"\\mathbf","\\frak":"\\mathfrak","\\bm":"\\boldsymbol"};Bt({type:"font",names:["\\mathrm","\\mathit","\\mathbf","\\mathnormal","\\mathsfit","\\mathbb","\\mathcal","\\mathfrak","\\mathscr","\\mathsf","\\mathtt","\\Bbb","\\bold","\\frak"],props:{numArgs:1,allowedInArgument:!0},handler:o((t,e)=>{var{parser:r,funcName:i}=t,n=z4(e[0]),a=i;return a in TX&&(a=TX[a]),{type:"font",mode:r.mode,font:a.slice(1),body:n}},"handler"),htmlBuilder:yK,mathmlBuilder:vK});Bt({type:"mclass",names:["\\boldsymbol","\\bm"],props:{numArgs:1},handler:o((t,e)=>{var{parser:r}=t,i=e[0],n=ui.isCharacterBox(i);return{type:"mclass",mode:r.mode,mclass:H4(i),body:[{type:"font",mode:r.mode,font:"boldsymbol",body:i}],isCharacterBox:n}},"handler")});Bt({type:"font",names:["\\rm","\\sf","\\tt","\\bf","\\it","\\cal"],props:{numArgs:0,allowedInText:!0},handler:o((t,e)=>{var{parser:r,funcName:i,breakOnTokenText:n}=t,{mode:a}=r,s=r.parseExpression(!0,n),l="math"+i.slice(1);return{type:"font",mode:a,font:l,body:{type:"ordgroup",mode:r.mode,body:s}}},"handler"),htmlBuilder:yK,mathmlBuilder:vK});xK=o((t,e)=>{var r=e;return t==="display"?r=r.id>=gr.SCRIPT.id?r.text():gr.DISPLAY:t==="text"&&r.size===gr.DISPLAY.size?r=gr.TEXT:t==="script"?r=gr.SCRIPT:t==="scriptscript"&&(r=gr.SCRIPTSCRIPT),r},"adjustStyle"),ZD=o((t,e)=>{var r=xK(t.size,e.style),i=r.fracNum(),n=r.fracDen(),a;a=e.havingStyle(i);var s=ii(t.numer,a,e);if(t.continued){var l=8.5/e.fontMetrics().ptPerEm,u=3.5/e.fontMetrics().ptPerEm;s.height=s.height0?g=3*p:g=7*p,y=e.fontMetrics().denom1):(d>0?(m=e.fontMetrics().num2,g=p):(m=e.fontMetrics().num3,g=3*p),y=e.fontMetrics().denom2);var v;if(f){var b=e.fontMetrics().axisHeight;m-s.depth-(b+.5*d){var r=new Ct.MathNode("mfrac",[$i(t.numer,e),$i(t.denom,e)]);if(!t.hasBarLine)r.setAttribute("linethickness","0px");else if(t.barSize){var i=wn(t.barSize,e);r.setAttribute("linethickness",Rt(i))}var n=xK(t.size,e.style);if(n.size!==e.style.size){r=new Ct.MathNode("mstyle",[r]);var a=n.size===gr.DISPLAY.size?"true":"false";r.setAttribute("displaystyle",a),r.setAttribute("scriptlevel","0")}if(t.leftDelim!=null||t.rightDelim!=null){var s=[];if(t.leftDelim!=null){var l=new Ct.MathNode("mo",[new Ct.TextNode(t.leftDelim.replace("\\",""))]);l.setAttribute("fence","true"),s.push(l)}if(s.push(r),t.rightDelim!=null){var u=new Ct.MathNode("mo",[new Ct.TextNode(t.rightDelim.replace("\\",""))]);u.setAttribute("fence","true"),s.push(u)}return qD(s)}return r},"mathmlBuilder$3");Bt({type:"genfrac",names:["\\dfrac","\\frac","\\tfrac","\\dbinom","\\binom","\\tbinom","\\\\atopfrac","\\\\bracefrac","\\\\brackfrac"],props:{numArgs:2,allowedInArgument:!0},handler:o((t,e)=>{var{parser:r,funcName:i}=t,n=e[0],a=e[1],s,l=null,u=null,h="auto";switch(i){case"\\dfrac":case"\\frac":case"\\tfrac":s=!0;break;case"\\\\atopfrac":s=!1;break;case"\\dbinom":case"\\binom":case"\\tbinom":s=!1,l="(",u=")";break;case"\\\\bracefrac":s=!1,l="\\{",u="\\}";break;case"\\\\brackfrac":s=!1,l="[",u="]";break;default:throw new Error("Unrecognized genfrac command")}switch(i){case"\\dfrac":case"\\dbinom":h="display";break;case"\\tfrac":case"\\tbinom":h="text";break}return{type:"genfrac",mode:r.mode,continued:!1,numer:n,denom:a,hasBarLine:s,leftDelim:l,rightDelim:u,size:h,barSize:null}},"handler"),htmlBuilder:ZD,mathmlBuilder:JD});Bt({type:"genfrac",names:["\\cfrac"],props:{numArgs:2},handler:o((t,e)=>{var{parser:r,funcName:i}=t,n=e[0],a=e[1];return{type:"genfrac",mode:r.mode,continued:!0,numer:n,denom:a,hasBarLine:!0,leftDelim:null,rightDelim:null,size:"display",barSize:null}},"handler")});Bt({type:"infix",names:["\\over","\\choose","\\atop","\\brace","\\brack"],props:{numArgs:0,infix:!0},handler(t){var{parser:e,funcName:r,token:i}=t,n;switch(r){case"\\over":n="\\frac";break;case"\\choose":n="\\binom";break;case"\\atop":n="\\\\atopfrac";break;case"\\brace":n="\\\\bracefrac";break;case"\\brack":n="\\\\brackfrac";break;default:throw new Error("Unrecognized infix genfrac command")}return{type:"infix",mode:e.mode,replaceWith:n,token:i}}});kX=["display","text","script","scriptscript"],CX=o(function(e){var r=null;return e.length>0&&(r=e,r=r==="."?null:r),r},"delimFromValue");Bt({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,allowedInArgument:!0,argTypes:["math","math","size","text","math","math"]},handler(t,e){var{parser:r}=t,i=e[4],n=e[5],a=z4(e[0]),s=a.type==="atom"&&a.family==="open"?CX(a.text):null,l=z4(e[1]),u=l.type==="atom"&&l.family==="close"?CX(l.text):null,h=Gr(e[2],"size"),f,d=null;h.isBlank?f=!0:(d=h.value,f=d.number>0);var p="auto",m=e[3];if(m.type==="ordgroup"){if(m.body.length>0){var g=Gr(m.body[0],"textord");p=kX[Number(g.text)]}}else m=Gr(m,"textord"),p=kX[Number(m.text)];return{type:"genfrac",mode:r.mode,numer:i,denom:n,continued:!1,hasBarLine:f,barSize:d,leftDelim:s,rightDelim:u,size:p}},htmlBuilder:ZD,mathmlBuilder:JD});Bt({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler(t,e){var{parser:r,funcName:i,token:n}=t;return{type:"infix",mode:r.mode,replaceWith:"\\\\abovefrac",size:Gr(e[0],"size").value,token:n}}});Bt({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:o((t,e)=>{var{parser:r,funcName:i}=t,n=e[0],a=mDe(Gr(e[1],"infix").size),s=e[2],l=a.number>0;return{type:"genfrac",mode:r.mode,numer:n,denom:s,continued:!1,hasBarLine:l,barSize:a,leftDelim:null,rightDelim:null,size:"auto"}},"handler"),htmlBuilder:ZD,mathmlBuilder:JD});bK=o((t,e)=>{var r=e.style,i,n;t.type==="supsub"?(i=t.sup?ii(t.sup,e.havingStyle(r.sup()),e):ii(t.sub,e.havingStyle(r.sub()),e),n=Gr(t.base,"horizBrace")):n=Gr(t,"horizBrace");var a=ii(n.base,e.havingBaseStyle(gr.DISPLAY)),s=kh.svgSpan(n,e),l;if(n.isOver?(l=je.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:a},{type:"kern",size:.1},{type:"elem",elem:s}]},e),l.children[0].children[0].children[1].classes.push("svg-align")):(l=je.makeVList({positionType:"bottom",positionData:a.depth+.1+s.height,children:[{type:"elem",elem:s},{type:"kern",size:.1},{type:"elem",elem:a}]},e),l.children[0].children[0].children[0].classes.push("svg-align")),i){var u=je.makeSpan(["mord",n.isOver?"mover":"munder"],[l],e);n.isOver?l=je.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:u},{type:"kern",size:.2},{type:"elem",elem:i}]},e):l=je.makeVList({positionType:"bottom",positionData:u.depth+.2+i.height+i.depth,children:[{type:"elem",elem:i},{type:"kern",size:.2},{type:"elem",elem:u}]},e)}return je.makeSpan(["mord",n.isOver?"mover":"munder"],[l],e)},"htmlBuilder$3"),BLe=o((t,e)=>{var r=kh.mathMLnode(t.label);return new Ct.MathNode(t.isOver?"mover":"munder",[$i(t.base,e),r])},"mathmlBuilder$2");Bt({type:"horizBrace",names:["\\overbrace","\\underbrace"],props:{numArgs:1},handler(t,e){var{parser:r,funcName:i}=t;return{type:"horizBrace",mode:r.mode,label:i,isOver:/^\\over/.test(i),base:e[0]}},htmlBuilder:bK,mathmlBuilder:BLe});Bt({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,i=e[1],n=Gr(e[0],"url").url;return r.settings.isTrusted({command:"\\href",url:n})?{type:"href",mode:r.mode,href:n,body:$n(i)}:r.formatUnsupportedCmd("\\href")},"handler"),htmlBuilder:o((t,e)=>{var r=ca(t.body,e,!1);return je.makeAnchor(t.href,[],r,e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=Pf(t.body,e);return r instanceof Ms||(r=new Ms("mrow",[r])),r.setAttribute("href",t.href),r},"mathmlBuilder")});Bt({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,i=Gr(e[0],"url").url;if(!r.settings.isTrusted({command:"\\url",url:i}))return r.formatUnsupportedCmd("\\url");for(var n=[],a=0;a{var{parser:r,funcName:i,token:n}=t,a=Gr(e[0],"raw").string,s=e[1];r.settings.strict&&r.settings.reportNonstrict("htmlExtension","HTML extension is disabled on strict mode");var l,u={};switch(i){case"\\htmlClass":u.class=a,l={command:"\\htmlClass",class:a};break;case"\\htmlId":u.id=a,l={command:"\\htmlId",id:a};break;case"\\htmlStyle":u.style=a,l={command:"\\htmlStyle",style:a};break;case"\\htmlData":{for(var h=a.split(","),f=0;f{var r=ca(t.body,e,!1),i=["enclosing"];t.attributes.class&&i.push(...t.attributes.class.trim().split(/\s+/));var n=je.makeSpan(i,r,e);for(var a in t.attributes)a!=="class"&&t.attributes.hasOwnProperty(a)&&n.setAttribute(a,t.attributes[a]);return n},"htmlBuilder"),mathmlBuilder:o((t,e)=>Pf(t.body,e),"mathmlBuilder")});Bt({type:"htmlmathml",names:["\\html@mathml"],props:{numArgs:2,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t;return{type:"htmlmathml",mode:r.mode,html:$n(e[0]),mathml:$n(e[1])}},"handler"),htmlBuilder:o((t,e)=>{var r=ca(t.html,e,!1);return je.makeFragment(r)},"htmlBuilder"),mathmlBuilder:o((t,e)=>Pf(t.mathml,e),"mathmlBuilder")});wD=o(function(e){if(/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(e))return{number:+e,unit:"bp"};var r=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(e);if(!r)throw new wt("Invalid size: '"+e+"' in \\includegraphics");var i={number:+(r[1]+r[2]),unit:r[3]};if(!$X(i))throw new wt("Invalid unit: '"+i.unit+"' in \\includegraphics.");return i},"sizeData");Bt({type:"includegraphics",names:["\\includegraphics"],props:{numArgs:1,numOptionalArgs:1,argTypes:["raw","url"],allowedInText:!1},handler:o((t,e,r)=>{var{parser:i}=t,n={number:0,unit:"em"},a={number:.9,unit:"em"},s={number:0,unit:"em"},l="";if(r[0])for(var u=Gr(r[0],"raw").string,h=u.split(","),f=0;f{var r=wn(t.height,e),i=0;t.totalheight.number>0&&(i=wn(t.totalheight,e)-r);var n=0;t.width.number>0&&(n=wn(t.width,e));var a={height:Rt(r+i)};n>0&&(a.width=Rt(n)),i>0&&(a.verticalAlign=Rt(-i));var s=new LD(t.src,t.alt,a);return s.height=r,s.depth=i,s},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=new Ct.MathNode("mglyph",[]);r.setAttribute("alt",t.alt);var i=wn(t.height,e),n=0;if(t.totalheight.number>0&&(n=wn(t.totalheight,e)-i,r.setAttribute("valign",Rt(-n))),r.setAttribute("height",Rt(i+n)),t.width.number>0){var a=wn(t.width,e);r.setAttribute("width",Rt(a))}return r.setAttribute("src",t.src),r},"mathmlBuilder")});Bt({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],primitive:!0,allowedInText:!0},handler(t,e){var{parser:r,funcName:i}=t,n=Gr(e[0],"size");if(r.settings.strict){var a=i[1]==="m",s=n.value.unit==="mu";a?(s||r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+i+" supports only mu units, "+("not "+n.value.unit+" units")),r.mode!=="math"&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+i+" works only in math mode")):s&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+i+" doesn't support mu units")}return{type:"kern",mode:r.mode,dimension:n.value}},htmlBuilder(t,e){return je.makeGlue(t.dimension,e)},mathmlBuilder(t,e){var r=wn(t.dimension,e);return new Ct.SpaceNode(r)}});Bt({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r,funcName:i}=t,n=e[0];return{type:"lap",mode:r.mode,alignment:i.slice(5),body:n}},"handler"),htmlBuilder:o((t,e)=>{var r;t.alignment==="clap"?(r=je.makeSpan([],[ii(t.body,e)]),r=je.makeSpan(["inner"],[r],e)):r=je.makeSpan(["inner"],[ii(t.body,e)]);var i=je.makeSpan(["fix"],[]),n=je.makeSpan([t.alignment],[r,i],e),a=je.makeSpan(["strut"]);return a.style.height=Rt(n.height+n.depth),n.depth&&(a.style.verticalAlign=Rt(-n.depth)),n.children.unshift(a),n=je.makeSpan(["thinbox"],[n],e),je.makeSpan(["mord","vbox"],[n],e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=new Ct.MathNode("mpadded",[$i(t.body,e)]);if(t.alignment!=="rlap"){var i=t.alignment==="llap"?"-1":"-0.5";r.setAttribute("lspace",i+"width")}return r.setAttribute("width","0px"),r},"mathmlBuilder")});Bt({type:"styling",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(t,e){var{funcName:r,parser:i}=t,n=i.mode;i.switchMode("math");var a=r==="\\("?"\\)":"$",s=i.parseExpression(!1,a);return i.expect(a),i.switchMode(n),{type:"styling",mode:i.mode,style:"text",body:s}}});Bt({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(t,e){throw new wt("Mismatched "+t.funcName)}});wX=o((t,e)=>{switch(e.style.size){case gr.DISPLAY.size:return t.display;case gr.TEXT.size:return t.text;case gr.SCRIPT.size:return t.script;case gr.SCRIPTSCRIPT.size:return t.scriptscript;default:return t.text}},"chooseMathStyle");Bt({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4,primitive:!0},handler:o((t,e)=>{var{parser:r}=t;return{type:"mathchoice",mode:r.mode,display:$n(e[0]),text:$n(e[1]),script:$n(e[2]),scriptscript:$n(e[3])}},"handler"),htmlBuilder:o((t,e)=>{var r=wX(t,e),i=ca(r,e,!1);return je.makeFragment(i)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=wX(t,e);return Pf(r,e)},"mathmlBuilder")});TK=o((t,e,r,i,n,a,s)=>{t=je.makeSpan([],[t]);var l=r&&ui.isCharacterBox(r),u,h;if(e){var f=ii(e,i.havingStyle(n.sup()),i);h={elem:f,kern:Math.max(i.fontMetrics().bigOpSpacing1,i.fontMetrics().bigOpSpacing3-f.depth)}}if(r){var d=ii(r,i.havingStyle(n.sub()),i);u={elem:d,kern:Math.max(i.fontMetrics().bigOpSpacing2,i.fontMetrics().bigOpSpacing4-d.height)}}var p;if(h&&u){var m=i.fontMetrics().bigOpSpacing5+u.elem.height+u.elem.depth+u.kern+t.depth+s;p=je.makeVList({positionType:"bottom",positionData:m,children:[{type:"kern",size:i.fontMetrics().bigOpSpacing5},{type:"elem",elem:u.elem,marginLeft:Rt(-a)},{type:"kern",size:u.kern},{type:"elem",elem:t},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:Rt(a)},{type:"kern",size:i.fontMetrics().bigOpSpacing5}]},i)}else if(u){var g=t.height-s;p=je.makeVList({positionType:"top",positionData:g,children:[{type:"kern",size:i.fontMetrics().bigOpSpacing5},{type:"elem",elem:u.elem,marginLeft:Rt(-a)},{type:"kern",size:u.kern},{type:"elem",elem:t}]},i)}else if(h){var y=t.depth+s;p=je.makeVList({positionType:"bottom",positionData:y,children:[{type:"elem",elem:t},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:Rt(a)},{type:"kern",size:i.fontMetrics().bigOpSpacing5}]},i)}else return t;var v=[p];if(u&&a!==0&&!l){var x=je.makeSpan(["mspace"],[],i);x.style.marginRight=Rt(a),v.unshift(x)}return je.makeSpan(["mop","op-limits"],v,i)},"assembleSupSub"),kK=["\\smallint"],Lg=o((t,e)=>{var r,i,n=!1,a;t.type==="supsub"?(r=t.sup,i=t.sub,a=Gr(t.base,"op"),n=!0):a=Gr(t,"op");var s=e.style,l=!1;s.size===gr.DISPLAY.size&&a.symbol&&!kK.includes(a.name)&&(l=!0);var u;if(a.symbol){var h=l?"Size2-Regular":"Size1-Regular",f="";if((a.name==="\\oiint"||a.name==="\\oiiint")&&(f=a.name.slice(1),a.name=f==="oiint"?"\\iint":"\\iiint"),u=je.makeSymbol(a.name,h,"math",e,["mop","op-symbol",l?"large-op":"small-op"]),f.length>0){var d=u.italic,p=je.staticSvg(f+"Size"+(l?"2":"1"),e);u=je.makeVList({positionType:"individualShift",children:[{type:"elem",elem:u,shift:0},{type:"elem",elem:p,shift:l?.08:0}]},e),a.name="\\"+f,u.classes.unshift("mop"),u.italic=d}}else if(a.body){var m=ca(a.body,e,!0);m.length===1&&m[0]instanceof uo?(u=m[0],u.classes[0]="mop"):u=je.makeSpan(["mop"],m,e)}else{for(var g=[],y=1;y{var r;if(t.symbol)r=new Ms("mo",[wl(t.name,t.mode)]),kK.includes(t.name)&&r.setAttribute("largeop","false");else if(t.body)r=new Ms("mo",ho(t.body,e));else{r=new Ms("mi",[new Cl(t.name.slice(1))]);var i=new Ms("mo",[wl("\u2061","text")]);t.parentIsSupSub?r=new Ms("mrow",[r,i]):r=KX([r,i])}return r},"mathmlBuilder$1"),FLe={"\u220F":"\\prod","\u2210":"\\coprod","\u2211":"\\sum","\u22C0":"\\bigwedge","\u22C1":"\\bigvee","\u22C2":"\\bigcap","\u22C3":"\\bigcup","\u2A00":"\\bigodot","\u2A01":"\\bigoplus","\u2A02":"\\bigotimes","\u2A04":"\\biguplus","\u2A06":"\\bigsqcup"};Bt({type:"op",names:["\\coprod","\\bigvee","\\bigwedge","\\biguplus","\\bigcap","\\bigcup","\\intop","\\prod","\\sum","\\bigotimes","\\bigoplus","\\bigodot","\\bigsqcup","\\smallint","\u220F","\u2210","\u2211","\u22C0","\u22C1","\u22C2","\u22C3","\u2A00","\u2A01","\u2A02","\u2A04","\u2A06"],props:{numArgs:0},handler:o((t,e)=>{var{parser:r,funcName:i}=t,n=i;return n.length===1&&(n=FLe[n]),{type:"op",mode:r.mode,limits:!0,parentIsSupSub:!1,symbol:!0,name:n}},"handler"),htmlBuilder:Lg,mathmlBuilder:Qx});Bt({type:"op",names:["\\mathop"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var{parser:r}=t,i=e[0];return{type:"op",mode:r.mode,limits:!1,parentIsSupSub:!1,symbol:!1,body:$n(i)}},"handler"),htmlBuilder:Lg,mathmlBuilder:Qx});$Le={"\u222B":"\\int","\u222C":"\\iint","\u222D":"\\iiint","\u222E":"\\oint","\u222F":"\\oiint","\u2230":"\\oiiint"};Bt({type:"op",names:["\\arcsin","\\arccos","\\arctan","\\arctg","\\arcctg","\\arg","\\ch","\\cos","\\cosec","\\cosh","\\cot","\\cotg","\\coth","\\csc","\\ctg","\\cth","\\deg","\\dim","\\exp","\\hom","\\ker","\\lg","\\ln","\\log","\\sec","\\sin","\\sinh","\\sh","\\tan","\\tanh","\\tg","\\th"],props:{numArgs:0},handler(t){var{parser:e,funcName:r}=t;return{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:Lg,mathmlBuilder:Qx});Bt({type:"op",names:["\\det","\\gcd","\\inf","\\lim","\\max","\\min","\\Pr","\\sup"],props:{numArgs:0},handler(t){var{parser:e,funcName:r}=t;return{type:"op",mode:e.mode,limits:!0,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:Lg,mathmlBuilder:Qx});Bt({type:"op",names:["\\int","\\iint","\\iiint","\\oint","\\oiint","\\oiiint","\u222B","\u222C","\u222D","\u222E","\u222F","\u2230"],props:{numArgs:0},handler(t){var{parser:e,funcName:r}=t,i=r;return i.length===1&&(i=$Le[i]),{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!0,name:i}},htmlBuilder:Lg,mathmlBuilder:Qx});CK=o((t,e)=>{var r,i,n=!1,a;t.type==="supsub"?(r=t.sup,i=t.sub,a=Gr(t.base,"operatorname"),n=!0):a=Gr(t,"operatorname");var s;if(a.body.length>0){for(var l=a.body.map(d=>{var p=d.text;return typeof p=="string"?{type:"textord",mode:d.mode,text:p}:d}),u=ca(l,e.withFont("mathrm"),!0),h=0;h{for(var r=ho(t.body,e.withFont("mathrm")),i=!0,n=0;nf.toText()).join("");r=[new Ct.TextNode(l)]}var u=new Ct.MathNode("mi",r);u.setAttribute("mathvariant","normal");var h=new Ct.MathNode("mo",[wl("\u2061","text")]);return t.parentIsSupSub?new Ct.MathNode("mrow",[u,h]):Ct.newDocumentFragment([u,h])},"mathmlBuilder");Bt({type:"operatorname",names:["\\operatorname@","\\operatornamewithlimits"],props:{numArgs:1},handler:o((t,e)=>{var{parser:r,funcName:i}=t,n=e[0];return{type:"operatorname",mode:r.mode,body:$n(n),alwaysHandleSupSub:i==="\\operatornamewithlimits",limits:!1,parentIsSupSub:!1}},"handler"),htmlBuilder:CK,mathmlBuilder:zLe});he("\\operatorname","\\@ifstar\\operatornamewithlimits\\operatorname@");Up({type:"ordgroup",htmlBuilder(t,e){return t.semisimple?je.makeFragment(ca(t.body,e,!1)):je.makeSpan(["mord"],ca(t.body,e,!0),e)},mathmlBuilder(t,e){return Pf(t.body,e,!0)}});Bt({type:"overline",names:["\\overline"],props:{numArgs:1},handler(t,e){var{parser:r}=t,i=e[0];return{type:"overline",mode:r.mode,body:i}},htmlBuilder(t,e){var r=ii(t.body,e.havingCrampedStyle()),i=je.makeLineSpan("overline-line",e),n=e.fontMetrics().defaultRuleThickness,a=je.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r},{type:"kern",size:3*n},{type:"elem",elem:i},{type:"kern",size:n}]},e);return je.makeSpan(["mord","overline"],[a],e)},mathmlBuilder(t,e){var r=new Ct.MathNode("mo",[new Ct.TextNode("\u203E")]);r.setAttribute("stretchy","true");var i=new Ct.MathNode("mover",[$i(t.body,e),r]);return i.setAttribute("accent","true"),i}});Bt({type:"phantom",names:["\\phantom"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,i=e[0];return{type:"phantom",mode:r.mode,body:$n(i)}},"handler"),htmlBuilder:o((t,e)=>{var r=ca(t.body,e.withPhantom(),!1);return je.makeFragment(r)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=ho(t.body,e);return new Ct.MathNode("mphantom",r)},"mathmlBuilder")});Bt({type:"hphantom",names:["\\hphantom"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,i=e[0];return{type:"hphantom",mode:r.mode,body:i}},"handler"),htmlBuilder:o((t,e)=>{var r=je.makeSpan([],[ii(t.body,e.withPhantom())]);if(r.height=0,r.depth=0,r.children)for(var i=0;i{var r=ho($n(t.body),e),i=new Ct.MathNode("mphantom",r),n=new Ct.MathNode("mpadded",[i]);return n.setAttribute("height","0px"),n.setAttribute("depth","0px"),n},"mathmlBuilder")});Bt({type:"vphantom",names:["\\vphantom"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,i=e[0];return{type:"vphantom",mode:r.mode,body:i}},"handler"),htmlBuilder:o((t,e)=>{var r=je.makeSpan(["inner"],[ii(t.body,e.withPhantom())]),i=je.makeSpan(["fix"],[]);return je.makeSpan(["mord","rlap"],[r,i],e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=ho($n(t.body),e),i=new Ct.MathNode("mphantom",r),n=new Ct.MathNode("mpadded",[i]);return n.setAttribute("width","0px"),n},"mathmlBuilder")});Bt({type:"raisebox",names:["\\raisebox"],props:{numArgs:2,argTypes:["size","hbox"],allowedInText:!0},handler(t,e){var{parser:r}=t,i=Gr(e[0],"size").value,n=e[1];return{type:"raisebox",mode:r.mode,dy:i,body:n}},htmlBuilder(t,e){var r=ii(t.body,e),i=wn(t.dy,e);return je.makeVList({positionType:"shift",positionData:-i,children:[{type:"elem",elem:r}]},e)},mathmlBuilder(t,e){var r=new Ct.MathNode("mpadded",[$i(t.body,e)]),i=t.dy.number+t.dy.unit;return r.setAttribute("voffset",i),r}});Bt({type:"internal",names:["\\relax"],props:{numArgs:0,allowedInText:!0,allowedInArgument:!0},handler(t){var{parser:e}=t;return{type:"internal",mode:e.mode}}});Bt({type:"rule",names:["\\rule"],props:{numArgs:2,numOptionalArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["size","size","size"]},handler(t,e,r){var{parser:i}=t,n=r[0],a=Gr(e[0],"size"),s=Gr(e[1],"size");return{type:"rule",mode:i.mode,shift:n&&Gr(n,"size").value,width:a.value,height:s.value}},htmlBuilder(t,e){var r=je.makeSpan(["mord","rule"],[],e),i=wn(t.width,e),n=wn(t.height,e),a=t.shift?wn(t.shift,e):0;return r.style.borderRightWidth=Rt(i),r.style.borderTopWidth=Rt(n),r.style.bottom=Rt(a),r.width=i,r.height=n+a,r.depth=-a,r.maxFontSize=n*1.125*e.sizeMultiplier,r},mathmlBuilder(t,e){var r=wn(t.width,e),i=wn(t.height,e),n=t.shift?wn(t.shift,e):0,a=e.color&&e.getColor()||"black",s=new Ct.MathNode("mspace");s.setAttribute("mathbackground",a),s.setAttribute("width",Rt(r)),s.setAttribute("height",Rt(i));var l=new Ct.MathNode("mpadded",[s]);return n>=0?l.setAttribute("height",Rt(n)):(l.setAttribute("height",Rt(n)),l.setAttribute("depth",Rt(-n))),l.setAttribute("voffset",Rt(n)),l}});o(wK,"sizingGroup");EX=["\\tiny","\\sixptsize","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"],GLe=o((t,e)=>{var r=e.havingSize(t.size);return wK(t.body,r,e)},"htmlBuilder");Bt({type:"sizing",names:EX,props:{numArgs:0,allowedInText:!0},handler:o((t,e)=>{var{breakOnTokenText:r,funcName:i,parser:n}=t,a=n.parseExpression(!1,r);return{type:"sizing",mode:n.mode,size:EX.indexOf(i)+1,body:a}},"handler"),htmlBuilder:GLe,mathmlBuilder:o((t,e)=>{var r=e.havingSize(t.size),i=ho(t.body,r),n=new Ct.MathNode("mstyle",i);return n.setAttribute("mathsize",Rt(r.sizeMultiplier)),n},"mathmlBuilder")});Bt({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:o((t,e,r)=>{var{parser:i}=t,n=!1,a=!1,s=r[0]&&Gr(r[0],"ordgroup");if(s)for(var l="",u=0;u{var r=je.makeSpan([],[ii(t.body,e)]);if(!t.smashHeight&&!t.smashDepth)return r;if(t.smashHeight&&(r.height=0,r.children))for(var i=0;i{var r=new Ct.MathNode("mpadded",[$i(t.body,e)]);return t.smashHeight&&r.setAttribute("height","0px"),t.smashDepth&&r.setAttribute("depth","0px"),r},"mathmlBuilder")});Bt({type:"sqrt",names:["\\sqrt"],props:{numArgs:1,numOptionalArgs:1},handler(t,e,r){var{parser:i}=t,n=r[0],a=e[0];return{type:"sqrt",mode:i.mode,body:a,index:n}},htmlBuilder(t,e){var r=ii(t.body,e.havingCrampedStyle());r.height===0&&(r.height=e.fontMetrics().xHeight),r=je.wrapFragment(r,e);var i=e.fontMetrics(),n=i.defaultRuleThickness,a=n;e.style.idr.height+r.depth+s&&(s=(s+d-r.height-r.depth)/2);var p=u.height-r.height-s-h;r.style.paddingLeft=Rt(f);var m=je.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r,wrapperClasses:["svg-align"]},{type:"kern",size:-(r.height+p)},{type:"elem",elem:u},{type:"kern",size:h}]},e);if(t.index){var g=e.havingStyle(gr.SCRIPTSCRIPT),y=ii(t.index,g,e),v=.6*(m.height-m.depth),x=je.makeVList({positionType:"shift",positionData:-v,children:[{type:"elem",elem:y}]},e),b=je.makeSpan(["root"],[x]);return je.makeSpan(["mord","sqrt"],[b,m],e)}else return je.makeSpan(["mord","sqrt"],[m],e)},mathmlBuilder(t,e){var{body:r,index:i}=t;return i?new Ct.MathNode("mroot",[$i(r,e),$i(i,e)]):new Ct.MathNode("msqrt",[$i(r,e)])}});SX={display:gr.DISPLAY,text:gr.TEXT,script:gr.SCRIPT,scriptscript:gr.SCRIPTSCRIPT};Bt({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t,e){var{breakOnTokenText:r,funcName:i,parser:n}=t,a=n.parseExpression(!0,r),s=i.slice(1,i.length-5);return{type:"styling",mode:n.mode,style:s,body:a}},htmlBuilder(t,e){var r=SX[t.style],i=e.havingStyle(r).withFont("");return wK(t.body,i,e)},mathmlBuilder(t,e){var r=SX[t.style],i=e.havingStyle(r),n=ho(t.body,i),a=new Ct.MathNode("mstyle",n),s={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]},l=s[t.style];return a.setAttribute("scriptlevel",l[0]),a.setAttribute("displaystyle",l[1]),a}});VLe=o(function(e,r){var i=e.base;if(i)if(i.type==="op"){var n=i.limits&&(r.style.size===gr.DISPLAY.size||i.alwaysHandleSupSub);return n?Lg:null}else if(i.type==="operatorname"){var a=i.alwaysHandleSupSub&&(r.style.size===gr.DISPLAY.size||i.limits);return a?CK:null}else{if(i.type==="accent")return ui.isCharacterBox(i.base)?HD:null;if(i.type==="horizBrace"){var s=!e.sub;return s===i.isOver?bK:null}else return null}else return null},"htmlBuilderDelegate");Up({type:"supsub",htmlBuilder(t,e){var r=VLe(t,e);if(r)return r(t,e);var{base:i,sup:n,sub:a}=t,s=ii(i,e),l,u,h=e.fontMetrics(),f=0,d=0,p=i&&ui.isCharacterBox(i);if(n){var m=e.havingStyle(e.style.sup());l=ii(n,m,e),p||(f=s.height-m.fontMetrics().supDrop*m.sizeMultiplier/e.sizeMultiplier)}if(a){var g=e.havingStyle(e.style.sub());u=ii(a,g,e),p||(d=s.depth+g.fontMetrics().subDrop*g.sizeMultiplier/e.sizeMultiplier)}var y;e.style===gr.DISPLAY?y=h.sup1:e.style.cramped?y=h.sup3:y=h.sup2;var v=e.sizeMultiplier,x=Rt(.5/h.ptPerEm/v),b=null;if(u){var T=t.base&&t.base.type==="op"&&t.base.name&&(t.base.name==="\\oiint"||t.base.name==="\\oiiint");(s instanceof uo||T)&&(b=Rt(-s.italic))}var w;if(l&&u){f=Math.max(f,y,l.depth+.25*h.xHeight),d=Math.max(d,h.sub2);var k=h.defaultRuleThickness,C=4*k;if(f-l.depth-(u.height-d)0&&(f+=E,d-=E)}var S=[{type:"elem",elem:u,shift:d,marginRight:x,marginLeft:b},{type:"elem",elem:l,shift:-f,marginRight:x}];w=je.makeVList({positionType:"individualShift",children:S},e)}else if(u){d=Math.max(d,h.sub1,u.height-.8*h.xHeight);var L=[{type:"elem",elem:u,marginLeft:b,marginRight:x}];w=je.makeVList({positionType:"shift",positionData:d,children:L},e)}else if(l)f=Math.max(f,y,l.depth+.25*h.xHeight),w=je.makeVList({positionType:"shift",positionData:-f,children:[{type:"elem",elem:l,marginRight:x}]},e);else throw new Error("supsub must have either sup or sub.");var M=ND(s,"right")||"mord";return je.makeSpan([M],[s,je.makeSpan(["msupsub"],[w])],e)},mathmlBuilder(t,e){var r=!1,i,n;t.base&&t.base.type==="horizBrace"&&(n=!!t.sup,n===t.base.isOver&&(r=!0,i=t.base.isOver)),t.base&&(t.base.type==="op"||t.base.type==="operatorname")&&(t.base.parentIsSupSub=!0);var a=[$i(t.base,e)];t.sub&&a.push($i(t.sub,e)),t.sup&&a.push($i(t.sup,e));var s;if(r)s=i?"mover":"munder";else if(t.sub)if(t.sup){var h=t.base;h&&h.type==="op"&&h.limits&&e.style===gr.DISPLAY||h&&h.type==="operatorname"&&h.alwaysHandleSupSub&&(e.style===gr.DISPLAY||h.limits)?s="munderover":s="msubsup"}else{var u=t.base;u&&u.type==="op"&&u.limits&&(e.style===gr.DISPLAY||u.alwaysHandleSupSub)||u&&u.type==="operatorname"&&u.alwaysHandleSupSub&&(u.limits||e.style===gr.DISPLAY)?s="munder":s="msub"}else{var l=t.base;l&&l.type==="op"&&l.limits&&(e.style===gr.DISPLAY||l.alwaysHandleSupSub)||l&&l.type==="operatorname"&&l.alwaysHandleSupSub&&(l.limits||e.style===gr.DISPLAY)?s="mover":s="msup"}return new Ct.MathNode(s,a)}});Up({type:"atom",htmlBuilder(t,e){return je.mathsym(t.text,t.mode,e,["m"+t.family])},mathmlBuilder(t,e){var r=new Ct.MathNode("mo",[wl(t.text,t.mode)]);if(t.family==="bin"){var i=WD(t,e);i==="bold-italic"&&r.setAttribute("mathvariant",i)}else t.family==="punct"?r.setAttribute("separator","true"):(t.family==="open"||t.family==="close")&&r.setAttribute("stretchy","false");return r}});EK={mi:"italic",mn:"normal",mtext:"normal"};Up({type:"mathord",htmlBuilder(t,e){return je.makeOrd(t,e,"mathord")},mathmlBuilder(t,e){var r=new Ct.MathNode("mi",[wl(t.text,t.mode,e)]),i=WD(t,e)||"italic";return i!==EK[r.type]&&r.setAttribute("mathvariant",i),r}});Up({type:"textord",htmlBuilder(t,e){return je.makeOrd(t,e,"textord")},mathmlBuilder(t,e){var r=wl(t.text,t.mode,e),i=WD(t,e)||"normal",n;return t.mode==="text"?n=new Ct.MathNode("mtext",[r]):/[0-9]/.test(t.text)?n=new Ct.MathNode("mn",[r]):t.text==="\\prime"?n=new Ct.MathNode("mo",[r]):n=new Ct.MathNode("mi",[r]),i!==EK[n.type]&&n.setAttribute("mathvariant",i),n}});ED={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},SD={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};Up({type:"spacing",htmlBuilder(t,e){if(SD.hasOwnProperty(t.text)){var r=SD[t.text].className||"";if(t.mode==="text"){var i=je.makeOrd(t,e,"textord");return i.classes.push(r),i}else return je.makeSpan(["mspace",r],[je.mathsym(t.text,t.mode,e)],e)}else{if(ED.hasOwnProperty(t.text))return je.makeSpan(["mspace",ED[t.text]],[],e);throw new wt('Unknown type of space "'+t.text+'"')}},mathmlBuilder(t,e){var r;if(SD.hasOwnProperty(t.text))r=new Ct.MathNode("mtext",[new Ct.TextNode("\xA0")]);else{if(ED.hasOwnProperty(t.text))return new Ct.MathNode("mspace");throw new wt('Unknown type of space "'+t.text+'"')}return r}});AX=o(()=>{var t=new Ct.MathNode("mtd",[]);return t.setAttribute("width","50%"),t},"pad");Up({type:"tag",mathmlBuilder(t,e){var r=new Ct.MathNode("mtable",[new Ct.MathNode("mtr",[AX(),new Ct.MathNode("mtd",[Pf(t.body,e)]),AX(),new Ct.MathNode("mtd",[Pf(t.tag,e)])])]);return r.setAttribute("width","100%"),r}});_X={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm"},DX={"\\textbf":"textbf","\\textmd":"textmd"},qLe={"\\textit":"textit","\\textup":"textup"},LX=o((t,e)=>{var r=t.font;if(r){if(_X[r])return e.withTextFontFamily(_X[r]);if(DX[r])return e.withTextFontWeight(DX[r]);if(r==="\\emph")return e.fontShape==="textit"?e.withTextFontShape("textup"):e.withTextFontShape("textit")}else return e;return e.withTextFontShape(qLe[r])},"optionsWithFont");Bt({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textmd","\\textit","\\textup","\\emph"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler(t,e){var{parser:r,funcName:i}=t,n=e[0];return{type:"text",mode:r.mode,body:$n(n),font:i}},htmlBuilder(t,e){var r=LX(t,e),i=ca(t.body,r,!0);return je.makeSpan(["mord","text"],i,r)},mathmlBuilder(t,e){var r=LX(t,e);return Pf(t.body,r)}});Bt({type:"underline",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler(t,e){var{parser:r}=t;return{type:"underline",mode:r.mode,body:e[0]}},htmlBuilder(t,e){var r=ii(t.body,e),i=je.makeLineSpan("underline-line",e),n=e.fontMetrics().defaultRuleThickness,a=je.makeVList({positionType:"top",positionData:r.height,children:[{type:"kern",size:n},{type:"elem",elem:i},{type:"kern",size:3*n},{type:"elem",elem:r}]},e);return je.makeSpan(["mord","underline"],[a],e)},mathmlBuilder(t,e){var r=new Ct.MathNode("mo",[new Ct.TextNode("\u203E")]);r.setAttribute("stretchy","true");var i=new Ct.MathNode("munder",[$i(t.body,e),r]);return i.setAttribute("accentunder","true"),i}});Bt({type:"vcenter",names:["\\vcenter"],props:{numArgs:1,argTypes:["original"],allowedInText:!1},handler(t,e){var{parser:r}=t;return{type:"vcenter",mode:r.mode,body:e[0]}},htmlBuilder(t,e){var r=ii(t.body,e),i=e.fontMetrics().axisHeight,n=.5*(r.height-i-(r.depth+i));return je.makeVList({positionType:"shift",positionData:n,children:[{type:"elem",elem:r}]},e)},mathmlBuilder(t,e){return new Ct.MathNode("mpadded",[$i(t.body,e)],["vcenter"])}});Bt({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler(t,e,r){throw new wt("\\verb ended by end of line instead of matching delimiter")},htmlBuilder(t,e){for(var r=RX(t),i=[],n=e.havingStyle(e.style.text()),a=0;at.body.replace(/ /g,t.star?"\u2423":"\xA0"),"makeVerb"),Mf=jX,SK=`[ \r + ]`,WLe="\\\\[a-zA-Z@]+",ULe="\\\\[^\uD800-\uDFFF]",HLe="("+WLe+")"+SK+"*",YLe=`\\\\( +|[ \r ]+ +?)[ \r ]*`,BD="[\u0300-\u036F]",jLe=new RegExp(BD+"+$"),XLe="("+SK+"+)|"+(YLe+"|")+"([!-\\[\\]-\u2027\u202A-\uD7FF\uF900-\uFFFF]"+(BD+"*")+"|[\uD800-\uDBFF][\uDC00-\uDFFF]"+(BD+"*")+"|\\\\verb\\*([^]).*?\\4|\\\\verb([^*a-zA-Z]).*?\\5"+("|"+HLe)+("|"+ULe+")"),G4=class{static{o(this,"Lexer")}constructor(e,r){this.input=void 0,this.settings=void 0,this.tokenRegex=void 0,this.catcodes=void 0,this.input=e,this.settings=r,this.tokenRegex=new RegExp(XLe,"g"),this.catcodes={"%":14,"~":13}}setCatcode(e,r){this.catcodes[e]=r}lex(){var e=this.input,r=this.tokenRegex.lastIndex;if(r===e.length)return new Ho("EOF",new co(this,r,r));var i=this.tokenRegex.exec(e);if(i===null||i.index!==r)throw new wt("Unexpected character: '"+e[r]+"'",new Ho(e[r],new co(this,r,r+1)));var n=i[6]||i[3]||(i[2]?"\\ ":" ");if(this.catcodes[n]===14){var a=e.indexOf(` +`,this.tokenRegex.lastIndex);return a===-1?(this.tokenRegex.lastIndex=e.length,this.settings.reportNonstrict("commentAtEnd","% comment has no terminating newline; LaTeX would fail because of commenting the end of math mode (e.g. $)")):this.tokenRegex.lastIndex=a+1,this.lex()}return new Ho(n,new co(this,r,this.tokenRegex.lastIndex))}},FD=class{static{o(this,"Namespace")}constructor(e,r){e===void 0&&(e={}),r===void 0&&(r={}),this.current=void 0,this.builtins=void 0,this.undefStack=void 0,this.current=r,this.builtins=e,this.undefStack=[]}beginGroup(){this.undefStack.push({})}endGroup(){if(this.undefStack.length===0)throw new wt("Unbalanced namespace destruction: attempt to pop global namespace; please report this as a bug");var e=this.undefStack.pop();for(var r in e)e.hasOwnProperty(r)&&(e[r]==null?delete this.current[r]:this.current[r]=e[r])}endGroups(){for(;this.undefStack.length>0;)this.endGroup()}has(e){return this.current.hasOwnProperty(e)||this.builtins.hasOwnProperty(e)}get(e){return this.current.hasOwnProperty(e)?this.current[e]:this.builtins[e]}set(e,r,i){if(i===void 0&&(i=!1),i){for(var n=0;n0&&(this.undefStack[this.undefStack.length-1][e]=r)}else{var a=this.undefStack[this.undefStack.length-1];a&&!a.hasOwnProperty(e)&&(a[e]=this.current[e])}r==null?delete this.current[e]:this.current[e]=r}},KLe=mK;he("\\noexpand",function(t){var e=t.popToken();return t.isExpandable(e.text)&&(e.noexpand=!0,e.treatAsRelax=!0),{tokens:[e],numArgs:0}});he("\\expandafter",function(t){var e=t.popToken();return t.expandOnce(!0),{tokens:[e],numArgs:0}});he("\\@firstoftwo",function(t){var e=t.consumeArgs(2);return{tokens:e[0],numArgs:0}});he("\\@secondoftwo",function(t){var e=t.consumeArgs(2);return{tokens:e[1],numArgs:0}});he("\\@ifnextchar",function(t){var e=t.consumeArgs(3);t.consumeSpaces();var r=t.future();return e[0].length===1&&e[0][0].text===r.text?{tokens:e[1],numArgs:0}:{tokens:e[2],numArgs:0}});he("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}");he("\\TextOrMath",function(t){var e=t.consumeArgs(2);return t.mode==="text"?{tokens:e[0],numArgs:0}:{tokens:e[1],numArgs:0}});NX={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};he("\\char",function(t){var e=t.popToken(),r,i="";if(e.text==="'")r=8,e=t.popToken();else if(e.text==='"')r=16,e=t.popToken();else if(e.text==="`")if(e=t.popToken(),e.text[0]==="\\")i=e.text.charCodeAt(1);else{if(e.text==="EOF")throw new wt("\\char` missing argument");i=e.text.charCodeAt(0)}else r=10;if(r){if(i=NX[e.text],i==null||i>=r)throw new wt("Invalid base-"+r+" digit "+e.text);for(var n;(n=NX[t.future().text])!=null&&n{var n=t.consumeArg().tokens;if(n.length!==1)throw new wt("\\newcommand's first argument must be a macro name");var a=n[0].text,s=t.isDefined(a);if(s&&!e)throw new wt("\\newcommand{"+a+"} attempting to redefine "+(a+"; use \\renewcommand"));if(!s&&!r)throw new wt("\\renewcommand{"+a+"} when command "+a+" does not yet exist; use \\newcommand");var l=0;if(n=t.consumeArg().tokens,n.length===1&&n[0].text==="["){for(var u="",h=t.expandNextToken();h.text!=="]"&&h.text!=="EOF";)u+=h.text,h=t.expandNextToken();if(!u.match(/^\s*[0-9]+\s*$/))throw new wt("Invalid number of arguments: "+u);l=parseInt(u),n=t.consumeArg().tokens}return s&&i||t.macros.set(a,{tokens:n,numArgs:l}),""},"newcommand");he("\\newcommand",t=>eL(t,!1,!0,!1));he("\\renewcommand",t=>eL(t,!0,!1,!1));he("\\providecommand",t=>eL(t,!0,!0,!0));he("\\message",t=>{var e=t.consumeArgs(1)[0];return console.log(e.reverse().map(r=>r.text).join("")),""});he("\\errmessage",t=>{var e=t.consumeArgs(1)[0];return console.error(e.reverse().map(r=>r.text).join("")),""});he("\\show",t=>{var e=t.popToken(),r=e.text;return console.log(e,t.macros.get(r),Mf[r],ji.math[r],ji.text[r]),""});he("\\bgroup","{");he("\\egroup","}");he("~","\\nobreakspace");he("\\lq","`");he("\\rq","'");he("\\aa","\\r a");he("\\AA","\\r A");he("\\textcopyright","\\html@mathml{\\textcircled{c}}{\\char`\xA9}");he("\\copyright","\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}");he("\\textregistered","\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`\xAE}");he("\u212C","\\mathscr{B}");he("\u2130","\\mathscr{E}");he("\u2131","\\mathscr{F}");he("\u210B","\\mathscr{H}");he("\u2110","\\mathscr{I}");he("\u2112","\\mathscr{L}");he("\u2133","\\mathscr{M}");he("\u211B","\\mathscr{R}");he("\u212D","\\mathfrak{C}");he("\u210C","\\mathfrak{H}");he("\u2128","\\mathfrak{Z}");he("\\Bbbk","\\Bbb{k}");he("\xB7","\\cdotp");he("\\llap","\\mathllap{\\textrm{#1}}");he("\\rlap","\\mathrlap{\\textrm{#1}}");he("\\clap","\\mathclap{\\textrm{#1}}");he("\\mathstrut","\\vphantom{(}");he("\\underbar","\\underline{\\text{#1}}");he("\\not",'\\html@mathml{\\mathrel{\\mathrlap\\@not}}{\\char"338}');he("\\neq","\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`\u2260}}");he("\\ne","\\neq");he("\u2260","\\neq");he("\\notin","\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}{\\mathrel{\\char`\u2209}}");he("\u2209","\\notin");he("\u2258","\\html@mathml{\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}}{\\mathrel{\\char`\u2258}}");he("\u2259","\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`\u2258}}");he("\u225A","\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`\u225A}}");he("\u225B","\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}{\\mathrel{\\char`\u225B}}");he("\u225D","\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}{\\mathrel{\\char`\u225D}}");he("\u225E","\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}{\\mathrel{\\char`\u225E}}");he("\u225F","\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`\u225F}}");he("\u27C2","\\perp");he("\u203C","\\mathclose{!\\mkern-0.8mu!}");he("\u220C","\\notni");he("\u231C","\\ulcorner");he("\u231D","\\urcorner");he("\u231E","\\llcorner");he("\u231F","\\lrcorner");he("\xA9","\\copyright");he("\xAE","\\textregistered");he("\uFE0F","\\textregistered");he("\\ulcorner",'\\html@mathml{\\@ulcorner}{\\mathop{\\char"231c}}');he("\\urcorner",'\\html@mathml{\\@urcorner}{\\mathop{\\char"231d}}');he("\\llcorner",'\\html@mathml{\\@llcorner}{\\mathop{\\char"231e}}');he("\\lrcorner",'\\html@mathml{\\@lrcorner}{\\mathop{\\char"231f}}');he("\\vdots","{\\varvdots\\rule{0pt}{15pt}}");he("\u22EE","\\vdots");he("\\varGamma","\\mathit{\\Gamma}");he("\\varDelta","\\mathit{\\Delta}");he("\\varTheta","\\mathit{\\Theta}");he("\\varLambda","\\mathit{\\Lambda}");he("\\varXi","\\mathit{\\Xi}");he("\\varPi","\\mathit{\\Pi}");he("\\varSigma","\\mathit{\\Sigma}");he("\\varUpsilon","\\mathit{\\Upsilon}");he("\\varPhi","\\mathit{\\Phi}");he("\\varPsi","\\mathit{\\Psi}");he("\\varOmega","\\mathit{\\Omega}");he("\\substack","\\begin{subarray}{c}#1\\end{subarray}");he("\\colon","\\nobreak\\mskip2mu\\mathpunct{}\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu\\relax");he("\\boxed","\\fbox{$\\displaystyle{#1}$}");he("\\iff","\\DOTSB\\;\\Longleftrightarrow\\;");he("\\implies","\\DOTSB\\;\\Longrightarrow\\;");he("\\impliedby","\\DOTSB\\;\\Longleftarrow\\;");he("\\dddot","{\\overset{\\raisebox{-0.1ex}{\\normalsize ...}}{#1}}");he("\\ddddot","{\\overset{\\raisebox{-0.1ex}{\\normalsize ....}}{#1}}");IX={",":"\\dotsc","\\not":"\\dotsb","+":"\\dotsb","=":"\\dotsb","<":"\\dotsb",">":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"};he("\\dots",function(t){var e="\\dotso",r=t.expandAfterFuture().text;return r in IX?e=IX[r]:(r.slice(0,4)==="\\not"||r in ji.math&&["bin","rel"].includes(ji.math[r].group))&&(e="\\dotsb"),e});tL={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};he("\\dotso",function(t){var e=t.future().text;return e in tL?"\\ldots\\,":"\\ldots"});he("\\dotsc",function(t){var e=t.future().text;return e in tL&&e!==","?"\\ldots\\,":"\\ldots"});he("\\cdots",function(t){var e=t.future().text;return e in tL?"\\@cdots\\,":"\\@cdots"});he("\\dotsb","\\cdots");he("\\dotsm","\\cdots");he("\\dotsi","\\!\\cdots");he("\\dotsx","\\ldots\\,");he("\\DOTSI","\\relax");he("\\DOTSB","\\relax");he("\\DOTSX","\\relax");he("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax");he("\\,","\\tmspace+{3mu}{.1667em}");he("\\thinspace","\\,");he("\\>","\\mskip{4mu}");he("\\:","\\tmspace+{4mu}{.2222em}");he("\\medspace","\\:");he("\\;","\\tmspace+{5mu}{.2777em}");he("\\thickspace","\\;");he("\\!","\\tmspace-{3mu}{.1667em}");he("\\negthinspace","\\!");he("\\negmedspace","\\tmspace-{4mu}{.2222em}");he("\\negthickspace","\\tmspace-{5mu}{.277em}");he("\\enspace","\\kern.5em ");he("\\enskip","\\hskip.5em\\relax");he("\\quad","\\hskip1em\\relax");he("\\qquad","\\hskip2em\\relax");he("\\tag","\\@ifstar\\tag@literal\\tag@paren");he("\\tag@paren","\\tag@literal{({#1})}");he("\\tag@literal",t=>{if(t.macros.get("\\df@tag"))throw new wt("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"});he("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}");he("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)");he("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}");he("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1");he("\\newline","\\\\\\relax");he("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");AK=Rt(ru["Main-Regular"][84][1]-.7*ru["Main-Regular"][65][1]);he("\\LaTeX","\\textrm{\\html@mathml{"+("L\\kern-.36em\\raisebox{"+AK+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{LaTeX}}");he("\\KaTeX","\\textrm{\\html@mathml{"+("K\\kern-.17em\\raisebox{"+AK+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{KaTeX}}");he("\\hspace","\\@ifstar\\@hspacer\\@hspace");he("\\@hspace","\\hskip #1\\relax");he("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax");he("\\ordinarycolon",":");he("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}");he("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}');he("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}');he("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}');he("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}');he("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}');he("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}');he("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}');he("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}');he("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}');he("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}');he("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}');he("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}');he("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}');he("\u2237","\\dblcolon");he("\u2239","\\eqcolon");he("\u2254","\\coloneqq");he("\u2255","\\eqqcolon");he("\u2A74","\\Coloneqq");he("\\ratio","\\vcentcolon");he("\\coloncolon","\\dblcolon");he("\\colonequals","\\coloneqq");he("\\coloncolonequals","\\Coloneqq");he("\\equalscolon","\\eqqcolon");he("\\equalscoloncolon","\\Eqqcolon");he("\\colonminus","\\coloneq");he("\\coloncolonminus","\\Coloneq");he("\\minuscolon","\\eqcolon");he("\\minuscoloncolon","\\Eqcolon");he("\\coloncolonapprox","\\Colonapprox");he("\\coloncolonsim","\\Colonsim");he("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}");he("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}");he("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}");he("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}");he("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220C}}");he("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}");he("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}");he("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}");he("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}");he("\\varlimsup","\\DOTSB\\operatorname*{\\overline{lim}}");he("\\varliminf","\\DOTSB\\operatorname*{\\underline{lim}}");he("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{lim}}");he("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{lim}}");he("\\gvertneqq","\\html@mathml{\\@gvertneqq}{\u2269}");he("\\lvertneqq","\\html@mathml{\\@lvertneqq}{\u2268}");he("\\ngeqq","\\html@mathml{\\@ngeqq}{\u2271}");he("\\ngeqslant","\\html@mathml{\\@ngeqslant}{\u2271}");he("\\nleqq","\\html@mathml{\\@nleqq}{\u2270}");he("\\nleqslant","\\html@mathml{\\@nleqslant}{\u2270}");he("\\nshortmid","\\html@mathml{\\@nshortmid}{\u2224}");he("\\nshortparallel","\\html@mathml{\\@nshortparallel}{\u2226}");he("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{\u2288}");he("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{\u2289}");he("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{\u228A}");he("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{\u2ACB}");he("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{\u228B}");he("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{\u2ACC}");he("\\imath","\\html@mathml{\\@imath}{\u0131}");he("\\jmath","\\html@mathml{\\@jmath}{\u0237}");he("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`\u27E6}}");he("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`\u27E7}}");he("\u27E6","\\llbracket");he("\u27E7","\\rrbracket");he("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`\u2983}}");he("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`\u2984}}");he("\u2983","\\lBrace");he("\u2984","\\rBrace");he("\\minuso","\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`\u29B5}}");he("\u29B5","\\minuso");he("\\darr","\\downarrow");he("\\dArr","\\Downarrow");he("\\Darr","\\Downarrow");he("\\lang","\\langle");he("\\rang","\\rangle");he("\\uarr","\\uparrow");he("\\uArr","\\Uparrow");he("\\Uarr","\\Uparrow");he("\\N","\\mathbb{N}");he("\\R","\\mathbb{R}");he("\\Z","\\mathbb{Z}");he("\\alef","\\aleph");he("\\alefsym","\\aleph");he("\\Alpha","\\mathrm{A}");he("\\Beta","\\mathrm{B}");he("\\bull","\\bullet");he("\\Chi","\\mathrm{X}");he("\\clubs","\\clubsuit");he("\\cnums","\\mathbb{C}");he("\\Complex","\\mathbb{C}");he("\\Dagger","\\ddagger");he("\\diamonds","\\diamondsuit");he("\\empty","\\emptyset");he("\\Epsilon","\\mathrm{E}");he("\\Eta","\\mathrm{H}");he("\\exist","\\exists");he("\\harr","\\leftrightarrow");he("\\hArr","\\Leftrightarrow");he("\\Harr","\\Leftrightarrow");he("\\hearts","\\heartsuit");he("\\image","\\Im");he("\\infin","\\infty");he("\\Iota","\\mathrm{I}");he("\\isin","\\in");he("\\Kappa","\\mathrm{K}");he("\\larr","\\leftarrow");he("\\lArr","\\Leftarrow");he("\\Larr","\\Leftarrow");he("\\lrarr","\\leftrightarrow");he("\\lrArr","\\Leftrightarrow");he("\\Lrarr","\\Leftrightarrow");he("\\Mu","\\mathrm{M}");he("\\natnums","\\mathbb{N}");he("\\Nu","\\mathrm{N}");he("\\Omicron","\\mathrm{O}");he("\\plusmn","\\pm");he("\\rarr","\\rightarrow");he("\\rArr","\\Rightarrow");he("\\Rarr","\\Rightarrow");he("\\real","\\Re");he("\\reals","\\mathbb{R}");he("\\Reals","\\mathbb{R}");he("\\Rho","\\mathrm{P}");he("\\sdot","\\cdot");he("\\sect","\\S");he("\\spades","\\spadesuit");he("\\sub","\\subset");he("\\sube","\\subseteq");he("\\supe","\\supseteq");he("\\Tau","\\mathrm{T}");he("\\thetasym","\\vartheta");he("\\weierp","\\wp");he("\\Zeta","\\mathrm{Z}");he("\\argmin","\\DOTSB\\operatorname*{arg\\,min}");he("\\argmax","\\DOTSB\\operatorname*{arg\\,max}");he("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits");he("\\bra","\\mathinner{\\langle{#1}|}");he("\\ket","\\mathinner{|{#1}\\rangle}");he("\\braket","\\mathinner{\\langle{#1}\\rangle}");he("\\Bra","\\left\\langle#1\\right|");he("\\Ket","\\left|#1\\right\\rangle");_K=o(t=>e=>{var r=e.consumeArg().tokens,i=e.consumeArg().tokens,n=e.consumeArg().tokens,a=e.consumeArg().tokens,s=e.macros.get("|"),l=e.macros.get("\\|");e.macros.beginGroup();var u=o(d=>p=>{t&&(p.macros.set("|",s),n.length&&p.macros.set("\\|",l));var m=d;if(!d&&n.length){var g=p.future();g.text==="|"&&(p.popToken(),m=!0)}return{tokens:m?n:i,numArgs:0}},"midMacro");e.macros.set("|",u(!1)),n.length&&e.macros.set("\\|",u(!0));var h=e.consumeArg().tokens,f=e.expandTokens([...a,...h,...r]);return e.macros.endGroup(),{tokens:f.reverse(),numArgs:0}},"braketHelper");he("\\bra@ket",_K(!1));he("\\bra@set",_K(!0));he("\\Braket","\\bra@ket{\\left\\langle}{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}");he("\\Set","\\bra@set{\\left\\{\\:}{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}");he("\\set","\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}");he("\\angln","{\\angl n}");he("\\blue","\\textcolor{##6495ed}{#1}");he("\\orange","\\textcolor{##ffa500}{#1}");he("\\pink","\\textcolor{##ff00af}{#1}");he("\\red","\\textcolor{##df0030}{#1}");he("\\green","\\textcolor{##28ae7b}{#1}");he("\\gray","\\textcolor{gray}{#1}");he("\\purple","\\textcolor{##9d38bd}{#1}");he("\\blueA","\\textcolor{##ccfaff}{#1}");he("\\blueB","\\textcolor{##80f6ff}{#1}");he("\\blueC","\\textcolor{##63d9ea}{#1}");he("\\blueD","\\textcolor{##11accd}{#1}");he("\\blueE","\\textcolor{##0c7f99}{#1}");he("\\tealA","\\textcolor{##94fff5}{#1}");he("\\tealB","\\textcolor{##26edd5}{#1}");he("\\tealC","\\textcolor{##01d1c1}{#1}");he("\\tealD","\\textcolor{##01a995}{#1}");he("\\tealE","\\textcolor{##208170}{#1}");he("\\greenA","\\textcolor{##b6ffb0}{#1}");he("\\greenB","\\textcolor{##8af281}{#1}");he("\\greenC","\\textcolor{##74cf70}{#1}");he("\\greenD","\\textcolor{##1fab54}{#1}");he("\\greenE","\\textcolor{##0d923f}{#1}");he("\\goldA","\\textcolor{##ffd0a9}{#1}");he("\\goldB","\\textcolor{##ffbb71}{#1}");he("\\goldC","\\textcolor{##ff9c39}{#1}");he("\\goldD","\\textcolor{##e07d10}{#1}");he("\\goldE","\\textcolor{##a75a05}{#1}");he("\\redA","\\textcolor{##fca9a9}{#1}");he("\\redB","\\textcolor{##ff8482}{#1}");he("\\redC","\\textcolor{##f9685d}{#1}");he("\\redD","\\textcolor{##e84d39}{#1}");he("\\redE","\\textcolor{##bc2612}{#1}");he("\\maroonA","\\textcolor{##ffbde0}{#1}");he("\\maroonB","\\textcolor{##ff92c6}{#1}");he("\\maroonC","\\textcolor{##ed5fa6}{#1}");he("\\maroonD","\\textcolor{##ca337c}{#1}");he("\\maroonE","\\textcolor{##9e034e}{#1}");he("\\purpleA","\\textcolor{##ddd7ff}{#1}");he("\\purpleB","\\textcolor{##c6b9fc}{#1}");he("\\purpleC","\\textcolor{##aa87ff}{#1}");he("\\purpleD","\\textcolor{##7854ab}{#1}");he("\\purpleE","\\textcolor{##543b78}{#1}");he("\\mintA","\\textcolor{##f5f9e8}{#1}");he("\\mintB","\\textcolor{##edf2df}{#1}");he("\\mintC","\\textcolor{##e0e5cc}{#1}");he("\\grayA","\\textcolor{##f6f7f7}{#1}");he("\\grayB","\\textcolor{##f0f1f2}{#1}");he("\\grayC","\\textcolor{##e3e5e6}{#1}");he("\\grayD","\\textcolor{##d6d8da}{#1}");he("\\grayE","\\textcolor{##babec2}{#1}");he("\\grayF","\\textcolor{##888d93}{#1}");he("\\grayG","\\textcolor{##626569}{#1}");he("\\grayH","\\textcolor{##3b3e40}{#1}");he("\\grayI","\\textcolor{##21242c}{#1}");he("\\kaBlue","\\textcolor{##314453}{#1}");he("\\kaGreen","\\textcolor{##71B307}{#1}");DK={"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0},$D=class{static{o(this,"MacroExpander")}constructor(e,r,i){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=r,this.expansionCount=0,this.feed(e),this.macros=new FD(KLe,r.macros),this.mode=i,this.stack=[]}feed(e){this.lexer=new G4(e,this.settings)}switchMode(e){this.mode=e}beginGroup(){this.macros.beginGroup()}endGroup(){this.macros.endGroup()}endGroups(){this.macros.endGroups()}future(){return this.stack.length===0&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]}popToken(){return this.future(),this.stack.pop()}pushToken(e){this.stack.push(e)}pushTokens(e){this.stack.push(...e)}scanArgument(e){var r,i,n;if(e){if(this.consumeSpaces(),this.future().text!=="[")return null;r=this.popToken(),{tokens:n,end:i}=this.consumeArg(["]"])}else({tokens:n,start:r,end:i}=this.consumeArg());return this.pushToken(new Ho("EOF",i.loc)),this.pushTokens(n),new Ho("",co.range(r,i))}consumeSpaces(){for(;;){var e=this.future();if(e.text===" ")this.stack.pop();else break}}consumeArg(e){var r=[],i=e&&e.length>0;i||this.consumeSpaces();var n=this.future(),a,s=0,l=0;do{if(a=this.popToken(),r.push(a),a.text==="{")++s;else if(a.text==="}"){if(--s,s===-1)throw new wt("Extra }",a)}else if(a.text==="EOF")throw new wt("Unexpected end of input in a macro argument, expected '"+(e&&i?e[l]:"}")+"'",a);if(e&&i)if((s===0||s===1&&e[l]==="{")&&a.text===e[l]){if(++l,l===e.length){r.splice(-l,l);break}}else l=0}while(s!==0||i);return n.text==="{"&&r[r.length-1].text==="}"&&(r.pop(),r.shift()),r.reverse(),{tokens:r,start:n,end:a}}consumeArgs(e,r){if(r){if(r.length!==e+1)throw new wt("The length of delimiters doesn't match the number of args!");for(var i=r[0],n=0;nthis.settings.maxExpand)throw new wt("Too many expansions: infinite loop or need to increase maxExpand setting")}expandOnce(e){var r=this.popToken(),i=r.text,n=r.noexpand?null:this._getExpansion(i);if(n==null||e&&n.unexpandable){if(e&&n==null&&i[0]==="\\"&&!this.isDefined(i))throw new wt("Undefined control sequence: "+i);return this.pushToken(r),!1}this.countExpansion(1);var a=n.tokens,s=this.consumeArgs(n.numArgs,n.delimiters);if(n.numArgs){a=a.slice();for(var l=a.length-1;l>=0;--l){var u=a[l];if(u.text==="#"){if(l===0)throw new wt("Incomplete placeholder at end of macro body",u);if(u=a[--l],u.text==="#")a.splice(l+1,1);else if(/^[1-9]$/.test(u.text))a.splice(l,2,...s[+u.text-1]);else throw new wt("Not a valid argument number",u)}}}return this.pushTokens(a),a.length}expandAfterFuture(){return this.expandOnce(),this.future()}expandNextToken(){for(;;)if(this.expandOnce()===!1){var e=this.stack.pop();return e.treatAsRelax&&(e.text="\\relax"),e}throw new Error}expandMacro(e){return this.macros.has(e)?this.expandTokens([new Ho(e)]):void 0}expandTokens(e){var r=[],i=this.stack.length;for(this.pushTokens(e);this.stack.length>i;)if(this.expandOnce(!0)===!1){var n=this.stack.pop();n.treatAsRelax&&(n.noexpand=!1,n.treatAsRelax=!1),r.push(n)}return this.countExpansion(r.length),r}expandMacroAsText(e){var r=this.expandMacro(e);return r&&r.map(i=>i.text).join("")}_getExpansion(e){var r=this.macros.get(e);if(r==null)return r;if(e.length===1){var i=this.lexer.catcodes[e];if(i!=null&&i!==13)return}var n=typeof r=="function"?r(this):r;if(typeof n=="string"){var a=0;if(n.indexOf("#")!==-1)for(var s=n.replace(/##/g,"");s.indexOf("#"+(a+1))!==-1;)++a;for(var l=new G4(n,this.settings),u=[],h=l.lex();h.text!=="EOF";)u.push(h),h=l.lex();u.reverse();var f={tokens:u,numArgs:a};return f}return n}isDefined(e){return this.macros.has(e)||Mf.hasOwnProperty(e)||ji.math.hasOwnProperty(e)||ji.text.hasOwnProperty(e)||DK.hasOwnProperty(e)}isExpandable(e){var r=this.macros.get(e);return r!=null?typeof r=="string"||typeof r=="function"||!r.unexpandable:Mf.hasOwnProperty(e)&&!Mf[e].primitive}},MX=/^[₊₋₌�₎₀�₂₃₄₅₆₇₈₉�ₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/,I4=Object.freeze({"\u208A":"+","\u208B":"-","\u208C":"=","\u208D":"(","\u208E":")","\u2080":"0","\u2081":"1","\u2082":"2","\u2083":"3","\u2084":"4","\u2085":"5","\u2086":"6","\u2087":"7","\u2088":"8","\u2089":"9","\u2090":"a","\u2091":"e","\u2095":"h","\u1D62":"i","\u2C7C":"j","\u2096":"k","\u2097":"l","\u2098":"m","\u2099":"n","\u2092":"o","\u209A":"p","\u1D63":"r","\u209B":"s","\u209C":"t","\u1D64":"u","\u1D65":"v","\u2093":"x","\u1D66":"\u03B2","\u1D67":"\u03B3","\u1D68":"\u03C1","\u1D69":"\u03D5","\u1D6A":"\u03C7","\u207A":"+","\u207B":"-","\u207C":"=","\u207D":"(","\u207E":")","\u2070":"0","\xB9":"1","\xB2":"2","\xB3":"3","\u2074":"4","\u2075":"5","\u2076":"6","\u2077":"7","\u2078":"8","\u2079":"9","\u1D2C":"A","\u1D2E":"B","\u1D30":"D","\u1D31":"E","\u1D33":"G","\u1D34":"H","\u1D35":"I","\u1D36":"J","\u1D37":"K","\u1D38":"L","\u1D39":"M","\u1D3A":"N","\u1D3C":"O","\u1D3E":"P","\u1D3F":"R","\u1D40":"T","\u1D41":"U","\u2C7D":"V","\u1D42":"W","\u1D43":"a","\u1D47":"b","\u1D9C":"c","\u1D48":"d","\u1D49":"e","\u1DA0":"f","\u1D4D":"g",\u02B0:"h","\u2071":"i",\u02B2:"j","\u1D4F":"k",\u02E1:"l","\u1D50":"m",\u207F:"n","\u1D52":"o","\u1D56":"p",\u02B3:"r",\u02E2:"s","\u1D57":"t","\u1D58":"u","\u1D5B":"v",\u02B7:"w",\u02E3:"x",\u02B8:"y","\u1DBB":"z","\u1D5D":"\u03B2","\u1D5E":"\u03B3","\u1D5F":"\u03B4","\u1D60":"\u03D5","\u1D61":"\u03C7","\u1DBF":"\u03B8"}),AD={"\u0301":{text:"\\'",math:"\\acute"},"\u0300":{text:"\\`",math:"\\grave"},"\u0308":{text:'\\"',math:"\\ddot"},"\u0303":{text:"\\~",math:"\\tilde"},"\u0304":{text:"\\=",math:"\\bar"},"\u0306":{text:"\\u",math:"\\breve"},"\u030C":{text:"\\v",math:"\\check"},"\u0302":{text:"\\^",math:"\\hat"},"\u0307":{text:"\\.",math:"\\dot"},"\u030A":{text:"\\r",math:"\\mathring"},"\u030B":{text:"\\H"},"\u0327":{text:"\\c"}},OX={\u00E1:"a\u0301",\u00E0:"a\u0300",\u00E4:"a\u0308",\u01DF:"a\u0308\u0304",\u00E3:"a\u0303",\u0101:"a\u0304",\u0103:"a\u0306",\u1EAF:"a\u0306\u0301",\u1EB1:"a\u0306\u0300",\u1EB5:"a\u0306\u0303",\u01CE:"a\u030C",\u00E2:"a\u0302",\u1EA5:"a\u0302\u0301",\u1EA7:"a\u0302\u0300",\u1EAB:"a\u0302\u0303",\u0227:"a\u0307",\u01E1:"a\u0307\u0304",\u00E5:"a\u030A",\u01FB:"a\u030A\u0301",\u1E03:"b\u0307",\u0107:"c\u0301",\u1E09:"c\u0327\u0301",\u010D:"c\u030C",\u0109:"c\u0302",\u010B:"c\u0307",\u00E7:"c\u0327",\u010F:"d\u030C",\u1E0B:"d\u0307",\u1E11:"d\u0327",\u00E9:"e\u0301",\u00E8:"e\u0300",\u00EB:"e\u0308",\u1EBD:"e\u0303",\u0113:"e\u0304",\u1E17:"e\u0304\u0301",\u1E15:"e\u0304\u0300",\u0115:"e\u0306",\u1E1D:"e\u0327\u0306",\u011B:"e\u030C",\u00EA:"e\u0302",\u1EBF:"e\u0302\u0301",\u1EC1:"e\u0302\u0300",\u1EC5:"e\u0302\u0303",\u0117:"e\u0307",\u0229:"e\u0327",\u1E1F:"f\u0307",\u01F5:"g\u0301",\u1E21:"g\u0304",\u011F:"g\u0306",\u01E7:"g\u030C",\u011D:"g\u0302",\u0121:"g\u0307",\u0123:"g\u0327",\u1E27:"h\u0308",\u021F:"h\u030C",\u0125:"h\u0302",\u1E23:"h\u0307",\u1E29:"h\u0327",\u00ED:"i\u0301",\u00EC:"i\u0300",\u00EF:"i\u0308",\u1E2F:"i\u0308\u0301",\u0129:"i\u0303",\u012B:"i\u0304",\u012D:"i\u0306",\u01D0:"i\u030C",\u00EE:"i\u0302",\u01F0:"j\u030C",\u0135:"j\u0302",\u1E31:"k\u0301",\u01E9:"k\u030C",\u0137:"k\u0327",\u013A:"l\u0301",\u013E:"l\u030C",\u013C:"l\u0327",\u1E3F:"m\u0301",\u1E41:"m\u0307",\u0144:"n\u0301",\u01F9:"n\u0300",\u00F1:"n\u0303",\u0148:"n\u030C",\u1E45:"n\u0307",\u0146:"n\u0327",\u00F3:"o\u0301",\u00F2:"o\u0300",\u00F6:"o\u0308",\u022B:"o\u0308\u0304",\u00F5:"o\u0303",\u1E4D:"o\u0303\u0301",\u1E4F:"o\u0303\u0308",\u022D:"o\u0303\u0304",\u014D:"o\u0304",\u1E53:"o\u0304\u0301",\u1E51:"o\u0304\u0300",\u014F:"o\u0306",\u01D2:"o\u030C",\u00F4:"o\u0302",\u1ED1:"o\u0302\u0301",\u1ED3:"o\u0302\u0300",\u1ED7:"o\u0302\u0303",\u022F:"o\u0307",\u0231:"o\u0307\u0304",\u0151:"o\u030B",\u1E55:"p\u0301",\u1E57:"p\u0307",\u0155:"r\u0301",\u0159:"r\u030C",\u1E59:"r\u0307",\u0157:"r\u0327",\u015B:"s\u0301",\u1E65:"s\u0301\u0307",\u0161:"s\u030C",\u1E67:"s\u030C\u0307",\u015D:"s\u0302",\u1E61:"s\u0307",\u015F:"s\u0327",\u1E97:"t\u0308",\u0165:"t\u030C",\u1E6B:"t\u0307",\u0163:"t\u0327",\u00FA:"u\u0301",\u00F9:"u\u0300",\u00FC:"u\u0308",\u01D8:"u\u0308\u0301",\u01DC:"u\u0308\u0300",\u01D6:"u\u0308\u0304",\u01DA:"u\u0308\u030C",\u0169:"u\u0303",\u1E79:"u\u0303\u0301",\u016B:"u\u0304",\u1E7B:"u\u0304\u0308",\u016D:"u\u0306",\u01D4:"u\u030C",\u00FB:"u\u0302",\u016F:"u\u030A",\u0171:"u\u030B",\u1E7D:"v\u0303",\u1E83:"w\u0301",\u1E81:"w\u0300",\u1E85:"w\u0308",\u0175:"w\u0302",\u1E87:"w\u0307",\u1E98:"w\u030A",\u1E8D:"x\u0308",\u1E8B:"x\u0307",\u00FD:"y\u0301",\u1EF3:"y\u0300",\u00FF:"y\u0308",\u1EF9:"y\u0303",\u0233:"y\u0304",\u0177:"y\u0302",\u1E8F:"y\u0307",\u1E99:"y\u030A",\u017A:"z\u0301",\u017E:"z\u030C",\u1E91:"z\u0302",\u017C:"z\u0307",\u00C1:"A\u0301",\u00C0:"A\u0300",\u00C4:"A\u0308",\u01DE:"A\u0308\u0304",\u00C3:"A\u0303",\u0100:"A\u0304",\u0102:"A\u0306",\u1EAE:"A\u0306\u0301",\u1EB0:"A\u0306\u0300",\u1EB4:"A\u0306\u0303",\u01CD:"A\u030C",\u00C2:"A\u0302",\u1EA4:"A\u0302\u0301",\u1EA6:"A\u0302\u0300",\u1EAA:"A\u0302\u0303",\u0226:"A\u0307",\u01E0:"A\u0307\u0304",\u00C5:"A\u030A",\u01FA:"A\u030A\u0301",\u1E02:"B\u0307",\u0106:"C\u0301",\u1E08:"C\u0327\u0301",\u010C:"C\u030C",\u0108:"C\u0302",\u010A:"C\u0307",\u00C7:"C\u0327",\u010E:"D\u030C",\u1E0A:"D\u0307",\u1E10:"D\u0327",\u00C9:"E\u0301",\u00C8:"E\u0300",\u00CB:"E\u0308",\u1EBC:"E\u0303",\u0112:"E\u0304",\u1E16:"E\u0304\u0301",\u1E14:"E\u0304\u0300",\u0114:"E\u0306",\u1E1C:"E\u0327\u0306",\u011A:"E\u030C",\u00CA:"E\u0302",\u1EBE:"E\u0302\u0301",\u1EC0:"E\u0302\u0300",\u1EC4:"E\u0302\u0303",\u0116:"E\u0307",\u0228:"E\u0327",\u1E1E:"F\u0307",\u01F4:"G\u0301",\u1E20:"G\u0304",\u011E:"G\u0306",\u01E6:"G\u030C",\u011C:"G\u0302",\u0120:"G\u0307",\u0122:"G\u0327",\u1E26:"H\u0308",\u021E:"H\u030C",\u0124:"H\u0302",\u1E22:"H\u0307",\u1E28:"H\u0327",\u00CD:"I\u0301",\u00CC:"I\u0300",\u00CF:"I\u0308",\u1E2E:"I\u0308\u0301",\u0128:"I\u0303",\u012A:"I\u0304",\u012C:"I\u0306",\u01CF:"I\u030C",\u00CE:"I\u0302",\u0130:"I\u0307",\u0134:"J\u0302",\u1E30:"K\u0301",\u01E8:"K\u030C",\u0136:"K\u0327",\u0139:"L\u0301",\u013D:"L\u030C",\u013B:"L\u0327",\u1E3E:"M\u0301",\u1E40:"M\u0307",\u0143:"N\u0301",\u01F8:"N\u0300",\u00D1:"N\u0303",\u0147:"N\u030C",\u1E44:"N\u0307",\u0145:"N\u0327",\u00D3:"O\u0301",\u00D2:"O\u0300",\u00D6:"O\u0308",\u022A:"O\u0308\u0304",\u00D5:"O\u0303",\u1E4C:"O\u0303\u0301",\u1E4E:"O\u0303\u0308",\u022C:"O\u0303\u0304",\u014C:"O\u0304",\u1E52:"O\u0304\u0301",\u1E50:"O\u0304\u0300",\u014E:"O\u0306",\u01D1:"O\u030C",\u00D4:"O\u0302",\u1ED0:"O\u0302\u0301",\u1ED2:"O\u0302\u0300",\u1ED6:"O\u0302\u0303",\u022E:"O\u0307",\u0230:"O\u0307\u0304",\u0150:"O\u030B",\u1E54:"P\u0301",\u1E56:"P\u0307",\u0154:"R\u0301",\u0158:"R\u030C",\u1E58:"R\u0307",\u0156:"R\u0327",\u015A:"S\u0301",\u1E64:"S\u0301\u0307",\u0160:"S\u030C",\u1E66:"S\u030C\u0307",\u015C:"S\u0302",\u1E60:"S\u0307",\u015E:"S\u0327",\u0164:"T\u030C",\u1E6A:"T\u0307",\u0162:"T\u0327",\u00DA:"U\u0301",\u00D9:"U\u0300",\u00DC:"U\u0308",\u01D7:"U\u0308\u0301",\u01DB:"U\u0308\u0300",\u01D5:"U\u0308\u0304",\u01D9:"U\u0308\u030C",\u0168:"U\u0303",\u1E78:"U\u0303\u0301",\u016A:"U\u0304",\u1E7A:"U\u0304\u0308",\u016C:"U\u0306",\u01D3:"U\u030C",\u00DB:"U\u0302",\u016E:"U\u030A",\u0170:"U\u030B",\u1E7C:"V\u0303",\u1E82:"W\u0301",\u1E80:"W\u0300",\u1E84:"W\u0308",\u0174:"W\u0302",\u1E86:"W\u0307",\u1E8C:"X\u0308",\u1E8A:"X\u0307",\u00DD:"Y\u0301",\u1EF2:"Y\u0300",\u0178:"Y\u0308",\u1EF8:"Y\u0303",\u0232:"Y\u0304",\u0176:"Y\u0302",\u1E8E:"Y\u0307",\u0179:"Z\u0301",\u017D:"Z\u030C",\u1E90:"Z\u0302",\u017B:"Z\u0307",\u03AC:"\u03B1\u0301",\u1F70:"\u03B1\u0300",\u1FB1:"\u03B1\u0304",\u1FB0:"\u03B1\u0306",\u03AD:"\u03B5\u0301",\u1F72:"\u03B5\u0300",\u03AE:"\u03B7\u0301",\u1F74:"\u03B7\u0300",\u03AF:"\u03B9\u0301",\u1F76:"\u03B9\u0300",\u03CA:"\u03B9\u0308",\u0390:"\u03B9\u0308\u0301",\u1FD2:"\u03B9\u0308\u0300",\u1FD1:"\u03B9\u0304",\u1FD0:"\u03B9\u0306",\u03CC:"\u03BF\u0301",\u1F78:"\u03BF\u0300",\u03CD:"\u03C5\u0301",\u1F7A:"\u03C5\u0300",\u03CB:"\u03C5\u0308",\u03B0:"\u03C5\u0308\u0301",\u1FE2:"\u03C5\u0308\u0300",\u1FE1:"\u03C5\u0304",\u1FE0:"\u03C5\u0306",\u03CE:"\u03C9\u0301",\u1F7C:"\u03C9\u0300",\u038E:"\u03A5\u0301",\u1FEA:"\u03A5\u0300",\u03AB:"\u03A5\u0308",\u1FE9:"\u03A5\u0304",\u1FE8:"\u03A5\u0306",\u038F:"\u03A9\u0301",\u1FFA:"\u03A9\u0300"},V4=class t{static{o(this,"Parser")}constructor(e,r){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new $D(e,r,this.mode),this.settings=r,this.leftrightDepth=0}expect(e,r){if(r===void 0&&(r=!0),this.fetch().text!==e)throw new wt("Expected '"+e+"', got '"+this.fetch().text+"'",this.fetch());r&&this.consume()}consume(){this.nextToken=null}fetch(){return this.nextToken==null&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken}switchMode(e){this.mode=e,this.gullet.switchMode(e)}parse(){this.settings.globalGroup||this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");try{var e=this.parseExpression(!1);return this.expect("EOF"),this.settings.globalGroup||this.gullet.endGroup(),e}finally{this.gullet.endGroups()}}subparse(e){var r=this.nextToken;this.consume(),this.gullet.pushToken(new Ho("}")),this.gullet.pushTokens(e);var i=this.parseExpression(!1);return this.expect("}"),this.nextToken=r,i}parseExpression(e,r){for(var i=[];;){this.mode==="math"&&this.consumeSpaces();var n=this.fetch();if(t.endOfExpression.indexOf(n.text)!==-1||r&&n.text===r||e&&Mf[n.text]&&Mf[n.text].infix)break;var a=this.parseAtom(r);if(a){if(a.type==="internal")continue}else break;i.push(a)}return this.mode==="text"&&this.formLigatures(i),this.handleInfixNodes(i)}handleInfixNodes(e){for(var r=-1,i,n=0;n=0&&this.settings.reportNonstrict("unicodeTextInMathMode",'Latin-1/Unicode text character "'+r[0]+'" used in math mode',e);var l=ji[this.mode][r].group,u=co.range(e),h;if(GDe.hasOwnProperty(l)){var f=l;h={type:"atom",mode:this.mode,family:f,loc:u,text:r}}else h={type:l,mode:this.mode,loc:u,text:r};s=h}else if(r.charCodeAt(0)>=128)this.settings.strict&&(BX(r.charCodeAt(0))?this.mode==="math"&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+r[0]+'" used in math mode',e):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+r[0]+'"'+(" ("+r.charCodeAt(0)+")"),e)),s={type:"textord",mode:"text",loc:co.range(e),text:r};else return null;if(this.consume(),a)for(var d=0;d{e.tagName==="A"&&e.hasAttribute("target")&&e.setAttribute(t,e.getAttribute("target")??"")}),Tl.addHook("afterSanitizeAttributes",e=>{e.tagName==="A"&&e.hasAttribute(t)&&(e.setAttribute("target",e.getAttribute(t)??""),e.removeAttribute(t),e.getAttribute("target")==="_blank"&&e.setAttribute("rel","noopener"))})}var Hp,ZLe,JLe,zK,FK,Tr,tRe,rRe,iRe,nRe,GK,Yp,aRe,sRe,ou,nL,oRe,lRe,$K,K4,sn,jp,cRe,Rg,lt,Vr=P(()=>{"use strict";zx();Sr();Hp=//gi,ZLe=o(t=>t?GK(t).replace(/\\n/g,"#br#").split("#br#"):[""],"getRows"),JLe=(()=>{let t=!1;return()=>{t||(eRe(),t=!0)}})();o(eRe,"setupDompurifyHooks");zK=o(t=>(JLe(),Tl.sanitize(t)),"removeScript"),FK=o((t,e)=>{if(Or(e)){let r=e.securityLevel;r==="antiscript"||r==="strict"||r==="sandbox"?t=zK(t):r!=="loose"&&(t=GK(t),t=t.replace(//g,">"),t=t.replace(/=/g,"="),t=nRe(t))}return t},"sanitizeMore"),Tr=o((t,e)=>t&&(e.dompurifyConfig?t=Tl.sanitize(FK(t,e),e.dompurifyConfig).toString():t=Tl.sanitize(FK(t,e),{FORBID_TAGS:["style"]}).toString(),t),"sanitizeText"),tRe=o((t,e)=>typeof t=="string"?Tr(t,e):t.flat().map(r=>Tr(r,e)),"sanitizeTextOrArray"),rRe=o(t=>Hp.test(t),"hasBreaks"),iRe=o(t=>t.split(Hp),"splitBreaks"),nRe=o(t=>t.replace(/#br#/g,"
"),"placeholderToBreak"),GK=o(t=>t.replace(Hp,"#br#"),"breakToPlaceholder"),Yp=o(t=>{let e="";return t&&(e=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,e=CSS.escape(e)),e},"getUrl"),aRe=o(function(...t){let e=t.filter(r=>!isNaN(r));return Math.max(...e)},"getMax"),sRe=o(function(...t){let e=t.filter(r=>!isNaN(r));return Math.min(...e)},"getMin"),ou=o(function(t){let e=t.split(/(,)/),r=[];for(let i=0;i0&&i+1Math.max(0,t.split(e).length-1),"countOccurrence"),oRe=o((t,e)=>{let r=nL(t,"~"),i=nL(e,"~");return r===1&&i===1},"shouldCombineSets"),lRe=o(t=>{let e=nL(t,"~"),r=!1;if(e<=1)return t;e%2!==0&&t.startsWith("~")&&(t=t.substring(1),r=!0);let i=[...t],n=i.indexOf("~"),a=i.lastIndexOf("~");for(;n!==-1&&a!==-1&&n!==a;)i[n]="<",i[a]=">",n=i.indexOf("~"),a=i.lastIndexOf("~");return r&&i.unshift("~"),i.join("")},"processSet"),$K=o(()=>window.MathMLElement!==void 0,"isMathMLSupported"),K4=/\$\$(.*)\$\$/g,sn=o(t=>(t.match(K4)?.length??0)>0,"hasKatex"),jp=o(async(t,e)=>{let r=document.createElement("div");r.innerHTML=await Rg(t,e),r.id="katex-temp",r.style.visibility="hidden",r.style.position="absolute",r.style.top="0",document.querySelector("body")?.insertAdjacentElement("beforeend",r);let n={width:r.clientWidth,height:r.clientHeight};return r.remove(),n},"calculateMathMLDimensions"),cRe=o(async(t,e)=>{if(!sn(t))return t;if(!($K()||e.legacyMathML||e.forceLegacyMathML))return t.replace(K4,"MathML is unsupported in this environment.");{let{default:r}=await Promise.resolve().then(()=>(BK(),PK)),i=e.forceLegacyMathML||!$K()&&e.legacyMathML?"htmlAndMathml":"mathml";return t.split(Hp).map(n=>sn(n)?`
${n}
`:`
${n}
`).join("").replace(K4,(n,a)=>r.renderToString(a,{throwOnError:!0,displayMode:!0,output:i}).replace(/\n/g," ").replace(//g,""))}return t.replace(K4,"Katex is not supported in @mermaid-js/tiny. Please use the full mermaid library.")},"renderKatexUnsanitized"),Rg=o(async(t,e)=>Tr(await cRe(t,e),e),"renderKatexSanitized"),lt={getRows:ZLe,sanitizeText:Tr,sanitizeTextOrArray:tRe,hasBreaks:rRe,splitBreaks:iRe,lineBreakRegex:Hp,removeScript:zK,getUrl:Yp,evaluate:ls,getMax:aRe,getMin:sRe}});var sL,aL,VK,Q4,qK,WK,fo,lu=P(()=>{"use strict";FY();Sr();Vr();bt();sL={body:'?',height:80,width:80},aL=new Map,VK=new Map,Q4=o(t=>{for(let e of t){if(!e.name)throw new Error('Invalid icon loader. Must have a "name" property with non-empty string value.');if(Q.debug("Registering icon pack:",e.name),"loader"in e)VK.set(e.name,e.loader);else if("icons"in e)aL.set(e.name,e.icons);else throw Q.error("Invalid icon loader:",e),new Error('Invalid icon loader. Must have either "icons" or "loader" property.')}},"registerIconPacks"),qK=o(async(t,e)=>{let r=D8(t,!0,e!==void 0);if(!r)throw new Error(`Invalid icon name: ${t}`);let i=r.prefix||e;if(!i)throw new Error(`Icon name must contain a prefix: ${t}`);let n=aL.get(i);if(!n){let s=VK.get(i);if(!s)throw new Error(`Icon set not found: ${r.prefix}`);try{n={...await s(),prefix:i},aL.set(i,n)}catch(l){throw Q.error(l),new Error(`Failed to load icon set: ${r.prefix}`)}}let a=R8(n,r.name);if(!a)throw new Error(`Icon not found: ${t}`);return a},"getRegisteredIconData"),WK=o(async t=>{try{return await qK(t),!0}catch{return!1}},"isIconAvailable"),fo=o(async(t,e,r)=>{let i;try{i=await qK(t,e?.fallbackPrefix)}catch(s){Q.error(s),i=sL}let n=I8(i,e),a=O8(M8(n.body),{...n.attributes,...r});return Tr(a,Lt())},"getIconSVG")});function Z4(t){for(var e=[],r=1;r{"use strict";o(Z4,"dedent")});var J4,Xp,UK,ew=P(()=>{"use strict";J4=/^-{3}\s*[\n\r](.*?)[\n\r]-{3}\s*[\n\r]+/s,Xp=/%{2}{\s*(?:(\w+)\s*:|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,UK=/\s*%%.*\n/gm});var Ng,lL=P(()=>{"use strict";Ng=class extends Error{static{o(this,"UnknownDiagramError")}constructor(e){super(e),this.name="UnknownDiagramError"}}});var wh,Ig,Zx,cL,HK,Kp=P(()=>{"use strict";bt();ew();lL();wh={},Ig=o(function(t,e){t=t.replace(J4,"").replace(Xp,"").replace(UK,` +`);for(let[r,{detector:i}]of Object.entries(wh))if(i(t,e))return r;throw new Ng(`No diagram type detected matching given configuration for text: ${t}`)},"detectType"),Zx=o((...t)=>{for(let{id:e,detector:r,loader:i}of t)cL(e,r,i)},"registerLazyLoadedDiagrams"),cL=o((t,e,r)=>{wh[t]&&Q.warn(`Detector with key ${t} already exists. Overwriting.`),wh[t]={detector:e,loader:r},Q.debug(`Detector with key ${t} added${r?" with loader":""}`)},"addDetector"),HK=o(t=>wh[t].loader,"getDiagramLoader")});var Jx,YK,uL=P(()=>{"use strict";Jx=(function(){var t=o(function(Ce,Fe,Ue,qe){for(Ue=Ue||{},qe=Ce.length;qe--;Ue[Ce[qe]]=Fe);return Ue},"o"),e=[1,24],r=[1,25],i=[1,26],n=[1,27],a=[1,28],s=[1,63],l=[1,64],u=[1,65],h=[1,66],f=[1,67],d=[1,68],p=[1,69],m=[1,29],g=[1,30],y=[1,31],v=[1,32],x=[1,33],b=[1,34],T=[1,35],w=[1,36],k=[1,37],C=[1,38],E=[1,39],S=[1,40],L=[1,41],M=[1,42],I=[1,43],A=[1,44],_=[1,45],D=[1,46],N=[1,47],R=[1,48],B=[1,50],O=[1,51],$=[1,52],z=[1,53],F=[1,54],V=[1,55],H=[1,56],X=[1,57],W=[1,58],Z=[1,59],Y=[1,60],ae=[14,42],J=[14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],ee=[12,14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],re=[1,82],te=[1,83],be=[1,84],de=[1,85],Ee=[12,14,42],Ne=[12,14,33,42],we=[12,14,33,42,76,77,79,80],Te=[12,33],De=[34,36,37,38,39,40,41,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],$e={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mermaidDoc:4,direction:5,direction_tb:6,direction_bt:7,direction_rl:8,direction_lr:9,graphConfig:10,C4_CONTEXT:11,NEWLINE:12,statements:13,EOF:14,C4_CONTAINER:15,C4_COMPONENT:16,C4_DYNAMIC:17,C4_DEPLOYMENT:18,otherStatements:19,diagramStatements:20,otherStatement:21,title:22,accDescription:23,acc_title:24,acc_title_value:25,acc_descr:26,acc_descr_value:27,acc_descr_multiline_value:28,boundaryStatement:29,boundaryStartStatement:30,boundaryStopStatement:31,boundaryStart:32,LBRACE:33,ENTERPRISE_BOUNDARY:34,attributes:35,SYSTEM_BOUNDARY:36,BOUNDARY:37,CONTAINER_BOUNDARY:38,NODE:39,NODE_L:40,NODE_R:41,RBRACE:42,diagramStatement:43,PERSON:44,PERSON_EXT:45,SYSTEM:46,SYSTEM_DB:47,SYSTEM_QUEUE:48,SYSTEM_EXT:49,SYSTEM_EXT_DB:50,SYSTEM_EXT_QUEUE:51,CONTAINER:52,CONTAINER_DB:53,CONTAINER_QUEUE:54,CONTAINER_EXT:55,CONTAINER_EXT_DB:56,CONTAINER_EXT_QUEUE:57,COMPONENT:58,COMPONENT_DB:59,COMPONENT_QUEUE:60,COMPONENT_EXT:61,COMPONENT_EXT_DB:62,COMPONENT_EXT_QUEUE:63,REL:64,BIREL:65,REL_U:66,REL_D:67,REL_L:68,REL_R:69,REL_B:70,REL_INDEX:71,UPDATE_EL_STYLE:72,UPDATE_REL_STYLE:73,UPDATE_LAYOUT_CONFIG:74,attribute:75,STR:76,STR_KEY:77,STR_VALUE:78,ATTRIBUTE:79,ATTRIBUTE_EMPTY:80,$accept:0,$end:1},terminals_:{2:"error",6:"direction_tb",7:"direction_bt",8:"direction_rl",9:"direction_lr",11:"C4_CONTEXT",12:"NEWLINE",14:"EOF",15:"C4_CONTAINER",16:"C4_COMPONENT",17:"C4_DYNAMIC",18:"C4_DEPLOYMENT",22:"title",23:"accDescription",24:"acc_title",25:"acc_title_value",26:"acc_descr",27:"acc_descr_value",28:"acc_descr_multiline_value",33:"LBRACE",34:"ENTERPRISE_BOUNDARY",36:"SYSTEM_BOUNDARY",37:"BOUNDARY",38:"CONTAINER_BOUNDARY",39:"NODE",40:"NODE_L",41:"NODE_R",42:"RBRACE",44:"PERSON",45:"PERSON_EXT",46:"SYSTEM",47:"SYSTEM_DB",48:"SYSTEM_QUEUE",49:"SYSTEM_EXT",50:"SYSTEM_EXT_DB",51:"SYSTEM_EXT_QUEUE",52:"CONTAINER",53:"CONTAINER_DB",54:"CONTAINER_QUEUE",55:"CONTAINER_EXT",56:"CONTAINER_EXT_DB",57:"CONTAINER_EXT_QUEUE",58:"COMPONENT",59:"COMPONENT_DB",60:"COMPONENT_QUEUE",61:"COMPONENT_EXT",62:"COMPONENT_EXT_DB",63:"COMPONENT_EXT_QUEUE",64:"REL",65:"BIREL",66:"REL_U",67:"REL_D",68:"REL_L",69:"REL_R",70:"REL_B",71:"REL_INDEX",72:"UPDATE_EL_STYLE",73:"UPDATE_REL_STYLE",74:"UPDATE_LAYOUT_CONFIG",76:"STR",77:"STR_KEY",78:"STR_VALUE",79:"ATTRIBUTE",80:"ATTRIBUTE_EMPTY"},productions_:[0,[3,1],[3,1],[5,1],[5,1],[5,1],[5,1],[4,1],[10,4],[10,4],[10,4],[10,4],[10,4],[13,1],[13,1],[13,2],[19,1],[19,2],[19,3],[21,1],[21,1],[21,2],[21,2],[21,1],[29,3],[30,3],[30,3],[30,4],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[31,1],[20,1],[20,2],[20,3],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,1],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[35,1],[35,2],[75,1],[75,2],[75,1],[75,1]],performAction:o(function(Fe,Ue,qe,Me,He,K,oe){var U=K.length-1;switch(He){case 3:Me.setDirection("TB");break;case 4:Me.setDirection("BT");break;case 5:Me.setDirection("RL");break;case 6:Me.setDirection("LR");break;case 8:case 9:case 10:case 11:case 12:Me.setC4Type(K[U-3]);break;case 19:Me.setTitle(K[U].substring(6)),this.$=K[U].substring(6);break;case 20:Me.setAccDescription(K[U].substring(15)),this.$=K[U].substring(15);break;case 21:this.$=K[U].trim(),Me.setTitle(this.$);break;case 22:case 23:this.$=K[U].trim(),Me.setAccDescription(this.$);break;case 28:K[U].splice(2,0,"ENTERPRISE"),Me.addPersonOrSystemBoundary(...K[U]),this.$=K[U];break;case 29:K[U].splice(2,0,"SYSTEM"),Me.addPersonOrSystemBoundary(...K[U]),this.$=K[U];break;case 30:Me.addPersonOrSystemBoundary(...K[U]),this.$=K[U];break;case 31:K[U].splice(2,0,"CONTAINER"),Me.addContainerBoundary(...K[U]),this.$=K[U];break;case 32:Me.addDeploymentNode("node",...K[U]),this.$=K[U];break;case 33:Me.addDeploymentNode("nodeL",...K[U]),this.$=K[U];break;case 34:Me.addDeploymentNode("nodeR",...K[U]),this.$=K[U];break;case 35:Me.popBoundaryParseStack();break;case 39:Me.addPersonOrSystem("person",...K[U]),this.$=K[U];break;case 40:Me.addPersonOrSystem("external_person",...K[U]),this.$=K[U];break;case 41:Me.addPersonOrSystem("system",...K[U]),this.$=K[U];break;case 42:Me.addPersonOrSystem("system_db",...K[U]),this.$=K[U];break;case 43:Me.addPersonOrSystem("system_queue",...K[U]),this.$=K[U];break;case 44:Me.addPersonOrSystem("external_system",...K[U]),this.$=K[U];break;case 45:Me.addPersonOrSystem("external_system_db",...K[U]),this.$=K[U];break;case 46:Me.addPersonOrSystem("external_system_queue",...K[U]),this.$=K[U];break;case 47:Me.addContainer("container",...K[U]),this.$=K[U];break;case 48:Me.addContainer("container_db",...K[U]),this.$=K[U];break;case 49:Me.addContainer("container_queue",...K[U]),this.$=K[U];break;case 50:Me.addContainer("external_container",...K[U]),this.$=K[U];break;case 51:Me.addContainer("external_container_db",...K[U]),this.$=K[U];break;case 52:Me.addContainer("external_container_queue",...K[U]),this.$=K[U];break;case 53:Me.addComponent("component",...K[U]),this.$=K[U];break;case 54:Me.addComponent("component_db",...K[U]),this.$=K[U];break;case 55:Me.addComponent("component_queue",...K[U]),this.$=K[U];break;case 56:Me.addComponent("external_component",...K[U]),this.$=K[U];break;case 57:Me.addComponent("external_component_db",...K[U]),this.$=K[U];break;case 58:Me.addComponent("external_component_queue",...K[U]),this.$=K[U];break;case 60:Me.addRel("rel",...K[U]),this.$=K[U];break;case 61:Me.addRel("birel",...K[U]),this.$=K[U];break;case 62:Me.addRel("rel_u",...K[U]),this.$=K[U];break;case 63:Me.addRel("rel_d",...K[U]),this.$=K[U];break;case 64:Me.addRel("rel_l",...K[U]),this.$=K[U];break;case 65:Me.addRel("rel_r",...K[U]),this.$=K[U];break;case 66:Me.addRel("rel_b",...K[U]),this.$=K[U];break;case 67:K[U].splice(0,1),Me.addRel("rel",...K[U]),this.$=K[U];break;case 68:Me.updateElStyle("update_el_style",...K[U]),this.$=K[U];break;case 69:Me.updateRelStyle("update_rel_style",...K[U]),this.$=K[U];break;case 70:Me.updateLayoutConfig("update_layout_config",...K[U]),this.$=K[U];break;case 71:this.$=[K[U]];break;case 72:K[U].unshift(K[U-1]),this.$=K[U];break;case 73:case 75:this.$=K[U].trim();break;case 74:let ue={};ue[K[U-1].trim()]=K[U].trim(),this.$=ue;break;case 76:this.$="";break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],7:[1,6],8:[1,7],9:[1,8],10:4,11:[1,9],15:[1,10],16:[1,11],17:[1,12],18:[1,13]},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,7]},{1:[2,3]},{1:[2,4]},{1:[2,5]},{1:[2,6]},{12:[1,14]},{12:[1,15]},{12:[1,16]},{12:[1,17]},{12:[1,18]},{13:19,19:20,20:21,21:22,22:e,23:r,24:i,26:n,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:T,51:w,52:k,53:C,54:E,55:S,56:L,57:M,58:I,59:A,60:_,61:D,62:N,63:R,64:B,65:O,66:$,67:z,68:F,69:V,70:H,71:X,72:W,73:Z,74:Y},{13:70,19:20,20:21,21:22,22:e,23:r,24:i,26:n,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:T,51:w,52:k,53:C,54:E,55:S,56:L,57:M,58:I,59:A,60:_,61:D,62:N,63:R,64:B,65:O,66:$,67:z,68:F,69:V,70:H,71:X,72:W,73:Z,74:Y},{13:71,19:20,20:21,21:22,22:e,23:r,24:i,26:n,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:T,51:w,52:k,53:C,54:E,55:S,56:L,57:M,58:I,59:A,60:_,61:D,62:N,63:R,64:B,65:O,66:$,67:z,68:F,69:V,70:H,71:X,72:W,73:Z,74:Y},{13:72,19:20,20:21,21:22,22:e,23:r,24:i,26:n,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:T,51:w,52:k,53:C,54:E,55:S,56:L,57:M,58:I,59:A,60:_,61:D,62:N,63:R,64:B,65:O,66:$,67:z,68:F,69:V,70:H,71:X,72:W,73:Z,74:Y},{13:73,19:20,20:21,21:22,22:e,23:r,24:i,26:n,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:T,51:w,52:k,53:C,54:E,55:S,56:L,57:M,58:I,59:A,60:_,61:D,62:N,63:R,64:B,65:O,66:$,67:z,68:F,69:V,70:H,71:X,72:W,73:Z,74:Y},{14:[1,74]},t(ae,[2,13],{43:23,29:49,30:61,32:62,20:75,34:s,36:l,37:u,38:h,39:f,40:d,41:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T,51:w,52:k,53:C,54:E,55:S,56:L,57:M,58:I,59:A,60:_,61:D,62:N,63:R,64:B,65:O,66:$,67:z,68:F,69:V,70:H,71:X,72:W,73:Z,74:Y}),t(ae,[2,14]),t(J,[2,16],{12:[1,76]}),t(ae,[2,36],{12:[1,77]}),t(ee,[2,19]),t(ee,[2,20]),{25:[1,78]},{27:[1,79]},t(ee,[2,23]),{35:80,75:81,76:re,77:te,79:be,80:de},{35:86,75:81,76:re,77:te,79:be,80:de},{35:87,75:81,76:re,77:te,79:be,80:de},{35:88,75:81,76:re,77:te,79:be,80:de},{35:89,75:81,76:re,77:te,79:be,80:de},{35:90,75:81,76:re,77:te,79:be,80:de},{35:91,75:81,76:re,77:te,79:be,80:de},{35:92,75:81,76:re,77:te,79:be,80:de},{35:93,75:81,76:re,77:te,79:be,80:de},{35:94,75:81,76:re,77:te,79:be,80:de},{35:95,75:81,76:re,77:te,79:be,80:de},{35:96,75:81,76:re,77:te,79:be,80:de},{35:97,75:81,76:re,77:te,79:be,80:de},{35:98,75:81,76:re,77:te,79:be,80:de},{35:99,75:81,76:re,77:te,79:be,80:de},{35:100,75:81,76:re,77:te,79:be,80:de},{35:101,75:81,76:re,77:te,79:be,80:de},{35:102,75:81,76:re,77:te,79:be,80:de},{35:103,75:81,76:re,77:te,79:be,80:de},{35:104,75:81,76:re,77:te,79:be,80:de},t(Ee,[2,59]),{35:105,75:81,76:re,77:te,79:be,80:de},{35:106,75:81,76:re,77:te,79:be,80:de},{35:107,75:81,76:re,77:te,79:be,80:de},{35:108,75:81,76:re,77:te,79:be,80:de},{35:109,75:81,76:re,77:te,79:be,80:de},{35:110,75:81,76:re,77:te,79:be,80:de},{35:111,75:81,76:re,77:te,79:be,80:de},{35:112,75:81,76:re,77:te,79:be,80:de},{35:113,75:81,76:re,77:te,79:be,80:de},{35:114,75:81,76:re,77:te,79:be,80:de},{35:115,75:81,76:re,77:te,79:be,80:de},{20:116,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:T,51:w,52:k,53:C,54:E,55:S,56:L,57:M,58:I,59:A,60:_,61:D,62:N,63:R,64:B,65:O,66:$,67:z,68:F,69:V,70:H,71:X,72:W,73:Z,74:Y},{12:[1,118],33:[1,117]},{35:119,75:81,76:re,77:te,79:be,80:de},{35:120,75:81,76:re,77:te,79:be,80:de},{35:121,75:81,76:re,77:te,79:be,80:de},{35:122,75:81,76:re,77:te,79:be,80:de},{35:123,75:81,76:re,77:te,79:be,80:de},{35:124,75:81,76:re,77:te,79:be,80:de},{35:125,75:81,76:re,77:te,79:be,80:de},{14:[1,126]},{14:[1,127]},{14:[1,128]},{14:[1,129]},{1:[2,8]},t(ae,[2,15]),t(J,[2,17],{21:22,19:130,22:e,23:r,24:i,26:n,28:a}),t(ae,[2,37],{19:20,20:21,21:22,43:23,29:49,30:61,32:62,13:131,22:e,23:r,24:i,26:n,28:a,34:s,36:l,37:u,38:h,39:f,40:d,41:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T,51:w,52:k,53:C,54:E,55:S,56:L,57:M,58:I,59:A,60:_,61:D,62:N,63:R,64:B,65:O,66:$,67:z,68:F,69:V,70:H,71:X,72:W,73:Z,74:Y}),t(ee,[2,21]),t(ee,[2,22]),t(Ee,[2,39]),t(Ne,[2,71],{75:81,35:132,76:re,77:te,79:be,80:de}),t(we,[2,73]),{78:[1,133]},t(we,[2,75]),t(we,[2,76]),t(Ee,[2,40]),t(Ee,[2,41]),t(Ee,[2,42]),t(Ee,[2,43]),t(Ee,[2,44]),t(Ee,[2,45]),t(Ee,[2,46]),t(Ee,[2,47]),t(Ee,[2,48]),t(Ee,[2,49]),t(Ee,[2,50]),t(Ee,[2,51]),t(Ee,[2,52]),t(Ee,[2,53]),t(Ee,[2,54]),t(Ee,[2,55]),t(Ee,[2,56]),t(Ee,[2,57]),t(Ee,[2,58]),t(Ee,[2,60]),t(Ee,[2,61]),t(Ee,[2,62]),t(Ee,[2,63]),t(Ee,[2,64]),t(Ee,[2,65]),t(Ee,[2,66]),t(Ee,[2,67]),t(Ee,[2,68]),t(Ee,[2,69]),t(Ee,[2,70]),{31:134,42:[1,135]},{12:[1,136]},{33:[1,137]},t(Te,[2,28]),t(Te,[2,29]),t(Te,[2,30]),t(Te,[2,31]),t(Te,[2,32]),t(Te,[2,33]),t(Te,[2,34]),{1:[2,9]},{1:[2,10]},{1:[2,11]},{1:[2,12]},t(J,[2,18]),t(ae,[2,38]),t(Ne,[2,72]),t(we,[2,74]),t(Ee,[2,24]),t(Ee,[2,35]),t(De,[2,25]),t(De,[2,26],{12:[1,138]}),t(De,[2,27])],defaultActions:{2:[2,1],3:[2,2],4:[2,7],5:[2,3],6:[2,4],7:[2,5],8:[2,6],74:[2,8],126:[2,9],127:[2,10],128:[2,11],129:[2,12]},parseError:o(function(Fe,Ue){if(Ue.recoverable)this.trace(Fe);else{var qe=new Error(Fe);throw qe.hash=Ue,qe}},"parseError"),parse:o(function(Fe){var Ue=this,qe=[0],Me=[],He=[null],K=[],oe=this.table,U="",ue=0,G=0,se=0,le=2,ke=1,me=K.slice.call(arguments,1),ye=Object.create(this.lexer),Re={yy:{}};for(var ve in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ve)&&(Re.yy[ve]=this.yy[ve]);ye.setInput(Fe,Re.yy),Re.yy.lexer=ye,Re.yy.parser=this,typeof ye.yylloc>"u"&&(ye.yylloc={});var Oe=ye.yylloc;K.push(Oe);var We=ye.options&&ye.options.ranges;typeof Re.yy.parseError=="function"?this.parseError=Re.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Be(yt){qe.length=qe.length-2*yt,He.length=He.length-yt,K.length=K.length-yt}o(Be,"popStack");function Qe(){var yt;return yt=Me.pop()||ye.lex()||ke,typeof yt!="number"&&(yt instanceof Array&&(Me=yt,yt=Me.pop()),yt=Ue.symbols_[yt]||yt),yt}o(Qe,"lex");for(var ce,it,fe,ut,Nt,Pt,St={},It,ot,ct,Dt;;){if(fe=qe[qe.length-1],this.defaultActions[fe]?ut=this.defaultActions[fe]:((ce===null||typeof ce>"u")&&(ce=Qe()),ut=oe[fe]&&oe[fe][ce]),typeof ut>"u"||!ut.length||!ut[0]){var kt="";Dt=[];for(It in oe[fe])this.terminals_[It]&&It>le&&Dt.push("'"+this.terminals_[It]+"'");ye.showPosition?kt="Parse error on line "+(ue+1)+`: +`+ye.showPosition()+` +Expecting `+Dt.join(", ")+", got '"+(this.terminals_[ce]||ce)+"'":kt="Parse error on line "+(ue+1)+": Unexpected "+(ce==ke?"end of input":"'"+(this.terminals_[ce]||ce)+"'"),this.parseError(kt,{text:ye.match,token:this.terminals_[ce]||ce,line:ye.yylineno,loc:Oe,expected:Dt})}if(ut[0]instanceof Array&&ut.length>1)throw new Error("Parse Error: multiple actions possible at state: "+fe+", token: "+ce);switch(ut[0]){case 1:qe.push(ce),He.push(ye.yytext),K.push(ye.yylloc),qe.push(ut[1]),ce=null,it?(ce=it,it=null):(G=ye.yyleng,U=ye.yytext,ue=ye.yylineno,Oe=ye.yylloc,se>0&&se--);break;case 2:if(ot=this.productions_[ut[1]][1],St.$=He[He.length-ot],St._$={first_line:K[K.length-(ot||1)].first_line,last_line:K[K.length-1].last_line,first_column:K[K.length-(ot||1)].first_column,last_column:K[K.length-1].last_column},We&&(St._$.range=[K[K.length-(ot||1)].range[0],K[K.length-1].range[1]]),Pt=this.performAction.apply(St,[U,G,ue,Re.yy,ut[1],He,K].concat(me)),typeof Pt<"u")return Pt;ot&&(qe=qe.slice(0,-1*ot*2),He=He.slice(0,-1*ot),K=K.slice(0,-1*ot)),qe.push(this.productions_[ut[1]][0]),He.push(St.$),K.push(St._$),ct=oe[qe[qe.length-2]][qe[qe.length-1]],qe.push(ct);break;case 3:return!0}}return!0},"parse")},pe=(function(){var Ce={EOF:1,parseError:o(function(Ue,qe){if(this.yy.parser)this.yy.parser.parseError(Ue,qe);else throw new Error(Ue)},"parseError"),setInput:o(function(Fe,Ue){return this.yy=Ue||this.yy||{},this._input=Fe,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var Fe=this._input[0];this.yytext+=Fe,this.yyleng++,this.offset++,this.match+=Fe,this.matched+=Fe;var Ue=Fe.match(/(?:\r\n?|\n).*/g);return Ue?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Fe},"input"),unput:o(function(Fe){var Ue=Fe.length,qe=Fe.split(/(?:\r\n?|\n)/g);this._input=Fe+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Ue),this.offset-=Ue;var Me=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),qe.length-1&&(this.yylineno-=qe.length-1);var He=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:qe?(qe.length===Me.length?this.yylloc.first_column:0)+Me[Me.length-qe.length].length-qe[0].length:this.yylloc.first_column-Ue},this.options.ranges&&(this.yylloc.range=[He[0],He[0]+this.yyleng-Ue]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(Fe){this.unput(this.match.slice(Fe))},"less"),pastInput:o(function(){var Fe=this.matched.substr(0,this.matched.length-this.match.length);return(Fe.length>20?"...":"")+Fe.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var Fe=this.match;return Fe.length<20&&(Fe+=this._input.substr(0,20-Fe.length)),(Fe.substr(0,20)+(Fe.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var Fe=this.pastInput(),Ue=new Array(Fe.length+1).join("-");return Fe+this.upcomingInput()+` +`+Ue+"^"},"showPosition"),test_match:o(function(Fe,Ue){var qe,Me,He;if(this.options.backtrack_lexer&&(He={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(He.yylloc.range=this.yylloc.range.slice(0))),Me=Fe[0].match(/(?:\r\n?|\n).*/g),Me&&(this.yylineno+=Me.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Me?Me[Me.length-1].length-Me[Me.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Fe[0].length},this.yytext+=Fe[0],this.match+=Fe[0],this.matches=Fe,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(Fe[0].length),this.matched+=Fe[0],qe=this.performAction.call(this,this.yy,this,Ue,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),qe)return qe;if(this._backtrack){for(var K in He)this[K]=He[K];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Fe,Ue,qe,Me;this._more||(this.yytext="",this.match="");for(var He=this._currentRules(),K=0;KUe[0].length)){if(Ue=qe,Me=K,this.options.backtrack_lexer){if(Fe=this.test_match(qe,He[K]),Fe!==!1)return Fe;if(this._backtrack){Ue=!1;continue}else return!1}else if(!this.options.flex)break}return Ue?(Fe=this.test_match(Ue,He[Me]),Fe!==!1?Fe:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var Ue=this.next();return Ue||this.lex()},"lex"),begin:o(function(Ue){this.conditionStack.push(Ue)},"begin"),popState:o(function(){var Ue=this.conditionStack.length-1;return Ue>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(Ue){return Ue=this.conditionStack.length-1-Math.abs(Ue||0),Ue>=0?this.conditionStack[Ue]:"INITIAL"},"topState"),pushState:o(function(Ue){this.begin(Ue)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(Ue,qe,Me,He){var K=He;switch(Me){case 0:return 6;case 1:return 7;case 2:return 8;case 3:return 9;case 4:return 22;case 5:return 23;case 6:return this.begin("acc_title"),24;break;case 7:return this.popState(),"acc_title_value";break;case 8:return this.begin("acc_descr"),26;break;case 9:return this.popState(),"acc_descr_value";break;case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:break;case 14:c;break;case 15:return 12;case 16:break;case 17:return 11;case 18:return 15;case 19:return 16;case 20:return 17;case 21:return 18;case 22:return this.begin("person_ext"),45;break;case 23:return this.begin("person"),44;break;case 24:return this.begin("system_ext_queue"),51;break;case 25:return this.begin("system_ext_db"),50;break;case 26:return this.begin("system_ext"),49;break;case 27:return this.begin("system_queue"),48;break;case 28:return this.begin("system_db"),47;break;case 29:return this.begin("system"),46;break;case 30:return this.begin("boundary"),37;break;case 31:return this.begin("enterprise_boundary"),34;break;case 32:return this.begin("system_boundary"),36;break;case 33:return this.begin("container_ext_queue"),57;break;case 34:return this.begin("container_ext_db"),56;break;case 35:return this.begin("container_ext"),55;break;case 36:return this.begin("container_queue"),54;break;case 37:return this.begin("container_db"),53;break;case 38:return this.begin("container"),52;break;case 39:return this.begin("container_boundary"),38;break;case 40:return this.begin("component_ext_queue"),63;break;case 41:return this.begin("component_ext_db"),62;break;case 42:return this.begin("component_ext"),61;break;case 43:return this.begin("component_queue"),60;break;case 44:return this.begin("component_db"),59;break;case 45:return this.begin("component"),58;break;case 46:return this.begin("node"),39;break;case 47:return this.begin("node"),39;break;case 48:return this.begin("node_l"),40;break;case 49:return this.begin("node_r"),41;break;case 50:return this.begin("rel"),64;break;case 51:return this.begin("birel"),65;break;case 52:return this.begin("rel_u"),66;break;case 53:return this.begin("rel_u"),66;break;case 54:return this.begin("rel_d"),67;break;case 55:return this.begin("rel_d"),67;break;case 56:return this.begin("rel_l"),68;break;case 57:return this.begin("rel_l"),68;break;case 58:return this.begin("rel_r"),69;break;case 59:return this.begin("rel_r"),69;break;case 60:return this.begin("rel_b"),70;break;case 61:return this.begin("rel_index"),71;break;case 62:return this.begin("update_el_style"),72;break;case 63:return this.begin("update_rel_style"),73;break;case 64:return this.begin("update_layout_config"),74;break;case 65:return"EOF_IN_STRUCT";case 66:return this.begin("attribute"),"ATTRIBUTE_EMPTY";break;case 67:this.begin("attribute");break;case 68:this.popState(),this.popState();break;case 69:return 80;case 70:break;case 71:return 80;case 72:this.begin("string");break;case 73:this.popState();break;case 74:return"STR";case 75:this.begin("string_kv");break;case 76:return this.begin("string_kv_key"),"STR_KEY";break;case 77:this.popState(),this.begin("string_kv_value");break;case 78:return"STR_VALUE";case 79:this.popState(),this.popState();break;case 80:return"STR";case 81:return"LBRACE";case 82:return"RBRACE";case 83:return"SPACE";case 84:return"EOL";case 85:return 14}},"anonymous"),rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:title\s[^#\n;]+)/,/^(?:accDescription\s[^#\n;]+)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:C4Context\b)/,/^(?:C4Container\b)/,/^(?:C4Component\b)/,/^(?:C4Dynamic\b)/,/^(?:C4Deployment\b)/,/^(?:Person_Ext\b)/,/^(?:Person\b)/,/^(?:SystemQueue_Ext\b)/,/^(?:SystemDb_Ext\b)/,/^(?:System_Ext\b)/,/^(?:SystemQueue\b)/,/^(?:SystemDb\b)/,/^(?:System\b)/,/^(?:Boundary\b)/,/^(?:Enterprise_Boundary\b)/,/^(?:System_Boundary\b)/,/^(?:ContainerQueue_Ext\b)/,/^(?:ContainerDb_Ext\b)/,/^(?:Container_Ext\b)/,/^(?:ContainerQueue\b)/,/^(?:ContainerDb\b)/,/^(?:Container\b)/,/^(?:Container_Boundary\b)/,/^(?:ComponentQueue_Ext\b)/,/^(?:ComponentDb_Ext\b)/,/^(?:Component_Ext\b)/,/^(?:ComponentQueue\b)/,/^(?:ComponentDb\b)/,/^(?:Component\b)/,/^(?:Deployment_Node\b)/,/^(?:Node\b)/,/^(?:Node_L\b)/,/^(?:Node_R\b)/,/^(?:Rel\b)/,/^(?:BiRel\b)/,/^(?:Rel_Up\b)/,/^(?:Rel_U\b)/,/^(?:Rel_Down\b)/,/^(?:Rel_D\b)/,/^(?:Rel_Left\b)/,/^(?:Rel_L\b)/,/^(?:Rel_Right\b)/,/^(?:Rel_R\b)/,/^(?:Rel_Back\b)/,/^(?:RelIndex\b)/,/^(?:UpdateElementStyle\b)/,/^(?:UpdateRelStyle\b)/,/^(?:UpdateLayoutConfig\b)/,/^(?:$)/,/^(?:[(][ ]*[,])/,/^(?:[(])/,/^(?:[)])/,/^(?:,,)/,/^(?:,)/,/^(?:[ ]*["]["])/,/^(?:[ ]*["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:[ ]*[\$])/,/^(?:[^=]*)/,/^(?:[=][ ]*["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:[^,]+)/,/^(?:\{)/,/^(?:\})/,/^(?:[\s]+)/,/^(?:[\n\r]+)/,/^(?:$)/],conditions:{acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},string_kv_value:{rules:[78,79],inclusive:!1},string_kv_key:{rules:[77],inclusive:!1},string_kv:{rules:[76],inclusive:!1},string:{rules:[73,74],inclusive:!1},attribute:{rules:[68,69,70,71,72,75,80],inclusive:!1},update_layout_config:{rules:[65,66,67,68],inclusive:!1},update_rel_style:{rules:[65,66,67,68],inclusive:!1},update_el_style:{rules:[65,66,67,68],inclusive:!1},rel_b:{rules:[65,66,67,68],inclusive:!1},rel_r:{rules:[65,66,67,68],inclusive:!1},rel_l:{rules:[65,66,67,68],inclusive:!1},rel_d:{rules:[65,66,67,68],inclusive:!1},rel_u:{rules:[65,66,67,68],inclusive:!1},rel_bi:{rules:[],inclusive:!1},rel:{rules:[65,66,67,68],inclusive:!1},node_r:{rules:[65,66,67,68],inclusive:!1},node_l:{rules:[65,66,67,68],inclusive:!1},node:{rules:[65,66,67,68],inclusive:!1},index:{rules:[],inclusive:!1},rel_index:{rules:[65,66,67,68],inclusive:!1},component_ext_queue:{rules:[65,66,67,68],inclusive:!1},component_ext_db:{rules:[65,66,67,68],inclusive:!1},component_ext:{rules:[65,66,67,68],inclusive:!1},component_queue:{rules:[65,66,67,68],inclusive:!1},component_db:{rules:[65,66,67,68],inclusive:!1},component:{rules:[65,66,67,68],inclusive:!1},container_boundary:{rules:[65,66,67,68],inclusive:!1},container_ext_queue:{rules:[65,66,67,68],inclusive:!1},container_ext_db:{rules:[65,66,67,68],inclusive:!1},container_ext:{rules:[65,66,67,68],inclusive:!1},container_queue:{rules:[65,66,67,68],inclusive:!1},container_db:{rules:[65,66,67,68],inclusive:!1},container:{rules:[65,66,67,68],inclusive:!1},birel:{rules:[65,66,67,68],inclusive:!1},system_boundary:{rules:[65,66,67,68],inclusive:!1},enterprise_boundary:{rules:[65,66,67,68],inclusive:!1},boundary:{rules:[65,66,67,68],inclusive:!1},system_ext_queue:{rules:[65,66,67,68],inclusive:!1},system_ext_db:{rules:[65,66,67,68],inclusive:!1},system_ext:{rules:[65,66,67,68],inclusive:!1},system_queue:{rules:[65,66,67,68],inclusive:!1},system_db:{rules:[65,66,67,68],inclusive:!1},system:{rules:[65,66,67,68],inclusive:!1},person_ext:{rules:[65,66,67,68],inclusive:!1},person:{rules:[65,66,67,68],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,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,81,82,83,84,85],inclusive:!0}}};return Ce})();$e.lexer=pe;function Je(){this.yy={}}return o(Je,"Parser"),Je.prototype=$e,$e.Parser=Je,new Je})();Jx.parser=Jx;YK=Jx});var uRe,hRe,Hr,El,Xi=P(()=>{"use strict";bt();uRe=o(function(t,e){for(let r of e)t.attr(r[0],r[1])},"d3Attrs"),hRe=o(function(t,e,r){let i=new Map;return r?(i.set("width","100%"),i.set("style",`max-width: ${e}px;`)):(i.set("height",t),i.set("width",e)),i},"calculateSvgSizeAttrs"),Hr=o(function(t,e,r,i){let n=hRe(e,r,i);uRe(t,n)},"configureSvgSize"),El=o(function(t,e,r,i){let n=e.node().getBBox(),a=n.width,s=n.height;Q.info(`SVG bounds: ${a}x${s}`,n);let l=0,u=0;Q.info(`Graph bounds: ${l}x${u}`,t),l=a+r*2,u=s+r*2,Q.info(`Calculated bounds: ${l}x${u}`),Hr(e,u,l,i);let h=`${n.x-r} ${n.y-r} ${n.width+2*r} ${n.height+2*r}`;e.attr("viewBox",h)},"setupGraphViewbox")});var tw,fRe,jK,XK,hL=P(()=>{"use strict";bt();tw={},fRe=o((t,e,r,i)=>{let n="";return t in tw&&tw[t]?n=tw[t]({...r,svgId:i}):Q.warn(`No theme found for ${t}`),` & { + font-family: ${r.fontFamily}; + font-size: ${r.fontSize}; + fill: ${r.textColor} + } + @keyframes edge-animation-frame { + from { + stroke-dashoffset: 0; + } + } + @keyframes dash { + to { + stroke-dashoffset: 0; + } + } + & .edge-animation-slow { + stroke-dasharray: 9,5 !important; + stroke-dashoffset: 900; + animation: dash 50s linear infinite; + stroke-linecap: round; + } + & .edge-animation-fast { + stroke-dasharray: 9,5 !important; + stroke-dashoffset: 900; + animation: dash 20s linear infinite; + stroke-linecap: round; + } + /* Classes common for multiple diagrams */ + + & .error-icon { + fill: ${r.errorBkgColor}; + } + & .error-text { + fill: ${r.errorTextColor}; + stroke: ${r.errorTextColor}; + } + + & .edge-thickness-normal { + stroke-width: ${r.strokeWidth??1}px; + } + & .edge-thickness-thick { + stroke-width: 3.5px + } + & .edge-pattern-solid { + stroke-dasharray: 0; + } + & .edge-thickness-invisible { + stroke-width: 0; + fill: none; + } + & .edge-pattern-dashed{ + stroke-dasharray: 3; + } + .edge-pattern-dotted { + stroke-dasharray: 2; + } + + & .marker { + fill: ${r.lineColor}; + stroke: ${r.lineColor}; + } + & .marker.cross { + stroke: ${r.lineColor}; + } + + & svg { + font-family: ${r.fontFamily}; + font-size: ${r.fontSize}; + } + & p { + margin: 0 + } + + ${n} + .node .neo-node { + stroke: ${r.nodeBorder}; + } + + [data-look="neo"].node rect, [data-look="neo"].cluster rect, [data-look="neo"].node polygon { + stroke: ${r.useGradient?"url("+i+"-gradient)":r.nodeBorder}; + filter: ${r.dropShadow?r.dropShadow.replace("url(#drop-shadow)",`url(${i}-drop-shadow)`):"none"}; + } + + + [data-look="neo"].node path { + stroke: ${r.useGradient?"url("+i+"-gradient)":r.nodeBorder}; + stroke-width: ${r.strokeWidth??1}px; + } + + [data-look="neo"].node .outer-path { + filter: ${r.dropShadow?r.dropShadow.replace("url(#drop-shadow)",`url(${i}-drop-shadow)`):"none"}; + } + + [data-look="neo"].node .neo-line path { + stroke: ${r.nodeBorder}; + filter: none; + } + + [data-look="neo"].node circle{ + stroke: ${r.useGradient?"url("+i+"-gradient)":r.nodeBorder}; + filter: ${r.dropShadow?r.dropShadow.replace("url(#drop-shadow)",`url(${i}-drop-shadow)`):"none"}; + } + + [data-look="neo"].node circle .state-start{ + fill: #000000; + } + + [data-look="neo"].icon-shape .icon { + fill: ${r.useGradient?"url("+i+"-gradient)":r.nodeBorder}; + filter: ${r.dropShadow?r.dropShadow.replace("url(#drop-shadow)",`url(${i}-drop-shadow)`):"none"}; + } + + [data-look="neo"].icon-shape .icon-neo path { + stroke: ${r.useGradient?"url("+i+"-gradient)":r.nodeBorder}; + filter: ${r.dropShadow?r.dropShadow.replace("url(#drop-shadow)",`url(${i}-drop-shadow)`):"none"}; + } + + ${e} +`},"getStyles"),jK=o((t,e)=>{e!==void 0&&(tw[t]=e)},"addStylesForDiagram"),XK=fRe});var e2={};ur(e2,{clear:()=>wr,getAccDescription:()=>Rr,getAccTitle:()=>Dr,getDiagramTitle:()=>Nr,setAccDescription:()=>Lr,setAccTitle:()=>Ar,setDiagramTitle:()=>Mr});var fL,dL,pL,mL,wr,Ar,Dr,Lr,Rr,Mr,Nr,Ki=P(()=>{"use strict";Vr();Sr();fL="",dL="",pL="",mL=o(t=>Tr(t,Lt()),"sanitizeText"),wr=o(()=>{fL="",pL="",dL=""},"clear"),Ar=o(t=>{fL=mL(t).replace(/^\s+/g,"")},"setAccTitle"),Dr=o(()=>fL,"getAccTitle"),Lr=o(t=>{pL=mL(t).replace(/\n\s+/g,` +`)},"setAccDescription"),Rr=o(()=>pL,"getAccDescription"),Mr=o(t=>{dL=mL(t)},"setDiagramTitle"),Nr=o(()=>dL,"getDiagramTitle")});var KK,dRe,ge,t2,iw,r2,yL,pRe,rw,Qp,i2,gL,Ut=P(()=>{"use strict";Kp();bt();Sr();Vr();Xi();hL();Ki();KK=Q,dRe=_x,ge=Lt,t2=x4,iw=Nf,r2=o(t=>Tr(t,ge()),"sanitizeText"),yL=El,pRe=o(()=>e2,"getCommonDb"),rw={},Qp=o((t,e,r)=>{rw[t]&&KK.warn(`Diagram with id ${t} already registered. Overwriting.`),rw[t]=e,r&&cL(t,r),jK(t,e.styles),e.injectUtils?.(KK,dRe,ge,r2,yL,pRe(),()=>{})},"registerDiagram"),i2=o(t=>{if(t in rw)return rw[t];throw new gL(t)},"getDiagram"),gL=class extends Error{static{o(this,"DiagramNotFoundError")}constructor(e){super(`Diagram ${e} not found.`)}}});var fc,Ff,Bs,hc,cu,n2,vL,xL,nw,aw,QK,mRe,gRe,yRe,vRe,xRe,bRe,TRe,kRe,CRe,wRe,ERe,SRe,ARe,_Re,DRe,LRe,RRe,ZK,NRe,IRe,JK,MRe,ORe,PRe,BRe,$f,FRe,$Re,zRe,GRe,VRe,a2,bL=P(()=>{"use strict";Ut();Vr();Ki();fc=[],Ff=[""],Bs="global",hc="",cu=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],n2=[],vL="",xL=!1,nw=4,aw=2,mRe=o(function(){return QK},"getC4Type"),gRe=o(function(t){QK=Tr(t,ge())},"setC4Type"),yRe=o(function(t,e,r,i,n,a,s,l,u){if(t==null||e===void 0||e===null||r===void 0||r===null||i===void 0||i===null)return;let h={},f=n2.find(d=>d.from===e&&d.to===r);if(f?h=f:n2.push(h),h.type=t,h.from=e,h.to=r,h.label={text:i},n==null)h.techn={text:""};else if(typeof n=="object"){let[d,p]=Object.entries(n)[0];h[d]={text:p}}else h.techn={text:n};if(a==null)h.descr={text:""};else if(typeof a=="object"){let[d,p]=Object.entries(a)[0];h[d]={text:p}}else h.descr={text:a};if(typeof s=="object"){let[d,p]=Object.entries(s)[0];h[d]=p}else h.sprite=s;if(typeof l=="object"){let[d,p]=Object.entries(l)[0];h[d]=p}else h.tags=l;if(typeof u=="object"){let[d,p]=Object.entries(u)[0];h[d]=p}else h.link=u;h.wrap=$f()},"addRel"),vRe=o(function(t,e,r,i,n,a,s){if(e===null||r===null)return;let l={},u=fc.find(h=>h.alias===e);if(u&&e===u.alias?l=u:(l.alias=e,fc.push(l)),r==null?l.label={text:""}:l.label={text:r},i==null)l.descr={text:""};else if(typeof i=="object"){let[h,f]=Object.entries(i)[0];l[h]={text:f}}else l.descr={text:i};if(typeof n=="object"){let[h,f]=Object.entries(n)[0];l[h]=f}else l.sprite=n;if(typeof a=="object"){let[h,f]=Object.entries(a)[0];l[h]=f}else l.tags=a;if(typeof s=="object"){let[h,f]=Object.entries(s)[0];l[h]=f}else l.link=s;l.typeC4Shape={text:t},l.parentBoundary=Bs,l.wrap=$f()},"addPersonOrSystem"),xRe=o(function(t,e,r,i,n,a,s,l){if(e===null||r===null)return;let u={},h=fc.find(f=>f.alias===e);if(h&&e===h.alias?u=h:(u.alias=e,fc.push(u)),r==null?u.label={text:""}:u.label={text:r},i==null)u.techn={text:""};else if(typeof i=="object"){let[f,d]=Object.entries(i)[0];u[f]={text:d}}else u.techn={text:i};if(n==null)u.descr={text:""};else if(typeof n=="object"){let[f,d]=Object.entries(n)[0];u[f]={text:d}}else u.descr={text:n};if(typeof a=="object"){let[f,d]=Object.entries(a)[0];u[f]=d}else u.sprite=a;if(typeof s=="object"){let[f,d]=Object.entries(s)[0];u[f]=d}else u.tags=s;if(typeof l=="object"){let[f,d]=Object.entries(l)[0];u[f]=d}else u.link=l;u.wrap=$f(),u.typeC4Shape={text:t},u.parentBoundary=Bs},"addContainer"),bRe=o(function(t,e,r,i,n,a,s,l){if(e===null||r===null)return;let u={},h=fc.find(f=>f.alias===e);if(h&&e===h.alias?u=h:(u.alias=e,fc.push(u)),r==null?u.label={text:""}:u.label={text:r},i==null)u.techn={text:""};else if(typeof i=="object"){let[f,d]=Object.entries(i)[0];u[f]={text:d}}else u.techn={text:i};if(n==null)u.descr={text:""};else if(typeof n=="object"){let[f,d]=Object.entries(n)[0];u[f]={text:d}}else u.descr={text:n};if(typeof a=="object"){let[f,d]=Object.entries(a)[0];u[f]=d}else u.sprite=a;if(typeof s=="object"){let[f,d]=Object.entries(s)[0];u[f]=d}else u.tags=s;if(typeof l=="object"){let[f,d]=Object.entries(l)[0];u[f]=d}else u.link=l;u.wrap=$f(),u.typeC4Shape={text:t},u.parentBoundary=Bs},"addComponent"),TRe=o(function(t,e,r,i,n){if(t===null||e===null)return;let a={},s=cu.find(l=>l.alias===t);if(s&&t===s.alias?a=s:(a.alias=t,cu.push(a)),e==null?a.label={text:""}:a.label={text:e},r==null)a.type={text:"system"};else if(typeof r=="object"){let[l,u]=Object.entries(r)[0];a[l]={text:u}}else a.type={text:r};if(typeof i=="object"){let[l,u]=Object.entries(i)[0];a[l]=u}else a.tags=i;if(typeof n=="object"){let[l,u]=Object.entries(n)[0];a[l]=u}else a.link=n;a.parentBoundary=Bs,a.wrap=$f(),hc=Bs,Bs=t,Ff.push(hc)},"addPersonOrSystemBoundary"),kRe=o(function(t,e,r,i,n){if(t===null||e===null)return;let a={},s=cu.find(l=>l.alias===t);if(s&&t===s.alias?a=s:(a.alias=t,cu.push(a)),e==null?a.label={text:""}:a.label={text:e},r==null)a.type={text:"container"};else if(typeof r=="object"){let[l,u]=Object.entries(r)[0];a[l]={text:u}}else a.type={text:r};if(typeof i=="object"){let[l,u]=Object.entries(i)[0];a[l]=u}else a.tags=i;if(typeof n=="object"){let[l,u]=Object.entries(n)[0];a[l]=u}else a.link=n;a.parentBoundary=Bs,a.wrap=$f(),hc=Bs,Bs=t,Ff.push(hc)},"addContainerBoundary"),CRe=o(function(t,e,r,i,n,a,s,l){if(e===null||r===null)return;let u={},h=cu.find(f=>f.alias===e);if(h&&e===h.alias?u=h:(u.alias=e,cu.push(u)),r==null?u.label={text:""}:u.label={text:r},i==null)u.type={text:"node"};else if(typeof i=="object"){let[f,d]=Object.entries(i)[0];u[f]={text:d}}else u.type={text:i};if(n==null)u.descr={text:""};else if(typeof n=="object"){let[f,d]=Object.entries(n)[0];u[f]={text:d}}else u.descr={text:n};if(typeof s=="object"){let[f,d]=Object.entries(s)[0];u[f]=d}else u.tags=s;if(typeof l=="object"){let[f,d]=Object.entries(l)[0];u[f]=d}else u.link=l;u.nodeType=t,u.parentBoundary=Bs,u.wrap=$f(),hc=Bs,Bs=e,Ff.push(hc)},"addDeploymentNode"),wRe=o(function(){Bs=hc,Ff.pop(),hc=Ff.pop(),Ff.push(hc)},"popBoundaryParseStack"),ERe=o(function(t,e,r,i,n,a,s,l,u,h,f){let d=fc.find(p=>p.alias===e);if(!(d===void 0&&(d=cu.find(p=>p.alias===e),d===void 0))){if(r!=null)if(typeof r=="object"){let[p,m]=Object.entries(r)[0];d[p]=m}else d.bgColor=r;if(i!=null)if(typeof i=="object"){let[p,m]=Object.entries(i)[0];d[p]=m}else d.fontColor=i;if(n!=null)if(typeof n=="object"){let[p,m]=Object.entries(n)[0];d[p]=m}else d.borderColor=n;if(a!=null)if(typeof a=="object"){let[p,m]=Object.entries(a)[0];d[p]=m}else d.shadowing=a;if(s!=null)if(typeof s=="object"){let[p,m]=Object.entries(s)[0];d[p]=m}else d.shape=s;if(l!=null)if(typeof l=="object"){let[p,m]=Object.entries(l)[0];d[p]=m}else d.sprite=l;if(u!=null)if(typeof u=="object"){let[p,m]=Object.entries(u)[0];d[p]=m}else d.techn=u;if(h!=null)if(typeof h=="object"){let[p,m]=Object.entries(h)[0];d[p]=m}else d.legendText=h;if(f!=null)if(typeof f=="object"){let[p,m]=Object.entries(f)[0];d[p]=m}else d.legendSprite=f}},"updateElStyle"),SRe=o(function(t,e,r,i,n,a,s){let l=n2.find(u=>u.from===e&&u.to===r);if(l!==void 0){if(i!=null)if(typeof i=="object"){let[u,h]=Object.entries(i)[0];l[u]=h}else l.textColor=i;if(n!=null)if(typeof n=="object"){let[u,h]=Object.entries(n)[0];l[u]=h}else l.lineColor=n;if(a!=null)if(typeof a=="object"){let[u,h]=Object.entries(a)[0];l[u]=parseInt(h)}else l.offsetX=parseInt(a);if(s!=null)if(typeof s=="object"){let[u,h]=Object.entries(s)[0];l[u]=parseInt(h)}else l.offsetY=parseInt(s)}},"updateRelStyle"),ARe=o(function(t,e,r){let i=nw,n=aw;if(typeof e=="object"){let a=Object.values(e)[0];i=parseInt(a)}else i=parseInt(e);if(typeof r=="object"){let a=Object.values(r)[0];n=parseInt(a)}else n=parseInt(r);i>=1&&(nw=i),n>=1&&(aw=n)},"updateLayoutConfig"),_Re=o(function(){return nw},"getC4ShapeInRow"),DRe=o(function(){return aw},"getC4BoundaryInRow"),LRe=o(function(){return Bs},"getCurrentBoundaryParse"),RRe=o(function(){return hc},"getParentBoundaryParse"),ZK=o(function(t){return t==null?fc:fc.filter(e=>e.parentBoundary===t)},"getC4ShapeArray"),NRe=o(function(t){return fc.find(e=>e.alias===t)},"getC4Shape"),IRe=o(function(t){return Object.keys(ZK(t))},"getC4ShapeKeys"),JK=o(function(t){return t==null?cu:cu.filter(e=>e.parentBoundary===t)},"getBoundaries"),MRe=JK,ORe=o(function(){return n2},"getRels"),PRe=o(function(){return vL},"getTitle"),BRe=o(function(t){xL=t},"setWrap"),$f=o(function(){return xL},"autoWrap"),FRe=o(function(){fc=[],cu=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],hc="",Bs="global",Ff=[""],n2=[],Ff=[""],vL="",xL=!1,nw=4,aw=2},"clear"),$Re={SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25},zRe={FILLED:0,OPEN:1},GRe={LEFTOF:0,RIGHTOF:1,OVER:2},VRe=o(function(t){vL=Tr(t,ge())},"setTitle"),a2={addPersonOrSystem:vRe,addPersonOrSystemBoundary:TRe,addContainer:xRe,addContainerBoundary:kRe,addComponent:bRe,addDeploymentNode:CRe,popBoundaryParseStack:wRe,addRel:yRe,updateElStyle:ERe,updateRelStyle:SRe,updateLayoutConfig:ARe,autoWrap:$f,setWrap:BRe,getC4ShapeArray:ZK,getC4Shape:NRe,getC4ShapeKeys:IRe,getBoundaries:JK,getBoundarys:MRe,getCurrentBoundaryParse:LRe,getParentBoundaryParse:RRe,getRels:ORe,getTitle:PRe,getC4Type:mRe,getC4ShapeInRow:_Re,getC4BoundaryInRow:DRe,setAccTitle:Ar,getAccTitle:Dr,getAccDescription:Rr,setAccDescription:Lr,getConfig:o(()=>ge().c4,"getConfig"),clear:FRe,LINETYPE:$Re,ARROWTYPE:zRe,PLACEMENT:GRe,setTitle:VRe,setC4Type:gRe}});function Zp(t,e){return t==null||e==null?NaN:te?1:t>=e?0:NaN}var TL=P(()=>{"use strict";o(Zp,"ascending")});function kL(t,e){return t==null||e==null?NaN:et?1:e>=t?0:NaN}var eQ=P(()=>{"use strict";o(kL,"descending")});function Jp(t){let e,r,i;t.length!==2?(e=Zp,r=o((l,u)=>Zp(t(l),u),"compare2"),i=o((l,u)=>t(l)-u,"delta")):(e=t===Zp||t===kL?t:qRe,r=t,i=t);function n(l,u,h=0,f=l.length){if(h>>1;r(l[d],u)<0?h=d+1:f=d}while(h>>1;r(l[d],u)<=0?h=d+1:f=d}while(hh&&i(l[d-1],u)>-i(l[d],u)?d-1:d}return o(s,"center"),{left:n,center:s,right:a}}function qRe(){return 0}var CL=P(()=>{"use strict";TL();eQ();o(Jp,"bisector");o(qRe,"zero")});function wL(t){return t===null?NaN:+t}var tQ=P(()=>{"use strict";o(wL,"number")});var rQ,iQ,WRe,URe,EL,nQ=P(()=>{"use strict";TL();CL();tQ();rQ=Jp(Zp),iQ=rQ.right,WRe=rQ.left,URe=Jp(wL).center,EL=iQ});function aQ({_intern:t,_key:e},r){let i=e(r);return t.has(i)?t.get(i):r}function HRe({_intern:t,_key:e},r){let i=e(r);return t.has(i)?t.get(i):(t.set(i,r),r)}function YRe({_intern:t,_key:e},r){let i=e(r);return t.has(i)&&(r=t.get(i),t.delete(i)),r}function jRe(t){return t!==null&&typeof t=="object"?t.valueOf():t}var Mg,sQ=P(()=>{"use strict";Mg=class extends Map{static{o(this,"InternMap")}constructor(e,r=jRe){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:r}}),e!=null)for(let[i,n]of e)this.set(i,n)}get(e){return super.get(aQ(this,e))}has(e){return super.has(aQ(this,e))}set(e,r){return super.set(HRe(this,e),r)}delete(e){return super.delete(YRe(this,e))}};o(aQ,"intern_get");o(HRe,"intern_set");o(YRe,"intern_delete");o(jRe,"keyof")});function sw(t,e,r){let i=(e-t)/Math.max(0,r),n=Math.floor(Math.log10(i)),a=i/Math.pow(10,n),s=a>=XRe?10:a>=KRe?5:a>=QRe?2:1,l,u,h;return n<0?(h=Math.pow(10,-n)/s,l=Math.round(t*h),u=Math.round(e*h),l/he&&--u,h=-h):(h=Math.pow(10,n)*s,l=Math.round(t/h),u=Math.round(e/h),l*he&&--u),u0))return[];if(t===e)return[t];let i=e=n))return[];let l=a-n+1,u=new Array(l);if(i)if(s<0)for(let h=0;h{"use strict";XRe=Math.sqrt(50),KRe=Math.sqrt(10),QRe=Math.sqrt(2);o(sw,"tickSpec");o(ow,"ticks");o(s2,"tickIncrement");o(Og,"tickStep")});function lw(t,e){let r;if(e===void 0)for(let i of t)i!=null&&(r=i)&&(r=i);else{let i=-1;for(let n of t)(n=e(n,++i,t))!=null&&(r=n)&&(r=n)}return r}var lQ=P(()=>{"use strict";o(lw,"max")});function cw(t,e){let r;if(e===void 0)for(let i of t)i!=null&&(r>i||r===void 0&&i>=i)&&(r=i);else{let i=-1;for(let n of t)(n=e(n,++i,t))!=null&&(r>n||r===void 0&&n>=n)&&(r=n)}return r}var cQ=P(()=>{"use strict";o(cw,"min")});function uw(t,e,r){t=+t,e=+e,r=(n=arguments.length)<2?(e=t,t=0,1):n<3?1:+r;for(var i=-1,n=Math.max(0,Math.ceil((e-t)/r))|0,a=new Array(n);++i{"use strict";o(uw,"range")});var zf=P(()=>{"use strict";nQ();CL();lQ();cQ();uQ();oQ();sQ()});function SL(t){return t}var hQ=P(()=>{"use strict";o(SL,"default")});function ZRe(t){return"translate("+t+",0)"}function JRe(t){return"translate(0,"+t+")"}function e9e(t){return e=>+t(e)}function t9e(t,e){return e=Math.max(0,t.bandwidth()-e*2)/2,t.round()&&(e=Math.round(e)),r=>+t(r)+e}function r9e(){return!this.__axis}function dQ(t,e){var r=[],i=null,n=null,a=6,s=6,l=3,u=typeof window<"u"&&window.devicePixelRatio>1?0:.5,h=t===fw||t===hw?-1:1,f=t===hw||t===AL?"x":"y",d=t===fw||t===_L?ZRe:JRe;function p(m){var g=i??(e.ticks?e.ticks.apply(e,r):e.domain()),y=n??(e.tickFormat?e.tickFormat.apply(e,r):SL),v=Math.max(a,0)+l,x=e.range(),b=+x[0]+u,T=+x[x.length-1]+u,w=(e.bandwidth?t9e:e9e)(e.copy(),u),k=m.selection?m.selection():m,C=k.selectAll(".domain").data([null]),E=k.selectAll(".tick").data(g,e).order(),S=E.exit(),L=E.enter().append("g").attr("class","tick"),M=E.select("line"),I=E.select("text");C=C.merge(C.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),E=E.merge(L),M=M.merge(L.append("line").attr("stroke","currentColor").attr(f+"2",h*a)),I=I.merge(L.append("text").attr("fill","currentColor").attr(f,h*v).attr("dy",t===fw?"0em":t===_L?"0.71em":"0.32em")),m!==k&&(C=C.transition(m),E=E.transition(m),M=M.transition(m),I=I.transition(m),S=S.transition(m).attr("opacity",fQ).attr("transform",function(A){return isFinite(A=w(A))?d(A+u):this.getAttribute("transform")}),L.attr("opacity",fQ).attr("transform",function(A){var _=this.parentNode.__axis;return d((_&&isFinite(_=_(A))?_:w(A))+u)})),S.remove(),C.attr("d",t===hw||t===AL?s?"M"+h*s+","+b+"H"+u+"V"+T+"H"+h*s:"M"+u+","+b+"V"+T:s?"M"+b+","+h*s+"V"+u+"H"+T+"V"+h*s:"M"+b+","+u+"H"+T),E.attr("opacity",1).attr("transform",function(A){return d(w(A)+u)}),M.attr(f+"2",h*a),I.attr(f,h*v).text(y),k.filter(r9e).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===AL?"start":t===hw?"end":"middle"),k.each(function(){this.__axis=w})}return o(p,"axis"),p.scale=function(m){return arguments.length?(e=m,p):e},p.ticks=function(){return r=Array.from(arguments),p},p.tickArguments=function(m){return arguments.length?(r=m==null?[]:Array.from(m),p):r.slice()},p.tickValues=function(m){return arguments.length?(i=m==null?null:Array.from(m),p):i&&i.slice()},p.tickFormat=function(m){return arguments.length?(n=m,p):n},p.tickSize=function(m){return arguments.length?(a=s=+m,p):a},p.tickSizeInner=function(m){return arguments.length?(a=+m,p):a},p.tickSizeOuter=function(m){return arguments.length?(s=+m,p):s},p.tickPadding=function(m){return arguments.length?(l=+m,p):l},p.offset=function(m){return arguments.length?(u=+m,p):u},p}function DL(t){return dQ(fw,t)}function LL(t){return dQ(_L,t)}var fw,AL,_L,hw,fQ,pQ=P(()=>{"use strict";hQ();fw=1,AL=2,_L=3,hw=4,fQ=1e-6;o(ZRe,"translateX");o(JRe,"translateY");o(e9e,"number");o(t9e,"center");o(r9e,"entering");o(dQ,"axis");o(DL,"axisTop");o(LL,"axisBottom")});var mQ=P(()=>{"use strict";pQ()});function yQ(){for(var t=0,e=arguments.length,r={},i;t=0&&(i=r.slice(n+1),r=r.slice(0,n)),r&&!e.hasOwnProperty(r))throw new Error("unknown type: "+r);return{type:r,name:i}})}function a9e(t,e){for(var r=0,i=t.length,n;r{"use strict";i9e={value:o(()=>{},"value")};o(yQ,"dispatch");o(dw,"Dispatch");o(n9e,"parseTypenames");dw.prototype=yQ.prototype={constructor:dw,on:o(function(t,e){var r=this._,i=n9e(t+"",r),n,a=-1,s=i.length;if(arguments.length<2){for(;++a0)for(var r=new Array(n),i=0,n,a;i{"use strict";vQ()});var pw,IL,ML=P(()=>{"use strict";pw="http://www.w3.org/1999/xhtml",IL={svg:"http://www.w3.org/2000/svg",xhtml:pw,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"}});function uu(t){var e=t+="",r=e.indexOf(":");return r>=0&&(e=t.slice(0,r))!=="xmlns"&&(t=t.slice(r+1)),IL.hasOwnProperty(e)?{space:IL[e],local:t}:t}var mw=P(()=>{"use strict";ML();o(uu,"default")});function s9e(t){return function(){var e=this.ownerDocument,r=this.namespaceURI;return r===pw&&e.documentElement.namespaceURI===pw?e.createElement(t):e.createElementNS(r,t)}}function o9e(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function o2(t){var e=uu(t);return(e.local?o9e:s9e)(e)}var OL=P(()=>{"use strict";mw();ML();o(s9e,"creatorInherit");o(o9e,"creatorFixed");o(o2,"default")});function l9e(){}function Gf(t){return t==null?l9e:function(){return this.querySelector(t)}}var gw=P(()=>{"use strict";o(l9e,"none");o(Gf,"default")});function PL(t){typeof t!="function"&&(t=Gf(t));for(var e=this._groups,r=e.length,i=new Array(r),n=0;n{"use strict";dc();gw();o(PL,"default")});function BL(t){return t==null?[]:Array.isArray(t)?t:Array.from(t)}var bQ=P(()=>{"use strict";o(BL,"array")});function c9e(){return[]}function Pg(t){return t==null?c9e:function(){return this.querySelectorAll(t)}}var FL=P(()=>{"use strict";o(c9e,"empty");o(Pg,"default")});function u9e(t){return function(){return BL(t.apply(this,arguments))}}function $L(t){typeof t=="function"?t=u9e(t):t=Pg(t);for(var e=this._groups,r=e.length,i=[],n=[],a=0;a{"use strict";dc();bQ();FL();o(u9e,"arrayAll");o($L,"default")});function Bg(t){return function(){return this.matches(t)}}function yw(t){return function(e){return e.matches(t)}}var l2=P(()=>{"use strict";o(Bg,"default");o(yw,"childMatcher")});function f9e(t){return function(){return h9e.call(this.children,t)}}function d9e(){return this.firstElementChild}function zL(t){return this.select(t==null?d9e:f9e(typeof t=="function"?t:yw(t)))}var h9e,kQ=P(()=>{"use strict";l2();h9e=Array.prototype.find;o(f9e,"childFind");o(d9e,"childFirst");o(zL,"default")});function m9e(){return Array.from(this.children)}function g9e(t){return function(){return p9e.call(this.children,t)}}function GL(t){return this.selectAll(t==null?m9e:g9e(typeof t=="function"?t:yw(t)))}var p9e,CQ=P(()=>{"use strict";l2();p9e=Array.prototype.filter;o(m9e,"children");o(g9e,"childrenFilter");o(GL,"default")});function VL(t){typeof t!="function"&&(t=Bg(t));for(var e=this._groups,r=e.length,i=new Array(r),n=0;n{"use strict";dc();l2();o(VL,"default")});function c2(t){return new Array(t.length)}var qL=P(()=>{"use strict";o(c2,"default")});function WL(){return new Nn(this._enter||this._groups.map(c2),this._parents)}function u2(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}var UL=P(()=>{"use strict";qL();dc();o(WL,"default");o(u2,"EnterNode");u2.prototype={constructor:u2,appendChild:o(function(t){return this._parent.insertBefore(t,this._next)},"appendChild"),insertBefore:o(function(t,e){return this._parent.insertBefore(t,e)},"insertBefore"),querySelector:o(function(t){return this._parent.querySelector(t)},"querySelector"),querySelectorAll:o(function(t){return this._parent.querySelectorAll(t)},"querySelectorAll")}});function HL(t){return function(){return t}}var EQ=P(()=>{"use strict";o(HL,"default")});function y9e(t,e,r,i,n,a){for(var s=0,l,u=e.length,h=a.length;s=T&&(T=b+1);!(k=v[T])&&++T{"use strict";dc();UL();EQ();o(y9e,"bindIndex");o(v9e,"bindKey");o(x9e,"datum");o(YL,"default");o(b9e,"arraylike")});function jL(){return new Nn(this._exit||this._groups.map(c2),this._parents)}var AQ=P(()=>{"use strict";qL();dc();o(jL,"default")});function XL(t,e,r){var i=this.enter(),n=this,a=this.exit();return typeof t=="function"?(i=t(i),i&&(i=i.selection())):i=i.append(t+""),e!=null&&(n=e(n),n&&(n=n.selection())),r==null?a.remove():r(a),i&&n?i.merge(n).order():n}var _Q=P(()=>{"use strict";o(XL,"default")});function KL(t){for(var e=t.selection?t.selection():t,r=this._groups,i=e._groups,n=r.length,a=i.length,s=Math.min(n,a),l=new Array(n),u=0;u{"use strict";dc();o(KL,"default")});function QL(){for(var t=this._groups,e=-1,r=t.length;++e=0;)(s=i[n])&&(a&&s.compareDocumentPosition(a)^4&&a.parentNode.insertBefore(s,a),a=s);return this}var LQ=P(()=>{"use strict";o(QL,"default")});function ZL(t){t||(t=T9e);function e(d,p){return d&&p?t(d.__data__,p.__data__):!d-!p}o(e,"compareNode");for(var r=this._groups,i=r.length,n=new Array(i),a=0;ae?1:t>=e?0:NaN}var RQ=P(()=>{"use strict";dc();o(ZL,"default");o(T9e,"ascending")});function JL(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this}var NQ=P(()=>{"use strict";o(JL,"default")});function eR(){return Array.from(this)}var IQ=P(()=>{"use strict";o(eR,"default")});function tR(){for(var t=this._groups,e=0,r=t.length;e{"use strict";o(tR,"default")});function rR(){let t=0;for(let e of this)++t;return t}var OQ=P(()=>{"use strict";o(rR,"default")});function iR(){return!this.node()}var PQ=P(()=>{"use strict";o(iR,"default")});function nR(t){for(var e=this._groups,r=0,i=e.length;r{"use strict";o(nR,"default")});function k9e(t){return function(){this.removeAttribute(t)}}function C9e(t){return function(){this.removeAttributeNS(t.space,t.local)}}function w9e(t,e){return function(){this.setAttribute(t,e)}}function E9e(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function S9e(t,e){return function(){var r=e.apply(this,arguments);r==null?this.removeAttribute(t):this.setAttribute(t,r)}}function A9e(t,e){return function(){var r=e.apply(this,arguments);r==null?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,r)}}function aR(t,e){var r=uu(t);if(arguments.length<2){var i=this.node();return r.local?i.getAttributeNS(r.space,r.local):i.getAttribute(r)}return this.each((e==null?r.local?C9e:k9e:typeof e=="function"?r.local?A9e:S9e:r.local?E9e:w9e)(r,e))}var FQ=P(()=>{"use strict";mw();o(k9e,"attrRemove");o(C9e,"attrRemoveNS");o(w9e,"attrConstant");o(E9e,"attrConstantNS");o(S9e,"attrFunction");o(A9e,"attrFunctionNS");o(aR,"default")});function h2(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}var sR=P(()=>{"use strict";o(h2,"default")});function _9e(t){return function(){this.style.removeProperty(t)}}function D9e(t,e,r){return function(){this.style.setProperty(t,e,r)}}function L9e(t,e,r){return function(){var i=e.apply(this,arguments);i==null?this.style.removeProperty(t):this.style.setProperty(t,i,r)}}function oR(t,e,r){return arguments.length>1?this.each((e==null?_9e:typeof e=="function"?L9e:D9e)(t,e,r??"")):Vf(this.node(),t)}function Vf(t,e){return t.style.getPropertyValue(e)||h2(t).getComputedStyle(t,null).getPropertyValue(e)}var lR=P(()=>{"use strict";sR();o(_9e,"styleRemove");o(D9e,"styleConstant");o(L9e,"styleFunction");o(oR,"default");o(Vf,"styleValue")});function R9e(t){return function(){delete this[t]}}function N9e(t,e){return function(){this[t]=e}}function I9e(t,e){return function(){var r=e.apply(this,arguments);r==null?delete this[t]:this[t]=r}}function cR(t,e){return arguments.length>1?this.each((e==null?R9e:typeof e=="function"?I9e:N9e)(t,e)):this.node()[t]}var $Q=P(()=>{"use strict";o(R9e,"propertyRemove");o(N9e,"propertyConstant");o(I9e,"propertyFunction");o(cR,"default")});function zQ(t){return t.trim().split(/^|\s+/)}function uR(t){return t.classList||new GQ(t)}function GQ(t){this._node=t,this._names=zQ(t.getAttribute("class")||"")}function VQ(t,e){for(var r=uR(t),i=-1,n=e.length;++i{"use strict";o(zQ,"classArray");o(uR,"classList");o(GQ,"ClassList");GQ.prototype={add:o(function(t){var e=this._names.indexOf(t);e<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},"add"),remove:o(function(t){var e=this._names.indexOf(t);e>=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},"remove"),contains:o(function(t){return this._names.indexOf(t)>=0},"contains")};o(VQ,"classedAdd");o(qQ,"classedRemove");o(M9e,"classedTrue");o(O9e,"classedFalse");o(P9e,"classedFunction");o(hR,"default")});function B9e(){this.textContent=""}function F9e(t){return function(){this.textContent=t}}function $9e(t){return function(){var e=t.apply(this,arguments);this.textContent=e??""}}function fR(t){return arguments.length?this.each(t==null?B9e:(typeof t=="function"?$9e:F9e)(t)):this.node().textContent}var UQ=P(()=>{"use strict";o(B9e,"textRemove");o(F9e,"textConstant");o($9e,"textFunction");o(fR,"default")});function z9e(){this.innerHTML=""}function G9e(t){return function(){this.innerHTML=t}}function V9e(t){return function(){var e=t.apply(this,arguments);this.innerHTML=e??""}}function dR(t){return arguments.length?this.each(t==null?z9e:(typeof t=="function"?V9e:G9e)(t)):this.node().innerHTML}var HQ=P(()=>{"use strict";o(z9e,"htmlRemove");o(G9e,"htmlConstant");o(V9e,"htmlFunction");o(dR,"default")});function q9e(){this.nextSibling&&this.parentNode.appendChild(this)}function pR(){return this.each(q9e)}var YQ=P(()=>{"use strict";o(q9e,"raise");o(pR,"default")});function W9e(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function mR(){return this.each(W9e)}var jQ=P(()=>{"use strict";o(W9e,"lower");o(mR,"default")});function gR(t){var e=typeof t=="function"?t:o2(t);return this.select(function(){return this.appendChild(e.apply(this,arguments))})}var XQ=P(()=>{"use strict";OL();o(gR,"default")});function U9e(){return null}function yR(t,e){var r=typeof t=="function"?t:o2(t),i=e==null?U9e:typeof e=="function"?e:Gf(e);return this.select(function(){return this.insertBefore(r.apply(this,arguments),i.apply(this,arguments)||null)})}var KQ=P(()=>{"use strict";OL();gw();o(U9e,"constantNull");o(yR,"default")});function H9e(){var t=this.parentNode;t&&t.removeChild(this)}function vR(){return this.each(H9e)}var QQ=P(()=>{"use strict";o(H9e,"remove");o(vR,"default")});function Y9e(){var t=this.cloneNode(!1),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function j9e(){var t=this.cloneNode(!0),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function xR(t){return this.select(t?j9e:Y9e)}var ZQ=P(()=>{"use strict";o(Y9e,"selection_cloneShallow");o(j9e,"selection_cloneDeep");o(xR,"default")});function bR(t){return arguments.length?this.property("__data__",t):this.node().__data__}var JQ=P(()=>{"use strict";o(bR,"default")});function X9e(t){return function(e){t.call(this,e,this.__data__)}}function K9e(t){return t.trim().split(/^|\s+/).map(function(e){var r="",i=e.indexOf(".");return i>=0&&(r=e.slice(i+1),e=e.slice(0,i)),{type:e,name:r}})}function Q9e(t){return function(){var e=this.__on;if(e){for(var r=0,i=-1,n=e.length,a;r{"use strict";o(X9e,"contextListener");o(K9e,"parseTypenames");o(Q9e,"onRemove");o(Z9e,"onAdd");o(TR,"default")});function tZ(t,e,r){var i=h2(t),n=i.CustomEvent;typeof n=="function"?n=new n(e,r):(n=i.document.createEvent("Event"),r?(n.initEvent(e,r.bubbles,r.cancelable),n.detail=r.detail):n.initEvent(e,!1,!1)),t.dispatchEvent(n)}function J9e(t,e){return function(){return tZ(this,t,e)}}function eNe(t,e){return function(){return tZ(this,t,e.apply(this,arguments))}}function kR(t,e){return this.each((typeof e=="function"?eNe:J9e)(t,e))}var rZ=P(()=>{"use strict";sR();o(tZ,"dispatchEvent");o(J9e,"dispatchConstant");o(eNe,"dispatchFunction");o(kR,"default")});function*CR(){for(var t=this._groups,e=0,r=t.length;e{"use strict";o(CR,"default")});function Nn(t,e){this._groups=t,this._parents=e}function nZ(){return new Nn([[document.documentElement]],wR)}function tNe(){return this}var wR,Eh,dc=P(()=>{"use strict";xQ();TQ();kQ();CQ();wQ();SQ();UL();AQ();_Q();DQ();LQ();RQ();NQ();IQ();MQ();OQ();PQ();BQ();FQ();lR();$Q();WQ();UQ();HQ();YQ();jQ();XQ();KQ();QQ();ZQ();JQ();eZ();rZ();iZ();wR=[null];o(Nn,"Selection");o(nZ,"selection");o(tNe,"selection_selection");Nn.prototype=nZ.prototype={constructor:Nn,select:PL,selectAll:$L,selectChild:zL,selectChildren:GL,filter:VL,data:YL,enter:WL,exit:jL,join:XL,merge:KL,selection:tNe,order:QL,sort:ZL,call:JL,nodes:eR,node:tR,size:rR,empty:iR,each:nR,attr:aR,style:oR,property:cR,classed:hR,text:fR,html:dR,raise:pR,lower:mR,append:gR,insert:yR,remove:vR,clone:xR,datum:bR,on:TR,dispatch:kR,[Symbol.iterator]:CR};Eh=nZ});function Ze(t){return typeof t=="string"?new Nn([[document.querySelector(t)]],[document.documentElement]):new Nn([[t]],wR)}var aZ=P(()=>{"use strict";dc();o(Ze,"default")});var pc=P(()=>{"use strict";l2();mw();aZ();dc();gw();FL();lR()});var sZ=P(()=>{"use strict"});function qf(t,e,r){t.prototype=e.prototype=r,r.constructor=t}function Fg(t,e){var r=Object.create(t.prototype);for(var i in e)r[i]=e[i];return r}var ER=P(()=>{"use strict";o(qf,"default");o(Fg,"extend")});function Wf(){}function lZ(){return this.rgb().formatHex()}function cNe(){return this.rgb().formatHex8()}function uNe(){return mZ(this).formatHsl()}function cZ(){return this.rgb().formatRgb()}function gc(t){var e,r;return t=(t+"").trim().toLowerCase(),(e=rNe.exec(t))?(r=e[1].length,e=parseInt(e[1],16),r===6?uZ(e):r===3?new Ua(e>>8&15|e>>4&240,e>>4&15|e&240,(e&15)<<4|e&15,1):r===8?vw(e>>24&255,e>>16&255,e>>8&255,(e&255)/255):r===4?vw(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|e&240,((e&15)<<4|e&15)/255):null):(e=iNe.exec(t))?new Ua(e[1],e[2],e[3],1):(e=nNe.exec(t))?new Ua(e[1]*255/100,e[2]*255/100,e[3]*255/100,1):(e=aNe.exec(t))?vw(e[1],e[2],e[3],e[4]):(e=sNe.exec(t))?vw(e[1]*255/100,e[2]*255/100,e[3]*255/100,e[4]):(e=oNe.exec(t))?dZ(e[1],e[2]/100,e[3]/100,1):(e=lNe.exec(t))?dZ(e[1],e[2]/100,e[3]/100,e[4]):oZ.hasOwnProperty(t)?uZ(oZ[t]):t==="transparent"?new Ua(NaN,NaN,NaN,0):null}function uZ(t){return new Ua(t>>16&255,t>>8&255,t&255,1)}function vw(t,e,r,i){return i<=0&&(t=e=r=NaN),new Ua(t,e,r,i)}function AR(t){return t instanceof Wf||(t=gc(t)),t?(t=t.rgb(),new Ua(t.r,t.g,t.b,t.opacity)):new Ua}function zg(t,e,r,i){return arguments.length===1?AR(t):new Ua(t,e,r,i??1)}function Ua(t,e,r,i){this.r=+t,this.g=+e,this.b=+r,this.opacity=+i}function hZ(){return`#${e0(this.r)}${e0(this.g)}${e0(this.b)}`}function hNe(){return`#${e0(this.r)}${e0(this.g)}${e0(this.b)}${e0((isNaN(this.opacity)?1:this.opacity)*255)}`}function fZ(){let t=Tw(this.opacity);return`${t===1?"rgb(":"rgba("}${t0(this.r)}, ${t0(this.g)}, ${t0(this.b)}${t===1?")":`, ${t})`}`}function Tw(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function t0(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function e0(t){return t=t0(t),(t<16?"0":"")+t.toString(16)}function dZ(t,e,r,i){return i<=0?t=e=r=NaN:r<=0||r>=1?t=e=NaN:e<=0&&(t=NaN),new mc(t,e,r,i)}function mZ(t){if(t instanceof mc)return new mc(t.h,t.s,t.l,t.opacity);if(t instanceof Wf||(t=gc(t)),!t)return new mc;if(t instanceof mc)return t;t=t.rgb();var e=t.r/255,r=t.g/255,i=t.b/255,n=Math.min(e,r,i),a=Math.max(e,r,i),s=NaN,l=a-n,u=(a+n)/2;return l?(e===a?s=(r-i)/l+(r0&&u<1?0:s,new mc(s,l,u,t.opacity)}function gZ(t,e,r,i){return arguments.length===1?mZ(t):new mc(t,e,r,i??1)}function mc(t,e,r,i){this.h=+t,this.s=+e,this.l=+r,this.opacity=+i}function pZ(t){return t=(t||0)%360,t<0?t+360:t}function xw(t){return Math.max(0,Math.min(1,t||0))}function SR(t,e,r){return(t<60?e+(r-e)*t/60:t<180?r:t<240?e+(r-e)*(240-t)/60:e)*255}var f2,bw,$g,d2,hu,rNe,iNe,nNe,aNe,sNe,oNe,lNe,oZ,_R=P(()=>{"use strict";ER();o(Wf,"Color");f2=.7,bw=1/f2,$g="\\s*([+-]?\\d+)\\s*",d2="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",hu="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",rNe=/^#([0-9a-f]{3,8})$/,iNe=new RegExp(`^rgb\\(${$g},${$g},${$g}\\)$`),nNe=new RegExp(`^rgb\\(${hu},${hu},${hu}\\)$`),aNe=new RegExp(`^rgba\\(${$g},${$g},${$g},${d2}\\)$`),sNe=new RegExp(`^rgba\\(${hu},${hu},${hu},${d2}\\)$`),oNe=new RegExp(`^hsl\\(${d2},${hu},${hu}\\)$`),lNe=new RegExp(`^hsla\\(${d2},${hu},${hu},${d2}\\)$`),oZ={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};qf(Wf,gc,{copy(t){return Object.assign(new this.constructor,this,t)},displayable(){return this.rgb().displayable()},hex:lZ,formatHex:lZ,formatHex8:cNe,formatHsl:uNe,formatRgb:cZ,toString:cZ});o(lZ,"color_formatHex");o(cNe,"color_formatHex8");o(uNe,"color_formatHsl");o(cZ,"color_formatRgb");o(gc,"color");o(uZ,"rgbn");o(vw,"rgba");o(AR,"rgbConvert");o(zg,"rgb");o(Ua,"Rgb");qf(Ua,zg,Fg(Wf,{brighter(t){return t=t==null?bw:Math.pow(bw,t),new Ua(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=t==null?f2:Math.pow(f2,t),new Ua(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new Ua(t0(this.r),t0(this.g),t0(this.b),Tw(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:hZ,formatHex:hZ,formatHex8:hNe,formatRgb:fZ,toString:fZ}));o(hZ,"rgb_formatHex");o(hNe,"rgb_formatHex8");o(fZ,"rgb_formatRgb");o(Tw,"clampa");o(t0,"clampi");o(e0,"hex");o(dZ,"hsla");o(mZ,"hslConvert");o(gZ,"hsl");o(mc,"Hsl");qf(mc,gZ,Fg(Wf,{brighter(t){return t=t==null?bw:Math.pow(bw,t),new mc(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=t==null?f2:Math.pow(f2,t),new mc(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+(this.h<0)*360,e=isNaN(t)||isNaN(this.s)?0:this.s,r=this.l,i=r+(r<.5?r:1-r)*e,n=2*r-i;return new Ua(SR(t>=240?t-240:t+120,n,i),SR(t,n,i),SR(t<120?t+240:t-120,n,i),this.opacity)},clamp(){return new mc(pZ(this.h),xw(this.s),xw(this.l),Tw(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){let t=Tw(this.opacity);return`${t===1?"hsl(":"hsla("}${pZ(this.h)}, ${xw(this.s)*100}%, ${xw(this.l)*100}%${t===1?")":`, ${t})`}`}}));o(pZ,"clamph");o(xw,"clampt");o(SR,"hsl2rgb")});var yZ,vZ,xZ=P(()=>{"use strict";yZ=Math.PI/180,vZ=180/Math.PI});function EZ(t){if(t instanceof fu)return new fu(t.l,t.a,t.b,t.opacity);if(t instanceof Sh)return SZ(t);t instanceof Ua||(t=AR(t));var e=NR(t.r),r=NR(t.g),i=NR(t.b),n=DR((.2225045*e+.7168786*r+.0606169*i)/TZ),a,s;return e===r&&r===i?a=s=n:(a=DR((.4360747*e+.3850649*r+.1430804*i)/bZ),s=DR((.0139322*e+.0971045*r+.7141733*i)/kZ)),new fu(116*n-16,500*(a-n),200*(n-s),t.opacity)}function IR(t,e,r,i){return arguments.length===1?EZ(t):new fu(t,e,r,i??1)}function fu(t,e,r,i){this.l=+t,this.a=+e,this.b=+r,this.opacity=+i}function DR(t){return t>fNe?Math.pow(t,1/3):t/wZ+CZ}function LR(t){return t>Gg?t*t*t:wZ*(t-CZ)}function RR(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function NR(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function dNe(t){if(t instanceof Sh)return new Sh(t.h,t.c,t.l,t.opacity);if(t instanceof fu||(t=EZ(t)),t.a===0&&t.b===0)return new Sh(NaN,0{"use strict";ER();_R();xZ();kw=18,bZ=.96422,TZ=1,kZ=.82521,CZ=4/29,Gg=6/29,wZ=3*Gg*Gg,fNe=Gg*Gg*Gg;o(EZ,"labConvert");o(IR,"lab");o(fu,"Lab");qf(fu,IR,Fg(Wf,{brighter(t){return new fu(this.l+kw*(t??1),this.a,this.b,this.opacity)},darker(t){return new fu(this.l-kw*(t??1),this.a,this.b,this.opacity)},rgb(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,r=isNaN(this.b)?t:t-this.b/200;return e=bZ*LR(e),t=TZ*LR(t),r=kZ*LR(r),new Ua(RR(3.1338561*e-1.6168667*t-.4906146*r),RR(-.9787684*e+1.9161415*t+.033454*r),RR(.0719453*e-.2289914*t+1.4052427*r),this.opacity)}}));o(DR,"xyz2lab");o(LR,"lab2xyz");o(RR,"lrgb2rgb");o(NR,"rgb2lrgb");o(dNe,"hclConvert");o(p2,"hcl");o(Sh,"Hcl");o(SZ,"hcl2lab");qf(Sh,p2,Fg(Wf,{brighter(t){return new Sh(this.h,this.c,this.l+kw*(t??1),this.opacity)},darker(t){return new Sh(this.h,this.c,this.l-kw*(t??1),this.opacity)},rgb(){return SZ(this).rgb()}}))});var Vg=P(()=>{"use strict";_R();AZ()});function MR(t,e,r,i,n){var a=t*t,s=a*t;return((1-3*t+3*a-s)*e+(4-6*a+3*s)*r+(1+3*t+3*a-3*s)*i+s*n)/6}function OR(t){var e=t.length-1;return function(r){var i=r<=0?r=0:r>=1?(r=1,e-1):Math.floor(r*e),n=t[i],a=t[i+1],s=i>0?t[i-1]:2*n-a,l=i{"use strict";o(MR,"basis");o(OR,"default")});function BR(t){var e=t.length;return function(r){var i=Math.floor(((r%=1)<0?++r:r)*e),n=t[(i+e-1)%e],a=t[i%e],s=t[(i+1)%e],l=t[(i+2)%e];return MR((r-i/e)*e,n,a,s,l)}}var _Z=P(()=>{"use strict";PR();o(BR,"default")});var qg,FR=P(()=>{"use strict";qg=o(t=>()=>t,"default")});function DZ(t,e){return function(r){return t+r*e}}function pNe(t,e,r){return t=Math.pow(t,r),e=Math.pow(e,r)-t,r=1/r,function(i){return Math.pow(t+i*e,r)}}function LZ(t,e){var r=e-t;return r?DZ(t,r>180||r<-180?r-360*Math.round(r/360):r):qg(isNaN(t)?e:t)}function RZ(t){return(t=+t)==1?Ah:function(e,r){return r-e?pNe(e,r,t):qg(isNaN(e)?r:e)}}function Ah(t,e){var r=e-t;return r?DZ(t,r):qg(isNaN(t)?e:t)}var $R=P(()=>{"use strict";FR();o(DZ,"linear");o(pNe,"exponential");o(LZ,"hue");o(RZ,"gamma");o(Ah,"nogamma")});function NZ(t){return function(e){var r=e.length,i=new Array(r),n=new Array(r),a=new Array(r),s,l;for(s=0;s{"use strict";Vg();PR();_Z();$R();r0=o((function t(e){var r=RZ(e);function i(n,a){var s=r((n=zg(n)).r,(a=zg(a)).r),l=r(n.g,a.g),u=r(n.b,a.b),h=Ah(n.opacity,a.opacity);return function(f){return n.r=s(f),n.g=l(f),n.b=u(f),n.opacity=h(f),n+""}}return o(i,"rgb"),i.gamma=t,i}),"rgbGamma")(1);o(NZ,"rgbSpline");mNe=NZ(OR),gNe=NZ(BR)});function GR(t,e){e||(e=[]);var r=t?Math.min(e.length,t.length):0,i=e.slice(),n;return function(a){for(n=0;n{"use strict";o(GR,"default");o(IZ,"isNumberArray")});function OZ(t,e){var r=e?e.length:0,i=t?Math.min(r,t.length):0,n=new Array(i),a=new Array(r),s;for(s=0;s{"use strict";Cw();o(OZ,"genericArray")});function VR(t,e){var r=new Date;return t=+t,e=+e,function(i){return r.setTime(t*(1-i)+e*i),r}}var BZ=P(()=>{"use strict";o(VR,"default")});function Ea(t,e){return t=+t,e=+e,function(r){return t*(1-r)+e*r}}var m2=P(()=>{"use strict";o(Ea,"default")});function qR(t,e){var r={},i={},n;(t===null||typeof t!="object")&&(t={}),(e===null||typeof e!="object")&&(e={});for(n in e)n in t?r[n]=Uf(t[n],e[n]):i[n]=e[n];return function(a){for(n in r)i[n]=r[n](a);return i}}var FZ=P(()=>{"use strict";Cw();o(qR,"default")});function yNe(t){return function(){return t}}function vNe(t){return function(e){return t(e)+""}}function Wg(t,e){var r=UR.lastIndex=WR.lastIndex=0,i,n,a,s=-1,l=[],u=[];for(t=t+"",e=e+"";(i=UR.exec(t))&&(n=WR.exec(e));)(a=n.index)>r&&(a=e.slice(r,a),l[s]?l[s]+=a:l[++s]=a),(i=i[0])===(n=n[0])?l[s]?l[s]+=n:l[++s]=n:(l[++s]=null,u.push({i:s,x:Ea(i,n)})),r=WR.lastIndex;return r{"use strict";m2();UR=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,WR=new RegExp(UR.source,"g");o(yNe,"zero");o(vNe,"one");o(Wg,"default")});function Uf(t,e){var r=typeof e,i;return e==null||r==="boolean"?qg(e):(r==="number"?Ea:r==="string"?(i=gc(e))?(e=i,r0):Wg:e instanceof gc?r0:e instanceof Date?VR:IZ(e)?GR:Array.isArray(e)?OZ:typeof e.valueOf!="function"&&typeof e.toString!="function"||isNaN(e)?qR:Ea)(t,e)}var Cw=P(()=>{"use strict";Vg();zR();PZ();BZ();m2();FZ();HR();FR();MZ();o(Uf,"default")});function ww(t,e){return t=+t,e=+e,function(r){return Math.round(t*(1-r)+e*r)}}var $Z=P(()=>{"use strict";o(ww,"default")});function Sw(t,e,r,i,n,a){var s,l,u;return(s=Math.sqrt(t*t+e*e))&&(t/=s,e/=s),(u=t*r+e*i)&&(r-=t*u,i-=e*u),(l=Math.sqrt(r*r+i*i))&&(r/=l,i/=l,u/=l),t*i{"use strict";zZ=180/Math.PI,Ew={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};o(Sw,"default")});function VZ(t){let e=new(typeof DOMMatrix=="function"?DOMMatrix:WebKitCSSMatrix)(t+"");return e.isIdentity?Ew:Sw(e.a,e.b,e.c,e.d,e.e,e.f)}function qZ(t){return t==null?Ew:(Aw||(Aw=document.createElementNS("http://www.w3.org/2000/svg","g")),Aw.setAttribute("transform",t),(t=Aw.transform.baseVal.consolidate())?(t=t.matrix,Sw(t.a,t.b,t.c,t.d,t.e,t.f)):Ew)}var Aw,WZ=P(()=>{"use strict";GZ();o(VZ,"parseCss");o(qZ,"parseSvg")});function UZ(t,e,r,i){function n(h){return h.length?h.pop()+" ":""}o(n,"pop");function a(h,f,d,p,m,g){if(h!==d||f!==p){var y=m.push("translate(",null,e,null,r);g.push({i:y-4,x:Ea(h,d)},{i:y-2,x:Ea(f,p)})}else(d||p)&&m.push("translate("+d+e+p+r)}o(a,"translate");function s(h,f,d,p){h!==f?(h-f>180?f+=360:f-h>180&&(h+=360),p.push({i:d.push(n(d)+"rotate(",null,i)-2,x:Ea(h,f)})):f&&d.push(n(d)+"rotate("+f+i)}o(s,"rotate");function l(h,f,d,p){h!==f?p.push({i:d.push(n(d)+"skewX(",null,i)-2,x:Ea(h,f)}):f&&d.push(n(d)+"skewX("+f+i)}o(l,"skewX");function u(h,f,d,p,m,g){if(h!==d||f!==p){var y=m.push(n(m)+"scale(",null,",",null,")");g.push({i:y-4,x:Ea(h,d)},{i:y-2,x:Ea(f,p)})}else(d!==1||p!==1)&&m.push(n(m)+"scale("+d+","+p+")")}return o(u,"scale"),function(h,f){var d=[],p=[];return h=t(h),f=t(f),a(h.translateX,h.translateY,f.translateX,f.translateY,d,p),s(h.rotate,f.rotate,d,p),l(h.skewX,f.skewX,d,p),u(h.scaleX,h.scaleY,f.scaleX,f.scaleY,d,p),h=f=null,function(m){for(var g=-1,y=p.length,v;++g{"use strict";m2();WZ();o(UZ,"interpolateTransform");YR=UZ(VZ,"px, ","px)","deg)"),jR=UZ(qZ,", ",")",")")});function YZ(t){return function(e,r){var i=t((e=p2(e)).h,(r=p2(r)).h),n=Ah(e.c,r.c),a=Ah(e.l,r.l),s=Ah(e.opacity,r.opacity);return function(l){return e.h=i(l),e.c=n(l),e.l=a(l),e.opacity=s(l),e+""}}}var XR,xNe,jZ=P(()=>{"use strict";Vg();$R();o(YZ,"hcl");XR=YZ(LZ),xNe=YZ(Ah)});var Ug=P(()=>{"use strict";Cw();m2();$Z();HR();HZ();zR();jZ()});function T2(){return i0||(QZ(bNe),i0=x2.now()+Lw)}function bNe(){i0=0}function b2(){this._call=this._time=this._next=null}function Rw(t,e,r){var i=new b2;return i.restart(t,e,r),i}function ZZ(){T2(),++Hg;for(var t=_w,e;t;)(e=i0-t._time)>=0&&t._call.call(void 0,e),t=t._next;--Hg}function XZ(){i0=(Dw=x2.now())+Lw,Hg=y2=0;try{ZZ()}finally{Hg=0,kNe(),i0=0}}function TNe(){var t=x2.now(),e=t-Dw;e>KZ&&(Lw-=e,Dw=t)}function kNe(){for(var t,e=_w,r,i=1/0;e;)e._call?(i>e._time&&(i=e._time),t=e,e=e._next):(r=e._next,e._next=null,e=t?t._next=r:_w=r);v2=t,KR(i)}function KR(t){if(!Hg){y2&&(y2=clearTimeout(y2));var e=t-i0;e>24?(t<1/0&&(y2=setTimeout(XZ,t-x2.now()-Lw)),g2&&(g2=clearInterval(g2))):(g2||(Dw=x2.now(),g2=setInterval(TNe,KZ)),Hg=1,QZ(XZ))}}var Hg,y2,g2,KZ,_w,v2,Dw,i0,Lw,x2,QZ,QR=P(()=>{"use strict";Hg=0,y2=0,g2=0,KZ=1e3,Dw=0,i0=0,Lw=0,x2=typeof performance=="object"&&performance.now?performance:Date,QZ=typeof window=="object"&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};o(T2,"now");o(bNe,"clearNow");o(b2,"Timer");b2.prototype=Rw.prototype={constructor:b2,restart:o(function(t,e,r){if(typeof t!="function")throw new TypeError("callback is not a function");r=(r==null?T2():+r)+(e==null?0:+e),!this._next&&v2!==this&&(v2?v2._next=this:_w=this,v2=this),this._call=t,this._time=r,KR()},"restart"),stop:o(function(){this._call&&(this._call=null,this._time=1/0,KR())},"stop")};o(Rw,"timer");o(ZZ,"timerFlush");o(XZ,"wake");o(TNe,"poke");o(kNe,"nap");o(KR,"sleep")});function k2(t,e,r){var i=new b2;return e=e==null?0:+e,i.restart(n=>{i.stop(),t(n+e)},e,r),i}var JZ=P(()=>{"use strict";QR();o(k2,"default")});var Nw=P(()=>{"use strict";QR();JZ()});function _h(t,e,r,i,n,a){var s=t.__transition;if(!s)t.__transition={};else if(r in s)return;ENe(t,r,{name:e,index:i,group:n,on:CNe,tween:wNe,time:a.time,delay:a.delay,duration:a.duration,ease:a.ease,timer:null,state:rJ})}function w2(t,e){var r=ua(t,e);if(r.state>rJ)throw new Error("too late; already scheduled");return r}function Ha(t,e){var r=ua(t,e);if(r.state>Iw)throw new Error("too late; already running");return r}function ua(t,e){var r=t.__transition;if(!r||!(r=r[e]))throw new Error("transition not found");return r}function ENe(t,e,r){var i=t.__transition,n;i[e]=r,r.timer=Rw(a,0,r.time);function a(h){r.state=eJ,r.timer.restart(s,r.delay,r.time),r.delay<=h&&s(h-r.delay)}o(a,"schedule");function s(h){var f,d,p,m;if(r.state!==eJ)return u();for(f in i)if(m=i[f],m.name===r.name){if(m.state===Iw)return k2(s);m.state===tJ?(m.state=C2,m.timer.stop(),m.on.call("interrupt",t,t.__data__,m.index,m.group),delete i[f]):+f{"use strict";NL();Nw();CNe=RL("start","end","cancel","interrupt"),wNe=[],rJ=0,eJ=1,Mw=2,Iw=3,tJ=4,Ow=5,C2=6;o(_h,"default");o(w2,"init");o(Ha,"set");o(ua,"get");o(ENe,"create")});function E2(t,e){var r=t.__transition,i,n,a=!0,s;if(r){e=e==null?null:e+"";for(s in r){if((i=r[s]).name!==e){a=!1;continue}n=i.state>Mw&&i.state{"use strict";po();o(E2,"default")});function ZR(t){return this.each(function(){E2(this,t)})}var nJ=P(()=>{"use strict";iJ();o(ZR,"default")});function SNe(t,e){var r,i;return function(){var n=Ha(this,t),a=n.tween;if(a!==r){i=r=a;for(var s=0,l=i.length;s{"use strict";po();o(SNe,"tweenRemove");o(ANe,"tweenFunction");o(JR,"default");o(Yg,"tweenValue")});function A2(t,e){var r;return(typeof e=="number"?Ea:e instanceof gc?r0:(r=gc(e))?(e=r,r0):Wg)(t,e)}var e9=P(()=>{"use strict";Vg();Ug();o(A2,"default")});function _Ne(t){return function(){this.removeAttribute(t)}}function DNe(t){return function(){this.removeAttributeNS(t.space,t.local)}}function LNe(t,e,r){var i,n=r+"",a;return function(){var s=this.getAttribute(t);return s===n?null:s===i?a:a=e(i=s,r)}}function RNe(t,e,r){var i,n=r+"",a;return function(){var s=this.getAttributeNS(t.space,t.local);return s===n?null:s===i?a:a=e(i=s,r)}}function NNe(t,e,r){var i,n,a;return function(){var s,l=r(this),u;return l==null?void this.removeAttribute(t):(s=this.getAttribute(t),u=l+"",s===u?null:s===i&&u===n?a:(n=u,a=e(i=s,l)))}}function INe(t,e,r){var i,n,a;return function(){var s,l=r(this),u;return l==null?void this.removeAttributeNS(t.space,t.local):(s=this.getAttributeNS(t.space,t.local),u=l+"",s===u?null:s===i&&u===n?a:(n=u,a=e(i=s,l)))}}function t9(t,e){var r=uu(t),i=r==="transform"?jR:A2;return this.attrTween(t,typeof e=="function"?(r.local?INe:NNe)(r,i,Yg(this,"attr."+t,e)):e==null?(r.local?DNe:_Ne)(r):(r.local?RNe:LNe)(r,i,e))}var aJ=P(()=>{"use strict";Ug();pc();S2();e9();o(_Ne,"attrRemove");o(DNe,"attrRemoveNS");o(LNe,"attrConstant");o(RNe,"attrConstantNS");o(NNe,"attrFunction");o(INe,"attrFunctionNS");o(t9,"default")});function MNe(t,e){return function(r){this.setAttribute(t,e.call(this,r))}}function ONe(t,e){return function(r){this.setAttributeNS(t.space,t.local,e.call(this,r))}}function PNe(t,e){var r,i;function n(){var a=e.apply(this,arguments);return a!==i&&(r=(i=a)&&ONe(t,a)),r}return o(n,"tween"),n._value=e,n}function BNe(t,e){var r,i;function n(){var a=e.apply(this,arguments);return a!==i&&(r=(i=a)&&MNe(t,a)),r}return o(n,"tween"),n._value=e,n}function r9(t,e){var r="attr."+t;if(arguments.length<2)return(r=this.tween(r))&&r._value;if(e==null)return this.tween(r,null);if(typeof e!="function")throw new Error;var i=uu(t);return this.tween(r,(i.local?PNe:BNe)(i,e))}var sJ=P(()=>{"use strict";pc();o(MNe,"attrInterpolate");o(ONe,"attrInterpolateNS");o(PNe,"attrTweenNS");o(BNe,"attrTween");o(r9,"default")});function FNe(t,e){return function(){w2(this,t).delay=+e.apply(this,arguments)}}function $Ne(t,e){return e=+e,function(){w2(this,t).delay=e}}function i9(t){var e=this._id;return arguments.length?this.each((typeof t=="function"?FNe:$Ne)(e,t)):ua(this.node(),e).delay}var oJ=P(()=>{"use strict";po();o(FNe,"delayFunction");o($Ne,"delayConstant");o(i9,"default")});function zNe(t,e){return function(){Ha(this,t).duration=+e.apply(this,arguments)}}function GNe(t,e){return e=+e,function(){Ha(this,t).duration=e}}function n9(t){var e=this._id;return arguments.length?this.each((typeof t=="function"?zNe:GNe)(e,t)):ua(this.node(),e).duration}var lJ=P(()=>{"use strict";po();o(zNe,"durationFunction");o(GNe,"durationConstant");o(n9,"default")});function VNe(t,e){if(typeof e!="function")throw new Error;return function(){Ha(this,t).ease=e}}function a9(t){var e=this._id;return arguments.length?this.each(VNe(e,t)):ua(this.node(),e).ease}var cJ=P(()=>{"use strict";po();o(VNe,"easeConstant");o(a9,"default")});function qNe(t,e){return function(){var r=e.apply(this,arguments);if(typeof r!="function")throw new Error;Ha(this,t).ease=r}}function s9(t){if(typeof t!="function")throw new Error;return this.each(qNe(this._id,t))}var uJ=P(()=>{"use strict";po();o(qNe,"easeVarying");o(s9,"default")});function o9(t){typeof t!="function"&&(t=Bg(t));for(var e=this._groups,r=e.length,i=new Array(r),n=0;n{"use strict";pc();n0();o(o9,"default")});function l9(t){if(t._id!==this._id)throw new Error;for(var e=this._groups,r=t._groups,i=e.length,n=r.length,a=Math.min(i,n),s=new Array(i),l=0;l{"use strict";n0();o(l9,"default")});function WNe(t){return(t+"").trim().split(/^|\s+/).every(function(e){var r=e.indexOf(".");return r>=0&&(e=e.slice(0,r)),!e||e==="start"})}function UNe(t,e,r){var i,n,a=WNe(e)?w2:Ha;return function(){var s=a(this,t),l=s.on;l!==i&&(n=(i=l).copy()).on(e,r),s.on=n}}function c9(t,e){var r=this._id;return arguments.length<2?ua(this.node(),r).on.on(t):this.each(UNe(r,t,e))}var dJ=P(()=>{"use strict";po();o(WNe,"start");o(UNe,"onFunction");o(c9,"default")});function HNe(t){return function(){var e=this.parentNode;for(var r in this.__transition)if(+r!==t)return;e&&e.removeChild(this)}}function u9(){return this.on("end.remove",HNe(this._id))}var pJ=P(()=>{"use strict";o(HNe,"removeFunction");o(u9,"default")});function h9(t){var e=this._name,r=this._id;typeof t!="function"&&(t=Gf(t));for(var i=this._groups,n=i.length,a=new Array(n),s=0;s{"use strict";pc();n0();po();o(h9,"default")});function f9(t){var e=this._name,r=this._id;typeof t!="function"&&(t=Pg(t));for(var i=this._groups,n=i.length,a=[],s=[],l=0;l{"use strict";pc();n0();po();o(f9,"default")});function d9(){return new YNe(this._groups,this._parents)}var YNe,yJ=P(()=>{"use strict";pc();YNe=Eh.prototype.constructor;o(d9,"default")});function jNe(t,e){var r,i,n;return function(){var a=Vf(this,t),s=(this.style.removeProperty(t),Vf(this,t));return a===s?null:a===r&&s===i?n:n=e(r=a,i=s)}}function vJ(t){return function(){this.style.removeProperty(t)}}function XNe(t,e,r){var i,n=r+"",a;return function(){var s=Vf(this,t);return s===n?null:s===i?a:a=e(i=s,r)}}function KNe(t,e,r){var i,n,a;return function(){var s=Vf(this,t),l=r(this),u=l+"";return l==null&&(u=l=(this.style.removeProperty(t),Vf(this,t))),s===u?null:s===i&&u===n?a:(n=u,a=e(i=s,l))}}function QNe(t,e){var r,i,n,a="style."+e,s="end."+a,l;return function(){var u=Ha(this,t),h=u.on,f=u.value[a]==null?l||(l=vJ(e)):void 0;(h!==r||n!==f)&&(i=(r=h).copy()).on(s,n=f),u.on=i}}function p9(t,e,r){var i=(t+="")=="transform"?YR:A2;return e==null?this.styleTween(t,jNe(t,i)).on("end.style."+t,vJ(t)):typeof e=="function"?this.styleTween(t,KNe(t,i,Yg(this,"style."+t,e))).each(QNe(this._id,t)):this.styleTween(t,XNe(t,i,e),r).on("end.style."+t,null)}var xJ=P(()=>{"use strict";Ug();pc();po();S2();e9();o(jNe,"styleNull");o(vJ,"styleRemove");o(XNe,"styleConstant");o(KNe,"styleFunction");o(QNe,"styleMaybeRemove");o(p9,"default")});function ZNe(t,e,r){return function(i){this.style.setProperty(t,e.call(this,i),r)}}function JNe(t,e,r){var i,n;function a(){var s=e.apply(this,arguments);return s!==n&&(i=(n=s)&&ZNe(t,s,r)),i}return o(a,"tween"),a._value=e,a}function m9(t,e,r){var i="style."+(t+="");if(arguments.length<2)return(i=this.tween(i))&&i._value;if(e==null)return this.tween(i,null);if(typeof e!="function")throw new Error;return this.tween(i,JNe(t,e,r??""))}var bJ=P(()=>{"use strict";o(ZNe,"styleInterpolate");o(JNe,"styleTween");o(m9,"default")});function eIe(t){return function(){this.textContent=t}}function tIe(t){return function(){var e=t(this);this.textContent=e??""}}function g9(t){return this.tween("text",typeof t=="function"?tIe(Yg(this,"text",t)):eIe(t==null?"":t+""))}var TJ=P(()=>{"use strict";S2();o(eIe,"textConstant");o(tIe,"textFunction");o(g9,"default")});function rIe(t){return function(e){this.textContent=t.call(this,e)}}function iIe(t){var e,r;function i(){var n=t.apply(this,arguments);return n!==r&&(e=(r=n)&&rIe(n)),e}return o(i,"tween"),i._value=t,i}function y9(t){var e="text";if(arguments.length<1)return(e=this.tween(e))&&e._value;if(t==null)return this.tween(e,null);if(typeof t!="function")throw new Error;return this.tween(e,iIe(t))}var kJ=P(()=>{"use strict";o(rIe,"textInterpolate");o(iIe,"textTween");o(y9,"default")});function v9(){for(var t=this._name,e=this._id,r=Pw(),i=this._groups,n=i.length,a=0;a{"use strict";n0();po();o(v9,"default")});function x9(){var t,e,r=this,i=r._id,n=r.size();return new Promise(function(a,s){var l={value:s},u={value:o(function(){--n===0&&a()},"value")};r.each(function(){var h=Ha(this,i),f=h.on;f!==t&&(e=(t=f).copy(),e._.cancel.push(l),e._.interrupt.push(l),e._.end.push(u)),h.on=e}),n===0&&a()})}var wJ=P(()=>{"use strict";po();o(x9,"default")});function Fs(t,e,r,i){this._groups=t,this._parents=e,this._name=r,this._id=i}function EJ(t){return Eh().transition(t)}function Pw(){return++nIe}var nIe,Dh,n0=P(()=>{"use strict";pc();aJ();sJ();oJ();lJ();cJ();uJ();hJ();fJ();dJ();pJ();mJ();gJ();yJ();xJ();bJ();TJ();kJ();CJ();S2();wJ();nIe=0;o(Fs,"Transition");o(EJ,"transition");o(Pw,"newId");Dh=Eh.prototype;Fs.prototype=EJ.prototype={constructor:Fs,select:h9,selectAll:f9,selectChild:Dh.selectChild,selectChildren:Dh.selectChildren,filter:o9,merge:l9,selection:d9,transition:v9,call:Dh.call,nodes:Dh.nodes,node:Dh.node,size:Dh.size,empty:Dh.empty,each:Dh.each,on:c9,attr:t9,attrTween:r9,style:p9,styleTween:m9,text:g9,textTween:y9,remove:u9,tween:JR,delay:i9,duration:n9,ease:a9,easeVarying:s9,end:x9,[Symbol.iterator]:Dh[Symbol.iterator]}});function Bw(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}var SJ=P(()=>{"use strict";o(Bw,"cubicInOut")});var b9=P(()=>{"use strict";SJ()});function sIe(t,e){for(var r;!(r=t.__transition)||!(r=r[e]);)if(!(t=t.parentNode))throw new Error(`transition ${e} not found`);return r}function T9(t){var e,r;t instanceof Fs?(e=t._id,t=t._name):(e=Pw(),(r=aIe).time=T2(),t=t==null?null:t+"");for(var i=this._groups,n=i.length,a=0;a{"use strict";n0();po();b9();Nw();aIe={time:null,delay:0,duration:250,ease:Bw};o(sIe,"inherit");o(T9,"default")});var _J=P(()=>{"use strict";pc();nJ();AJ();Eh.prototype.interrupt=ZR;Eh.prototype.transition=T9});var Fw=P(()=>{"use strict";_J()});var DJ=P(()=>{"use strict"});var LJ=P(()=>{"use strict"});var RJ=P(()=>{"use strict"});function NJ(t){return[+t[0],+t[1]]}function oIe(t){return[NJ(t[0]),NJ(t[1])]}function k9(t){return{type:t}}var O6t,P6t,B6t,F6t,$6t,z6t,IJ=P(()=>{"use strict";Fw();DJ();LJ();RJ();({abs:O6t,max:P6t,min:B6t}=Math);o(NJ,"number1");o(oIe,"number2");F6t={name:"x",handles:["w","e"].map(k9),input:o(function(t,e){return t==null?null:[[+t[0],e[0][1]],[+t[1],e[1][1]]]},"input"),output:o(function(t){return t&&[t[0][0],t[1][0]]},"output")},$6t={name:"y",handles:["n","s"].map(k9),input:o(function(t,e){return t==null?null:[[e[0][0],+t[0]],[e[1][0],+t[1]]]},"input"),output:o(function(t){return t&&[t[0][1],t[1][1]]},"output")},z6t={name:"xy",handles:["n","w","e","s","nw","ne","sw","se"].map(k9),input:o(function(t){return t==null?null:oIe(t)},"input"),output:o(function(t){return t},"output")};o(k9,"type")});var MJ=P(()=>{"use strict";IJ()});function OJ(t){this._+=t[0];for(let e=1,r=t.length;e=0))throw new Error(`invalid digits: ${t}`);if(e>15)return OJ;let r=10**e;return function(i){this._+=i[0];for(let n=1,a=i.length;n{"use strict";C9=Math.PI,w9=2*C9,a0=1e-6,lIe=w9-a0;o(OJ,"append");o(cIe,"appendRound");s0=class{static{o(this,"Path")}constructor(e){this._x0=this._y0=this._x1=this._y1=null,this._="",this._append=e==null?OJ:cIe(e)}moveTo(e,r){this._append`M${this._x0=this._x1=+e},${this._y0=this._y1=+r}`}closePath(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._append`Z`)}lineTo(e,r){this._append`L${this._x1=+e},${this._y1=+r}`}quadraticCurveTo(e,r,i,n){this._append`Q${+e},${+r},${this._x1=+i},${this._y1=+n}`}bezierCurveTo(e,r,i,n,a,s){this._append`C${+e},${+r},${+i},${+n},${this._x1=+a},${this._y1=+s}`}arcTo(e,r,i,n,a){if(e=+e,r=+r,i=+i,n=+n,a=+a,a<0)throw new Error(`negative radius: ${a}`);let s=this._x1,l=this._y1,u=i-e,h=n-r,f=s-e,d=l-r,p=f*f+d*d;if(this._x1===null)this._append`M${this._x1=e},${this._y1=r}`;else if(p>a0)if(!(Math.abs(d*u-h*f)>a0)||!a)this._append`L${this._x1=e},${this._y1=r}`;else{let m=i-s,g=n-l,y=u*u+h*h,v=m*m+g*g,x=Math.sqrt(y),b=Math.sqrt(p),T=a*Math.tan((C9-Math.acos((y+p-v)/(2*x*b)))/2),w=T/b,k=T/x;Math.abs(w-1)>a0&&this._append`L${e+w*f},${r+w*d}`,this._append`A${a},${a},0,0,${+(d*m>f*g)},${this._x1=e+k*u},${this._y1=r+k*h}`}}arc(e,r,i,n,a,s){if(e=+e,r=+r,i=+i,s=!!s,i<0)throw new Error(`negative radius: ${i}`);let l=i*Math.cos(n),u=i*Math.sin(n),h=e+l,f=r+u,d=1^s,p=s?n-a:a-n;this._x1===null?this._append`M${h},${f}`:(Math.abs(this._x1-h)>a0||Math.abs(this._y1-f)>a0)&&this._append`L${h},${f}`,i&&(p<0&&(p=p%w9+w9),p>lIe?this._append`A${i},${i},0,1,${d},${e-l},${r-u}A${i},${i},0,1,${d},${this._x1=h},${this._y1=f}`:p>a0&&this._append`A${i},${i},0,${+(p>=C9)},${d},${this._x1=e+i*Math.cos(a)},${this._y1=r+i*Math.sin(a)}`)}rect(e,r,i,n){this._append`M${this._x0=this._x1=+e},${this._y0=this._y1=+r}h${i=+i}v${+n}h${-i}Z`}toString(){return this._}};o(PJ,"path");PJ.prototype=s0.prototype});var E9=P(()=>{"use strict";BJ()});var FJ=P(()=>{"use strict"});var $J=P(()=>{"use strict"});var zJ=P(()=>{"use strict"});var GJ=P(()=>{"use strict"});var VJ=P(()=>{"use strict"});var qJ=P(()=>{"use strict"});var WJ=P(()=>{"use strict"});function S9(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)}function o0(t,e){if((r=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var r,i=t.slice(0,r);return[i.length>1?i[0]+i.slice(2):i,+t.slice(r+1)]}var _2=P(()=>{"use strict";o(S9,"default");o(o0,"formatDecimalParts")});function yc(t){return t=o0(Math.abs(t)),t?t[1]:NaN}var D2=P(()=>{"use strict";_2();o(yc,"default")});function A9(t,e){return function(r,i){for(var n=r.length,a=[],s=0,l=t[0],u=0;n>0&&l>0&&(u+l+1>i&&(l=Math.max(1,i-u)),a.push(r.substring(n-=l,n+l)),!((u+=l+1)>i));)l=t[s=(s+1)%t.length];return a.reverse().join(e)}}var UJ=P(()=>{"use strict";o(A9,"default")});function _9(t){return function(e){return e.replace(/[0-9]/g,function(r){return t[+r]})}}var HJ=P(()=>{"use strict";o(_9,"default")});function Hf(t){if(!(e=uIe.exec(t)))throw new Error("invalid format: "+t);var e;return new $w({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function $w(t){this.fill=t.fill===void 0?" ":t.fill+"",this.align=t.align===void 0?">":t.align+"",this.sign=t.sign===void 0?"-":t.sign+"",this.symbol=t.symbol===void 0?"":t.symbol+"",this.zero=!!t.zero,this.width=t.width===void 0?void 0:+t.width,this.comma=!!t.comma,this.precision=t.precision===void 0?void 0:+t.precision,this.trim=!!t.trim,this.type=t.type===void 0?"":t.type+""}var uIe,D9=P(()=>{"use strict";uIe=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;o(Hf,"formatSpecifier");Hf.prototype=$w.prototype;o($w,"FormatSpecifier");$w.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type}});function L9(t){e:for(var e=t.length,r=1,i=-1,n;r0&&(i=0);break}return i>0?t.slice(0,i)+t.slice(n+1):t}var YJ=P(()=>{"use strict";o(L9,"default")});function N9(t,e){var r=o0(t,e);if(!r)return t+"";var i=r[0],n=r[1],a=n-(R9=Math.max(-8,Math.min(8,Math.floor(n/3)))*3)+1,s=i.length;return a===s?i:a>s?i+new Array(a-s+1).join("0"):a>0?i.slice(0,a)+"."+i.slice(a):"0."+new Array(1-a).join("0")+o0(t,Math.max(0,e+a-1))[0]}var R9,I9=P(()=>{"use strict";_2();o(N9,"default")});function zw(t,e){var r=o0(t,e);if(!r)return t+"";var i=r[0],n=r[1];return n<0?"0."+new Array(-n).join("0")+i:i.length>n+1?i.slice(0,n+1)+"."+i.slice(n+1):i+new Array(n-i.length+2).join("0")}var jJ=P(()=>{"use strict";_2();o(zw,"default")});var M9,XJ=P(()=>{"use strict";_2();I9();jJ();M9={"%":o((t,e)=>(t*100).toFixed(e),"%"),b:o(t=>Math.round(t).toString(2),"b"),c:o(t=>t+"","c"),d:S9,e:o((t,e)=>t.toExponential(e),"e"),f:o((t,e)=>t.toFixed(e),"f"),g:o((t,e)=>t.toPrecision(e),"g"),o:o(t=>Math.round(t).toString(8),"o"),p:o((t,e)=>zw(t*100,e),"p"),r:zw,s:N9,X:o(t=>Math.round(t).toString(16).toUpperCase(),"X"),x:o(t=>Math.round(t).toString(16),"x")}});function Gw(t){return t}var KJ=P(()=>{"use strict";o(Gw,"default")});function O9(t){var e=t.grouping===void 0||t.thousands===void 0?Gw:A9(QJ.call(t.grouping,Number),t.thousands+""),r=t.currency===void 0?"":t.currency[0]+"",i=t.currency===void 0?"":t.currency[1]+"",n=t.decimal===void 0?".":t.decimal+"",a=t.numerals===void 0?Gw:_9(QJ.call(t.numerals,String)),s=t.percent===void 0?"%":t.percent+"",l=t.minus===void 0?"\u2212":t.minus+"",u=t.nan===void 0?"NaN":t.nan+"";function h(d){d=Hf(d);var p=d.fill,m=d.align,g=d.sign,y=d.symbol,v=d.zero,x=d.width,b=d.comma,T=d.precision,w=d.trim,k=d.type;k==="n"?(b=!0,k="g"):M9[k]||(T===void 0&&(T=12),w=!0,k="g"),(v||p==="0"&&m==="=")&&(v=!0,p="0",m="=");var C=y==="$"?r:y==="#"&&/[boxX]/.test(k)?"0"+k.toLowerCase():"",E=y==="$"?i:/[%p]/.test(k)?s:"",S=M9[k],L=/[defgprs%]/.test(k);T=T===void 0?6:/[gprs]/.test(k)?Math.max(1,Math.min(21,T)):Math.max(0,Math.min(20,T));function M(I){var A=C,_=E,D,N,R;if(k==="c")_=S(I)+_,I="";else{I=+I;var B=I<0||1/I<0;if(I=isNaN(I)?u:S(Math.abs(I),T),w&&(I=L9(I)),B&&+I==0&&g!=="+"&&(B=!1),A=(B?g==="("?g:l:g==="-"||g==="("?"":g)+A,_=(k==="s"?ZJ[8+R9/3]:"")+_+(B&&g==="("?")":""),L){for(D=-1,N=I.length;++DR||R>57){_=(R===46?n+I.slice(D+1):I.slice(D))+_,I=I.slice(0,D);break}}}b&&!v&&(I=e(I,1/0));var O=A.length+I.length+_.length,$=O>1)+A+I+_+$.slice(O);break;default:I=$+A+I+_;break}return a(I)}return o(M,"format"),M.toString=function(){return d+""},M}o(h,"newFormat");function f(d,p){var m=h((d=Hf(d),d.type="f",d)),g=Math.max(-8,Math.min(8,Math.floor(yc(p)/3)))*3,y=Math.pow(10,-g),v=ZJ[8+g/3];return function(x){return m(y*x)+v}}return o(f,"formatPrefix"),{format:h,formatPrefix:f}}var QJ,ZJ,JJ=P(()=>{"use strict";D2();UJ();HJ();D9();YJ();XJ();I9();KJ();QJ=Array.prototype.map,ZJ=["y","z","a","f","p","n","\xB5","m","","k","M","G","T","P","E","Z","Y"];o(O9,"default")});function P9(t){return Vw=O9(t),du=Vw.format,qw=Vw.formatPrefix,Vw}var Vw,du,qw,eee=P(()=>{"use strict";JJ();P9({thousands:",",grouping:[3],currency:["$",""]});o(P9,"defaultLocale")});function Ww(t){return Math.max(0,-yc(Math.abs(t)))}var tee=P(()=>{"use strict";D2();o(Ww,"default")});function Uw(t,e){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(yc(e)/3)))*3-yc(Math.abs(t)))}var ree=P(()=>{"use strict";D2();o(Uw,"default")});function Hw(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,yc(e)-yc(t))+1}var iee=P(()=>{"use strict";D2();o(Hw,"default")});var B9=P(()=>{"use strict";eee();D9();tee();ree();iee()});var nee=P(()=>{"use strict"});function hIe(t){var e=0,r=t.children,i=r&&r.length;if(!i)e=1;else for(;--i>=0;)e+=r[i].value;t.value=e}function F9(){return this.eachAfter(hIe)}var aee=P(()=>{"use strict";o(hIe,"count");o(F9,"default")});function $9(t,e){let r=-1;for(let i of this)t.call(e,i,++r,this);return this}var see=P(()=>{"use strict";o($9,"default")});function z9(t,e){for(var r=this,i=[r],n,a,s=-1;r=i.pop();)if(t.call(e,r,++s,this),n=r.children)for(a=n.length-1;a>=0;--a)i.push(n[a]);return this}var oee=P(()=>{"use strict";o(z9,"default")});function G9(t,e){for(var r=this,i=[r],n=[],a,s,l,u=-1;r=i.pop();)if(n.push(r),a=r.children)for(s=0,l=a.length;s{"use strict";o(G9,"default")});function V9(t,e){let r=-1;for(let i of this)if(t.call(e,i,++r,this))return i}var cee=P(()=>{"use strict";o(V9,"default")});function q9(t){return this.eachAfter(function(e){for(var r=+t(e.data)||0,i=e.children,n=i&&i.length;--n>=0;)r+=i[n].value;e.value=r})}var uee=P(()=>{"use strict";o(q9,"default")});function W9(t){return this.eachBefore(function(e){e.children&&e.children.sort(t)})}var hee=P(()=>{"use strict";o(W9,"default")});function U9(t){for(var e=this,r=fIe(e,t),i=[e];e!==r;)e=e.parent,i.push(e);for(var n=i.length;t!==r;)i.splice(n,0,t),t=t.parent;return i}function fIe(t,e){if(t===e)return t;var r=t.ancestors(),i=e.ancestors(),n=null;for(t=r.pop(),e=i.pop();t===e;)n=t,t=r.pop(),e=i.pop();return n}var fee=P(()=>{"use strict";o(U9,"default");o(fIe,"leastCommonAncestor")});function H9(){for(var t=this,e=[t];t=t.parent;)e.push(t);return e}var dee=P(()=>{"use strict";o(H9,"default")});function Y9(){return Array.from(this)}var pee=P(()=>{"use strict";o(Y9,"default")});function j9(){var t=[];return this.eachBefore(function(e){e.children||t.push(e)}),t}var mee=P(()=>{"use strict";o(j9,"default")});function X9(){var t=this,e=[];return t.each(function(r){r!==t&&e.push({source:r.parent,target:r})}),e}var gee=P(()=>{"use strict";o(X9,"default")});function*K9(){var t=this,e,r=[t],i,n,a;do for(e=r.reverse(),r=[];t=e.pop();)if(yield t,i=t.children)for(n=0,a=i.length;n{"use strict";o(K9,"default")});function jg(t,e){t instanceof Map?(t=[void 0,t],e===void 0&&(e=mIe)):e===void 0&&(e=pIe);for(var r=new L2(t),i,n=[r],a,s,l,u;i=n.pop();)if((s=e(i.data))&&(u=(s=Array.from(s)).length))for(i.children=s,l=u-1;l>=0;--l)n.push(a=s[l]=new L2(s[l])),a.parent=i,a.depth=i.depth+1;return r.eachBefore(yIe)}function dIe(){return jg(this).eachBefore(gIe)}function pIe(t){return t.children}function mIe(t){return Array.isArray(t)?t[1]:null}function gIe(t){t.data.value!==void 0&&(t.value=t.data.value),t.data=t.data.data}function yIe(t){var e=0;do t.height=e;while((t=t.parent)&&t.height<++e)}function L2(t){this.data=t,this.depth=this.height=0,this.parent=null}var vee=P(()=>{"use strict";aee();see();oee();lee();cee();uee();hee();fee();dee();pee();mee();gee();yee();o(jg,"hierarchy");o(dIe,"node_copy");o(pIe,"objectChildren");o(mIe,"mapChildren");o(gIe,"copyData");o(yIe,"computeHeight");o(L2,"Node");L2.prototype=jg.prototype={constructor:L2,count:F9,each:$9,eachAfter:G9,eachBefore:z9,find:V9,sum:q9,sort:W9,path:U9,ancestors:H9,descendants:Y9,leaves:j9,links:X9,copy:dIe,[Symbol.iterator]:K9}});function xee(t){if(typeof t!="function")throw new Error;return t}var bee=P(()=>{"use strict";o(xee,"required")});function Xg(){return 0}function l0(t){return function(){return t}}var Tee=P(()=>{"use strict";o(Xg,"constantZero");o(l0,"default")});function Q9(t){t.x0=Math.round(t.x0),t.y0=Math.round(t.y0),t.x1=Math.round(t.x1),t.y1=Math.round(t.y1)}var kee=P(()=>{"use strict";o(Q9,"default")});function Z9(t,e,r,i,n){for(var a=t.children,s,l=-1,u=a.length,h=t.value&&(i-e)/t.value;++l{"use strict";o(Z9,"default")});function J9(t,e,r,i,n){for(var a=t.children,s,l=-1,u=a.length,h=t.value&&(n-r)/t.value;++l{"use strict";o(J9,"default")});function xIe(t,e,r,i,n,a){for(var s=[],l=e.children,u,h,f=0,d=0,p=l.length,m,g,y=e.value,v,x,b,T,w,k,C;fb&&(b=h),C=v*v*k,T=Math.max(b/C,C/x),T>w){v-=h;break}w=T}s.push(u={value:v,dice:m{"use strict";Cee();wee();vIe=(1+Math.sqrt(5))/2;o(xIe,"squarifyRatio");Eee=o((function t(e){function r(i,n,a,s,l){xIe(e,i,n,a,s,l)}return o(r,"squarify"),r.ratio=function(i){return t((i=+i)>1?i:1)},r}),"custom")(vIe)});function Yw(){var t=Eee,e=!1,r=1,i=1,n=[0],a=Xg,s=Xg,l=Xg,u=Xg,h=Xg;function f(p){return p.x0=p.y0=0,p.x1=r,p.y1=i,p.eachBefore(d),n=[0],e&&p.eachBefore(Q9),p}o(f,"treemap");function d(p){var m=n[p.depth],g=p.x0+m,y=p.y0+m,v=p.x1-m,x=p.y1-m;v{"use strict";kee();See();bee();Tee();o(Yw,"default")});var _ee=P(()=>{"use strict";vee();Aee()});var Dee=P(()=>{"use strict"});var Lee=P(()=>{"use strict"});function Yf(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t);break}return this}var R2=P(()=>{"use strict";o(Yf,"initRange")});function jo(){var t=new Mg,e=[],r=[],i=eN;function n(a){let s=t.get(a);if(s===void 0){if(i!==eN)return i;t.set(a,s=e.push(a)-1)}return r[s%r.length]}return o(n,"scale"),n.domain=function(a){if(!arguments.length)return e.slice();e=[],t=new Mg;for(let s of a)t.has(s)||t.set(s,e.push(s)-1);return n},n.range=function(a){return arguments.length?(r=Array.from(a),n):r.slice()},n.unknown=function(a){return arguments.length?(i=a,n):i},n.copy=function(){return jo(e,r).unknown(i)},Yf.apply(n,arguments),n}var eN,tN=P(()=>{"use strict";zf();R2();eN=Symbol("implicit");o(jo,"ordinal")});function Kg(){var t=jo().unknown(void 0),e=t.domain,r=t.range,i=0,n=1,a,s,l=!1,u=0,h=0,f=.5;delete t.unknown;function d(){var p=e().length,m=n{"use strict";zf();R2();tN();o(Kg,"band")});function rN(t){return function(){return t}}var Nee=P(()=>{"use strict";o(rN,"constants")});function iN(t){return+t}var Iee=P(()=>{"use strict";o(iN,"number")});function Qg(t){return t}function nN(t,e){return(e-=t=+t)?function(r){return(r-t)/e}:rN(isNaN(e)?NaN:.5)}function bIe(t,e){var r;return t>e&&(r=t,t=e,e=r),function(i){return Math.max(t,Math.min(e,i))}}function TIe(t,e,r){var i=t[0],n=t[1],a=e[0],s=e[1];return n2?kIe:TIe,u=h=null,d}o(f,"rescale");function d(p){return p==null||isNaN(p=+p)?a:(u||(u=l(t.map(i),e,r)))(i(s(p)))}return o(d,"scale"),d.invert=function(p){return s(n((h||(h=l(e,t.map(i),Ea)))(p)))},d.domain=function(p){return arguments.length?(t=Array.from(p,iN),f()):t.slice()},d.range=function(p){return arguments.length?(e=Array.from(p),f()):e.slice()},d.rangeRound=function(p){return e=Array.from(p),r=ww,f()},d.clamp=function(p){return arguments.length?(s=p?!0:Qg,f()):s!==Qg},d.interpolate=function(p){return arguments.length?(r=p,f()):r},d.unknown=function(p){return arguments.length?(a=p,d):a},function(p,m){return i=p,n=m,f()}}function N2(){return CIe()(Qg,Qg)}var Mee,aN=P(()=>{"use strict";zf();Ug();Nee();Iee();Mee=[0,1];o(Qg,"identity");o(nN,"normalize");o(bIe,"clamper");o(TIe,"bimap");o(kIe,"polymap");o(jw,"copy");o(CIe,"transformer");o(N2,"continuous")});function sN(t,e,r,i){var n=Og(t,e,r),a;switch(i=Hf(i??",f"),i.type){case"s":{var s=Math.max(Math.abs(t),Math.abs(e));return i.precision==null&&!isNaN(a=Uw(n,s))&&(i.precision=a),qw(i,s)}case"":case"e":case"g":case"p":case"r":{i.precision==null&&!isNaN(a=Hw(n,Math.max(Math.abs(t),Math.abs(e))))&&(i.precision=a-(i.type==="e"));break}case"f":case"%":{i.precision==null&&!isNaN(a=Ww(n))&&(i.precision=a-(i.type==="%")*2);break}}return du(i)}var Oee=P(()=>{"use strict";zf();B9();o(sN,"tickFormat")});function wIe(t){var e=t.domain;return t.ticks=function(r){var i=e();return ow(i[0],i[i.length-1],r??10)},t.tickFormat=function(r,i){var n=e();return sN(n[0],n[n.length-1],r??10,i)},t.nice=function(r){r==null&&(r=10);var i=e(),n=0,a=i.length-1,s=i[n],l=i[a],u,h,f=10;for(l0;){if(h=s2(s,l,r),h===u)return i[n]=s,i[a]=l,e(i);if(h>0)s=Math.floor(s/h)*h,l=Math.ceil(l/h)*h;else if(h<0)s=Math.ceil(s*h)/h,l=Math.floor(l*h)/h;else break;u=h}return t},t}function vc(){var t=N2();return t.copy=function(){return jw(t,vc())},Yf.apply(t,arguments),wIe(t)}var Pee=P(()=>{"use strict";zf();aN();R2();Oee();o(wIe,"linearish");o(vc,"linear")});function oN(t,e){t=t.slice();var r=0,i=t.length-1,n=t[r],a=t[i],s;return a{"use strict";o(oN,"nice")});function zi(t,e,r,i){function n(a){return t(a=arguments.length===0?new Date:new Date(+a)),a}return o(n,"interval"),n.floor=a=>(t(a=new Date(+a)),a),n.ceil=a=>(t(a=new Date(a-1)),e(a,1),t(a),a),n.round=a=>{let s=n(a),l=n.ceil(a);return a-s(e(a=new Date(+a),s==null?1:Math.floor(s)),a),n.range=(a,s,l)=>{let u=[];if(a=n.ceil(a),l=l==null?1:Math.floor(l),!(a0))return u;let h;do u.push(h=new Date(+a)),e(a,l),t(a);while(hzi(s=>{if(s>=s)for(;t(s),!a(s);)s.setTime(s-1)},(s,l)=>{if(s>=s)if(l<0)for(;++l<=0;)for(;e(s,-1),!a(s););else for(;--l>=0;)for(;e(s,1),!a(s););}),r&&(n.count=(a,s)=>(lN.setTime(+a),cN.setTime(+s),t(lN),t(cN),Math.floor(r(lN,cN))),n.every=a=>(a=Math.floor(a),!isFinite(a)||!(a>0)?null:a>1?n.filter(i?s=>i(s)%a===0:s=>n.count(0,s)%a===0):n)),n}var lN,cN,Lh=P(()=>{"use strict";lN=new Date,cN=new Date;o(zi,"timeInterval")});var pu,Fee,uN=P(()=>{"use strict";Lh();pu=zi(()=>{},(t,e)=>{t.setTime(+t+e)},(t,e)=>e-t);pu.every=t=>(t=Math.floor(t),!isFinite(t)||!(t>0)?null:t>1?zi(e=>{e.setTime(Math.floor(e/t)*t)},(e,r)=>{e.setTime(+e+r*t)},(e,r)=>(r-e)/t):pu);Fee=pu.range});var Xo,$ee,hN=P(()=>{"use strict";Lh();Xo=zi(t=>{t.setTime(t-t.getMilliseconds())},(t,e)=>{t.setTime(+t+e*1e3)},(t,e)=>(e-t)/1e3,t=>t.getUTCSeconds()),$ee=Xo.range});var Rh,EIe,Xw,SIe,fN=P(()=>{"use strict";Lh();Rh=zi(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*1e3)},(t,e)=>{t.setTime(+t+e*6e4)},(t,e)=>(e-t)/6e4,t=>t.getMinutes()),EIe=Rh.range,Xw=zi(t=>{t.setUTCSeconds(0,0)},(t,e)=>{t.setTime(+t+e*6e4)},(t,e)=>(e-t)/6e4,t=>t.getUTCMinutes()),SIe=Xw.range});var Nh,AIe,Kw,_Ie,dN=P(()=>{"use strict";Lh();Nh=zi(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*1e3-t.getMinutes()*6e4)},(t,e)=>{t.setTime(+t+e*36e5)},(t,e)=>(e-t)/36e5,t=>t.getHours()),AIe=Nh.range,Kw=zi(t=>{t.setUTCMinutes(0,0,0)},(t,e)=>{t.setTime(+t+e*36e5)},(t,e)=>(e-t)/36e5,t=>t.getUTCHours()),_Ie=Kw.range});var Sl,DIe,M2,LIe,Qw,RIe,pN=P(()=>{"use strict";Lh();Sl=zi(t=>t.setHours(0,0,0,0),(t,e)=>t.setDate(t.getDate()+e),(t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*6e4)/864e5,t=>t.getDate()-1),DIe=Sl.range,M2=zi(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/864e5,t=>t.getUTCDate()-1),LIe=M2.range,Qw=zi(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/864e5,t=>Math.floor(t/864e5)),RIe=Qw.range});function h0(t){return zi(e=>{e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)},(e,r)=>{e.setDate(e.getDate()+r*7)},(e,r)=>(r-e-(r.getTimezoneOffset()-e.getTimezoneOffset())*6e4)/6048e5)}function f0(t){return zi(e=>{e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)},(e,r)=>{e.setUTCDate(e.getUTCDate()+r*7)},(e,r)=>(r-e)/6048e5)}var xc,jf,Zw,Jw,gu,e3,t3,Gee,NIe,IIe,MIe,OIe,PIe,BIe,d0,Zg,Vee,qee,Xf,Wee,Uee,Hee,FIe,$Ie,zIe,GIe,VIe,qIe,mN=P(()=>{"use strict";Lh();o(h0,"timeWeekday");xc=h0(0),jf=h0(1),Zw=h0(2),Jw=h0(3),gu=h0(4),e3=h0(5),t3=h0(6),Gee=xc.range,NIe=jf.range,IIe=Zw.range,MIe=Jw.range,OIe=gu.range,PIe=e3.range,BIe=t3.range;o(f0,"utcWeekday");d0=f0(0),Zg=f0(1),Vee=f0(2),qee=f0(3),Xf=f0(4),Wee=f0(5),Uee=f0(6),Hee=d0.range,FIe=Zg.range,$Ie=Vee.range,zIe=qee.range,GIe=Xf.range,VIe=Wee.range,qIe=Uee.range});var Ih,WIe,r3,UIe,gN=P(()=>{"use strict";Lh();Ih=zi(t=>{t.setDate(1),t.setHours(0,0,0,0)},(t,e)=>{t.setMonth(t.getMonth()+e)},(t,e)=>e.getMonth()-t.getMonth()+(e.getFullYear()-t.getFullYear())*12,t=>t.getMonth()),WIe=Ih.range,r3=zi(t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCMonth(t.getUTCMonth()+e)},(t,e)=>e.getUTCMonth()-t.getUTCMonth()+(e.getUTCFullYear()-t.getUTCFullYear())*12,t=>t.getUTCMonth()),UIe=r3.range});var Ko,HIe,bc,YIe,yN=P(()=>{"use strict";Lh();Ko=zi(t=>{t.setMonth(0,1),t.setHours(0,0,0,0)},(t,e)=>{t.setFullYear(t.getFullYear()+e)},(t,e)=>e.getFullYear()-t.getFullYear(),t=>t.getFullYear());Ko.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:zi(e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)},(e,r)=>{e.setFullYear(e.getFullYear()+r*t)});HIe=Ko.range,bc=zi(t=>{t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCFullYear(t.getUTCFullYear()+e)},(t,e)=>e.getUTCFullYear()-t.getUTCFullYear(),t=>t.getUTCFullYear());bc.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:zi(e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,r)=>{e.setUTCFullYear(e.getUTCFullYear()+r*t)});YIe=bc.range});function jee(t,e,r,i,n,a){let s=[[Xo,1,1e3],[Xo,5,5*1e3],[Xo,15,15*1e3],[Xo,30,30*1e3],[a,1,6e4],[a,5,5*6e4],[a,15,15*6e4],[a,30,30*6e4],[n,1,36e5],[n,3,3*36e5],[n,6,6*36e5],[n,12,12*36e5],[i,1,864e5],[i,2,2*864e5],[r,1,6048e5],[e,1,2592e6],[e,3,3*2592e6],[t,1,31536e6]];function l(h,f,d){let p=fv).right(s,p);if(m===s.length)return t.every(Og(h/31536e6,f/31536e6,d));if(m===0)return pu.every(Math.max(Og(h,f,d),1));let[g,y]=s[p/s[m-1][2]{"use strict";zf();uN();hN();fN();dN();pN();mN();gN();yN();o(jee,"ticker");[XIe,KIe]=jee(bc,r3,d0,Qw,Kw,Xw),[vN,xN]=jee(Ko,Ih,xc,Sl,Nh,Rh)});var i3=P(()=>{"use strict";uN();hN();fN();dN();pN();mN();gN();yN();Xee()});function bN(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function TN(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function O2(t,e,r){return{y:t,m:e,d:r,H:0,M:0,S:0,L:0}}function kN(t){var e=t.dateTime,r=t.date,i=t.time,n=t.periods,a=t.days,s=t.shortDays,l=t.months,u=t.shortMonths,h=P2(n),f=B2(n),d=P2(a),p=B2(a),m=P2(s),g=B2(s),y=P2(l),v=B2(l),x=P2(u),b=B2(u),T={a:B,A:O,b:$,B:z,c:null,d:tte,e:tte,f:xMe,g:DMe,G:RMe,H:gMe,I:yMe,j:vMe,L:ste,m:bMe,M:TMe,p:F,q:V,Q:nte,s:ate,S:kMe,u:CMe,U:wMe,V:EMe,w:SMe,W:AMe,x:null,X:null,y:_Me,Y:LMe,Z:NMe,"%":ite},w={a:H,A:X,b:W,B:Z,c:null,d:rte,e:rte,f:PMe,g:HMe,G:jMe,H:IMe,I:MMe,j:OMe,L:lte,m:BMe,M:FMe,p:Y,q:ae,Q:nte,s:ate,S:$Me,u:zMe,U:GMe,V:VMe,w:qMe,W:WMe,x:null,X:null,y:UMe,Y:YMe,Z:XMe,"%":ite},k={a:M,A:I,b:A,B:_,c:D,d:Jee,e:Jee,f:fMe,g:Zee,G:Qee,H:ete,I:ete,j:lMe,L:hMe,m:oMe,M:cMe,p:L,q:sMe,Q:pMe,s:mMe,S:uMe,u:tMe,U:rMe,V:iMe,w:eMe,W:nMe,x:N,X:R,y:Zee,Y:Qee,Z:aMe,"%":dMe};T.x=C(r,T),T.X=C(i,T),T.c=C(e,T),w.x=C(r,w),w.X=C(i,w),w.c=C(e,w);function C(J,ee){return function(re){var te=[],be=-1,de=0,Ee=J.length,Ne,we,Te;for(re instanceof Date||(re=new Date(+re));++be53)return null;"w"in te||(te.w=1),"Z"in te?(de=TN(O2(te.y,0,1)),Ee=de.getUTCDay(),de=Ee>4||Ee===0?Zg.ceil(de):Zg(de),de=M2.offset(de,(te.V-1)*7),te.y=de.getUTCFullYear(),te.m=de.getUTCMonth(),te.d=de.getUTCDate()+(te.w+6)%7):(de=bN(O2(te.y,0,1)),Ee=de.getDay(),de=Ee>4||Ee===0?jf.ceil(de):jf(de),de=Sl.offset(de,(te.V-1)*7),te.y=de.getFullYear(),te.m=de.getMonth(),te.d=de.getDate()+(te.w+6)%7)}else("W"in te||"U"in te)&&("w"in te||(te.w="u"in te?te.u%7:"W"in te?1:0),Ee="Z"in te?TN(O2(te.y,0,1)).getUTCDay():bN(O2(te.y,0,1)).getDay(),te.m=0,te.d="W"in te?(te.w+6)%7+te.W*7-(Ee+5)%7:te.w+te.U*7-(Ee+6)%7);return"Z"in te?(te.H+=te.Z/100|0,te.M+=te.Z%100,TN(te)):bN(te)}}o(E,"newParse");function S(J,ee,re,te){for(var be=0,de=ee.length,Ee=re.length,Ne,we;be=Ee)return-1;if(Ne=ee.charCodeAt(be++),Ne===37){if(Ne=ee.charAt(be++),we=k[Ne in Kee?ee.charAt(be++):Ne],!we||(te=we(J,re,te))<0)return-1}else if(Ne!=re.charCodeAt(te++))return-1}return te}o(S,"parseSpecifier");function L(J,ee,re){var te=h.exec(ee.slice(re));return te?(J.p=f.get(te[0].toLowerCase()),re+te[0].length):-1}o(L,"parsePeriod");function M(J,ee,re){var te=m.exec(ee.slice(re));return te?(J.w=g.get(te[0].toLowerCase()),re+te[0].length):-1}o(M,"parseShortWeekday");function I(J,ee,re){var te=d.exec(ee.slice(re));return te?(J.w=p.get(te[0].toLowerCase()),re+te[0].length):-1}o(I,"parseWeekday");function A(J,ee,re){var te=x.exec(ee.slice(re));return te?(J.m=b.get(te[0].toLowerCase()),re+te[0].length):-1}o(A,"parseShortMonth");function _(J,ee,re){var te=y.exec(ee.slice(re));return te?(J.m=v.get(te[0].toLowerCase()),re+te[0].length):-1}o(_,"parseMonth");function D(J,ee,re){return S(J,e,ee,re)}o(D,"parseLocaleDateTime");function N(J,ee,re){return S(J,r,ee,re)}o(N,"parseLocaleDate");function R(J,ee,re){return S(J,i,ee,re)}o(R,"parseLocaleTime");function B(J){return s[J.getDay()]}o(B,"formatShortWeekday");function O(J){return a[J.getDay()]}o(O,"formatWeekday");function $(J){return u[J.getMonth()]}o($,"formatShortMonth");function z(J){return l[J.getMonth()]}o(z,"formatMonth");function F(J){return n[+(J.getHours()>=12)]}o(F,"formatPeriod");function V(J){return 1+~~(J.getMonth()/3)}o(V,"formatQuarter");function H(J){return s[J.getUTCDay()]}o(H,"formatUTCShortWeekday");function X(J){return a[J.getUTCDay()]}o(X,"formatUTCWeekday");function W(J){return u[J.getUTCMonth()]}o(W,"formatUTCShortMonth");function Z(J){return l[J.getUTCMonth()]}o(Z,"formatUTCMonth");function Y(J){return n[+(J.getUTCHours()>=12)]}o(Y,"formatUTCPeriod");function ae(J){return 1+~~(J.getUTCMonth()/3)}return o(ae,"formatUTCQuarter"),{format:o(function(J){var ee=C(J+="",T);return ee.toString=function(){return J},ee},"format"),parse:o(function(J){var ee=E(J+="",!1);return ee.toString=function(){return J},ee},"parse"),utcFormat:o(function(J){var ee=C(J+="",w);return ee.toString=function(){return J},ee},"utcFormat"),utcParse:o(function(J){var ee=E(J+="",!0);return ee.toString=function(){return J},ee},"utcParse")}}function hi(t,e,r){var i=t<0?"-":"",n=(i?-t:t)+"",a=n.length;return i+(a[e.toLowerCase(),r]))}function eMe(t,e,r){var i=Sa.exec(e.slice(r,r+1));return i?(t.w=+i[0],r+i[0].length):-1}function tMe(t,e,r){var i=Sa.exec(e.slice(r,r+1));return i?(t.u=+i[0],r+i[0].length):-1}function rMe(t,e,r){var i=Sa.exec(e.slice(r,r+2));return i?(t.U=+i[0],r+i[0].length):-1}function iMe(t,e,r){var i=Sa.exec(e.slice(r,r+2));return i?(t.V=+i[0],r+i[0].length):-1}function nMe(t,e,r){var i=Sa.exec(e.slice(r,r+2));return i?(t.W=+i[0],r+i[0].length):-1}function Qee(t,e,r){var i=Sa.exec(e.slice(r,r+4));return i?(t.y=+i[0],r+i[0].length):-1}function Zee(t,e,r){var i=Sa.exec(e.slice(r,r+2));return i?(t.y=+i[0]+(+i[0]>68?1900:2e3),r+i[0].length):-1}function aMe(t,e,r){var i=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(r,r+6));return i?(t.Z=i[1]?0:-(i[2]+(i[3]||"00")),r+i[0].length):-1}function sMe(t,e,r){var i=Sa.exec(e.slice(r,r+1));return i?(t.q=i[0]*3-3,r+i[0].length):-1}function oMe(t,e,r){var i=Sa.exec(e.slice(r,r+2));return i?(t.m=i[0]-1,r+i[0].length):-1}function Jee(t,e,r){var i=Sa.exec(e.slice(r,r+2));return i?(t.d=+i[0],r+i[0].length):-1}function lMe(t,e,r){var i=Sa.exec(e.slice(r,r+3));return i?(t.m=0,t.d=+i[0],r+i[0].length):-1}function ete(t,e,r){var i=Sa.exec(e.slice(r,r+2));return i?(t.H=+i[0],r+i[0].length):-1}function cMe(t,e,r){var i=Sa.exec(e.slice(r,r+2));return i?(t.M=+i[0],r+i[0].length):-1}function uMe(t,e,r){var i=Sa.exec(e.slice(r,r+2));return i?(t.S=+i[0],r+i[0].length):-1}function hMe(t,e,r){var i=Sa.exec(e.slice(r,r+3));return i?(t.L=+i[0],r+i[0].length):-1}function fMe(t,e,r){var i=Sa.exec(e.slice(r,r+6));return i?(t.L=Math.floor(i[0]/1e3),r+i[0].length):-1}function dMe(t,e,r){var i=QIe.exec(e.slice(r,r+1));return i?r+i[0].length:-1}function pMe(t,e,r){var i=Sa.exec(e.slice(r));return i?(t.Q=+i[0],r+i[0].length):-1}function mMe(t,e,r){var i=Sa.exec(e.slice(r));return i?(t.s=+i[0],r+i[0].length):-1}function tte(t,e){return hi(t.getDate(),e,2)}function gMe(t,e){return hi(t.getHours(),e,2)}function yMe(t,e){return hi(t.getHours()%12||12,e,2)}function vMe(t,e){return hi(1+Sl.count(Ko(t),t),e,3)}function ste(t,e){return hi(t.getMilliseconds(),e,3)}function xMe(t,e){return ste(t,e)+"000"}function bMe(t,e){return hi(t.getMonth()+1,e,2)}function TMe(t,e){return hi(t.getMinutes(),e,2)}function kMe(t,e){return hi(t.getSeconds(),e,2)}function CMe(t){var e=t.getDay();return e===0?7:e}function wMe(t,e){return hi(xc.count(Ko(t)-1,t),e,2)}function ote(t){var e=t.getDay();return e>=4||e===0?gu(t):gu.ceil(t)}function EMe(t,e){return t=ote(t),hi(gu.count(Ko(t),t)+(Ko(t).getDay()===4),e,2)}function SMe(t){return t.getDay()}function AMe(t,e){return hi(jf.count(Ko(t)-1,t),e,2)}function _Me(t,e){return hi(t.getFullYear()%100,e,2)}function DMe(t,e){return t=ote(t),hi(t.getFullYear()%100,e,2)}function LMe(t,e){return hi(t.getFullYear()%1e4,e,4)}function RMe(t,e){var r=t.getDay();return t=r>=4||r===0?gu(t):gu.ceil(t),hi(t.getFullYear()%1e4,e,4)}function NMe(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+hi(e/60|0,"0",2)+hi(e%60,"0",2)}function rte(t,e){return hi(t.getUTCDate(),e,2)}function IMe(t,e){return hi(t.getUTCHours(),e,2)}function MMe(t,e){return hi(t.getUTCHours()%12||12,e,2)}function OMe(t,e){return hi(1+M2.count(bc(t),t),e,3)}function lte(t,e){return hi(t.getUTCMilliseconds(),e,3)}function PMe(t,e){return lte(t,e)+"000"}function BMe(t,e){return hi(t.getUTCMonth()+1,e,2)}function FMe(t,e){return hi(t.getUTCMinutes(),e,2)}function $Me(t,e){return hi(t.getUTCSeconds(),e,2)}function zMe(t){var e=t.getUTCDay();return e===0?7:e}function GMe(t,e){return hi(d0.count(bc(t)-1,t),e,2)}function cte(t){var e=t.getUTCDay();return e>=4||e===0?Xf(t):Xf.ceil(t)}function VMe(t,e){return t=cte(t),hi(Xf.count(bc(t),t)+(bc(t).getUTCDay()===4),e,2)}function qMe(t){return t.getUTCDay()}function WMe(t,e){return hi(Zg.count(bc(t)-1,t),e,2)}function UMe(t,e){return hi(t.getUTCFullYear()%100,e,2)}function HMe(t,e){return t=cte(t),hi(t.getUTCFullYear()%100,e,2)}function YMe(t,e){return hi(t.getUTCFullYear()%1e4,e,4)}function jMe(t,e){var r=t.getUTCDay();return t=r>=4||r===0?Xf(t):Xf.ceil(t),hi(t.getUTCFullYear()%1e4,e,4)}function XMe(){return"+0000"}function ite(){return"%"}function nte(t){return+t}function ate(t){return Math.floor(+t/1e3)}var Kee,Sa,QIe,ZIe,ute=P(()=>{"use strict";i3();o(bN,"localDate");o(TN,"utcDate");o(O2,"newDate");o(kN,"formatLocale");Kee={"-":"",_:" ",0:"0"},Sa=/^\s*\d+/,QIe=/^%/,ZIe=/[\\^$*+?|[\]().{}]/g;o(hi,"pad");o(JIe,"requote");o(P2,"formatRe");o(B2,"formatLookup");o(eMe,"parseWeekdayNumberSunday");o(tMe,"parseWeekdayNumberMonday");o(rMe,"parseWeekNumberSunday");o(iMe,"parseWeekNumberISO");o(nMe,"parseWeekNumberMonday");o(Qee,"parseFullYear");o(Zee,"parseYear");o(aMe,"parseZone");o(sMe,"parseQuarter");o(oMe,"parseMonthNumber");o(Jee,"parseDayOfMonth");o(lMe,"parseDayOfYear");o(ete,"parseHour24");o(cMe,"parseMinutes");o(uMe,"parseSeconds");o(hMe,"parseMilliseconds");o(fMe,"parseMicroseconds");o(dMe,"parseLiteralPercent");o(pMe,"parseUnixTimestamp");o(mMe,"parseUnixTimestampSeconds");o(tte,"formatDayOfMonth");o(gMe,"formatHour24");o(yMe,"formatHour12");o(vMe,"formatDayOfYear");o(ste,"formatMilliseconds");o(xMe,"formatMicroseconds");o(bMe,"formatMonthNumber");o(TMe,"formatMinutes");o(kMe,"formatSeconds");o(CMe,"formatWeekdayNumberMonday");o(wMe,"formatWeekNumberSunday");o(ote,"dISO");o(EMe,"formatWeekNumberISO");o(SMe,"formatWeekdayNumberSunday");o(AMe,"formatWeekNumberMonday");o(_Me,"formatYear");o(DMe,"formatYearISO");o(LMe,"formatFullYear");o(RMe,"formatFullYearISO");o(NMe,"formatZone");o(rte,"formatUTCDayOfMonth");o(IMe,"formatUTCHour24");o(MMe,"formatUTCHour12");o(OMe,"formatUTCDayOfYear");o(lte,"formatUTCMilliseconds");o(PMe,"formatUTCMicroseconds");o(BMe,"formatUTCMonthNumber");o(FMe,"formatUTCMinutes");o($Me,"formatUTCSeconds");o(zMe,"formatUTCWeekdayNumberMonday");o(GMe,"formatUTCWeekNumberSunday");o(cte,"UTCdISO");o(VMe,"formatUTCWeekNumberISO");o(qMe,"formatUTCWeekdayNumberSunday");o(WMe,"formatUTCWeekNumberMonday");o(UMe,"formatUTCYear");o(HMe,"formatUTCYearISO");o(YMe,"formatUTCFullYear");o(jMe,"formatUTCFullYearISO");o(XMe,"formatUTCZone");o(ite,"formatLiteralPercent");o(nte,"formatUnixTimestamp");o(ate,"formatUnixTimestampSeconds")});function CN(t){return Jg=kN(t),p0=Jg.format,hte=Jg.parse,fte=Jg.utcFormat,dte=Jg.utcParse,Jg}var Jg,p0,hte,fte,dte,pte=P(()=>{"use strict";ute();CN({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});o(CN,"defaultLocale")});var wN=P(()=>{"use strict";pte()});function KMe(t){return new Date(t)}function QMe(t){return t instanceof Date?+t:+new Date(+t)}function mte(t,e,r,i,n,a,s,l,u,h){var f=N2(),d=f.invert,p=f.domain,m=h(".%L"),g=h(":%S"),y=h("%I:%M"),v=h("%I %p"),x=h("%a %d"),b=h("%b %d"),T=h("%B"),w=h("%Y");function k(C){return(u(C){"use strict";i3();wN();aN();R2();Bee();o(KMe,"date");o(QMe,"number");o(mte,"calendar");o(n3,"time")});var yte=P(()=>{"use strict";Ree();Pee();tN();gte()});function EN(t){for(var e=t.length/6|0,r=new Array(e),i=0;i{"use strict";o(EN,"default")});var SN,xte=P(()=>{"use strict";vte();SN=EN("4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab")});var bte=P(()=>{"use strict";xte()});function on(t){return o(function(){return t},"constant")}var a3=P(()=>{"use strict";o(on,"default")});function kte(t){return t>1?0:t<-1?e1:Math.acos(t)}function _N(t){return t>=1?F2:t<=-1?-F2:Math.asin(t)}var AN,Ya,Kf,Tte,s3,Tc,m0,Aa,e1,F2,t1,o3=P(()=>{"use strict";AN=Math.abs,Ya=Math.atan2,Kf=Math.cos,Tte=Math.max,s3=Math.min,Tc=Math.sin,m0=Math.sqrt,Aa=1e-12,e1=Math.PI,F2=e1/2,t1=2*e1;o(kte,"acos");o(_N,"asin")});function l3(t){let e=3;return t.digits=function(r){if(!arguments.length)return e;if(r==null)e=null;else{let i=Math.floor(r);if(!(i>=0))throw new RangeError(`invalid digits: ${r}`);e=i}return t},()=>new s0(e)}var DN=P(()=>{"use strict";E9();o(l3,"withPath")});function ZMe(t){return t.innerRadius}function JMe(t){return t.outerRadius}function eOe(t){return t.startAngle}function tOe(t){return t.endAngle}function rOe(t){return t&&t.padAngle}function iOe(t,e,r,i,n,a,s,l){var u=r-t,h=i-e,f=s-n,d=l-a,p=d*u-f*h;if(!(p*pD*D+N*N&&(S=M,L=I),{cx:S,cy:L,x01:-f,y01:-d,x11:S*(n/k-1),y11:L*(n/k-1)}}function kc(){var t=ZMe,e=JMe,r=on(0),i=null,n=eOe,a=tOe,s=rOe,l=null,u=l3(h);function h(){var f,d,p=+t.apply(this,arguments),m=+e.apply(this,arguments),g=n.apply(this,arguments)-F2,y=a.apply(this,arguments)-F2,v=AN(y-g),x=y>g;if(l||(l=f=u()),mAa))l.moveTo(0,0);else if(v>t1-Aa)l.moveTo(m*Kf(g),m*Tc(g)),l.arc(0,0,m,g,y,!x),p>Aa&&(l.moveTo(p*Kf(y),p*Tc(y)),l.arc(0,0,p,y,g,x));else{var b=g,T=y,w=g,k=y,C=v,E=v,S=s.apply(this,arguments)/2,L=S>Aa&&(i?+i.apply(this,arguments):m0(p*p+m*m)),M=s3(AN(m-p)/2,+r.apply(this,arguments)),I=M,A=M,_,D;if(L>Aa){var N=_N(L/p*Tc(S)),R=_N(L/m*Tc(S));(C-=N*2)>Aa?(N*=x?1:-1,w+=N,k-=N):(C=0,w=k=(g+y)/2),(E-=R*2)>Aa?(R*=x?1:-1,b+=R,T-=R):(E=0,b=T=(g+y)/2)}var B=m*Kf(b),O=m*Tc(b),$=p*Kf(k),z=p*Tc(k);if(M>Aa){var F=m*Kf(T),V=m*Tc(T),H=p*Kf(w),X=p*Tc(w),W;if(vAa?A>Aa?(_=c3(H,X,B,O,m,A,x),D=c3(F,V,$,z,m,A,x),l.moveTo(_.cx+_.x01,_.cy+_.y01),AAa)||!(C>Aa)?l.lineTo($,z):I>Aa?(_=c3($,z,F,V,p,-I,x),D=c3(B,O,H,X,p,-I,x),l.lineTo(_.cx+_.x01,_.cy+_.y01),I{"use strict";a3();o3();DN();o(ZMe,"arcInnerRadius");o(JMe,"arcOuterRadius");o(eOe,"arcStartAngle");o(tOe,"arcEndAngle");o(rOe,"arcPadAngle");o(iOe,"intersect");o(c3,"cornerTangents");o(kc,"default")});function $2(t){return typeof t=="object"&&"length"in t?t:Array.from(t)}var wDt,LN=P(()=>{"use strict";wDt=Array.prototype.slice;o($2,"default")});function wte(t){this._context=t}function yu(t){return new wte(t)}var RN=P(()=>{"use strict";o(wte,"Linear");wte.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e);break}},"point")};o(yu,"default")});function Ete(t){return t[0]}function Ste(t){return t[1]}var Ate=P(()=>{"use strict";o(Ete,"x");o(Ste,"y")});function Cc(t,e){var r=on(!0),i=null,n=yu,a=null,s=l3(l);t=typeof t=="function"?t:t===void 0?Ete:on(t),e=typeof e=="function"?e:e===void 0?Ste:on(e);function l(u){var h,f=(u=$2(u)).length,d,p=!1,m;for(i==null&&(a=n(m=s())),h=0;h<=f;++h)!(h{"use strict";LN();a3();RN();DN();Ate();o(Cc,"default")});function NN(t,e){return et?1:e>=t?0:NaN}var Dte=P(()=>{"use strict";o(NN,"default")});function IN(t){return t}var Lte=P(()=>{"use strict";o(IN,"default")});function u3(){var t=IN,e=NN,r=null,i=on(0),n=on(t1),a=on(0);function s(l){var u,h=(l=$2(l)).length,f,d,p=0,m=new Array(h),g=new Array(h),y=+i.apply(this,arguments),v=Math.min(t1,Math.max(-t1,n.apply(this,arguments)-y)),x,b=Math.min(Math.abs(v)/h,a.apply(this,arguments)),T=b*(v<0?-1:1),w;for(u=0;u0&&(p+=w);for(e!=null?m.sort(function(k,C){return e(g[k],g[C])}):r!=null&&m.sort(function(k,C){return r(l[k],l[C])}),u=0,d=p?(v-h*T)/p:0;u0?w*d:0)+T,g[f]={data:l[f],index:u,value:w,startAngle:y,endAngle:x,padAngle:b};return g}return o(s,"pie"),s.value=function(l){return arguments.length?(t=typeof l=="function"?l:on(+l),s):t},s.sortValues=function(l){return arguments.length?(e=l,r=null,s):e},s.sort=function(l){return arguments.length?(r=l,e=null,s):r},s.startAngle=function(l){return arguments.length?(i=typeof l=="function"?l:on(+l),s):i},s.endAngle=function(l){return arguments.length?(n=typeof l=="function"?l:on(+l),s):n},s.padAngle=function(l){return arguments.length?(a=typeof l=="function"?l:on(+l),s):a},s}var Rte=P(()=>{"use strict";LN();a3();Dte();Lte();o3();o(u3,"default")});function z2(t){return new h3(t,!0)}function G2(t){return new h3(t,!1)}var h3,Nte=P(()=>{"use strict";h3=class{static{o(this,"Bump")}constructor(e,r){this._context=e,this._x=r}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line}point(e,r){switch(e=+e,r=+r,this._point){case 0:{this._point=1,this._line?this._context.lineTo(e,r):this._context.moveTo(e,r);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+e)/2,this._y0,this._x0,r,e,r):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+r)/2,e,this._y0,e,r);break}}this._x0=e,this._y0=r}};o(z2,"bumpX");o(G2,"bumpY")});function Qo(){}var V2=P(()=>{"use strict";o(Qo,"default")});function r1(t,e,r){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+r)/6)}function q2(t){this._context=t}function wc(t){return new q2(t)}var W2=P(()=>{"use strict";o(r1,"point");o(q2,"Basis");q2.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 3:r1(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:r1(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e},"point")};o(wc,"default")});function Ite(t){this._context=t}function f3(t){return new Ite(t)}var Mte=P(()=>{"use strict";V2();W2();o(Ite,"BasisClosed");Ite.prototype={areaStart:Qo,areaEnd:Qo,lineStart:o(function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 1:{this._context.moveTo(this._x2,this._y2),this._context.closePath();break}case 2:{this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break}case 3:{this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4);break}}},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:r1(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e},"point")};o(f3,"default")});function Ote(t){this._context=t}function d3(t){return new Ote(t)}var Pte=P(()=>{"use strict";W2();o(Ote,"BasisOpen");Ote.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var r=(this._x0+4*this._x1+t)/6,i=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(r,i):this._context.moveTo(r,i);break;case 3:this._point=4;default:r1(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e},"point")};o(d3,"default")});function Bte(t,e){this._basis=new q2(t),this._beta=e}var MN,Fte=P(()=>{"use strict";W2();o(Bte,"Bundle");Bte.prototype={lineStart:o(function(){this._x=[],this._y=[],this._basis.lineStart()},"lineStart"),lineEnd:o(function(){var t=this._x,e=this._y,r=t.length-1;if(r>0)for(var i=t[0],n=e[0],a=t[r]-i,s=e[r]-n,l=-1,u;++l<=r;)u=l/r,this._basis.point(this._beta*t[l]+(1-this._beta)*(i+u*a),this._beta*e[l]+(1-this._beta)*(n+u*s));this._x=this._y=null,this._basis.lineEnd()},"lineEnd"),point:o(function(t,e){this._x.push(+t),this._y.push(+e)},"point")};MN=o((function t(e){function r(i){return e===1?new q2(i):new Bte(i,e)}return o(r,"bundle"),r.beta=function(i){return t(+i)},r}),"custom")(.85)});function i1(t,e,r){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-r),t._x2,t._y2)}function p3(t,e){this._context=t,this._k=(1-e)/6}var U2,H2=P(()=>{"use strict";o(i1,"point");o(p3,"Cardinal");p3.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:i1(this,this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:i1(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};U2=o((function t(e){function r(i){return new p3(i,e)}return o(r,"cardinal"),r.tension=function(i){return t(+i)},r}),"custom")(0)});function m3(t,e){this._context=t,this._k=(1-e)/6}var ON,PN=P(()=>{"use strict";V2();H2();o(m3,"CardinalClosed");m3.prototype={areaStart:Qo,areaEnd:Qo,lineStart:o(function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 1:{this._context.moveTo(this._x3,this._y3),this._context.closePath();break}case 2:{this._context.lineTo(this._x3,this._y3),this._context.closePath();break}case 3:{this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5);break}}},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:i1(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};ON=o((function t(e){function r(i){return new m3(i,e)}return o(r,"cardinal"),r.tension=function(i){return t(+i)},r}),"custom")(0)});function g3(t,e){this._context=t,this._k=(1-e)/6}var BN,FN=P(()=>{"use strict";H2();o(g3,"CardinalOpen");g3.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:i1(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};BN=o((function t(e){function r(i){return new g3(i,e)}return o(r,"cardinal"),r.tension=function(i){return t(+i)},r}),"custom")(0)});function Y2(t,e,r){var i=t._x1,n=t._y1,a=t._x2,s=t._y2;if(t._l01_a>Aa){var l=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,u=3*t._l01_a*(t._l01_a+t._l12_a);i=(i*l-t._x0*t._l12_2a+t._x2*t._l01_2a)/u,n=(n*l-t._y0*t._l12_2a+t._y2*t._l01_2a)/u}if(t._l23_a>Aa){var h=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,f=3*t._l23_a*(t._l23_a+t._l12_a);a=(a*h+t._x1*t._l23_2a-e*t._l12_2a)/f,s=(s*h+t._y1*t._l23_2a-r*t._l12_2a)/f}t._context.bezierCurveTo(i,n,a,s,t._x2,t._y2)}function $te(t,e){this._context=t,this._alpha=e}var j2,y3=P(()=>{"use strict";o3();H2();o(Y2,"point");o($te,"CatmullRom");$te.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,i=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+i*i,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3;default:Y2(this,t,e);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};j2=o((function t(e){function r(i){return e?new $te(i,e):new p3(i,0)}return o(r,"catmullRom"),r.alpha=function(i){return t(+i)},r}),"custom")(.5)});function zte(t,e){this._context=t,this._alpha=e}var $N,Gte=P(()=>{"use strict";PN();V2();y3();o(zte,"CatmullRomClosed");zte.prototype={areaStart:Qo,areaEnd:Qo,lineStart:o(function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 1:{this._context.moveTo(this._x3,this._y3),this._context.closePath();break}case 2:{this._context.lineTo(this._x3,this._y3),this._context.closePath();break}case 3:{this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5);break}}},"lineEnd"),point:o(function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,i=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+i*i,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:Y2(this,t,e);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};$N=o((function t(e){function r(i){return e?new zte(i,e):new m3(i,0)}return o(r,"catmullRom"),r.alpha=function(i){return t(+i)},r}),"custom")(.5)});function Vte(t,e){this._context=t,this._alpha=e}var zN,qte=P(()=>{"use strict";FN();y3();o(Vte,"CatmullRomOpen");Vte.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,i=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+i*i,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Y2(this,t,e);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};zN=o((function t(e){function r(i){return e?new Vte(i,e):new g3(i,0)}return o(r,"catmullRom"),r.alpha=function(i){return t(+i)},r}),"custom")(.5)});function Wte(t){this._context=t}function v3(t){return new Wte(t)}var Ute=P(()=>{"use strict";V2();o(Wte,"LinearClosed");Wte.prototype={areaStart:Qo,areaEnd:Qo,lineStart:o(function(){this._point=0},"lineStart"),lineEnd:o(function(){this._point&&this._context.closePath()},"lineEnd"),point:o(function(t,e){t=+t,e=+e,this._point?this._context.lineTo(t,e):(this._point=1,this._context.moveTo(t,e))},"point")};o(v3,"default")});function Hte(t){return t<0?-1:1}function Yte(t,e,r){var i=t._x1-t._x0,n=e-t._x1,a=(t._y1-t._y0)/(i||n<0&&-0),s=(r-t._y1)/(n||i<0&&-0),l=(a*n+s*i)/(i+n);return(Hte(a)+Hte(s))*Math.min(Math.abs(a),Math.abs(s),.5*Math.abs(l))||0}function jte(t,e){var r=t._x1-t._x0;return r?(3*(t._y1-t._y0)/r-e)/2:e}function GN(t,e,r){var i=t._x0,n=t._y0,a=t._x1,s=t._y1,l=(a-i)/3;t._context.bezierCurveTo(i+l,n+l*e,a-l,s-l*r,a,s)}function x3(t){this._context=t}function Xte(t){this._context=new Kte(t)}function Kte(t){this._context=t}function X2(t){return new x3(t)}function K2(t){return new Xte(t)}var Qte=P(()=>{"use strict";o(Hte,"sign");o(Yte,"slope3");o(jte,"slope2");o(GN,"point");o(x3,"MonotoneX");x3.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:GN(this,this._t0,jte(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){var r=NaN;if(t=+t,e=+e,!(t===this._x1&&e===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,GN(this,jte(this,r=Yte(this,t,e)),r);break;default:GN(this,this._t0,r=Yte(this,t,e));break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e,this._t0=r}},"point")};o(Xte,"MonotoneY");(Xte.prototype=Object.create(x3.prototype)).point=function(t,e){x3.prototype.point.call(this,e,t)};o(Kte,"ReflectContext");Kte.prototype={moveTo:o(function(t,e){this._context.moveTo(e,t)},"moveTo"),closePath:o(function(){this._context.closePath()},"closePath"),lineTo:o(function(t,e){this._context.lineTo(e,t)},"lineTo"),bezierCurveTo:o(function(t,e,r,i,n,a){this._context.bezierCurveTo(e,t,i,r,a,n)},"bezierCurveTo")};o(X2,"monotoneX");o(K2,"monotoneY")});function Jte(t){this._context=t}function Zte(t){var e,r=t.length-1,i,n=new Array(r),a=new Array(r),s=new Array(r);for(n[0]=0,a[0]=2,s[0]=t[0]+2*t[1],e=1;e=0;--e)n[e]=(s[e]-n[e+1])/a[e];for(a[r-1]=(t[r]+n[r-1])/2,e=0;e{"use strict";o(Jte,"Natural");Jte.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x=[],this._y=[]},"lineStart"),lineEnd:o(function(){var t=this._x,e=this._y,r=t.length;if(r)if(this._line?this._context.lineTo(t[0],e[0]):this._context.moveTo(t[0],e[0]),r===2)this._context.lineTo(t[1],e[1]);else for(var i=Zte(t),n=Zte(e),a=0,s=1;s{"use strict";o(b3,"Step");b3.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x=this._y=NaN,this._point=0},"lineStart"),lineEnd:o(function(){0=0&&(this._t=1-this._t,this._line=1-this._line)},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var r=this._x*(1-this._t)+t*this._t;this._context.lineTo(r,this._y),this._context.lineTo(r,e)}break}}this._x=t,this._y=e},"point")};o(a1,"default");o(Q2,"stepBefore");o(Z2,"stepAfter")});var rre=P(()=>{"use strict";Cte();_te();Rte();Mte();Pte();W2();Nte();Fte();PN();FN();H2();Gte();qte();y3();Ute();RN();Qte();ere();tre()});var ire=P(()=>{"use strict"});var nre=P(()=>{"use strict"});function Qf(t,e,r){this.k=t,this.x=e,this.y=r}function qN(t){for(;!t.__zoom;)if(!(t=t.parentNode))return VN;return t.__zoom}var VN,WN=P(()=>{"use strict";o(Qf,"Transform");Qf.prototype={constructor:Qf,scale:o(function(t){return t===1?this:new Qf(this.k*t,this.x,this.y)},"scale"),translate:o(function(t,e){return t===0&e===0?this:new Qf(this.k,this.x+this.k*t,this.y+this.k*e)},"translate"),apply:o(function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},"apply"),applyX:o(function(t){return t*this.k+this.x},"applyX"),applyY:o(function(t){return t*this.k+this.y},"applyY"),invert:o(function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},"invert"),invertX:o(function(t){return(t-this.x)/this.k},"invertX"),invertY:o(function(t){return(t-this.y)/this.k},"invertY"),rescaleX:o(function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},"rescaleX"),rescaleY:o(function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},"rescaleY"),toString:o(function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"},"toString")};VN=new Qf(1,0,0);qN.prototype=Qf.prototype;o(qN,"transform")});var are=P(()=>{"use strict"});var sre=P(()=>{"use strict";Fw();ire();nre();WN();are()});var ore=P(()=>{"use strict";sre();WN()});var Pr=P(()=>{"use strict";zf();mQ();MJ();FJ();Vg();$J();zJ();NL();sZ();GJ();b9();VJ();WJ();B9();nee();_ee();Ug();E9();Dee();qJ();Lee();yte();bte();pc();rre();i3();wN();Nw();Fw();ore()});var lre=ar(_a=>{"use strict";Object.defineProperty(_a,"__esModule",{value:!0});_a.BLANK_URL=_a.relativeFirstCharacters=_a.whitespaceEscapeCharsRegex=_a.urlSchemeRegex=_a.ctrlCharactersRegex=_a.htmlCtrlEntityRegex=_a.htmlEntitiesRegex=_a.invalidProtocolRegex=void 0;_a.invalidProtocolRegex=/^([^\w]*)(javascript|data|vbscript)/im;_a.htmlEntitiesRegex=/&#(\w+)(^\w|;)?/g;_a.htmlCtrlEntityRegex=/&(newline|tab);/gi;_a.ctrlCharactersRegex=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim;_a.urlSchemeRegex=/^.+(:|:)/gim;_a.whitespaceEscapeCharsRegex=/(\\|%5[cC])((%(6[eE]|72|74))|[nrt])/g;_a.relativeFirstCharacters=[".","/"];_a.BLANK_URL="about:blank"});var s1=ar(T3=>{"use strict";Object.defineProperty(T3,"__esModule",{value:!0});T3.sanitizeUrl=void 0;var us=lre();function nOe(t){return us.relativeFirstCharacters.indexOf(t[0])>-1}o(nOe,"isRelativeUrlWithoutProtocol");function aOe(t){var e=t.replace(us.ctrlCharactersRegex,"");return e.replace(us.htmlEntitiesRegex,function(r,i){return String.fromCharCode(i)})}o(aOe,"decodeHtmlCharacters");function sOe(t){return URL.canParse(t)}o(sOe,"isValidUrl");function cre(t){try{return decodeURIComponent(t)}catch{return t}}o(cre,"decodeURI");function oOe(t){if(!t)return us.BLANK_URL;var e,r=cre(t.trim());do r=aOe(r).replace(us.htmlCtrlEntityRegex,"").replace(us.ctrlCharactersRegex,"").replace(us.whitespaceEscapeCharsRegex,"").trim(),r=cre(r),e=r.match(us.ctrlCharactersRegex)||r.match(us.htmlEntitiesRegex)||r.match(us.htmlCtrlEntityRegex)||r.match(us.whitespaceEscapeCharsRegex);while(e&&e.length>0);var i=r;if(!i)return us.BLANK_URL;if(nOe(i))return i;var n=i.trimStart(),a=n.match(us.urlSchemeRegex);if(!a)return i;var s=a[0].toLowerCase().trim();if(us.invalidProtocolRegex.test(s))return us.BLANK_URL;var l=n.replace(/\\/g,"/");if(s==="mailto:"||s.includes("://"))return l;if(s==="http:"||s==="https:"){if(!sOe(l))return us.BLANK_URL;var u=new URL(l);return u.protocol=u.protocol.toLowerCase(),u.hostname=u.hostname.toLowerCase(),u.toString()}return l}o(oOe,"sanitizeUrl");T3.sanitizeUrl=oOe});var UN,g0,k3,ure,C3,w3,ja,J2,E3,y0=P(()=>{"use strict";UN=Wa(s1(),1);Pr();Vr();g0=o((t,e)=>{let r=t.append("rect");if(r.attr("x",e.x),r.attr("y",e.y),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("width",e.width),r.attr("height",e.height),e.name&&r.attr("name",e.name),e.rx&&r.attr("rx",e.rx),e.ry&&r.attr("ry",e.ry),e.attrs!==void 0)for(let i in e.attrs)r.attr(i,e.attrs[i]);return e.class&&r.attr("class",e.class),r},"drawRect"),k3=o((t,e)=>{let r={x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,stroke:e.stroke,class:"rect"};g0(t,r).lower()},"drawBackgroundRect"),ure=o((t,e)=>{let r=e.text.replace(Hp," "),i=t.append("text");i.attr("x",e.x),i.attr("y",e.y),i.attr("class","legend"),i.style("text-anchor",e.anchor),e.class&&i.attr("class",e.class);let n=i.append("tspan");return n.attr("x",e.x+e.textMargin*2),n.text(r),i},"drawText"),C3=o((t,e,r,i)=>{let n=t.append("image");n.attr("x",e),n.attr("y",r);let a=(0,UN.sanitizeUrl)(i);n.attr("xlink:href",a)},"drawImage"),w3=o((t,e,r,i)=>{let n=t.append("use");n.attr("x",e),n.attr("y",r);let a=(0,UN.sanitizeUrl)(i);n.attr("xlink:href",`#${a}`)},"drawEmbeddedImage"),ja=o(()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),"getNoteRect"),J2=o(()=>({x:0,y:0,width:100,height:100,"text-anchor":"start",style:"#666",textMargin:0,rx:0,ry:0,tspan:!0}),"getTextObj"),E3=o(()=>{let t=Ze(".mermaidTooltip");return t.empty()&&(t=Ze("body").append("div").attr("class","mermaidTooltip").style("opacity",0).style("position","absolute").style("text-align","center").style("max-width","200px").style("padding","2px").style("font-size","12px").style("background","#ffffde").style("border","1px solid #333").style("border-radius","2px").style("pointer-events","none").style("z-index","100")),t},"createTooltip")});var hre,HN,fre,lOe,cOe,uOe,hOe,fOe,dOe,pOe,mOe,gOe,yOe,vOe,Mh,Ec,dre=P(()=>{"use strict";Vr();y0();hre=Wa(s1(),1),HN=o(function(t,e){return g0(t,e)},"drawRect"),fre=o(function(t,e,r,i,n,a){let s=t.append("image");s.attr("width",e),s.attr("height",r),s.attr("x",i),s.attr("y",n);let l=a.startsWith("data:image/png;base64")?a:(0,hre.sanitizeUrl)(a);s.attr("xlink:href",l)},"drawImage"),lOe=o((t,e,r,i)=>{let n=t.append("g"),a=0;for(let s of e){let l=s.textColor?s.textColor:"#444444",u=s.lineColor?s.lineColor:"#444444",h=s.offsetX?parseInt(s.offsetX):0,f=s.offsetY?parseInt(s.offsetY):0,d="";if(a===0){let m=n.append("line");m.attr("x1",s.startPoint.x),m.attr("y1",s.startPoint.y),m.attr("x2",s.endPoint.x),m.attr("y2",s.endPoint.y),m.attr("stroke-width","1"),m.attr("stroke",u),m.style("fill","none"),s.type!=="rel_b"&&m.attr("marker-end","url("+d+"#"+i+"-arrowhead)"),(s.type==="birel"||s.type==="rel_b")&&m.attr("marker-start","url("+d+"#"+i+"-arrowend)"),a=-1}else{let m=n.append("path");m.attr("fill","none").attr("stroke-width","1").attr("stroke",u).attr("d","Mstartx,starty Qcontrolx,controly stopx,stopy ".replaceAll("startx",s.startPoint.x).replaceAll("starty",s.startPoint.y).replaceAll("controlx",s.startPoint.x+(s.endPoint.x-s.startPoint.x)/2-(s.endPoint.x-s.startPoint.x)/4).replaceAll("controly",s.startPoint.y+(s.endPoint.y-s.startPoint.y)/2).replaceAll("stopx",s.endPoint.x).replaceAll("stopy",s.endPoint.y)),s.type!=="rel_b"&&m.attr("marker-end","url("+d+"#"+i+"-arrowhead)"),(s.type==="birel"||s.type==="rel_b")&&m.attr("marker-start","url("+d+"#"+i+"-arrowend)")}let p=r.messageFont();Mh(r)(s.label.text,n,Math.min(s.startPoint.x,s.endPoint.x)+Math.abs(s.endPoint.x-s.startPoint.x)/2+h,Math.min(s.startPoint.y,s.endPoint.y)+Math.abs(s.endPoint.y-s.startPoint.y)/2+f,s.label.width,s.label.height,{fill:l},p),s.techn&&s.techn.text!==""&&(p=r.messageFont(),Mh(r)("["+s.techn.text+"]",n,Math.min(s.startPoint.x,s.endPoint.x)+Math.abs(s.endPoint.x-s.startPoint.x)/2+h,Math.min(s.startPoint.y,s.endPoint.y)+Math.abs(s.endPoint.y-s.startPoint.y)/2+r.messageFontSize+5+f,Math.max(s.label.width,s.techn.width),s.techn.height,{fill:l,"font-style":"italic"},p))}},"drawRels"),cOe=o(function(t,e,r){let i=t.append("g"),n=e.bgColor?e.bgColor:"none",a=e.borderColor?e.borderColor:"#444444",s=e.fontColor?e.fontColor:"black",l={"stroke-width":1,"stroke-dasharray":"7.0,7.0"};e.nodeType&&(l={"stroke-width":1});let u={x:e.x,y:e.y,fill:n,stroke:a,width:e.width,height:e.height,rx:2.5,ry:2.5,attrs:l};HN(i,u);let h=r.boundaryFont();h.fontWeight="bold",h.fontSize=h.fontSize+2,h.fontColor=s,Mh(r)(e.label.text,i,e.x,e.y+e.label.Y,e.width,e.height,{fill:"#444444"},h),e.type&&e.type.text!==""&&(h=r.boundaryFont(),h.fontColor=s,Mh(r)(e.type.text,i,e.x,e.y+e.type.Y,e.width,e.height,{fill:"#444444"},h)),e.descr&&e.descr.text!==""&&(h=r.boundaryFont(),h.fontSize=h.fontSize-2,h.fontColor=s,Mh(r)(e.descr.text,i,e.x,e.y+e.descr.Y,e.width,e.height,{fill:"#444444"},h))},"drawBoundary"),uOe=o(function(t,e,r){let i=e.bgColor?e.bgColor:r[e.typeC4Shape.text+"_bg_color"],n=e.borderColor?e.borderColor:r[e.typeC4Shape.text+"_border_color"],a=e.fontColor?e.fontColor:"#FFFFFF",s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";switch(e.typeC4Shape.text){case"person":s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";break;case"external_person":s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB6ElEQVR4Xu2YLY+EMBCG9+dWr0aj0Wg0Go1Go0+j8Xdv2uTCvv1gpt0ebHKPuhDaeW4605Z9mJvx4AdXUyTUdd08z+u6flmWZRnHsWkafk9DptAwDPu+f0eAYtu2PEaGWuj5fCIZrBAC2eLBAnRCsEkkxmeaJp7iDJ2QMDdHsLg8SxKFEJaAo8lAXnmuOFIhTMpxxKATebo4UiFknuNo4OniSIXQyRxEA3YsnjGCVEjVXD7yLUAqxBGUyPv/Y4W2beMgGuS7kVQIBycH0fD+oi5pezQETxdHKmQKGk1eQEYldK+jw5GxPfZ9z7Mk0Qnhf1W1m3w//EUn5BDmSZsbR44QQLBEqrBHqOrmSKaQAxdnLArCrxZcM7A7ZKs4ioRq8LFC+NpC3WCBJsvpVw5edm9iEXFuyNfxXAgSwfrFQ1c0iNda8AdejvUgnktOtJQQxmcfFzGglc5WVCj7oDgFqU18boeFSs52CUh8LE8BIVQDT1ABrB0HtgSEYlX5doJnCwv9TXocKCaKbnwhdDKPq4lf3SwU3HLq4V/+WYhHVMa/3b4IlfyikAduCkcBc7mQ3/z/Qq/cTuikhkzB12Ae/mcJC9U+Vo8Ej1gWAtgbeGgFsAMHr50BIWOLCbezvhpBFUdY6EJuJ/QDW0XoMX60zZ0AAAAASUVORK5CYII=";break}let l=t.append("g");l.attr("class","person-man");let u=ja();switch(e.typeC4Shape.text){case"person":case"external_person":case"system":case"external_system":case"container":case"external_container":case"component":case"external_component":u.x=e.x,u.y=e.y,u.fill=i,u.width=e.width,u.height=e.height,u.stroke=n,u.rx=2.5,u.ry=2.5,u.attrs={"stroke-width":.5},HN(l,u);break;case"system_db":case"external_system_db":case"container_db":case"external_container_db":case"component_db":case"external_component_db":l.append("path").attr("fill",i).attr("stroke-width","0.5").attr("stroke",n).attr("d","Mstartx,startyc0,-10 half,-10 half,-10c0,0 half,0 half,10l0,heightc0,10 -half,10 -half,10c0,0 -half,0 -half,-10l0,-height".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("half",e.width/2).replaceAll("height",e.height)),l.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",n).attr("d","Mstartx,startyc0,10 half,10 half,10c0,0 half,0 half,-10".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("half",e.width/2));break;case"system_queue":case"external_system_queue":case"container_queue":case"external_container_queue":case"component_queue":case"external_component_queue":l.append("path").attr("fill",i).attr("stroke-width","0.5").attr("stroke",n).attr("d","Mstartx,startylwidth,0c5,0 5,half 5,halfc0,0 0,half -5,halfl-width,0c-5,0 -5,-half -5,-halfc0,0 0,-half 5,-half".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("width",e.width).replaceAll("half",e.height/2)),l.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",n).attr("d","Mstartx,startyc-5,0 -5,half -5,halfc0,half 5,half 5,half".replaceAll("startx",e.x+e.width).replaceAll("starty",e.y).replaceAll("half",e.height/2));break}let h=vOe(r,e.typeC4Shape.text);switch(l.append("text").attr("fill",a).attr("font-family",h.fontFamily).attr("font-size",h.fontSize-2).attr("font-style","italic").attr("lengthAdjust","spacing").attr("textLength",e.typeC4Shape.width).attr("x",e.x+e.width/2-e.typeC4Shape.width/2).attr("y",e.y+e.typeC4Shape.Y).text("<<"+e.typeC4Shape.text+">>"),e.typeC4Shape.text){case"person":case"external_person":fre(l,48,48,e.x+e.width/2-24,e.y+e.image.Y,s);break}let f=r[e.typeC4Shape.text+"Font"]();return f.fontWeight="bold",f.fontSize=f.fontSize+2,f.fontColor=a,Mh(r)(e.label.text,l,e.x,e.y+e.label.Y,e.width,e.height,{fill:a},f),f=r[e.typeC4Shape.text+"Font"](),f.fontColor=a,e.techn&&e.techn?.text!==""?Mh(r)(e.techn.text,l,e.x,e.y+e.techn.Y,e.width,e.height,{fill:a,"font-style":"italic"},f):e.type&&e.type.text!==""&&Mh(r)(e.type.text,l,e.x,e.y+e.type.Y,e.width,e.height,{fill:a,"font-style":"italic"},f),e.descr&&e.descr.text!==""&&(f=r.personFont(),f.fontColor=a,Mh(r)(e.descr.text,l,e.x,e.y+e.descr.Y,e.width,e.height,{fill:a},f)),e.height},"drawC4Shape"),hOe=o(function(t,e){t.append("defs").append("symbol").attr("id",e+"-database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},"insertDatabaseIcon"),fOe=o(function(t,e){t.append("defs").append("symbol").attr("id",e+"-computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},"insertComputerIcon"),dOe=o(function(t,e){t.append("defs").append("symbol").attr("id",e+"-clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")},"insertClockIcon"),pOe=o(function(t,e){t.append("defs").append("marker").attr("id",e+"-arrowhead").attr("refX",9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z")},"insertArrowHead"),mOe=o(function(t,e){t.append("defs").append("marker").attr("id",e+"-arrowend").attr("refX",1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 10 0 L 0 5 L 10 10 z")},"insertArrowEnd"),gOe=o(function(t,e){t.append("defs").append("marker").attr("id",e+"-filled-head").attr("refX",18).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"insertArrowFilledHead"),yOe=o(function(t,e){let i=t.append("defs").append("marker").attr("id",e+"-crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",16).attr("refY",4);i.append("path").attr("fill","black").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 9,2 V 6 L16,4 Z"),i.append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 0,1 L 6,7 M 6,1 L 0,7")},"insertArrowCrossHead"),vOe=o((t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),"getC4ShapeFont"),Mh=(function(){function t(n,a,s,l,u,h,f){let d=a.append("text").attr("x",s+u/2).attr("y",l+h/2+5).style("text-anchor","middle").text(n);i(d,f)}o(t,"byText");function e(n,a,s,l,u,h,f,d){let{fontSize:p,fontFamily:m,fontWeight:g}=d,y=n.split(lt.lineBreakRegex);for(let v=0;v{"use strict";xOe=typeof global=="object"&&global&&global.Object===Object&&global,A3=xOe});var bOe,TOe,In,Al=P(()=>{"use strict";YN();bOe=typeof self=="object"&&self&&self.Object===Object&&self,TOe=A3||bOe||Function("return this")(),In=TOe});var kOe,Da,v0=P(()=>{"use strict";Al();kOe=In.Symbol,Da=kOe});function EOe(t){var e=COe.call(t,eb),r=t[eb];try{t[eb]=void 0;var i=!0}catch{}var n=wOe.call(t);return i&&(e?t[eb]=r:delete t[eb]),n}var pre,COe,wOe,eb,mre,gre=P(()=>{"use strict";v0();pre=Object.prototype,COe=pre.hasOwnProperty,wOe=pre.toString,eb=Da?Da.toStringTag:void 0;o(EOe,"getRawTag");mre=EOe});function _Oe(t){return AOe.call(t)}var SOe,AOe,yre,vre=P(()=>{"use strict";SOe=Object.prototype,AOe=SOe.toString;o(_Oe,"objectToString");yre=_Oe});function ROe(t){return t==null?t===void 0?LOe:DOe:xre&&xre in Object(t)?mre(t):yre(t)}var DOe,LOe,xre,Xa,Oh=P(()=>{"use strict";v0();gre();vre();DOe="[object Null]",LOe="[object Undefined]",xre=Da?Da.toStringTag:void 0;o(ROe,"baseGetTag");Xa=ROe});function NOe(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}var Gi,Zo=P(()=>{"use strict";o(NOe,"isObject");Gi=NOe});function BOe(t){if(!Gi(t))return!1;var e=Xa(t);return e==MOe||e==OOe||e==IOe||e==POe}var IOe,MOe,OOe,POe,Qn,tb=P(()=>{"use strict";Oh();Zo();IOe="[object AsyncFunction]",MOe="[object Function]",OOe="[object GeneratorFunction]",POe="[object Proxy]";o(BOe,"isFunction");Qn=BOe});var FOe,_3,bre=P(()=>{"use strict";Al();FOe=In["__core-js_shared__"],_3=FOe});function $Oe(t){return!!Tre&&Tre in t}var Tre,kre,Cre=P(()=>{"use strict";bre();Tre=(function(){var t=/[^.]+$/.exec(_3&&_3.keys&&_3.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""})();o($Oe,"isMasked");kre=$Oe});function VOe(t){if(t!=null){try{return GOe.call(t)}catch{}try{return t+""}catch{}}return""}var zOe,GOe,Ph,jN=P(()=>{"use strict";zOe=Function.prototype,GOe=zOe.toString;o(VOe,"toSource");Ph=VOe});function KOe(t){if(!Gi(t)||kre(t))return!1;var e=Qn(t)?XOe:WOe;return e.test(Ph(t))}var qOe,WOe,UOe,HOe,YOe,jOe,XOe,wre,Ere=P(()=>{"use strict";tb();Cre();Zo();jN();qOe=/[\\^$.*+?()[\]{}|]/g,WOe=/^\[object .+?Constructor\]$/,UOe=Function.prototype,HOe=Object.prototype,YOe=UOe.toString,jOe=HOe.hasOwnProperty,XOe=RegExp("^"+YOe.call(jOe).replace(qOe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");o(KOe,"baseIsNative");wre=KOe});function QOe(t,e){return t?.[e]}var Sre,Are=P(()=>{"use strict";o(QOe,"getValue");Sre=QOe});function ZOe(t,e){var r=Sre(t,e);return wre(r)?r:void 0}var mo,Zf=P(()=>{"use strict";Ere();Are();o(ZOe,"getNative");mo=ZOe});var JOe,Bh,rb=P(()=>{"use strict";Zf();JOe=mo(Object,"create"),Bh=JOe});function ePe(){this.__data__=Bh?Bh(null):{},this.size=0}var _re,Dre=P(()=>{"use strict";rb();o(ePe,"hashClear");_re=ePe});function tPe(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}var Lre,Rre=P(()=>{"use strict";o(tPe,"hashDelete");Lre=tPe});function aPe(t){var e=this.__data__;if(Bh){var r=e[t];return r===rPe?void 0:r}return nPe.call(e,t)?e[t]:void 0}var rPe,iPe,nPe,Nre,Ire=P(()=>{"use strict";rb();rPe="__lodash_hash_undefined__",iPe=Object.prototype,nPe=iPe.hasOwnProperty;o(aPe,"hashGet");Nre=aPe});function lPe(t){var e=this.__data__;return Bh?e[t]!==void 0:oPe.call(e,t)}var sPe,oPe,Mre,Ore=P(()=>{"use strict";rb();sPe=Object.prototype,oPe=sPe.hasOwnProperty;o(lPe,"hashHas");Mre=lPe});function uPe(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=Bh&&e===void 0?cPe:e,this}var cPe,Pre,Bre=P(()=>{"use strict";rb();cPe="__lodash_hash_undefined__";o(uPe,"hashSet");Pre=uPe});function o1(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{"use strict";Dre();Rre();Ire();Ore();Bre();o(o1,"Hash");o1.prototype.clear=_re;o1.prototype.delete=Lre;o1.prototype.get=Nre;o1.prototype.has=Mre;o1.prototype.set=Pre;XN=o1});function hPe(){this.__data__=[],this.size=0}var $re,zre=P(()=>{"use strict";o(hPe,"listCacheClear");$re=hPe});function fPe(t,e){return t===e||t!==t&&e!==e}var _l,x0=P(()=>{"use strict";o(fPe,"eq");_l=fPe});function dPe(t,e){for(var r=t.length;r--;)if(_l(t[r][0],e))return r;return-1}var Jf,ib=P(()=>{"use strict";x0();o(dPe,"assocIndexOf");Jf=dPe});function gPe(t){var e=this.__data__,r=Jf(e,t);if(r<0)return!1;var i=e.length-1;return r==i?e.pop():mPe.call(e,r,1),--this.size,!0}var pPe,mPe,Gre,Vre=P(()=>{"use strict";ib();pPe=Array.prototype,mPe=pPe.splice;o(gPe,"listCacheDelete");Gre=gPe});function yPe(t){var e=this.__data__,r=Jf(e,t);return r<0?void 0:e[r][1]}var qre,Wre=P(()=>{"use strict";ib();o(yPe,"listCacheGet");qre=yPe});function vPe(t){return Jf(this.__data__,t)>-1}var Ure,Hre=P(()=>{"use strict";ib();o(vPe,"listCacheHas");Ure=vPe});function xPe(t,e){var r=this.__data__,i=Jf(r,t);return i<0?(++this.size,r.push([t,e])):r[i][1]=e,this}var Yre,jre=P(()=>{"use strict";ib();o(xPe,"listCacheSet");Yre=xPe});function l1(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{"use strict";zre();Vre();Wre();Hre();jre();o(l1,"ListCache");l1.prototype.clear=$re;l1.prototype.delete=Gre;l1.prototype.get=qre;l1.prototype.has=Ure;l1.prototype.set=Yre;ed=l1});var bPe,td,D3=P(()=>{"use strict";Zf();Al();bPe=mo(In,"Map"),td=bPe});function TPe(){this.size=0,this.__data__={hash:new XN,map:new(td||ed),string:new XN}}var Xre,Kre=P(()=>{"use strict";Fre();nb();D3();o(TPe,"mapCacheClear");Xre=TPe});function kPe(t){var e=typeof t;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?t!=="__proto__":t===null}var Qre,Zre=P(()=>{"use strict";o(kPe,"isKeyable");Qre=kPe});function CPe(t,e){var r=t.__data__;return Qre(e)?r[typeof e=="string"?"string":"hash"]:r.map}var rd,ab=P(()=>{"use strict";Zre();o(CPe,"getMapData");rd=CPe});function wPe(t){var e=rd(this,t).delete(t);return this.size-=e?1:0,e}var Jre,eie=P(()=>{"use strict";ab();o(wPe,"mapCacheDelete");Jre=wPe});function EPe(t){return rd(this,t).get(t)}var tie,rie=P(()=>{"use strict";ab();o(EPe,"mapCacheGet");tie=EPe});function SPe(t){return rd(this,t).has(t)}var iie,nie=P(()=>{"use strict";ab();o(SPe,"mapCacheHas");iie=SPe});function APe(t,e){var r=rd(this,t),i=r.size;return r.set(t,e),this.size+=r.size==i?0:1,this}var aie,sie=P(()=>{"use strict";ab();o(APe,"mapCacheSet");aie=APe});function c1(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{"use strict";Kre();eie();rie();nie();sie();o(c1,"MapCache");c1.prototype.clear=Xre;c1.prototype.delete=Jre;c1.prototype.get=tie;c1.prototype.has=iie;c1.prototype.set=aie;b0=c1});function KN(t,e){if(typeof t!="function"||e!=null&&typeof e!="function")throw new TypeError(_Pe);var r=o(function(){var i=arguments,n=e?e.apply(this,i):i[0],a=r.cache;if(a.has(n))return a.get(n);var s=t.apply(this,i);return r.cache=a.set(n,s)||a,s},"memoized");return r.cache=new(KN.Cache||b0),r}var _Pe,u1,QN=P(()=>{"use strict";L3();_Pe="Expected a function";o(KN,"memoize");KN.Cache=b0;u1=KN});function DPe(){this.__data__=new ed,this.size=0}var oie,lie=P(()=>{"use strict";nb();o(DPe,"stackClear");oie=DPe});function LPe(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r}var cie,uie=P(()=>{"use strict";o(LPe,"stackDelete");cie=LPe});function RPe(t){return this.__data__.get(t)}var hie,fie=P(()=>{"use strict";o(RPe,"stackGet");hie=RPe});function NPe(t){return this.__data__.has(t)}var die,pie=P(()=>{"use strict";o(NPe,"stackHas");die=NPe});function MPe(t,e){var r=this.__data__;if(r instanceof ed){var i=r.__data__;if(!td||i.length{"use strict";nb();D3();L3();IPe=200;o(MPe,"stackSet");mie=MPe});function h1(t){var e=this.__data__=new ed(t);this.size=e.size}var vu,sb=P(()=>{"use strict";nb();lie();uie();fie();pie();gie();o(h1,"Stack");h1.prototype.clear=oie;h1.prototype.delete=cie;h1.prototype.get=hie;h1.prototype.has=die;h1.prototype.set=mie;vu=h1});var OPe,f1,ZN=P(()=>{"use strict";Zf();OPe=(function(){try{var t=mo(Object,"defineProperty");return t({},"",{}),t}catch{}})(),f1=OPe});function PPe(t,e,r){e=="__proto__"&&f1?f1(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}var xu,d1=P(()=>{"use strict";ZN();o(PPe,"baseAssignValue");xu=PPe});function BPe(t,e,r){(r!==void 0&&!_l(t[e],r)||r===void 0&&!(e in t))&&xu(t,e,r)}var ob,JN=P(()=>{"use strict";d1();x0();o(BPe,"assignMergeValue");ob=BPe});function FPe(t){return function(e,r,i){for(var n=-1,a=Object(e),s=i(e),l=s.length;l--;){var u=s[t?l:++n];if(r(a[u],u,a)===!1)break}return e}}var yie,vie=P(()=>{"use strict";o(FPe,"createBaseFor");yie=FPe});var $Pe,p1,R3=P(()=>{"use strict";vie();$Pe=yie(),p1=$Pe});function GPe(t,e){if(e)return t.slice();var r=t.length,i=Tie?Tie(r):new t.constructor(r);return t.copy(i),i}var kie,xie,zPe,bie,Tie,N3,eI=P(()=>{"use strict";Al();kie=typeof exports=="object"&&exports&&!exports.nodeType&&exports,xie=kie&&typeof module=="object"&&module&&!module.nodeType&&module,zPe=xie&&xie.exports===kie,bie=zPe?In.Buffer:void 0,Tie=bie?bie.allocUnsafe:void 0;o(GPe,"cloneBuffer");N3=GPe});var VPe,m1,tI=P(()=>{"use strict";Al();VPe=In.Uint8Array,m1=VPe});function qPe(t){var e=new t.constructor(t.byteLength);return new m1(e).set(new m1(t)),e}var g1,I3=P(()=>{"use strict";tI();o(qPe,"cloneArrayBuffer");g1=qPe});function WPe(t,e){var r=e?g1(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}var M3,rI=P(()=>{"use strict";I3();o(WPe,"cloneTypedArray");M3=WPe});function UPe(t,e){var r=-1,i=t.length;for(e||(e=Array(i));++r{"use strict";o(UPe,"copyArray");O3=UPe});var Cie,HPe,wie,Eie=P(()=>{"use strict";Zo();Cie=Object.create,HPe=(function(){function t(){}return o(t,"object"),function(e){if(!Gi(e))return{};if(Cie)return Cie(e);t.prototype=e;var r=new t;return t.prototype=void 0,r}})(),wie=HPe});function YPe(t,e){return function(r){return t(e(r))}}var P3,nI=P(()=>{"use strict";o(YPe,"overArg");P3=YPe});var jPe,y1,B3=P(()=>{"use strict";nI();jPe=P3(Object.getPrototypeOf,Object),y1=jPe});function KPe(t){var e=t&&t.constructor,r=typeof e=="function"&&e.prototype||XPe;return t===r}var XPe,bu,v1=P(()=>{"use strict";XPe=Object.prototype;o(KPe,"isPrototype");bu=KPe});function QPe(t){return typeof t.constructor=="function"&&!bu(t)?wie(y1(t)):{}}var F3,aI=P(()=>{"use strict";Eie();B3();v1();o(QPe,"initCloneObject");F3=QPe});function ZPe(t){return t!=null&&typeof t=="object"}var En,Dl=P(()=>{"use strict";o(ZPe,"isObjectLike");En=ZPe});function eBe(t){return En(t)&&Xa(t)==JPe}var JPe,sI,Sie=P(()=>{"use strict";Oh();Dl();JPe="[object Arguments]";o(eBe,"baseIsArguments");sI=eBe});var Aie,tBe,rBe,iBe,Sc,x1=P(()=>{"use strict";Sie();Dl();Aie=Object.prototype,tBe=Aie.hasOwnProperty,rBe=Aie.propertyIsEnumerable,iBe=sI((function(){return arguments})())?sI:function(t){return En(t)&&tBe.call(t,"callee")&&!rBe.call(t,"callee")},Sc=iBe});var nBe,Gt,fn=P(()=>{"use strict";nBe=Array.isArray,Gt=nBe});function sBe(t){return typeof t=="number"&&t>-1&&t%1==0&&t<=aBe}var aBe,b1,$3=P(()=>{"use strict";aBe=9007199254740991;o(sBe,"isLength");b1=sBe});function oBe(t){return t!=null&&b1(t.length)&&!Qn(t)}var Mn,Ll=P(()=>{"use strict";tb();$3();o(oBe,"isArrayLike");Mn=oBe});function lBe(t){return En(t)&&Mn(t)}var T0,z3=P(()=>{"use strict";Ll();Dl();o(lBe,"isArrayLikeObject");T0=lBe});function cBe(){return!1}var _ie,Die=P(()=>{"use strict";o(cBe,"stubFalse");_ie=cBe});var Nie,Lie,uBe,Rie,hBe,fBe,Ac,T1=P(()=>{"use strict";Al();Die();Nie=typeof exports=="object"&&exports&&!exports.nodeType&&exports,Lie=Nie&&typeof module=="object"&&module&&!module.nodeType&&module,uBe=Lie&&Lie.exports===Nie,Rie=uBe?In.Buffer:void 0,hBe=Rie?Rie.isBuffer:void 0,fBe=hBe||_ie,Ac=fBe});function vBe(t){if(!En(t)||Xa(t)!=dBe)return!1;var e=y1(t);if(e===null)return!0;var r=gBe.call(e,"constructor")&&e.constructor;return typeof r=="function"&&r instanceof r&&Iie.call(r)==yBe}var dBe,pBe,mBe,Iie,gBe,yBe,Mie,Oie=P(()=>{"use strict";Oh();B3();Dl();dBe="[object Object]",pBe=Function.prototype,mBe=Object.prototype,Iie=pBe.toString,gBe=mBe.hasOwnProperty,yBe=Iie.call(Object);o(vBe,"isPlainObject");Mie=vBe});function qBe(t){return En(t)&&b1(t.length)&&!!ln[Xa(t)]}var xBe,bBe,TBe,kBe,CBe,wBe,EBe,SBe,ABe,_Be,DBe,LBe,RBe,NBe,IBe,MBe,OBe,PBe,BBe,FBe,$Be,zBe,GBe,VBe,ln,Pie,Bie=P(()=>{"use strict";Oh();$3();Dl();xBe="[object Arguments]",bBe="[object Array]",TBe="[object Boolean]",kBe="[object Date]",CBe="[object Error]",wBe="[object Function]",EBe="[object Map]",SBe="[object Number]",ABe="[object Object]",_Be="[object RegExp]",DBe="[object Set]",LBe="[object String]",RBe="[object WeakMap]",NBe="[object ArrayBuffer]",IBe="[object DataView]",MBe="[object Float32Array]",OBe="[object Float64Array]",PBe="[object Int8Array]",BBe="[object Int16Array]",FBe="[object Int32Array]",$Be="[object Uint8Array]",zBe="[object Uint8ClampedArray]",GBe="[object Uint16Array]",VBe="[object Uint32Array]",ln={};ln[MBe]=ln[OBe]=ln[PBe]=ln[BBe]=ln[FBe]=ln[$Be]=ln[zBe]=ln[GBe]=ln[VBe]=!0;ln[xBe]=ln[bBe]=ln[NBe]=ln[TBe]=ln[IBe]=ln[kBe]=ln[CBe]=ln[wBe]=ln[EBe]=ln[SBe]=ln[ABe]=ln[_Be]=ln[DBe]=ln[LBe]=ln[RBe]=!1;o(qBe,"baseIsTypedArray");Pie=qBe});function WBe(t){return function(e){return t(e)}}var Rl,k0=P(()=>{"use strict";o(WBe,"baseUnary");Rl=WBe});var Fie,lb,UBe,oI,HBe,Nl,cb=P(()=>{"use strict";YN();Fie=typeof exports=="object"&&exports&&!exports.nodeType&&exports,lb=Fie&&typeof module=="object"&&module&&!module.nodeType&&module,UBe=lb&&lb.exports===Fie,oI=UBe&&A3.process,HBe=(function(){try{var t=lb&&lb.require&&lb.require("util").types;return t||oI&&oI.binding&&oI.binding("util")}catch{}})(),Nl=HBe});var $ie,YBe,id,ub=P(()=>{"use strict";Bie();k0();cb();$ie=Nl&&Nl.isTypedArray,YBe=$ie?Rl($ie):Pie,id=YBe});function jBe(t,e){if(!(e==="constructor"&&typeof t[e]=="function")&&e!="__proto__")return t[e]}var hb,lI=P(()=>{"use strict";o(jBe,"safeGet");hb=jBe});function QBe(t,e,r){var i=t[e];(!(KBe.call(t,e)&&_l(i,r))||r===void 0&&!(e in t))&&xu(t,e,r)}var XBe,KBe,Tu,k1=P(()=>{"use strict";d1();x0();XBe=Object.prototype,KBe=XBe.hasOwnProperty;o(QBe,"assignValue");Tu=QBe});function ZBe(t,e,r,i){var n=!r;r||(r={});for(var a=-1,s=e.length;++a{"use strict";k1();d1();o(ZBe,"copyObject");Il=ZBe});function JBe(t,e){for(var r=-1,i=Array(t);++r{"use strict";o(JBe,"baseTimes");zie=JBe});function rFe(t,e){var r=typeof t;return e=e??eFe,!!e&&(r=="number"||r!="symbol"&&tFe.test(t))&&t>-1&&t%1==0&&t{"use strict";eFe=9007199254740991,tFe=/^(?:0|[1-9]\d*)$/;o(rFe,"isIndex");nd=rFe});function aFe(t,e){var r=Gt(t),i=!r&&Sc(t),n=!r&&!i&&Ac(t),a=!r&&!i&&!n&&id(t),s=r||i||n||a,l=s?zie(t.length,String):[],u=l.length;for(var h in t)(e||nFe.call(t,h))&&!(s&&(h=="length"||n&&(h=="offset"||h=="parent")||a&&(h=="buffer"||h=="byteLength"||h=="byteOffset")||nd(h,u)))&&l.push(h);return l}var iFe,nFe,G3,cI=P(()=>{"use strict";Gie();x1();fn();T1();fb();ub();iFe=Object.prototype,nFe=iFe.hasOwnProperty;o(aFe,"arrayLikeKeys");G3=aFe});function sFe(t){var e=[];if(t!=null)for(var r in Object(t))e.push(r);return e}var Vie,qie=P(()=>{"use strict";o(sFe,"nativeKeysIn");Vie=sFe});function cFe(t){if(!Gi(t))return Vie(t);var e=bu(t),r=[];for(var i in t)i=="constructor"&&(e||!lFe.call(t,i))||r.push(i);return r}var oFe,lFe,Wie,Uie=P(()=>{"use strict";Zo();v1();qie();oFe=Object.prototype,lFe=oFe.hasOwnProperty;o(cFe,"baseKeysIn");Wie=cFe});function uFe(t){return Mn(t)?G3(t,!0):Wie(t)}var go,ad=P(()=>{"use strict";cI();Uie();Ll();o(uFe,"keysIn");go=uFe});function hFe(t){return Il(t,go(t))}var Hie,Yie=P(()=>{"use strict";C0();ad();o(hFe,"toPlainObject");Hie=hFe});function fFe(t,e,r,i,n,a,s){var l=hb(t,r),u=hb(e,r),h=s.get(u);if(h){ob(t,r,h);return}var f=a?a(l,u,r+"",t,e,s):void 0,d=f===void 0;if(d){var p=Gt(u),m=!p&&Ac(u),g=!p&&!m&&id(u);f=u,p||m||g?Gt(l)?f=l:T0(l)?f=O3(l):m?(d=!1,f=N3(u,!0)):g?(d=!1,f=M3(u,!0)):f=[]:Mie(u)||Sc(u)?(f=l,Sc(l)?f=Hie(l):(!Gi(l)||Qn(l))&&(f=F3(u))):d=!1}d&&(s.set(u,f),n(f,u,i,a,s),s.delete(u)),ob(t,r,f)}var jie,Xie=P(()=>{"use strict";JN();eI();rI();iI();aI();x1();fn();z3();T1();tb();Zo();Oie();ub();lI();Yie();o(fFe,"baseMergeDeep");jie=fFe});function Kie(t,e,r,i,n){t!==e&&p1(e,function(a,s){if(n||(n=new vu),Gi(a))jie(t,e,s,r,Kie,i,n);else{var l=i?i(hb(t,s),a,s+"",t,e,n):void 0;l===void 0&&(l=a),ob(t,s,l)}},go)}var Qie,Zie=P(()=>{"use strict";sb();JN();R3();Xie();Zo();ad();lI();o(Kie,"baseMerge");Qie=Kie});function dFe(t){return t}var La,Fh=P(()=>{"use strict";o(dFe,"identity");La=dFe});function pFe(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}var Jie,ene=P(()=>{"use strict";o(pFe,"apply");Jie=pFe});function mFe(t,e,r){return e=tne(e===void 0?t.length-1:e,0),function(){for(var i=arguments,n=-1,a=tne(i.length-e,0),s=Array(a);++n{"use strict";ene();tne=Math.max;o(mFe,"overRest");V3=mFe});function gFe(t){return function(){return t}}var yo,hI=P(()=>{"use strict";o(gFe,"constant");yo=gFe});var yFe,rne,ine=P(()=>{"use strict";hI();ZN();Fh();yFe=f1?function(t,e){return f1(t,"toString",{configurable:!0,enumerable:!1,value:yo(e),writable:!0})}:La,rne=yFe});function TFe(t){var e=0,r=0;return function(){var i=bFe(),n=xFe-(i-r);if(r=i,n>0){if(++e>=vFe)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}var vFe,xFe,bFe,nne,ane=P(()=>{"use strict";vFe=800,xFe=16,bFe=Date.now;o(TFe,"shortOut");nne=TFe});var kFe,q3,fI=P(()=>{"use strict";ine();ane();kFe=nne(rne),q3=kFe});function CFe(t,e){return q3(V3(t,e,La),t+"")}var ku,C1=P(()=>{"use strict";Fh();uI();fI();o(CFe,"baseRest");ku=CFe});function wFe(t,e,r){if(!Gi(r))return!1;var i=typeof e;return(i=="number"?Mn(r)&&nd(e,r.length):i=="string"&&e in r)?_l(r[e],t):!1}var Jo,w0=P(()=>{"use strict";x0();Ll();fb();Zo();o(wFe,"isIterateeCall");Jo=wFe});function EFe(t){return ku(function(e,r){var i=-1,n=r.length,a=n>1?r[n-1]:void 0,s=n>2?r[2]:void 0;for(a=t.length>3&&typeof a=="function"?(n--,a):void 0,s&&Jo(r[0],r[1],s)&&(a=n<3?void 0:a,n=1),e=Object(e);++i{"use strict";C1();w0();o(EFe,"createAssigner");W3=EFe});var SFe,sd,pI=P(()=>{"use strict";Zie();dI();SFe=W3(function(t,e,r){Qie(t,e,r)}),sd=SFe});function yI(t,e){if(!t)return e;let r=`curve${t.charAt(0).toUpperCase()+t.slice(1)}`;return AFe[r]??e}function RFe(t,e){let r=t.trim();if(r)return e.securityLevel!=="loose"?(0,lne.sanitizeUrl)(r):r}function hne(t,e){return!t||!e?0:Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))}function IFe(t){let e,r=0;t.forEach(n=>{r+=hne(n,e),e=n});let i=r/2;return vI(t,i)}function MFe(t){return t.length===1?t[0]:IFe(t)}function PFe(t,e,r){let i=structuredClone(r);Q.info("our points",i),e!=="start_left"&&e!=="start_right"&&i.reverse();let n=25+t,a=vI(i,n),s=10+t*.5,l=Math.atan2(i[0].y-a.y,i[0].x-a.x),u={x:0,y:0};return e==="start_left"?(u.x=Math.sin(l+Math.PI)*s+(i[0].x+a.x)/2,u.y=-Math.cos(l+Math.PI)*s+(i[0].y+a.y)/2):e==="end_right"?(u.x=Math.sin(l-Math.PI)*s+(i[0].x+a.x)/2-5,u.y=-Math.cos(l-Math.PI)*s+(i[0].y+a.y)/2-5):e==="end_left"?(u.x=Math.sin(l)*s+(i[0].x+a.x)/2-5,u.y=-Math.cos(l)*s+(i[0].y+a.y)/2-5):(u.x=Math.sin(l)*s+(i[0].x+a.x)/2,u.y=-Math.cos(l)*s+(i[0].y+a.y)/2),u}function xI(t){let e="",r="";for(let i of t)i!==void 0&&(i.startsWith("color:")||i.startsWith("text-align:")?r=r+i+";":e=e+i+";");return{style:e,labelStyle:r}}function BFe(t){let e="",r="0123456789abcdef",i=r.length;for(let n=0;nMath.round(parseFloat(a)).toString());return n.includes(r.toString())||n.includes(i.toString())}var lne,gI,AFe,_Fe,DFe,cne,une,LFe,NFe,sne,vI,OFe,one,bI,TI,FFe,$Fe,kI,zFe,CI,mI,U3,GFe,VFe,$s,Kt,fne,zs,Cu,er=P(()=>{"use strict";lne=Wa(s1(),1);Pr();Vr();iD();bt();Kp();kg();QN();pI();ew();gI="\u200B",AFe={curveBasis:wc,curveBasisClosed:f3,curveBasisOpen:d3,curveBumpX:z2,curveBumpY:G2,curveBundle:MN,curveCardinalClosed:ON,curveCardinalOpen:BN,curveCardinal:U2,curveCatmullRomClosed:$N,curveCatmullRomOpen:zN,curveCatmullRom:j2,curveLinear:yu,curveLinearClosed:v3,curveMonotoneX:X2,curveMonotoneY:K2,curveNatural:n1,curveStep:a1,curveStepAfter:Z2,curveStepBefore:Q2},_Fe=/\s*(?:(\w+)(?=:):|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,DFe=o(function(t,e){let r=cne(t,/(?:init\b)|(?:initialize\b)/),i={};if(Array.isArray(r)){let s=r.map(l=>l.args);Eg(s),i=Yi(i,[...s])}else i=r.args;if(!i)return;let n=Ig(t,e),a="config";return i[a]!==void 0&&(n==="flowchart-v2"&&(n="flowchart"),i[n]=i[a],delete i[a]),i},"detectInit"),cne=o(function(t,e=null){try{let r=new RegExp(`[%]{2}(?![{]${_Fe.source})(?=[}][%]{2}).* +`,"ig");t=t.trim().replace(r,"").replace(/'/gm,'"'),Q.debug(`Detecting diagram directive${e!==null?" type:"+e:""} based on the text:${t}`);let i,n=[];for(;(i=Xp.exec(t))!==null;)if(i.index===Xp.lastIndex&&Xp.lastIndex++,i&&!e||e&&i[1]?.match(e)||e&&i[2]?.match(e)){let a=i[1]?i[1]:i[2],s=i[3]?i[3].trim():i[4]?JSON.parse(i[4].trim()):null;n.push({type:a,args:s})}return n.length===0?{type:t,args:null}:n.length===1?n[0]:n}catch(r){return Q.error(`ERROR: ${r.message} - Unable to parse directive type: '${e}' based on the text: '${t}'`),{type:void 0,args:null}}},"detectDirective"),une=o(function(t){return t.replace(Xp,"")},"removeDirectives"),LFe=o(function(t,e){for(let[r,i]of e.entries())if(i.match(t))return r;return-1},"isSubstringInArray");o(yI,"interpolateToCurve");o(RFe,"formatUrl");NFe=o((t,...e)=>{let r=t.split("."),i=r.length-1,n=r[i],a=window;for(let s=0;s{let r=Math.pow(10,e);return Math.round(t*r)/r},"roundNumber"),vI=o((t,e)=>{let r,i=e;for(let n of t){if(r){let a=hne(n,r);if(a===0)return r;if(a=1)return{x:n.x,y:n.y};if(s>0&&s<1)return{x:sne((1-s)*r.x+s*n.x,5),y:sne((1-s)*r.y+s*n.y,5)}}}r=n}throw new Error("Could not find a suitable point for the given distance")},"calculatePoint"),OFe=o((t,e,r)=>{Q.info(`our points ${JSON.stringify(e)}`),e[0]!==r&&(e=e.reverse());let n=vI(e,25),a=t?10:5,s=Math.atan2(e[0].y-n.y,e[0].x-n.x),l={x:0,y:0};return l.x=Math.sin(s)*a+(e[0].x+n.x)/2,l.y=-Math.cos(s)*a+(e[0].y+n.y)/2,l},"calcCardinalityPosition");o(PFe,"calcTerminalLabelPosition");o(xI,"getStylesFromArray");one=0,bI=o(()=>(one++,"id-"+Math.random().toString(36).substr(2,12)+"-"+one),"generateId");o(BFe,"makeRandomHex");TI=o(t=>BFe(t.length),"random"),FFe=o(function(){return{x:0,y:0,fill:void 0,anchor:"start",style:"#666",width:100,height:100,textMargin:0,rx:0,ry:0,valign:void 0,text:""}},"getTextObj"),$Fe=o(function(t,e){let r=e.text.replace(lt.lineBreakRegex," "),[,i]=$s(e.fontSize),n=t.append("text");n.attr("x",e.x),n.attr("y",e.y),n.style("text-anchor",e.anchor),n.style("font-family",e.fontFamily),n.style("font-size",i),n.style("font-weight",e.fontWeight),n.attr("fill",e.fill),e.class!==void 0&&n.attr("class",e.class);let a=n.append("tspan");return a.attr("x",e.x+e.textMargin*2),a.attr("fill",e.fill),a.text(r),n},"drawSimpleText"),kI=u1((t,e,r)=>{if(!t||(r=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",joinWith:"
"},r),lt.lineBreakRegex.test(t)))return t;let i=t.split(" ").filter(Boolean),n=[],a="";return i.forEach((s,l)=>{let u=Ra(`${s} `,r),h=Ra(a,r);if(u>e){let{hyphenatedStrings:p,remainingWord:m}=zFe(s,e,"-",r);n.push(a,...p),a=m}else h+u>=e?(n.push(a),a=s):a=[a,s].filter(Boolean).join(" ");l+1===i.length&&n.push(a)}),n.filter(s=>s!=="").join(r.joinWith)},(t,e,r)=>`${t}${e}${r.fontSize}${r.fontWeight}${r.fontFamily}${r.joinWith}`),zFe=u1((t,e,r="-",i)=>{i=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},i);let n=[...t],a=[],s="";return n.forEach((l,u)=>{let h=`${s}${l}`;if(Ra(h,i)>=e){let d=u+1,p=n.length===d,m=`${h}${r}`;a.push(p?h:m),s=""}else s=h}),{hyphenatedStrings:a,remainingWord:s}},(t,e,r="-",i)=>`${t}${e}${r}${i.fontSize}${i.fontWeight}${i.fontFamily}`);o(H3,"calculateTextHeight");o(Ra,"calculateTextWidth");CI=u1((t,e)=>{let{fontSize:r=12,fontFamily:i="Arial",fontWeight:n=400}=e;if(!t)return{width:0,height:0};let[,a]=$s(r),s=["sans-serif",i],l=t.split(lt.lineBreakRegex),u=[],h=Ze("body");if(!h.remove)return{width:0,height:0,lineHeight:0};let f=h.append("svg");for(let p of s){let m=0,g={width:0,height:0,lineHeight:0};for(let y of l){let v=FFe();v.text=y||gI;let x=$Fe(f,v).style("font-size",a).style("font-weight",n).style("font-family",p),b=(x._groups||x)[0][0].getBBox();if(b.width===0&&b.height===0)throw new Error("svg element not in render tree");g.width=Math.round(Math.max(g.width,b.width)),m=Math.round(b.height),g.height+=m,g.lineHeight=Math.round(Math.max(g.lineHeight,m))}u.push(g)}f.remove();let d=isNaN(u[1].height)||isNaN(u[1].width)||isNaN(u[1].lineHeight)||u[0].height>u[1].height&&u[0].width>u[1].width&&u[0].lineHeight>u[1].lineHeight?0:1;return u[d]},(t,e)=>`${t}${e.fontSize}${e.fontWeight}${e.fontFamily}`),mI=class{constructor(e=!1,r){this.count=0;this.count=r?r.length:0,this.next=e?()=>this.count++:()=>Date.now()}static{o(this,"InitIDGenerator")}},GFe=o(function(t){return U3=U3||document.createElement("div"),t=escape(t).replace(/%26/g,"&").replace(/%23/g,"#").replace(/%3B/g,";"),U3.innerHTML=t,unescape(U3.textContent)},"entityDecode");o(wI,"isDetailedError");VFe=o((t,e,r,i)=>{if(!i)return;let n=t.node()?.getBBox();n&&t.append("text").text(i).attr("text-anchor","middle").attr("x",n.x+n.width/2).attr("y",-r).attr("class",e)},"insertTitle"),$s=o(t=>{if(typeof t=="number")return[t,t+"px"];let e=parseInt(t??"",10);return Number.isNaN(e)?[void 0,void 0]:t===String(e)?[e,t+"px"]:[e,t]},"parseFontSize");o(fi,"cleanAndMerge");Kt={assignWithDepth:Yi,wrapLabel:kI,calculateTextHeight:H3,calculateTextWidth:Ra,calculateTextDimensions:CI,cleanAndMerge:fi,detectInit:DFe,detectDirective:cne,isSubstringInArray:LFe,interpolateToCurve:yI,calcLabelPosition:MFe,calcCardinalityPosition:OFe,calcTerminalLabelPosition:PFe,formatUrl:RFe,getStylesFromArray:xI,generateId:bI,random:TI,runFunc:NFe,entityDecode:GFe,insertTitle:VFe,isLabelCoordinateInPath:qFe,parseFontSize:$s,InitIDGenerator:mI},fne=o(function(t){let e=t;return e=e.replace(/style.*:\S*#.*;/g,function(r){return r.substring(0,r.length-1)}),e=e.replace(/classDef.*:\S*#.*;/g,function(r){return r.substring(0,r.length-1)}),e=e.replace(/#\w+;/g,function(r){let i=r.substring(1,r.length-1);return/^\+?\d+$/.test(i)?"\uFB02\xB0\xB0"+i+"\xB6\xDF":"\uFB02\xB0"+i+"\xB6\xDF"}),e},"encodeEntities"),zs=o(function(t){return t.replace(/fl°°/g,"&#").replace(/fl°/g,"&").replace(/¶ß/g,";")},"decodeEntities"),Cu=o((t,e,{counter:r=0,prefix:i,suffix:n},a)=>a||`${i?`${i}_`:""}${t}_${e}_${r}${n?`_${n}`:""}`,"getEdgeId");o(xi,"handleUndefinedAttr");o(qFe,"isLabelCoordinateInPath")});function _c(t,e,r,i,n){if(!e[t].width)if(r)e[t].text=kI(e[t].text,n,i),e[t].textLines=e[t].text.split(lt.lineBreakRegex).length,e[t].width=n,e[t].height=H3(e[t].text,i);else{let a=e[t].text.split(lt.lineBreakRegex);e[t].textLines=a.length;let s=0;e[t].height=0,e[t].width=0;for(let l of a)e[t].width=Math.max(Ra(l,i),e[t].width),s=H3(l,i),e[t].height=e[t].height+s}}function yne(t,e,r,i,n){let a=new K3(n);a.data.widthLimit=r.data.widthLimit/Math.min(EI,i.length);for(let[s,l]of i.entries()){let u=0;l.image={width:0,height:0,Y:0},l.sprite&&(l.image.width=48,l.image.height=48,l.image.Y=u,u=l.image.Y+l.image.height);let h=l.wrap&&tr.wrap,f=Y3(tr);if(f.fontSize=f.fontSize+2,f.fontWeight="bold",_c("label",l,h,f,a.data.widthLimit),l.label.Y=u+8,u=l.label.Y+l.label.height,l.type&&l.type.text!==""){l.type.text="["+l.type.text+"]";let g=Y3(tr);_c("type",l,h,g,a.data.widthLimit),l.type.Y=u+5,u=l.type.Y+l.type.height}if(l.descr&&l.descr.text!==""){let g=Y3(tr);g.fontSize=g.fontSize-2,_c("descr",l,h,g,a.data.widthLimit),l.descr.Y=u+20,u=l.descr.Y+l.descr.height}if(s==0||s%EI===0){let g=r.data.startx+tr.diagramMarginX,y=r.data.stopy+tr.diagramMarginY+u;a.setData(g,g,y,y)}else{let g=a.data.stopx!==a.data.startx?a.data.stopx+tr.diagramMarginX:a.data.startx,y=a.data.starty;a.setData(g,g,y,y)}a.name=l.alias;let d=n.db.getC4ShapeArray(l.alias),p=n.db.getC4ShapeKeys(l.alias);p.length>0&&gne(a,t,d,p),e=l.alias;let m=n.db.getBoundaries(e);m.length>0&&yne(t,e,a,m,n),l.alias!=="global"&&mne(t,l,a),r.data.stopy=Math.max(a.data.stopy+tr.c4ShapeMargin,r.data.stopy),r.data.stopx=Math.max(a.data.stopx+tr.c4ShapeMargin,r.data.stopx),j3=Math.max(j3,r.data.stopx),X3=Math.max(X3,r.data.stopy)}}var j3,X3,pne,EI,tr,K3,SI,db,Y3,WFe,mne,gne,vo,dne,UFe,HFe,YFe,AI,vne=P(()=>{"use strict";Pr();dre();bt();uL();Vr();bL();Ut();kg();er();Xi();j3=0,X3=0,pne=4,EI=2;Jx.yy=a2;tr={},K3=class{static{o(this,"Bounds")}constructor(e){this.name="",this.data={},this.data.startx=void 0,this.data.stopx=void 0,this.data.starty=void 0,this.data.stopy=void 0,this.data.widthLimit=void 0,this.nextData={},this.nextData.startx=void 0,this.nextData.stopx=void 0,this.nextData.starty=void 0,this.nextData.stopy=void 0,this.nextData.cnt=0,SI(e.db.getConfig())}setData(e,r,i,n){this.nextData.startx=this.data.startx=e,this.nextData.stopx=this.data.stopx=r,this.nextData.starty=this.data.starty=i,this.nextData.stopy=this.data.stopy=n}updateVal(e,r,i,n){e[r]===void 0?e[r]=i:e[r]=n(i,e[r])}insert(e){this.nextData.cnt=this.nextData.cnt+1;let r=this.nextData.startx===this.nextData.stopx?this.nextData.stopx+e.margin:this.nextData.stopx+e.margin*2,i=r+e.width,n=this.nextData.starty+e.margin*2,a=n+e.height;(r>=this.data.widthLimit||i>=this.data.widthLimit||this.nextData.cnt>pne)&&(r=this.nextData.startx+e.margin+tr.nextLinePaddingX,n=this.nextData.stopy+e.margin*2,this.nextData.stopx=i=r+e.width,this.nextData.starty=this.nextData.stopy,this.nextData.stopy=a=n+e.height,this.nextData.cnt=1),e.x=r,e.y=n,this.updateVal(this.data,"startx",r,Math.min),this.updateVal(this.data,"starty",n,Math.min),this.updateVal(this.data,"stopx",i,Math.max),this.updateVal(this.data,"stopy",a,Math.max),this.updateVal(this.nextData,"startx",r,Math.min),this.updateVal(this.nextData,"starty",n,Math.min),this.updateVal(this.nextData,"stopx",i,Math.max),this.updateVal(this.nextData,"stopy",a,Math.max)}init(e){this.name="",this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,widthLimit:void 0},this.nextData={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,cnt:0},SI(e.db.getConfig())}bumpLastMargin(e){this.data.stopx+=e,this.data.stopy+=e}},SI=o(function(t){Yi(tr,t),t.fontFamily&&(tr.personFontFamily=tr.systemFontFamily=tr.messageFontFamily=t.fontFamily),t.fontSize&&(tr.personFontSize=tr.systemFontSize=tr.messageFontSize=t.fontSize),t.fontWeight&&(tr.personFontWeight=tr.systemFontWeight=tr.messageFontWeight=t.fontWeight)},"setConf"),db=o((t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),"c4ShapeFont"),Y3=o(t=>({fontFamily:t.boundaryFontFamily,fontSize:t.boundaryFontSize,fontWeight:t.boundaryFontWeight}),"boundaryFont"),WFe=o(t=>({fontFamily:t.messageFontFamily,fontSize:t.messageFontSize,fontWeight:t.messageFontWeight}),"messageFont");o(_c,"calcC4ShapeTextWH");mne=o(function(t,e,r){e.x=r.data.startx,e.y=r.data.starty,e.width=r.data.stopx-r.data.startx,e.height=r.data.stopy-r.data.starty,e.label.y=tr.c4ShapeMargin-35;let i=e.wrap&&tr.wrap,n=Y3(tr);n.fontSize=n.fontSize+2,n.fontWeight="bold";let a=Ra(e.label.text,n);_c("label",e,i,n,a),Ec.drawBoundary(t,e,tr)},"drawBoundary"),gne=o(function(t,e,r,i){let n=0;for(let a of i){n=0;let s=r[a],l=db(tr,s.typeC4Shape.text);switch(l.fontSize=l.fontSize-2,s.typeC4Shape.width=Ra("\xAB"+s.typeC4Shape.text+"\xBB",l),s.typeC4Shape.height=l.fontSize+2,s.typeC4Shape.Y=tr.c4ShapePadding,n=s.typeC4Shape.Y+s.typeC4Shape.height-4,s.image={width:0,height:0,Y:0},s.typeC4Shape.text){case"person":case"external_person":s.image.width=48,s.image.height=48,s.image.Y=n,n=s.image.Y+s.image.height;break}s.sprite&&(s.image.width=48,s.image.height=48,s.image.Y=n,n=s.image.Y+s.image.height);let u=s.wrap&&tr.wrap,h=tr.width-tr.c4ShapePadding*2,f=db(tr,s.typeC4Shape.text);if(f.fontSize=f.fontSize+2,f.fontWeight="bold",_c("label",s,u,f,h),s.label.Y=n+8,n=s.label.Y+s.label.height,s.type&&s.type.text!==""){s.type.text="["+s.type.text+"]";let m=db(tr,s.typeC4Shape.text);_c("type",s,u,m,h),s.type.Y=n+5,n=s.type.Y+s.type.height}else if(s.techn&&s.techn.text!==""){s.techn.text="["+s.techn.text+"]";let m=db(tr,s.techn.text);_c("techn",s,u,m,h),s.techn.Y=n+5,n=s.techn.Y+s.techn.height}let d=n,p=s.label.width;if(s.descr&&s.descr.text!==""){let m=db(tr,s.typeC4Shape.text);_c("descr",s,u,m,h),s.descr.Y=n+20,n=s.descr.Y+s.descr.height,p=Math.max(s.label.width,s.descr.width),d=n-s.descr.textLines*5}p=p+tr.c4ShapePadding,s.width=Math.max(s.width||tr.width,p,tr.width),s.height=Math.max(s.height||tr.height,d,tr.height),s.margin=s.margin||tr.c4ShapeMargin,t.insert(s),Ec.drawC4Shape(e,s,tr)}t.bumpLastMargin(tr.c4ShapeMargin)},"drawC4ShapeArray"),vo=class{static{o(this,"Point")}constructor(e,r){this.x=e,this.y=r}},dne=o(function(t,e){let r=t.x,i=t.y,n=e.x,a=e.y,s=r+t.width/2,l=i+t.height/2,u=Math.abs(r-n),h=Math.abs(i-a),f=h/u,d=t.height/t.width,p=null;return i==a&&rn?p=new vo(r,l):r==n&&ia&&(p=new vo(s,i)),r>n&&i=f?p=new vo(r,l+f*t.width/2):p=new vo(s-u/h*t.height/2,i+t.height):r=f?p=new vo(r+t.width,l+f*t.width/2):p=new vo(s+u/h*t.height/2,i+t.height):ra?d>=f?p=new vo(r+t.width,l-f*t.width/2):p=new vo(s+t.height/2*u/h,i):r>n&&i>a&&(d>=f?p=new vo(r,l-t.width/2*f):p=new vo(s-t.height/2*u/h,i)),p},"getIntersectPoint"),UFe=o(function(t,e){let r={x:0,y:0};r.x=e.x+e.width/2,r.y=e.y+e.height/2;let i=dne(t,r);r.x=t.x+t.width/2,r.y=t.y+t.height/2;let n=dne(e,r);return{startPoint:i,endPoint:n}},"getIntersectPoints"),HFe=o(function(t,e,r,i,n){let a=0;for(let s of e){a=a+1;let l=s.wrap&&tr.wrap,u=WFe(tr);i.db.getC4Type()==="C4Dynamic"&&(s.label.text=a+": "+s.label.text);let f=Ra(s.label.text,u);_c("label",s,l,u,f),s.techn&&s.techn.text!==""&&(f=Ra(s.techn.text,u),_c("techn",s,l,u,f)),s.descr&&s.descr.text!==""&&(f=Ra(s.descr.text,u),_c("descr",s,l,u,f));let d=r(s.from),p=r(s.to),m=UFe(d,p);s.startPoint=m.startPoint,s.endPoint=m.endPoint}Ec.drawRels(t,e,tr,n)},"drawRels");o(yne,"drawInsideBoundary");YFe=o(function(t,e,r,i){tr=ge().c4;let n=ge().securityLevel,a;n==="sandbox"&&(a=Ze("#i"+e));let s=n==="sandbox"?Ze(a.nodes()[0].contentDocument.body):Ze("body"),l=i.db;i.db.setWrap(tr.wrap),pne=l.getC4ShapeInRow(),EI=l.getC4BoundaryInRow(),Q.debug(`C:${JSON.stringify(tr,null,2)}`);let u=n==="sandbox"?s.select(`[id="${e}"]`):Ze(`[id="${e}"]`);Ec.insertComputerIcon(u,e),Ec.insertDatabaseIcon(u,e),Ec.insertClockIcon(u,e);let h=new K3(i);h.setData(tr.diagramMarginX,tr.diagramMarginX,tr.diagramMarginY,tr.diagramMarginY),h.data.widthLimit=screen.availWidth,j3=tr.diagramMarginX,X3=tr.diagramMarginY;let f=i.db.getTitle(),d=i.db.getBoundaries("");yne(u,"",h,d,i),Ec.insertArrowHead(u,e),Ec.insertArrowEnd(u,e),Ec.insertArrowCrossHead(u,e),Ec.insertArrowFilledHead(u,e),HFe(u,i.db.getRels(),i.db.getC4Shape,i,e),h.data.stopx=j3,h.data.stopy=X3;let p=h.data,g=p.stopy-p.starty+2*tr.diagramMarginY,v=p.stopx-p.startx+2*tr.diagramMarginX;f&&u.append("text").text(f).attr("x",(p.stopx-p.startx)/2-4*tr.diagramMarginX).attr("y",p.starty+tr.diagramMarginY),Hr(u,g,v,tr.useMaxWidth);let x=f?60:0;u.attr("viewBox",p.startx-tr.diagramMarginX+" -"+(tr.diagramMarginY+x)+" "+v+" "+(g+x)),Q.debug("models:",p)},"draw"),AI={drawPersonOrSystemArray:gne,drawBoundary:mne,setConf:SI,draw:YFe}});var jFe,xne,bne=P(()=>{"use strict";jFe=o(t=>`.person { + stroke: ${t.personBorder}; + fill: ${t.personBkg}; + } +`,"getStyles"),xne=jFe});var Tne={};ur(Tne,{diagram:()=>XFe});var XFe,kne=P(()=>{"use strict";uL();bL();vne();bne();XFe={parser:YK,db:a2,renderer:AI,styles:xne,init:o(({c4:t,wrap:e})=>{AI.setConf(t),a2.setWrap(e)},"init")}});function $ne(t){return typeof t>"u"||t===null}function JFe(t){return typeof t=="object"&&t!==null}function e$e(t){return Array.isArray(t)?t:$ne(t)?[]:[t]}function t$e(t,e){var r,i,n,a;if(e)for(a=Object.keys(e),r=0,i=a.length;rl&&(a=" ... ",e=i-l+a.length),r-i>l&&(s=" ...",r=i+l-s.length),{str:a+t.slice(e,r).replace(/\t/g,"\u2192")+s,pos:i-e+a.length}}function DI(t,e){return ha.repeat(" ",e-t.length)+t}function u$e(t,e){if(e=Object.create(e||null),!t.buffer)return null;e.maxLength||(e.maxLength=79),typeof e.indent!="number"&&(e.indent=1),typeof e.linesBefore!="number"&&(e.linesBefore=3),typeof e.linesAfter!="number"&&(e.linesAfter=2);for(var r=/\r?\n|\r|\0/g,i=[0],n=[],a,s=-1;a=r.exec(t.buffer);)n.push(a.index),i.push(a.index+a[0].length),t.position<=a.index&&s<0&&(s=i.length-2);s<0&&(s=i.length-1);var l="",u,h,f=Math.min(t.line+e.linesAfter,n.length).toString().length,d=e.maxLength-(e.indent+f+3);for(u=1;u<=e.linesBefore&&!(s-u<0);u++)h=_I(t.buffer,i[s-u],n[s-u],t.position-(i[s]-i[s-u]),d),l=ha.repeat(" ",e.indent)+DI((t.line-u+1).toString(),f)+" | "+h.str+` +`+l;for(h=_I(t.buffer,i[s],n[s],t.position,d),l+=ha.repeat(" ",e.indent)+DI((t.line+1).toString(),f)+" | "+h.str+` +`,l+=ha.repeat("-",e.indent+f+3+h.pos)+`^ +`,u=1;u<=e.linesAfter&&!(s+u>=n.length);u++)h=_I(t.buffer,i[s+u],n[s+u],t.position-(i[s]-i[s+u]),d),l+=ha.repeat(" ",e.indent)+DI((t.line+u+1).toString(),f)+" | "+h.str+` +`;return l.replace(/\n$/,"")}function p$e(t){var e={};return t!==null&&Object.keys(t).forEach(function(r){t[r].forEach(function(i){e[String(i)]=r})}),e}function m$e(t,e){if(e=e||{},Object.keys(e).forEach(function(r){if(f$e.indexOf(r)===-1)throw new xo('Unknown option "'+r+'" is met in definition of "'+t+'" YAML type.')}),this.options=e,this.tag=t,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(r){return r},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.representName=e.representName||null,this.defaultStyle=e.defaultStyle||null,this.multi=e.multi||!1,this.styleAliases=p$e(e.styleAliases||null),d$e.indexOf(this.kind)===-1)throw new xo('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')}function wne(t,e){var r=[];return t[e].forEach(function(i){var n=r.length;r.forEach(function(a,s){a.tag===i.tag&&a.kind===i.kind&&a.multi===i.multi&&(n=s)}),r[n]=i}),r}function g$e(){var t={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}},e,r;function i(n){n.multi?(t.multi[n.kind].push(n),t.multi.fallback.push(n)):t[n.kind][n.tag]=t.fallback[n.tag]=n}for(o(i,"collectType"),e=0,r=arguments.length;e=0&&(e=e.slice(1)),e===".inf"?r===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===".nan"?NaN:r*parseFloat(e,10)}function G$e(t,e){var r;if(isNaN(t))switch(e){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===t)switch(e){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===t)switch(e){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(ha.isNegativeZero(t))return"-0.0";return r=t.toString(10),z$e.test(r)?r.replace("e",".e"):r}function V$e(t){return Object.prototype.toString.call(t)==="[object Number]"&&(t%1!==0||ha.isNegativeZero(t))}function U$e(t){return t===null?!1:Vne.exec(t)!==null||qne.exec(t)!==null}function H$e(t){var e,r,i,n,a,s,l,u=0,h=null,f,d,p;if(e=Vne.exec(t),e===null&&(e=qne.exec(t)),e===null)throw new Error("Date resolve error");if(r=+e[1],i=+e[2]-1,n=+e[3],!e[4])return new Date(Date.UTC(r,i,n));if(a=+e[4],s=+e[5],l=+e[6],e[7]){for(u=e[7].slice(0,3);u.length<3;)u+="0";u=+u}return e[9]&&(f=+e[10],d=+(e[11]||0),h=(f*60+d)*6e4,e[9]==="-"&&(h=-h)),p=new Date(Date.UTC(r,i,n,a,s,l,u)),h&&p.setTime(p.getTime()-h),p}function Y$e(t){return t.toISOString()}function X$e(t){return t==="<<"||t===null}function Q$e(t){if(t===null)return!1;var e,r,i=0,n=t.length,a=PI;for(r=0;r64)){if(e<0)return!1;i+=6}return i%8===0}function Z$e(t){var e,r,i=t.replace(/[\r\n=]/g,""),n=i.length,a=PI,s=0,l=[];for(e=0;e>16&255),l.push(s>>8&255),l.push(s&255)),s=s<<6|a.indexOf(i.charAt(e));return r=n%4*6,r===0?(l.push(s>>16&255),l.push(s>>8&255),l.push(s&255)):r===18?(l.push(s>>10&255),l.push(s>>2&255)):r===12&&l.push(s>>4&255),new Uint8Array(l)}function J$e(t){var e="",r=0,i,n,a=t.length,s=PI;for(i=0;i>18&63],e+=s[r>>12&63],e+=s[r>>6&63],e+=s[r&63]),r=(r<<8)+t[i];return n=a%3,n===0?(e+=s[r>>18&63],e+=s[r>>12&63],e+=s[r>>6&63],e+=s[r&63]):n===2?(e+=s[r>>10&63],e+=s[r>>4&63],e+=s[r<<2&63],e+=s[64]):n===1&&(e+=s[r>>2&63],e+=s[r<<4&63],e+=s[64],e+=s[64]),e}function eze(t){return Object.prototype.toString.call(t)==="[object Uint8Array]"}function nze(t){if(t===null)return!0;var e=[],r,i,n,a,s,l=t;for(r=0,i=l.length;r>10)+55296,(t-65536&1023)+56320)}function Xne(t,e,r){e==="__proto__"?Object.defineProperty(t,e,{configurable:!0,enumerable:!0,writable:!0,value:r}):t[e]=r}function Cze(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||Wne,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=t.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function Zne(t,e){var r={name:t.filename,buffer:t.input.slice(0,-1),position:t.position,line:t.line,column:t.position-t.lineStart};return r.snippet=h$e(r),new xo(e,r)}function or(t,e){throw Zne(t,e)}function J3(t,e){t.onWarning&&t.onWarning.call(null,Zne(t,e))}function od(t,e,r,i){var n,a,s,l;if(e1&&(t.result+=ha.repeat(` +`,e-1))}function wze(t,e,r){var i,n,a,s,l,u,h,f,d=t.kind,p=t.result,m;if(m=t.input.charCodeAt(t.position),bo(m)||E1(m)||m===35||m===38||m===42||m===33||m===124||m===62||m===39||m===34||m===37||m===64||m===96||(m===63||m===45)&&(n=t.input.charCodeAt(t.position+1),bo(n)||r&&E1(n)))return!1;for(t.kind="scalar",t.result="",a=s=t.position,l=!1;m!==0;){if(m===58){if(n=t.input.charCodeAt(t.position+1),bo(n)||r&&E1(n))break}else if(m===35){if(i=t.input.charCodeAt(t.position-1),bo(i))break}else{if(t.position===t.lineStart&&r5(t)||r&&E1(m))break;if(wu(m))if(u=t.line,h=t.lineStart,f=t.lineIndent,Zn(t,!1,-1),t.lineIndent>=e){l=!0,m=t.input.charCodeAt(t.position);continue}else{t.position=s,t.line=u,t.lineStart=h,t.lineIndent=f;break}}l&&(od(t,a,s,!1),FI(t,t.line-u),a=s=t.position,l=!1),S0(m)||(s=t.position+1),m=t.input.charCodeAt(++t.position)}return od(t,a,s,!1),t.result?!0:(t.kind=d,t.result=p,!1)}function Eze(t,e){var r,i,n;if(r=t.input.charCodeAt(t.position),r!==39)return!1;for(t.kind="scalar",t.result="",t.position++,i=n=t.position;(r=t.input.charCodeAt(t.position))!==0;)if(r===39)if(od(t,i,t.position,!0),r=t.input.charCodeAt(++t.position),r===39)i=t.position,t.position++,n=t.position;else return!0;else wu(r)?(od(t,i,n,!0),FI(t,Zn(t,!1,e)),i=n=t.position):t.position===t.lineStart&&r5(t)?or(t,"unexpected end of the document within a single quoted scalar"):(t.position++,n=t.position);or(t,"unexpected end of the stream within a single quoted scalar")}function Sze(t,e){var r,i,n,a,s,l;if(l=t.input.charCodeAt(t.position),l!==34)return!1;for(t.kind="scalar",t.result="",t.position++,r=i=t.position;(l=t.input.charCodeAt(t.position))!==0;){if(l===34)return od(t,r,t.position,!0),t.position++,!0;if(l===92){if(od(t,r,t.position,!0),l=t.input.charCodeAt(++t.position),wu(l))Zn(t,!1,e);else if(l<256&&Kne[l])t.result+=Qne[l],t.position++;else if((s=bze(l))>0){for(n=s,a=0;n>0;n--)l=t.input.charCodeAt(++t.position),(s=xze(l))>=0?a=(a<<4)+s:or(t,"expected hexadecimal character");t.result+=kze(a),t.position++}else or(t,"unknown escape sequence");r=i=t.position}else wu(l)?(od(t,r,i,!0),FI(t,Zn(t,!1,e)),r=i=t.position):t.position===t.lineStart&&r5(t)?or(t,"unexpected end of the document within a double quoted scalar"):(t.position++,i=t.position)}or(t,"unexpected end of the stream within a double quoted scalar")}function Aze(t,e){var r=!0,i,n,a,s=t.tag,l,u=t.anchor,h,f,d,p,m,g=Object.create(null),y,v,x,b;if(b=t.input.charCodeAt(t.position),b===91)f=93,m=!1,l=[];else if(b===123)f=125,m=!0,l={};else return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=l),b=t.input.charCodeAt(++t.position);b!==0;){if(Zn(t,!0,e),b=t.input.charCodeAt(t.position),b===f)return t.position++,t.tag=s,t.anchor=u,t.kind=m?"mapping":"sequence",t.result=l,!0;r?b===44&&or(t,"expected the node content, but found ','"):or(t,"missed comma between flow collection entries"),v=y=x=null,d=p=!1,b===63&&(h=t.input.charCodeAt(t.position+1),bo(h)&&(d=p=!0,t.position++,Zn(t,!0,e))),i=t.line,n=t.lineStart,a=t.position,A1(t,e,Q3,!1,!0),v=t.tag,y=t.result,Zn(t,!0,e),b=t.input.charCodeAt(t.position),(p||t.line===i)&&b===58&&(d=!0,b=t.input.charCodeAt(++t.position),Zn(t,!0,e),A1(t,e,Q3,!1,!0),x=t.result),m?S1(t,l,g,v,y,x,i,n,a):d?l.push(S1(t,null,g,v,y,x,i,n,a)):l.push(y),Zn(t,!0,e),b=t.input.charCodeAt(t.position),b===44?(r=!0,b=t.input.charCodeAt(++t.position)):r=!1}or(t,"unexpected end of the stream within a flow collection")}function _ze(t,e){var r,i,n=LI,a=!1,s=!1,l=e,u=0,h=!1,f,d;if(d=t.input.charCodeAt(t.position),d===124)i=!1;else if(d===62)i=!0;else return!1;for(t.kind="scalar",t.result="";d!==0;)if(d=t.input.charCodeAt(++t.position),d===43||d===45)LI===n?n=d===43?Ene:mze:or(t,"repeat of a chomping mode identifier");else if((f=Tze(d))>=0)f===0?or(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):s?or(t,"repeat of an indentation width identifier"):(l=e+f-1,s=!0);else break;if(S0(d)){do d=t.input.charCodeAt(++t.position);while(S0(d));if(d===35)do d=t.input.charCodeAt(++t.position);while(!wu(d)&&d!==0)}for(;d!==0;){for(BI(t),t.lineIndent=0,d=t.input.charCodeAt(t.position);(!s||t.lineIndentl&&(l=t.lineIndent),wu(d)){u++;continue}if(t.lineIndente)&&u!==0)or(t,"bad indentation of a sequence entry");else if(t.lineIndente)&&(v&&(s=t.line,l=t.lineStart,u=t.position),A1(t,e,Z3,!0,n)&&(v?g=t.result:y=t.result),v||(S1(t,d,p,m,g,y,s,l,u),m=g=y=null),Zn(t,!0,-1),b=t.input.charCodeAt(t.position)),(t.line===a||t.lineIndent>e)&&b!==0)or(t,"bad indentation of a mapping entry");else if(t.lineIndente?u=1:t.lineIndent===e?u=0:t.lineIndente?u=1:t.lineIndent===e?u=0:t.lineIndent tag; it should be "scalar", not "'+t.kind+'"'),d=0,p=t.implicitTypes.length;d"),t.result!==null&&g.kind!==t.kind&&or(t,"unacceptable node kind for !<"+t.tag+'> tag; it should be "'+g.kind+'", not "'+t.kind+'"'),g.resolve(t.result,t.tag)?(t.result=g.construct(t.result,t.tag),t.anchor!==null&&(t.anchorMap[t.anchor]=t.result)):or(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")}return t.listener!==null&&t.listener("close",t),t.tag!==null||t.anchor!==null||f}function Ize(t){var e=t.position,r,i,n,a=!1,s;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap=Object.create(null),t.anchorMap=Object.create(null);(s=t.input.charCodeAt(t.position))!==0&&(Zn(t,!0,-1),s=t.input.charCodeAt(t.position),!(t.lineIndent>0||s!==37));){for(a=!0,s=t.input.charCodeAt(++t.position),r=t.position;s!==0&&!bo(s);)s=t.input.charCodeAt(++t.position);for(i=t.input.slice(r,t.position),n=[],i.length<1&&or(t,"directive name must not be less than one character in length");s!==0;){for(;S0(s);)s=t.input.charCodeAt(++t.position);if(s===35){do s=t.input.charCodeAt(++t.position);while(s!==0&&!wu(s));break}if(wu(s))break;for(r=t.position;s!==0&&!bo(s);)s=t.input.charCodeAt(++t.position);n.push(t.input.slice(r,t.position))}s!==0&&BI(t),ld.call(_ne,i)?_ne[i](t,i,n):J3(t,'unknown document directive "'+i+'"')}if(Zn(t,!0,-1),t.lineIndent===0&&t.input.charCodeAt(t.position)===45&&t.input.charCodeAt(t.position+1)===45&&t.input.charCodeAt(t.position+2)===45?(t.position+=3,Zn(t,!0,-1)):a&&or(t,"directives end mark is expected"),A1(t,t.lineIndent-1,Z3,!1,!0),Zn(t,!0,-1),t.checkLineBreaks&&yze.test(t.input.slice(e,t.position))&&J3(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&r5(t)){t.input.charCodeAt(t.position)===46&&(t.position+=3,Zn(t,!0,-1));return}if(t.position"u"&&(r=e,e=null);var i=Jne(t,r);if(typeof e!="function")return i;for(var n=0,a=i.length;n=55296&&r<=56319&&e+1=56320&&i<=57343)?(r-55296)*1024+i-56320+65536:r}function lae(t){var e=/^\n* /;return e.test(t)}function cGe(t,e,r,i,n,a,s,l){var u,h=0,f=null,d=!1,p=!1,m=i!==-1,g=-1,y=oGe(pb(t,0))&&lGe(pb(t,t.length-1));if(e||s)for(u=0;u=65536?u+=2:u++){if(h=pb(t,u),!vb(h))return w1;y=y&&Ine(h,f,l),f=h}else{for(u=0;u=65536?u+=2:u++){if(h=pb(t,u),h===gb)d=!0,m&&(p=p||u-g-1>i&&t[g+1]!==" ",g=u);else if(!vb(h))return w1;y=y&&Ine(h,f,l),f=h}p=p||m&&u-g-1>i&&t[g+1]!==" "}return!d&&!p?y&&!s&&!n(t)?cae:a===yb?w1:MI:r>9&&lae(t)?w1:s?a===yb?w1:MI:p?hae:uae}function uGe(t,e,r,i,n){t.dump=(function(){if(e.length===0)return t.quotingType===yb?'""':"''";if(!t.noCompatMode&&(eGe.indexOf(e)!==-1||tGe.test(e)))return t.quotingType===yb?'"'+e+'"':"'"+e+"'";var a=t.indent*Math.max(1,r),s=t.lineWidth===-1?-1:Math.max(Math.min(t.lineWidth,40),t.lineWidth-a),l=i||t.flowLevel>-1&&r>=t.flowLevel;function u(h){return sGe(t,h)}switch(o(u,"testAmbiguity"),cGe(e,l,t.indent,s,u,t.quotingType,t.forceQuotes&&!i,n)){case cae:return e;case MI:return"'"+e.replace(/'/g,"''")+"'";case uae:return"|"+Mne(e,t.indent)+One(Rne(e,a));case hae:return">"+Mne(e,t.indent)+One(Rne(hGe(e,s),a));case w1:return'"'+fGe(e)+'"';default:throw new xo("impossible error: invalid scalar style")}})()}function Mne(t,e){var r=lae(t)?String(e):"",i=t[t.length-1]===` +`,n=i&&(t[t.length-2]===` +`||t===` +`),a=n?"+":i?"":"-";return r+a+` +`}function One(t){return t[t.length-1]===` +`?t.slice(0,-1):t}function hGe(t,e){for(var r=/(\n+)([^\n]*)/g,i=(function(){var h=t.indexOf(` +`);return h=h!==-1?h:t.length,r.lastIndex=h,Pne(t.slice(0,h),e)})(),n=t[0]===` +`||t[0]===" ",a,s;s=r.exec(t);){var l=s[1],u=s[2];a=u[0]===" ",i+=l+(!n&&!a&&u!==""?` +`:"")+Pne(u,e),n=a}return i}function Pne(t,e){if(t===""||t[0]===" ")return t;for(var r=/ [^ ]/g,i,n=0,a,s=0,l=0,u="";i=r.exec(t);)l=i.index,l-n>e&&(a=s>n?s:l,u+=` +`+t.slice(n,a),n=a+1),s=l;return u+=` +`,t.length-n>e&&s>n?u+=t.slice(n,s)+` +`+t.slice(s+1):u+=t.slice(n),u.slice(1)}function fGe(t){for(var e="",r=0,i,n=0;n=65536?n+=2:n++)r=pb(t,n),i=fs[r],!i&&vb(r)?(e+=t[n],r>=65536&&(e+=t[n+1])):e+=i||iGe(r);return e}function dGe(t,e,r){var i="",n=t.tag,a,s,l;for(a=0,s=r.length;a"u"&&$h(t,e,null,!1,!1))&&(i!==""&&(i+=","+(t.condenseFlow?"":" ")),i+=t.dump);t.tag=n,t.dump="["+i+"]"}function Bne(t,e,r,i){var n="",a=t.tag,s,l,u;for(s=0,l=r.length;s"u"&&$h(t,e+1,null,!0,!0,!1,!0))&&((!i||n!=="")&&(n+=II(t,e)),t.dump&&gb===t.dump.charCodeAt(0)?n+="-":n+="- ",n+=t.dump);t.tag=a,t.dump=n||"[]"}function pGe(t,e,r){var i="",n=t.tag,a=Object.keys(r),s,l,u,h,f;for(s=0,l=a.length;s1024&&(f+="? "),f+=t.dump+(t.condenseFlow?'"':"")+":"+(t.condenseFlow?"":" "),$h(t,e,h,!1,!1)&&(f+=t.dump,i+=f));t.tag=n,t.dump="{"+i+"}"}function mGe(t,e,r,i){var n="",a=t.tag,s=Object.keys(r),l,u,h,f,d,p;if(t.sortKeys===!0)s.sort();else if(typeof t.sortKeys=="function")s.sort(t.sortKeys);else if(t.sortKeys)throw new xo("sortKeys must be a boolean or a function");for(l=0,u=s.length;l1024,d&&(t.dump&&gb===t.dump.charCodeAt(0)?p+="?":p+="? "),p+=t.dump,d&&(p+=II(t,e)),$h(t,e+1,f,!0,d)&&(t.dump&&gb===t.dump.charCodeAt(0)?p+=":":p+=": ",p+=t.dump,n+=p));t.tag=a,t.dump=n||"{}"}function Fne(t,e,r){var i,n,a,s,l,u;for(n=r?t.explicitTypes:t.implicitTypes,a=0,s=n.length;a tag resolver accepts not "'+u+'" style');t.dump=i}return!0}return!1}function $h(t,e,r,i,n,a,s){t.tag=null,t.dump=r,Fne(t,r,!1)||Fne(t,r,!0);var l=tae.call(t.dump),u=i,h;i&&(i=t.flowLevel<0||t.flowLevel>e);var f=l==="[object Object]"||l==="[object Array]",d,p;if(f&&(d=t.duplicates.indexOf(r),p=d!==-1),(t.tag!==null&&t.tag!=="?"||p||t.indent!==2&&e>0)&&(n=!1),p&&t.usedDuplicates[d])t.dump="*ref_"+d;else{if(f&&p&&!t.usedDuplicates[d]&&(t.usedDuplicates[d]=!0),l==="[object Object]")i&&Object.keys(t.dump).length!==0?(mGe(t,e,t.dump,n),p&&(t.dump="&ref_"+d+t.dump)):(pGe(t,e,t.dump),p&&(t.dump="&ref_"+d+" "+t.dump));else if(l==="[object Array]")i&&t.dump.length!==0?(t.noArrayIndent&&!s&&e>0?Bne(t,e-1,t.dump,n):Bne(t,e,t.dump,n),p&&(t.dump="&ref_"+d+t.dump)):(dGe(t,e,t.dump),p&&(t.dump="&ref_"+d+" "+t.dump));else if(l==="[object String]")t.tag!=="?"&&uGe(t,t.dump,e,a,u);else{if(l==="[object Undefined]")return!1;if(t.skipInvalid)return!1;throw new xo("unacceptable kind of an object to dump "+l)}t.tag!==null&&t.tag!=="?"&&(h=encodeURI(t.tag[0]==="!"?t.tag.slice(1):t.tag).replace(/!/g,"%21"),t.tag[0]==="!"?h="!"+h:h.slice(0,18)==="tag:yaml.org,2002:"?h="!!"+h.slice(18):h="!<"+h+">",t.dump=h+" "+t.dump)}return!0}function gGe(t,e){var r=[],i=[],n,a;for(OI(t,r,i),n=0,a=i.length;n{"use strict";o($ne,"isNothing");o(JFe,"isObject");o(e$e,"toArray");o(t$e,"extend");o(r$e,"repeat");o(i$e,"isNegativeZero");n$e=$ne,a$e=JFe,s$e=e$e,o$e=r$e,l$e=i$e,c$e=t$e,ha={isNothing:n$e,isObject:a$e,toArray:s$e,repeat:o$e,isNegativeZero:l$e,extend:c$e};o(zne,"formatError");o(mb,"YAMLException$1");mb.prototype=Object.create(Error.prototype);mb.prototype.constructor=mb;mb.prototype.toString=o(function(e){return this.name+": "+zne(this,e)},"toString");xo=mb;o(_I,"getLine");o(DI,"padStart");o(u$e,"makeSnippet");h$e=u$e,f$e=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],d$e=["scalar","sequence","mapping"];o(p$e,"compileStyleAliases");o(m$e,"Type$1");hs=m$e;o(wne,"compileList");o(g$e,"compileMap");o(RI,"Schema$1");RI.prototype.extend=o(function(e){var r=[],i=[];if(e instanceof hs)i.push(e);else if(Array.isArray(e))i=i.concat(e);else if(e&&(Array.isArray(e.implicit)||Array.isArray(e.explicit)))e.implicit&&(r=r.concat(e.implicit)),e.explicit&&(i=i.concat(e.explicit));else throw new xo("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");r.forEach(function(a){if(!(a instanceof hs))throw new xo("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(a.loadKind&&a.loadKind!=="scalar")throw new xo("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(a.multi)throw new xo("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")}),i.forEach(function(a){if(!(a instanceof hs))throw new xo("Specified list of YAML types (or a single Type object) contains a non-Type object.")});var n=Object.create(RI.prototype);return n.implicit=(this.implicit||[]).concat(r),n.explicit=(this.explicit||[]).concat(i),n.compiledImplicit=wne(n,"implicit"),n.compiledExplicit=wne(n,"explicit"),n.compiledTypeMap=g$e(n.compiledImplicit,n.compiledExplicit),n},"extend");y$e=RI,v$e=new hs("tag:yaml.org,2002:str",{kind:"scalar",construct:o(function(t){return t!==null?t:""},"construct")}),x$e=new hs("tag:yaml.org,2002:seq",{kind:"sequence",construct:o(function(t){return t!==null?t:[]},"construct")}),b$e=new hs("tag:yaml.org,2002:map",{kind:"mapping",construct:o(function(t){return t!==null?t:{}},"construct")}),T$e=new y$e({explicit:[v$e,x$e,b$e]});o(k$e,"resolveYamlNull");o(C$e,"constructYamlNull");o(w$e,"isNull");E$e=new hs("tag:yaml.org,2002:null",{kind:"scalar",resolve:k$e,construct:C$e,predicate:w$e,represent:{canonical:o(function(){return"~"},"canonical"),lowercase:o(function(){return"null"},"lowercase"),uppercase:o(function(){return"NULL"},"uppercase"),camelcase:o(function(){return"Null"},"camelcase"),empty:o(function(){return""},"empty")},defaultStyle:"lowercase"});o(S$e,"resolveYamlBoolean");o(A$e,"constructYamlBoolean");o(_$e,"isBoolean");D$e=new hs("tag:yaml.org,2002:bool",{kind:"scalar",resolve:S$e,construct:A$e,predicate:_$e,represent:{lowercase:o(function(t){return t?"true":"false"},"lowercase"),uppercase:o(function(t){return t?"TRUE":"FALSE"},"uppercase"),camelcase:o(function(t){return t?"True":"False"},"camelcase")},defaultStyle:"lowercase"});o(L$e,"isHexCode");o(R$e,"isOctCode");o(N$e,"isDecCode");o(I$e,"resolveYamlInteger");o(M$e,"constructYamlInteger");o(O$e,"isInteger");P$e=new hs("tag:yaml.org,2002:int",{kind:"scalar",resolve:I$e,construct:M$e,predicate:O$e,represent:{binary:o(function(t){return t>=0?"0b"+t.toString(2):"-0b"+t.toString(2).slice(1)},"binary"),octal:o(function(t){return t>=0?"0o"+t.toString(8):"-0o"+t.toString(8).slice(1)},"octal"),decimal:o(function(t){return t.toString(10)},"decimal"),hexadecimal:o(function(t){return t>=0?"0x"+t.toString(16).toUpperCase():"-0x"+t.toString(16).toUpperCase().slice(1)},"hexadecimal")},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),B$e=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");o(F$e,"resolveYamlFloat");o($$e,"constructYamlFloat");z$e=/^[-+]?[0-9]+e/;o(G$e,"representYamlFloat");o(V$e,"isFloat");q$e=new hs("tag:yaml.org,2002:float",{kind:"scalar",resolve:F$e,construct:$$e,predicate:V$e,represent:G$e,defaultStyle:"lowercase"}),Gne=T$e.extend({implicit:[E$e,D$e,P$e,q$e]}),W$e=Gne,Vne=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),qne=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");o(U$e,"resolveYamlTimestamp");o(H$e,"constructYamlTimestamp");o(Y$e,"representYamlTimestamp");j$e=new hs("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:U$e,construct:H$e,instanceOf:Date,represent:Y$e});o(X$e,"resolveYamlMerge");K$e=new hs("tag:yaml.org,2002:merge",{kind:"scalar",resolve:X$e}),PI=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= +\r`;o(Q$e,"resolveYamlBinary");o(Z$e,"constructYamlBinary");o(J$e,"representYamlBinary");o(eze,"isBinary");tze=new hs("tag:yaml.org,2002:binary",{kind:"scalar",resolve:Q$e,construct:Z$e,predicate:eze,represent:J$e}),rze=Object.prototype.hasOwnProperty,ize=Object.prototype.toString;o(nze,"resolveYamlOmap");o(aze,"constructYamlOmap");sze=new hs("tag:yaml.org,2002:omap",{kind:"sequence",resolve:nze,construct:aze}),oze=Object.prototype.toString;o(lze,"resolveYamlPairs");o(cze,"constructYamlPairs");uze=new hs("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:lze,construct:cze}),hze=Object.prototype.hasOwnProperty;o(fze,"resolveYamlSet");o(dze,"constructYamlSet");pze=new hs("tag:yaml.org,2002:set",{kind:"mapping",resolve:fze,construct:dze}),Wne=W$e.extend({implicit:[j$e,K$e],explicit:[tze,sze,uze,pze]}),ld=Object.prototype.hasOwnProperty,Q3=1,Une=2,Hne=3,Z3=4,LI=1,mze=2,Ene=3,gze=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,yze=/[\x85\u2028\u2029]/,vze=/[,\[\]\{\}]/,Yne=/^(?:!|!!|![a-z\-]+!)$/i,jne=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;o(Sne,"_class");o(wu,"is_EOL");o(S0,"is_WHITE_SPACE");o(bo,"is_WS_OR_EOL");o(E1,"is_FLOW_INDICATOR");o(xze,"fromHexCode");o(bze,"escapedHexLen");o(Tze,"fromDecimalCode");o(Ane,"simpleEscapeSequence");o(kze,"charFromCodepoint");o(Xne,"setProperty");Kne=new Array(256),Qne=new Array(256);for(E0=0;E0<256;E0++)Kne[E0]=Ane(E0)?1:0,Qne[E0]=Ane(E0);o(Cze,"State$1");o(Zne,"generateError");o(or,"throwError");o(J3,"throwWarning");_ne={YAML:o(function(e,r,i){var n,a,s;e.version!==null&&or(e,"duplication of %YAML directive"),i.length!==1&&or(e,"YAML directive accepts exactly one argument"),n=/^([0-9]+)\.([0-9]+)$/.exec(i[0]),n===null&&or(e,"ill-formed argument of the YAML directive"),a=parseInt(n[1],10),s=parseInt(n[2],10),a!==1&&or(e,"unacceptable YAML version of the document"),e.version=i[0],e.checkLineBreaks=s<2,s!==1&&s!==2&&J3(e,"unsupported YAML version of the document")},"handleYamlDirective"),TAG:o(function(e,r,i){var n,a;i.length!==2&&or(e,"TAG directive accepts exactly two arguments"),n=i[0],a=i[1],Yne.test(n)||or(e,"ill-formed tag handle (first argument) of the TAG directive"),ld.call(e.tagMap,n)&&or(e,'there is a previously declared suffix for "'+n+'" tag handle'),jne.test(a)||or(e,"ill-formed tag prefix (second argument) of the TAG directive");try{a=decodeURIComponent(a)}catch{or(e,"tag prefix is malformed: "+a)}e.tagMap[n]=a},"handleTagDirective")};o(od,"captureSegment");o(Dne,"mergeMappings");o(S1,"storeMappingPair");o(BI,"readLineBreak");o(Zn,"skipSeparationSpace");o(r5,"testDocumentSeparator");o(FI,"writeFoldedLines");o(wze,"readPlainScalar");o(Eze,"readSingleQuotedScalar");o(Sze,"readDoubleQuotedScalar");o(Aze,"readFlowCollection");o(_ze,"readBlockScalar");o(Lne,"readBlockSequence");o(Dze,"readBlockMapping");o(Lze,"readTagProperty");o(Rze,"readAnchorProperty");o(Nze,"readAlias");o(A1,"composeNode");o(Ize,"readDocument");o(Jne,"loadDocuments");o(Mze,"loadAll$1");o(Oze,"load$1");Pze=Mze,Bze=Oze,eae={loadAll:Pze,load:Bze},tae=Object.prototype.toString,rae=Object.prototype.hasOwnProperty,$I=65279,Fze=9,gb=10,$ze=13,zze=32,Gze=33,Vze=34,NI=35,qze=37,Wze=38,Uze=39,Hze=42,iae=44,Yze=45,e5=58,jze=61,Xze=62,Kze=63,Qze=64,nae=91,aae=93,Zze=96,sae=123,Jze=124,oae=125,fs={};fs[0]="\\0";fs[7]="\\a";fs[8]="\\b";fs[9]="\\t";fs[10]="\\n";fs[11]="\\v";fs[12]="\\f";fs[13]="\\r";fs[27]="\\e";fs[34]='\\"';fs[92]="\\\\";fs[133]="\\N";fs[160]="\\_";fs[8232]="\\L";fs[8233]="\\P";eGe=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"],tGe=/^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/;o(rGe,"compileStyleMap");o(iGe,"encodeHex");nGe=1,yb=2;o(aGe,"State");o(Rne,"indentString");o(II,"generateNextLine");o(sGe,"testImplicitResolving");o(t5,"isWhitespace");o(vb,"isPrintable");o(Nne,"isNsCharOrWhitespace");o(Ine,"isPlainSafe");o(oGe,"isPlainSafeFirst");o(lGe,"isPlainSafeLast");o(pb,"codePointAt");o(lae,"needIndentIndicator");cae=1,MI=2,uae=3,hae=4,w1=5;o(cGe,"chooseScalarStyle");o(uGe,"writeScalar");o(Mne,"blockHeader");o(One,"dropEndingNewline");o(hGe,"foldString");o(Pne,"foldLine");o(fGe,"escapeString");o(dGe,"writeFlowSequence");o(Bne,"writeBlockSequence");o(pGe,"writeFlowMapping");o(mGe,"writeBlockMapping");o(Fne,"detectType");o($h,"writeNode");o(gGe,"getDuplicateReferences");o(OI,"inspectNode");o(yGe,"dump$1");vGe=yGe,xGe={dump:vGe};o(zI,"renamed");cd=Gne,ud=eae.load,eFt=eae.loadAll,tFt=xGe.dump,rFt=zI("safeLoad","load"),iFt=zI("safeLoadAll","loadAll"),nFt=zI("safeDump","dump")});function WI(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}function yae(t){_0=t}function Ei(t,e=""){let r=typeof t=="string"?t:t.source,i={replace:o((n,a)=>{let s=typeof a=="string"?a:a.source;return s=s.replace(Gs.caret,"$1"),r=r.replace(n,s),i},"replace"),getRegex:o(()=>new RegExp(r,e),"getRegex")};return i}function Eu(t,e){if(e){if(Gs.escapeTest.test(t))return t.replace(Gs.escapeReplace,dae)}else if(Gs.escapeTestNoEncode.test(t))return t.replace(Gs.escapeReplaceNoEncode,dae);return t}function pae(t){try{t=encodeURI(t).replace(Gs.percentDecode,"%")}catch{return null}return t}function mae(t,e){let r=t.replace(Gs.findPipe,(a,s,l)=>{let u=!1,h=s;for(;--h>=0&&l[h]==="\\";)u=!u;return u?"|":" |"}),i=r.split(Gs.splitPipe),n=0;if(i[0].trim()||i.shift(),i.length>0&&!i.at(-1)?.trim()&&i.pop(),e)if(i.length>e)i.splice(e);else for(;i.length0?-2:-1}function gae(t,e,r,i,n){let a=e.href,s=e.title||null,l=t[1].replace(n.other.outputLinkReplace,"$1");i.state.inLink=!0;let u={type:t[0].charAt(0)==="!"?"image":"link",raw:r,href:a,title:s,text:l,tokens:i.inlineTokens(l)};return i.state.inLink=!1,u}function eVe(t,e,r){let i=t.match(r.other.indentCodeCompensation);if(i===null)return e;let n=i[1];return e.split(` +`).map(a=>{let s=a.match(r.other.beginningSpace);if(s===null)return a;let[l]=s;return l.length>=n.length?a.slice(n.length):a}).join(` +`)}function bi(t,e){return A0.parse(t,e)}var _0,Cb,Gs,bGe,TGe,kGe,wb,CGe,UI,vae,xae,wGe,HI,EGe,YI,SGe,AGe,l5,jI,_Ge,bae,DGe,XI,fae,LGe,RGe,NGe,IGe,Tae,MGe,c5,KI,kae,OGe,Cae,PGe,BGe,FGe,wae,$Ge,zGe,Eae,GGe,VGe,qGe,WGe,UGe,HGe,YGe,a5,jGe,Sae,Aae,XGe,QI,KGe,GI,QGe,n5,bb,ZGe,dae,s5,zh,o5,ZI,Gh,kb,tVe,A0,sFt,oFt,lFt,cFt,uFt,hFt,fFt,_ae=P(()=>{"use strict";o(WI,"L");_0=WI();o(yae,"G");Cb={exec:o(()=>null,"exec")};o(Ei,"h");Gs={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceTabs:/^\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] /,listReplaceTask:/^\[[ xX]\] +/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,unescapeTest:/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:o(t=>new RegExp(`^( {0,3}${t})((?:[ ][^\\n]*)?(?:\\n|$))`),"listItemRegex"),nextBulletRegex:o(t=>new RegExp(`^ {0,${Math.min(3,t-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),"nextBulletRegex"),hrRegex:o(t=>new RegExp(`^ {0,${Math.min(3,t-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),"hrRegex"),fencesBeginRegex:o(t=>new RegExp(`^ {0,${Math.min(3,t-1)}}(?:\`\`\`|~~~)`),"fencesBeginRegex"),headingBeginRegex:o(t=>new RegExp(`^ {0,${Math.min(3,t-1)}}#`),"headingBeginRegex"),htmlBeginRegex:o(t=>new RegExp(`^ {0,${Math.min(3,t-1)}}<(?:[a-z].*>|!--)`,"i"),"htmlBeginRegex")},bGe=/^(?:[ \t]*(?:\n|$))+/,TGe=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,kGe=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,wb=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,CGe=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,UI=/(?:[*+-]|\d{1,9}[.)])/,vae=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,xae=Ei(vae).replace(/bull/g,UI).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),wGe=Ei(vae).replace(/bull/g,UI).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),HI=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,EGe=/^[^\n]+/,YI=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,SGe=Ei(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",YI).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),AGe=Ei(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,UI).getRegex(),l5="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",jI=/|$))/,_Ge=Ei("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",jI).replace("tag",l5).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),bae=Ei(HI).replace("hr",wb).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",l5).getRegex(),DGe=Ei(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",bae).getRegex(),XI={blockquote:DGe,code:TGe,def:SGe,fences:kGe,heading:CGe,hr:wb,html:_Ge,lheading:xae,list:AGe,newline:bGe,paragraph:bae,table:Cb,text:EGe},fae=Ei("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",wb).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",l5).getRegex(),LGe={...XI,lheading:wGe,table:fae,paragraph:Ei(HI).replace("hr",wb).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",fae).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",l5).getRegex()},RGe={...XI,html:Ei(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",jI).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:Cb,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:Ei(HI).replace("hr",wb).replace("heading",` *#{1,6} *[^ +]`).replace("lheading",xae).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},NGe=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,IGe=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,Tae=/^( {2,}|\\)\n(?!\s*$)/,MGe=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\]*?>/g,wae=/^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/,$Ge=Ei(wae,"u").replace(/punct/g,c5).getRegex(),zGe=Ei(wae,"u").replace(/punct/g,Cae).getRegex(),Eae="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",GGe=Ei(Eae,"gu").replace(/notPunctSpace/g,kae).replace(/punctSpace/g,KI).replace(/punct/g,c5).getRegex(),VGe=Ei(Eae,"gu").replace(/notPunctSpace/g,BGe).replace(/punctSpace/g,PGe).replace(/punct/g,Cae).getRegex(),qGe=Ei("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,kae).replace(/punctSpace/g,KI).replace(/punct/g,c5).getRegex(),WGe=Ei(/\\(punct)/,"gu").replace(/punct/g,c5).getRegex(),UGe=Ei(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),HGe=Ei(jI).replace("(?:-->|$)","-->").getRegex(),YGe=Ei("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment",HGe).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),a5=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`[^`]*`|[^\[\]\\`])*?/,jGe=Ei(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]*(?:\n[ \t]*)?)(title))?\s*\)/).replace("label",a5).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),Sae=Ei(/^!?\[(label)\]\[(ref)\]/).replace("label",a5).replace("ref",YI).getRegex(),Aae=Ei(/^!?\[(ref)\](?:\[\])?/).replace("ref",YI).getRegex(),XGe=Ei("reflink|nolink(?!\\()","g").replace("reflink",Sae).replace("nolink",Aae).getRegex(),QI={_backpedal:Cb,anyPunctuation:WGe,autolink:UGe,blockSkip:FGe,br:Tae,code:IGe,del:Cb,emStrongLDelim:$Ge,emStrongRDelimAst:GGe,emStrongRDelimUnd:qGe,escape:NGe,link:jGe,nolink:Aae,punctuation:OGe,reflink:Sae,reflinkSearch:XGe,tag:YGe,text:MGe,url:Cb},KGe={...QI,link:Ei(/^!?\[(label)\]\((.*?)\)/).replace("label",a5).getRegex(),reflink:Ei(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",a5).getRegex()},GI={...QI,emStrongRDelimAst:VGe,emStrongLDelim:zGe,url:Ei(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,"i").replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\":">",'"':""","'":"'"},dae=o(t=>ZGe[t],"ke");o(Eu,"w");o(pae,"J");o(mae,"V");o(Tb,"z");o(JGe,"ge");o(gae,"fe");o(eVe,"Je");s5=class{static{o(this,"y")}options;rules;lexer;constructor(t){this.options=t||_0}space(t){let e=this.rules.block.newline.exec(t);if(e&&e[0].length>0)return{type:"space",raw:e[0]}}code(t){let e=this.rules.block.code.exec(t);if(e){let r=e[0].replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:e[0],codeBlockStyle:"indented",text:this.options.pedantic?r:Tb(r,` +`)}}}fences(t){let e=this.rules.block.fences.exec(t);if(e){let r=e[0],i=eVe(r,e[3]||"",this.rules);return{type:"code",raw:r,lang:e[2]?e[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):e[2],text:i}}}heading(t){let e=this.rules.block.heading.exec(t);if(e){let r=e[2].trim();if(this.rules.other.endingHash.test(r)){let i=Tb(r,"#");(this.options.pedantic||!i||this.rules.other.endingSpaceChar.test(i))&&(r=i.trim())}return{type:"heading",raw:e[0],depth:e[1].length,text:r,tokens:this.lexer.inline(r)}}}hr(t){let e=this.rules.block.hr.exec(t);if(e)return{type:"hr",raw:Tb(e[0],` +`)}}blockquote(t){let e=this.rules.block.blockquote.exec(t);if(e){let r=Tb(e[0],` +`).split(` +`),i="",n="",a=[];for(;r.length>0;){let s=!1,l=[],u;for(u=0;u1,n={type:"list",raw:"",ordered:i,start:i?+r.slice(0,-1):"",loose:!1,items:[]};r=i?`\\d{1,9}\\${r.slice(-1)}`:`\\${r}`,this.options.pedantic&&(r=i?r:"[*+-]");let a=this.rules.other.listItemRegex(r),s=!1;for(;t;){let u=!1,h="",f="";if(!(e=a.exec(t))||this.rules.block.hr.test(t))break;h=e[0],t=t.substring(h.length);let d=e[2].split(` +`,1)[0].replace(this.rules.other.listReplaceTabs,x=>" ".repeat(3*x.length)),p=t.split(` +`,1)[0],m=!d.trim(),g=0;if(this.options.pedantic?(g=2,f=d.trimStart()):m?g=e[1].length+1:(g=e[2].search(this.rules.other.nonSpaceChar),g=g>4?1:g,f=d.slice(g),g+=e[1].length),m&&this.rules.other.blankLine.test(p)&&(h+=p+` +`,t=t.substring(p.length+1),u=!0),!u){let x=this.rules.other.nextBulletRegex(g),b=this.rules.other.hrRegex(g),T=this.rules.other.fencesBeginRegex(g),w=this.rules.other.headingBeginRegex(g),k=this.rules.other.htmlBeginRegex(g);for(;t;){let C=t.split(` +`,1)[0],E;if(p=C,this.options.pedantic?(p=p.replace(this.rules.other.listReplaceNesting," "),E=p):E=p.replace(this.rules.other.tabCharGlobal," "),T.test(p)||w.test(p)||k.test(p)||x.test(p)||b.test(p))break;if(E.search(this.rules.other.nonSpaceChar)>=g||!p.trim())f+=` +`+E.slice(g);else{if(m||d.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||T.test(d)||w.test(d)||b.test(d))break;f+=` +`+p}!m&&!p.trim()&&(m=!0),h+=C+` +`,t=t.substring(C.length+1),d=E.slice(g)}}n.loose||(s?n.loose=!0:this.rules.other.doubleBlankLine.test(h)&&(s=!0));let y=null,v;this.options.gfm&&(y=this.rules.other.listIsTask.exec(f),y&&(v=y[0]!=="[ ] ",f=f.replace(this.rules.other.listReplaceTask,""))),n.items.push({type:"list_item",raw:h,task:!!y,checked:v,loose:!1,text:f,tokens:[]}),n.raw+=h}let l=n.items.at(-1);if(l)l.raw=l.raw.trimEnd(),l.text=l.text.trimEnd();else return;n.raw=n.raw.trimEnd();for(let u=0;ud.type==="space"),f=h.length>0&&h.some(d=>this.rules.other.anyLine.test(d.raw));n.loose=f}if(n.loose)for(let u=0;u({text:l,tokens:this.lexer.inline(l),header:!1,align:a.align[u]})));return a}}lheading(t){let e=this.rules.block.lheading.exec(t);if(e)return{type:"heading",raw:e[0],depth:e[2].charAt(0)==="="?1:2,text:e[1],tokens:this.lexer.inline(e[1])}}paragraph(t){let e=this.rules.block.paragraph.exec(t);if(e){let r=e[1].charAt(e[1].length-1)===` +`?e[1].slice(0,-1):e[1];return{type:"paragraph",raw:e[0],text:r,tokens:this.lexer.inline(r)}}}text(t){let e=this.rules.block.text.exec(t);if(e)return{type:"text",raw:e[0],text:e[0],tokens:this.lexer.inline(e[0])}}escape(t){let e=this.rules.inline.escape.exec(t);if(e)return{type:"escape",raw:e[0],text:e[1]}}tag(t){let e=this.rules.inline.tag.exec(t);if(e)return!this.lexer.state.inLink&&this.rules.other.startATag.test(e[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(e[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(e[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(e[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:e[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:e[0]}}link(t){let e=this.rules.inline.link.exec(t);if(e){let r=e[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(r)){if(!this.rules.other.endAngleBracket.test(r))return;let a=Tb(r.slice(0,-1),"\\");if((r.length-a.length)%2===0)return}else{let a=JGe(e[2],"()");if(a===-2)return;if(a>-1){let s=(e[0].indexOf("!")===0?5:4)+e[1].length+a;e[2]=e[2].substring(0,a),e[0]=e[0].substring(0,s).trim(),e[3]=""}}let i=e[2],n="";if(this.options.pedantic){let a=this.rules.other.pedanticHrefTitle.exec(i);a&&(i=a[1],n=a[3])}else n=e[3]?e[3].slice(1,-1):"";return i=i.trim(),this.rules.other.startAngleBracket.test(i)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(r)?i=i.slice(1):i=i.slice(1,-1)),gae(e,{href:i&&i.replace(this.rules.inline.anyPunctuation,"$1"),title:n&&n.replace(this.rules.inline.anyPunctuation,"$1")},e[0],this.lexer,this.rules)}}reflink(t,e){let r;if((r=this.rules.inline.reflink.exec(t))||(r=this.rules.inline.nolink.exec(t))){let i=(r[2]||r[1]).replace(this.rules.other.multipleSpaceGlobal," "),n=e[i.toLowerCase()];if(!n){let a=r[0].charAt(0);return{type:"text",raw:a,text:a}}return gae(r,n,r[0],this.lexer,this.rules)}}emStrong(t,e,r=""){let i=this.rules.inline.emStrongLDelim.exec(t);if(!(!i||i[3]&&r.match(this.rules.other.unicodeAlphaNumeric))&&(!(i[1]||i[2])||!r||this.rules.inline.punctuation.exec(r))){let n=[...i[0]].length-1,a,s,l=n,u=0,h=i[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(h.lastIndex=0,e=e.slice(-1*t.length+n);(i=h.exec(e))!=null;){if(a=i[1]||i[2]||i[3]||i[4]||i[5]||i[6],!a)continue;if(s=[...a].length,i[3]||i[4]){l+=s;continue}else if((i[5]||i[6])&&n%3&&!((n+s)%3)){u+=s;continue}if(l-=s,l>0)continue;s=Math.min(s,s+l+u);let f=[...i[0]][0].length,d=t.slice(0,n+i.index+f+s);if(Math.min(n,s)%2){let m=d.slice(1,-1);return{type:"em",raw:d,text:m,tokens:this.lexer.inlineTokens(m)}}let p=d.slice(2,-2);return{type:"strong",raw:d,text:p,tokens:this.lexer.inlineTokens(p)}}}}codespan(t){let e=this.rules.inline.code.exec(t);if(e){let r=e[2].replace(this.rules.other.newLineCharGlobal," "),i=this.rules.other.nonSpaceChar.test(r),n=this.rules.other.startingSpaceChar.test(r)&&this.rules.other.endingSpaceChar.test(r);return i&&n&&(r=r.substring(1,r.length-1)),{type:"codespan",raw:e[0],text:r}}}br(t){let e=this.rules.inline.br.exec(t);if(e)return{type:"br",raw:e[0]}}del(t){let e=this.rules.inline.del.exec(t);if(e)return{type:"del",raw:e[0],text:e[2],tokens:this.lexer.inlineTokens(e[2])}}autolink(t){let e=this.rules.inline.autolink.exec(t);if(e){let r,i;return e[2]==="@"?(r=e[1],i="mailto:"+r):(r=e[1],i=r),{type:"link",raw:e[0],text:r,href:i,tokens:[{type:"text",raw:r,text:r}]}}}url(t){let e;if(e=this.rules.inline.url.exec(t)){let r,i;if(e[2]==="@")r=e[0],i="mailto:"+r;else{let n;do n=e[0],e[0]=this.rules.inline._backpedal.exec(e[0])?.[0]??"";while(n!==e[0]);r=e[0],e[1]==="www."?i="http://"+e[0]:i=e[0]}return{type:"link",raw:e[0],text:r,href:i,tokens:[{type:"text",raw:r,text:r}]}}}inlineText(t){let e=this.rules.inline.text.exec(t);if(e){let r=this.lexer.state.inRawBlock;return{type:"text",raw:e[0],text:e[0],escaped:r}}}},zh=class VI{static{o(this,"l")}tokens;options;state;tokenizer;inlineQueue;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||_0,this.options.tokenizer=this.options.tokenizer||new s5,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let r={other:Gs,block:n5.normal,inline:bb.normal};this.options.pedantic?(r.block=n5.pedantic,r.inline=bb.pedantic):this.options.gfm&&(r.block=n5.gfm,this.options.breaks?r.inline=bb.breaks:r.inline=bb.gfm),this.tokenizer.rules=r}static get rules(){return{block:n5,inline:bb}}static lex(e,r){return new VI(r).lex(e)}static lexInline(e,r){return new VI(r).inlineTokens(e)}lex(e){e=e.replace(Gs.carriageReturn,` +`),this.blockTokens(e,this.tokens);for(let r=0;r(n=s.call({lexer:this},e,r))?(e=e.substring(n.raw.length),r.push(n),!0):!1))continue;if(n=this.tokenizer.space(e)){e=e.substring(n.raw.length);let s=r.at(-1);n.raw.length===1&&s!==void 0?s.raw+=` +`:r.push(n);continue}if(n=this.tokenizer.code(e)){e=e.substring(n.raw.length);let s=r.at(-1);s?.type==="paragraph"||s?.type==="text"?(s.raw+=(s.raw.endsWith(` +`)?"":` +`)+n.raw,s.text+=` +`+n.text,this.inlineQueue.at(-1).src=s.text):r.push(n);continue}if(n=this.tokenizer.fences(e)){e=e.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.heading(e)){e=e.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.hr(e)){e=e.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.blockquote(e)){e=e.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.list(e)){e=e.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.html(e)){e=e.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.def(e)){e=e.substring(n.raw.length);let s=r.at(-1);s?.type==="paragraph"||s?.type==="text"?(s.raw+=(s.raw.endsWith(` +`)?"":` +`)+n.raw,s.text+=` +`+n.raw,this.inlineQueue.at(-1).src=s.text):this.tokens.links[n.tag]||(this.tokens.links[n.tag]={href:n.href,title:n.title},r.push(n));continue}if(n=this.tokenizer.table(e)){e=e.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.lheading(e)){e=e.substring(n.raw.length),r.push(n);continue}let a=e;if(this.options.extensions?.startBlock){let s=1/0,l=e.slice(1),u;this.options.extensions.startBlock.forEach(h=>{u=h.call({lexer:this},l),typeof u=="number"&&u>=0&&(s=Math.min(s,u))}),s<1/0&&s>=0&&(a=e.substring(0,s+1))}if(this.state.top&&(n=this.tokenizer.paragraph(a))){let s=r.at(-1);i&&s?.type==="paragraph"?(s.raw+=(s.raw.endsWith(` +`)?"":` +`)+n.raw,s.text+=` +`+n.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):r.push(n),i=a.length!==e.length,e=e.substring(n.raw.length);continue}if(n=this.tokenizer.text(e)){e=e.substring(n.raw.length);let s=r.at(-1);s?.type==="text"?(s.raw+=(s.raw.endsWith(` +`)?"":` +`)+n.raw,s.text+=` +`+n.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):r.push(n);continue}if(e){let s="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(s);break}else throw new Error(s)}}return this.state.top=!0,r}inline(e,r=[]){return this.inlineQueue.push({src:e,tokens:r}),r}inlineTokens(e,r=[]){let i=e,n=null;if(this.tokens.links){let l=Object.keys(this.tokens.links);if(l.length>0)for(;(n=this.tokenizer.rules.inline.reflinkSearch.exec(i))!=null;)l.includes(n[0].slice(n[0].lastIndexOf("[")+1,-1))&&(i=i.slice(0,n.index)+"["+"a".repeat(n[0].length-2)+"]"+i.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(n=this.tokenizer.rules.inline.anyPunctuation.exec(i))!=null;)i=i.slice(0,n.index)+"++"+i.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;(n=this.tokenizer.rules.inline.blockSkip.exec(i))!=null;)i=i.slice(0,n.index)+"["+"a".repeat(n[0].length-2)+"]"+i.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);i=this.options.hooks?.emStrongMask?.call({lexer:this},i)??i;let a=!1,s="";for(;e;){a||(s=""),a=!1;let l;if(this.options.extensions?.inline?.some(h=>(l=h.call({lexer:this},e,r))?(e=e.substring(l.raw.length),r.push(l),!0):!1))continue;if(l=this.tokenizer.escape(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.tag(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.link(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(l.raw.length);let h=r.at(-1);l.type==="text"&&h?.type==="text"?(h.raw+=l.raw,h.text+=l.text):r.push(l);continue}if(l=this.tokenizer.emStrong(e,i,s)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.codespan(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.br(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.del(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.autolink(e)){e=e.substring(l.raw.length),r.push(l);continue}if(!this.state.inLink&&(l=this.tokenizer.url(e))){e=e.substring(l.raw.length),r.push(l);continue}let u=e;if(this.options.extensions?.startInline){let h=1/0,f=e.slice(1),d;this.options.extensions.startInline.forEach(p=>{d=p.call({lexer:this},f),typeof d=="number"&&d>=0&&(h=Math.min(h,d))}),h<1/0&&h>=0&&(u=e.substring(0,h+1))}if(l=this.tokenizer.inlineText(u)){e=e.substring(l.raw.length),l.raw.slice(-1)!=="_"&&(s=l.raw.slice(-1)),a=!0;let h=r.at(-1);h?.type==="text"?(h.raw+=l.raw,h.text+=l.text):r.push(l);continue}if(e){let h="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(h);break}else throw new Error(h)}}return r}},o5=class{static{o(this,"P")}options;parser;constructor(t){this.options=t||_0}space(t){return""}code({text:t,lang:e,escaped:r}){let i=(e||"").match(Gs.notSpaceStart)?.[0],n=t.replace(Gs.endingNewline,"")+` +`;return i?'
'+(r?n:Eu(n,!0))+`
+`:"
"+(r?n:Eu(n,!0))+`
+`}blockquote({tokens:t}){return`
+${this.parser.parse(t)}
+`}html({text:t}){return t}def(t){return""}heading({tokens:t,depth:e}){return`${this.parser.parseInline(t)} +`}hr(t){return`
+`}list(t){let e=t.ordered,r=t.start,i="";for(let s=0;s +`+i+" +`}listitem(t){let e="";if(t.task){let r=this.checkbox({checked:!!t.checked});t.loose?t.tokens[0]?.type==="paragraph"?(t.tokens[0].text=r+" "+t.tokens[0].text,t.tokens[0].tokens&&t.tokens[0].tokens.length>0&&t.tokens[0].tokens[0].type==="text"&&(t.tokens[0].tokens[0].text=r+" "+Eu(t.tokens[0].tokens[0].text),t.tokens[0].tokens[0].escaped=!0)):t.tokens.unshift({type:"text",raw:r+" ",text:r+" ",escaped:!0}):e+=r+" "}return e+=this.parser.parse(t.tokens,!!t.loose),`
  • ${e}
  • +`}checkbox({checked:t}){return"'}paragraph({tokens:t}){return`

    ${this.parser.parseInline(t)}

    +`}table(t){let e="",r="";for(let n=0;n${i}`),` + +`+e+` +`+i+`
    +`}tablerow({text:t}){return` +${t} +`}tablecell(t){let e=this.parser.parseInline(t.tokens),r=t.header?"th":"td";return(t.align?`<${r} align="${t.align}">`:`<${r}>`)+e+` +`}strong({tokens:t}){return`${this.parser.parseInline(t)}`}em({tokens:t}){return`${this.parser.parseInline(t)}`}codespan({text:t}){return`${Eu(t,!0)}`}br(t){return"
    "}del({tokens:t}){return`${this.parser.parseInline(t)}`}link({href:t,title:e,tokens:r}){let i=this.parser.parseInline(r),n=pae(t);if(n===null)return i;t=n;let a='
    ",a}image({href:t,title:e,text:r,tokens:i}){i&&(r=this.parser.parseInline(i,this.parser.textRenderer));let n=pae(t);if(n===null)return Eu(r);t=n;let a=`${r}{let s=n[a].flat(1/0);r=r.concat(this.walkTokens(s,e))}):n.tokens&&(r=r.concat(this.walkTokens(n.tokens,e)))}}return r}use(...t){let e=this.defaults.extensions||{renderers:{},childTokens:{}};return t.forEach(r=>{let i={...r};if(i.async=this.defaults.async||i.async||!1,r.extensions&&(r.extensions.forEach(n=>{if(!n.name)throw new Error("extension name required");if("renderer"in n){let a=e.renderers[n.name];a?e.renderers[n.name]=function(...s){let l=n.renderer.apply(this,s);return l===!1&&(l=a.apply(this,s)),l}:e.renderers[n.name]=n.renderer}if("tokenizer"in n){if(!n.level||n.level!=="block"&&n.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let a=e[n.level];a?a.unshift(n.tokenizer):e[n.level]=[n.tokenizer],n.start&&(n.level==="block"?e.startBlock?e.startBlock.push(n.start):e.startBlock=[n.start]:n.level==="inline"&&(e.startInline?e.startInline.push(n.start):e.startInline=[n.start]))}"childTokens"in n&&n.childTokens&&(e.childTokens[n.name]=n.childTokens)}),i.extensions=e),r.renderer){let n=this.defaults.renderer||new o5(this.defaults);for(let a in r.renderer){if(!(a in n))throw new Error(`renderer '${a}' does not exist`);if(["options","parser"].includes(a))continue;let s=a,l=r.renderer[s],u=n[s];n[s]=(...h)=>{let f=l.apply(n,h);return f===!1&&(f=u.apply(n,h)),f||""}}i.renderer=n}if(r.tokenizer){let n=this.defaults.tokenizer||new s5(this.defaults);for(let a in r.tokenizer){if(!(a in n))throw new Error(`tokenizer '${a}' does not exist`);if(["options","rules","lexer"].includes(a))continue;let s=a,l=r.tokenizer[s],u=n[s];n[s]=(...h)=>{let f=l.apply(n,h);return f===!1&&(f=u.apply(n,h)),f}}i.tokenizer=n}if(r.hooks){let n=this.defaults.hooks||new kb;for(let a in r.hooks){if(!(a in n))throw new Error(`hook '${a}' does not exist`);if(["options","block"].includes(a))continue;let s=a,l=r.hooks[s],u=n[s];kb.passThroughHooks.has(a)?n[s]=h=>{if(this.defaults.async&&kb.passThroughHooksRespectAsync.has(a))return Promise.resolve(l.call(n,h)).then(d=>u.call(n,d));let f=l.call(n,h);return u.call(n,f)}:n[s]=(...h)=>{let f=l.apply(n,h);return f===!1&&(f=u.apply(n,h)),f}}i.hooks=n}if(r.walkTokens){let n=this.defaults.walkTokens,a=r.walkTokens;i.walkTokens=function(s){let l=[];return l.push(a.call(this,s)),n&&(l=l.concat(n.call(this,s))),l}}this.defaults={...this.defaults,...i}}),this}setOptions(t){return this.defaults={...this.defaults,...t},this}lexer(t,e){return zh.lex(t,e??this.defaults)}parser(t,e){return Gh.parse(t,e??this.defaults)}parseMarkdown(t){return(e,r)=>{let i={...r},n={...this.defaults,...i},a=this.onError(!!n.silent,!!n.async);if(this.defaults.async===!0&&i.async===!1)return a(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof e>"u"||e===null)return a(new Error("marked(): input parameter is undefined or null"));if(typeof e!="string")return a(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected"));n.hooks&&(n.hooks.options=n,n.hooks.block=t);let s=n.hooks?n.hooks.provideLexer():t?zh.lex:zh.lexInline,l=n.hooks?n.hooks.provideParser():t?Gh.parse:Gh.parseInline;if(n.async)return Promise.resolve(n.hooks?n.hooks.preprocess(e):e).then(u=>s(u,n)).then(u=>n.hooks?n.hooks.processAllTokens(u):u).then(u=>n.walkTokens?Promise.all(this.walkTokens(u,n.walkTokens)).then(()=>u):u).then(u=>l(u,n)).then(u=>n.hooks?n.hooks.postprocess(u):u).catch(a);try{n.hooks&&(e=n.hooks.preprocess(e));let u=s(e,n);n.hooks&&(u=n.hooks.processAllTokens(u)),n.walkTokens&&this.walkTokens(u,n.walkTokens);let h=l(u,n);return n.hooks&&(h=n.hooks.postprocess(h)),h}catch(u){return a(u)}}}onError(t,e){return r=>{if(r.message+=` +Please report this to https://github.com/markedjs/marked.`,t){let i="

    An error occurred:

    "+Eu(r.message+"",!0)+"
    ";return e?Promise.resolve(i):i}if(e)return Promise.reject(r);throw r}}},A0=new tVe;o(bi,"d");bi.options=bi.setOptions=function(t){return A0.setOptions(t),bi.defaults=A0.defaults,yae(bi.defaults),bi};bi.getDefaults=WI;bi.defaults=_0;bi.use=function(...t){return A0.use(...t),bi.defaults=A0.defaults,yae(bi.defaults),bi};bi.walkTokens=function(t,e){return A0.walkTokens(t,e)};bi.parseInline=A0.parseInline;bi.Parser=Gh;bi.parser=Gh.parse;bi.Renderer=o5;bi.TextRenderer=ZI;bi.Lexer=zh;bi.lexer=zh.lex;bi.Tokenizer=s5;bi.Hooks=kb;bi.parse=bi;sFt=bi.options,oFt=bi.setOptions,lFt=bi.use,cFt=bi.walkTokens,uFt=bi.parseInline,hFt=Gh.parse,fFt=zh.lex});function rVe(t,{markdownAutoWrap:e}){let i=t.replace(//g,` +`).replace(/\n{2,}/g,` +`);return Z4(i)}function Dae(t){return t.split(/\\n|\n|/gi).map(e=>e.trim().match(/<[^>]+>|[^\s<>]+/g)?.map(r=>({content:r,type:"normal"}))??[])}function Lae(t,e={}){let r=rVe(t,e),i=bi.lexer(r),n=[[]],a=0;function s(l,u="normal"){l.type==="text"?l.text.split(` +`).forEach((f,d)=>{d!==0&&(a++,n.push([])),f.split(" ").forEach(p=>{p=p.replace(/'/g,"'"),p&&n[a].push({content:p,type:u})})}):l.type==="strong"||l.type==="em"?l.tokens.forEach(h=>{s(h,l.type)}):l.type==="html"&&n[a].push({content:l.text,type:"normal"})}return o(s,"processNode"),i.forEach(l=>{l.type==="paragraph"?l.tokens?.forEach(u=>{s(u)}):l.type==="html"?n[a].push({content:l.text,type:"normal"}):n[a].push({content:l.raw,type:"normal"})}),n}function Rae(t){return t?`

    ${t.replace(/\\n|\n/g,"
    ")}

    `:""}function Nae(t,{markdownAutoWrap:e}={}){let r=bi.lexer(t);function i(n){return n.type==="text"?e===!1?n.text.replace(/\n */g,"
    ").replace(/ /g," "):n.text.replace(/\n */g,"
    "):n.type==="strong"?`${n.tokens?.map(i).join("")}`:n.type==="em"?`${n.tokens?.map(i).join("")}`:n.type==="paragraph"?`

    ${n.tokens?.map(i).join("")}

    `:n.type==="space"?"":n.type==="html"?`${n.text}`:n.type==="escape"?n.text:(Q.warn(`Unsupported markdown: ${n.type}`),n.raw)}return o(i,"output"),r.map(i).join("")}var Iae=P(()=>{"use strict";_ae();oL();bt();o(rVe,"preprocessMarkdown");o(Dae,"nonMarkdownToLines");o(Lae,"markdownToLines");o(Rae,"nonMarkdownToHTML");o(Nae,"markdownToHTML")});function iVe(t){return Intl.Segmenter?[...new Intl.Segmenter().segment(t)].map(e=>e.segment):[...t]}function nVe(t,e){let r=iVe(e.content);return Mae(t,[],r,e.type)}function Mae(t,e,r,i){if(r.length===0)return[{content:e.join(""),type:i},{content:"",type:i}];let[n,...a]=r,s=[...e,n];return t([{content:s.join(""),type:i}])?Mae(t,s,a,i):(e.length===0&&n&&(e.push(n),r.shift()),[{content:e.join(""),type:i},{content:r.join(""),type:i}])}function Oae(t,e){if(t.some(({content:r})=>r.includes(` +`)))throw new Error("splitLineToFitWidth does not support newlines in the line");return JI(t,e)}function JI(t,e,r=[],i=[]){if(t.length===0)return i.length>0&&r.push(i),r.length>0?r:[];let n="";t[0].content===" "&&(n=" ",t.shift());let a=t.shift()??{content:" ",type:"normal"},s=[...i];if(n!==""&&s.push({content:n,type:"normal"}),s.push(a),e(s))return JI(t,e,r,s);if(i.length>0)r.push(i),t.unshift(a);else if(a.content){let[l,u]=nVe(e,a);r.push([l]),u.content&&t.unshift(u)}return JI(t,e,r)}var Pae=P(()=>{"use strict";o(iVe,"splitTextToChars");o(nVe,"splitWordToFitWidth");o(Mae,"splitWordToFitWidthRecursion");o(Oae,"splitLineToFitWidth");o(JI,"splitLineToFitWidthRecursion")});function Bae(t,e){e&&t.attr("style",e)}async function aVe(t,e,r,i,n=!1,a=Lt()){let s=t.append("foreignObject");s.attr("width",`${Math.min(10*r,Fae)}px`),s.attr("height",`${Math.min(10*r,Fae)}px`);let l=s.append("xhtml:div"),u=sn(e.label)?await Rg(e.label.replace(lt.lineBreakRegex,` +`),a):Tr(e.label,a),h=e.isNode?"nodeLabel":"edgeLabel",f=l.append("span");f.html(u),Bae(f,e.labelStyle),f.attr("class",`${h} ${i}`),Bae(l,e.labelStyle),l.style("display","table-cell"),l.style("white-space","nowrap"),l.style("line-height","1.5"),r!==Number.POSITIVE_INFINITY&&(l.style("max-width",r+"px"),l.style("text-align","center")),l.attr("xmlns","http://www.w3.org/1999/xhtml"),n&&l.attr("class","labelBkg");let d=l.node().getBoundingClientRect();return d.width===r&&(l.style("display","table"),l.style("white-space","break-spaces"),l.style("width",r+"px"),d=l.node().getBoundingClientRect()),s.node()}function eM(t,e,r,i=!1){let n=t.append("tspan").attr("class","text-outer-tspan").attr("x",0).attr("y",e*r-.1+"em").attr("dy",r+"em");return i&&n.attr("text-anchor","middle"),n}function sVe(t,e,r){let i=t.append("text"),n=eM(i,1,e);tM(n,r);let a=n.node().getComputedTextLength();return i.remove(),a}function zae(t,e,r){let i=t.append("text"),n=eM(i,1,e);tM(n,[{content:r,type:"normal"}]);let a=n.node()?.getBoundingClientRect();return a&&i.remove(),a}function oVe(t,e,r,i=!1,n=!1){let s=e.append("g"),l=s.insert("rect").attr("class","background").attr("style","stroke: none"),u=s.append("text").attr("y","-10.1");n&&u.attr("text-anchor","middle");let h=0;for(let f of r){let d=o(m=>sVe(s,1.1,m)<=t,"checkWidth"),p=d(f)?[f]:Oae(f,d);for(let m of p){let g=eM(u,h,1.1,n);tM(g,m),h++}}if(i){let f=u.node().getBBox(),d=2;return l.attr("x",f.x-d).attr("y",f.y-d).attr("width",f.width+2*d).attr("height",f.height+2*d),s.node()}else return u.node()}function $ae(t){let e=/&(amp|lt|gt);/g;return t.replace(e,(r,i)=>{switch(i){case"amp":return"&";case"lt":return"<";case"gt":return">";default:return r}})}function tM(t,e){t.text(""),e.forEach((r,i)=>{let n=t.append("tspan").attr("font-style",r.type==="em"?"italic":"normal").attr("class","text-inner-tspan").attr("font-weight",r.type==="strong"?"bold":"normal");i===0?n.text($ae(r.content)):n.text(" "+$ae(r.content))})}async function lVe(t,e={}){let r=[];t.replace(/(fa[bklrs]?):fa-([\w-]+)/g,(n,a,s)=>(r.push((async()=>{let l=`${a}:${s}`;return await WK(l)?await fo(l,void 0,{class:"label-icon"}):``})()),n));let i=await Promise.all(r);return t.replace(/(fa[bklrs]?):fa-([\w-]+)/g,()=>i.shift()??"")}var Fae,Vi,To=P(()=>{"use strict";Pr();Vr();bt();Iae();er();lu();Pae();Sr();o(Bae,"applyStyle");Fae=16384;o(aVe,"addHtmlSpan");o(eM,"createTspan");o(sVe,"computeWidthOfText");o(zae,"computeDimensionOfText");o(oVe,"createFormattedText");o($ae,"decodeHTMLEntities");o(tM,"updateTextContentAndStyles");o(lVe,"replaceIconSubstring");Vi=o(async(t,e="",{style:r="",isTitle:i=!1,classes:n="",useHtmlLabels:a=!0,markdown:s=!0,isNode:l=!0,width:u=200,addSvgBackground:h=!1}={},f)=>{if(Q.debug("XYZ createText",e,r,i,n,a,l,"addSvgBackground: ",h),a){let d=s?Nae(e,f):Rae(e),p=await lVe(zs(d),f),m=e.replace(/\\\\/g,"\\"),g={isNode:l,label:sn(e)?m:p,labelStyle:r.replace("fill:","color:")};return await aVe(t,g,u,n,h,f)}else{let d=zs(e.replace(//g,"
    ")),p=s?Lae(d.replace("
    ","
    "),f):Dae(d),m=oVe(u,t,p,e?h:!1,!l);if(l){/stroke:/.exec(r)&&(r=r.replace("stroke:","lineColor:"));let g=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/color:/g,"fill:");Ze(m).attr("style",g)}else{let g=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/background:/g,"fill:");Ze(m).select("rect").attr("style",g.replace(/background:/g,"fill:"));let y=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/color:/g,"fill:");Ze(m).select("text").attr("style",y)}return i?Ze(m).selectAll("tspan.text-outer-tspan").classed("title-row",!0):Ze(m).selectAll("tspan.text-outer-tspan").classed("row",!0),m}},"createText")});async function u5(t,e){let r=t.getElementsByTagName("img");if(!r||r.length===0)return;let i=e.replace(/]*>/g,"").trim()==="";await Promise.all([...r].map(n=>new Promise(a=>{function s(){if(n.style.display="flex",n.style.flexDirection="column",i){let l=ge().fontSize?ge().fontSize:window.getComputedStyle(document.body).fontSize,u=5,[h=fr.fontSize]=$s(l),f=h*u+"px";n.style.minWidth=f,n.style.maxWidth=f}else n.style.width="100%";a(n)}o(s,"setupImage"),setTimeout(()=>{n.complete&&s()}),n.addEventListener("error",s),n.addEventListener("load",s)})))}var rM=P(()=>{"use strict";Ut();wa();er();o(u5,"configureLabelImages")});function rr(t){let e=t.map((r,i)=>`${i===0?"M":"L"}${r.x},${r.y}`);return e.push("Z"),e.join(" ")}function Ml(t,e,r,i,n,a){let s=[],u=r-t,h=i-e,f=u/a,d=2*Math.PI/f,p=e+h/2;for(let m=0;m<=50;m++){let g=m/50,y=t+g*u,v=p+n*Math.sin(d*(y-t));s.push({x:y,y:v})}return s}function D0(t,e,r,i,n,a){let s=[],l=n*Math.PI/180,f=(a*Math.PI/180-l)/(i-1);for(let d=0;du.tagName==="path"),r=document.createElementNS("http://www.w3.org/2000/svg","path"),i=e.map(u=>u.getAttribute("d")).filter(u=>u!==null).join(" ");r.setAttribute("d",i);let n=e.find(u=>u.getAttribute("fill")!=="none"),a=e.find(u=>u.getAttribute("stroke")!=="none"),s=o((u,h)=>u?.getAttribute(h)??void 0,"getAttr");if(n){let u={fill:s(n,"fill"),"fill-opacity":s(n,"fill-opacity")??"1"};Object.entries(u).forEach(([h,f])=>{f&&r.setAttribute(h,f)})}if(a){let u={stroke:s(a,"stroke"),"stroke-width":s(a,"stroke-width")??"1","stroke-opacity":s(a,"stroke-opacity")??"1"};Object.entries(u).forEach(([h,f])=>{f&&r.setAttribute(h,f)})}let l=document.createElementNS("http://www.w3.org/2000/svg","g");return l.appendChild(r),l}var vt,h5,at,mt,zt=P(()=>{"use strict";To();Ut();Sr();Pr();Vr();er();rM();vt=o(async(t,e,r)=>{let i,n=e.useHtmlLabels||ls(ge()?.htmlLabels);r?i=r:i="node default";let a=t.insert("g").attr("class",i).attr("id",e.domId||e.id),s=a.insert("g").attr("class","label").attr("style",xi(e.labelStyle)),l;e.label===void 0?l="":l=typeof e.label=="string"?e.label:e.label[0];let u=!!e.icon||!!e.img,h=e.labelType==="markdown",f=await Vi(s,Tr(zs(l),ge()),{useHtmlLabels:n,width:e.width||ge().flowchart?.wrappingWidth,classes:h?"markdown-node-label":"",style:e.labelStyle,addSvgBackground:u,markdown:h},ge()),d=f.getBBox(),p=(e?.padding??0)/2;if(n){let m=f.children[0],g=Ze(f);await u5(m,l),d=m.getBoundingClientRect(),g.attr("width",d.width),g.attr("height",d.height)}return n?s.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"):s.attr("transform","translate(0, "+-d.height/2+")"),e.centerLabel&&s.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"),s.insert("rect",":first-child"),{shapeSvg:a,bbox:d,halfPadding:p,label:s}},"labelHelper"),h5=o(async(t,e,r)=>{let i=r.useHtmlLabels??Or(ge()),n=t.insert("g").attr("class","label").attr("style",r.labelStyle||""),a=await Vi(n,Tr(zs(e),ge()),{useHtmlLabels:i,width:r.width||ge()?.flowchart?.wrappingWidth,style:r.labelStyle,addSvgBackground:!!r.icon||!!r.img}),s=a.getBBox(),l=r.padding/2;if(Or(ge())){let u=a.children[0],h=Ze(a);s=u.getBoundingClientRect(),h.attr("width",s.width),h.attr("height",s.height)}return i?n.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"):n.attr("transform","translate(0, "+-s.height/2+")"),r.centerLabel&&n.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"),n.insert("rect",":first-child"),{shapeSvg:t,bbox:s,halfPadding:l,label:n}},"insertLabel"),at=o((t,e)=>{let r=e.node().getBBox();t.width=r.width,t.height=r.height},"updateNodeBounds"),mt=o((t,e)=>(t.look==="handDrawn"?"rough-node":"node")+" "+t.cssClasses+" "+(e||""),"getNodeClasses");o(rr,"createPathFromPoints");o(Ml,"generateFullSineWavePoints");o(D0,"generateCirclePoints");o(iM,"mergePaths")});function cVe(t,e){return t.intersect(e)}var Gae,Vae=P(()=>{"use strict";o(cVe,"intersectNode");Gae=cVe});function uVe(t,e,r,i){var n=t.x,a=t.y,s=n-i.x,l=a-i.y,u=Math.sqrt(e*e*l*l+r*r*s*s),h=Math.abs(e*r*s/u);i.x{"use strict";o(uVe,"intersectEllipse");f5=uVe});function hVe(t,e,r){return f5(t,e,e,r)}var qae,Wae=P(()=>{"use strict";nM();o(hVe,"intersectCircle");qae=hVe});function fVe(t,e,r,i){{let n=e.y-t.y,a=t.x-e.x,s=e.x*t.y-t.x*e.y,l=n*r.x+a*r.y+s,u=n*i.x+a*i.y+s,h=1e-6;if(l!==0&&u!==0&&Uae(l,u))return;let f=i.y-r.y,d=r.x-i.x,p=i.x*r.y-r.x*i.y,m=f*t.x+d*t.y+p,g=f*e.x+d*e.y+p;if(Math.abs(m)0}var Hae,Yae=P(()=>{"use strict";o(fVe,"intersectLine");o(Uae,"sameSign");Hae=fVe});function dVe(t,e,r){let i=t.x,n=t.y,a=[],s=Number.POSITIVE_INFINITY,l=Number.POSITIVE_INFINITY;typeof e.forEach=="function"?e.forEach(function(f){s=Math.min(s,f.x),l=Math.min(l,f.y)}):(s=Math.min(s,e.x),l=Math.min(l,e.y));let u=i-t.width/2-s,h=n-t.height/2-l;for(let f=0;f1&&a.sort(function(f,d){let p=f.x-r.x,m=f.y-r.y,g=Math.sqrt(p*p+m*m),y=d.x-r.x,v=d.y-r.y,x=Math.sqrt(y*y+v*v);return g{"use strict";Yae();o(dVe,"intersectPolygon");jae=dVe});var pVe,hd,aM=P(()=>{"use strict";pVe=o((t,e)=>{var r=t.x,i=t.y,n=e.x-r,a=e.y-i,s=t.width/2,l=t.height/2,u,h;return Math.abs(a)*s>Math.abs(n)*l?(a<0&&(l=-l),u=a===0?0:l*n/a,h=l):(n<0&&(s=-s),u=s,h=n===0?0:s*a/n),{x:r+u,y:i+h}},"intersectRect"),hd=pVe});var et,Xt=P(()=>{"use strict";Vae();Wae();nM();Xae();aM();et={node:Gae,circle:qae,ellipse:f5,polygon:jae,rect:hd}});var Kae,Su,mVe,Eb,tt,st,gVe,Ht=P(()=>{"use strict";Ut();Kae=o(t=>{let{handDrawnSeed:e}=ge();return{fill:t,hachureAngle:120,hachureGap:4,fillWeight:2,roughness:.7,stroke:t,seed:e}},"solidStateFill"),Su=o(t=>{let e=mVe([...t.cssCompiledStyles||[],...t.cssStyles||[],...t.labelStyle||[]]);return{stylesMap:e,stylesArray:[...e]}},"compileStyles"),mVe=o(t=>{let e=new Map;return t.forEach(r=>{let[i,n]=r.split(":");e.set(i.trim(),n?.trim())}),e},"styles2Map"),Eb=o(t=>t==="color"||t==="font-size"||t==="font-family"||t==="font-weight"||t==="font-style"||t==="text-decoration"||t==="text-align"||t==="text-transform"||t==="line-height"||t==="letter-spacing"||t==="word-spacing"||t==="text-shadow"||t==="text-overflow"||t==="white-space"||t==="word-wrap"||t==="word-break"||t==="overflow-wrap"||t==="hyphens","isLabelStyle"),tt=o(t=>{let{stylesArray:e}=Su(t),r=[],i=[],n=[],a=[];return e.forEach(s=>{let l=s[0];Eb(l)?r.push(s.join(":")+" !important"):(i.push(s.join(":")+" !important"),l.includes("stroke")&&n.push(s.join(":")+" !important"),l==="fill"&&a.push(s.join(":")+" !important"))}),{labelStyles:r.join(";"),nodeStyles:i.join(";"),stylesArray:e,borderStyles:n,backgroundStyles:a}},"styles2String"),st=o((t,e)=>{let{themeVariables:r,handDrawnSeed:i}=ge(),{nodeBorder:n,mainBkg:a}=r,{stylesMap:s}=Su(t);return Object.assign({roughness:.7,fill:s.get("fill")||a,fillStyle:"hachure",fillWeight:4,hachureGap:5.2,stroke:s.get("stroke")||n,seed:i,strokeWidth:s.get("stroke-width")?.replace("px","")||1.3,fillLineDash:[0,0],strokeLineDash:gVe(s.get("stroke-dasharray"))},e)},"userNodeOverrides"),gVe=o(t=>{if(!t)return[0,0];let e=t.trim().split(/\s+/).map(Number);if(e.length===1){let n=isNaN(e[0])?0:e[0];return[n,n]}let r=isNaN(e[0])?0:e[0],i=isNaN(e[1])?0:e[1];return[r,i]},"getStrokeDashArray")});function sM(t,e,r){if(t&&t.length){let[i,n]=e,a=Math.PI/180*r,s=Math.cos(a),l=Math.sin(a);for(let u of t){let[h,f]=u;u[0]=(h-i)*s-(f-n)*l+i,u[1]=(h-i)*l+(f-n)*s+n}}}function yVe(t,e){return t[0]===e[0]&&t[1]===e[1]}function vVe(t,e,r,i=1){let n=r,a=Math.max(e,.1),s=t[0]&&t[0][0]&&typeof t[0][0]=="number"?[t]:t,l=[0,0];if(n)for(let h of s)sM(h,l,n);let u=(function(h,f,d){let p=[];for(let b of h){let T=[...b];yVe(T[0],T[T.length-1])||T.push([T[0][0],T[0][1]]),T.length>2&&p.push(T)}let m=[];f=Math.max(f,.1);let g=[];for(let b of p)for(let T=0;Tb.yminT.ymin?1:b.xT.x?1:b.ymax===T.ymax?0:(b.ymax-T.ymax)/Math.abs(b.ymax-T.ymax))),!g.length)return m;let y=[],v=g[0].ymin,x=0;for(;y.length||g.length;){if(g.length){let b=-1;for(let T=0;Tv);T++)b=T;g.splice(0,b+1).forEach((T=>{y.push({s:v,edge:T})}))}if(y=y.filter((b=>!(b.edge.ymax<=v))),y.sort(((b,T)=>b.edge.x===T.edge.x?0:(b.edge.x-T.edge.x)/Math.abs(b.edge.x-T.edge.x))),(d!==1||x%f==0)&&y.length>1)for(let b=0;b=y.length)break;let w=y[b].edge,k=y[T].edge;m.push([[Math.round(w.x),v],[Math.round(k.x),v]])}v+=d,y.forEach((b=>{b.edge.x=b.edge.x+d*b.edge.islope})),x++}return m})(s,a,i);if(n){for(let h of s)sM(h,l,-n);(function(h,f,d){let p=[];h.forEach((m=>p.push(...m))),sM(p,f,d)})(u,l,-n)}return u}function Db(t,e){var r;let i=e.hachureAngle+90,n=e.hachureGap;n<0&&(n=4*e.strokeWidth),n=Math.round(Math.max(n,.1));let a=1;return e.roughness>=1&&(((r=e.randomizer)===null||r===void 0?void 0:r.next())||Math.random())>.7&&(a=n),vVe(t,n,i,a||1)}function T5(t){let e=t[0],r=t[1];return Math.sqrt(Math.pow(e[0]-r[0],2)+Math.pow(e[1]-r[1],2))}function lM(t,e){return t.type===e}function kM(t){let e=[],r=(function(s){let l=new Array;for(;s!=="";)if(s.match(/^([ \t\r\n,]+)/))s=s.substr(RegExp.$1.length);else if(s.match(/^([aAcChHlLmMqQsStTvVzZ])/))l[l.length]={type:xVe,text:RegExp.$1},s=s.substr(RegExp.$1.length);else{if(!s.match(/^(([-+]?[0-9]+(\.[0-9]*)?|[-+]?\.[0-9]+)([eE][-+]?[0-9]+)?)/))return[];l[l.length]={type:oM,text:`${parseFloat(RegExp.$1)}`},s=s.substr(RegExp.$1.length)}return l[l.length]={type:Qae,text:""},l})(t),i="BOD",n=0,a=r[n];for(;!lM(a,Qae);){let s=0,l=[];if(i==="BOD"){if(a.text!=="M"&&a.text!=="m")return kM("M0,0"+t);n++,s=d5[a.text],i=a.text}else lM(a,oM)?s=d5[i]:(n++,s=d5[a.text],i=a.text);if(!(n+sf%2?h+r:h+e));a.push({key:"C",data:u}),e=u[4],r=u[5];break}case"Q":a.push({key:"Q",data:[...l]}),e=l[2],r=l[3];break;case"q":{let u=l.map(((h,f)=>f%2?h+r:h+e));a.push({key:"Q",data:u}),e=u[2],r=u[3];break}case"A":a.push({key:"A",data:[...l]}),e=l[5],r=l[6];break;case"a":e+=l[5],r+=l[6],a.push({key:"A",data:[l[0],l[1],l[2],l[3],l[4],e,r]});break;case"H":a.push({key:"H",data:[...l]}),e=l[0];break;case"h":e+=l[0],a.push({key:"H",data:[e]});break;case"V":a.push({key:"V",data:[...l]}),r=l[0];break;case"v":r+=l[0],a.push({key:"V",data:[r]});break;case"S":a.push({key:"S",data:[...l]}),e=l[2],r=l[3];break;case"s":{let u=l.map(((h,f)=>f%2?h+r:h+e));a.push({key:"S",data:u}),e=u[2],r=u[3];break}case"T":a.push({key:"T",data:[...l]}),e=l[0],r=l[1];break;case"t":e+=l[0],r+=l[1],a.push({key:"T",data:[e,r]});break;case"Z":case"z":a.push({key:"Z",data:[]}),e=i,r=n}return a}function sse(t){let e=[],r="",i=0,n=0,a=0,s=0,l=0,u=0;for(let{key:h,data:f}of t){switch(h){case"M":e.push({key:"M",data:[...f]}),[i,n]=f,[a,s]=f;break;case"C":e.push({key:"C",data:[...f]}),i=f[4],n=f[5],l=f[2],u=f[3];break;case"L":e.push({key:"L",data:[...f]}),[i,n]=f;break;case"H":i=f[0],e.push({key:"L",data:[i,n]});break;case"V":n=f[0],e.push({key:"L",data:[i,n]});break;case"S":{let d=0,p=0;r==="C"||r==="S"?(d=i+(i-l),p=n+(n-u)):(d=i,p=n),e.push({key:"C",data:[d,p,...f]}),l=f[0],u=f[1],i=f[2],n=f[3];break}case"T":{let[d,p]=f,m=0,g=0;r==="Q"||r==="T"?(m=i+(i-l),g=n+(n-u)):(m=i,g=n);let y=i+2*(m-i)/3,v=n+2*(g-n)/3,x=d+2*(m-d)/3,b=p+2*(g-p)/3;e.push({key:"C",data:[y,v,x,b,d,p]}),l=m,u=g,i=d,n=p;break}case"Q":{let[d,p,m,g]=f,y=i+2*(d-i)/3,v=n+2*(p-n)/3,x=m+2*(d-m)/3,b=g+2*(p-g)/3;e.push({key:"C",data:[y,v,x,b,m,g]}),l=d,u=p,i=m,n=g;break}case"A":{let d=Math.abs(f[0]),p=Math.abs(f[1]),m=f[2],g=f[3],y=f[4],v=f[5],x=f[6];d===0||p===0?(e.push({key:"C",data:[i,n,v,x,v,x]}),i=v,n=x):(i!==v||n!==x)&&(ose(i,n,v,x,d,p,m,g,y).forEach((function(b){e.push({key:"C",data:b})})),i=v,n=x);break}case"Z":e.push({key:"Z",data:[]}),i=a,n=s}r=h}return e}function Sb(t,e,r){return[t*Math.cos(r)-e*Math.sin(r),t*Math.sin(r)+e*Math.cos(r)]}function ose(t,e,r,i,n,a,s,l,u,h){let f=(d=s,Math.PI*d/180);var d;let p=[],m=0,g=0,y=0,v=0;if(h)[m,g,y,v]=h;else{[t,e]=Sb(t,e,-f),[r,i]=Sb(r,i,-f);let _=(t-r)/2,D=(e-i)/2,N=_*_/(n*n)+D*D/(a*a);N>1&&(N=Math.sqrt(N),n*=N,a*=N);let R=n*n,B=a*a,O=R*B-R*D*D-B*_*_,$=R*D*D+B*_*_,z=(l===u?-1:1)*Math.sqrt(Math.abs(O/$));y=z*n*D/a+(t+r)/2,v=z*-a*_/n+(e+i)/2,m=Math.asin(parseFloat(((e-v)/a).toFixed(9))),g=Math.asin(parseFloat(((i-v)/a).toFixed(9))),tg&&(m-=2*Math.PI),!u&&g>m&&(g-=2*Math.PI)}let x=g-m;if(Math.abs(x)>120*Math.PI/180){let _=g,D=r,N=i;g=u&&g>m?m+120*Math.PI/180*1:m+120*Math.PI/180*-1,p=ose(r=y+n*Math.cos(g),i=v+a*Math.sin(g),D,N,n,a,s,0,u,[g,_,y,v])}x=g-m;let b=Math.cos(m),T=Math.sin(m),w=Math.cos(g),k=Math.sin(g),C=Math.tan(x/4),E=4/3*n*C,S=4/3*a*C,L=[t,e],M=[t+E*T,e-S*b],I=[r+E*k,i-S*w],A=[r,i];if(M[0]=2*L[0]-M[0],M[1]=2*L[1]-M[1],h)return[M,I,A].concat(p);{p=[M,I,A].concat(p);let _=[];for(let D=0;D2){let n=[];for(let a=0;a2*Math.PI&&(m=0,g=2*Math.PI);let y=2*Math.PI/u.curveStepCount,v=Math.min(y/2,(g-m)/2),x=ise(v,h,f,d,p,m,g,1,u);if(!u.disableMultiStroke){let b=ise(v,h,f,d,p,m,g,1.5,u);x.push(...b)}return s&&(l?x.push(...fd(h,f,h+d*Math.cos(m),f+p*Math.sin(m),u),...fd(h,f,h+d*Math.cos(g),f+p*Math.sin(g),u)):x.push({op:"lineTo",data:[h,f]},{op:"lineTo",data:[h+d*Math.cos(m),f+p*Math.sin(m)]})),{type:"path",ops:x}}function ese(t,e){let r=sse(ase(kM(t))),i=[],n=[0,0],a=[0,0];for(let{key:s,data:l}of r)switch(s){case"M":a=[l[0],l[1]],n=[l[0],l[1]];break;case"L":i.push(...fd(a[0],a[1],l[0],l[1],e)),a=[l[0],l[1]];break;case"C":{let[u,h,f,d,p,m]=l;i.push(...kVe(u,h,f,d,p,m,a,e)),a=[p,m];break}case"Z":i.push(...fd(a[0],a[1],n[0],n[1],e)),a=[n[0],n[1]]}return{type:"path",ops:i}}function cM(t,e){let r=[];for(let i of t)if(i.length){let n=e.maxRandomnessOffset||0,a=i.length;if(a>2){r.push({op:"move",data:[i[0][0]+xr(n,e),i[0][1]+xr(n,e)]});for(let s=1;s500?.4:-.0016668*u+1.233334;let f=n.maxRandomnessOffset||0;f*f*100>l&&(f=u/10);let d=f/2,p=.2+.2*use(n),m=n.bowing*n.maxRandomnessOffset*(i-e)/200,g=n.bowing*n.maxRandomnessOffset*(t-r)/200;m=xr(m,n,h),g=xr(g,n,h);let y=[],v=o(()=>xr(d,n,h),"M"),x=o(()=>xr(f,n,h),"k"),b=n.preserveVertices;return a&&(s?y.push({op:"move",data:[t+(b?0:v()),e+(b?0:v())]}):y.push({op:"move",data:[t+(b?0:xr(f,n,h)),e+(b?0:xr(f,n,h))]})),s?y.push({op:"bcurveTo",data:[m+t+(r-t)*p+v(),g+e+(i-e)*p+v(),m+t+2*(r-t)*p+v(),g+e+2*(i-e)*p+v(),r+(b?0:v()),i+(b?0:v())]}):y.push({op:"bcurveTo",data:[m+t+(r-t)*p+x(),g+e+(i-e)*p+x(),m+t+2*(r-t)*p+x(),g+e+2*(i-e)*p+x(),r+(b?0:x()),i+(b?0:x())]}),y}function p5(t,e,r){if(!t.length)return[];let i=[];i.push([t[0][0]+xr(e,r),t[0][1]+xr(e,r)]),i.push([t[0][0]+xr(e,r),t[0][1]+xr(e,r)]);for(let n=1;n3){let a=[],s=1-r.curveTightness;n.push({op:"move",data:[t[1][0],t[1][1]]});for(let l=1;l+21&&n.push(l)):n.push(l),n.push(t[e+3])}else{let u=t[e+0],h=t[e+1],f=t[e+2],d=t[e+3],p=L0(u,h,.5),m=L0(h,f,.5),g=L0(f,d,.5),y=L0(p,m,.5),v=L0(m,g,.5),x=L0(y,v,.5);xM([u,p,y,x],0,r,n),xM([x,v,g,d],0,r,n)}var a,s;return n}function wVe(t,e){return b5(t,0,t.length,e)}function b5(t,e,r,i,n){let a=n||[],s=t[e],l=t[r-1],u=0,h=1;for(let f=e+1;fu&&(u=d,h=f)}return Math.sqrt(u)>i?(b5(t,e,h+1,i,a),b5(t,h,r,i,a)):(a.length||a.push(s),a.push(l)),a}function uM(t,e=.15,r){let i=[],n=(t.length-1)/3;for(let a=0;a0?b5(i,0,i.length,r):i}var _b,hM,fM,dM,pM,mM,ko,gM,xVe,oM,Qae,d5,bVe,el,D1,bM,m5,TM,rt,Yt=P(()=>{"use strict";o(sM,"t");o(yVe,"e");o(vVe,"s");o(Db,"n");_b=class{static{o(this,"o")}constructor(e){this.helper=e}fillPolygons(e,r){return this._fillPolygons(e,r)}_fillPolygons(e,r){let i=Db(e,r);return{type:"fillSketch",ops:this.renderLines(i,r)}}renderLines(e,r){let i=[];for(let n of e)i.push(...this.helper.doubleLineOps(n[0][0],n[0][1],n[1][0],n[1][1],r));return i}};o(T5,"a");hM=class extends _b{static{o(this,"h")}fillPolygons(e,r){let i=r.hachureGap;i<0&&(i=4*r.strokeWidth),i=Math.max(i,.1);let n=Db(e,Object.assign({},r,{hachureGap:i})),a=Math.PI/180*r.hachureAngle,s=[],l=.5*i*Math.cos(a),u=.5*i*Math.sin(a);for(let[h,f]of n)T5([h,f])&&s.push([[h[0]-l,h[1]+u],[...f]],[[h[0]+l,h[1]-u],[...f]]);return{type:"fillSketch",ops:this.renderLines(s,r)}}},fM=class extends _b{static{o(this,"r")}fillPolygons(e,r){let i=this._fillPolygons(e,r),n=Object.assign({},r,{hachureAngle:r.hachureAngle+90}),a=this._fillPolygons(e,n);return i.ops=i.ops.concat(a.ops),i}},dM=class{static{o(this,"i")}constructor(e){this.helper=e}fillPolygons(e,r){let i=Db(e,r=Object.assign({},r,{hachureAngle:0}));return this.dotsOnLines(i,r)}dotsOnLines(e,r){let i=[],n=r.hachureGap;n<0&&(n=4*r.strokeWidth),n=Math.max(n,.1);let a=r.fillWeight;a<0&&(a=r.strokeWidth/2);let s=n/4;for(let l of e){let u=T5(l),h=u/n,f=Math.ceil(h)-1,d=u-f*n,p=(l[0][0]+l[1][0])/2-n/4,m=Math.min(l[0][1],l[1][1]);for(let g=0;g{let l=T5(s),u=Math.floor(l/(i+n)),h=(l+n-u*(i+n))/2,f=s[0],d=s[1];f[0]>d[0]&&(f=s[1],d=s[0]);let p=Math.atan((d[1]-f[1])/(d[0]-f[0]));for(let m=0;m{let s=T5(a),l=Math.round(s/(2*r)),u=a[0],h=a[1];u[0]>h[0]&&(u=a[1],h=a[0]);let f=Math.atan((h[1]-u[1])/(h[0]-u[0]));for(let d=0;d2*Math.PI&&(E=0,S=2*Math.PI);let L=(S-E)/b.curveStepCount,M=[];for(let I=E;I<=S;I+=L)M.push([T+k*Math.cos(I),w+C*Math.sin(I)]);return M.push([T+k*Math.cos(S),w+C*Math.sin(S)]),M.push([T,w]),_1([M],b)})(e,r,i,n,a,s,h));return h.stroke!==el&&f.push(d),this._d("arc",f,h)}curve(e,r){let i=this._o(r),n=[],a=Zae(e,i);if(i.fill&&i.fill!==el)if(i.fillStyle==="solid"){let s=Zae(e,Object.assign(Object.assign({},i),{disableMultiStroke:!0,roughness:i.roughness?i.roughness+i.fillShapeRoughnessGain:0}));n.push({type:"fillPath",ops:this._mergedShape(s.ops)})}else{let s=[],l=e;if(l.length){let u=typeof l[0][0]=="number"?[l]:l;for(let h of u)h.length<3?s.push(...h):h.length===3?s.push(...uM(nse([h[0],h[0],h[1],h[2]]),10,(1+i.roughness)/2)):s.push(...uM(nse(h),10,(1+i.roughness)/2))}s.length&&n.push(_1([s],i))}return i.stroke!==el&&n.push(a),this._d("curve",n,i)}polygon(e,r){let i=this._o(r),n=[],a=g5(e,!0,i);return i.fill&&(i.fillStyle==="solid"?n.push(cM([e],i)):n.push(_1([e],i))),i.stroke!==el&&n.push(a),this._d("polygon",n,i)}path(e,r){let i=this._o(r),n=[];if(!e)return this._d("path",n,i);e=(e||"").replace(/\n/g," ").replace(/(-\s)/g,"-").replace("/(ss)/g"," ");let a=i.fill&&i.fill!=="transparent"&&i.fill!==el,s=i.stroke!==el,l=!!(i.simplification&&i.simplification<1),u=(function(f,d,p){let m=sse(ase(kM(f))),g=[],y=[],v=[0,0],x=[],b=o(()=>{x.length>=4&&y.push(...uM(x,d)),x=[]},"i"),T=o(()=>{b(),y.length&&(g.push(y),y=[])},"c");for(let{key:k,data:C}of m)switch(k){case"M":T(),v=[C[0],C[1]],y.push(v);break;case"L":b(),y.push([C[0],C[1]]);break;case"C":if(!x.length){let E=y.length?y[y.length-1]:v;x.push([E[0],E[1]])}x.push([C[0],C[1]]),x.push([C[2],C[3]]),x.push([C[4],C[5]]);break;case"Z":b(),y.push([v[0],v[1]])}if(T(),!p)return g;let w=[];for(let k of g){let C=wVe(k,p);C.length&&w.push(C)}return w})(e,1,l?4-4*(i.simplification||1):(1+i.roughness)/2),h=ese(e,i);if(a)if(i.fillStyle==="solid")if(u.length===1){let f=ese(e,Object.assign(Object.assign({},i),{disableMultiStroke:!0,roughness:i.roughness?i.roughness+i.fillShapeRoughnessGain:0}));n.push({type:"fillPath",ops:this._mergedShape(f.ops)})}else n.push(cM(u,i));else n.push(_1(u,i));return s&&(l?u.forEach((f=>{n.push(g5(f,!1,i))})):n.push(h)),this._d("path",n,i)}opsToPath(e,r){let i="";for(let n of e.ops){let a=typeof r=="number"&&r>=0?n.data.map((s=>+s.toFixed(r))):n.data;switch(n.op){case"move":i+=`M${a[0]} ${a[1]} `;break;case"bcurveTo":i+=`C${a[0]} ${a[1]}, ${a[2]} ${a[3]}, ${a[4]} ${a[5]} `;break;case"lineTo":i+=`L${a[0]} ${a[1]} `}}return i.trim()}toPaths(e){let r=e.sets||[],i=e.options||this.defaultOptions,n=[];for(let a of r){let s=null;switch(a.type){case"path":s={d:this.opsToPath(a),stroke:i.stroke,strokeWidth:i.strokeWidth,fill:el};break;case"fillPath":s={d:this.opsToPath(a),stroke:el,strokeWidth:0,fill:i.fill||el};break;case"fillSketch":s=this.fillSketch(a,i)}s&&n.push(s)}return n}fillSketch(e,r){let i=r.fillWeight;return i<0&&(i=r.strokeWidth/2),{d:this.opsToPath(e),stroke:r.fill||el,strokeWidth:i,fill:el}}_mergedShape(e){return e.filter(((r,i)=>i===0||r.op!=="move"))}},bM=class{static{o(this,"st")}constructor(e,r){this.canvas=e,this.ctx=this.canvas.getContext("2d"),this.gen=new D1(r)}draw(e){let r=e.sets||[],i=e.options||this.getDefaultOptions(),n=this.ctx,a=e.options.fixedDecimalPlaceDigits;for(let s of r)switch(s.type){case"path":n.save(),n.strokeStyle=i.stroke==="none"?"transparent":i.stroke,n.lineWidth=i.strokeWidth,i.strokeLineDash&&n.setLineDash(i.strokeLineDash),i.strokeLineDashOffset&&(n.lineDashOffset=i.strokeLineDashOffset),this._drawToContext(n,s,a),n.restore();break;case"fillPath":{n.save(),n.fillStyle=i.fill||"";let l=e.shape==="curve"||e.shape==="polygon"||e.shape==="path"?"evenodd":"nonzero";this._drawToContext(n,s,a,l),n.restore();break}case"fillSketch":this.fillSketch(n,s,i)}}fillSketch(e,r,i){let n=i.fillWeight;n<0&&(n=i.strokeWidth/2),e.save(),i.fillLineDash&&e.setLineDash(i.fillLineDash),i.fillLineDashOffset&&(e.lineDashOffset=i.fillLineDashOffset),e.strokeStyle=i.fill||"",e.lineWidth=n,this._drawToContext(e,r,i.fixedDecimalPlaceDigits),e.restore()}_drawToContext(e,r,i,n="nonzero"){e.beginPath();for(let a of r.ops){let s=typeof i=="number"&&i>=0?a.data.map((l=>+l.toFixed(i))):a.data;switch(a.op){case"move":e.moveTo(s[0],s[1]);break;case"bcurveTo":e.bezierCurveTo(s[0],s[1],s[2],s[3],s[4],s[5]);break;case"lineTo":e.lineTo(s[0],s[1])}}r.type==="fillPath"?e.fill(n):e.stroke()}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}line(e,r,i,n,a){let s=this.gen.line(e,r,i,n,a);return this.draw(s),s}rectangle(e,r,i,n,a){let s=this.gen.rectangle(e,r,i,n,a);return this.draw(s),s}ellipse(e,r,i,n,a){let s=this.gen.ellipse(e,r,i,n,a);return this.draw(s),s}circle(e,r,i,n){let a=this.gen.circle(e,r,i,n);return this.draw(a),a}linearPath(e,r){let i=this.gen.linearPath(e,r);return this.draw(i),i}polygon(e,r){let i=this.gen.polygon(e,r);return this.draw(i),i}arc(e,r,i,n,a,s,l=!1,u){let h=this.gen.arc(e,r,i,n,a,s,l,u);return this.draw(h),h}curve(e,r){let i=this.gen.curve(e,r);return this.draw(i),i}path(e,r){let i=this.gen.path(e,r);return this.draw(i),i}},m5="http://www.w3.org/2000/svg",TM=class{static{o(this,"ot")}constructor(e,r){this.svg=e,this.gen=new D1(r)}draw(e){let r=e.sets||[],i=e.options||this.getDefaultOptions(),n=this.svg.ownerDocument||window.document,a=n.createElementNS(m5,"g"),s=e.options.fixedDecimalPlaceDigits;for(let l of r){let u=null;switch(l.type){case"path":u=n.createElementNS(m5,"path"),u.setAttribute("d",this.opsToPath(l,s)),u.setAttribute("stroke",i.stroke),u.setAttribute("stroke-width",i.strokeWidth+""),u.setAttribute("fill","none"),i.strokeLineDash&&u.setAttribute("stroke-dasharray",i.strokeLineDash.join(" ").trim()),i.strokeLineDashOffset&&u.setAttribute("stroke-dashoffset",`${i.strokeLineDashOffset}`);break;case"fillPath":u=n.createElementNS(m5,"path"),u.setAttribute("d",this.opsToPath(l,s)),u.setAttribute("stroke","none"),u.setAttribute("stroke-width","0"),u.setAttribute("fill",i.fill||""),e.shape!=="curve"&&e.shape!=="polygon"||u.setAttribute("fill-rule","evenodd");break;case"fillSketch":u=this.fillSketch(n,l,i)}u&&a.appendChild(u)}return a}fillSketch(e,r,i){let n=i.fillWeight;n<0&&(n=i.strokeWidth/2);let a=e.createElementNS(m5,"path");return a.setAttribute("d",this.opsToPath(r,i.fixedDecimalPlaceDigits)),a.setAttribute("stroke",i.fill||""),a.setAttribute("stroke-width",n+""),a.setAttribute("fill","none"),i.fillLineDash&&a.setAttribute("stroke-dasharray",i.fillLineDash.join(" ").trim()),i.fillLineDashOffset&&a.setAttribute("stroke-dashoffset",`${i.fillLineDashOffset}`),a}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}opsToPath(e,r){return this.gen.opsToPath(e,r)}line(e,r,i,n,a){let s=this.gen.line(e,r,i,n,a);return this.draw(s)}rectangle(e,r,i,n,a){let s=this.gen.rectangle(e,r,i,n,a);return this.draw(s)}ellipse(e,r,i,n,a){let s=this.gen.ellipse(e,r,i,n,a);return this.draw(s)}circle(e,r,i,n){let a=this.gen.circle(e,r,i,n);return this.draw(a)}linearPath(e,r){let i=this.gen.linearPath(e,r);return this.draw(i)}polygon(e,r){let i=this.gen.polygon(e,r);return this.draw(i)}arc(e,r,i,n,a,s,l=!1,u){let h=this.gen.arc(e,r,i,n,a,s,l,u);return this.draw(h)}curve(e,r){let i=this.gen.curve(e,r);return this.draw(i)}path(e,r){let i=this.gen.path(e,r);return this.draw(i)}},rt={canvas:o((t,e)=>new bM(t,e),"canvas"),svg:o((t,e)=>new TM(t,e),"svg"),generator:o(t=>new D1(t),"generator"),newSeed:o(()=>D1.newSeed(),"newSeed")}});function hse(t,e){let{labelStyles:r}=tt(e);e.labelStyle=r;let i=mt(e),n=i;i||(n="anchor");let a=t.insert("g").attr("class",n).attr("id",e.domId||e.id),s=1,{cssStyles:l}=e,u=rt.svg(a),h=st(e,{fill:"black",stroke:"none",fillStyle:"solid"});e.look!=="handDrawn"&&(h.roughness=0);let f=u.circle(0,0,s*2,h),d=a.insert(()=>f,":first-child");return d.attr("class","anchor").attr("style",xi(l)),at(e,d),e.intersect=function(p){return Q.info("Circle intersect",e,s,p),et.circle(e,s,p)},a}var fse=P(()=>{"use strict";bt();zt();Xt();Ht();Yt();er();o(hse,"anchor")});function dse(t,e,r,i,n,a,s){let u=(t+r)/2,h=(e+i)/2,f=Math.atan2(i-e,r-t),d=(r-t)/2,p=(i-e)/2,m=d/n,g=p/a,y=Math.sqrt(m**2+g**2);if(y>1)throw new Error("The given radii are too small to create an arc between the points.");let v=Math.sqrt(1-y**2),x=u+v*a*Math.sin(f)*(s?-1:1),b=h-v*n*Math.cos(f)*(s?-1:1),T=Math.atan2((e-b)/a,(t-x)/n),k=Math.atan2((i-b)/a,(r-x)/n)-T;s&&k<0&&(k+=2*Math.PI),!s&&k>0&&(k-=2*Math.PI);let C=[];for(let E=0;E<20;E++){let S=E/19,L=T+S*k,M=x+n*Math.cos(L),I=b+a*Math.sin(L);C.push({x:M,y:I})}return C}function EVe(t,e,r){let[i,n]=[e,r].sort((a,s)=>s-a);return n*(1-Math.sqrt(1-(t/i/2)**2))}async function pse(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.padding??0,a=e.look==="neo"?16:n,s=e.look==="neo"?12:n,l=o(L=>L+s,"calcTotalHeight"),u=o(L=>{let M=L/2;return[M/(2.5+L/50),M]},"calcEllipseRadius"),{shapeSvg:h,bbox:f}=await vt(t,e,mt(e)),d=l(e?.height?e?.height:f.height),[p,m]=u(d),g=EVe(d,p,m),v=(e?.width?e?.width:f.width)+a*2+g-g,x=d,{cssStyles:b}=e,T=[{x:v/2,y:-x/2},{x:-v/2,y:-x/2},...dse(-v/2,-x/2,-v/2,x/2,p,m,!1),{x:v/2,y:x/2},...dse(v/2,x/2,v/2,-x/2,p,m,!0)],w=rt.svg(h),k=st(e,{});e.look!=="handDrawn"&&(k.roughness=0,k.fillStyle="solid");let C=rr(T),E=w.path(C,k),S=h.insert(()=>E,":first-child");return S.attr("class","basic label-container outer-path"),b&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",b),i&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",i),S.attr("transform",`translate(${p/2}, 0)`),at(e,S),e.intersect=function(L){return et.polygon(e,T,L)},h}var mse=P(()=>{"use strict";zt();Xt();Ht();Yt();o(dse,"generateArcPoints");o(EVe,"calculateArcSagitta");o(pse,"bowTieRect")});function ds(t,e,r,i){return t.insert("polygon",":first-child").attr("points",i.map(function(n){return n.x+","+n.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-e/2+","+r/2+")")}var Vh=P(()=>{"use strict";o(ds,"insertPolygonShape")});async function gse(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.padding??0,a=e.look==="neo"?28:n,s=e.look==="neo"?24:n,{shapeSvg:l,bbox:u}=await vt(t,e,mt(e)),h=(e?.width??u.width)+(e.look==="neo"?a*2:a+k5),f=(e?.height??u.height)+(e.look==="neo"?s*2:s),d=0,p=h,m=-f,g=0,y=[{x:d+k5,y:m},{x:p,y:m},{x:p,y:g},{x:d,y:g},{x:d,y:m+k5},{x:d+k5,y:m}],v,{cssStyles:x}=e;if(e.look==="handDrawn"){let b=rt.svg(l),T=st(e,{}),w=rr(y),k=b.path(w,T);v=l.insert(()=>k,":first-child").attr("transform",`translate(${-h/2}, ${f/2})`),x&&v.attr("style",x)}else v=ds(l,h,f,y);return i&&v.attr("style",i),at(e,v),e.intersect=function(b){return et.polygon(e,y,b)},l}var k5,yse=P(()=>{"use strict";zt();Xt();Ht();Yt();Vh();zt();k5=12;o(gse,"card")});function vse(t,e){let{nodeStyles:r}=tt(e);e.label="";let i=t.insert("g").attr("class",mt(e)).attr("id",e.domId??e.id),{cssStyles:n}=e,a=Math.max(28,e.width??0),s=[{x:0,y:a/2},{x:a/2,y:0},{x:0,y:-a/2},{x:-a/2,y:0}],l=rt.svg(i),u=st(e,{});e.look!=="handDrawn"&&(u.roughness=0,u.fillStyle="solid");let h=rr(s),f=l.path(h,u),d=i.insert(()=>f,":first-child");return n&&e.look!=="handDrawn"&&d.selectAll("path").attr("style",n),r&&e.look!=="handDrawn"&&d.selectAll("path").attr("style",r),e.width=28,e.height=28,e.intersect=function(p){return et.polygon(e,s,p)},i}var xse=P(()=>{"use strict";Xt();Yt();Ht();zt();o(vse,"choice")});async function C5(t,e,r){let{labelStyles:i,nodeStyles:n}=tt(e);e.labelStyle=i;let{shapeSvg:a,bbox:s,halfPadding:l}=await vt(t,e,mt(e)),u=16,h=r?.padding??l,f=e.look==="neo"?s.width/2+u*2:s.width/2+h,d,{cssStyles:p}=e;if(e.look==="handDrawn"){let m=rt.svg(a),g=st(e,{}),y=m.circle(0,0,f*2,g);d=a.insert(()=>y,":first-child"),d.attr("class","basic label-container").attr("style",xi(p))}else d=a.insert("circle",":first-child").attr("class","basic label-container").attr("style",n).attr("r",f).attr("cx",0).attr("cy",0);return at(e,d),e.calcIntersect=function(m,g){let y=m.width/2;return et.circle(m,y,g)},e.intersect=function(m){return Q.info("Circle intersect",e,f,m),et.circle(e,f,m)},a}var CM=P(()=>{"use strict";Yt();bt();er();Xt();Ht();zt();o(C5,"circle")});function SVe(t){let e=Math.cos(Math.PI/4),r=Math.sin(Math.PI/4),i=t*2,n={x:i/2*e,y:i/2*r},a={x:-(i/2)*e,y:i/2*r},s={x:-(i/2)*e,y:-(i/2)*r},l={x:i/2*e,y:-(i/2)*r};return`M ${a.x},${a.y} L ${l.x},${l.y} + M ${n.x},${n.y} L ${s.x},${s.y}`}function bse(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r,e.label="";let n=t.insert("g").attr("class",mt(e)).attr("id",e.domId??e.id),a=Math.max(30,e?.width??0),{cssStyles:s}=e,l=rt.svg(n),u=st(e,{});e.look!=="handDrawn"&&(u.roughness=0,u.fillStyle="solid");let h=l.circle(0,0,a*2,u),f=SVe(a),d=l.path(f,u),p=n.insert(()=>h,":first-child");return p.insert(()=>d),p.attr("class","outer-path"),s&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",s),i&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",i),at(e,p),e.intersect=function(m){return Q.info("crossedCircle intersect",e,{radius:a,point:m}),et.circle(e,a,m)},n}var Tse=P(()=>{"use strict";bt();zt();Ht();Yt();Xt();o(SVe,"createLine");o(bse,"crossedCircle")});function dd(t,e,r,i=100,n=0,a=180){let s=[],l=n*Math.PI/180,f=(a*Math.PI/180-l)/(i-1);for(let d=0;dk,":first-child").attr("stroke-opacity",0),C.insert(()=>T,":first-child"),C.attr("class","text"),p&&e.look!=="handDrawn"&&C.selectAll("path").attr("style",p),i&&e.look!=="handDrawn"&&C.selectAll("path").attr("style",i),C.attr("transform",`translate(${d}, 0)`),s.attr("transform",`translate(${-h/2+d-(a.x-(a.left??0))},${-f/2+(e.padding??0)/2-(a.y-(a.top??0))})`),at(e,C),e.intersect=function(E){return et.polygon(e,g,E)},n}var Cse=P(()=>{"use strict";zt();Xt();Ht();Yt();o(dd,"generateCirclePoints");o(kse,"curlyBraceLeft")});function pd(t,e,r,i=100,n=0,a=180){let s=[],l=n*Math.PI/180,f=(a*Math.PI/180-l)/(i-1);for(let d=0;dk,":first-child").attr("stroke-opacity",0),C.insert(()=>T,":first-child"),C.attr("class","text"),p&&e.look!=="handDrawn"&&C.selectAll("path").attr("style",p),i&&e.look!=="handDrawn"&&C.selectAll("path").attr("style",i),C.attr("transform",`translate(${-d}, 0)`),s.attr("transform",`translate(${-h/2+(e.padding??0)/2-(a.x-(a.left??0))},${-f/2+(e.padding??0)/2-(a.y-(a.top??0))})`),at(e,C),e.intersect=function(E){return et.polygon(e,g,E)},n}var Ese=P(()=>{"use strict";zt();Xt();Ht();Yt();o(pd,"generateCirclePoints");o(wse,"curlyBraceRight")});function ps(t,e,r,i=100,n=0,a=180){let s=[],l=n*Math.PI/180,f=(a*Math.PI/180-l)/(i-1);for(let d=0;dL,":first-child").attr("stroke-opacity",0),M.insert(()=>w,":first-child"),M.insert(()=>E,":first-child"),M.attr("class","text"),p&&e.look!=="handDrawn"&&M.selectAll("path").attr("style",p),i&&e.look!=="handDrawn"&&M.selectAll("path").attr("style",i),M.attr("transform",`translate(${d-d/4}, 0)`),s.attr("transform",`translate(${-h/2+(e.padding??0)/2-(a.x-(a.left??0))},${-f/2+(e.padding??0)/2-(a.y-(a.top??0))})`),at(e,M),e.intersect=function(I){return et.polygon(e,y,I)},n}var Ase=P(()=>{"use strict";zt();Xt();Ht();Yt();o(ps,"generateCirclePoints");o(Sse,"curlyBraces")});async function _se(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.padding??0,a=e.look==="neo"?16:n,s=e.look==="neo"?12:n,l=20,u=5,{shapeSvg:h,bbox:f}=await vt(t,e,mt(e)),d=Math.max(l,(f.width+a*2)*1.25,e?.width??0),p=Math.max(u,f.height+s*2,e?.height??0),m=p/2,{cssStyles:g}=e,y=rt.svg(h),v=st(e,{});e.look!=="handDrawn"&&(v.roughness=0,v.fillStyle="solid");let x=d,b=p,T=x-m,w=b/4,k=[{x:T,y:0},{x:w,y:0},{x:0,y:b/2},{x:w,y:b},{x:T,y:b},...D0(-T,-b/2,m,50,270,90)],C=rr(k),E=y.path(C,v),S=h.insert(()=>E,":first-child");return S.attr("class","basic label-container outer-path"),g&&e.look!=="handDrawn"&&S.selectChildren("path").attr("style",g),i&&e.look!=="handDrawn"&&S.selectChildren("path").attr("style",i),S.attr("transform",`translate(${-d/2}, ${-p/2})`),at(e,S),e.intersect=function(L){return et.polygon(e,k,L)},h}var Dse=P(()=>{"use strict";zt();Xt();Ht();Yt();o(_se,"curvedTrapezoid")});async function Nse(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.padding??0,a=e.look==="neo"?24:n,s=e.look==="neo"?24:n;if(e.width||e.height){let v=e.width??0;e.width=(e.width??0)-s,e.widthk,":first-child"),g=l.insert(()=>w,":first-child"),g.attr("class","basic label-container"),y&&g.attr("style",y)}else{let v=AVe(0,0,f,m,d,p);g=l.insert("path",":first-child").attr("d",v).attr("class","basic label-container outer-path").attr("style",xi(y)).attr("style",i)}return g.attr("label-offset-y",p),g.attr("transform",`translate(${-f/2}, ${-(m/2+p)})`),at(e,g),h.attr("transform",`translate(${-(u.width/2)-(u.x-(u.left??0))}, ${-(u.height/2)+(e.padding??0)/1.5-(u.y-(u.top??0))})`),e.intersect=function(v){let x=et.rect(e,v),b=x.x-(e.x??0);if(d!=0&&(Math.abs(b)<(e.width??0)/2||Math.abs(b)==(e.width??0)/2&&Math.abs(x.y-(e.y??0))>(e.height??0)/2-p)){let T=p*p*(1-b*b/(d*d));T>0&&(T=Math.sqrt(T)),T=p-T,v.y-(e.y??0)>0&&(T=-T),x.y+=T}return x},l}var AVe,_Ve,DVe,Lse,Rse,Ise=P(()=>{"use strict";zt();Xt();Ht();Yt();er();AVe=o((t,e,r,i,n,a)=>[`M${t},${e+a}`,`a${n},${a} 0,0,0 ${r},0`,`a${n},${a} 0,0,0 ${-r},0`,`l0,${i}`,`a${n},${a} 0,0,0 ${r},0`,`l0,${-i}`].join(" "),"createCylinderPathD"),_Ve=o((t,e,r,i,n,a)=>[`M${t},${e+a}`,`M${t+r},${e+a}`,`a${n},${a} 0,0,0 ${-r},0`,`l0,${i}`,`a${n},${a} 0,0,0 ${r},0`,`l0,${-i}`].join(" "),"createOuterCylinderPathD"),DVe=o((t,e,r,i,n,a)=>[`M${t-r/2},${-i/2}`,`a${n},${a} 0,0,0 ${r},0`].join(" "),"createInnerCylinderPathD"),Lse=8,Rse=8;o(Nse,"cylinder")});async function Mse(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.look==="neo"?16:e.padding??0,a=e.look==="neo"?16:e.padding??0,{shapeSvg:s,bbox:l,label:u}=await vt(t,e,mt(e)),h=l.width+n,f=l.height+a,d=f*.2,p=-h/2,m=-f/2-d/2,{cssStyles:g}=e,y=rt.svg(s),v=st(e,{});e.look!=="handDrawn"&&(v.roughness=0,v.fillStyle="solid");let x=[{x:p,y:m+d},{x:-p,y:m+d},{x:-p,y:-m},{x:p,y:-m},{x:p,y:m},{x:-p,y:m},{x:-p,y:m+d}],b=y.polygon(x.map(w=>[w.x,w.y]),v),T=s.insert(()=>b,":first-child");return T.attr("class","basic label-container outer-path"),g&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",g),i&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",i),u.attr("transform",`translate(${p+(e.padding??0)/2-(l.x-(l.left??0))}, ${m+d+(e.padding??0)/2-(l.y-(l.top??0))})`),at(e,T),e.intersect=function(w){return et.rect(e,w)},s}var Ose=P(()=>{"use strict";zt();Xt();Ht();Yt();o(Mse,"dividedRectangle")});async function Pse(t,e){let{labelStyles:r,nodeStyles:i}=tt(e),n=e.look==="neo"?12:5;e.labelStyle=r;let a=e.padding??0,s=e.look==="neo"?16:a,{shapeSvg:l,bbox:u}=await vt(t,e,mt(e)),h=(e?.width?e?.width/2:u.width/2)+(s??0),f=h-n,d,{cssStyles:p}=e;if(e.look==="handDrawn"){let m=rt.svg(l),g=st(e,{roughness:.2,strokeWidth:2.5}),y=st(e,{roughness:.2,strokeWidth:1.5}),v=m.circle(0,0,h*2,g),x=m.circle(0,0,f*2,y);d=l.insert("g",":first-child"),d.attr("class",xi(e.cssClasses)).attr("style",xi(p)),d.node()?.appendChild(v),d.node()?.appendChild(x)}else{d=l.insert("g",":first-child");let m=d.insert("circle",":first-child"),g=d.insert("circle");d.attr("class","basic label-container").attr("style",i),m.attr("class","outer-circle").attr("style",i).attr("r",h).attr("cx",0).attr("cy",0),g.attr("class","inner-circle").attr("style",i).attr("r",f).attr("cx",0).attr("cy",0)}return at(e,d),e.intersect=function(m){return Q.info("DoubleCircle intersect",e,h,m),et.circle(e,h,m)},l}var Bse=P(()=>{"use strict";bt();zt();Xt();Ht();Yt();er();o(Pse,"doublecircle")});function Fse(t,e,{config:{themeVariables:r}}){let{labelStyles:i,nodeStyles:n}=tt(e);e.label="",e.labelStyle=i;let a=t.insert("g").attr("class",mt(e)).attr("id",e.domId??e.id),s=7,{cssStyles:l}=e,u=rt.svg(a),{nodeBorder:h}=r,f=st(e,{fillStyle:"solid"});e.look!=="handDrawn"&&(f.roughness=0);let d=u.circle(0,0,s*2,f),p=a.insert(()=>d,":first-child");return p.selectAll("path").attr("style",`fill: ${h} !important;`),l&&l.length>0&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",l),n&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",n),at(e,p),e.intersect=function(m){return Q.info("filledCircle intersect",e,{radius:s,point:m}),et.circle(e,s,m)},a}var $se=P(()=>{"use strict";Yt();bt();Xt();Ht();zt();o(Fse,"filledCircle")});async function Vse(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.padding??0,a=e.look==="neo"?n*2:n;(e.width||e.height)&&(e.height=e?.height??0,e.heightx,":first-child").attr("transform",`translate(${-f/2}, ${f/2})`).attr("class","outer-path");return m&&e.look!=="handDrawn"&&b.selectChildren("path").attr("style",m),i&&e.look!=="handDrawn"&&b.selectChildren("path").attr("style",i),e.width=h,e.height=f,at(e,b),u.attr("transform",`translate(${-l.width/2-(l.x-(l.left??0))}, ${-f/2+(e.padding??0)/2+(l.y-(l.top??0))})`),e.intersect=function(T){return Q.info("Triangle intersect",e,p,T),et.polygon(e,p,T)},s}var zse,Gse,qse=P(()=>{"use strict";bt();zt();Xt();Ht();Yt();zt();zse=10,Gse=10;o(Vse,"flippedTriangle")});function Wse(t,e,{dir:r,config:{state:i,themeVariables:n}}){let{nodeStyles:a}=tt(e);e.label="";let s=t.insert("g").attr("class",mt(e)).attr("id",e.domId??e.id),{cssStyles:l}=e,u=Math.max(70,e?.width??0),h=Math.max(10,e?.height??0);r==="LR"&&(u=Math.max(10,e?.width??0),h=Math.max(70,e?.height??0));let f=-1*u/2,d=-1*h/2,p=rt.svg(s),m=st(e,{stroke:n.lineColor,fill:n.lineColor});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=p.rectangle(f,d,u,h,m),y=s.insert(()=>g,":first-child");l&&e.look!=="handDrawn"&&y.selectAll("path").attr("style",l),a&&e.look!=="handDrawn"&&y.selectAll("path").attr("style",a),at(e,y);let v=i?.padding??0;return e.width&&e.height&&(e.width+=v/2||0,e.height+=v/2||0),e.intersect=function(x){return et.rect(e,x)},s}var Use=P(()=>{"use strict";Yt();Xt();Ht();zt();o(Wse,"forkJoin")});async function Hse(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=15,a=10,s=e.look==="neo"?16:e.padding??0,l=e.look==="neo"?12:e.padding??0;(e.width||e.height)&&(e.height=(e?.height??0)-l*2,e.heightb,":first-child");return T.attr("class","basic label-container outer-path"),m&&e.look!=="handDrawn"&&T.selectChildren("path").attr("style",m),i&&e.look!=="handDrawn"&&T.selectChildren("path").attr("style",i),at(e,T),e.intersect=function(w){return Q.info("Pill intersect",e,{radius:p,point:w}),et.polygon(e,v,w)},u}var Yse=P(()=>{"use strict";bt();zt();Xt();Ht();Yt();o(Hse,"halfRoundedRectangle")});async function jse(t,e){let{labelStyles:r,nodeStyles:i}=tt(e),n=e.look==="neo"?3.5:4;e.labelStyle=r;let a=e.padding??0,s=70,l=32,u=e.look==="neo"?s:a,h=e.look==="neo"?l:a;if(e.width||e.height){let T=(e.height??0)/n;e.width=(e?.width??0)-2*T-h,e.height=(e.height??0)-u}let{shapeSvg:f,bbox:d}=await vt(t,e,mt(e)),p=(e?.height?e?.height:d.height)+u,m=p/n,g=(e?.width?e?.width:d.width)+2*m+h,y=[{x:m,y:0},{x:g-m,y:0},{x:g,y:-p/2},{x:g-m,y:-p},{x:m,y:-p},{x:0,y:-p/2}],v,{cssStyles:x}=e;if(e.look==="handDrawn"){let b=rt.svg(f),T=st(e,{}),w=LVe(0,0,g,p,m),k=b.path(w,T);v=f.insert(()=>k,":first-child").attr("transform",`translate(${-g/2}, ${p/2})`),x&&v.attr("style",x)}else v=ds(f,g,p,y);return i&&v.attr("style",i),e.width=g,e.height=p,at(e,v),e.intersect=function(b){return et.polygon(e,y,b)},f}var LVe,Xse=P(()=>{"use strict";zt();Xt();Ht();Yt();Vh();LVe=o((t,e,r,i,n)=>[`M${t+n},${e}`,`L${t+r-n},${e}`,`L${t+r},${e-i/2}`,`L${t+r-n},${e-i}`,`L${t+n},${e-i}`,`L${t},${e-i/2}`,"Z"].join(" "),"createHexagonPathD");o(jse,"hexagon")});async function Kse(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.label="",e.labelStyle=r;let{shapeSvg:n}=await vt(t,e,mt(e)),a=Math.max(30,e?.width??0),s=Math.max(30,e?.height??0),{cssStyles:l}=e,u=rt.svg(n),h=st(e,{});e.look!=="handDrawn"&&(h.roughness=0,h.fillStyle="solid");let f=[{x:0,y:0},{x:a,y:0},{x:0,y:s},{x:a,y:s}],d=rr(f),p=u.path(d,h),m=n.insert(()=>p,":first-child");return m.attr("class","basic label-container outer-path"),l&&e.look!=="handDrawn"&&m.selectChildren("path").attr("style",l),i&&e.look!=="handDrawn"&&m.selectChildren("path").attr("style",i),m.attr("transform",`translate(${-a/2}, ${-s/2})`),at(e,m),e.intersect=function(g){return Q.info("Pill intersect",e,{points:f}),et.polygon(e,f,g)},n}var Qse=P(()=>{"use strict";bt();zt();Xt();Ht();Yt();o(Kse,"hourglass")});async function Zse(t,e,{config:{themeVariables:r,flowchart:i}}){let{labelStyles:n}=tt(e);e.labelStyle=n;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=i?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,label:d}=await vt(t,e,"icon-shape default"),p=e.pos==="t",m=l,g=l,{nodeBorder:y}=r,{stylesMap:v}=Su(e),x=-g/2,b=-m/2,T=e.label?8:0,w=rt.svg(h),k=st(e,{stroke:"none",fill:"none"});e.look!=="handDrawn"&&(k.roughness=0,k.fillStyle="solid");let C=w.rectangle(x,b,g,m,k),E=Math.max(g,f.width),S=m+f.height+T,L=w.rectangle(-E/2,-S/2,E,S,{...k,fill:"transparent",stroke:"none"}),M=h.insert(()=>C,":first-child"),I=h.insert(()=>L);if(e.icon){let A=h.append("g");A.html(`${await fo(e.icon,{height:l,width:l,fallbackPrefix:""})}`);let _=A.node().getBBox(),D=_.width,N=_.height,R=_.x,B=_.y;A.attr("transform",`translate(${-D/2-R},${p?f.height/2+T/2-N/2-B:-f.height/2-T/2-N/2-B})`),A.attr("style",`color: ${v.get("stroke")??y};`)}return d.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${p?-S/2:S/2-f.height})`),M.attr("transform",`translate(0,${p?f.height/2+T/2:-f.height/2-T/2})`),at(e,I),e.intersect=function(A){if(Q.info("iconSquare intersect",e,A),!e.label)return et.rect(e,A);let _=e.x??0,D=e.y??0,N=e.height??0,R=[];return p?R=[{x:_-f.width/2,y:D-N/2},{x:_+f.width/2,y:D-N/2},{x:_+f.width/2,y:D-N/2+f.height+T},{x:_+g/2,y:D-N/2+f.height+T},{x:_+g/2,y:D+N/2},{x:_-g/2,y:D+N/2},{x:_-g/2,y:D-N/2+f.height+T},{x:_-f.width/2,y:D-N/2+f.height+T}]:R=[{x:_-g/2,y:D-N/2},{x:_+g/2,y:D-N/2},{x:_+g/2,y:D-N/2+m},{x:_+f.width/2,y:D-N/2+m},{x:_+f.width/2/2,y:D+N/2},{x:_-f.width/2,y:D+N/2},{x:_-f.width/2,y:D-N/2+m},{x:_-g/2,y:D-N/2+m}],et.polygon(e,R,A)},h}var Jse=P(()=>{"use strict";Yt();bt();lu();Xt();Ht();zt();o(Zse,"icon")});async function eoe(t,e,{config:{themeVariables:r,flowchart:i}}){let{labelStyles:n}=tt(e);e.labelStyle=n;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=i?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,label:d}=await vt(t,e,"icon-shape default"),p=20,m=e.label?8:0,g=e.pos==="t",{nodeBorder:y,mainBkg:v}=r,{stylesMap:x}=Su(e),b=rt.svg(h),T=st(e,{});e.look!=="handDrawn"&&(T.roughness=0,T.fillStyle="solid");let w=x.get("fill");T.stroke=w??v;let k=h.append("g");e.icon&&k.html(`${await fo(e.icon,{height:l,width:l,fallbackPrefix:""})}`);let C=k.node().getBBox(),E=C.width,S=C.height,L=C.x,M=C.y,I=Math.max(E,S)*Math.SQRT2+p*2,A=b.circle(0,0,I,T),_=Math.max(I,f.width),D=I+f.height+m,N=b.rectangle(-_/2,-D/2,_,D,{...T,fill:"transparent",stroke:"none"}),R=h.insert(()=>A,":first-child"),B=h.insert(()=>N);return k.attr("transform",`translate(${-E/2-L},${g?f.height/2+m/2-S/2-M:-f.height/2-m/2-S/2-M})`),k.attr("style",`color: ${x.get("stroke")??y};`),d.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${g?-D/2:D/2-f.height})`),R.attr("transform",`translate(0,${g?f.height/2+m/2:-f.height/2-m/2})`),at(e,B),e.intersect=function(O){return Q.info("iconSquare intersect",e,O),et.rect(e,O)},h}var toe=P(()=>{"use strict";Yt();bt();lu();Xt();Ht();zt();o(eoe,"iconCircle")});var Co,R0=P(()=>{"use strict";Co=o((t,e,r,i,n)=>["M",t+n,e,"H",t+r-n,"A",n,n,0,0,1,t+r,e+n,"V",e+i-n,"A",n,n,0,0,1,t+r-n,e+i,"H",t+n,"A",n,n,0,0,1,t,e+i-n,"V",e+n,"A",n,n,0,0,1,t+n,e,"Z"].join(" "),"createRoundedRectPathD")});async function roe(t,e,{config:{themeVariables:r,flowchart:i}}){let{labelStyles:n}=tt(e);e.labelStyle=n;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=i?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,halfPadding:d,label:p}=await vt(t,e,"icon-shape default"),m=e.pos==="t",g=l+d*2,y=l+d*2,{nodeBorder:v,mainBkg:x}=r,{stylesMap:b}=Su(e),T=-y/2,w=-g/2,k=e.label?8:0,C=rt.svg(h),E=st(e,{});e.look!=="handDrawn"&&(E.roughness=0,E.fillStyle="solid");let S=b.get("fill");E.stroke=S??x;let L=C.path(Co(T,w,y,g,5),E),M=Math.max(y,f.width),I=g+f.height+k,A=C.rectangle(-M/2,-I/2,M,I,{...E,fill:"transparent",stroke:"none"}),_=h.insert(()=>L,":first-child").attr("class","icon-shape2"),D=h.insert(()=>A);if(e.icon){let N=h.append("g");N.html(`${await fo(e.icon,{height:l,width:l,fallbackPrefix:""})}`);let R=N.node().getBBox(),B=R.width,O=R.height,$=R.x,z=R.y;N.attr("transform",`translate(${-B/2-$},${m?f.height/2+k/2-O/2-z:-f.height/2-k/2-O/2-z})`),N.attr("style",`color: ${b.get("stroke")??v};`)}return p.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${m?-I/2:I/2-f.height})`),_.attr("transform",`translate(0,${m?f.height/2+k/2:-f.height/2-k/2})`),at(e,D),e.intersect=function(N){if(Q.info("iconSquare intersect",e,N),!e.label)return et.rect(e,N);let R=e.x??0,B=e.y??0,O=e.height??0,$=[];return m?$=[{x:R-f.width/2,y:B-O/2},{x:R+f.width/2,y:B-O/2},{x:R+f.width/2,y:B-O/2+f.height+k},{x:R+y/2,y:B-O/2+f.height+k},{x:R+y/2,y:B+O/2},{x:R-y/2,y:B+O/2},{x:R-y/2,y:B-O/2+f.height+k},{x:R-f.width/2,y:B-O/2+f.height+k}]:$=[{x:R-y/2,y:B-O/2},{x:R+y/2,y:B-O/2},{x:R+y/2,y:B-O/2+g},{x:R+f.width/2,y:B-O/2+g},{x:R+f.width/2/2,y:B+O/2},{x:R-f.width/2,y:B+O/2},{x:R-f.width/2,y:B-O/2+g},{x:R-y/2,y:B-O/2+g}],et.polygon(e,$,N)},h}var ioe=P(()=>{"use strict";Yt();bt();lu();Xt();Ht();R0();zt();o(roe,"iconRounded")});async function noe(t,e,{config:{themeVariables:r,flowchart:i}}){let{labelStyles:n}=tt(e);e.labelStyle=n;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=i?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,halfPadding:d,label:p}=await vt(t,e,"icon-shape default"),m=e.pos==="t",g=l+d*2,y=l+d*2,{nodeBorder:v,mainBkg:x}=r,{stylesMap:b}=Su(e),T=-y/2,w=-g/2,k=e.label?8:0,C=rt.svg(h),E=st(e,{});e.look!=="handDrawn"&&(E.roughness=0,E.fillStyle="solid");let S=b.get("fill");E.stroke=S??x;let L=C.path(Co(T,w,y,g,.1),E),M=Math.max(y,f.width),I=g+f.height+k,A=C.rectangle(-M/2,-I/2,M,I,{...E,fill:"transparent",stroke:"none"}),_=h.insert(()=>L,":first-child"),D=h.insert(()=>A);if(e.icon){let N=h.append("g");N.html(`${await fo(e.icon,{height:l,width:l,fallbackPrefix:""})}`);let R=N.node().getBBox(),B=R.width,O=R.height,$=R.x,z=R.y;N.attr("transform",`translate(${-B/2-$},${m?f.height/2+k/2-O/2-z:-f.height/2-k/2-O/2-z})`),N.attr("style",`color: ${b.get("stroke")??v};`)}return p.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${m?-I/2:I/2-f.height})`),_.attr("transform",`translate(0,${m?f.height/2+k/2:-f.height/2-k/2})`),at(e,D),e.intersect=function(N){if(Q.info("iconSquare intersect",e,N),!e.label)return et.rect(e,N);let R=e.x??0,B=e.y??0,O=e.height??0,$=[];return m?$=[{x:R-f.width/2,y:B-O/2},{x:R+f.width/2,y:B-O/2},{x:R+f.width/2,y:B-O/2+f.height+k},{x:R+y/2,y:B-O/2+f.height+k},{x:R+y/2,y:B+O/2},{x:R-y/2,y:B+O/2},{x:R-y/2,y:B-O/2+f.height+k},{x:R-f.width/2,y:B-O/2+f.height+k}]:$=[{x:R-y/2,y:B-O/2},{x:R+y/2,y:B-O/2},{x:R+y/2,y:B-O/2+g},{x:R+f.width/2,y:B-O/2+g},{x:R+f.width/2/2,y:B+O/2},{x:R-f.width/2,y:B+O/2},{x:R-f.width/2,y:B-O/2+g},{x:R-y/2,y:B-O/2+g}],et.polygon(e,$,N)},h}var aoe=P(()=>{"use strict";Yt();bt();lu();Xt();R0();Ht();zt();o(noe,"iconSquare")});async function soe(t,e,{config:{flowchart:r}}){let i=new Image;i.src=e?.img??"",await i.decode();let n=Number(i.naturalWidth.toString().replace("px","")),a=Number(i.naturalHeight.toString().replace("px",""));e.imageAspectRatio=n/a;let{labelStyles:s}=tt(e);e.labelStyle=s;let l=r?.wrappingWidth;e.defaultWidth=r?.wrappingWidth;let u=Math.max(e.label?l??0:0,e?.assetWidth??n),h=e.constraint==="on"&&e?.assetHeight?e.assetHeight*e.imageAspectRatio:u,f=e.constraint==="on"?h/e.imageAspectRatio:e?.assetHeight??a;e.width=Math.max(h,l??0);let{shapeSvg:d,bbox:p,label:m}=await vt(t,e,"image-shape default"),g=e.pos==="t",y=-h/2,v=-f/2,x=e.label?8:0,b=rt.svg(d),T=st(e,{});e.look!=="handDrawn"&&(T.roughness=0,T.fillStyle="solid");let w=b.rectangle(y,v,h,f,T),k=Math.max(h,p.width),C=f+p.height+x,E=b.rectangle(-k/2,-C/2,k,C,{...T,fill:"none",stroke:"none"}),S=d.insert(()=>w,":first-child"),L=d.insert(()=>E);if(e.img){let M=d.append("image");M.attr("href",e.img),M.attr("width",h),M.attr("height",f),M.attr("preserveAspectRatio","none"),M.attr("transform",`translate(${-h/2},${g?C/2-f:-C/2})`)}return m.attr("transform",`translate(${-p.width/2-(p.x-(p.left??0))},${g?-f/2-p.height/2-x/2:f/2-p.height/2+x/2})`),S.attr("transform",`translate(0,${g?p.height/2+x/2:-p.height/2-x/2})`),at(e,L),e.intersect=function(M){if(Q.info("iconSquare intersect",e,M),!e.label)return et.rect(e,M);let I=e.x??0,A=e.y??0,_=e.height??0,D=[];return g?D=[{x:I-p.width/2,y:A-_/2},{x:I+p.width/2,y:A-_/2},{x:I+p.width/2,y:A-_/2+p.height+x},{x:I+h/2,y:A-_/2+p.height+x},{x:I+h/2,y:A+_/2},{x:I-h/2,y:A+_/2},{x:I-h/2,y:A-_/2+p.height+x},{x:I-p.width/2,y:A-_/2+p.height+x}]:D=[{x:I-h/2,y:A-_/2},{x:I+h/2,y:A-_/2},{x:I+h/2,y:A-_/2+f},{x:I+p.width/2,y:A-_/2+f},{x:I+p.width/2/2,y:A+_/2},{x:I-p.width/2,y:A+_/2},{x:I-p.width/2,y:A-_/2+f},{x:I-h/2,y:A-_/2+f}],et.polygon(e,D,M)},d}var ooe=P(()=>{"use strict";Yt();bt();Xt();Ht();zt();o(soe,"imageSquare")});async function loe(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.padding??0,a=n,s=e.look==="neo"?n*2:n,{shapeSvg:l,bbox:u}=await vt(t,e,mt(e)),h=Math.max(u.width+(s??0)*2,e?.width??0),f=Math.max(u.height+(a??0)*2,e?.height??0),d=[{x:0,y:0},{x:h,y:0},{x:h+3*f/6,y:-f},{x:-3*f/6,y:-f}],p,{cssStyles:m}=e;if(e.look==="handDrawn"){let g=rt.svg(l),y=st(e,{}),v=rr(d),x=g.path(v,y);p=l.insert(()=>x,":first-child").attr("transform",`translate(${-h/2}, ${f/2})`),m&&p.attr("style",m)}else p=ds(l,h,f,d);return i&&p.attr("style",i),e.width=h,e.height=f,at(e,p),e.intersect=function(g){return et.polygon(e,d,g)},l}var coe=P(()=>{"use strict";zt();Xt();Ht();Yt();Vh();o(loe,"inv_trapezoid")});async function qh(t,e,r){let{labelStyles:i,nodeStyles:n}=tt(e);e.labelStyle=i;let{shapeSvg:a,bbox:s}=await vt(t,e,mt(e)),l=Math.max(s.width+r.labelPaddingX*2,e?.width||0),u=Math.max(s.height+r.labelPaddingY*2,e?.height||0),h=-l/2,f=-u/2,d,{rx:p,ry:m}=e,{cssStyles:g}=e;if(r?.rx&&r.ry&&(p=r.rx,m=r.ry),e.look==="handDrawn"){let y=rt.svg(a),v=st(e,{}),x=p||m?y.path(Co(h,f,l,u,p||0),v):y.rectangle(h,f,l,u,v);d=a.insert(()=>x,":first-child"),d.attr("class","basic label-container").attr("style",xi(g))}else d=a.insert("rect",":first-child"),d.attr("class","basic label-container").attr("style",n).attr("rx",xi(p)).attr("ry",xi(m)).attr("x",h).attr("y",f).attr("width",l).attr("height",u);return at(e,d),e.calcIntersect=function(y,v){return et.rect(y,v)},e.intersect=function(y){return et.rect(e,y)},a}var L1=P(()=>{"use strict";zt();Xt();R0();Ht();Yt();er();o(qh,"drawRect")});async function uoe(t,e){let{shapeSvg:r,bbox:i,label:n}=await vt(t,e,"label"),a=r.insert("rect",":first-child");return a.attr("width",.1).attr("height",.1),r.attr("class","label edgeLabel"),n.attr("transform",`translate(${-(i.width/2)-(i.x-(i.left??0))}, ${-(i.height/2)-(i.y-(i.top??0))})`),at(e,a),e.intersect=function(u){return et.rect(e,u)},r}var hoe=P(()=>{"use strict";L1();zt();Xt();o(uoe,"labelRect")});async function foe(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.padding??0,a=n,s=e.look==="neo"?n*2:n,{shapeSvg:l,bbox:u}=await vt(t,e,mt(e)),h=(e?.height??u.height)+a,f=(e?.width??u.width)+s,d=[{x:0,y:0},{x:f+3*h/6,y:0},{x:f,y:-h},{x:-(3*h)/6,y:-h}],p,{cssStyles:m}=e;if(e.look==="handDrawn"){let g=rt.svg(l),y=st(e,{}),v=rr(d),x=g.path(v,y);p=l.insert(()=>x,":first-child").attr("transform",`translate(${-f/2}, ${h/2})`),m&&p.attr("style",m)}else p=ds(l,f,h,d);return i&&p.attr("style",i),e.width=f,e.height=h,at(e,p),e.intersect=function(g){return et.polygon(e,d,g)},l}var doe=P(()=>{"use strict";zt();Xt();Ht();Yt();Vh();o(foe,"lean_left")});async function poe(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.padding??0,a=n,s=e.look==="neo"?n*2:n,{shapeSvg:l,bbox:u}=await vt(t,e,mt(e)),h=(e?.height??u.height)+a,f=(e?.width??u.width)+s,d=[{x:-3*h/6,y:0},{x:f,y:0},{x:f+3*h/6,y:-h},{x:0,y:-h}],p,{cssStyles:m}=e;if(e.look==="handDrawn"){let g=rt.svg(l),y=st(e,{}),v=rr(d),x=g.path(v,y);p=l.insert(()=>x,":first-child").attr("transform",`translate(${-f/2}, ${h/2})`),m&&p.attr("style",m)}else p=ds(l,f,h,d);return i&&p.attr("style",i),e.width=f,e.height=h,at(e,p),e.intersect=function(g){return et.polygon(e,d,g)},l}var moe=P(()=>{"use strict";zt();Xt();Ht();Yt();Vh();o(poe,"lean_right")});function goe(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.label="",e.labelStyle=r;let n=t.insert("g").attr("class",mt(e)).attr("id",e.domId??e.id),{cssStyles:a}=e,s=Math.max(35,e?.width??0),l=Math.max(35,e?.height??0),u=7,h=[{x:s,y:0},{x:0,y:l+u/2},{x:s-2*u,y:l+u/2},{x:0,y:2*l},{x:s,y:l-u/2},{x:2*u,y:l-u/2}],f=rt.svg(n),d=st(e,{});e.look!=="handDrawn"&&(d.roughness=0,d.fillStyle="solid");let p=rr(h),m=f.path(p,d),g=n.insert(()=>m,":first-child");return g.attr("class","outer-path"),a&&e.look!=="handDrawn"&&g.selectAll("path").attr("style",a),i&&e.look!=="handDrawn"&&g.selectAll("path").attr("style",i),g.attr("transform",`translate(-${s/2},${-l})`),at(e,g),e.intersect=function(y){return Q.info("lightningBolt intersect",e,y),et.polygon(e,h,y)},n}var yoe=P(()=>{"use strict";bt();zt();Ht();Yt();Xt();zt();o(goe,"lightningBolt")});async function boe(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.padding??0,a=e.look==="neo"?16:n,s=e.look==="neo"?24:n;if(e.width||e.height){let x=e.width??0;e.width=(e.width??0)-a,e.widthC,":first-child").attr("class","line"),y=l.insert(()=>k,":first-child"),y.attr("class","basic label-container"),v&&y.attr("style",v)}else{let x=RVe(0,0,f,m,d,p,g);y=l.insert("path",":first-child").attr("d",x).attr("class","basic label-container outer-path").attr("style",xi(v)).attr("style",i)}return y.attr("label-offset-y",p),y.attr("transform",`translate(${-f/2}, ${-(m/2+p)})`),at(e,y),h.attr("transform",`translate(${-(u.width/2)-(u.x-(u.left??0))}, ${-(u.height/2)+p-(u.y-(u.top??0))})`),e.intersect=function(x){let b=et.rect(e,x),T=b.x-(e.x??0);if(d!=0&&(Math.abs(T)<(e.width??0)/2||Math.abs(T)==(e.width??0)/2&&Math.abs(b.y-(e.y??0))>(e.height??0)/2-p)){let w=p*p*(1-T*T/(d*d));w>0&&(w=Math.sqrt(w)),w=p-w,x.y-(e.y??0)>0&&(w=-w),b.y+=w}return b},l}var RVe,NVe,IVe,voe,xoe,Toe=P(()=>{"use strict";zt();Xt();Ht();Yt();er();RVe=o((t,e,r,i,n,a,s)=>[`M${t},${e+a}`,`a${n},${a} 0,0,0 ${r},0`,`a${n},${a} 0,0,0 ${-r},0`,`l0,${i}`,`a${n},${a} 0,0,0 ${r},0`,`l0,${-i}`,`M${t},${e+a+s}`,`a${n},${a} 0,0,0 ${r},0`].join(" "),"createCylinderPathD"),NVe=o((t,e,r,i,n,a,s)=>[`M${t},${e+a}`,`M${t+r},${e+a}`,`a${n},${a} 0,0,0 ${-r},0`,`l0,${i}`,`a${n},${a} 0,0,0 ${r},0`,`l0,${-i}`,`M${t},${e+a+s}`,`a${n},${a} 0,0,0 ${r},0`].join(" "),"createOuterCylinderPathD"),IVe=o((t,e,r,i,n,a)=>[`M${t-r/2},${-i/2}`,`a${n},${a} 0,0,0 ${r},0`].join(" "),"createInnerCylinderPathD"),voe=10,xoe=10;o(boe,"linedCylinder")});async function koe(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.padding??0,a=e.look==="neo"?16:n,s=e.look==="neo"?12:n;if(e.width||e.height){let w=e.width;e.width=(w??0)*10/11-a*2,e.width<10&&(e.width=10),e.height=(e?.height??0)-s*2,e.height<10&&(e.height=10)}let{shapeSvg:l,bbox:u,label:h}=await vt(t,e,mt(e)),f=(e?.width?e?.width:u.width)+(a??0)*2,d=(e?.height?e?.height:u.height)+(s??0)*2,p=e.look==="neo"?d/4:d/8,m=d+p,{cssStyles:g}=e,y=rt.svg(l),v=st(e,{});e.look!=="handDrawn"&&(v.roughness=0,v.fillStyle="solid");let x=[{x:-f/2-f/2*.1,y:-m/2},{x:-f/2-f/2*.1,y:m/2},...Ml(-f/2-f/2*.1,m/2,f/2+f/2*.1,m/2,p,.8),{x:f/2+f/2*.1,y:-m/2},{x:-f/2-f/2*.1,y:-m/2},{x:-f/2,y:-m/2},{x:-f/2,y:m/2*1.1},{x:-f/2,y:-m/2}],b=y.polygon(x.map(w=>[w.x,w.y]),v),T=l.insert(()=>b,":first-child");return T.attr("class","basic label-container outer-path"),g&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",g),i&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",i),T.attr("transform",`translate(0,${-p/2})`),h.attr("transform",`translate(${-f/2+(e.padding??0)+f/2*.1/2-(u.x-(u.left??0))},${-d/2+(e.padding??0)-p/2-(u.y-(u.top??0))})`),at(e,T),e.intersect=function(w){return et.polygon(e,x,w)},l}var Coe=P(()=>{"use strict";zt();Xt();Yt();Ht();o(koe,"linedWaveEdgedRect")});async function woe(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.padding??0,a=e.look==="neo"?16:n,s=e.look==="neo"?12:n,l=e.look==="neo"?10:5;(e.width||e.height)&&(e.width=Math.max((e?.width??0)-a*2-2*l,10),e.height=Math.max((e?.height??0)-s*2-2*l,10));let{shapeSvg:u,bbox:h,label:f}=await vt(t,e,mt(e)),d=(e?.width?e?.width:h.width)+a*2+2*l,p=(e?.height?e?.height:h.height)+s*2+2*l,m=d-2*l,g=p-2*l,y=-m/2,v=-g/2,{cssStyles:x}=e,b=rt.svg(u),T=st(e,{}),w=[{x:y-l,y:v+l},{x:y-l,y:v+g+l},{x:y+m-l,y:v+g+l},{x:y+m-l,y:v+g},{x:y+m,y:v+g},{x:y+m,y:v+g-l},{x:y+m+l,y:v+g-l},{x:y+m+l,y:v-l},{x:y+l,y:v-l},{x:y+l,y:v},{x:y,y:v},{x:y,y:v+l}],k=[{x:y,y:v+l},{x:y+m-l,y:v+l},{x:y+m-l,y:v+g},{x:y+m,y:v+g},{x:y+m,y:v},{x:y,y:v}];e.look!=="handDrawn"&&(T.roughness=0,T.fillStyle="solid");let C=rr(w),E=b.path(C,T),S=rr(k),L=b.path(S,T);e.look!=="handDrawn"&&(E=iM(E),L=iM(L));let M=u.insert("g",":first-child");return M.insert(()=>E),M.insert(()=>L),M.attr("class","basic label-container outer-path"),x&&e.look!=="handDrawn"&&M.selectAll("path").attr("style",x),i&&e.look!=="handDrawn"&&M.selectAll("path").attr("style",i),f.attr("transform",`translate(${-(h.width/2)-l-(h.x-(h.left??0))}, ${-(h.height/2)+l-(h.y-(h.top??0))})`),at(e,M),e.intersect=function(I){return et.polygon(e,w,I)},u}var Eoe=P(()=>{"use strict";zt();Ht();Yt();Xt();o(woe,"multiRect")});async function Soe(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let{shapeSvg:n,bbox:a,label:s}=await vt(t,e,mt(e)),l=e.padding??0,u=e.look==="neo"?16:l,h=e.look==="neo"?12:l,f=!0;(e.width||e.height)&&(f=!1,e.width=(e?.width??0)-u*2,e.height=(e?.height??0)-h*3);let d=Math.max(a.width,e?.width??0)+u*2,p=Math.max(a.height,e?.height??0)+h*3,m=e.look==="neo"?p/4:p/8,g=p+(f?m/2:-m/2),y=-d/2,v=-g/2,x=10,{cssStyles:b}=e,T=Ml(y-x,v+g+x,y+d-x,v+g+x,m,.8),w=T?.[T.length-1],k=[{x:y-x,y:v+x},{x:y-x,y:v+g+x},...T,{x:y+d-x,y:w.y-x},{x:y+d,y:w.y-x},{x:y+d,y:w.y-2*x},{x:y+d+x,y:w.y-2*x},{x:y+d+x,y:v-x},{x:y+x,y:v-x},{x:y+x,y:v},{x:y,y:v},{x:y,y:v+x}],C=[{x:y,y:v+x},{x:y+d-x,y:v+x},{x:y+d-x,y:w.y-x},{x:y+d,y:w.y-x},{x:y+d,y:v},{x:y,y:v}],E=rt.svg(n),S=st(e,{});e.look!=="handDrawn"&&(S.roughness=0,S.fillStyle="solid");let L=rr(k),M=E.path(L,S),I=rr(C),A=E.path(I,S),_=n.insert(()=>M,":first-child");return _.insert(()=>A),_.attr("class","basic label-container outer-path"),b&&e.look!=="handDrawn"&&_.selectAll("path").attr("style",b),i&&e.look!=="handDrawn"&&_.selectAll("path").attr("style",i),_.attr("transform",`translate(0,${-m/2})`),s.attr("transform",`translate(${-(a.width/2)-x-(a.x-(a.left??0))}, ${-(a.height/2)+x-m/2-(a.y-(a.top??0))})`),at(e,_),e.intersect=function(D){return et.polygon(e,k,D)},n}var Aoe=P(()=>{"use strict";zt();Xt();Yt();Ht();o(Soe,"multiWaveEdgedRectangle")});async function _oe(t,e,{config:{themeVariables:r}}){let{labelStyles:i,nodeStyles:n}=tt(e);e.labelStyle=i,e.useHtmlLabels||Or(Lt())||(e.centerLabel=!0);let{shapeSvg:s,bbox:l,label:u}=await vt(t,e,mt(e)),h=Math.max(l.width+(e.padding??0)*2,e?.width??0),f=Math.max(l.height+(e.padding??0)*2,e?.height??0),d=-h/2,p=-f/2,{cssStyles:m}=e,g=rt.svg(s),y=st(e,{fill:r.noteBkgColor,stroke:r.noteBorderColor});e.look!=="handDrawn"&&(y.roughness=0,y.fillStyle="solid");let v=g.rectangle(d,p,h,f,y),x=s.insert(()=>v,":first-child");return x.attr("class","basic label-container outer-path"),u.attr("class","label noteLabel"),m&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",m),n&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",n),u.attr("transform",`translate(${-l.width/2-(l.x-(l.left??0))}, ${-(l.height/2)-(l.y-(l.top??0))})`),at(e,x),e.intersect=function(b){return et.rect(e,b)},s}var Doe=P(()=>{"use strict";Yt();Xt();Ht();zt();Sr();Sr();o(_oe,"note")});async function Loe(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let{shapeSvg:n,bbox:a}=await vt(t,e,mt(e)),s=a.width+(e.padding??0),l=a.height+(e.padding??0),u=s+l,h=.5,f=[{x:u/2,y:0},{x:u,y:-u/2},{x:u/2,y:-u},{x:0,y:-u/2}],d,{cssStyles:p}=e;if(e.look==="handDrawn"){let m=rt.svg(n),g=st(e,{}),y=MVe(0,0,u),v=m.path(y,g);d=n.insert(()=>v,":first-child").attr("transform",`translate(${-u/2+h}, ${u/2})`),p&&d.attr("style",p)}else d=ds(n,u,u,f),d.attr("transform",`translate(${-u/2+h}, ${u/2})`);return i&&d.attr("style",i),at(e,d),e.calcIntersect=function(m,g){let y=m.width,v=[{x:y/2,y:0},{x:y,y:-y/2},{x:y/2,y:-y},{x:0,y:-y/2}],x=et.polygon(m,v,g);return{x:x.x-.5,y:x.y-.5}},e.intersect=function(m){return this.calcIntersect(e,m)},n}var MVe,Roe=P(()=>{"use strict";zt();Xt();Ht();Yt();Vh();MVe=o((t,e,r)=>[`M${t+r/2},${e}`,`L${t+r},${e-r/2}`,`L${t+r/2},${e-r}`,`L${t},${e-r/2}`,"Z"].join(" "),"createDecisionBoxPathD");o(Loe,"question")});async function Noe(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.padding??0,a=e.look==="neo"?21:n??0,s=e.look==="neo"?12:n??0,{shapeSvg:l,bbox:u,label:h}=await vt(t,e,mt(e)),f=(e?.width??u.width)+(e.look==="neo"?a*2:a),d=(e?.height??u.height)+(e.look==="neo"?s*2:s),p=-f/2,m=-d/2,g=m/2,y=[{x:p+g,y:m},{x:p,y:0},{x:p+g,y:-m},{x:-p,y:-m},{x:-p,y:m}],{cssStyles:v}=e,x=rt.svg(l),b=st(e,{});e.look!=="handDrawn"&&(b.roughness=0,b.fillStyle="solid");let T=rr(y),w=x.path(T,b),k=l.insert(()=>w,":first-child");return k.attr("class","basic label-container outer-path"),v&&e.look!=="handDrawn"&&k.selectAll("path").attr("style",v),i&&e.look!=="handDrawn"&&k.selectAll("path").attr("style",i),k.attr("transform",`translate(${-g/2},0)`),h.attr("transform",`translate(${-g/2-u.width/2-(u.x-(u.left??0))}, ${-(u.height/2)-(u.y-(u.top??0))})`),at(e,k),e.intersect=function(C){return et.polygon(e,y,C)},l}var Ioe=P(()=>{"use strict";zt();Xt();Ht();Yt();o(Noe,"rect_left_inv_arrow")});var OVe,Dc,w5=P(()=>{"use strict";Sr();Ut();To();OVe=o(async(t,e,r,i=!1,n=!1)=>{let a=e||"";typeof a=="object"&&(a=a[0]);let s=ge(),l=Or(s);return await Vi(t,a,{style:r,isTitle:i,useHtmlLabels:l,markdown:!1,isNode:n,width:Number.POSITIVE_INFINITY},s)},"createLabel"),Dc=OVe});async function Moe(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n;e.cssClasses?n="node "+e.cssClasses:n="node default";let a=t.insert("g").attr("class",n).attr("id",e.domId||e.id),s=a.insert("g"),l=a.insert("g").attr("class","label").attr("style",i),u=e.description,h=e.label,f=await Dc(l,h,e.labelStyle,!0,!0),d={width:0,height:0};if(Or(ge())){let S=f.children[0],L=Ze(f);d=S.getBoundingClientRect(),L.attr("width",d.width),L.attr("height",d.height)}Q.info("Text 2",u);let p=u||[],m=f.getBBox(),g=await Dc(l,Array.isArray(p)?p.join("
    "):p,e.labelStyle,!0,!0),y=g.children[0],v=Ze(g);d=y.getBoundingClientRect(),v.attr("width",d.width),v.attr("height",d.height);let x=(e.padding||0)/2;Ze(g).attr("transform","translate( "+(d.width>m.width?0:(m.width-d.width)/2)+", "+(m.height+x+5)+")"),Ze(f).attr("transform","translate( "+(d.width(Q.debug("Rough node insert CXC",M),I),":first-child"),C=a.insert(()=>(Q.debug("Rough node insert CXC",M),M),":first-child")}else C=s.insert("rect",":first-child"),E=s.insert("line"),C.attr("class","outer title-state").attr("style",i).attr("x",-d.width/2-x).attr("y",-d.height/2-x).attr("width",d.width+(e.padding||0)).attr("height",d.height+(e.padding||0)),E.attr("class","divider").attr("x1",-d.width/2-x).attr("x2",d.width/2+x).attr("y1",-d.height/2-x+m.height+x).attr("y2",-d.height/2-x+m.height+x);return at(e,C),e.intersect=function(S){return et.rect(e,S)},a}var Ooe=P(()=>{"use strict";Pr();zt();w5();Xt();Ht();Yt();Ut();R0();bt();Sr();o(Moe,"rectWithTitle")});async function Poe(t,e,{config:{themeVariables:r}}){let i=r?.radius??5,n={rx:i,ry:i,classes:"",labelPaddingX:(e?.padding??0)*1,labelPaddingY:(e?.padding??0)*1};return qh(t,e,n)}var Boe=P(()=>{"use strict";L1();o(Poe,"roundedRect")});async function Foe(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.look==="neo"?16:e.padding??0,a=e.look==="neo"?12:e.padding??0,{shapeSvg:s,bbox:l,label:u}=await vt(t,e,mt(e)),h=(e?.width??l.width)+n*2+(e.look==="neo"?N0:N0*2),f=(e?.height??l.height)+a*2,d=h-N0,p=f,m=N0-h/2,g=-f/2,{cssStyles:y}=e,v=rt.svg(s),x=st(e,{});e.look!=="handDrawn"&&(x.roughness=0,x.fillStyle="solid");let b=[{x:m,y:g},{x:m+d,y:g},{x:m+d,y:g+p},{x:m-N0,y:g+p},{x:m-N0,y:g},{x:m,y:g},{x:m,y:g+p}],T=v.polygon(b.map(k=>[k.x,k.y]),x),w=s.insert(()=>T,":first-child");return w.attr("class","basic label-container outer-path").attr("style",xi(y)),i&&e.look!=="handDrawn"&&w.selectAll("path").attr("style",i),y&&e.look!=="handDrawn"&&w.selectAll("path").attr("style",i),u.attr("transform",`translate(${N0/2-l.width/2-(l.x-(l.left??0))}, ${-(l.height/2)-(l.y-(l.top??0))})`),at(e,w),e.intersect=function(k){return et.rect(e,k)},s}var N0,$oe=P(()=>{"use strict";zt();Xt();Ht();Yt();er();N0=8;o(Foe,"shadedProcess")});async function zoe(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.padding??0,a=e.look==="neo"?16:n,s=e.look==="neo"?12:n;(e.width||e.height)&&(e.width=Math.max((e?.width??0)-a*2,10),e.height=Math.max((e?.height??0)/1.5-s*2,10));let{shapeSvg:l,bbox:u,label:h}=await vt(t,e,mt(e)),f=(e?.width?e?.width:u.width)+a*2,d=((e?.height?e?.height:u.height)+s*2)*1.5,p=f,m=d/1.5,g=-p/2,y=-m/2,{cssStyles:v}=e,x=rt.svg(l),b=st(e,{});e.look!=="handDrawn"&&(b.roughness=0,b.fillStyle="solid");let T=[{x:g,y},{x:g,y:y+m},{x:g+p,y:y+m},{x:g+p,y:y-m/2}],w=rr(T),k=x.path(w,b),C=l.insert(()=>k,":first-child");return C.attr("class","basic label-container outer-path"),v&&e.look!=="handDrawn"&&C.selectChildren("path").attr("style",v),i&&e.look!=="handDrawn"&&C.selectChildren("path").attr("style",i),C.attr("transform",`translate(0, ${m/4})`),h.attr("transform",`translate(${-p/2+(e.padding??0)-(u.x-(u.left??0))}, ${-m/4+(e.padding??0)-(u.y-(u.top??0))})`),at(e,C),e.intersect=function(E){return et.polygon(e,T,E)},l}var Goe=P(()=>{"use strict";zt();Xt();Ht();Yt();o(zoe,"slopedRect")});async function Voe(t,e){let r=e.padding??0,i=e.look==="neo"?16:r*2,n=e.look==="neo"?12:r,a={rx:0,ry:0,classes:"",labelPaddingX:e.labelPaddingX??i,labelPaddingY:n};return qh(t,e,a)}var qoe=P(()=>{"use strict";L1();o(Voe,"squareRect")});async function Woe(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.padding??0,a=e.look==="neo"?20:n,s=e.look==="neo"?12:n,{shapeSvg:l,bbox:u}=await vt(t,e,mt(e)),h=u.height+(e.look==="neo"?s*2:s),f=u.width+h/4+(e.look==="neo"?a*2:a),d=h/2,{cssStyles:p}=e,m=rt.svg(l),g=st(e,{});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=[{x:-f/2+d,y:-h/2},{x:f/2-d,y:-h/2},...D0(-f/2+d,0,d,50,90,270),{x:f/2-d,y:h/2},...D0(f/2-d,0,d,50,270,450)],v=rr(y),x=m.path(v,g),b=l.insert(()=>x,":first-child");return b.attr("class","basic label-container outer-path"),p&&e.look!=="handDrawn"&&b.selectChildren("path").attr("style",p),i&&e.look!=="handDrawn"&&b.selectChildren("path").attr("style",i),at(e,b),e.intersect=function(T){return et.polygon(e,y,T)},l}var Uoe=P(()=>{"use strict";zt();Xt();Ht();Yt();o(Woe,"stadium")});async function Hoe(t,e){let r={rx:e.look==="neo"?3:5,ry:e.look==="neo"?3:5,classes:"flowchart-node"};return qh(t,e,r)}var Yoe=P(()=>{"use strict";L1();o(Hoe,"state")});function joe(t,e,{config:{themeVariables:r}}){let{labelStyles:i,nodeStyles:n}=tt(e);e.labelStyle=i;let{cssStyles:a}=e,{lineColor:s,stateBorder:l,nodeBorder:u,nodeShadow:h}=r;(e.width||e.height)&&((e.width??0)<14&&(e.width=14),(e.height??0)<14&&(e.height=14)),e.width||(e.width=14),e.height||(e.height=14);let f=t.insert("g").attr("class","node default").attr("id",e.domId??e.id),d=rt.svg(f),p=st(e,{});e.look!=="handDrawn"&&(p.roughness=0,p.fillStyle="solid");let m=d.circle(0,0,e.width,{...p,stroke:s,strokeWidth:2}),g=l??u,y=(e.width??0)*5/14,v=d.circle(0,0,y,{...p,fill:g,stroke:g,strokeWidth:2,fillStyle:"solid"}),x=f.insert(()=>m,":first-child");if(x.insert(()=>v),e.look!=="handDrawn"&&x.attr("class","outer-path"),a&&x.selectAll("path").attr("style",a),n&&x.selectAll("path").attr("style",n),e.width<25&&h&&e.look!=="handDrawn"){let b=t.node()?.ownerSVGElement?.id??"",T=b?`${b}-drop-shadow-small`:"drop-shadow-small";x.attr("style",`filter:url(#${T})`)}return at(e,x),e.intersect=function(b){return et.circle(e,(e.width??0)/2,b)},f}var Xoe=P(()=>{"use strict";Yt();Xt();Ht();zt();o(joe,"stateEnd")});function Koe(t,e,{config:{themeVariables:r}}){let{lineColor:i,nodeShadow:n}=r;(e.width||e.height)&&((e.width??0)<14&&(e.width=14),(e.height??0)<14&&(e.height=14)),e.width||(e.width=14),e.height||(e.height=14);let a=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),s;if(e.look==="handDrawn"){let u=rt.svg(a).circle(0,0,e.width,Kae(i));s=a.insert(()=>u),s.attr("class","state-start").attr("r",(e.width??7)/2).attr("width",e.width??14).attr("height",e.height??14)}else s=a.insert("circle",":first-child"),s.attr("class","state-start").attr("r",(e.width??7)/2).attr("width",e.width??14).attr("height",e.height??14);if(e.width<25&&n&&e.look!=="handDrawn"){let l=t.node()?.ownerSVGElement?.id??"",u=l?`${l}-drop-shadow-small`:"drop-shadow-small";s.attr("style",`filter:url(#${u})`)}return at(e,s),e.intersect=function(l){return et.circle(e,(e.width??7)/2,l)},a}var Qoe=P(()=>{"use strict";Yt();Xt();Ht();zt();o(Koe,"stateStart")});async function Zoe(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e?.padding??8,a=e.look==="neo"?28:n,s=e.look==="neo"?12:n,{shapeSvg:l,bbox:u}=await vt(t,e,mt(e)),h=(e?.width??u.width)+2*R1+a,f=(e?.height??u.height)+s,d=h-2*R1,p=f,m=-h/2,g=-f/2,y=[{x:0,y:0},{x:d,y:0},{x:d,y:-p},{x:0,y:-p},{x:0,y:0},{x:-8,y:0},{x:d+8,y:0},{x:d+8,y:-p},{x:-8,y:-p},{x:-8,y:0}];if(e.look==="handDrawn"){let v=rt.svg(l),x=st(e,{}),b=v.rectangle(m,g,d+16,p,x),T=v.line(m+R1,g,m+R1,g+p,x),w=v.line(m+R1+d,g,m+R1+d,g+p,x);l.insert(()=>T,":first-child"),l.insert(()=>w,":first-child");let k=l.insert(()=>b,":first-child"),{cssStyles:C}=e;k.attr("class","basic label-container").attr("style",xi(C)),at(e,k)}else{let v=ds(l,d,p,y);i&&v.attr("style",i),at(e,v)}return e.intersect=function(v){return et.polygon(e,y,v)},l}var R1,Joe=P(()=>{"use strict";zt();Xt();Ht();Yt();Vh();er();R1=8;o(Zoe,"subroutine")});async function ele(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.padding??0,a=e.look==="neo"?16:n,s=e.look==="neo"?12:n;(e.width||e.height)&&(e.height=Math.max((e?.height??0)-s*2,10),e.width=Math.max((e?.width??0)-a*2-wM*(e.height+s*2),10));let{shapeSvg:l,bbox:u}=await vt(t,e,mt(e)),h=(e?.height?e?.height:u.height)+s*2,f=wM*h,d=wM*h,m=(e?.width?e?.width:u.width)+a*2+f-f,g=h,y=-m/2,v=-g/2,{cssStyles:x}=e,b=rt.svg(l),T=st(e,{}),w=[{x:y-f/2,y:v},{x:y+m+f/2,y:v},{x:y+m+f/2,y:v+g},{x:y-f/2,y:v+g}],k=[{x:y+m-f/2,y:v+g},{x:y+m+f/2,y:v+g},{x:y+m+f/2,y:v+g-d}];e.look!=="handDrawn"&&(T.roughness=0,T.fillStyle="solid");let C=rr(w),E=b.path(C,T),S=rr(k),L=b.path(S,{...T,fillStyle:"solid"}),M=l.insert(()=>L,":first-child");return M.insert(()=>E,":first-child"),M.attr("class","basic label-container outer-path"),x&&e.look!=="handDrawn"&&M.selectAll("path").attr("style",x),i&&e.look!=="handDrawn"&&M.selectAll("path").attr("style",i),at(e,M),e.intersect=function(I){return et.polygon(e,w,I)},l}var wM,tle=P(()=>{"use strict";zt();Ht();Yt();Xt();wM=.2;o(ele,"taggedRect")});async function rle(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let{shapeSvg:n,bbox:a,label:s}=await vt(t,e,mt(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=u/8,f=.2*l,d=.2*u,p=u+h,{cssStyles:m}=e,g=rt.svg(n),y=st(e,{});e.look!=="handDrawn"&&(y.roughness=0,y.fillStyle="solid");let v=[{x:-l/2-l/2*.1,y:p/2},...Ml(-l/2-l/2*.1,p/2,l/2+l/2*.1,p/2,h,.8),{x:l/2+l/2*.1,y:-p/2},{x:-l/2-l/2*.1,y:-p/2}],x=-l/2+l/2*.1,b=-p/2-d*.4,T=[{x:x+l-f,y:(b+u)*1.3},{x:x+l,y:b+u-d},{x:x+l,y:(b+u)*.9},...Ml(x+l,(b+u)*1.25,x+l-f,(b+u)*1.3,-u*.02,.5)],w=rr(v),k=g.path(w,y),C=rr(T),E=g.path(C,{...y,fillStyle:"solid"}),S=n.insert(()=>E,":first-child");return S.insert(()=>k,":first-child"),S.attr("class","basic label-container outer-path"),m&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",m),i&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",i),S.attr("transform",`translate(0,${-h/2})`),s.attr("transform",`translate(${-l/2+(e.padding??0)-(a.x-(a.left??0))},${-u/2+(e.padding??0)-h/2-(a.y-(a.top??0))})`),at(e,S),e.intersect=function(L){return et.polygon(e,v,L)},n}var ile=P(()=>{"use strict";zt();Xt();Yt();Ht();o(rle,"taggedWaveEdgedRectangle")});async function nle(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let{shapeSvg:n,bbox:a}=await vt(t,e,mt(e)),s=Math.max(a.width+(e.padding??0),e?.width||0),l=Math.max(a.height+(e.padding??0),e?.height||0),u=-s/2,h=-l/2,f=n.insert("rect",":first-child");return f.attr("class","text").attr("style",i).attr("rx",0).attr("ry",0).attr("x",u).attr("y",h).attr("width",s).attr("height",l),at(e,f),e.intersect=function(d){return et.rect(e,d)},n}var ale=P(()=>{"use strict";zt();Xt();Ht();o(nle,"text")});async function lle(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.padding??0,a=e.look==="neo"?12:n/2;if(e.width||e.height){let y=e.height??0;e.height=(e.height??0)-a,e.heightT,":first-child"),g=s.insert(()=>b,":first-child"),g.attr("class","basic label-container"),m&&g.attr("style",m)}else{let y=PVe(0,0,p,h,d,f);g=s.insert("path",":first-child").attr("d",y).attr("class","basic label-container").attr("style",xi(m)).attr("style",i),g.attr("class","basic label-container outer-path"),m&&g.selectAll("path").attr("style",m),i&&g.selectAll("path").attr("style",i)}return g.attr("label-offset-x",d),g.attr("transform",`translate(${-p/2}, ${h/2} )`),u.attr("transform",`translate(${-(l.width/2)-d-(l.x-(l.left??0))}, ${-(l.height/2)-(l.y-(l.top??0))})`),at(e,g),e.intersect=function(y){let v=et.rect(e,y),x=v.y-(e.y??0);if(f!=0&&(Math.abs(x)<(e.height??0)/2||Math.abs(x)==(e.height??0)/2&&Math.abs(v.x-(e.x??0))>(e.width??0)/2-d)){let b=d*d*(1-x*x/(f*f));b!=0&&(b=Math.sqrt(Math.abs(b))),b=d-b,y.x-(e.x??0)>0&&(b=-b),v.x+=b}return v},s}var PVe,BVe,FVe,sle,ole,cle=P(()=>{"use strict";zt();Ht();Yt();Xt();er();PVe=o((t,e,r,i,n,a)=>`M${t},${e} + a${n},${a} 0,0,1 0,${-i} + l${r},0 + a${n},${a} 0,0,1 0,${i} + M${r},${-i} + a${n},${a} 0,0,0 0,${i} + l${-r},0`,"createCylinderPathD"),BVe=o((t,e,r,i,n,a)=>[`M${t},${e}`,`M${t+r},${e}`,`a${n},${a} 0,0,0 0,${-i}`,`l${-r},0`,`a${n},${a} 0,0,0 0,${i}`,`l${r},0`].join(" "),"createOuterCylinderPathD"),FVe=o((t,e,r,i,n,a)=>[`M${t+r/2},${-i/2}`,`a${n},${a} 0,0,0 0,${i}`].join(" "),"createInnerCylinderPathD"),sle=5,ole=10;o(lle,"tiltedCylinder")});async function ule(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.padding??0,a=(e.look==="neo",n),s=e.look==="neo"?n*2:n,{shapeSvg:l,bbox:u}=await vt(t,e,mt(e)),h=(e?.height??u.height)+a,f=(e?.width??u.width)+s,d=[{x:-3*h/6,y:0},{x:f+3*h/6,y:0},{x:f,y:-h},{x:0,y:-h}],p,{cssStyles:m}=e;if(e.look==="handDrawn"){let g=rt.svg(l),y=st(e,{}),v=rr(d),x=g.path(v,y);p=l.insert(()=>x,":first-child").attr("transform",`translate(${-f/2}, ${h/2})`),m&&p.attr("style",m)}else p=ds(l,f,h,d);return i&&p.attr("style",i),e.width=f,e.height=h,at(e,p),e.intersect=function(g){return et.polygon(e,d,g)},l}var hle=P(()=>{"use strict";zt();Xt();Ht();Yt();Vh();o(ule,"trapezoid")});async function fle(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.padding??0,a=e.look==="neo"?16:n,s=e.look==="neo"?12:n,l=15,u=5;(e.width||e.height)&&(e.height=(e.height??0)-s*2,e.heightb,":first-child");return T.attr("class","basic label-container outer-path"),m&&e.look!=="handDrawn"&&T.selectChildren("path").attr("style",m),i&&e.look!=="handDrawn"&&T.selectChildren("path").attr("style",i),at(e,T),e.intersect=function(w){return et.polygon(e,v,w)},h}var dle=P(()=>{"use strict";zt();Xt();Ht();Yt();o(fle,"trapezoidalPentagon")});async function gle(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.padding??0,a=e.look==="neo"?n*2:n;(e.width||e.height)&&(e.width=((e?.width??0)-a)/2,e.widthb,":first-child").attr("transform",`translate(${-d/2}, ${d/2})`).attr("class","outer-path");return g&&e.look!=="handDrawn"&&T.selectChildren("path").attr("style",g),i&&e.look!=="handDrawn"&&T.selectChildren("path").attr("style",i),e.width=f,e.height=d,at(e,T),u.attr("transform",`translate(${-l.width/2-(l.x-(l.left??0))}, ${d/2-(l.height+(e.padding??0)/(h?2:1)-(l.y-(l.top??0)))})`),e.intersect=function(w){return Q.info("Triangle intersect",e,m,w),et.polygon(e,m,w)},s}var ple,mle,yle=P(()=>{"use strict";bt();zt();Xt();Ht();Yt();zt();Vr();Ut();ple=10,mle=10;o(gle,"triangle")});async function vle(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.padding??0,a=e.look==="neo"?16:n,s=e.look==="neo"?12:n,l=!0;(e.width||e.height)&&(l=!1,e.width=(e?.width??0)-a*2,e.width<10&&(e.width=10),e.height=(e?.height??0)-s*2,e.height<10&&(e.height=10));let{shapeSvg:u,bbox:h,label:f}=await vt(t,e,mt(e)),d=(e?.width?e?.width:h.width)+(a??0)*2,p=(e?.height?e?.height:h.height)+(s??0)*2,m=e.look==="neo"?p/4:p/8,g=p+(l?m:-m),{cssStyles:y}=e,x=14-d,b=x>0?x/2:0,T=rt.svg(u),w=st(e,{});e.look!=="handDrawn"&&(w.roughness=0,w.fillStyle="solid");let k=[{x:-d/2-b,y:g/2},...Ml(-d/2-b,g/2,d/2+b,g/2,m,.8),{x:d/2+b,y:-g/2},{x:-d/2-b,y:-g/2}],C=rr(k),E=T.path(C,w),S=u.insert(()=>E,":first-child");return S.attr("class","basic label-container outer-path"),y&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",y),i&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",i),S.attr("transform",`translate(0,${-m/2})`),f.attr("transform",`translate(${-d/2+(e.padding??0)-(h.x-(h.left??0))},${-p/2+(e.padding??0)-m-(h.y-(h.top??0))})`),at(e,S),e.intersect=function(L){return et.polygon(e,k,L)},u}var xle=P(()=>{"use strict";zt();Xt();Yt();Ht();o(vle,"waveEdgedRectangle")});async function ble(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.padding??0,a=e.look==="neo"?16:n,s=e.look==="neo"?20:n;if(e.width||e.height){e.width=e?.width??0,e.width<20&&(e.width=20),e.height=e?.height??0,e.height<10&&(e.height=10);let w=Math.min(e.height*.2,e.height/4);e.height=Math.ceil(e.height-s-w*(20/9)),e.width=e.width-a*2}let{shapeSvg:l,bbox:u}=await vt(t,e,mt(e)),h=(e?.width?e?.width:u.width)+a*2,f=(e?.height?e?.height:u.height)+s,d=f/8,p=f+d*2,{cssStyles:m}=e,g=rt.svg(l),y=st(e,{});e.look!=="handDrawn"&&(y.roughness=0,y.fillStyle="solid");let v=[{x:-h/2,y:p/2},...Ml(-h/2,p/2,h/2,p/2,d,1),{x:h/2,y:-p/2},...Ml(h/2,-p/2,-h/2,-p/2,d,-1)],x=rr(v),b=g.path(x,y),T=l.insert(()=>b,":first-child");return T.attr("class","basic label-container"),m&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",m),i&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",i),at(e,T),e.intersect=function(w){return et.polygon(e,v,w)},l}var Tle=P(()=>{"use strict";zt();Xt();Ht();Yt();o(ble,"waveRectangle")});async function kle(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e.look==="neo"?16:e.padding??0,a=e.look==="neo"?12:e.padding??0;(e.width||e.height)&&(e.width=Math.max((e?.width??0)-n*2-On,10),e.height=Math.max((e?.height??0)-a*2-On,10));let{shapeSvg:s,bbox:l,label:u}=await vt(t,e,mt(e)),h=(e?.width?e?.width:l.width)+n*2+On,f=(e?.height?e?.height:l.height)+a*2+On,d=h-On,p=f-On,m=-d/2,g=-p/2,{cssStyles:y}=e,v=rt.svg(s),x=st(e,{}),b=[{x:m-On,y:g-On},{x:m-On,y:g+p},{x:m+d,y:g+p},{x:m+d,y:g-On}],T=`M${m-On},${g-On} L${m+d},${g-On} L${m+d},${g+p} L${m-On},${g+p} L${m-On},${g-On} + M${m-On},${g} L${m+d},${g} + M${m},${g-On} L${m},${g+p}`;e.look!=="handDrawn"&&(x.roughness=0,x.fillStyle="solid");let w=v.path(T,x),k=s.insert(()=>w,":first-child");return k.attr("transform",`translate(${On/2}, ${On/2})`),k.attr("class","basic label-container outer-path"),y&&e.look!=="handDrawn"&&k.selectAll("path").attr("style",y),i&&e.look!=="handDrawn"&&k.selectAll("path").attr("style",i),u.attr("transform",`translate(${-(l.width/2)+On/2-(l.x-(l.left??0))}, ${-(l.height/2)+On/2-(l.y-(l.top??0))})`),at(e,k),e.intersect=function(C){return et.polygon(e,b,C)},s}var On,Cle=P(()=>{"use strict";zt();Ht();Yt();Xt();On=10;o(kle,"windowPane")});async function EM(t,e){let r=e;r.alias&&(e.label=r.alias);let{theme:i,themeVariables:n}=Lt(),{rowEven:a,rowOdd:s,nodeBorder:l,borderColorArray:u}=n;if(e.look==="handDrawn"){let{themeVariables:Z}=Lt(),{background:Y}=Z,ae={...e,id:e.id+"-background",domId:(e.domId||e.id)+"-background",look:"default",cssStyles:["stroke: none",`fill: ${Y}`]};await EM(t,ae)}let h=Lt();e.useHtmlLabels=h.htmlLabels;let f=h.er?.diagramPadding??10,d=h.er?.entityPadding??6,{cssStyles:p}=e,{labelStyles:m,nodeStyles:g}=tt(e);if(r.attributes.length===0&&e.label){let Z={rx:0,ry:0,labelPaddingX:f,labelPaddingY:f*1.5,classes:""};Ra(e.label,h)+Z.labelPaddingX*20){let Z=x.width+f*2-(k+C+E+S);k+=Z/I,C+=Z/I,E>0&&(E+=Z/I),S>0&&(S+=Z/I)}let _=k+C+E+S,D=rt.svg(v),N=st(e,{});e.look!=="handDrawn"&&(N.roughness=0,N.fillStyle="solid");let R=0;w.length>0&&(R=w.reduce((Z,Y)=>Z+(Y?.rowHeight??0),0));let B=Math.max(A.width+f*2,e?.width||0,_),O=Math.max((R??0)+x.height,e?.height||0),$=-B/2,z=-O/2;if(v.selectAll("g:not(:first-child)").each((Z,Y,ae)=>{let J=Ze(ae[Y]),ee=J.attr("transform"),re=0,te=0;if(ee){let de=RegExp(/translate\(([^,]+),([^)]+)\)/).exec(ee);de&&(re=parseFloat(de[1]),te=parseFloat(de[2]),J.attr("class").includes("attribute-name")?re+=k:J.attr("class").includes("attribute-keys")?re+=k+C:J.attr("class").includes("attribute-comment")&&(re+=k+C+E))}J.attr("transform",`translate(${$+f/2+re}, ${te+z+x.height+d/2})`)}),v.select(".name").attr("transform","translate("+-x.width/2+", "+(z+d/2)+")"),i!=null&&wle.has(i)){let Z=r.colorIndex??0;v.attr("data-color-id",`color-${Z%u.length}`)}let F=D.rectangle($,z,B,O,N),V=v.insert(()=>F,":first-child").attr("class","outer-path").attr("style",p.join(""));T.push(0);for(let[Z,Y]of w.entries()){let J=(Z+1)%2===0&&Y.yOffset!==0,ee=D.rectangle($,x.height+z+Y?.yOffset,B,Y?.rowHeight,{...N,fill:J?a:s,stroke:l});v.insert(()=>ee,"g.label").attr("style",p.join("")).attr("class",`row-rect-${J?"even":"odd"}`)}let H=1e-4,X=Rb($,x.height+z,B+$,x.height+z,H),W=D.polygon(X.map(Z=>[Z.x,Z.y]),N);if(v.insert(()=>W).attr("class","divider"),X=Rb(k+$,x.height+z,k+$,O+z,H),W=D.polygon(X.map(Z=>[Z.x,Z.y]),N),v.insert(()=>W).attr("class","divider"),L){let Z=k+C+$;X=Rb(Z,x.height+z,Z,O+z,H),W=D.polygon(X.map(Y=>[Y.x,Y.y]),N),v.insert(()=>W).attr("class","divider")}if(M){let Z=k+C+E+$;X=Rb(Z,x.height+z,Z,O+z,H),W=D.polygon(X.map(Y=>[Y.x,Y.y]),N),v.insert(()=>W).attr("class","divider")}for(let Z of T){let Y=x.height+z+Z;X=Rb($,Y,B+$,Y,H),W=D.polygon(X.map(ae=>[ae.x,ae.y]),N),v.insert(()=>W).attr("class","divider")}if(at(e,V),g&&e.look!=="handDrawn")if(i!=null&&$Ve.has(i))v.selectAll("path").attr("style",g);else{let Y=g.split(";")?.filter(ae=>ae.includes("stroke"))?.map(ae=>`${ae}`).join("; ");v.selectAll("path").attr("style",Y??""),v.selectAll(".row-rect-even path").attr("style",g)}return e.intersect=function(Z){return et.rect(e,Z)},v}async function Lb(t,e,r,i=0,n=0,a=[],s=""){let l=t.insert("g").attr("class",`label ${a.join(" ")}`).attr("transform",`translate(${i}, ${n})`).attr("style",s);e!==ou(e)&&(e=ou(e),e=e.replaceAll("<","<").replaceAll(">",">"));let u=l.node().appendChild(await Vi(l,e,{width:Ra(e,r)+100,style:s,useHtmlLabels:r.htmlLabels},r));if(e.includes("<")||e.includes(">")){let f=u.children[0];for(f.textContent=f.textContent.replaceAll("<","<").replaceAll(">",">");f.childNodes[0];)f=f.childNodes[0],f.textContent=f.textContent.replaceAll("<","<").replaceAll(">",">")}let h=u.getBBox();if(ls(r.htmlLabels)){let f=u.children[0];f.style.textAlign="start";let d=Ze(u);h=f.getBoundingClientRect(),d.attr("width",h.width),d.attr("height",h.height)}return h}function Rb(t,e,r,i,n){return t===r?[{x:t-n/2,y:e},{x:t+n/2,y:e},{x:r+n/2,y:i},{x:r-n/2,y:i}]:[{x:t,y:e-n/2},{x:t,y:e+n/2},{x:r,y:i+n/2},{x:r,y:i-n/2}]}var wle,$Ve,Ele=P(()=>{"use strict";zt();Xt();Ht();Yt();L1();Sr();To();Vr();Pr();er();wle=new Set(["redux-color","redux-dark-color"]),$Ve=new Set(["redux","redux-dark","redux-color","redux-dark-color"]);o(EM,"erBox");o(Lb,"addText");o(Rb,"lineToPolygon")});async function Sle(t,e,r,i,n=r.class.padding??12){let a=i?0:3,s=t.insert("g").attr("class",mt(e)).attr("id",e.domId||e.id),l=null,u=null,h=null,f=null,d=0,p=0,m=0;if(l=s.insert("g").attr("class","annotation-group text"),e.annotations.length>0){let b=e.annotations[0];await E5(l,{text:`\xAB${b}\xBB`},0),d=l.node().getBBox().height}u=s.insert("g").attr("class","label-group text"),await E5(u,e,0,["font-weight: bolder"]);let g=u.node().getBBox();p=g.height,h=s.insert("g").attr("class","members-group text");let y=0;for(let b of e.members){let T=await E5(h,b,y,[b.parseClassifier()]);y+=T+a}m=h.node().getBBox().height,m<=0&&(m=n/2),f=s.insert("g").attr("class","methods-group text");let v=0;for(let b of e.methods){let T=await E5(f,b,v,[b.parseClassifier()]);v+=T+a}let x=s.node().getBBox();if(l!==null){let b=l.node().getBBox();l.attr("transform",`translate(${-b.width/2})`)}return u.attr("transform",`translate(${-g.width/2}, ${d})`),x=s.node().getBBox(),h.attr("transform",`translate(0, ${d+p+n*2})`),x=s.node().getBBox(),f.attr("transform",`translate(0, ${d+p+(m?m+n*4:n*2)})`),x=s.node().getBBox(),{shapeSvg:s,bbox:x}}async function E5(t,e,r,i=[]){let n=t.insert("g").attr("class","label").attr("style",i.join("; ")),a=Lt(),s="useHtmlLabels"in e?e.useHtmlLabels:ls(a.htmlLabels)??!0,l="";"text"in e?l=e.text:l=e.label,!s&&l.startsWith("\\")&&(l=l.substring(1)),sn(l)&&(s=!0);let u=await Vi(n,r2(zs(l)),{width:Ra(l,a)+50,classes:"markdown-node-label",useHtmlLabels:s},a),h,f=1;if(s){let d=u.children[0],p=Ze(u);f=d.innerHTML.split("
    ").length,d.innerHTML.includes("")&&(f+=d.innerHTML.split("").length-1);let m=d.getElementsByTagName("img");if(m){let g=l.replace(/]*>/g,"").trim()==="";await Promise.all([...m].map(y=>new Promise(v=>{function x(){if(y.style.display="flex",y.style.flexDirection="column",g){let b=a.fontSize?.toString()??window.getComputedStyle(document.body).fontSize,w=parseInt(b,10)*5+"px";y.style.minWidth=w,y.style.maxWidth=w}else y.style.width="100%";v(y)}o(x,"setupImage"),setTimeout(()=>{y.complete&&x()}),y.addEventListener("error",x),y.addEventListener("load",x)})))}h=d.getBoundingClientRect(),p.attr("width",h.width),p.attr("height",h.height)}else{i.includes("font-weight: bolder")&&Ze(u).selectAll("tspan").attr("font-weight",""),f=u.children.length;let d=u.children[0];(u.textContent===""||u.textContent.includes(">"))&&(d.textContent=l[0]+l.substring(1).replaceAll(">",">").replaceAll("<","<").trim(),l[1]===" "&&(d.textContent=d.textContent[0]+" "+d.textContent.substring(1))),d.textContent==="undefined"&&(d.textContent=""),h=u.getBBox()}return n.attr("transform","translate(0,"+(-h.height/(2*f)+r)+")"),h.height}var Ale=P(()=>{"use strict";Pr();Sr();zt();er();Ut();To();Vr();o(Sle,"textHelper");o(E5,"addText")});async function _le(t,e){let r=ge(),{themeVariables:i}=r,{useGradient:n}=i,a=r.class.padding??12,s=a,l=e.useHtmlLabels??ls(r.htmlLabels)??!0,u=e;u.annotations=u.annotations??[],u.members=u.members??[],u.methods=u.methods??[];let{shapeSvg:h,bbox:f}=await Sle(t,e,r,l,s),{labelStyles:d,nodeStyles:p}=tt(e);e.labelStyle=d,e.cssStyles=u.styles||"";let m=u.styles?.join(";")||p||"";e.cssStyles||(e.cssStyles=m.replaceAll("!important","").split(";"));let g=u.members.length===0&&u.methods.length===0&&!r.class?.hideEmptyMembersBox,y=rt.svg(h),v=st(e,{});e.look!=="handDrawn"&&(v.roughness=0,v.fillStyle="solid");let x=Math.max(e.width??0,f.width),b=Math.max(e.height??0,f.height),T=(e.height??0)>f.height;u.members.length===0&&u.methods.length===0?b+=s:u.members.length>0&&u.methods.length===0&&(b+=s*2);let w=-x/2,k=-b/2,C=g?a*2:u.members.length===0&&u.methods.length===0?-a:0;T&&(C=a*2);let E=y.rectangle(w-a,k-a-(g?a:u.members.length===0&&u.methods.length===0?-a/2:0),x+2*a,b+2*a+C,v),S=h.insert(()=>E,":first-child");S.attr("class","basic label-container outer-path");let L=S.node().getBBox(),M=h.select(".annotation-group").node().getBBox().height-(g?a/2:0)||0,I=h.select(".label-group").node().getBBox().height-(g?a/2:0)||0,A=h.select(".members-group").node().getBBox().height-(g?a/2:0)||0,_=(M+I+k+a-(k-a-(g?a:u.members.length===0&&u.methods.length===0?-a/2:0)))/2;if(h.selectAll(".text").each((D,N,R)=>{let B=Ze(R[N]),O=B.attr("transform"),$=0;if(O){let H=RegExp(/translate\(([^,]+),([^)]+)\)/).exec(O);H&&($=parseFloat(H[2]))}let z=$+k+a-(g?a:u.members.length===0&&u.methods.length===0?-a/2:0);if(B.attr("class").includes("methods-group")){let V=Math.max(A,s/2);T?z=Math.max(_,M+I+V+k+s*2+a)+s*2:z=M+I+V+k+s*4+a}u.members.length===0&&u.methods.length===0&&r.class?.hideEmptyMembersBox&&(u.annotations.length>0?z=$-s:z=$),l||(z-=4);let F=w;(B.attr("class").includes("label-group")||B.attr("class").includes("annotation-group"))&&(F=-B.node()?.getBBox().width/2||0,h.selectAll("text").each(function(V,H,X){window.getComputedStyle(X[H]).textAnchor==="middle"&&(F=0)})),B.attr("transform",`translate(${F}, ${z})`)}),u.members.length>0||u.methods.length>0||g){let D=M+I+k+a,N=y.line(L.x,D,L.x+L.width,D+.001,v);h.insert(()=>N).attr("class",`divider${e.look==="neo"&&!n?" neo-line":""}`).attr("style",m)}if(g||u.members.length>0||u.methods.length>0){let D=M+I+A+k+s*2+a,N=y.line(L.x,T?Math.max(_,D):D,L.x+L.width,(T?Math.max(_,D):D)+.001,v);h.insert(()=>N).attr("class",`divider${e.look==="neo"&&!n?" neo-line":""}`).attr("style",m)}if(u.look!=="handDrawn"&&h.selectAll("path").attr("style",m),S.select(":nth-child(2)").attr("style",m),h.selectAll(".divider").select("path").attr("style",m),e.labelStyle?h.selectAll("span").attr("style",e.labelStyle):h.selectAll("span").attr("style",m),!l){let D=RegExp(/color\s*:\s*([^;]*)/),N=D.exec(m);if(N){let R=N[0].replace("color","fill");h.selectAll("tspan").attr("style",R)}else if(d){let R=D.exec(d);if(R){let B=R[0].replace("color","fill");h.selectAll("tspan").attr("style",B)}}}return at(e,S),e.intersect=function(D){return et.rect(e,D)},h}var Dle=P(()=>{"use strict";zt();Ut();Pr();Yt();Ht();Xt();Ale();Vr();o(_le,"classBox")});async function Lle(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let n=e,a=e,s=20,l=20,u="verifyMethod"in e,h=mt(e),{themeVariables:f}=ge(),{borderColorArray:d,requirementEdgeLabelBackground:p}=f,m=t.insert("g").attr("class",h).attr("id",e.domId??e.id),g;u?g=await Wh(m,`<<${n.type}>>`,0,e.labelStyle):g=await Wh(m,"<<Element>>",0,e.labelStyle);let y=g,v=await Wh(m,n.name,y,e.labelStyle+"; font-weight: bold;");if(y+=v+l,u){let L=await Wh(m,`${n.requirementId?`ID: ${n.requirementId}`:""}`,y,e.labelStyle);y+=L;let M=await Wh(m,`${n.text?`Text: ${n.text}`:""}`,y,e.labelStyle);y+=M;let I=await Wh(m,`${n.risk?`Risk: ${n.risk}`:""}`,y,e.labelStyle);y+=I,await Wh(m,`${n.verifyMethod?`Verification: ${n.verifyMethod}`:""}`,y,e.labelStyle)}else{let L=await Wh(m,`${a.type?`Type: ${a.type}`:""}`,y,e.labelStyle);y+=L,await Wh(m,`${a.docRef?`Doc Ref: ${a.docRef}`:""}`,y,e.labelStyle)}let x=(m.node()?.getBBox().width??200)+s,b=(m.node()?.getBBox().height??200)+s,T=-x/2,w=-b/2,k=rt.svg(m),C=st(e,{});e.look!=="handDrawn"&&(C.roughness=0,C.fillStyle="solid");let E=k.rectangle(T,w,x,b,C),S=m.insert(()=>E,":first-child");if(S.attr("class","basic label-container outer-path").attr("style",i),d?.length){let L=e.colorIndex??0;m.attr("data-color-id",`color-${L%d.length}`)}if(m.selectAll(".label").each((L,M,I)=>{let A=Ze(I[M]),_=A.attr("transform"),D=0,N=0;if(_){let $=RegExp(/translate\(([^,]+),([^)]+)\)/).exec(_);$&&(D=parseFloat($[1]),N=parseFloat($[2]))}let R=N-b/2,B=T+s/2;(M===0||M===1)&&(B=D),A.attr("transform",`translate(${B}, ${R+s})`)}),y>g+v+l){let L=w+g+v+l,M;if(e.look==="neo"){let _=[[T,L],[T+x,L],[T+x,L+.001],[T,L+.001]];M=k.polygon(_,C)}else M=k.line(T,L,T+x,L,C);m.insert(()=>M).attr("class","divider")}return at(e,S),e.intersect=function(L){return et.rect(e,L)},i&&e.look!=="handDrawn"&&(p||d?.length)&&m.selectAll("path").attr("style",i),m}async function Wh(t,e,r,i=""){if(e==="")return 0;let n=t.insert("g").attr("class","label").attr("style",i),a=ge(),s=a.htmlLabels??!0,l=await Vi(n,r2(zs(e)),{width:Ra(e,a)+50,classes:"markdown-node-label",useHtmlLabels:s,style:i},a),u;if(s){let h=l.children[0],f=Ze(l);u=h.getBoundingClientRect(),f.attr("width",u.width),f.attr("height",u.height)}else{let h=l.children[0];for(let f of h.children)i&&f.setAttribute("style",i);u=l.getBBox(),u.height+=6}return n.attr("transform",`translate(${-u.width/2},${-u.height/2+r})`),u.height}var Rle=P(()=>{"use strict";zt();Xt();Ht();Yt();er();Ut();To();Pr();o(Lle,"requirementBox");o(Wh,"addText")});async function Nle(t,e,{config:r}){let{labelStyles:i,nodeStyles:n}=tt(e);e.labelStyle=i||"";let a=10,s=e.width;e.width=(e.width??200)-10;let{shapeSvg:l,bbox:u,label:h}=await vt(t,e,mt(e)),f=e.padding||10,d="",p;"ticket"in e&&e.ticket&&r?.kanban?.ticketBaseUrl&&(d=r?.kanban?.ticketBaseUrl.replace("#TICKET#",e.ticket),p=l.insert("svg:a",":first-child").attr("class","kanban-ticket-link").attr("xlink:href",d).attr("target","_blank"));let m={useHtmlLabels:e.useHtmlLabels,labelStyle:e.labelStyle||"",width:e.width,img:e.img,padding:e.padding||8,centerLabel:!1},g,y;p?{label:g,bbox:y}=await h5(p,"ticket"in e&&e.ticket||"",m):{label:g,bbox:y}=await h5(l,"ticket"in e&&e.ticket||"",m);let{label:v,bbox:x}=await h5(l,"assigned"in e&&e.assigned||"",m);e.width=s;let b=10,T=e?.width||0,w=Math.max(y.height,x.height)/2,k=Math.max(u.height+b*2,e?.height||0)+w,C=-T/2,E=-k/2;h.attr("transform","translate("+(f-T/2)+", "+(-w-u.height/2)+")"),g.attr("transform","translate("+(f-T/2)+", "+(-w+u.height/2)+")"),v.attr("transform","translate("+(f+T/2-x.width-2*a)+", "+(-w+u.height/2)+")");let S,{rx:L,ry:M}=e,{cssStyles:I}=e;if(e.look==="handDrawn"){let A=rt.svg(l),_=st(e,{}),D=L||M?A.path(Co(C,E,T,k,L||0),_):A.rectangle(C,E,T,k,_);S=l.insert(()=>D,":first-child"),S.attr("class","basic label-container").attr("style",I||null)}else{S=l.insert("rect",":first-child"),S.attr("class","basic label-container __APA__").attr("style",n).attr("rx",L??5).attr("ry",M??5).attr("x",C).attr("y",E).attr("width",T).attr("height",k);let A="priority"in e&&e.priority;if(A){let _=l.append("line"),D=C+2,N=E+Math.floor((L??0)/2),R=E+k-Math.floor((L??0)/2);_.attr("x1",D).attr("y1",N).attr("x2",D).attr("y2",R).attr("stroke-width","4").attr("stroke",zVe(A))}}return at(e,S),e.height=k,e.intersect=function(A){return et.rect(e,A)},l}var zVe,Ile=P(()=>{"use strict";zt();Xt();R0();Ht();Yt();zVe=o(t=>{switch(t){case"Very High":return"red";case"High":return"orange";case"Medium":return null;case"Low":return"blue";case"Very Low":return"lightblue"}},"colorFromPriority");o(Nle,"kanbanItem")});async function Mle(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let{shapeSvg:n,bbox:a,halfPadding:s,label:l}=await vt(t,e,mt(e)),u=a.width+10*s,h=a.height+8*s,f=.15*u,{cssStyles:d}=e,p=a.width+20,m=a.height+20,g=Math.max(u,p),y=Math.max(h,m);l.attr("transform",`translate(${-a.width/2}, ${-a.height/2})`);let v,x=`M0 0 + a${f},${f} 1 0,0 ${g*.25},${-1*y*.1} + a${f},${f} 1 0,0 ${g*.25},0 + a${f},${f} 1 0,0 ${g*.25},0 + a${f},${f} 1 0,0 ${g*.25},${y*.1} + + a${f},${f} 1 0,0 ${g*.15},${y*.33} + a${f*.8},${f*.8} 1 0,0 0,${y*.34} + a${f},${f} 1 0,0 ${-1*g*.15},${y*.33} + + a${f},${f} 1 0,0 ${-1*g*.25},${y*.15} + a${f},${f} 1 0,0 ${-1*g*.25},0 + a${f},${f} 1 0,0 ${-1*g*.25},0 + a${f},${f} 1 0,0 ${-1*g*.25},${-1*y*.15} + + a${f},${f} 1 0,0 ${-1*g*.1},${-1*y*.33} + a${f*.8},${f*.8} 1 0,0 0,${-1*y*.34} + a${f},${f} 1 0,0 ${g*.1},${-1*y*.33} + H0 V0 Z`;if(e.look==="handDrawn"){let b=rt.svg(n),T=st(e,{}),w=b.path(x,T);v=n.insert(()=>w,":first-child"),v.attr("class","basic label-container").attr("style",xi(d))}else v=n.insert("path",":first-child").attr("class","basic label-container").attr("style",i).attr("d",x);return v.attr("transform",`translate(${-g/2}, ${-y/2})`),at(e,v),e.calcIntersect=function(b,T){return et.rect(b,T)},e.intersect=function(b){return Q.info("Bang intersect",e,b),et.rect(e,b)},n}var Ole=P(()=>{"use strict";bt();zt();Xt();Ht();Yt();er();o(Mle,"bang")});async function Ple(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let{shapeSvg:n,bbox:a,halfPadding:s,label:l}=await vt(t,e,mt(e)),u=a.width+2*s,h=a.height+2*s,f=.15*u,d=.25*u,p=.35*u,m=.2*u,{cssStyles:g}=e,y,v=`M0 0 + a${f},${f} 0 0,1 ${u*.25},${-1*u*.1} + a${p},${p} 1 0,1 ${u*.4},${-1*u*.1} + a${d},${d} 1 0,1 ${u*.35},${u*.2} + + a${f},${f} 1 0,1 ${u*.15},${h*.35} + a${m},${m} 1 0,1 ${-1*u*.15},${h*.65} + + a${d},${f} 1 0,1 ${-1*u*.25},${u*.15} + a${p},${p} 1 0,1 ${-1*u*.5},0 + a${f},${f} 1 0,1 ${-1*u*.25},${-1*u*.15} + + a${f},${f} 1 0,1 ${-1*u*.1},${-1*h*.35} + a${m},${m} 1 0,1 ${u*.1},${-1*h*.65} + H0 V0 Z`;if(e.look==="handDrawn"){let x=rt.svg(n),b=st(e,{}),T=x.path(v,b);y=n.insert(()=>T,":first-child"),y.attr("class","basic label-container").attr("style",xi(g))}else y=n.insert("path",":first-child").attr("class","basic label-container").attr("style",i).attr("d",v);return l.attr("transform",`translate(${-a.width/2}, ${-a.height/2})`),y.attr("transform",`translate(${-u/2}, ${-h/2})`),at(e,y),e.calcIntersect=function(x,b){return et.rect(x,b)},e.intersect=function(x){return Q.info("Cloud intersect",e,x),et.rect(e,x)},n}var Ble=P(()=>{"use strict";Yt();bt();er();Xt();Ht();zt();o(Ple,"cloud")});async function Fle(t,e){let{labelStyles:r,nodeStyles:i}=tt(e);e.labelStyle=r;let{shapeSvg:n,bbox:a,halfPadding:s,label:l}=await vt(t,e,mt(e)),u=a.width+8*s,h=a.height+2*s,f=5,d=e.look==="neo"?` + M${-u/2} ${h/2-f} + v${-h+2*f} + q0,-${f} ${f},-${f} + h${u-2*f} + q${f},0 ${f},${f} + v${h-f} + H${-u/2} + Z + `:` + M${-u/2} ${h/2-f} + v${-h+2*f} + q0,-${f} ${f},-${f} + h${u-2*f} + q${f},0 ${f},${f} + v${h-2*f} + q0,${f} ${-f},${f} + h${-(u-2*f)} + q${-f},0 ${-f},${-f} + Z + `;if(!e.domId)throw new Error(`defaultMindmapNode: node "${e.id}" is missing a domId \u2014 was render.ts domId prefixing skipped?`);let p=n.append("path").attr("id",e.domId).attr("class","node-bkg node-"+e.type).attr("style",i).attr("d",d);return n.append("line").attr("class","node-line-").attr("x1",-u/2).attr("y1",h/2).attr("x2",u/2).attr("y2",h/2),l.attr("transform",`translate(${-a.width/2}, ${-a.height/2})`),n.append(()=>l.node()),at(e,p),e.calcIntersect=function(m,g){return et.rect(m,g)},e.intersect=function(m){return et.rect(e,m)},n}var $le=P(()=>{"use strict";Xt();Ht();zt();o(Fle,"defaultMindmapNode")});async function zle(t,e){let r={padding:e.padding??0};return C5(t,e,r)}var Gle=P(()=>{"use strict";CM();o(zle,"mindmapCircle")});function Vle(t){return t in SM}var GVe,VVe,SM,AM=P(()=>{"use strict";fse();mse();yse();xse();CM();Tse();Cse();Ese();Ase();Dse();Ise();Ose();Bse();$se();qse();Use();Yse();Xse();Qse();Jse();toe();ioe();aoe();ooe();coe();hoe();doe();moe();yoe();Toe();Coe();Eoe();Aoe();Doe();Roe();Ioe();Ooe();Boe();$oe();Goe();qoe();Uoe();Yoe();Xoe();Qoe();Joe();tle();ile();ale();cle();hle();dle();yle();xle();Tle();Cle();Ele();Dle();Rle();Ile();Ole();Ble();$le();Gle();GVe=[{semanticName:"Process",name:"Rectangle",shortName:"rect",description:"Standard process shape",aliases:["proc","process","rectangle"],internalAliases:["squareRect"],handler:Voe},{semanticName:"Event",name:"Rounded Rectangle",shortName:"rounded",description:"Represents an event",aliases:["event"],internalAliases:["roundedRect"],handler:Poe},{semanticName:"Terminal Point",name:"Stadium",shortName:"stadium",description:"Terminal point",aliases:["terminal","pill"],handler:Woe},{semanticName:"Subprocess",name:"Framed Rectangle",shortName:"fr-rect",description:"Subprocess",aliases:["subprocess","subproc","framed-rectangle","subroutine"],handler:Zoe},{semanticName:"Database",name:"Cylinder",shortName:"cyl",description:"Database storage",aliases:["db","database","cylinder"],handler:Nse},{semanticName:"Start",name:"Circle",shortName:"circle",description:"Starting point",aliases:["circ"],handler:C5},{semanticName:"Bang",name:"Bang",shortName:"bang",description:"Bang",aliases:["bang"],handler:Mle},{semanticName:"Cloud",name:"Cloud",shortName:"cloud",description:"cloud",aliases:["cloud"],handler:Ple},{semanticName:"Decision",name:"Diamond",shortName:"diam",description:"Decision-making step",aliases:["decision","diamond","question"],handler:Loe},{semanticName:"Prepare Conditional",name:"Hexagon",shortName:"hex",description:"Preparation or condition step",aliases:["hexagon","prepare"],handler:jse},{semanticName:"Data Input/Output",name:"Lean Right",shortName:"lean-r",description:"Represents input or output",aliases:["lean-right","in-out"],internalAliases:["lean_right"],handler:poe},{semanticName:"Data Input/Output",name:"Lean Left",shortName:"lean-l",description:"Represents output or input",aliases:["lean-left","out-in"],internalAliases:["lean_left"],handler:foe},{semanticName:"Priority Action",name:"Trapezoid Base Bottom",shortName:"trap-b",description:"Priority action",aliases:["priority","trapezoid-bottom","trapezoid"],handler:ule},{semanticName:"Manual Operation",name:"Trapezoid Base Top",shortName:"trap-t",description:"Represents a manual task",aliases:["manual","trapezoid-top","inv-trapezoid"],internalAliases:["inv_trapezoid"],handler:loe},{semanticName:"Stop",name:"Double Circle",shortName:"dbl-circ",description:"Represents a stop point",aliases:["double-circle"],internalAliases:["doublecircle"],handler:Pse},{semanticName:"Text Block",name:"Text Block",shortName:"text",description:"Text block",handler:nle},{semanticName:"Card",name:"Notched Rectangle",shortName:"notch-rect",description:"Represents a card",aliases:["card","notched-rectangle"],handler:gse},{semanticName:"Lined/Shaded Process",name:"Lined Rectangle",shortName:"lin-rect",description:"Lined process shape",aliases:["lined-rectangle","lined-process","lin-proc","shaded-process"],handler:Foe},{semanticName:"Start",name:"Small Circle",shortName:"sm-circ",description:"Small starting point",aliases:["start","small-circle"],internalAliases:["stateStart"],handler:Koe},{semanticName:"Stop",name:"Framed Circle",shortName:"fr-circ",description:"Stop point",aliases:["stop","framed-circle"],internalAliases:["stateEnd"],handler:joe},{semanticName:"Fork/Join",name:"Filled Rectangle",shortName:"fork",description:"Fork or join in process flow",aliases:["join"],internalAliases:["forkJoin"],handler:Wse},{semanticName:"Collate",name:"Hourglass",shortName:"hourglass",description:"Represents a collate operation",aliases:["hourglass","collate"],handler:Kse},{semanticName:"Comment",name:"Curly Brace",shortName:"brace",description:"Adds a comment",aliases:["comment","brace-l"],handler:kse},{semanticName:"Comment Right",name:"Curly Brace",shortName:"brace-r",description:"Adds a comment",handler:wse},{semanticName:"Comment with braces on both sides",name:"Curly Braces",shortName:"braces",description:"Adds a comment",handler:Sse},{semanticName:"Com Link",name:"Lightning Bolt",shortName:"bolt",description:"Communication link",aliases:["com-link","lightning-bolt"],handler:goe},{semanticName:"Document",name:"Document",shortName:"doc",description:"Represents a document",aliases:["doc","document"],handler:vle},{semanticName:"Delay",name:"Half-Rounded Rectangle",shortName:"delay",description:"Represents a delay",aliases:["half-rounded-rectangle"],handler:Hse},{semanticName:"Direct Access Storage",name:"Horizontal Cylinder",shortName:"h-cyl",description:"Direct access storage",aliases:["das","horizontal-cylinder"],handler:lle},{semanticName:"Disk Storage",name:"Lined Cylinder",shortName:"lin-cyl",description:"Disk storage",aliases:["disk","lined-cylinder"],handler:boe},{semanticName:"Display",name:"Curved Trapezoid",shortName:"curv-trap",description:"Represents a display",aliases:["curved-trapezoid","display"],handler:_se},{semanticName:"Divided Process",name:"Divided Rectangle",shortName:"div-rect",description:"Divided process shape",aliases:["div-proc","divided-rectangle","divided-process"],handler:Mse},{semanticName:"Extract",name:"Triangle",shortName:"tri",description:"Extraction process",aliases:["extract","triangle"],handler:gle},{semanticName:"Internal Storage",name:"Window Pane",shortName:"win-pane",description:"Internal storage",aliases:["internal-storage","window-pane"],handler:kle},{semanticName:"Junction",name:"Filled Circle",shortName:"f-circ",description:"Junction point",aliases:["junction","filled-circle"],handler:Fse},{semanticName:"Loop Limit",name:"Trapezoidal Pentagon",shortName:"notch-pent",description:"Loop limit step",aliases:["loop-limit","notched-pentagon"],handler:fle},{semanticName:"Manual File",name:"Flipped Triangle",shortName:"flip-tri",description:"Manual file operation",aliases:["manual-file","flipped-triangle"],handler:Vse},{semanticName:"Manual Input",name:"Sloped Rectangle",shortName:"sl-rect",description:"Manual input step",aliases:["manual-input","sloped-rectangle"],handler:zoe},{semanticName:"Multi-Document",name:"Stacked Document",shortName:"docs",description:"Multiple documents",aliases:["documents","st-doc","stacked-document"],handler:Soe},{semanticName:"Multi-Process",name:"Stacked Rectangle",shortName:"st-rect",description:"Multiple processes",aliases:["procs","processes","stacked-rectangle"],handler:woe},{semanticName:"Stored Data",name:"Bow Tie Rectangle",shortName:"bow-rect",description:"Stored data",aliases:["stored-data","bow-tie-rectangle"],handler:pse},{semanticName:"Summary",name:"Crossed Circle",shortName:"cross-circ",description:"Summary",aliases:["summary","crossed-circle"],handler:bse},{semanticName:"Tagged Document",name:"Tagged Document",shortName:"tag-doc",description:"Tagged document",aliases:["tag-doc","tagged-document"],handler:rle},{semanticName:"Tagged Process",name:"Tagged Rectangle",shortName:"tag-rect",description:"Tagged process",aliases:["tagged-rectangle","tag-proc","tagged-process"],handler:ele},{semanticName:"Paper Tape",name:"Flag",shortName:"flag",description:"Paper tape",aliases:["paper-tape"],handler:ble},{semanticName:"Odd",name:"Odd",shortName:"odd",description:"Odd shape",internalAliases:["rect_left_inv_arrow"],handler:Noe},{semanticName:"Lined Document",name:"Lined Document",shortName:"lin-doc",description:"Lined document",aliases:["lined-document"],handler:koe}],VVe=o(()=>{let e=[...Object.entries({state:Hoe,choice:vse,note:_oe,rectWithTitle:Moe,labelRect:uoe,iconSquare:noe,iconCircle:eoe,icon:Zse,iconRounded:roe,imageSquare:soe,anchor:hse,kanbanItem:Nle,mindmapCircle:zle,defaultMindmapNode:Fle,classBox:_le,erBox:EM,requirementBox:Lle}),...GVe.flatMap(r=>[r.shortName,..."aliases"in r?r.aliases:[],..."internalAliases"in r?r.internalAliases:[]].map(n=>[n,r.handler]))];return Object.fromEntries(e)},"generateShapeMap"),SM=VVe();o(Vle,"isValidShape")});var qVe,S5,qle=P(()=>{"use strict";Pr();xb();Ut();bt();AM();er();Vr();Ki();y0();zx();qVe="flowchart-",S5=class{constructor(){this.vertexCounter=0;this.config=ge();this.diagramId="";this.vertices=new Map;this.edges=[];this.classes=new Map;this.subGraphs=[];this.subGraphLookup=new Map;this.tooltips=new Map;this.subCount=0;this.firstGraphFlag=!0;this.secCount=-1;this.posCrossRef=[];this.funs=[];this.setAccTitle=Ar;this.setAccDescription=Lr;this.setDiagramTitle=Mr;this.getAccTitle=Dr;this.getAccDescription=Rr;this.getDiagramTitle=Nr;this.funs.push(this.setupToolTips.bind(this)),this.addVertex=this.addVertex.bind(this),this.firstGraph=this.firstGraph.bind(this),this.setDirection=this.setDirection.bind(this),this.addSubGraph=this.addSubGraph.bind(this),this.addLink=this.addLink.bind(this),this.setLink=this.setLink.bind(this),this.updateLink=this.updateLink.bind(this),this.addClass=this.addClass.bind(this),this.setClass=this.setClass.bind(this),this.destructLink=this.destructLink.bind(this),this.setClickEvent=this.setClickEvent.bind(this),this.setTooltip=this.setTooltip.bind(this),this.updateLinkInterpolate=this.updateLinkInterpolate.bind(this),this.setClickFun=this.setClickFun.bind(this),this.bindFunctions=this.bindFunctions.bind(this),this.lex={firstGraph:this.firstGraph.bind(this)},this.clear(),this.setGen("gen-2")}static{o(this,"FlowDB")}sanitizeText(e){return lt.sanitizeText(e,this.config)}sanitizeNodeLabelType(e){switch(e){case"markdown":case"string":case"text":return e;default:return"markdown"}}setDiagramId(e){this.diagramId=e}lookUpDomId(e){for(let r of this.vertices.values())if(r.id===e)return this.diagramId?`${this.diagramId}-${r.domId}`:r.domId;return this.diagramId?`${this.diagramId}-${e}`:e}addVertex(e,r,i,n,a,s,l={},u){if(!e||e.trim().length===0)return;let h;if(u!==void 0){let m;u.includes(` +`)?m=u+` +`:m=`{ +`+u+` +}`,h=ud(m,{schema:cd})}let f=this.edges.find(m=>m.id===e);if(f){let m=h;m?.animate!==void 0&&(f.animate=m.animate),m?.animation!==void 0&&(f.animation=m.animation),m?.curve!==void 0&&(f.interpolate=m.curve);return}let d,p=this.vertices.get(e);if(p===void 0&&(r===void 0&&i===void 0&&n!==void 0&&n!==null&&Q.warn(`Style applied to unknown node "${e}". This may indicate a typo. The node will be created automatically.`),p={id:e,labelType:"text",domId:qVe+e+"-"+this.vertexCounter,styles:[],classes:[]},this.vertices.set(e,p)),this.vertexCounter++,r!==void 0?(this.config=ge(),d=this.sanitizeText(r.text.trim()),p.labelType=r.type,d.startsWith('"')&&d.endsWith('"')&&(d=d.substring(1,d.length-1)),p.text=d):p.text===void 0&&(p.text=e),i!==void 0&&(p.type=i),n?.forEach(m=>{p.styles.push(m)}),a?.forEach(m=>{p.classes.push(m)}),s!==void 0&&(p.dir=s),p.props===void 0?p.props=l:l!==void 0&&Object.assign(p.props,l),h!==void 0){if(h.shape){if(h.shape!==h.shape.toLowerCase()||h.shape.includes("_"))throw new Error(`No such shape: ${h.shape}. Shape names should be lowercase.`);if(!Vle(h.shape))throw new Error(`No such shape: ${h.shape}.`);p.type=h?.shape}h?.label&&(p.text=h?.label,p.labelType=this.sanitizeNodeLabelType(h?.labelType)),h?.icon&&(p.icon=h?.icon,!h.label?.trim()&&p.text===e&&(p.text="")),h?.form&&(p.form=h?.form),h?.pos&&(p.pos=h?.pos),h?.img&&(p.img=h?.img,!h.label?.trim()&&p.text===e&&(p.text="")),h?.constraint&&(p.constraint=h.constraint),h.w&&(p.assetWidth=Number(h.w)),h.h&&(p.assetHeight=Number(h.h))}}addSingleLink(e,r,i,n){let l={start:e,end:r,type:void 0,text:"",labelType:"text",classes:[],isUserDefinedId:!1,interpolate:this.edges.defaultInterpolate};Q.info("abc78 Got edge...",l);let u=i.text;if(u!==void 0&&(l.text=this.sanitizeText(u.text.trim()),l.text.startsWith('"')&&l.text.endsWith('"')&&(l.text=l.text.substring(1,l.text.length-1)),l.labelType=this.sanitizeNodeLabelType(u.type)),i!==void 0&&(l.type=i.type,l.stroke=i.stroke,l.length=i.length>10?10:i.length),n&&!this.edges.some(h=>h.id===n))l.id=n,l.isUserDefinedId=!0;else{let h=this.edges.filter(f=>f.start===l.start&&f.end===l.end);h.length===0?l.id=Cu(l.start,l.end,{counter:0,prefix:"L"}):l.id=Cu(l.start,l.end,{counter:h.length+1,prefix:"L"})}if(this.edges.length<(this.config.maxEdges??500))Q.info("Pushing edge..."),this.edges.push(l);else throw new Error(`Edge limit exceeded. ${this.edges.length} edges found, but the limit is ${this.config.maxEdges}. + +Initialize mermaid with maxEdges set to a higher number to allow more edges. +You cannot set this config via configuration inside the diagram as it is a secure config. +You have to call mermaid.initialize.`)}isLinkData(e){return e!==null&&typeof e=="object"&&"id"in e&&typeof e.id=="string"}addLink(e,r,i){let n=this.isLinkData(i)?i.id.replace("@",""):void 0;Q.info("addLink",e,r,n);for(let a of e)for(let s of r){let l=a===e[e.length-1],u=s===r[0];l&&u?this.addSingleLink(a,s,i,n):this.addSingleLink(a,s,i,void 0)}}updateLinkInterpolate(e,r){e.forEach(i=>{i==="default"?this.edges.defaultInterpolate=r:this.edges[i].interpolate=r})}updateLink(e,r){e.forEach(i=>{if(typeof i=="number"&&i>=this.edges.length)throw new Error(`The index ${i} for linkStyle is out of bounds. Valid indices for linkStyle are between 0 and ${this.edges.length-1}. (Help: Ensure that the index is within the range of existing edges.)`);i==="default"?this.edges.defaultStyle=r:(this.edges[i].style=r,(this.edges[i]?.style?.length??0)>0&&!this.edges[i]?.style?.some(n=>n?.startsWith("fill"))&&this.edges[i]?.style?.push("fill:none"))})}addClass(e,r){let i=r.join().replace(/\\,/g,"\xA7\xA7\xA7").replace(/,/g,";").replace(/§§§/g,",").split(";");e.split(",").forEach(n=>{let a=this.classes.get(n);a===void 0&&(a={id:n,styles:[],textStyles:[]},this.classes.set(n,a)),i?.forEach(s=>{if(/color/.exec(s)){let l=s.replace("fill","bgFill");a.textStyles.push(l)}a.styles.push(s)})})}setDirection(e){this.direction=e.trim(),/.*/.exec(this.direction)&&(this.direction="LR"),/.*v/.exec(this.direction)&&(this.direction="TB"),this.direction==="TD"&&(this.direction="TB")}setClass(e,r){for(let i of e.split(",")){let n=this.vertices.get(i);n&&n.classes.push(r);let a=this.edges.find(l=>l.id===i);a&&a.classes.push(r);let s=this.subGraphLookup.get(i);s&&s.classes.push(r)}}setTooltip(e,r){if(r!==void 0){r=this.sanitizeText(r);for(let i of e.split(","))this.tooltips.set(this.version==="gen-1"?this.lookUpDomId(i):i,r)}}setClickFun(e,r,i){if(ge().securityLevel!=="loose"||r===void 0)return;let n=[];if(typeof i=="string"){n=i.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let s=0;s{let s=this.lookUpDomId(e),l=document.querySelector(`[id="${s}"]`);l!==null&&l.addEventListener("click",()=>{Kt.runFunc(r,...n)},!1)}))}setLink(e,r,i){e.split(",").forEach(n=>{let a=this.vertices.get(n);a!==void 0&&(a.link=Kt.formatUrl(r,this.config),a.linkTarget=i)}),this.setClass(e,"clickable")}getTooltip(e){return this.tooltips.get(e)}setClickEvent(e,r,i){e.split(",").forEach(n=>{this.setClickFun(n,r,i)}),this.setClass(e,"clickable")}bindFunctions(e){this.funs.forEach(r=>{r(e)})}getDirection(){return this.direction?.trim()}getVertices(){return this.vertices}getEdges(){return this.edges}getClasses(){return this.classes}setupToolTips(e){let r=E3();Ze(e).select("svg").selectAll("g.node").on("mouseover",a=>{let s=Ze(a.currentTarget),l=s.attr("title");if(l===null)return;let u=a.currentTarget?.getBoundingClientRect();r.transition().duration(200).style("opacity",".9"),r.text(s.attr("title")).style("left",window.scrollX+u.left+(u.right-u.left)/2+"px").style("top",window.scrollY+u.bottom+"px"),r.html(Tl.sanitize(l)),s.classed("hover",!0)}).on("mouseout",a=>{r.transition().duration(500).style("opacity",0),Ze(a.currentTarget).classed("hover",!1)})}clear(e="gen-2"){this.vertices=new Map,this.classes=new Map,this.edges=[],this.funs=[this.setupToolTips.bind(this)],this.diagramId="",this.subGraphs=[],this.subGraphLookup=new Map,this.subCount=0,this.tooltips=new Map,this.firstGraphFlag=!0,this.version=e,this.config=ge(),wr()}setGen(e){this.version=e||"gen-2"}defaultStyle(){return"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"}addSubGraph(e,r,i){let n=e.text.trim(),a=i.text;e===i&&/\s/.exec(i.text)&&(n=void 0);let l=o(p=>{let m={boolean:{},number:{},string:{}},g=[],y;return{nodeList:p.filter(function(x){let b=typeof x;return x.stmt&&x.stmt==="dir"?(y=x.value,!1):x.trim()===""?!1:b in m?m[b].hasOwnProperty(x)?!1:m[b][x]=!0:g.includes(x)?!1:g.push(x)}),dir:y}},"uniq")(r.flat()),u=l.nodeList,h=l.dir,f=ge().flowchart??{};if(h=h??(f.inheritDir?this.getDirection()??ge().direction??void 0:void 0),this.version==="gen-1")for(let p=0;p2e3)return{result:!1,count:0};if(this.posCrossRef[this.secCount]=r,this.subGraphs[r].id===e)return{result:!0,count:0};let n=0,a=1;for(;n=0){let l=this.indexNodes2(e,s);if(l.result)return{result:!0,count:a+l.count};a=a+l.count}n=n+1}return{result:!1,count:a}}getDepthFirstPos(e){return this.posCrossRef[e]}indexNodes(){this.secCount=-1,this.subGraphs.length>0&&this.indexNodes2("none",this.subGraphs.length-1)}getSubGraphs(){return this.subGraphs}firstGraph(){return this.firstGraphFlag?(this.firstGraphFlag=!1,!0):!1}destructStartLink(e){let r=e.trim(),i="arrow_open";switch(r[0]){case"<":i="arrow_point",r=r.slice(1);break;case"x":i="arrow_cross",r=r.slice(1);break;case"o":i="arrow_circle",r=r.slice(1);break}let n="normal";return r.includes("=")&&(n="thick"),r.includes(".")&&(n="dotted"),{type:i,stroke:n}}countChar(e,r){let i=r.length,n=0;for(let a=0;a":n="arrow_point",r.startsWith("<")&&(n="double_"+n,i=i.slice(1));break;case"o":n="arrow_circle",r.startsWith("o")&&(n="double_"+n,i=i.slice(1));break}let a="normal",s=i.length-1;i.startsWith("=")&&(a="thick"),i.startsWith("~")&&(a="invisible");let l=this.countChar(".",i);return l&&(a="dotted",s=l),{type:n,stroke:a,length:s}}destructLink(e,r){let i=this.destructEndLink(e),n;if(r){if(n=this.destructStartLink(r),n.stroke!==i.stroke)return{type:"INVALID",stroke:"INVALID"};if(n.type==="arrow_open")n.type=i.type;else{if(n.type!==i.type)return{type:"INVALID",stroke:"INVALID"};n.type="double_"+n.type}return n.type==="double_arrow"&&(n.type="double_arrow_point"),n.length=i.length,n}return i}exists(e,r){for(let i of e)if(i.nodes.includes(r))return!0;return!1}makeUniq(e,r){let i=[];return e.nodes.forEach((n,a)=>{this.exists(r,n)||i.push(e.nodes[a])}),{nodes:i}}getTypeFromVertex(e){if(e.img)return"imageSquare";if(e.icon)return e.form==="circle"?"iconCircle":e.form==="square"?"iconSquare":e.form==="rounded"?"iconRounded":"icon";switch(e.type){case"square":case void 0:return"squareRect";case"round":return"roundedRect";case"ellipse":return"ellipse";default:return e.type}}findNode(e,r){return e.find(i=>i.id===r)}destructEdgeType(e){let r="none",i="arrow_point";switch(e){case"arrow_point":case"arrow_circle":case"arrow_cross":i=e;break;case"double_arrow_point":case"double_arrow_circle":case"double_arrow_cross":r=e.replace("double_",""),i=r;break}return{arrowTypeStart:r,arrowTypeEnd:i}}addNodeFromVertex(e,r,i,n,a,s){let l=i.get(e.id),u=n.get(e.id)??!1,h=this.findNode(r,e.id);if(h)h.cssStyles=e.styles,h.cssCompiledStyles=this.getCompiledStyles(e.classes),h.cssClasses=e.classes.join(" ");else{let f={id:e.id,label:e.text,labelType:e.labelType,labelStyle:"",parentId:l,padding:a.flowchart?.padding||8,cssStyles:e.styles,cssCompiledStyles:this.getCompiledStyles(["default","node",...e.classes]),cssClasses:"default "+e.classes.join(" "),dir:e.dir,domId:e.domId,look:s,link:e.link,linkTarget:e.linkTarget,tooltip:this.getTooltip(e.id),icon:e.icon,pos:e.pos,img:e.img,assetWidth:e.assetWidth,assetHeight:e.assetHeight,constraint:e.constraint};u?r.push({...f,isGroup:!0,shape:"rect"}):r.push({...f,isGroup:!1,shape:this.getTypeFromVertex(e)})}}getCompiledStyles(e){let r=[];for(let i of e){let n=this.classes.get(i);n?.styles&&(r=[...r,...n.styles??[]].map(a=>a.trim())),n?.textStyles&&(r=[...r,...n.textStyles??[]].map(a=>a.trim()))}return r}getData(){let e=ge(),r=[],i=[],n=this.getSubGraphs(),a=new Map,s=new Map;for(let h=n.length-1;h>=0;h--){let f=n[h];f.nodes.length>0&&s.set(f.id,!0);for(let d of f.nodes)a.set(d,f.id)}for(let h=n.length-1;h>=0;h--){let f=n[h];r.push({id:f.id,label:f.title,labelStyle:"",labelType:f.labelType,parentId:a.get(f.id),padding:8,cssCompiledStyles:this.getCompiledStyles(f.classes),cssClasses:f.classes.join(" "),shape:"rect",dir:f.dir,isGroup:!0,look:e.look})}this.getVertices().forEach(h=>{this.addNodeFromVertex(h,r,a,s,e,e.look||"classic")});let u=this.getEdges();return u.forEach((h,f)=>{let{arrowTypeStart:d,arrowTypeEnd:p}=this.destructEdgeType(h.type),m=[...u.defaultStyle??[]];h.style&&m.push(...h.style);let g={id:Cu(h.start,h.end,{counter:f,prefix:"L"},h.id),isUserDefinedId:h.isUserDefinedId,start:h.start,end:h.end,type:h.type??"normal",label:h.text,labelType:h.labelType,labelpos:"c",thickness:h.stroke,minlen:h.length,classes:h?.stroke==="invisible"?"":"edge-thickness-normal edge-pattern-solid flowchart-link",arrowTypeStart:h?.stroke==="invisible"||h?.type==="arrow_open"?"none":d,arrowTypeEnd:h?.stroke==="invisible"||h?.type==="arrow_open"?"none":p,arrowheadStyle:"fill: #333",cssCompiledStyles:this.getCompiledStyles(h.classes),labelStyle:m,style:m,pattern:h.stroke,look:e.look,animate:h.animate,animation:h.animation,curve:h.interpolate||this.edges.defaultInterpolate||e.flowchart?.curve};i.push(g)}),{nodes:r,edges:i,other:{},config:e}}defaultConfig(){return iw.flowchart}}});var Ol,I0=P(()=>{"use strict";Pr();Ol=o((t,e)=>{let r;return e==="sandbox"&&(r=Ze("#i"+t)),(e==="sandbox"?Ze(r.nodes()[0].contentDocument.body):Ze("body")).select(`[id="${t}"]`)},"getDiagramElement")});var Uh,Nb=P(()=>{"use strict";Uh=o(({flowchart:t})=>{let e=t?.subGraphTitleMargin?.top??0,r=t?.subGraphTitleMargin?.bottom??0,i=e+r;return{subGraphTitleTopMargin:e,subGraphTitleBottomMargin:r,subGraphTitleTotalMargin:i}},"getSubGraphTitleMargins")});var Wle,WVe,UVe,HVe,YVe,jVe,XVe,Ule,N1,Hle,A5=P(()=>{"use strict";Ut();Sr();bt();Nb();Pr();Yt();To();aM();w5();R0();Ht();Wle=o(async(t,e)=>{Q.info("Creating subgraph rect for ",e.id,e);let r=ge(),{themeVariables:i,handDrawnSeed:n}=r,{clusterBkg:a,clusterBorder:s}=i,{labelStyles:l,nodeStyles:u,borderStyles:h,backgroundStyles:f}=tt(e),d=t.insert("g").attr("class","cluster "+e.cssClasses).attr("id",e.domId).attr("data-look",e.look),p=Or(r),m=d.insert("g").attr("class","cluster-label "),g;e.labelType==="markdown"?g=await Vi(m,e.label,{style:e.labelStyle,useHtmlLabels:p,isNode:!0,width:e.width}):g=await Dc(m,e.label,e.labelStyle||"",!1,!0);let y=g.getBBox();if(Or(r)){let E=g.children[0],S=Ze(g);y=E.getBoundingClientRect(),S.attr("width",y.width),S.attr("height",y.height)}let v=e.width<=y.width+e.padding?y.width+e.padding:e.width;e.width<=y.width+e.padding?e.diff=(v-e.width)/2-e.padding:e.diff=-e.padding;let x=e.height,b=e.x-v/2,T=e.y-x/2;Q.trace("Data ",e,JSON.stringify(e));let w;if(e.look==="handDrawn"){let E=rt.svg(d),S=st(e,{roughness:.7,fill:a,stroke:s,fillWeight:3,seed:n}),L=E.path(Co(b,T,v,x,0),S);w=d.insert(()=>(Q.debug("Rough node insert CXC",L),L),":first-child"),w.select("path:nth-child(2)").attr("style",h.join(";")),w.select("path").attr("style",f.join(";").replace("fill","stroke"))}else w=d.insert("rect",":first-child"),w.attr("style",u).attr("rx",e.rx).attr("ry",e.ry).attr("x",b).attr("y",T).attr("width",v).attr("height",x);let{subGraphTitleTopMargin:k}=Uh(r);if(m.attr("transform",`translate(${e.x-y.width/2}, ${e.y-e.height/2+k})`),l){let E=m.select("span");E&&E.attr("style",l)}let C=w.node().getBBox();return e.offsetX=0,e.width=C.width,e.height=C.height,e.offsetY=y.height-e.padding/2,e.intersect=function(E){return hd(e,E)},{cluster:d,labelBBox:y}},"rect"),WVe=o((t,e)=>{let r=t.insert("g").attr("class","note-cluster").attr("id",e.domId),i=r.insert("rect",":first-child"),n=0*e.padding,a=n/2;i.attr("rx",e.rx).attr("ry",e.ry).attr("x",e.x-e.width/2-a).attr("y",e.y-e.height/2-a).attr("width",e.width+n).attr("height",e.height+n).attr("fill","none");let s=i.node().getBBox();return e.width=s.width,e.height=s.height,e.intersect=function(l){return hd(e,l)},{cluster:r,labelBBox:{width:0,height:0}}},"noteGroup"),UVe=o(async(t,e)=>{let r=ge(),{themeVariables:i,handDrawnSeed:n}=r,{altBackground:a,compositeBackground:s,compositeTitleBackground:l,nodeBorder:u}=i,h=t.insert("g").attr("class",e.cssClasses).attr("id",e.domId).attr("data-id",e.id).attr("data-look",e.look),f=h.insert("g",":first-child"),d=h.insert("g").attr("class","cluster-label"),p=h.append("rect"),m=await Dc(d,e.label,e.labelStyle,void 0,!0),g=m.getBBox();if(Or(r)){let L=m.children[0],M=Ze(m);g=L.getBoundingClientRect(),M.attr("width",g.width),M.attr("height",g.height)}let y=0*e.padding,v=y/2,x=(e.width<=g.width+e.padding?g.width+e.padding:e.width)+y;e.width<=g.width+e.padding?e.diff=(x-e.width)/2-e.padding:e.diff=-e.padding;let b=e.height+y,T=e.height+y-g.height-6,w=e.x-x/2,k=e.y-b/2;e.width=x;let C=e.y-e.height/2-v+g.height+2,E;if(e.look==="handDrawn"){let L=e.cssClasses.includes("statediagram-cluster-alt"),M=rt.svg(h),I=e.rx||e.ry?M.path(Co(w,k,x,b,10),{roughness:.7,fill:l,fillStyle:"solid",stroke:u,seed:n}):M.rectangle(w,k,x,b,{seed:n});E=h.insert(()=>I,":first-child");let A=M.rectangle(w,C,x,T,{fill:L?a:s,fillStyle:L?"hachure":"solid",stroke:u,seed:n});E=h.insert(()=>I,":first-child"),p=h.insert(()=>A)}else E=f.insert("rect",":first-child"),E.attr("class","outer").attr("x",w).attr("y",k).attr("width",x).attr("height",b).attr("data-look",e.look),p.attr("class","inner").attr("x",w).attr("y",C).attr("width",x).attr("height",T);d.attr("transform",`translate(${e.x-g.width/2}, ${k+1-(Or(r)?0:3)})`);let S=E.node().getBBox();return e.height=S.height,e.offsetX=0,e.offsetY=g.height-e.padding/2,e.labelBBox=g,e.intersect=function(L){return hd(e,L)},{cluster:h,labelBBox:g}},"roundedWithTitle"),HVe=o(async(t,e)=>{Q.info("Creating subgraph rect for ",e.id,e);let r=ge(),{themeVariables:i,handDrawnSeed:n}=r,{clusterBkg:a,clusterBorder:s}=i,{labelStyles:l,nodeStyles:u,borderStyles:h,backgroundStyles:f}=tt(e),d=t.insert("g").attr("class","cluster "+e.cssClasses).attr("id",e.domId).attr("data-look",e.look),p=Or(r),m=d.insert("g").attr("class","cluster-label "),g=await Vi(m,e.label,{style:e.labelStyle,useHtmlLabels:p,isNode:!0,width:e.width}),y=g.getBBox();if(Or(r)){let E=g.children[0],S=Ze(g);y=E.getBoundingClientRect(),S.attr("width",y.width),S.attr("height",y.height)}let v=e.width<=y.width+e.padding?y.width+e.padding:e.width;e.width<=y.width+e.padding?e.diff=(v-e.width)/2-e.padding:e.diff=-e.padding;let x=e.height,b=e.x-v/2,T=e.y-x/2;Q.trace("Data ",e,JSON.stringify(e));let w;if(e.look==="handDrawn"){let E=rt.svg(d),S=st(e,{roughness:.7,fill:a,stroke:s,fillWeight:4,seed:n}),L=E.path(Co(b,T,v,x,e.rx),S);w=d.insert(()=>(Q.debug("Rough node insert CXC",L),L),":first-child"),w.select("path:nth-child(2)").attr("style",h.join(";")),w.select("path").attr("style",f.join(";").replace("fill","stroke"))}else w=d.insert("rect",":first-child"),w.attr("style",u).attr("rx",e.rx).attr("ry",e.ry).attr("x",b).attr("y",T).attr("width",v).attr("height",x);let{subGraphTitleTopMargin:k}=Uh(r);if(m.attr("transform",`translate(${e.x-y.width/2}, ${e.y-e.height/2+k})`),l){let E=m.select("span");E&&E.attr("style",l)}let C=w.node().getBBox();return e.offsetX=0,e.width=C.width,e.height=C.height,e.offsetY=y.height-e.padding/2,e.intersect=function(E){return hd(e,E)},{cluster:d,labelBBox:y}},"kanbanSection"),YVe=o((t,e)=>{let r=ge(),{themeVariables:i,handDrawnSeed:n}=r,{nodeBorder:a}=i,s=t.insert("g").attr("class",e.cssClasses).attr("id",e.domId).attr("data-look",e.look),l=s.insert("g",":first-child"),u=0*e.padding,h=e.width+u;e.diff=-e.padding;let f=e.height+u,d=e.x-h/2,p=e.y-f/2;e.width=h;let m;if(e.look==="handDrawn"){let v=rt.svg(s).rectangle(d,p,h,f,{fill:"lightgrey",roughness:.5,strokeLineDash:[5],stroke:a,seed:n});m=s.insert(()=>v,":first-child")}else{m=l.insert("rect",":first-child");let y="outer";e.look,y="divider",m.attr("class",y).attr("x",d).attr("y",p).attr("width",h).attr("height",f).attr("data-look",e.look)}let g=m.node().getBBox();return e.height=g.height,e.offsetX=0,e.offsetY=0,e.intersect=function(y){return hd(e,y)},{cluster:s,labelBBox:{}}},"divider"),jVe=Wle,XVe={rect:Wle,squareRect:jVe,roundedWithTitle:UVe,noteGroup:WVe,divider:YVe,kanbanSection:HVe},Ule=new Map,N1=o(async(t,e)=>{let r=e.shape||"rect",i=await XVe[r](t,e);return Ule.set(e.id,i),i},"insertCluster"),Hle=o(()=>{Ule=new Map},"clear")});var Pl,_M=P(()=>{"use strict";Pl=o((t,e)=>{if(e)return"translate("+-t.width/2+", "+-t.height/2+")";let r=t.x??0,i=t.y??0;return"translate("+-(r+t.width/2)+", "+-(i+t.height/2)+")"},"computeLabelTransform")});function _5(t,e){if(t===void 0||e===void 0)return{angle:0,deltaX:0,deltaY:0};t=dn(t),e=dn(e);let[r,i]=[t.x,t.y],[n,a]=[e.x,e.y],s=n-r,l=a-i;return{angle:Math.atan(l/s),deltaX:s,deltaY:l}}var Ka,DM,dn,D5,LM=P(()=>{"use strict";Ka={aggregation:17.25,extension:17.25,composition:17.25,dependency:6,lollipop:13.5,arrow_point:4,arrow_barb:0,arrow_barb_neo:5.5},DM={arrow_point:4,arrow_cross:12.5,arrow_circle:12.5};o(_5,"calculateDeltaAndAngle");dn=o(t=>Array.isArray(t)?{x:t[0],y:t[1]}:t,"pointTransformer"),D5=o(t=>({x:o(function(e,r,i){let n=0,a=dn(i[0]).x=0?1:-1)}else if(r===i.length-1&&Object.hasOwn(Ka,t.arrowTypeEnd)){let{angle:m,deltaX:g}=_5(i[i.length-1],i[i.length-2]);n=Ka[t.arrowTypeEnd]*Math.cos(m)*(g>=0?1:-1)}let s=Math.abs(dn(e).x-dn(i[i.length-1]).x),l=Math.abs(dn(e).y-dn(i[i.length-1]).y),u=Math.abs(dn(e).x-dn(i[0]).x),h=Math.abs(dn(e).y-dn(i[0]).y),f=Ka[t.arrowTypeStart],d=Ka[t.arrowTypeEnd],p=1;if(s0&&l0&&h=0?1:-1)}else if(r===i.length-1&&Object.hasOwn(Ka,t.arrowTypeEnd)){let{angle:m,deltaY:g}=_5(i[i.length-1],i[i.length-2]);n=Ka[t.arrowTypeEnd]*Math.abs(Math.sin(m))*(g>=0?1:-1)}let s=Math.abs(dn(e).y-dn(i[i.length-1]).y),l=Math.abs(dn(e).x-dn(i[i.length-1]).x),u=Math.abs(dn(e).y-dn(i[0]).y),h=Math.abs(dn(e).x-dn(i[0]).x),f=Ka[t.arrowTypeStart],d=Ka[t.arrowTypeEnd],p=1;if(s0&&l0&&h{"use strict";bt();jle=o((t,e,r,i,n,a=!1,s)=>{e.arrowTypeStart&&Yle(t,"start",e.arrowTypeStart,r,i,n,a,s),e.arrowTypeEnd&&Yle(t,"end",e.arrowTypeEnd,r,i,n,a,s)},"addEdgeMarkers"),KVe={arrow_cross:{type:"cross",fill:!1},arrow_point:{type:"point",fill:!0},arrow_barb:{type:"barb",fill:!0},arrow_barb_neo:{type:"barb",fill:!0},arrow_circle:{type:"circle",fill:!1},aggregation:{type:"aggregation",fill:!1},extension:{type:"extension",fill:!1},composition:{type:"composition",fill:!0},dependency:{type:"dependency",fill:!0},lollipop:{type:"lollipop",fill:!1},only_one:{type:"onlyOne",fill:!1},zero_or_one:{type:"zeroOrOne",fill:!1},one_or_more:{type:"oneOrMore",fill:!1},zero_or_more:{type:"zeroOrMore",fill:!1},requirement_arrow:{type:"requirement_arrow",fill:!1},requirement_contains:{type:"requirement_contains",fill:!1}},QVe=["cross","point","circle","lollipop","aggregation","extension","composition","dependency","barb"],Yle=o((t,e,r,i,n,a,s=!1,l)=>{let u=KVe[r],h=u&&QVe.includes(u.type);if(!u){Q.warn(`Unknown arrow type: ${r}`);return}let f=u.type,m=`${n}_${a}-${f}${e==="start"?"Start":"End"}${s&&h?"-margin":""}`;if(l&&l.trim()!==""){let g=l.replace(/[^\dA-Za-z]/g,"_"),y=`${m}_${g}`;if(!document.getElementById(y)){let v=document.getElementById(m);if(v){let x=v.cloneNode(!0);x.id=y,x.querySelectorAll("path, circle, line").forEach(T=>{T.setAttribute("stroke",l),u.fill&&T.setAttribute("fill",l)}),v.parentNode?.appendChild(x)}}t.attr(`marker-${e}`,`url(${i}#${y})`)}else t.attr(`marker-${e}`,`url(${i}#${m})`)},"addEdgeMarker")});function L5(t,e){Or(ge())&&t&&(t.style.width=e.length*9+"px",t.style.height="12px")}function tqe(t){let e=[],r=[];for(let i=1;i5&&Math.abs(a.y-n.y)>5||n.y===a.y&&a.x===s.x&&Math.abs(a.x-n.x)>5&&Math.abs(a.y-s.y)>5)&&(e.push(a),r.push(i))}return{cornerPoints:e,cornerPointPositions:r}}function nqe(t,e){if(t.length<2)return"";let r="",i=t.length,n=1e-5;for(let a=0;a({...n}));if(t.length>=2&&Ka[e.arrowTypeStart]){let n=Ka[e.arrowTypeStart],a=t[0],s=t[1],{angle:l}=Zle(a,s),u=n*Math.cos(l),h=n*Math.sin(l);r[0].x=a.x+u,r[0].y=a.y+h}let i=t.length;if(i>=2&&Ka[e.arrowTypeEnd]){let n=Ka[e.arrowTypeEnd],a=t[i-1],s=t[i-2],{angle:l}=Zle(s,a),u=n*Math.cos(l),h=n*Math.sin(l);r[i-1].x=a.x-u,r[i-1].y=a.y-h}return r}var ZVe,R5,Qa,Jle,Ib,N5,I5,JVe,eqe,Kle,Qle,rqe,iqe,M5,RM=P(()=>{"use strict";Ut();Sr();bt();To();_M();er();LM();Nb();Pr();Yt();w5();Xle();Ht();ZVe=o(t=>typeof t=="string"?t:ge()?.flowchart?.curve,"resolveEdgeCurveType"),R5=new Map,Qa=new Map,Jle=o(()=>{R5.clear(),Qa.clear()},"clear"),Ib=o(t=>t?typeof t=="string"?t:t.reduce((e,r)=>e+";"+r,""):"","getLabelStyles"),N5=o(async(t,e)=>{let r=ge(),i=Or(r),{labelStyles:n}=tt(e);e.labelStyle=n;let a=t.insert("g").attr("class","edgeLabel"),s=a.insert("g").attr("class","label").attr("data-id",e.id),l=e.labelType==="markdown",h=await Vi(t,e.label,{style:Ib(e.labelStyle),useHtmlLabels:i,addSvgBackground:!0,isNode:!1,markdown:l,width:l?void 0:void 0},r);s.node().appendChild(h),Q.info("abc82",e,e.labelType);let f=h.getBBox(),d=f;if(i){let m=h.children[0],g=Ze(h);f=m.getBoundingClientRect(),d=f,g.attr("width",f.width),g.attr("height",f.height)}else{let m=Ze(h).select("text").node();m&&typeof m.getBBox=="function"&&(d=m.getBBox())}s.attr("transform",Pl(d,i)),R5.set(e.id,a),e.width=f.width,e.height=f.height;let p;if(e.startLabelLeft){let m=t.insert("g").attr("class","edgeTerminals"),g=m.insert("g").attr("class","inner"),y=await Dc(g,e.startLabelLeft,Ib(e.labelStyle)||"",!1,!1);p=y;let v=y.getBBox();if(i){let x=y.children[0],b=Ze(y);v=x.getBoundingClientRect(),b.attr("width",v.width),b.attr("height",v.height)}g.attr("transform",Pl(v,i)),Qa.get(e.id)||Qa.set(e.id,{}),Qa.get(e.id).startLeft=m,L5(p,e.startLabelLeft)}if(e.startLabelRight){let m=t.insert("g").attr("class","edgeTerminals"),g=m.insert("g").attr("class","inner"),y=await Dc(g,e.startLabelRight,Ib(e.labelStyle)||"",!1,!1);p=y,g.node().appendChild(y);let v=y.getBBox();if(i){let x=y.children[0],b=Ze(y);v=x.getBoundingClientRect(),b.attr("width",v.width),b.attr("height",v.height)}g.attr("transform",Pl(v,i)),Qa.get(e.id)||Qa.set(e.id,{}),Qa.get(e.id).startRight=m,L5(p,e.startLabelRight)}if(e.endLabelLeft){let m=t.insert("g").attr("class","edgeTerminals"),g=m.insert("g").attr("class","inner"),y=await Dc(g,e.endLabelLeft,Ib(e.labelStyle)||"",!1,!1);p=y;let v=y.getBBox();if(i){let x=y.children[0],b=Ze(y);v=x.getBoundingClientRect(),b.attr("width",v.width),b.attr("height",v.height)}g.attr("transform",Pl(v,i)),m.node().appendChild(y),Qa.get(e.id)||Qa.set(e.id,{}),Qa.get(e.id).endLeft=m,L5(p,e.endLabelLeft)}if(e.endLabelRight){let m=t.insert("g").attr("class","edgeTerminals"),g=m.insert("g").attr("class","inner"),y=await Dc(g,e.endLabelRight,Ib(e.labelStyle)||"",!1,!1);p=y;let v=y.getBBox();if(i){let x=y.children[0],b=Ze(y);v=x.getBoundingClientRect(),b.attr("width",v.width),b.attr("height",v.height)}g.attr("transform",Pl(v,i)),m.node().appendChild(y),Qa.get(e.id)||Qa.set(e.id,{}),Qa.get(e.id).endRight=m,L5(p,e.endLabelRight)}return h},"insertEdgeLabel");o(L5,"setTerminalWidth");I5=o((t,e)=>{Q.debug("Moving label abc88 ",t.id,t.label,R5.get(t.id),e);let r=e.updatedPath?e.updatedPath:e.originalPath,i=ge(),{subGraphTitleTotalMargin:n}=Uh(i);if(t.label){let a=R5.get(t.id),s=t.x,l=t.y;if(r){let u=Kt.calcLabelPosition(r);Q.debug("Moving label "+t.label+" from (",s,",",l,") to (",u.x,",",u.y,") abc88"),e.updatedPath&&(s=u.x,l=u.y)}a.attr("transform",`translate(${s}, ${l+n/2})`)}if(t.startLabelLeft){let a=Qa.get(t.id).startLeft,s=t.x,l=t.y;if(r){let u=Kt.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.startLabelRight){let a=Qa.get(t.id).startRight,s=t.x,l=t.y;if(r){let u=Kt.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelLeft){let a=Qa.get(t.id).endLeft,s=t.x,l=t.y;if(r){let u=Kt.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelRight){let a=Qa.get(t.id).endRight,s=t.x,l=t.y;if(r){let u=Kt.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}},"positionEdgeLabel"),JVe=o((t,e)=>{let r=t.x,i=t.y,n=Math.abs(e.x-r),a=Math.abs(e.y-i),s=t.width/2,l=t.height/2;return n>=s||a>=l},"outsideNode"),eqe=o((t,e,r)=>{Q.debug(`intersection calc abc89: + outsidePoint: ${JSON.stringify(e)} + insidePoint : ${JSON.stringify(r)} + node : x:${t.x} y:${t.y} w:${t.width} h:${t.height}`);let i=t.x,n=t.y,a=Math.abs(i-r.x),s=t.width/2,l=r.xMath.abs(i-e.x)*u){let d=r.y{Q.warn("abc88 cutPathAtIntersect",t,e);let r=[],i=t[0],n=!1;return t.forEach(a=>{if(Q.info("abc88 checking point",a,e),!JVe(e,a)&&!n){let s=eqe(e,i,a);Q.debug("abc88 inside",a,i,s),Q.debug("abc88 intersection",s,e);let l=!1;r.forEach(u=>{l=l||u.x===s.x&&u.y===s.y}),r.some(u=>u.x===s.x&&u.y===s.y)?Q.warn("abc88 no intersect",s,r):r.push(s),n=!0}else Q.warn("abc88 outside",a,i),i=a,n||r.push(a)}),Q.debug("returning points",r),r},"cutPathAtIntersect");o(tqe,"extractCornerPoints");Qle=o(function(t,e,r){let i=e.x-t.x,n=e.y-t.y,a=Math.sqrt(i*i+n*n),s=r/a;return{x:e.x-s*i,y:e.y-s*n}},"findAdjacentPoint"),rqe=o(function(t){let{cornerPointPositions:e}=tqe(t),r=[];for(let i=0;i10&&Math.abs(a.y-n.y)>=10){Q.debug("Corner point fixing",Math.abs(a.x-n.x),Math.abs(a.y-n.y));let m=5;s.x===l.x?p={x:h<0?l.x-m+d:l.x+m-d,y:f<0?l.y-d:l.y+d}:p={x:h<0?l.x-d:l.x+d,y:f<0?l.y-m+d:l.y+m-d}}else Q.debug("Corner point skipping fixing",Math.abs(a.x-n.x),Math.abs(a.y-n.y));r.push(p,u)}else r.push(t[i]);return r},"fixCorners"),iqe=o((t,e,r)=>{let i=t-e-r,n=2,a=2,s=n+a,l=Math.floor(i/s),u=Array(l).fill(`${n} ${a}`).join(" ");return`0 ${e} ${u} ${r}`},"generateDashArray"),M5=o(function(t,e,r,i,n,a,s,l=!1){if(!s)throw new Error(`insertEdge: missing diagramId for edge "${e.id}" \u2014 edge IDs require a diagram prefix for uniqueness`);let{handDrawnSeed:u}=ge(),h=e.points,f=!1,d=n;var p=a;let m=[];for(let B in e.cssCompiledStyles)Eb(B)||m.push(e.cssCompiledStyles[B]);Q.debug("UIO intersect check",e.points,p.x,d.x),p.intersect&&d.intersect&&!l&&(h=h.slice(1,e.points.length-1),h.unshift(d.intersect(h[0])),Q.debug("Last point UIO",e.start,"-->",e.end,h[h.length-1],p,p.intersect(h[h.length-1])),h.push(p.intersect(h[h.length-1])));let g=btoa(JSON.stringify(h));e.toCluster&&(Q.info("to cluster abc88",r.get(e.toCluster)),h=Kle(e.points,r.get(e.toCluster).node),f=!0),e.fromCluster&&(Q.debug("from cluster abc88",r.get(e.fromCluster),JSON.stringify(h,null,2)),h=Kle(h.reverse(),r.get(e.fromCluster).node).reverse(),f=!0);let y=h.filter(B=>!Number.isNaN(B.y)),v=ZVe(e.curve);v!=="rounded"&&(y=rqe(y));let x=yu;switch(v){case"linear":x=yu;break;case"basis":x=wc;break;case"cardinal":x=U2;break;case"bumpX":x=z2;break;case"bumpY":x=G2;break;case"catmullRom":x=j2;break;case"monotoneX":x=X2;break;case"monotoneY":x=K2;break;case"natural":x=n1;break;case"step":x=a1;break;case"stepAfter":x=Z2;break;case"stepBefore":x=Q2;break;case"rounded":x=yu;break;default:x=wc}let{x:b,y:T}=D5(e),w=Cc().x(b).y(T).curve(x),k;switch(e.thickness){case"normal":k="edge-thickness-normal";break;case"thick":k="edge-thickness-thick";break;case"invisible":k="edge-thickness-invisible";break;default:k="edge-thickness-normal"}switch(e.pattern){case"solid":k+=" edge-pattern-solid";break;case"dotted":k+=" edge-pattern-dotted";break;case"dashed":k+=" edge-pattern-dashed";break;default:k+=" edge-pattern-solid"}let C,E=v==="rounded"?nqe(aqe(y,e),5):w(y),S=Array.isArray(e.style)?e.style:[e.style],L=S.find(B=>B?.startsWith("stroke:")),M="";e.animate&&(M="edge-animation-fast"),e.animation&&(M="edge-animation-"+e.animation);let I=!1;if(e.look==="handDrawn"){let B=rt.svg(t);Object.assign([],y);let O=B.path(E,{roughness:.3,seed:u});k+=" transition",C=Ze(O).select("path").attr("id",`${s}-${e.id}`).attr("class"," "+k+(e.classes?" "+e.classes:"")+(M?" "+M:"")).attr("style",S?S.reduce((z,F)=>z+";"+F,""):"");let $=C.attr("d");C.attr("d",$),t.node().appendChild(C.node())}else{let B=m.join(";"),O=S?S.reduce((X,W)=>X+W+";",""):"",$=(B?B+";"+O+";":O)+";"+(S?S.reduce((X,W)=>X+";"+W,""):"");C=t.append("path").attr("d",E).attr("id",`${s}-${e.id}`).attr("class"," "+k+(e.classes?" "+e.classes:"")+(M?" "+M:"")).attr("style",$),L=$.match(/stroke:([^;]+)/)?.[1],I=e.animate===!0||!!e.animation||B.includes("animation");let z=C.node(),F=typeof z.getTotalLength=="function"?z.getTotalLength():0,V=DM[e.arrowTypeStart]||0,H=DM[e.arrowTypeEnd]||0;if(e.look==="neo"&&!I){let W=`stroke-dasharray: ${e.pattern==="dotted"||e.pattern==="dashed"?iqe(F,V,H):`0 ${V} ${F-V-H} ${H}`}; stroke-dashoffset: 0;`;C.attr("style",W+C.attr("style"))}}C.attr("data-edge",!0),C.attr("data-et","edge"),C.attr("data-id",e.id),C.attr("data-points",g),C.attr("data-look",xi(e.look)),e.showPoints&&y.forEach(B=>{t.append("circle").style("stroke","red").style("fill","red").attr("r",1).attr("cx",B.x).attr("cy",B.y)});let A="";(ge().flowchart.arrowMarkerAbsolute||ge().state.arrowMarkerAbsolute)&&(A=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,A=A.replace(/\(/g,"\\(").replace(/\)/g,"\\)")),Q.info("arrowTypeStart",e.arrowTypeStart),Q.info("arrowTypeEnd",e.arrowTypeEnd);let _=!I&&e?.look==="neo";jle(C,e,A,s,i,_,L);let D=Math.floor(h.length/2),N=h[D];Kt.isLabelCoordinateInPath(N,C.attr("d"))||(f=!0);let R={};return f&&(R.updatedPath=h),R.originalPath=e.points,R},"insertEdge");o(nqe,"generateRoundedPath");o(Zle,"calculateDeltaAndAngle");o(aqe,"applyMarkerOffsetsToPoints")});var sqe,oqe,lqe,cqe,uqe,hqe,fqe,dqe,pqe,mqe,gqe,yqe,vqe,xqe,bqe,Tqe,kqe,Cqe,wqe,Eqe,Sqe,Aqe,_qe,Dqe,O5,NM=P(()=>{"use strict";bt();Sr();sqe=o((t,e,r,i)=>{e.forEach(n=>{Dqe[n](t,r,i)})},"insertMarkers"),oqe=o((t,e,r)=>{Q.trace("Making markers for ",r),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionStart").attr("class","marker extension "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").attr("markerUnits","userSpaceOnUse").append("path").attr("d","M 1,7 L18,13 V 1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionEnd").attr("class","marker extension "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z"),t.append("marker").attr("id",r+"_"+e+"-extensionStart-margin").attr("class","marker extension "+e).attr("refX",18).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").attr("markerUnits","userSpaceOnUse").attr("viewBox","0 0 20 14").append("polygon").attr("points","10,7 18,13 18,1").style("stroke-width",2).style("stroke-dasharray","0"),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionEnd-margin").attr("class","marker extension "+e).attr("refX",9).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").attr("markerUnits","userSpaceOnUse").attr("viewBox","0 0 20 14").append("polygon").attr("points","10,1 10,13 18,7").style("stroke-width",2).style("stroke-dasharray","0")},"extension"),lqe=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionStart").attr("class","marker composition "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionEnd").attr("class","marker composition "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionStart-margin").attr("class","marker composition "+e).attr("refX",15).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").attr("markerUnits","userSpaceOnUse").append("path").style("stroke-width",0).attr("viewBox","0 0 15 15").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionEnd-margin").attr("class","marker composition "+e).attr("refX",3.5).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").attr("markerUnits","userSpaceOnUse").append("path").style("stroke-width",0).attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"composition"),cqe=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationStart").attr("class","marker aggregation "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationEnd").attr("class","marker aggregation "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationStart-margin").attr("class","marker aggregation "+e).attr("refX",15).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").attr("markerUnits","userSpaceOnUse").append("path").style("stroke-width",2).attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationEnd-margin").attr("class","marker aggregation "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").attr("markerUnits","userSpaceOnUse").append("path").style("stroke-width",2).attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"aggregation"),uqe=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyStart").attr("class","marker dependency "+e).attr("refX",6).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyEnd").attr("class","marker dependency "+e).attr("refX",13).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyStart-margin").attr("class","marker dependency "+e).attr("refX",4).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").attr("markerUnits","userSpaceOnUse").append("path").style("stroke-width",0).attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyEnd-margin").attr("class","marker dependency "+e).attr("refX",16).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").attr("markerUnits","userSpaceOnUse").append("path").style("stroke-width",0).attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"dependency"),hqe=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopStart").attr("class","marker lollipop "+e).attr("refX",13).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6),t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopEnd").attr("class","marker lollipop "+e).attr("refX",1).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6),t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopStart-margin").attr("class","marker lollipop "+e).attr("refX",13).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").attr("markerUnits","userSpaceOnUse").append("circle").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6).attr("stroke-width",2),t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopEnd-margin").attr("class","marker lollipop "+e).attr("refX",1).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").attr("markerUnits","userSpaceOnUse").append("circle").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6).attr("stroke-width",2)},"lollipop"),fqe=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-pointEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",8).attr("markerHeight",8).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-pointStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",4.5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",8).attr("markerHeight",8).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-pointEnd-margin").attr("class","marker "+e).attr("viewBox","0 0 11.5 14").attr("refX",11.5).attr("refY",7).attr("markerUnits","userSpaceOnUse").attr("markerWidth",10.5).attr("markerHeight",14).attr("orient","auto").append("path").attr("d","M 0 0 L 11.5 7 L 0 14 z").attr("class","arrowMarkerPath").style("stroke-width",0).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-pointStart-margin").attr("class","marker "+e).attr("viewBox","0 0 11.5 14").attr("refX",1).attr("refY",7).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11.5).attr("markerHeight",14).attr("orient","auto").append("polygon").attr("points","0,7 11.5,14 11.5,0").attr("class","arrowMarkerPath").style("stroke-width",0).style("stroke-dasharray","1,0")},"point"),dqe=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-circleEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-circleStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-circleEnd-margin").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refY",5).attr("refX",12.25).attr("markerUnits","userSpaceOnUse").attr("markerWidth",14).attr("markerHeight",14).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",0).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-circleStart-margin").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",-2).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",14).attr("markerHeight",14).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",0).style("stroke-dasharray","1,0")},"circle"),pqe=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-crossEnd").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-crossStart").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-crossEnd-margin").attr("class","marker cross "+e).attr("viewBox","0 0 15 15").attr("refX",17.7).attr("refY",7.5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 1,1 L 14,14 M 1,14 L 14,1").attr("class","arrowMarkerPath").style("stroke-width",2.5),t.append("marker").attr("id",r+"_"+e+"-crossStart-margin").attr("class","marker cross "+e).attr("viewBox","0 0 15 15").attr("refX",-3.5).attr("refY",7.5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 1,1 L 14,14 M 1,14 L 14,1").attr("class","arrowMarkerPath").style("stroke-width",2.5).style("stroke-dasharray","1,0")},"cross"),mqe=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","userSpaceOnUse").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"barb"),gqe=o((t,e,r)=>{let i=Lt(),{themeVariables:n}=i,{transitionColor:a}=n;t.append("defs").append("marker").attr("id",r+"_"+e+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","strokeWidth").attr("orient","auto").append("path").attr("d","M 19,7 L11,14 L13,7 L11,0 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-barbEnd-margin").attr("refX",17).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","userSpaceOnUse").attr("orient","auto").append("path").attr("d","M 19,7 L11,14 L13,7 L11,0 Z").attr("fill",`${a}`)},"barbNeo"),yqe=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-onlyOneStart").attr("class","marker onlyOne "+e).attr("refX",0).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("d","M9,0 L9,18 M15,0 L15,18"),t.append("defs").append("marker").attr("id",r+"_"+e+"-onlyOneEnd").attr("class","marker onlyOne "+e).attr("refX",18).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("d","M3,0 L3,18 M9,0 L9,18")},"only_one"),vqe=o((t,e,r)=>{let i=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrOneStart").attr("class","marker zeroOrOne "+e).attr("refX",0).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto");i.append("circle").attr("fill","white").attr("cx",21).attr("cy",9).attr("r",6),i.append("path").attr("d","M9,0 L9,18");let n=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrOneEnd").attr("class","marker zeroOrOne "+e).attr("refX",30).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto");n.append("circle").attr("fill","white").attr("cx",9).attr("cy",9).attr("r",6),n.append("path").attr("d","M21,0 L21,18")},"zero_or_one"),xqe=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-oneOrMoreStart").attr("class","marker oneOrMore "+e).attr("refX",18).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("d","M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27"),t.append("defs").append("marker").attr("id",r+"_"+e+"-oneOrMoreEnd").attr("class","marker oneOrMore "+e).attr("refX",27).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("d","M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18")},"one_or_more"),bqe=o((t,e,r)=>{let i=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrMoreStart").attr("class","marker zeroOrMore "+e).attr("refX",18).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto");i.append("circle").attr("fill","white").attr("cx",48).attr("cy",18).attr("r",6),i.append("path").attr("d","M0,18 Q18,0 36,18 Q18,36 0,18");let n=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrMoreEnd").attr("class","marker zeroOrMore "+e).attr("refX",39).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto");n.append("circle").attr("fill","white").attr("cx",9).attr("cy",18).attr("r",6),n.append("path").attr("d","M21,18 Q39,0 57,18 Q39,36 21,18")},"zero_or_more"),Tqe=o((t,e,r)=>{let i=Lt(),{themeVariables:n}=i,{strokeWidth:a}=n;t.append("defs").append("marker").attr("id",r+"_"+e+"-onlyOneStart").attr("class","marker onlyOne "+e).attr("refX",0).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").attr("markerUnits","userSpaceOnUse").append("path").attr("d","M9,0 L9,18 M15,0 L15,18").attr("stroke-width",`${a}`),t.append("defs").append("marker").attr("id",r+"_"+e+"-onlyOneEnd").attr("class","marker onlyOne "+e).attr("refX",18).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").attr("markerUnits","userSpaceOnUse").append("path").attr("d","M3,0 L3,18 M9,0 L9,18").attr("stroke-width",`${a}`)},"only_one_neo"),kqe=o((t,e,r)=>{let i=Lt(),{themeVariables:n}=i,{strokeWidth:a,mainBkg:s}=n,l=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrOneStart").attr("class","marker zeroOrOne "+e).attr("refX",0).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto").attr("markerUnits","userSpaceOnUse");l.append("circle").attr("fill",s??"white").attr("cx",21).attr("cy",9).attr("stroke-width",`${a}`).attr("r",6),l.append("path").attr("d","M9,0 L9,18").attr("stroke-width",`${a}`);let u=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrOneEnd").attr("class","marker zeroOrOne "+e).attr("refX",30).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("markerUnits","userSpaceOnUse").attr("orient","auto");u.append("circle").attr("fill",s??"white").attr("cx",9).attr("cy",9).attr("stroke-width",`${a}`).attr("r",6),u.append("path").attr("d","M21,0 L21,18").attr("stroke-width",`${a}`)},"zero_or_one_neo"),Cqe=o((t,e,r)=>{let i=Lt(),{themeVariables:n}=i,{strokeWidth:a}=n;t.append("defs").append("marker").attr("id",r+"_"+e+"-oneOrMoreStart").attr("class","marker oneOrMore "+e).attr("refX",18).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").attr("markerUnits","userSpaceOnUse").append("path").attr("d","M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27").attr("stroke-width",`${a}`),t.append("defs").append("marker").attr("id",r+"_"+e+"-oneOrMoreEnd").attr("class","marker oneOrMore "+e).attr("refX",27).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("markerUnits","userSpaceOnUse").attr("orient","auto").append("path").attr("d","M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18").attr("stroke-width",`${a}`)},"one_or_more_neo"),wqe=o((t,e,r)=>{let i=Lt(),{themeVariables:n}=i,{strokeWidth:a,mainBkg:s}=n,l=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrMoreStart").attr("class","marker zeroOrMore "+e).attr("refX",18).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("markerUnits","userSpaceOnUse").attr("orient","auto");l.append("circle").attr("fill",s??"white").attr("cx",45.5).attr("cy",18).attr("r",6).attr("stroke-width",`${a}`),l.append("path").attr("d","M0,18 Q18,0 36,18 Q18,36 0,18").attr("stroke-width",`${a}`);let u=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrMoreEnd").attr("class","marker zeroOrMore "+e).attr("refX",39).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto").attr("markerUnits","userSpaceOnUse");u.append("circle").attr("fill",s??"white").attr("cx",11).attr("cy",18).attr("r",6).attr("stroke-width",`${a}`),u.append("path").attr("d","M21,18 Q39,0 57,18 Q39,36 21,18").attr("stroke-width",`${a}`)},"zero_or_more_neo"),Eqe=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-requirement_arrowEnd").attr("refX",20).attr("refY",10).attr("markerWidth",20).attr("markerHeight",20).attr("orient","auto").append("path").attr("d",`M0,0 + L20,10 + M20,10 + L0,20`)},"requirement_arrow"),Sqe=o((t,e,r)=>{let i=Lt(),{themeVariables:n}=i,{strokeWidth:a}=n;t.append("defs").append("marker").attr("id",r+"_"+e+"-requirement_arrowEnd").attr("refX",20).attr("refY",10).attr("markerWidth",20).attr("markerHeight",20).attr("orient","auto").attr("markerUnits","userSpaceOnUse").attr("stroke-width",`${a}`).attr("viewBox","0 0 25 20").append("path").attr("d",`M0,0 + L20,10 + M20,10 + L0,20`).attr("stroke-linejoin","miter")},"requirement_arrow_neo"),Aqe=o((t,e,r)=>{let i=t.append("defs").append("marker").attr("id",r+"_"+e+"-requirement_containsStart").attr("refX",0).attr("refY",10).attr("markerWidth",20).attr("markerHeight",20).attr("orient","auto").append("g");i.append("circle").attr("cx",10).attr("cy",10).attr("r",9).attr("fill","none"),i.append("line").attr("x1",1).attr("x2",19).attr("y1",10).attr("y2",10),i.append("line").attr("y1",1).attr("y2",19).attr("x1",10).attr("x2",10)},"requirement_contains"),_qe=o((t,e,r)=>{let i=Lt(),{themeVariables:n}=i,{strokeWidth:a}=n,s=t.append("defs").append("marker").attr("id",r+"_"+e+"-requirement_containsStart").attr("refX",0).attr("refY",10).attr("markerWidth",20).attr("markerHeight",20).attr("orient","auto").attr("markerUnits","userSpaceOnUse").append("g");s.append("circle").attr("cx",10).attr("cy",10).attr("r",9).attr("fill","none"),s.append("line").attr("x1",1).attr("x2",19).attr("y1",10).attr("y2",10),s.append("line").attr("y1",1).attr("y2",19).attr("x1",10).attr("x2",10),s.selectAll("*").attr("stroke-width",`${a}`)},"requirement_contains_neo"),Dqe={extension:oqe,composition:lqe,aggregation:cqe,dependency:uqe,lollipop:hqe,point:fqe,circle:dqe,cross:pqe,barb:mqe,barbNeo:gqe,only_one:yqe,zero_or_one:vqe,one_or_more:xqe,zero_or_more:bqe,only_one_neo:Tqe,zero_or_one_neo:kqe,one_or_more_neo:Cqe,zero_or_more_neo:wqe,requirement_arrow:Eqe,requirement_contains:Aqe,requirement_arrow_neo:Sqe,requirement_contains_neo:_qe},O5=sqe});async function I1(t,e,r){let i,n;e.shape==="rect"&&(e.rx&&e.ry?e.shape="roundedRect":e.shape="squareRect");let a=e.shape?SM[e.shape]:void 0;if(!a)throw new Error(`No such shape: ${e.shape}. Please check your syntax.`);if(e.link){let s;r.config.securityLevel==="sandbox"?s="_top":e.linkTarget&&(s=e.linkTarget||"_blank"),i=t.insert("svg:a").attr("xlink:href",e.link).attr("target",s??null),n=await a(i,e,r)}else n=await a(t,e,r),i=n;return i.attr("data-look",xi(e.look)),e.tooltip&&n.attr("title",e.tooltip),P5.set(e.id,i),e.haveCallback&&i.attr("class",i.attr("class")+" clickable"),i}var P5,ece,tce,Mb,B5=P(()=>{"use strict";bt();AM();er();P5=new Map;o(I1,"insertNode");ece=o((t,e)=>{P5.set(e.id,t)},"setNodeElem"),tce=o(()=>{P5.clear()},"clear"),Mb=o(t=>{let e=P5.get(t.id);Q.trace("Transforming node",t.diff,t,"translate("+(t.x-t.width/2-5)+", "+t.width/2+")");let r=8,i=t.diff||0;return t.clusterNode?e.attr("transform","translate("+(t.x+i-t.width/2)+", "+(t.y-t.height/2-r)+")"):e.attr("transform","translate("+t.x+", "+t.y+")"),i},"positionNode")});var rce,ice=P(()=>{"use strict";Sr();Vr();bt();A5();RM();NM();B5();zt();er();rce={common:lt,getConfig:Lt,insertCluster:N1,insertEdge:M5,insertEdgeLabel:N5,insertMarkers:O5,insertNode:I1,interpolateToCurve:yI,labelHelper:vt,log:Q,positionEdgeLabel:I5}});function Rqe(t){return typeof t=="symbol"||En(t)&&Xa(t)==Lqe}var Lqe,tl,M0=P(()=>{"use strict";Oh();Dl();Lqe="[object Symbol]";o(Rqe,"isSymbol");tl=Rqe});function Nqe(t,e){for(var r=-1,i=t==null?0:t.length,n=Array(i);++r{"use strict";o(Nqe,"arrayMap");wo=Nqe});function sce(t){if(typeof t=="string")return t;if(Gt(t))return wo(t,sce)+"";if(tl(t))return ace?ace.call(t):"";var e=t+"";return e=="0"&&1/t==-Iqe?"-0":e}var Iqe,nce,ace,oce,lce=P(()=>{"use strict";v0();O0();fn();M0();Iqe=1/0,nce=Da?Da.prototype:void 0,ace=nce?nce.toString:void 0;o(sce,"baseToString");oce=sce});function Oqe(t){for(var e=t.length;e--&&Mqe.test(t.charAt(e)););return e}var Mqe,cce,uce=P(()=>{"use strict";Mqe=/\s/;o(Oqe,"trimmedEndIndex");cce=Oqe});function Bqe(t){return t&&t.slice(0,cce(t)+1).replace(Pqe,"")}var Pqe,hce,fce=P(()=>{"use strict";uce();Pqe=/^\s+/;o(Bqe,"baseTrim");hce=Bqe});function Vqe(t){if(typeof t=="number")return t;if(tl(t))return dce;if(Gi(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=Gi(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=hce(t);var r=$qe.test(t);return r||zqe.test(t)?Gqe(t.slice(2),r?2:8):Fqe.test(t)?dce:+t}var dce,Fqe,$qe,zqe,Gqe,pce,mce=P(()=>{"use strict";fce();Zo();M0();dce=NaN,Fqe=/^[-+]0x[0-9a-f]+$/i,$qe=/^0b[01]+$/i,zqe=/^0o[0-7]+$/i,Gqe=parseInt;o(Vqe,"toNumber");pce=Vqe});function Wqe(t){if(!t)return t===0?t:0;if(t=pce(t),t===gce||t===-gce){var e=t<0?-1:1;return e*qqe}return t===t?t:0}var gce,qqe,M1,IM=P(()=>{"use strict";mce();gce=1/0,qqe=17976931348623157e292;o(Wqe,"toFinite");M1=Wqe});function Uqe(t){var e=M1(t),r=e%1;return e===e?r?e-r:e:0}var Au,O1=P(()=>{"use strict";IM();o(Uqe,"toInteger");Au=Uqe});var Hqe,F5,yce=P(()=>{"use strict";Zf();Al();Hqe=mo(In,"WeakMap"),F5=Hqe});function Yqe(){}var Sn,MM=P(()=>{"use strict";o(Yqe,"noop");Sn=Yqe});function jqe(t,e){for(var r=-1,i=t==null?0:t.length;++r{"use strict";o(jqe,"arrayEach");$5=jqe});function Xqe(t,e,r,i){for(var n=t.length,a=r+(i?1:-1);i?a--:++a{"use strict";o(Xqe,"baseFindIndex");z5=Xqe});function Kqe(t){return t!==t}var vce,xce=P(()=>{"use strict";o(Kqe,"baseIsNaN");vce=Kqe});function Qqe(t,e,r){for(var i=r-1,n=t.length;++i{"use strict";o(Qqe,"strictIndexOf");bce=Qqe});function Zqe(t,e,r){return e===e?bce(t,e,r):z5(t,vce,r)}var P1,G5=P(()=>{"use strict";PM();xce();Tce();o(Zqe,"baseIndexOf");P1=Zqe});function Jqe(t,e){var r=t==null?0:t.length;return!!r&&P1(t,e,0)>-1}var V5,BM=P(()=>{"use strict";G5();o(Jqe,"arrayIncludes");V5=Jqe});var eWe,kce,Cce=P(()=>{"use strict";nI();eWe=P3(Object.keys,Object),kce=eWe});function iWe(t){if(!bu(t))return kce(t);var e=[];for(var r in Object(t))rWe.call(t,r)&&r!="constructor"&&e.push(r);return e}var tWe,rWe,B1,q5=P(()=>{"use strict";v1();Cce();tWe=Object.prototype,rWe=tWe.hasOwnProperty;o(iWe,"baseKeys");B1=iWe});function nWe(t){return Mn(t)?G3(t):B1(t)}var ni,_u=P(()=>{"use strict";cI();q5();Ll();o(nWe,"keys");ni=nWe});var aWe,sWe,oWe,Za,wce=P(()=>{"use strict";k1();C0();dI();Ll();v1();_u();aWe=Object.prototype,sWe=aWe.hasOwnProperty,oWe=W3(function(t,e){if(bu(e)||Mn(e)){Il(e,ni(e),t);return}for(var r in e)sWe.call(e,r)&&Tu(t,r,e[r])}),Za=oWe});function uWe(t,e){if(Gt(t))return!1;var r=typeof t;return r=="number"||r=="symbol"||r=="boolean"||t==null||tl(t)?!0:cWe.test(t)||!lWe.test(t)||e!=null&&t in Object(e)}var lWe,cWe,F1,W5=P(()=>{"use strict";fn();M0();lWe=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,cWe=/^\w*$/;o(uWe,"isKey");F1=uWe});function fWe(t){var e=u1(t,function(i){return r.size===hWe&&r.clear(),i}),r=e.cache;return e}var hWe,Ece,Sce=P(()=>{"use strict";QN();hWe=500;o(fWe,"memoizeCapped");Ece=fWe});var dWe,pWe,mWe,Ace,_ce=P(()=>{"use strict";Sce();dWe=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,pWe=/\\(\\)?/g,mWe=Ece(function(t){var e=[];return t.charCodeAt(0)===46&&e.push(""),t.replace(dWe,function(r,i,n,a){e.push(n?a.replace(pWe,"$1"):i||r)}),e}),Ace=mWe});function gWe(t){return t==null?"":oce(t)}var U5,FM=P(()=>{"use strict";lce();o(gWe,"toString");U5=gWe});function yWe(t,e){return Gt(t)?t:F1(t,e)?[t]:Ace(U5(t))}var md,Ob=P(()=>{"use strict";fn();W5();_ce();FM();o(yWe,"castPath");md=yWe});function xWe(t){if(typeof t=="string"||tl(t))return t;var e=t+"";return e=="0"&&1/t==-vWe?"-0":e}var vWe,Du,$1=P(()=>{"use strict";M0();vWe=1/0;o(xWe,"toKey");Du=xWe});function bWe(t,e){e=md(e,t);for(var r=0,i=e.length;t!=null&&r{"use strict";Ob();$1();o(bWe,"baseGet");gd=bWe});function TWe(t,e,r){var i=t==null?void 0:gd(t,e);return i===void 0?r:i}var Dce,Lce=P(()=>{"use strict";Pb();o(TWe,"get");Dce=TWe});function kWe(t,e){for(var r=-1,i=e.length,n=t.length;++r{"use strict";o(kWe,"arrayPush");z1=kWe});function CWe(t){return Gt(t)||Sc(t)||!!(Rce&&t&&t[Rce])}var Rce,Nce,Ice=P(()=>{"use strict";v0();x1();fn();Rce=Da?Da.isConcatSpreadable:void 0;o(CWe,"isFlattenable");Nce=CWe});function Mce(t,e,r,i,n){var a=-1,s=t.length;for(r||(r=Nce),n||(n=[]);++a0&&r(l)?e>1?Mce(l,e-1,r,i,n):z1(n,l):i||(n[n.length]=l)}return n}var Lu,G1=P(()=>{"use strict";H5();Ice();o(Mce,"baseFlatten");Lu=Mce});function wWe(t){var e=t==null?0:t.length;return e?Lu(t,1):[]}var di,Y5=P(()=>{"use strict";G1();o(wWe,"flatten");di=wWe});function EWe(t){return q3(V3(t,void 0,di),t+"")}var Oce,Pce=P(()=>{"use strict";Y5();uI();fI();o(EWe,"flatRest");Oce=EWe});function SWe(t,e,r){var i=-1,n=t.length;e<0&&(e=-e>n?0:n+e),r=r>n?n:r,r<0&&(r+=n),n=e>r?0:r-e>>>0,e>>>=0;for(var a=Array(n);++i{"use strict";o(SWe,"baseSlice");j5=SWe});function OWe(t){return MWe.test(t)}var AWe,_We,DWe,LWe,RWe,NWe,IWe,MWe,Bce,Fce=P(()=>{"use strict";AWe="\\ud800-\\udfff",_We="\\u0300-\\u036f",DWe="\\ufe20-\\ufe2f",LWe="\\u20d0-\\u20ff",RWe=_We+DWe+LWe,NWe="\\ufe0e\\ufe0f",IWe="\\u200d",MWe=RegExp("["+IWe+AWe+RWe+NWe+"]");o(OWe,"hasUnicode");Bce=OWe});function PWe(t,e,r,i){var n=-1,a=t==null?0:t.length;for(i&&a&&(r=t[++n]);++n{"use strict";o(PWe,"arrayReduce");$ce=PWe});function BWe(t,e){return t&&Il(e,ni(e),t)}var Gce,Vce=P(()=>{"use strict";C0();_u();o(BWe,"baseAssign");Gce=BWe});function FWe(t,e){return t&&Il(e,go(e),t)}var qce,Wce=P(()=>{"use strict";C0();ad();o(FWe,"baseAssignIn");qce=FWe});function $We(t,e){for(var r=-1,i=t==null?0:t.length,n=0,a=[];++r{"use strict";o($We,"arrayFilter");V1=$We});function zWe(){return[]}var K5,zM=P(()=>{"use strict";o(zWe,"stubArray");K5=zWe});var GWe,VWe,Uce,qWe,q1,Q5=P(()=>{"use strict";X5();zM();GWe=Object.prototype,VWe=GWe.propertyIsEnumerable,Uce=Object.getOwnPropertySymbols,qWe=Uce?function(t){return t==null?[]:(t=Object(t),V1(Uce(t),function(e){return VWe.call(t,e)}))}:K5,q1=qWe});function WWe(t,e){return Il(t,q1(t),e)}var Hce,Yce=P(()=>{"use strict";C0();Q5();o(WWe,"copySymbols");Hce=WWe});var UWe,HWe,Z5,GM=P(()=>{"use strict";H5();B3();Q5();zM();UWe=Object.getOwnPropertySymbols,HWe=UWe?function(t){for(var e=[];t;)z1(e,q1(t)),t=y1(t);return e}:K5,Z5=HWe});function YWe(t,e){return Il(t,Z5(t),e)}var jce,Xce=P(()=>{"use strict";C0();GM();o(YWe,"copySymbolsIn");jce=YWe});function jWe(t,e,r){var i=e(t);return Gt(t)?i:z1(i,r(t))}var J5,VM=P(()=>{"use strict";H5();fn();o(jWe,"baseGetAllKeys");J5=jWe});function XWe(t){return J5(t,ni,q1)}var Bb,qM=P(()=>{"use strict";VM();Q5();_u();o(XWe,"getAllKeys");Bb=XWe});function KWe(t){return J5(t,go,Z5)}var eE,WM=P(()=>{"use strict";VM();GM();ad();o(KWe,"getAllKeysIn");eE=KWe});var QWe,tE,Kce=P(()=>{"use strict";Zf();Al();QWe=mo(In,"DataView"),tE=QWe});var ZWe,rE,Qce=P(()=>{"use strict";Zf();Al();ZWe=mo(In,"Promise"),rE=ZWe});var JWe,yd,UM=P(()=>{"use strict";Zf();Al();JWe=mo(In,"Set"),yd=JWe});var Zce,eUe,Jce,eue,tue,rue,tUe,rUe,iUe,nUe,aUe,P0,rl,B0=P(()=>{"use strict";Kce();D3();Qce();UM();yce();Oh();jN();Zce="[object Map]",eUe="[object Object]",Jce="[object Promise]",eue="[object Set]",tue="[object WeakMap]",rue="[object DataView]",tUe=Ph(tE),rUe=Ph(td),iUe=Ph(rE),nUe=Ph(yd),aUe=Ph(F5),P0=Xa;(tE&&P0(new tE(new ArrayBuffer(1)))!=rue||td&&P0(new td)!=Zce||rE&&P0(rE.resolve())!=Jce||yd&&P0(new yd)!=eue||F5&&P0(new F5)!=tue)&&(P0=o(function(t){var e=Xa(t),r=e==eUe?t.constructor:void 0,i=r?Ph(r):"";if(i)switch(i){case tUe:return rue;case rUe:return Zce;case iUe:return Jce;case nUe:return eue;case aUe:return tue}return e},"getTag"));rl=P0});function lUe(t){var e=t.length,r=new t.constructor(e);return e&&typeof t[0]=="string"&&oUe.call(t,"index")&&(r.index=t.index,r.input=t.input),r}var sUe,oUe,iue,nue=P(()=>{"use strict";sUe=Object.prototype,oUe=sUe.hasOwnProperty;o(lUe,"initCloneArray");iue=lUe});function cUe(t,e){var r=e?g1(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}var aue,sue=P(()=>{"use strict";I3();o(cUe,"cloneDataView");aue=cUe});function hUe(t){var e=new t.constructor(t.source,uUe.exec(t));return e.lastIndex=t.lastIndex,e}var uUe,oue,lue=P(()=>{"use strict";uUe=/\w*$/;o(hUe,"cloneRegExp");oue=hUe});function fUe(t){return uue?Object(uue.call(t)):{}}var cue,uue,hue,fue=P(()=>{"use strict";v0();cue=Da?Da.prototype:void 0,uue=cue?cue.valueOf:void 0;o(fUe,"cloneSymbol");hue=fUe});function NUe(t,e,r){var i=t.constructor;switch(e){case TUe:return g1(t);case dUe:case pUe:return new i(+t);case kUe:return aue(t,r);case CUe:case wUe:case EUe:case SUe:case AUe:case _Ue:case DUe:case LUe:case RUe:return M3(t,r);case mUe:return new i;case gUe:case xUe:return new i(t);case yUe:return oue(t);case vUe:return new i;case bUe:return hue(t)}}var dUe,pUe,mUe,gUe,yUe,vUe,xUe,bUe,TUe,kUe,CUe,wUe,EUe,SUe,AUe,_Ue,DUe,LUe,RUe,due,pue=P(()=>{"use strict";I3();sue();lue();fue();rI();dUe="[object Boolean]",pUe="[object Date]",mUe="[object Map]",gUe="[object Number]",yUe="[object RegExp]",vUe="[object Set]",xUe="[object String]",bUe="[object Symbol]",TUe="[object ArrayBuffer]",kUe="[object DataView]",CUe="[object Float32Array]",wUe="[object Float64Array]",EUe="[object Int8Array]",SUe="[object Int16Array]",AUe="[object Int32Array]",_Ue="[object Uint8Array]",DUe="[object Uint8ClampedArray]",LUe="[object Uint16Array]",RUe="[object Uint32Array]";o(NUe,"initCloneByTag");due=NUe});function MUe(t){return En(t)&&rl(t)==IUe}var IUe,mue,gue=P(()=>{"use strict";B0();Dl();IUe="[object Map]";o(MUe,"baseIsMap");mue=MUe});var yue,OUe,vue,xue=P(()=>{"use strict";gue();k0();cb();yue=Nl&&Nl.isMap,OUe=yue?Rl(yue):mue,vue=OUe});function BUe(t){return En(t)&&rl(t)==PUe}var PUe,bue,Tue=P(()=>{"use strict";B0();Dl();PUe="[object Set]";o(BUe,"baseIsSet");bue=BUe});var kue,FUe,Cue,wue=P(()=>{"use strict";Tue();k0();cb();kue=Nl&&Nl.isSet,FUe=kue?Rl(kue):bue,Cue=FUe});function iE(t,e,r,i,n,a){var s,l=e&$Ue,u=e&zUe,h=e&GUe;if(r&&(s=n?r(t,i,n,a):r(t)),s!==void 0)return s;if(!Gi(t))return t;var f=Gt(t);if(f){if(s=iue(t),!l)return O3(t,s)}else{var d=rl(t),p=d==Sue||d==HUe;if(Ac(t))return N3(t,l);if(d==Aue||d==Eue||p&&!n){if(s=u||p?{}:F3(t),!l)return u?jce(t,qce(s,t)):Hce(t,Gce(s,t))}else{if(!Qi[d])return n?t:{};s=due(t,d,l)}}a||(a=new vu);var m=a.get(t);if(m)return m;a.set(t,s),Cue(t)?t.forEach(function(v){s.add(iE(v,e,r,v,t,a))}):vue(t)&&t.forEach(function(v,x){s.set(x,iE(v,e,r,x,t,a))});var g=h?u?eE:Bb:u?go:ni,y=f?void 0:g(t);return $5(y||t,function(v,x){y&&(x=v,v=t[x]),Tu(s,x,iE(v,e,r,x,t,a))}),s}var $Ue,zUe,GUe,Eue,VUe,qUe,WUe,UUe,Sue,HUe,YUe,jUe,Aue,XUe,KUe,QUe,ZUe,JUe,eHe,tHe,rHe,iHe,nHe,aHe,sHe,oHe,lHe,cHe,uHe,Qi,nE,HM=P(()=>{"use strict";sb();OM();k1();Vce();Wce();eI();iI();Yce();Xce();qM();WM();B0();nue();pue();aI();fn();T1();xue();Zo();wue();_u();ad();$Ue=1,zUe=2,GUe=4,Eue="[object Arguments]",VUe="[object Array]",qUe="[object Boolean]",WUe="[object Date]",UUe="[object Error]",Sue="[object Function]",HUe="[object GeneratorFunction]",YUe="[object Map]",jUe="[object Number]",Aue="[object Object]",XUe="[object RegExp]",KUe="[object Set]",QUe="[object String]",ZUe="[object Symbol]",JUe="[object WeakMap]",eHe="[object ArrayBuffer]",tHe="[object DataView]",rHe="[object Float32Array]",iHe="[object Float64Array]",nHe="[object Int8Array]",aHe="[object Int16Array]",sHe="[object Int32Array]",oHe="[object Uint8Array]",lHe="[object Uint8ClampedArray]",cHe="[object Uint16Array]",uHe="[object Uint32Array]",Qi={};Qi[Eue]=Qi[VUe]=Qi[eHe]=Qi[tHe]=Qi[qUe]=Qi[WUe]=Qi[rHe]=Qi[iHe]=Qi[nHe]=Qi[aHe]=Qi[sHe]=Qi[YUe]=Qi[jUe]=Qi[Aue]=Qi[XUe]=Qi[KUe]=Qi[QUe]=Qi[ZUe]=Qi[oHe]=Qi[lHe]=Qi[cHe]=Qi[uHe]=!0;Qi[UUe]=Qi[Sue]=Qi[JUe]=!1;o(iE,"baseClone");nE=iE});function fHe(t){return nE(t,hHe)}var hHe,Si,YM=P(()=>{"use strict";HM();hHe=4;o(fHe,"clone");Si=fHe});function mHe(t){return nE(t,dHe|pHe)}var dHe,pHe,jM,_ue=P(()=>{"use strict";HM();dHe=1,pHe=4;o(mHe,"cloneDeep");jM=mHe});function gHe(t){for(var e=-1,r=t==null?0:t.length,i=0,n=[];++e{"use strict";o(gHe,"compact");Ru=gHe});function vHe(t){return this.__data__.set(t,yHe),this}var yHe,Lue,Rue=P(()=>{"use strict";yHe="__lodash_hash_undefined__";o(vHe,"setCacheAdd");Lue=vHe});function xHe(t){return this.__data__.has(t)}var Nue,Iue=P(()=>{"use strict";o(xHe,"setCacheHas");Nue=xHe});function aE(t){var e=-1,r=t==null?0:t.length;for(this.__data__=new b0;++e{"use strict";L3();Rue();Iue();o(aE,"SetCache");aE.prototype.add=aE.prototype.push=Lue;aE.prototype.has=Nue;W1=aE});function bHe(t,e){for(var r=-1,i=t==null?0:t.length;++r{"use strict";o(bHe,"arraySome");oE=bHe});function THe(t,e){return t.has(e)}var U1,lE=P(()=>{"use strict";o(THe,"cacheHas");U1=THe});function wHe(t,e,r,i,n,a){var s=r&kHe,l=t.length,u=e.length;if(l!=u&&!(s&&u>l))return!1;var h=a.get(t),f=a.get(e);if(h&&f)return h==e&&f==t;var d=-1,p=!0,m=r&CHe?new W1:void 0;for(a.set(t,e),a.set(e,t);++d{"use strict";sE();XM();lE();kHe=1,CHe=2;o(wHe,"equalArrays");cE=wHe});function EHe(t){var e=-1,r=Array(t.size);return t.forEach(function(i,n){r[++e]=[n,i]}),r}var Mue,Oue=P(()=>{"use strict";o(EHe,"mapToArray");Mue=EHe});function SHe(t){var e=-1,r=Array(t.size);return t.forEach(function(i){r[++e]=i}),r}var H1,uE=P(()=>{"use strict";o(SHe,"setToArray");H1=SHe});function zHe(t,e,r,i,n,a,s){switch(r){case $He:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case FHe:return!(t.byteLength!=e.byteLength||!a(new m1(t),new m1(e)));case DHe:case LHe:case IHe:return _l(+t,+e);case RHe:return t.name==e.name&&t.message==e.message;case MHe:case PHe:return t==e+"";case NHe:var l=Mue;case OHe:var u=i&AHe;if(l||(l=H1),t.size!=e.size&&!u)return!1;var h=s.get(t);if(h)return h==e;i|=_He,s.set(t,e);var f=cE(l(t),l(e),i,n,a,s);return s.delete(t),f;case BHe:if(QM)return QM.call(t)==QM.call(e)}return!1}var AHe,_He,DHe,LHe,RHe,NHe,IHe,MHe,OHe,PHe,BHe,FHe,$He,Pue,QM,Bue,Fue=P(()=>{"use strict";v0();tI();x0();KM();Oue();uE();AHe=1,_He=2,DHe="[object Boolean]",LHe="[object Date]",RHe="[object Error]",NHe="[object Map]",IHe="[object Number]",MHe="[object RegExp]",OHe="[object Set]",PHe="[object String]",BHe="[object Symbol]",FHe="[object ArrayBuffer]",$He="[object DataView]",Pue=Da?Da.prototype:void 0,QM=Pue?Pue.valueOf:void 0;o(zHe,"equalByTag");Bue=zHe});function WHe(t,e,r,i,n,a){var s=r&GHe,l=Bb(t),u=l.length,h=Bb(e),f=h.length;if(u!=f&&!s)return!1;for(var d=u;d--;){var p=l[d];if(!(s?p in e:qHe.call(e,p)))return!1}var m=a.get(t),g=a.get(e);if(m&&g)return m==e&&g==t;var y=!0;a.set(t,e),a.set(e,t);for(var v=s;++d{"use strict";qM();GHe=1,VHe=Object.prototype,qHe=VHe.hasOwnProperty;o(WHe,"equalObjects");$ue=WHe});function YHe(t,e,r,i,n,a){var s=Gt(t),l=Gt(e),u=s?Vue:rl(t),h=l?Vue:rl(e);u=u==Gue?hE:u,h=h==Gue?hE:h;var f=u==hE,d=h==hE,p=u==h;if(p&&Ac(t)){if(!Ac(e))return!1;s=!0,f=!1}if(p&&!f)return a||(a=new vu),s||id(t)?cE(t,e,r,i,n,a):Bue(t,e,u,r,i,n,a);if(!(r&UHe)){var m=f&&que.call(t,"__wrapped__"),g=d&&que.call(e,"__wrapped__");if(m||g){var y=m?t.value():t,v=g?e.value():e;return a||(a=new vu),n(y,v,r,i,a)}}return p?(a||(a=new vu),$ue(t,e,r,i,n,a)):!1}var UHe,Gue,Vue,hE,HHe,que,Wue,Uue=P(()=>{"use strict";sb();KM();Fue();zue();B0();fn();T1();ub();UHe=1,Gue="[object Arguments]",Vue="[object Array]",hE="[object Object]",HHe=Object.prototype,que=HHe.hasOwnProperty;o(YHe,"baseIsEqualDeep");Wue=YHe});function Hue(t,e,r,i,n){return t===e?!0:t==null||e==null||!En(t)&&!En(e)?t!==t&&e!==e:Wue(t,e,r,i,Hue,n)}var fE,ZM=P(()=>{"use strict";Uue();Dl();o(Hue,"baseIsEqual");fE=Hue});function KHe(t,e,r,i){var n=r.length,a=n,s=!i;if(t==null)return!a;for(t=Object(t);n--;){var l=r[n];if(s&&l[2]?l[1]!==t[l[0]]:!(l[0]in t))return!1}for(;++n{"use strict";sb();ZM();jHe=1,XHe=2;o(KHe,"baseIsMatch");Yue=KHe});function QHe(t){return t===t&&!Gi(t)}var dE,JM=P(()=>{"use strict";Zo();o(QHe,"isStrictComparable");dE=QHe});function ZHe(t){for(var e=ni(t),r=e.length;r--;){var i=e[r],n=t[i];e[r]=[i,n,dE(n)]}return e}var Xue,Kue=P(()=>{"use strict";JM();_u();o(ZHe,"getMatchData");Xue=ZHe});function JHe(t,e){return function(r){return r==null?!1:r[t]===e&&(e!==void 0||t in Object(r))}}var pE,eO=P(()=>{"use strict";o(JHe,"matchesStrictComparable");pE=JHe});function eYe(t){var e=Xue(t);return e.length==1&&e[0][2]?pE(e[0][0],e[0][1]):function(r){return r===t||Yue(r,t,e)}}var Que,Zue=P(()=>{"use strict";jue();Kue();eO();o(eYe,"baseMatches");Que=eYe});function tYe(t,e){return t!=null&&e in Object(t)}var Jue,ehe=P(()=>{"use strict";o(tYe,"baseHasIn");Jue=tYe});function rYe(t,e,r){e=md(e,t);for(var i=-1,n=e.length,a=!1;++i{"use strict";Ob();x1();fn();fb();$3();$1();o(rYe,"hasPath");mE=rYe});function iYe(t,e){return t!=null&&mE(t,e,Jue)}var gE,rO=P(()=>{"use strict";ehe();tO();o(iYe,"hasIn");gE=iYe});function sYe(t,e){return F1(t)&&dE(e)?pE(Du(t),e):function(r){var i=Dce(r,t);return i===void 0&&i===e?gE(r,t):fE(e,i,nYe|aYe)}}var nYe,aYe,the,rhe=P(()=>{"use strict";ZM();Lce();rO();W5();JM();eO();$1();nYe=1,aYe=2;o(sYe,"baseMatchesProperty");the=sYe});function oYe(t){return function(e){return e?.[t]}}var yE,iO=P(()=>{"use strict";o(oYe,"baseProperty");yE=oYe});function lYe(t){return function(e){return gd(e,t)}}var ihe,nhe=P(()=>{"use strict";Pb();o(lYe,"basePropertyDeep");ihe=lYe});function cYe(t){return F1(t)?yE(Du(t)):ihe(t)}var ahe,she=P(()=>{"use strict";iO();nhe();W5();$1();o(cYe,"property");ahe=cYe});function uYe(t){return typeof t=="function"?t:t==null?La:typeof t=="object"?Gt(t)?the(t[0],t[1]):Que(t):ahe(t)}var Pi,Vs=P(()=>{"use strict";Zue();rhe();Fh();fn();she();o(uYe,"baseIteratee");Pi=uYe});function hYe(t,e,r,i){for(var n=-1,a=t==null?0:t.length;++n{"use strict";o(hYe,"arrayAggregator");ohe=hYe});function fYe(t,e){return t&&p1(t,e,ni)}var Y1,vE=P(()=>{"use strict";R3();_u();o(fYe,"baseForOwn");Y1=fYe});function dYe(t,e){return function(r,i){if(r==null)return r;if(!Mn(r))return t(r,i);for(var n=r.length,a=e?n:-1,s=Object(r);(e?a--:++a{"use strict";Ll();o(dYe,"createBaseEach");che=dYe});var pYe,Eo,vd=P(()=>{"use strict";vE();uhe();pYe=che(Y1),Eo=pYe});function mYe(t,e,r,i){return Eo(t,function(n,a,s){e(i,n,r(n),s)}),i}var hhe,fhe=P(()=>{"use strict";vd();o(mYe,"baseAggregator");hhe=mYe});function gYe(t,e){return function(r,i){var n=Gt(r)?ohe:hhe,a=e?e():{};return n(r,t,Pi(i,2),a)}}var dhe,phe=P(()=>{"use strict";lhe();fhe();Vs();fn();o(gYe,"createAggregator");dhe=gYe});var yYe,xE,mhe=P(()=>{"use strict";Al();yYe=o(function(){return In.Date.now()},"now"),xE=yYe});var ghe,vYe,xYe,xd,yhe=P(()=>{"use strict";C1();x0();w0();ad();ghe=Object.prototype,vYe=ghe.hasOwnProperty,xYe=ku(function(t,e){t=Object(t);var r=-1,i=e.length,n=i>2?e[2]:void 0;for(n&&Jo(e[0],e[1],n)&&(i=1);++r{"use strict";o(bYe,"arrayIncludesWith");bE=bYe});function kYe(t,e,r,i){var n=-1,a=V5,s=!0,l=t.length,u=[],h=e.length;if(!l)return u;r&&(e=wo(e,Rl(r))),i?(a=bE,s=!1):e.length>=TYe&&(a=U1,s=!1,e=new W1(e));e:for(;++n{"use strict";sE();BM();nO();O0();k0();lE();TYe=200;o(kYe,"baseDifference");vhe=kYe});var CYe,bd,bhe=P(()=>{"use strict";xhe();G1();C1();z3();CYe=ku(function(t,e){return T0(t)?vhe(t,Lu(e,1,T0,!0)):[]}),bd=CYe});function wYe(t){var e=t==null?0:t.length;return e?t[e-1]:void 0}var Na,The=P(()=>{"use strict";o(wYe,"last");Na=wYe});function EYe(t,e,r){var i=t==null?0:t.length;return i?(e=r||e===void 0?1:Au(e),j5(t,e<0?0:e,i)):[]}var zn,khe=P(()=>{"use strict";$M();O1();o(EYe,"drop");zn=EYe});function SYe(t,e,r){var i=t==null?0:t.length;return i?(e=r||e===void 0?1:Au(e),e=i-e,j5(t,0,e<0?0:e)):[]}var Hh,Che=P(()=>{"use strict";$M();O1();o(SYe,"dropRight");Hh=SYe});function AYe(t){return typeof t=="function"?t:La}var j1,TE=P(()=>{"use strict";Fh();o(AYe,"castFunction");j1=AYe});function _Ye(t,e){var r=Gt(t)?$5:Eo;return r(t,j1(e))}var Pe,kE=P(()=>{"use strict";OM();vd();TE();fn();o(_Ye,"forEach");Pe=_Ye});var whe=P(()=>{"use strict";kE()});function DYe(t,e){for(var r=-1,i=t==null?0:t.length;++r{"use strict";o(DYe,"arrayEvery");Ehe=DYe});function LYe(t,e){var r=!0;return Eo(t,function(i,n,a){return r=!!e(i,n,a),r}),r}var Ahe,_he=P(()=>{"use strict";vd();o(LYe,"baseEvery");Ahe=LYe});function RYe(t,e,r){var i=Gt(t)?Ehe:Ahe;return r&&Jo(t,e,r)&&(e=void 0),i(t,Pi(e,3))}var ms,Dhe=P(()=>{"use strict";She();_he();Vs();fn();w0();o(RYe,"every");ms=RYe});function NYe(t,e){var r=[];return Eo(t,function(i,n,a){e(i,n,a)&&r.push(i)}),r}var CE,aO=P(()=>{"use strict";vd();o(NYe,"baseFilter");CE=NYe});function IYe(t,e){var r=Gt(t)?V1:CE;return r(t,Pi(e,3))}var pi,sO=P(()=>{"use strict";X5();aO();Vs();fn();o(IYe,"filter");pi=IYe});function MYe(t){return function(e,r,i){var n=Object(e);if(!Mn(e)){var a=Pi(r,3);e=ni(e),r=o(function(l){return a(n[l],l,n)},"predicate")}var s=t(e,r,i);return s>-1?n[a?e[s]:s]:void 0}}var Lhe,Rhe=P(()=>{"use strict";Vs();Ll();_u();o(MYe,"createFind");Lhe=MYe});function PYe(t,e,r){var i=t==null?0:t.length;if(!i)return-1;var n=r==null?0:Au(r);return n<0&&(n=OYe(i+n,0)),z5(t,Pi(e,3),n)}var OYe,Nhe,Ihe=P(()=>{"use strict";PM();Vs();O1();OYe=Math.max;o(PYe,"findIndex");Nhe=PYe});var BYe,qs,Mhe=P(()=>{"use strict";Rhe();Ihe();BYe=Lhe(Nhe),qs=BYe});function FYe(t){return t&&t.length?t[0]:void 0}var Ia,Ohe=P(()=>{"use strict";o(FYe,"head");Ia=FYe});var Phe=P(()=>{"use strict";Ohe()});function $Ye(t,e){var r=-1,i=Mn(t)?Array(t.length):[];return Eo(t,function(n,a,s){i[++r]=e(n,a,s)}),i}var wE,oO=P(()=>{"use strict";vd();Ll();o($Ye,"baseMap");wE=$Ye});function zYe(t,e){var r=Gt(t)?wo:wE;return r(t,Pi(e,3))}var ht,X1=P(()=>{"use strict";O0();Vs();oO();fn();o(zYe,"map");ht=zYe});function GYe(t,e){return Lu(ht(t,e),1)}var Ja,lO=P(()=>{"use strict";G1();X1();o(GYe,"flatMap");Ja=GYe});function VYe(t,e){return t==null?t:p1(t,j1(e),go)}var cO,Bhe=P(()=>{"use strict";R3();TE();ad();o(VYe,"forIn");cO=VYe});function qYe(t,e){return t&&Y1(t,j1(e))}var uO,Fhe=P(()=>{"use strict";vE();TE();o(qYe,"forOwn");uO=qYe});var WYe,UYe,HYe,hO,$he=P(()=>{"use strict";d1();phe();WYe=Object.prototype,UYe=WYe.hasOwnProperty,HYe=dhe(function(t,e,r){UYe.call(t,r)?t[r].push(e):xu(t,r,[e])}),hO=HYe});function YYe(t,e){return t>e}var zhe,Ghe=P(()=>{"use strict";o(YYe,"baseGt");zhe=YYe});function KYe(t,e){return t!=null&&XYe.call(t,e)}var jYe,XYe,Vhe,qhe=P(()=>{"use strict";jYe=Object.prototype,XYe=jYe.hasOwnProperty;o(KYe,"baseHas");Vhe=KYe});function QYe(t,e){return t!=null&&mE(t,e,Vhe)}var Vt,Whe=P(()=>{"use strict";qhe();tO();o(QYe,"has");Vt=QYe});function JYe(t){return typeof t=="string"||!Gt(t)&&En(t)&&Xa(t)==ZYe}var ZYe,Gn,EE=P(()=>{"use strict";Oh();fn();Dl();ZYe="[object String]";o(JYe,"isString");Gn=JYe});function eje(t,e){return wo(e,function(r){return t[r]})}var Uhe,Hhe=P(()=>{"use strict";O0();o(eje,"baseValues");Uhe=eje});function tje(t){return t==null?[]:Uhe(t,ni(t))}var qr,fO=P(()=>{"use strict";Hhe();_u();o(tje,"values");qr=tje});function ije(t,e,r,i){t=Mn(t)?t:qr(t),r=r&&!i?Au(r):0;var n=t.length;return r<0&&(r=rje(n+r,0)),Gn(t)?r<=n&&t.indexOf(e,r)>-1:!!n&&P1(t,e,r)>-1}var rje,pn,Yhe=P(()=>{"use strict";G5();Ll();EE();O1();fO();rje=Math.max;o(ije,"includes");pn=ije});function aje(t,e,r){var i=t==null?0:t.length;if(!i)return-1;var n=r==null?0:Au(r);return n<0&&(n=nje(i+n,0)),P1(t,e,n)}var nje,SE,jhe=P(()=>{"use strict";G5();O1();nje=Math.max;o(aje,"indexOf");SE=aje});function uje(t){if(t==null)return!0;if(Mn(t)&&(Gt(t)||typeof t=="string"||typeof t.splice=="function"||Ac(t)||id(t)||Sc(t)))return!t.length;var e=rl(t);if(e==sje||e==oje)return!t.size;if(bu(t))return!B1(t).length;for(var r in t)if(cje.call(t,r))return!1;return!0}var sje,oje,lje,cje,_r,AE=P(()=>{"use strict";q5();B0();x1();fn();Ll();T1();v1();ub();sje="[object Map]",oje="[object Set]",lje=Object.prototype,cje=lje.hasOwnProperty;o(uje,"isEmpty");_r=uje});function fje(t){return En(t)&&Xa(t)==hje}var hje,Xhe,Khe=P(()=>{"use strict";Oh();Dl();hje="[object RegExp]";o(fje,"baseIsRegExp");Xhe=fje});var Qhe,dje,Bl,Zhe=P(()=>{"use strict";Khe();k0();cb();Qhe=Nl&&Nl.isRegExp,dje=Qhe?Rl(Qhe):Xhe,Bl=dje});function pje(t){return t===void 0}var Br,Jhe=P(()=>{"use strict";o(pje,"isUndefined");Br=pje});function mje(t,e){return t{"use strict";o(mje,"baseLt");_E=mje});function gje(t,e){var r={};return e=Pi(e,3),Y1(t,function(i,n,a){xu(r,n,e(i,n,a))}),r}var F0,efe=P(()=>{"use strict";d1();vE();Vs();o(gje,"mapValues");F0=gje});function yje(t,e,r){for(var i=-1,n=t.length;++i{"use strict";M0();o(yje,"baseExtremum");K1=yje});function vje(t){return t&&t.length?K1(t,La,zhe):void 0}var So,tfe=P(()=>{"use strict";DE();Ghe();Fh();o(vje,"max");So=vje});function xje(t){return t&&t.length?K1(t,La,_E):void 0}var Lc,pO=P(()=>{"use strict";DE();dO();Fh();o(xje,"min");Lc=xje});function bje(t,e){return t&&t.length?K1(t,Pi(e,2),_E):void 0}var $0,rfe=P(()=>{"use strict";DE();Vs();dO();o(bje,"minBy");$0=bje});function kje(t){if(typeof t!="function")throw new TypeError(Tje);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}var Tje,ife,nfe=P(()=>{"use strict";Tje="Expected a function";o(kje,"negate");ife=kje});function Cje(t,e,r,i){if(!Gi(t))return t;e=md(e,t);for(var n=-1,a=e.length,s=a-1,l=t;l!=null&&++n{"use strict";k1();Ob();fb();Zo();$1();o(Cje,"baseSet");afe=Cje});function wje(t,e,r){for(var i=-1,n=e.length,a={};++i{"use strict";Pb();sfe();Ob();o(wje,"basePickBy");LE=wje});function Eje(t,e){if(t==null)return{};var r=wo(eE(t),function(i){return[i]});return e=Pi(e),LE(t,r,function(i,n){return e(i,n[0])})}var Ao,ofe=P(()=>{"use strict";O0();Vs();mO();WM();o(Eje,"pickBy");Ao=Eje});function Sje(t,e){var r=t.length;for(t.sort(e);r--;)t[r]=t[r].value;return t}var lfe,cfe=P(()=>{"use strict";o(Sje,"baseSortBy");lfe=Sje});function Aje(t,e){if(t!==e){var r=t!==void 0,i=t===null,n=t===t,a=tl(t),s=e!==void 0,l=e===null,u=e===e,h=tl(e);if(!l&&!h&&!a&&t>e||a&&s&&u&&!l&&!h||i&&s&&u||!r&&u||!n)return 1;if(!i&&!a&&!h&&t{"use strict";M0();o(Aje,"compareAscending");ufe=Aje});function _je(t,e,r){for(var i=-1,n=t.criteria,a=e.criteria,s=n.length,l=r.length;++i=l)return u;var h=r[i];return u*(h=="desc"?-1:1)}}return t.index-e.index}var ffe,dfe=P(()=>{"use strict";hfe();o(_je,"compareMultiple");ffe=_je});function Dje(t,e,r){e.length?e=wo(e,function(a){return Gt(a)?function(s){return gd(s,a.length===1?a[0]:a)}:a}):e=[La];var i=-1;e=wo(e,Rl(Pi));var n=wE(t,function(a,s,l){var u=wo(e,function(h){return h(a)});return{criteria:u,index:++i,value:a}});return lfe(n,function(a,s){return ffe(a,s,r)})}var pfe,mfe=P(()=>{"use strict";O0();Pb();Vs();oO();cfe();k0();dfe();Fh();fn();o(Dje,"baseOrderBy");pfe=Dje});var Lje,gfe,yfe=P(()=>{"use strict";iO();Lje=yE("length"),gfe=Lje});function Vje(t){for(var e=vfe.lastIndex=0;vfe.test(t);)++e;return e}var xfe,Rje,Nje,Ije,Mje,Oje,Pje,gO,yO,Bje,bfe,Tfe,kfe,Fje,Cfe,wfe,$je,zje,Gje,vfe,Efe,Sfe=P(()=>{"use strict";xfe="\\ud800-\\udfff",Rje="\\u0300-\\u036f",Nje="\\ufe20-\\ufe2f",Ije="\\u20d0-\\u20ff",Mje=Rje+Nje+Ije,Oje="\\ufe0e\\ufe0f",Pje="["+xfe+"]",gO="["+Mje+"]",yO="\\ud83c[\\udffb-\\udfff]",Bje="(?:"+gO+"|"+yO+")",bfe="[^"+xfe+"]",Tfe="(?:\\ud83c[\\udde6-\\uddff]){2}",kfe="[\\ud800-\\udbff][\\udc00-\\udfff]",Fje="\\u200d",Cfe=Bje+"?",wfe="["+Oje+"]?",$je="(?:"+Fje+"(?:"+[bfe,Tfe,kfe].join("|")+")"+wfe+Cfe+")*",zje=wfe+Cfe+$je,Gje="(?:"+[bfe+gO+"?",gO,Tfe,kfe,Pje].join("|")+")",vfe=RegExp(yO+"(?="+yO+")|"+Gje+zje,"g");o(Vje,"unicodeSize");Efe=Vje});function qje(t){return Bce(t)?Efe(t):gfe(t)}var Afe,_fe=P(()=>{"use strict";yfe();Fce();Sfe();o(qje,"stringSize");Afe=qje});function Wje(t,e){return LE(t,e,function(r,i){return gE(t,i)})}var Dfe,Lfe=P(()=>{"use strict";mO();rO();o(Wje,"basePick");Dfe=Wje});var Uje,z0,Rfe=P(()=>{"use strict";Lfe();Pce();Uje=Oce(function(t,e){return t==null?{}:Dfe(t,e)}),z0=Uje});function jje(t,e,r,i){for(var n=-1,a=Yje(Hje((e-t)/(r||1)),0),s=Array(a);a--;)s[i?a:++n]=t,t+=r;return s}var Hje,Yje,Nfe,Ife=P(()=>{"use strict";Hje=Math.ceil,Yje=Math.max;o(jje,"baseRange");Nfe=jje});function Xje(t){return function(e,r,i){return i&&typeof i!="number"&&Jo(e,r,i)&&(r=i=void 0),e=M1(e),r===void 0?(r=e,e=0):r=M1(r),i=i===void 0?e{"use strict";Ife();w0();IM();o(Xje,"createRange");Mfe=Xje});var Kje,Fl,Pfe=P(()=>{"use strict";Ofe();Kje=Mfe(),Fl=Kje});function Qje(t,e,r,i,n){return n(t,function(a,s,l){r=i?(i=!1,a):e(r,a,s,l)}),r}var Bfe,Ffe=P(()=>{"use strict";o(Qje,"baseReduce");Bfe=Qje});function Zje(t,e,r){var i=Gt(t)?$ce:Bfe,n=arguments.length<3;return i(t,Pi(e,4),r,n,Eo)}var mi,vO=P(()=>{"use strict";zce();vd();Vs();Ffe();fn();o(Zje,"reduce");mi=Zje});function Jje(t,e){var r=Gt(t)?V1:CE;return r(t,ife(Pi(e,3)))}var Td,$fe=P(()=>{"use strict";X5();aO();Vs();fn();nfe();o(Jje,"reject");Td=Jje});function rXe(t){if(t==null)return 0;if(Mn(t))return Gn(t)?Afe(t):t.length;var e=rl(t);return e==eXe||e==tXe?t.size:B1(t).length}var eXe,tXe,xO,zfe=P(()=>{"use strict";q5();B0();Ll();EE();_fe();eXe="[object Map]",tXe="[object Set]";o(rXe,"size");xO=rXe});function iXe(t,e){var r;return Eo(t,function(i,n,a){return r=e(i,n,a),!r}),!!r}var Gfe,Vfe=P(()=>{"use strict";vd();o(iXe,"baseSome");Gfe=iXe});function nXe(t,e,r){var i=Gt(t)?oE:Gfe;return r&&Jo(t,e,r)&&(e=void 0),i(t,Pi(e,3))}var Fb,qfe=P(()=>{"use strict";XM();Vs();Vfe();fn();w0();o(nXe,"some");Fb=nXe});var aXe,Nu,Wfe=P(()=>{"use strict";G1();mfe();C1();w0();aXe=ku(function(t,e){if(t==null)return[];var r=e.length;return r>1&&Jo(t,e[0],e[1])?e=[]:r>2&&Jo(e[0],e[1],e[2])&&(e=[e[0]]),pfe(t,Lu(e,1),[])}),Nu=aXe});var sXe,oXe,Ufe,Hfe=P(()=>{"use strict";UM();MM();uE();sXe=1/0,oXe=yd&&1/H1(new yd([,-0]))[1]==sXe?function(t){return new yd(t)}:Sn,Ufe=oXe});function cXe(t,e,r){var i=-1,n=V5,a=t.length,s=!0,l=[],u=l;if(r)s=!1,n=bE;else if(a>=lXe){var h=e?null:Ufe(t);if(h)return H1(h);s=!1,n=U1,u=new W1}else u=e?[]:l;e:for(;++i{"use strict";sE();BM();nO();lE();Hfe();uE();lXe=200;o(cXe,"baseUniq");Q1=cXe});var uXe,bO,Yfe=P(()=>{"use strict";G1();C1();RE();z3();uXe=ku(function(t){return Q1(Lu(t,1,T0,!0))}),bO=uXe});function hXe(t){return t&&t.length?Q1(t):[]}var Z1,jfe=P(()=>{"use strict";RE();o(hXe,"uniq");Z1=hXe});function fXe(t,e){return t&&t.length?Q1(t,Pi(e,2)):[]}var Xfe,Kfe=P(()=>{"use strict";Vs();RE();o(fXe,"uniqBy");Xfe=fXe});function pXe(t){var e=++dXe;return U5(t)+e}var dXe,G0,Qfe=P(()=>{"use strict";FM();dXe=0;o(pXe,"uniqueId");G0=pXe});function mXe(t,e,r){for(var i=-1,n=t.length,a=e.length,s={};++i{"use strict";o(mXe,"baseZipObject");Zfe=mXe});function gXe(t,e){return Zfe(t||[],e||[],Tu)}var NE,ede=P(()=>{"use strict";k1();Jfe();o(gXe,"zipObject");NE=gXe});var nr=P(()=>{"use strict";wce();YM();_ue();Due();hI();yhe();bhe();khe();Che();whe();Dhe();sO();Mhe();Phe();lO();Y5();kE();Bhe();Fhe();$he();Whe();Fh();Yhe();jhe();fn();AE();tb();Zo();Zhe();EE();Jhe();_u();The();X1();efe();tfe();pI();pO();rfe();MM();mhe();Rfe();ofe();Pfe();vO();$fe();zfe();qfe();Wfe();Yfe();jfe();Qfe();fO();ede();});function rde(t,e){t[e]?t[e]++:t[e]=1}function ide(t,e){--t[e]||delete t[e]}function $b(t,e,r,i){var n=""+e,a=""+r;if(!t&&n>a){var s=n;n=a,a=s}return n+tde+a+tde+(Br(i)?yXe:i)}function vXe(t,e,r,i){var n=""+e,a=""+r;if(!t&&n>a){var s=n;n=a,a=s}var l={v:n,w:a};return i&&(l.name=i),l}function TO(t,e){return $b(t,e.v,e.w,e.name)}var yXe,V0,tde,Ai,IE=P(()=>{"use strict";nr();yXe="\0",V0="\0",tde="",Ai=class{static{o(this,"Graph")}constructor(e={}){this._isDirected=Object.prototype.hasOwnProperty.call(e,"directed")?e.directed:!0,this._isMultigraph=Object.prototype.hasOwnProperty.call(e,"multigraph")?e.multigraph:!1,this._isCompound=Object.prototype.hasOwnProperty.call(e,"compound")?e.compound:!1,this._label=void 0,this._defaultNodeLabelFn=yo(void 0),this._defaultEdgeLabelFn=yo(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children[V0]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}isDirected(){return this._isDirected}isMultigraph(){return this._isMultigraph}isCompound(){return this._isCompound}setGraph(e){return this._label=e,this}graph(){return this._label}setDefaultNodeLabel(e){return Qn(e)||(e=yo(e)),this._defaultNodeLabelFn=e,this}nodeCount(){return this._nodeCount}nodes(){return ni(this._nodes)}sources(){var e=this;return pi(this.nodes(),function(r){return _r(e._in[r])})}sinks(){var e=this;return pi(this.nodes(),function(r){return _r(e._out[r])})}setNodes(e,r){var i=arguments,n=this;return Pe(e,function(a){i.length>1?n.setNode(a,r):n.setNode(a)}),this}setNode(e,r){return Object.prototype.hasOwnProperty.call(this._nodes,e)?(arguments.length>1&&(this._nodes[e]=r),this):(this._nodes[e]=arguments.length>1?r:this._defaultNodeLabelFn(e),this._isCompound&&(this._parent[e]=V0,this._children[e]={},this._children[V0][e]=!0),this._in[e]={},this._preds[e]={},this._out[e]={},this._sucs[e]={},++this._nodeCount,this)}node(e){return this._nodes[e]}hasNode(e){return Object.prototype.hasOwnProperty.call(this._nodes,e)}removeNode(e){if(Object.prototype.hasOwnProperty.call(this._nodes,e)){var r=o(i=>this.removeEdge(this._edgeObjs[i]),"removeEdge");delete this._nodes[e],this._isCompound&&(this._removeFromParentsChildList(e),delete this._parent[e],Pe(this.children(e),i=>{this.setParent(i)}),delete this._children[e]),Pe(ni(this._in[e]),r),delete this._in[e],delete this._preds[e],Pe(ni(this._out[e]),r),delete this._out[e],delete this._sucs[e],--this._nodeCount}return this}setParent(e,r){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(Br(r))r=V0;else{r+="";for(var i=r;!Br(i);i=this.parent(i))if(i===e)throw new Error("Setting "+r+" as parent of "+e+" would create a cycle");this.setNode(r)}return this.setNode(e),this._removeFromParentsChildList(e),this._parent[e]=r,this._children[r][e]=!0,this}_removeFromParentsChildList(e){delete this._children[this._parent[e]][e]}parent(e){if(this._isCompound){var r=this._parent[e];if(r!==V0)return r}}children(e){if(Br(e)&&(e=V0),this._isCompound){var r=this._children[e];if(r)return ni(r)}else{if(e===V0)return this.nodes();if(this.hasNode(e))return[]}}predecessors(e){var r=this._preds[e];if(r)return ni(r)}successors(e){var r=this._sucs[e];if(r)return ni(r)}neighbors(e){var r=this.predecessors(e);if(r)return bO(r,this.successors(e))}isLeaf(e){var r;return this.isDirected()?r=this.successors(e):r=this.neighbors(e),r.length===0}filterNodes(e){var r=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});r.setGraph(this.graph());var i=this;Pe(this._nodes,function(s,l){e(l)&&r.setNode(l,s)}),Pe(this._edgeObjs,function(s){r.hasNode(s.v)&&r.hasNode(s.w)&&r.setEdge(s,i.edge(s))});var n={};function a(s){var l=i.parent(s);return l===void 0||r.hasNode(l)?(n[s]=l,l):l in n?n[l]:a(l)}return o(a,"findParent"),this._isCompound&&Pe(r.nodes(),function(s){r.setParent(s,a(s))}),r}setDefaultEdgeLabel(e){return Qn(e)||(e=yo(e)),this._defaultEdgeLabelFn=e,this}edgeCount(){return this._edgeCount}edges(){return qr(this._edgeObjs)}setPath(e,r){var i=this,n=arguments;return mi(e,function(a,s){return n.length>1?i.setEdge(a,s,r):i.setEdge(a,s),s}),this}setEdge(){var e,r,i,n,a=!1,s=arguments[0];typeof s=="object"&&s!==null&&"v"in s?(e=s.v,r=s.w,i=s.name,arguments.length===2&&(n=arguments[1],a=!0)):(e=s,r=arguments[1],i=arguments[3],arguments.length>2&&(n=arguments[2],a=!0)),e=""+e,r=""+r,Br(i)||(i=""+i);var l=$b(this._isDirected,e,r,i);if(Object.prototype.hasOwnProperty.call(this._edgeLabels,l))return a&&(this._edgeLabels[l]=n),this;if(!Br(i)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(e),this.setNode(r),this._edgeLabels[l]=a?n:this._defaultEdgeLabelFn(e,r,i);var u=vXe(this._isDirected,e,r,i);return e=u.v,r=u.w,Object.freeze(u),this._edgeObjs[l]=u,rde(this._preds[r],e),rde(this._sucs[e],r),this._in[r][l]=u,this._out[e][l]=u,this._edgeCount++,this}edge(e,r,i){var n=arguments.length===1?TO(this._isDirected,arguments[0]):$b(this._isDirected,e,r,i);return this._edgeLabels[n]}hasEdge(e,r,i){var n=arguments.length===1?TO(this._isDirected,arguments[0]):$b(this._isDirected,e,r,i);return Object.prototype.hasOwnProperty.call(this._edgeLabels,n)}removeEdge(e,r,i){var n=arguments.length===1?TO(this._isDirected,arguments[0]):$b(this._isDirected,e,r,i),a=this._edgeObjs[n];return a&&(e=a.v,r=a.w,delete this._edgeLabels[n],delete this._edgeObjs[n],ide(this._preds[r],e),ide(this._sucs[e],r),delete this._in[r][n],delete this._out[e][n],this._edgeCount--),this}inEdges(e,r){var i=this._in[e];if(i){var n=qr(i);return r?pi(n,function(a){return a.v===r}):n}}outEdges(e,r){var i=this._out[e];if(i){var n=qr(i);return r?pi(n,function(a){return a.w===r}):n}}nodeEdges(e,r){var i=this.inEdges(e,r);if(i)return i.concat(this.outEdges(e,r))}};Ai.prototype._nodeCount=0;Ai.prototype._edgeCount=0;o(rde,"incrementOrInitEntry");o(ide,"decrementOrRemoveEntry");o($b,"edgeArgsToId");o(vXe,"edgeArgsToObj");o(TO,"edgeObjToId")});var $l=P(()=>{"use strict";IE()});function nde(t){t._prev._next=t._next,t._next._prev=t._prev,delete t._next,delete t._prev}function xXe(t,e){if(t!=="_next"&&t!=="_prev")return e}var OE,ade=P(()=>{"use strict";OE=class{static{o(this,"List")}constructor(){var e={};e._next=e._prev=e,this._sentinel=e}dequeue(){var e=this._sentinel,r=e._prev;if(r!==e)return nde(r),r}enqueue(e){var r=this._sentinel;e._prev&&e._next&&nde(e),e._next=r._next,r._next._prev=e,r._next=e,e._prev=r}toString(){for(var e=[],r=this._sentinel,i=r._prev;i!==r;)e.push(JSON.stringify(i,xXe)),i=i._prev;return"["+e.join(", ")+"]"}};o(nde,"unlink");o(xXe,"filterOutLinks")});function sde(t,e){if(t.nodeCount()<=1)return[];var r=kXe(t,e||bXe),i=TXe(r.graph,r.buckets,r.zeroIdx);return di(ht(i,function(n){return t.outEdges(n.v,n.w)}))}function TXe(t,e,r){for(var i=[],n=e[e.length-1],a=e[0],s;t.nodeCount();){for(;s=a.dequeue();)kO(t,e,r,s);for(;s=n.dequeue();)kO(t,e,r,s);if(t.nodeCount()){for(var l=e.length-2;l>0;--l)if(s=e[l].dequeue(),s){i=i.concat(kO(t,e,r,s,!0));break}}}return i}function kO(t,e,r,i,n){var a=n?[]:void 0;return Pe(t.inEdges(i.v),function(s){var l=t.edge(s),u=t.node(s.v);n&&a.push({v:s.v,w:s.w}),u.out-=l,CO(e,r,u)}),Pe(t.outEdges(i.v),function(s){var l=t.edge(s),u=s.w,h=t.node(u);h.in-=l,CO(e,r,h)}),t.removeNode(i.v),a}function kXe(t,e){var r=new Ai,i=0,n=0;Pe(t.nodes(),function(l){r.setNode(l,{v:l,in:0,out:0})}),Pe(t.edges(),function(l){var u=r.edge(l.v,l.w)||0,h=e(l),f=u+h;r.setEdge(l.v,l.w,f),n=Math.max(n,r.node(l.v).out+=h),i=Math.max(i,r.node(l.w).in+=h)});var a=Fl(n+i+3).map(function(){return new OE}),s=i+1;return Pe(r.nodes(),function(l){CO(a,s,r.node(l))}),{graph:r,buckets:a,zeroIdx:s}}function CO(t,e,r){r.out?r.in?t[r.out-r.in+e].enqueue(r):t[t.length-1].enqueue(r):t[0].enqueue(r)}var bXe,ode=P(()=>{"use strict";nr();$l();ade();bXe=yo(1);o(sde,"greedyFAS");o(TXe,"doGreedyFAS");o(kO,"removeNode");o(kXe,"buildState");o(CO,"assignBucket")});function lde(t){var e=t.graph().acyclicer==="greedy"?sde(t,r(t)):CXe(t);Pe(e,function(i){var n=t.edge(i);t.removeEdge(i),n.forwardName=i.name,n.reversed=!0,t.setEdge(i.w,i.v,n,G0("rev"))});function r(i){return function(n){return i.edge(n).weight}}o(r,"weightFn")}function CXe(t){var e=[],r={},i={};function n(a){Object.prototype.hasOwnProperty.call(i,a)||(i[a]=!0,r[a]=!0,Pe(t.outEdges(a),function(s){Object.prototype.hasOwnProperty.call(r,s.w)?e.push(s):n(s.w)}),delete r[a])}return o(n,"dfs"),Pe(t.nodes(),n),e}function cde(t){Pe(t.edges(),function(e){var r=t.edge(e);if(r.reversed){t.removeEdge(e);var i=r.forwardName;delete r.reversed,delete r.forwardName,t.setEdge(e.w,e.v,r,i)}})}var wO=P(()=>{"use strict";nr();ode();o(lde,"run");o(CXe,"dfsFAS");o(cde,"undo")});function Iu(t,e,r,i){var n;do n=G0(i);while(t.hasNode(n));return r.dummy=e,t.setNode(n,r),n}function hde(t){var e=new Ai().setGraph(t.graph());return Pe(t.nodes(),function(r){e.setNode(r,t.node(r))}),Pe(t.edges(),function(r){var i=e.edge(r.v,r.w)||{weight:0,minlen:1},n=t.edge(r);e.setEdge(r.v,r.w,{weight:i.weight+n.weight,minlen:Math.max(i.minlen,n.minlen)})}),e}function PE(t){var e=new Ai({multigraph:t.isMultigraph()}).setGraph(t.graph());return Pe(t.nodes(),function(r){t.children(r).length||e.setNode(r,t.node(r))}),Pe(t.edges(),function(r){e.setEdge(r,t.edge(r))}),e}function EO(t,e){var r=t.x,i=t.y,n=e.x-r,a=e.y-i,s=t.width/2,l=t.height/2;if(!n&&!a)throw new Error("Not possible to find intersection inside of the rectangle");var u,h;return Math.abs(a)*s>Math.abs(n)*l?(a<0&&(l=-l),u=l*n/a,h=l):(n<0&&(s=-s),u=s,h=s*a/n),{x:r+u,y:i+h}}function kd(t){var e=ht(Fl(AO(t)+1),function(){return[]});return Pe(t.nodes(),function(r){var i=t.node(r),n=i.rank;Br(n)||(e[n][i.order]=r)}),e}function fde(t){var e=Lc(ht(t.nodes(),function(r){return t.node(r).rank}));Pe(t.nodes(),function(r){var i=t.node(r);Vt(i,"rank")&&(i.rank-=e)})}function dde(t){var e=Lc(ht(t.nodes(),function(a){return t.node(a).rank})),r=[];Pe(t.nodes(),function(a){var s=t.node(a).rank-e;r[s]||(r[s]=[]),r[s].push(a)});var i=0,n=t.graph().nodeRankFactor;Pe(r,function(a,s){Br(a)&&s%n!==0?--i:i&&Pe(a,function(l){t.node(l).rank+=i})})}function SO(t,e,r,i){var n={width:0,height:0};return arguments.length>=4&&(n.rank=r,n.order=i),Iu(t,"border",n,e)}function AO(t){return So(ht(t.nodes(),function(e){var r=t.node(e).rank;if(!Br(r))return r}))}function pde(t,e){var r={lhs:[],rhs:[]};return Pe(t,function(i){e(i)?r.lhs.push(i):r.rhs.push(i)}),r}function mde(t,e){var r=xE();try{return e()}finally{console.log(t+" time: "+(xE()-r)+"ms")}}function gde(t,e){return e()}var Mu=P(()=>{"use strict";nr();$l();o(Iu,"addDummyNode");o(hde,"simplify");o(PE,"asNonCompoundGraph");o(EO,"intersectRect");o(kd,"buildLayerMatrix");o(fde,"normalizeRanks");o(dde,"removeEmptyRanks");o(SO,"addBorderNode");o(AO,"maxRank");o(pde,"partition");o(mde,"time");o(gde,"notime")});function vde(t){function e(r){var i=t.children(r),n=t.node(r);if(i.length&&Pe(i,e),Object.prototype.hasOwnProperty.call(n,"minRank")){n.borderLeft=[],n.borderRight=[];for(var a=n.minRank,s=n.maxRank+1;a{"use strict";nr();Mu();o(vde,"addBorderSegments");o(yde,"addBorderNode")});function Tde(t){var e=t.graph().rankdir.toLowerCase();(e==="lr"||e==="rl")&&Cde(t)}function kde(t){var e=t.graph().rankdir.toLowerCase();(e==="bt"||e==="rl")&&wXe(t),(e==="lr"||e==="rl")&&(EXe(t),Cde(t))}function Cde(t){Pe(t.nodes(),function(e){bde(t.node(e))}),Pe(t.edges(),function(e){bde(t.edge(e))})}function bde(t){var e=t.width;t.width=t.height,t.height=e}function wXe(t){Pe(t.nodes(),function(e){_O(t.node(e))}),Pe(t.edges(),function(e){var r=t.edge(e);Pe(r.points,_O),Object.prototype.hasOwnProperty.call(r,"y")&&_O(r)})}function _O(t){t.y=-t.y}function EXe(t){Pe(t.nodes(),function(e){DO(t.node(e))}),Pe(t.edges(),function(e){var r=t.edge(e);Pe(r.points,DO),Object.prototype.hasOwnProperty.call(r,"x")&&DO(r)})}function DO(t){var e=t.x;t.x=t.y,t.y=e}var wde=P(()=>{"use strict";nr();o(Tde,"adjust");o(kde,"undo");o(Cde,"swapWidthHeight");o(bde,"swapWidthHeightOne");o(wXe,"reverseY");o(_O,"reverseYOne");o(EXe,"swapXY");o(DO,"swapXYOne")});function Ede(t){t.graph().dummyChains=[],Pe(t.edges(),function(e){AXe(t,e)})}function AXe(t,e){var r=e.v,i=t.node(r).rank,n=e.w,a=t.node(n).rank,s=e.name,l=t.edge(e),u=l.labelRank;if(a!==i+1){t.removeEdge(e);var h=void 0,f,d;for(d=0,++i;i{"use strict";nr();Mu();o(Ede,"run");o(AXe,"normalizeEdge");o(Sde,"undo")});function zb(t){var e={};function r(i){var n=t.node(i);if(Object.prototype.hasOwnProperty.call(e,i))return n.rank;e[i]=!0;var a=Lc(ht(t.outEdges(i),function(s){return r(s.w)-t.edge(s).minlen}));return(a===Number.POSITIVE_INFINITY||a===void 0||a===null)&&(a=0),n.rank=a}o(r,"dfs"),Pe(t.sources(),r)}function q0(t,e){return t.node(e.w).rank-t.node(e.v).rank-t.edge(e).minlen}var BE=P(()=>{"use strict";nr();o(zb,"longestPath");o(q0,"slack")});function FE(t){var e=new Ai({directed:!1}),r=t.nodes()[0],i=t.nodeCount();e.setNode(r,{});for(var n,a;_Xe(e,t){"use strict";nr();$l();BE();o(FE,"feasibleTree");o(_Xe,"tightTree");o(DXe,"findMinSlackEdge");o(LXe,"shiftRanks")});var _de=P(()=>{"use strict"});var NO=P(()=>{"use strict"});var Yur,IO=P(()=>{"use strict";nr();NO();Yur=yo(1)});var Dde=P(()=>{"use strict";IO()});var MO=P(()=>{"use strict"});var Lde=P(()=>{"use strict";MO()});var nhr,Rde=P(()=>{"use strict";nr();nhr=yo(1)});function OO(t){var e={},r={},i=[];function n(a){if(Object.prototype.hasOwnProperty.call(r,a))throw new Gb;Object.prototype.hasOwnProperty.call(e,a)||(r[a]=!0,e[a]=!0,Pe(t.predecessors(a),n),delete r[a],i.push(a))}if(o(n,"visit"),Pe(t.sinks(),n),xO(e)!==t.nodeCount())throw new Gb;return i}function Gb(){}var PO=P(()=>{"use strict";nr();OO.CycleException=Gb;o(OO,"topsort");o(Gb,"CycleException");Gb.prototype=new Error});var Nde=P(()=>{"use strict";PO()});function $E(t,e,r){Gt(e)||(e=[e]);var i=(t.isDirected()?t.successors:t.neighbors).bind(t),n=[],a={};return Pe(e,function(s){if(!t.hasNode(s))throw new Error("Graph does not have node: "+s);Ide(t,s,r==="post",a,i,n)}),n}function Ide(t,e,r,i,n,a){Object.prototype.hasOwnProperty.call(i,e)||(i[e]=!0,r||a.push(e),Pe(n(e),function(s){Ide(t,s,r,i,n,a)}),r&&a.push(e))}var BO=P(()=>{"use strict";nr();o($E,"dfs");o(Ide,"doDfs")});function FO(t,e){return $E(t,e,"post")}var Mde=P(()=>{"use strict";BO();o(FO,"postorder")});function $O(t,e){return $E(t,e,"pre")}var Ode=P(()=>{"use strict";BO();o($O,"preorder")});var Pde=P(()=>{"use strict";NO();IE()});var Bde=P(()=>{"use strict";_de();IO();Dde();Lde();Rde();Nde();Mde();Ode();Pde();MO();PO()});function wd(t){t=hde(t),zb(t);var e=FE(t);GO(e),zO(e,t);for(var r,i;r=Gde(e);)i=Vde(e,t,r),qde(e,t,r,i)}function zO(t,e){var r=FO(t,t.nodes());r=r.slice(0,r.length-1),Pe(r,function(i){OXe(t,e,i)})}function OXe(t,e,r){var i=t.node(r),n=i.parent;t.edge(r,n).cutvalue=$de(t,e,r)}function $de(t,e,r){var i=t.node(r),n=i.parent,a=!0,s=e.edge(r,n),l=0;return s||(a=!1,s=e.edge(n,r)),l=s.weight,Pe(e.nodeEdges(r),function(u){var h=u.v===r,f=h?u.w:u.v;if(f!==n){var d=h===a,p=e.edge(u).weight;if(l+=d?p:-p,BXe(t,r,f)){var m=t.edge(r,f).cutvalue;l+=d?-m:m}}}),l}function GO(t,e){arguments.length<2&&(e=t.nodes()[0]),zde(t,{},1,e)}function zde(t,e,r,i,n){var a=r,s=t.node(i);return e[i]=!0,Pe(t.neighbors(i),function(l){Object.prototype.hasOwnProperty.call(e,l)||(r=zde(t,e,r,l,i))}),s.low=a,s.lim=r++,n?s.parent=n:delete s.parent,r}function Gde(t){return qs(t.edges(),function(e){return t.edge(e).cutvalue<0})}function Vde(t,e,r){var i=r.v,n=r.w;e.hasEdge(i,n)||(i=r.w,n=r.v);var a=t.node(i),s=t.node(n),l=a,u=!1;a.lim>s.lim&&(l=s,u=!0);var h=pi(e.edges(),function(f){return u===Fde(t,t.node(f.v),l)&&u!==Fde(t,t.node(f.w),l)});return $0(h,function(f){return q0(e,f)})}function qde(t,e,r,i){var n=r.v,a=r.w;t.removeEdge(n,a),t.setEdge(i.v,i.w,{}),GO(t),zO(t,e),PXe(t,e)}function PXe(t,e){var r=qs(t.nodes(),function(n){return!e.node(n).parent}),i=$O(t,r);i=i.slice(1),Pe(i,function(n){var a=t.node(n).parent,s=e.edge(n,a),l=!1;s||(s=e.edge(a,n),l=!0),e.node(n).rank=e.node(a).rank+(l?s.minlen:-s.minlen)})}function BXe(t,e,r){return t.hasEdge(e,r)}function Fde(t,e,r){return r.low<=e.lim&&e.lim<=r.lim}var Wde=P(()=>{"use strict";nr();Bde();Mu();RO();BE();wd.initLowLimValues=GO;wd.initCutValues=zO;wd.calcCutValue=$de;wd.leaveEdge=Gde;wd.enterEdge=Vde;wd.exchangeEdges=qde;o(wd,"networkSimplex");o(zO,"initCutValues");o(OXe,"assignCutValue");o($de,"calcCutValue");o(GO,"initLowLimValues");o(zde,"dfsAssignLowLim");o(Gde,"leaveEdge");o(Vde,"enterEdge");o(qde,"exchangeEdges");o(PXe,"updateRanks");o(BXe,"isTreeEdge");o(Fde,"isDescendant")});function VO(t){switch(t.graph().ranker){case"network-simplex":Ude(t);break;case"tight-tree":$Xe(t);break;case"longest-path":FXe(t);break;default:Ude(t)}}function $Xe(t){zb(t),FE(t)}function Ude(t){wd(t)}var FXe,qO=P(()=>{"use strict";RO();Wde();BE();o(VO,"rank");FXe=zb;o($Xe,"tightTreeRanker");o(Ude,"networkSimplexRanker")});function Hde(t){var e=Iu(t,"root",{},"_root"),r=zXe(t),i=So(qr(r))-1,n=2*i+1;t.graph().nestingRoot=e,Pe(t.edges(),function(s){t.edge(s).minlen*=n});var a=GXe(t)+1;Pe(t.children(),function(s){Yde(t,e,n,a,i,r,s)}),t.graph().nodeRankFactor=n}function Yde(t,e,r,i,n,a,s){var l=t.children(s);if(!l.length){s!==e&&t.setEdge(e,s,{weight:0,minlen:r});return}var u=SO(t,"_bt"),h=SO(t,"_bb"),f=t.node(s);t.setParent(u,s),f.borderTop=u,t.setParent(h,s),f.borderBottom=h,Pe(l,function(d){Yde(t,e,r,i,n,a,d);var p=t.node(d),m=p.borderTop?p.borderTop:d,g=p.borderBottom?p.borderBottom:d,y=p.borderTop?i:2*i,v=m!==g?1:n-a[s]+1;t.setEdge(u,m,{weight:y,minlen:v,nestingEdge:!0}),t.setEdge(g,h,{weight:y,minlen:v,nestingEdge:!0})}),t.parent(s)||t.setEdge(e,u,{weight:0,minlen:n+a[s]})}function zXe(t){var e={};function r(i,n){var a=t.children(i);a&&a.length&&Pe(a,function(s){r(s,n+1)}),e[i]=n}return o(r,"dfs"),Pe(t.children(),function(i){r(i,1)}),e}function GXe(t){return mi(t.edges(),function(e,r){return e+t.edge(r).weight},0)}function jde(t){var e=t.graph();t.removeNode(e.nestingRoot),delete e.nestingRoot,Pe(t.edges(),function(r){var i=t.edge(r);i.nestingEdge&&t.removeEdge(r)})}var Xde=P(()=>{"use strict";nr();Mu();o(Hde,"run");o(Yde,"dfs");o(zXe,"treeDepths");o(GXe,"sumWeights");o(jde,"cleanup")});function Kde(t,e,r){var i={},n;Pe(r,function(a){for(var s=t.parent(a),l,u;s;){if(l=t.parent(s),l?(u=i[l],i[l]=s):(u=n,n=s),u&&u!==s){e.setEdge(u,s);return}s=l}})}var Qde=P(()=>{"use strict";nr();o(Kde,"addSubgraphConstraints")});function Zde(t,e,r){var i=qXe(t),n=new Ai({compound:!0}).setGraph({root:i}).setDefaultNodeLabel(function(a){return t.node(a)});return Pe(t.nodes(),function(a){var s=t.node(a),l=t.parent(a);(s.rank===e||s.minRank<=e&&e<=s.maxRank)&&(n.setNode(a),n.setParent(a,l||i),Pe(t[r](a),function(u){var h=u.v===a?u.w:u.v,f=n.edge(h,a),d=Br(f)?0:f.weight;n.setEdge(h,a,{weight:t.edge(u).weight+d})}),Object.prototype.hasOwnProperty.call(s,"minRank")&&n.setNode(a,{borderLeft:s.borderLeft[e],borderRight:s.borderRight[e]}))}),n}function qXe(t){for(var e;t.hasNode(e=G0("_root")););return e}var Jde=P(()=>{"use strict";nr();$l();o(Zde,"buildLayerGraph");o(qXe,"createRootNode")});function epe(t,e){for(var r=0,i=1;i0;)f%2&&(d+=l[f+1]),f=f-1>>1,l[f]+=h.weight;u+=h.weight*d})),u}var tpe=P(()=>{"use strict";nr();o(epe,"crossCount");o(WXe,"twoLayerCrossCount")});function rpe(t){var e={},r=pi(t.nodes(),function(l){return!t.children(l).length}),i=So(ht(r,function(l){return t.node(l).rank})),n=ht(Fl(i+1),function(){return[]});function a(l){if(!Vt(e,l)){e[l]=!0;var u=t.node(l);n[u.rank].push(l),Pe(t.successors(l),a)}}o(a,"dfs");var s=Nu(r,function(l){return t.node(l).rank});return Pe(s,a),n}var ipe=P(()=>{"use strict";nr();o(rpe,"initOrder")});function npe(t,e){return ht(e,function(r){var i=t.inEdges(r);if(i.length){var n=mi(i,function(a,s){var l=t.edge(s),u=t.node(s.v);return{sum:a.sum+l.weight*u.order,weight:a.weight+l.weight}},{sum:0,weight:0});return{v:r,barycenter:n.sum/n.weight,weight:n.weight}}else return{v:r}})}var ape=P(()=>{"use strict";nr();o(npe,"barycenter")});function spe(t,e){var r={};Pe(t,function(n,a){var s=r[n.v]={indegree:0,in:[],out:[],vs:[n.v],i:a};Br(n.barycenter)||(s.barycenter=n.barycenter,s.weight=n.weight)}),Pe(e.edges(),function(n){var a=r[n.v],s=r[n.w];!Br(a)&&!Br(s)&&(s.indegree++,a.out.push(r[n.w]))});var i=pi(r,function(n){return!n.indegree});return UXe(i)}function UXe(t){var e=[];function r(a){return function(s){s.merged||(Br(s.barycenter)||Br(a.barycenter)||s.barycenter>=a.barycenter)&&HXe(a,s)}}o(r,"handleIn");function i(a){return function(s){s.in.push(a),--s.indegree===0&&t.push(s)}}for(o(i,"handleOut");t.length;){var n=t.pop();e.push(n),Pe(n.in.reverse(),r(n)),Pe(n.out,i(n))}return ht(pi(e,function(a){return!a.merged}),function(a){return z0(a,["vs","i","barycenter","weight"])})}function HXe(t,e){var r=0,i=0;t.weight&&(r+=t.barycenter*t.weight,i+=t.weight),e.weight&&(r+=e.barycenter*e.weight,i+=e.weight),t.vs=e.vs.concat(t.vs),t.barycenter=r/i,t.weight=i,t.i=Math.min(e.i,t.i),e.merged=!0}var ope=P(()=>{"use strict";nr();o(spe,"resolveConflicts");o(UXe,"doResolveConflicts");o(HXe,"mergeEntries")});function cpe(t,e){var r=pde(t,function(f){return Object.prototype.hasOwnProperty.call(f,"barycenter")}),i=r.lhs,n=Nu(r.rhs,function(f){return-f.i}),a=[],s=0,l=0,u=0;i.sort(YXe(!!e)),u=lpe(a,n,u),Pe(i,function(f){u+=f.vs.length,a.push(f.vs),s+=f.barycenter*f.weight,l+=f.weight,u=lpe(a,n,u)});var h={vs:di(a)};return l&&(h.barycenter=s/l,h.weight=l),h}function lpe(t,e,r){for(var i;e.length&&(i=Na(e)).i<=r;)e.pop(),t.push(i.vs),r++;return r}function YXe(t){return function(e,r){return e.barycenterr.barycenter?1:t?r.i-e.i:e.i-r.i}}var upe=P(()=>{"use strict";nr();Mu();o(cpe,"sort");o(lpe,"consumeUnsortable");o(YXe,"compareWithBias")});function WO(t,e,r,i){var n=t.children(e),a=t.node(e),s=a?a.borderLeft:void 0,l=a?a.borderRight:void 0,u={};s&&(n=pi(n,function(g){return g!==s&&g!==l}));var h=npe(t,n);Pe(h,function(g){if(t.children(g.v).length){var y=WO(t,g.v,r,i);u[g.v]=y,Object.prototype.hasOwnProperty.call(y,"barycenter")&&XXe(g,y)}});var f=spe(h,r);jXe(f,u);var d=cpe(f,i);if(s&&(d.vs=di([s,d.vs,l]),t.predecessors(s).length)){var p=t.node(t.predecessors(s)[0]),m=t.node(t.predecessors(l)[0]);Object.prototype.hasOwnProperty.call(d,"barycenter")||(d.barycenter=0,d.weight=0),d.barycenter=(d.barycenter*d.weight+p.order+m.order)/(d.weight+2),d.weight+=2}return d}function jXe(t,e){Pe(t,function(r){r.vs=di(r.vs.map(function(i){return e[i]?e[i].vs:i}))})}function XXe(t,e){Br(t.barycenter)?(t.barycenter=e.barycenter,t.weight=e.weight):(t.barycenter=(t.barycenter*t.weight+e.barycenter*e.weight)/(t.weight+e.weight),t.weight+=e.weight)}var hpe=P(()=>{"use strict";nr();ape();ope();upe();o(WO,"sortSubgraph");o(jXe,"expandSubgraphs");o(XXe,"mergeBarycenters")});function ppe(t){var e=AO(t),r=fpe(t,Fl(1,e+1),"inEdges"),i=fpe(t,Fl(e-1,-1,-1),"outEdges"),n=rpe(t);dpe(t,n);for(var a=Number.POSITIVE_INFINITY,s,l=0,u=0;u<4;++l,++u){KXe(l%2?r:i,l%4>=2),n=kd(t);var h=epe(t,n);h{"use strict";nr();$l();Mu();Qde();Jde();tpe();ipe();hpe();o(ppe,"order");o(fpe,"buildLayerGraphs");o(KXe,"sweepLayerGraphs");o(dpe,"assignOrder")});function gpe(t){var e=ZXe(t);Pe(t.graph().dummyChains,function(r){for(var i=t.node(r),n=i.edgeObj,a=QXe(t,e,n.v,n.w),s=a.path,l=a.lca,u=0,h=s[u],f=!0;r!==n.w;){if(i=t.node(r),f){for(;(h=s[u])!==l&&t.node(h).maxRanks||l>e[u].lim));for(h=u,u=i;(u=t.parent(u))!==h;)a.push(u);return{path:n.concat(a.reverse()),lca:h}}function ZXe(t){var e={},r=0;function i(n){var a=r;Pe(t.children(n),i),e[n]={low:a,lim:r++}}return o(i,"dfs"),Pe(t.children(),i),e}var ype=P(()=>{"use strict";nr();o(gpe,"parentDummyChains");o(QXe,"findPath");o(ZXe,"postorder")});function JXe(t,e){var r={};function i(n,a){var s=0,l=0,u=n.length,h=Na(a);return Pe(a,function(f,d){var p=tKe(t,f),m=p?t.node(p).order:u;(p||f===h)&&(Pe(a.slice(l,d+1),function(g){Pe(t.predecessors(g),function(y){var v=t.node(y),x=v.order;(xh)&&vpe(r,p,f)})})}o(i,"scan");function n(a,s){var l=-1,u,h=0;return Pe(s,function(f,d){if(t.node(f).dummy==="border"){var p=t.predecessors(f);p.length&&(u=t.node(p[0]).order,i(s,h,d,l,u),h=d,l=u)}i(s,h,s.length,u,a.length)}),s}return o(n,"visitLayer"),mi(e,n),r}function tKe(t,e){if(t.node(e).dummy)return qs(t.predecessors(e),function(r){return t.node(r).dummy})}function vpe(t,e,r){if(e>r){var i=e;e=r,r=i}Object.prototype.hasOwnProperty.call(t,e)||Object.defineProperty(t,e,{enumerable:!0,configurable:!0,value:{},writable:!0});var n=t[e];Object.defineProperty(n,r,{enumerable:!0,configurable:!0,value:!0,writable:!0})}function rKe(t,e,r){if(e>r){var i=e;e=r,r=i}return!!t[e]&&Object.prototype.hasOwnProperty.call(t[e],r)}function iKe(t,e,r,i){var n={},a={},s={};return Pe(e,function(l){Pe(l,function(u,h){n[u]=u,a[u]=u,s[u]=h})}),Pe(e,function(l){var u=-1;Pe(l,function(h){var f=i(h);if(f.length){f=Nu(f,function(y){return s[y]});for(var d=(f.length-1)/2,p=Math.floor(d),m=Math.ceil(d);p<=m;++p){var g=f[p];a[h]===h&&u{"use strict";nr();$l();Mu();o(JXe,"findType1Conflicts");o(eKe,"findType2Conflicts");o(tKe,"findOtherInnerSegmentNode");o(vpe,"addConflict");o(rKe,"hasConflict");o(iKe,"verticalAlignment");o(nKe,"horizontalCompaction");o(aKe,"buildBlockGraph");o(sKe,"findSmallestWidthAlignment");o(oKe,"alignCoordinates");o(lKe,"balance");o(xpe,"positionX");o(cKe,"sep");o(uKe,"width")});function Tpe(t){t=PE(t),hKe(t),uO(xpe(t),function(e,r){t.node(r).x=e})}function hKe(t){var e=kd(t),r=t.graph().ranksep,i=0;Pe(e,function(n){var a=So(ht(n,function(s){return t.node(s).height}));Pe(n,function(s){t.node(s).y=i+a/2}),i+=a+r})}var kpe=P(()=>{"use strict";nr();Mu();bpe();o(Tpe,"position");o(hKe,"positionY")});function Vb(t,e){var r=e&&e.debugTiming?mde:gde;r("layout",()=>{var i=r(" buildLayoutGraph",()=>kKe(t));r(" runLayout",()=>fKe(i,r)),r(" updateInputGraph",()=>dKe(t,i))})}function fKe(t,e){e(" makeSpaceForEdgeLabels",()=>CKe(t)),e(" removeSelfEdges",()=>NKe(t)),e(" acyclic",()=>lde(t)),e(" nestingGraph.run",()=>Hde(t)),e(" rank",()=>VO(PE(t))),e(" injectEdgeLabelProxies",()=>wKe(t)),e(" removeEmptyRanks",()=>dde(t)),e(" nestingGraph.cleanup",()=>jde(t)),e(" normalizeRanks",()=>fde(t)),e(" assignRankMinMax",()=>EKe(t)),e(" removeEdgeLabelProxies",()=>SKe(t)),e(" normalize.run",()=>Ede(t)),e(" parentDummyChains",()=>gpe(t)),e(" addBorderSegments",()=>vde(t)),e(" order",()=>ppe(t)),e(" insertSelfEdges",()=>IKe(t)),e(" adjustCoordinateSystem",()=>Tde(t)),e(" position",()=>Tpe(t)),e(" positionSelfEdges",()=>MKe(t)),e(" removeBorderNodes",()=>RKe(t)),e(" normalize.undo",()=>Sde(t)),e(" fixupEdgeLabelCoords",()=>DKe(t)),e(" undoCoordinateSystem",()=>kde(t)),e(" translateGraph",()=>AKe(t)),e(" assignNodeIntersects",()=>_Ke(t)),e(" reversePoints",()=>LKe(t)),e(" acyclic.undo",()=>cde(t))}function dKe(t,e){Pe(t.nodes(),function(r){var i=t.node(r),n=e.node(r);i&&(i.x=n.x,i.y=n.y,e.children(r).length&&(i.width=n.width,i.height=n.height))}),Pe(t.edges(),function(r){var i=t.edge(r),n=e.edge(r);i.points=n.points,Object.prototype.hasOwnProperty.call(n,"x")&&(i.x=n.x,i.y=n.y)}),t.graph().width=e.graph().width,t.graph().height=e.graph().height}function kKe(t){var e=new Ai({multigraph:!0,compound:!0}),r=HO(t.graph());return e.setGraph(sd({},mKe,UO(r,pKe),z0(r,gKe))),Pe(t.nodes(),function(i){var n=HO(t.node(i));e.setNode(i,xd(UO(n,yKe),vKe)),e.setParent(i,t.parent(i))}),Pe(t.edges(),function(i){var n=HO(t.edge(i));e.setEdge(i,sd({},bKe,UO(n,xKe),z0(n,TKe)))}),e}function CKe(t){var e=t.graph();e.ranksep/=2,Pe(t.edges(),function(r){var i=t.edge(r);i.minlen*=2,i.labelpos.toLowerCase()!=="c"&&(e.rankdir==="TB"||e.rankdir==="BT"?i.width+=i.labeloffset:i.height+=i.labeloffset)})}function wKe(t){Pe(t.edges(),function(e){var r=t.edge(e);if(r.width&&r.height){var i=t.node(e.v),n=t.node(e.w),a={rank:(n.rank-i.rank)/2+i.rank,e};Iu(t,"edge-proxy",a,"_ep")}})}function EKe(t){var e=0;Pe(t.nodes(),function(r){var i=t.node(r);i.borderTop&&(i.minRank=t.node(i.borderTop).rank,i.maxRank=t.node(i.borderBottom).rank,e=So(e,i.maxRank))}),t.graph().maxRank=e}function SKe(t){Pe(t.nodes(),function(e){var r=t.node(e);r.dummy==="edge-proxy"&&(t.edge(r.e).labelRank=r.rank,t.removeNode(e))})}function AKe(t){var e=Number.POSITIVE_INFINITY,r=0,i=Number.POSITIVE_INFINITY,n=0,a=t.graph(),s=a.marginx||0,l=a.marginy||0;function u(h){var f=h.x,d=h.y,p=h.width,m=h.height;e=Math.min(e,f-p/2),r=Math.max(r,f+p/2),i=Math.min(i,d-m/2),n=Math.max(n,d+m/2)}o(u,"getExtremes"),Pe(t.nodes(),function(h){u(t.node(h))}),Pe(t.edges(),function(h){var f=t.edge(h);Object.prototype.hasOwnProperty.call(f,"x")&&u(f)}),e-=s,i-=l,Pe(t.nodes(),function(h){var f=t.node(h);f.x-=e,f.y-=i}),Pe(t.edges(),function(h){var f=t.edge(h);Pe(f.points,function(d){d.x-=e,d.y-=i}),Object.prototype.hasOwnProperty.call(f,"x")&&(f.x-=e),Object.prototype.hasOwnProperty.call(f,"y")&&(f.y-=i)}),a.width=r-e+s,a.height=n-i+l}function _Ke(t){Pe(t.edges(),function(e){var r=t.edge(e),i=t.node(e.v),n=t.node(e.w),a,s;r.points?(a=r.points[0],s=r.points[r.points.length-1]):(r.points=[],a=n,s=i),r.points.unshift(EO(i,a)),r.points.push(EO(n,s))})}function DKe(t){Pe(t.edges(),function(e){var r=t.edge(e);if(Object.prototype.hasOwnProperty.call(r,"x"))switch((r.labelpos==="l"||r.labelpos==="r")&&(r.width-=r.labeloffset),r.labelpos){case"l":r.x-=r.width/2+r.labeloffset;break;case"r":r.x+=r.width/2+r.labeloffset;break}})}function LKe(t){Pe(t.edges(),function(e){var r=t.edge(e);r.reversed&&r.points.reverse()})}function RKe(t){Pe(t.nodes(),function(e){if(t.children(e).length){var r=t.node(e),i=t.node(r.borderTop),n=t.node(r.borderBottom),a=t.node(Na(r.borderLeft)),s=t.node(Na(r.borderRight));r.width=Math.abs(s.x-a.x),r.height=Math.abs(n.y-i.y),r.x=a.x+r.width/2,r.y=i.y+r.height/2}}),Pe(t.nodes(),function(e){t.node(e).dummy==="border"&&t.removeNode(e)})}function NKe(t){Pe(t.edges(),function(e){if(e.v===e.w){var r=t.node(e.v);r.selfEdges||(r.selfEdges=[]),r.selfEdges.push({e,label:t.edge(e)}),t.removeEdge(e)}})}function IKe(t){var e=kd(t);Pe(e,function(r){var i=0;Pe(r,function(n,a){var s=t.node(n);s.order=a+i,Pe(s.selfEdges,function(l){Iu(t,"selfedge",{width:l.label.width,height:l.label.height,rank:s.rank,order:a+ ++i,e:l.e,label:l.label},"_se")}),delete s.selfEdges})})}function MKe(t){Pe(t.nodes(),function(e){var r=t.node(e);if(r.dummy==="selfedge"){var i=t.node(r.e.v),n=i.x+i.width/2,a=i.y,s=r.x-n,l=i.height/2;t.setEdge(r.e,r.label),t.removeNode(e),r.label.points=[{x:n+2*s/3,y:a-l},{x:n+5*s/6,y:a-l},{x:n+s,y:a},{x:n+5*s/6,y:a+l},{x:n+2*s/3,y:a+l}],r.label.x=r.x,r.label.y=r.y}})}function UO(t,e){return F0(z0(t,e),Number)}function HO(t){var e={};return Pe(t,function(r,i){e[i.toLowerCase()]=r}),e}var pKe,mKe,gKe,yKe,vKe,xKe,bKe,TKe,Cpe=P(()=>{"use strict";nr();$l();xde();wde();wO();LO();qO();Xde();mpe();ype();kpe();Mu();o(Vb,"layout");o(fKe,"runLayout");o(dKe,"updateInputGraph");pKe=["nodesep","edgesep","ranksep","marginx","marginy"],mKe={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},gKe=["acyclicer","ranker","rankdir","align"],yKe=["width","height"],vKe={width:0,height:0},xKe=["minlen","weight","width","height","labeloffset"],bKe={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},TKe=["labelpos"];o(kKe,"buildLayoutGraph");o(CKe,"makeSpaceForEdgeLabels");o(wKe,"injectEdgeLabelProxies");o(EKe,"assignRankMinMax");o(SKe,"removeEdgeLabelProxies");o(AKe,"translateGraph");o(_Ke,"assignNodeIntersects");o(DKe,"fixupEdgeLabelCoords");o(LKe,"reversePointsForReversedEdges");o(RKe,"removeBorderNodes");o(NKe,"removeSelfEdges");o(IKe,"insertSelfEdges");o(MKe,"positionSelfEdges");o(UO,"selectNumberAttrs");o(HO,"canonicalize")});var YO=P(()=>{"use strict";wO();Cpe();LO();qO()});function zl(t){var e={options:{directed:t.isDirected(),multigraph:t.isMultigraph(),compound:t.isCompound()},nodes:OKe(t),edges:PKe(t)};return Br(t.graph())||(e.value=Si(t.graph())),e}function OKe(t){return ht(t.nodes(),function(e){var r=t.node(e),i=t.parent(e),n={v:e};return Br(r)||(n.value=r),Br(i)||(n.parent=i),n})}function PKe(t){return ht(t.edges(),function(e){var r=t.edge(e),i={v:e.v,w:e.w};return Br(e.name)||(i.name=e.name),Br(r)||(i.value=r),i})}var jO=P(()=>{"use strict";nr();IE();o(zl,"write");o(OKe,"writeNodes");o(PKe,"writeEdges")});var Wr,W0,Spe,Ape,zE,BKe,_pe,Dpe,FKe,J1,Epe,Lpe,Rpe,Npe,Ipe,Mpe=P(()=>{"use strict";bt();$l();jO();Wr=new Map,W0=new Map,Spe=new Map,Ape=o(()=>{W0.clear(),Spe.clear(),Wr.clear()},"clear"),zE=o((t,e)=>{let r=W0.get(e)||[];return Q.trace("In isDescendant",e," ",t," = ",r.includes(t)),r.includes(t)},"isDescendant"),BKe=o((t,e)=>{let r=W0.get(e)||[];return Q.info("Descendants of ",e," is ",r),Q.info("Edge is ",t),t.v===e||t.w===e?!1:r?r.includes(t.v)||zE(t.v,e)||zE(t.w,e)||r.includes(t.w):(Q.debug("Tilt, ",e,",not in descendants"),!1)},"edgeInCluster"),_pe=o((t,e,r,i)=>{Q.warn("Copying children of ",t,"root",i,"data",e.node(t),i);let n=e.children(t)||[];t!==i&&n.push(t),Q.warn("Copying (nodes) clusterId",t,"nodes",n),n.forEach(a=>{if(e.children(a).length>0)_pe(a,e,r,i);else{let s=e.node(a);Q.info("cp ",a," to ",i," with parent ",t),r.setNode(a,s),i!==e.parent(a)&&(Q.warn("Setting parent",a,e.parent(a)),r.setParent(a,e.parent(a))),t!==i&&a!==t?(Q.debug("Setting parent",a,t),r.setParent(a,t)):(Q.info("In copy ",t,"root",i,"data",e.node(t),i),Q.debug("Not Setting parent for node=",a,"cluster!==rootId",t!==i,"node!==clusterId",a!==t));let l=e.edges(a);Q.debug("Copying Edges",l),l.forEach(u=>{Q.info("Edge",u);let h=e.edge(u.v,u.w,u.name);Q.info("Edge data",h,i);try{BKe(u,i)?(Q.info("Copying as ",u.v,u.w,h,u.name),r.setEdge(u.v,u.w,h,u.name),Q.info("newGraph edges ",r.edges(),r.edge(r.edges()[0]))):Q.info("Skipping copy of edge ",u.v,"-->",u.w," rootId: ",i," clusterId:",t)}catch(f){Q.error(f)}})}Q.debug("Removing node",a),e.removeNode(a)})},"copy"),Dpe=o((t,e)=>{let r=e.children(t),i=[...r];for(let n of r)Spe.set(n,t),i=[...i,...Dpe(n,e)];return i},"extractDescendants"),FKe=o((t,e,r)=>{let i=t.edges().filter(u=>u.v===e||u.w===e),n=t.edges().filter(u=>u.v===r||u.w===r),a=i.map(u=>({v:u.v===e?r:u.v,w:u.w===e?e:u.w})),s=n.map(u=>({v:u.v,w:u.w}));return a.filter(u=>s.some(h=>u.v===h.v&&u.w===h.w))},"findCommonEdges"),J1=o((t,e,r)=>{let i=e.children(t);if(Q.trace("Searching children of id ",t,i),i.length<1)return t;let n;for(let a of i){let s=J1(a,e,r),l=FKe(e,r,s);if(s)if(l.length>0)n=s;else return s}return n},"findNonClusterChild"),Epe=o(t=>!Wr.has(t)||!Wr.get(t).externalConnections?t:Wr.has(t)?Wr.get(t).id:t,"getAnchorId"),Lpe=o((t,e)=>{if(!t||e>10){Q.debug("Opting out, no graph ");return}else Q.debug("Opting in, graph ");t.nodes().forEach(function(r){t.children(r).length>0&&(Q.warn("Cluster identified",r," Replacement id in edges: ",J1(r,t,r)),W0.set(r,Dpe(r,t)),Wr.set(r,{id:J1(r,t,r),clusterData:t.node(r)}))}),t.nodes().forEach(function(r){let i=t.children(r),n=t.edges();i.length>0?(Q.debug("Cluster identified",r,W0),n.forEach(a=>{let s=zE(a.v,r),l=zE(a.w,r);s^l&&(Q.warn("Edge: ",a," leaves cluster ",r),Q.warn("Descendants of XXX ",r,": ",W0.get(r)),Wr.get(r).externalConnections=!0)})):Q.debug("Not a cluster ",r,W0)});for(let r of Wr.keys()){let i=Wr.get(r).id,n=t.parent(i);n!==r&&Wr.has(n)&&!Wr.get(n).externalConnections&&(Wr.get(r).id=n)}t.edges().forEach(function(r){let i=t.edge(r);Q.warn("Edge "+r.v+" -> "+r.w+": "+JSON.stringify(r)),Q.warn("Edge "+r.v+" -> "+r.w+": "+JSON.stringify(t.edge(r)));let n=r.v,a=r.w;if(Q.warn("Fix XXX",Wr,"ids:",r.v,r.w,"Translating: ",Wr.get(r.v)," --- ",Wr.get(r.w)),Wr.get(r.v)||Wr.get(r.w)){if(Q.warn("Fixing and trying - removing XXX",r.v,r.w,r.name),n=Epe(r.v),a=Epe(r.w),t.removeEdge(r.v,r.w,r.name),n!==r.v){let s=t.parent(n);Wr.get(s).externalConnections=!0,i.fromCluster=r.v}if(a!==r.w){let s=t.parent(a);Wr.get(s).externalConnections=!0,i.toCluster=r.w}Q.warn("Fix Replacing with XXX",n,a,r.name),t.setEdge(n,a,i,r.name)}}),Q.warn("Adjusted Graph",zl(t)),Rpe(t,0),Q.trace(Wr)},"adjustClustersAndEdges"),Rpe=o((t,e)=>{if(Q.warn("extractor - ",e,zl(t),t.children("D")),e>10){Q.error("Bailing out");return}let r=t.nodes(),i=!1;for(let n of r){let a=t.children(n);i=i||a.length>0}if(!i){Q.debug("Done, no node has children",t.nodes());return}Q.debug("Nodes = ",r,e);for(let n of r)if(Q.debug("Extracting node",n,Wr,Wr.has(n)&&!Wr.get(n).externalConnections,!t.parent(n),t.node(n),t.children("D")," Depth ",e),!Wr.has(n))Q.debug("Not a cluster",n,e);else if(!Wr.get(n).externalConnections&&t.children(n)&&t.children(n).length>0){Q.warn("Cluster without external connections, without a parent and with children",n,e);let s=t.graph().rankdir==="TB"?"LR":"TB";Wr.get(n)?.clusterData?.dir&&(s=Wr.get(n).clusterData.dir,Q.warn("Fixing dir",Wr.get(n).clusterData.dir,s));let l=new Ai({multigraph:!0,compound:!0}).setGraph({rankdir:s,nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}});Q.warn("Old graph before copy",zl(t)),_pe(n,t,l,n),t.setNode(n,{clusterNode:!0,id:n,clusterData:Wr.get(n).clusterData,label:Wr.get(n).label,graph:l}),Q.warn("New graph after copy node: (",n,")",zl(l)),Q.debug("Old graph after copy",zl(t))}else Q.warn("Cluster ** ",n," **not meeting the criteria !externalConnections:",!Wr.get(n).externalConnections," no parent: ",!t.parent(n)," children ",t.children(n)&&t.children(n).length>0,t.children("D"),e),Q.debug(Wr);r=t.nodes(),Q.warn("New list of nodes",r);for(let n of r){let a=t.node(n);Q.warn(" Now next level",n,a),a?.clusterNode&&Rpe(a.graph,e+1)}},"extractor"),Npe=o((t,e)=>{if(e.length===0)return[];let r=Object.assign([],e);return e.forEach(i=>{let n=t.children(i),a=Npe(t,n);r=[...r,...a]}),r},"sorter"),Ipe=o(t=>Npe(t,t.children()),"sortNodesByHierarchy")});var Ppe={};ur(Ppe,{render:()=>$Ke});var Ope,$Ke,Bpe=P(()=>{"use strict";YO();jO();$l();NM();zt();Mpe();B5();A5();RM();bt();Nb();Ut();Ope=o(async(t,e,r,i,n,a)=>{Q.warn("Graph in recursive render:XAX",zl(e),n);let s=e.graph().rankdir;Q.trace("Dir in recursive render - dir:",s);let l=t.insert("g").attr("class","root");e.nodes()?Q.info("Recursive render XXX",e.nodes()):Q.info("No nodes found for",e),e.edges().length>0&&Q.info("Recursive edges",e.edge(e.edges()[0]));let u=l.insert("g").attr("class","clusters"),h=l.insert("g").attr("class","edgePaths"),f=l.insert("g").attr("class","edgeLabels"),d=l.insert("g").attr("class","nodes");await Promise.all(e.nodes().map(async function(y){let v=e.node(y);if(n!==void 0){let x=JSON.parse(JSON.stringify(n.clusterData));Q.trace(`Setting data for parent cluster XXX + Node.id = `,y,` + data=`,x.height,` +Parent cluster`,n.height),e.setNode(n.id,x),e.parent(y)||(Q.trace("Setting parent",y,n.id),e.setParent(y,n.id,x))}if(Q.info("(Insert) Node XXX"+y+": "+JSON.stringify(e.node(y))),v?.clusterNode){Q.info("Cluster identified XBX",y,v.width,e.node(y));let{ranksep:x,nodesep:b}=e.graph();v.graph.setGraph({...v.graph.graph(),ranksep:x+25,nodesep:b});let T=await Ope(d,v.graph,r,i,e.node(y),a),w=T.elem;at(v,w),v.diff=T.diff||0,Q.info("New compound node after recursive render XAX",y,"width",v.width,"height",v.height),ece(w,v)}else e.children(y).length>0?(Q.trace("Cluster - the non recursive path XBX",y,v.id,v,v.width,"Graph:",e),Q.trace(J1(v.id,e)),Wr.set(v.id,{id:J1(v.id,e),node:v})):(Q.trace("Node - the non recursive path XAX",y,d,e.node(y),s),await I1(d,e.node(y),{config:a,dir:s}))})),await o(async()=>{let y=e.edges().map(async function(v){let x=e.edge(v.v,v.w,v.name);Q.info("Edge "+v.v+" -> "+v.w+": "+JSON.stringify(v)),Q.info("Edge "+v.v+" -> "+v.w+": ",v," ",JSON.stringify(e.edge(v))),Q.info("Fix",Wr,"ids:",v.v,v.w,"Translating: ",Wr.get(v.v),Wr.get(v.w)),await N5(f,x)});await Promise.all(y)},"processEdges")(),Q.info("Graph before layout:",JSON.stringify(zl(e))),Q.info("############################################# XXX"),Q.info("### Layout ### XXX"),Q.info("############################################# XXX"),Vb(e),Q.info("Graph after layout:",JSON.stringify(zl(e)));let m=0,{subGraphTitleTotalMargin:g}=Uh(a);return await Promise.all(Ipe(e).map(async function(y){let v=e.node(y);if(Q.info("Position XBX => "+y+": ("+v.x,","+v.y,") width: ",v.width," height: ",v.height),v?.clusterNode)v.y+=g,Q.info("A tainted cluster node XBX1",y,v.id,v.width,v.height,v.x,v.y,e.parent(y)),Wr.get(v.id).node=v,Mb(v);else if(e.children(y).length>0){Q.info("A pure cluster node XBX1",y,v.id,v.x,v.y,v.width,v.height,e.parent(y)),v.height+=g,e.node(v.parentId);let x=v?.padding/2||0,b=v?.labelBBox?.height||0,T=b-x||0;Q.debug("OffsetY",T,"labelHeight",b,"halfPadding",x),await N1(u,v),Wr.get(v.id).node=v}else{let x=e.node(v.parentId);v.y+=g/2,Q.info("A regular node XBX1 - using the padding",v.id,"parent",v.parentId,v.width,v.height,v.x,v.y,"offsetY",v.offsetY,"parent",x,x?.offsetY,v),Mb(v)}})),e.edges().forEach(function(y){let v=e.edge(y);Q.info("Edge "+y.v+" -> "+y.w+": "+JSON.stringify(v),v),v.points.forEach(w=>w.y+=g/2);let x=e.node(y.v);var b=e.node(y.w);let T=M5(h,v,Wr,r,x,b,i);I5(v,T)}),e.nodes().forEach(function(y){let v=e.node(y);Q.info(y,v.type,v.diff),v.isGroup&&(m=v.diff)}),Q.warn("Returning from recursive render XAX",l,m),{elem:l,diff:m}},"recursiveRender"),$Ke=o(async(t,e)=>{let r=new Ai({multigraph:!0,compound:!0}).setGraph({rankdir:t.direction,nodesep:t.config?.nodeSpacing||t.config?.flowchart?.nodeSpacing||t.nodeSpacing,ranksep:t.config?.rankSpacing||t.config?.flowchart?.rankSpacing||t.rankSpacing,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}}),i=e.select("g");O5(i,t.markers,t.type,t.diagramId),tce(),Jle(),Hle(),Ape(),t.nodes.forEach(a=>{r.setNode(a.id,{...a}),a.parentId&&r.setParent(a.id,a.parentId)}),Q.debug("Edges:",t.edges),t.edges.forEach(a=>{if(a.start===a.end){let s=a.start,l=s+"---"+s+"---1",u=s+"---"+s+"---2",h=r.node(s);r.setNode(l,{domId:l,id:l,parentId:h.parentId,labelStyle:"",label:"",padding:0,shape:"labelRect",style:"",width:10,height:10}),r.setParent(l,h.parentId),r.setNode(u,{domId:u,id:u,parentId:h.parentId,labelStyle:"",padding:0,shape:"labelRect",label:"",style:"",width:10,height:10}),r.setParent(u,h.parentId);let f=structuredClone(a),d=structuredClone(a),p=structuredClone(a);f.label="",f.arrowTypeEnd="none",f.id=s+"-cyclic-special-1",d.arrowTypeStart="none",d.arrowTypeEnd="none",d.id=s+"-cyclic-special-mid",p.label="",h.isGroup&&(f.fromCluster=s,p.toCluster=s),p.id=s+"-cyclic-special-2",p.arrowTypeStart="none",r.setEdge(s,l,f,s+"-cyclic-special-0"),r.setEdge(l,u,d,s+"-cyclic-special-1"),r.setEdge(u,s,p,s+"-cyct.length)&&(e=t.length);for(var r=0,i=Array(e);r=t.length?{done:!0}:{done:!1,value:t[i++]}},"n"),e:o(function(u){throw u},"e"),f:n}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var a,s=!0,l=!1;return{s:o(function(){r=r.call(t)},"s"),n:o(function(){var u=r.next();return s=u.done,u},"n"),e:o(function(u){l=!0,a=u},"e"),f:o(function(){try{s||r.return==null||r.return()}finally{if(l)throw a}},"f")}}function fge(t,e,r){return(e=dge(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function qKe(t){if(typeof Symbol<"u"&&t[Symbol.iterator]!=null||t["@@iterator"]!=null)return Array.from(t)}function WKe(t,e){var r=t==null?null:typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(r!=null){var i,n,a,s,l=[],u=!0,h=!1;try{if(a=(r=r.call(t)).next,e===0){if(Object(r)!==r)return;u=!1}else for(;!(u=(i=a.call(r)).done)&&(l.push(i.value),l.length!==e);u=!0);}catch(f){h=!0,n=f}finally{try{if(!u&&r.return!=null&&(s=r.return(),Object(s)!==s))return}finally{if(h)throw n}}return l}}function UKe(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function HKe(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function ea(t,e){return zKe(t)||WKe(t,e)||UB(t,e)||UKe()}function hS(t){return GKe(t)||qKe(t)||UB(t)||HKe()}function YKe(t,e){if(typeof t!="object"||!t)return t;var r=t[Symbol.toPrimitive];if(r!==void 0){var i=r.call(t,e);if(typeof i!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}function dge(t){var e=YKe(t,"string");return typeof e=="symbol"?e:e+""}function pa(t){"@babel/helpers - typeof";return pa=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},pa(t)}function UB(t,e){if(t){if(typeof t=="string")return EB(t,e);var r={}.toString.call(t).slice(8,-1);return r==="Object"&&t.constructor&&(r=t.constructor.name),r==="Map"||r==="Set"?Array.from(t):r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?EB(t,e):void 0}}function pT(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}function mT(){if(zpe)return XO;zpe=1;function t(e){var r=typeof e;return e!=null&&(r=="object"||r=="function")}return o(t,"isObject"),XO=t,XO}function gQe(){if(Gpe)return KO;Gpe=1;var t=typeof GE=="object"&&GE&&GE.Object===Object&&GE;return KO=t,KO}function SS(){if(Vpe)return QO;Vpe=1;var t=gQe(),e=typeof self=="object"&&self&&self.Object===Object&&self,r=t||e||Function("return this")();return QO=r,QO}function yQe(){if(qpe)return ZO;qpe=1;var t=SS(),e=o(function(){return t.Date.now()},"now");return ZO=e,ZO}function vQe(){if(Wpe)return JO;Wpe=1;var t=/\s/;function e(r){for(var i=r.length;i--&&t.test(r.charAt(i)););return i}return o(e,"trimmedEndIndex"),JO=e,JO}function xQe(){if(Upe)return eP;Upe=1;var t=vQe(),e=/^\s+/;function r(i){return i&&i.slice(0,t(i)+1).replace(e,"")}return o(r,"baseTrim"),eP=r,eP}function jB(){if(Hpe)return tP;Hpe=1;var t=SS(),e=t.Symbol;return tP=e,tP}function bQe(){if(Ype)return rP;Ype=1;var t=jB(),e=Object.prototype,r=e.hasOwnProperty,i=e.toString,n=t?t.toStringTag:void 0;function a(s){var l=r.call(s,n),u=s[n];try{s[n]=void 0;var h=!0}catch{}var f=i.call(s);return h&&(l?s[n]=u:delete s[n]),f}return o(a,"getRawTag"),rP=a,rP}function TQe(){if(jpe)return iP;jpe=1;var t=Object.prototype,e=t.toString;function r(i){return e.call(i)}return o(r,"objectToString"),iP=r,iP}function kge(){if(Xpe)return nP;Xpe=1;var t=jB(),e=bQe(),r=TQe(),i="[object Null]",n="[object Undefined]",a=t?t.toStringTag:void 0;function s(l){return l==null?l===void 0?n:i:a&&a in Object(l)?e(l):r(l)}return o(s,"baseGetTag"),nP=s,nP}function kQe(){if(Kpe)return aP;Kpe=1;function t(e){return e!=null&&typeof e=="object"}return o(t,"isObjectLike"),aP=t,aP}function gT(){if(Qpe)return sP;Qpe=1;var t=kge(),e=kQe(),r="[object Symbol]";function i(n){return typeof n=="symbol"||e(n)&&t(n)==r}return o(i,"isSymbol"),sP=i,sP}function CQe(){if(Zpe)return oP;Zpe=1;var t=xQe(),e=mT(),r=gT(),i=NaN,n=/^[-+]0x[0-9a-f]+$/i,a=/^0b[01]+$/i,s=/^0o[0-7]+$/i,l=parseInt;function u(h){if(typeof h=="number")return h;if(r(h))return i;if(e(h)){var f=typeof h.valueOf=="function"?h.valueOf():h;h=e(f)?f+"":f}if(typeof h!="string")return h===0?h:+h;h=t(h);var d=a.test(h);return d||s.test(h)?l(h.slice(2),d?2:8):n.test(h)?i:+h}return o(u,"toNumber"),oP=u,oP}function wQe(){if(Jpe)return lP;Jpe=1;var t=mT(),e=yQe(),r=CQe(),i="Expected a function",n=Math.max,a=Math.min;function s(l,u,h){var f,d,p,m,g,y,v=0,x=!1,b=!1,T=!0;if(typeof l!="function")throw new TypeError(i);u=r(u)||0,t(h)&&(x=!!h.leading,b="maxWait"in h,p=b?n(r(h.maxWait)||0,u):p,T="trailing"in h?!!h.trailing:T);function w(_){var D=f,N=d;return f=d=void 0,v=_,m=l.apply(N,D),m}o(w,"invokeFunc");function k(_){return v=_,g=setTimeout(S,u),x?w(_):m}o(k,"leadingEdge");function C(_){var D=_-y,N=_-v,R=u-D;return b?a(R,p-N):R}o(C,"remainingWait");function E(_){var D=_-y,N=_-v;return y===void 0||D>=u||D<0||b&&N>=p}o(E,"shouldInvoke");function S(){var _=e();if(E(_))return L(_);g=setTimeout(S,C(_))}o(S,"timerExpired");function L(_){return g=void 0,T&&f?w(_):(f=d=void 0,m)}o(L,"trailingEdge");function M(){g!==void 0&&clearTimeout(g),v=0,f=y=d=g=void 0}o(M,"cancel");function I(){return g===void 0?m:L(e())}o(I,"flush");function A(){var _=e(),D=E(_);if(f=arguments,d=this,y=_,D){if(g===void 0)return k(y);if(b)return clearTimeout(g),g=setTimeout(S,u),w(y)}return g===void 0&&(g=setTimeout(S,u)),m}return o(A,"debounced"),A.cancel=M,A.flush=I,A}return o(s,"debounce"),lP=s,lP}function DQe(t,e,r,i,n){var a=n*Math.PI/180,s=Math.cos(a)*(t-r)-Math.sin(a)*(e-i)+r,l=Math.sin(a)*(t-r)+Math.cos(a)*(e-i)+i;return{x:s,y:l}}function RQe(t,e,r){if(r===0)return t;var i=(e.x1+e.x2)/2,n=(e.y1+e.y2)/2,a=e.w/e.h,s=1/a,l=DQe(t.x,t.y,i,n,r),u=LQe(l.x,l.y,i,n,a,s);return{x:u.x,y:u.y}}function VQe(){return n0e||(n0e=1,(function(t,e){(function(){var r,i,n,a,s,l,u,h,f,d,p,m,g,y,v;n=Math.floor,d=Math.min,i=o(function(x,b){return xb?1:0},"defaultCmp"),f=o(function(x,b,T,w,k){var C;if(T==null&&(T=0),k==null&&(k=i),T<0)throw new Error("lo must be non-negative");for(w==null&&(w=x.length);TM;0<=M?L++:L--)S.push(L);return S}).apply(this).reverse(),E=[],w=0,k=C.length;wI;0<=I?++S:--S)A.push(s(x,T));return A},"nsmallest"),y=o(function(x,b,T,w){var k,C,E;for(w==null&&(w=i),k=x[T];T>b;){if(E=T-1>>1,C=x[E],w(k,C)<0){x[T]=C,T=E;continue}break}return x[T]=k},"_siftdown"),v=o(function(x,b,T){var w,k,C,E,S;for(T==null&&(T=i),k=x.length,S=b,C=x[b],w=2*b+1;w-1}return o(e,"listCacheHas"),BP=e,BP}function OJe(){if(U0e)return FP;U0e=1;var t=NS();function e(r,i){var n=this.__data__,a=t(n,r);return a<0?(++this.size,n.push([r,i])):n[a][1]=i,this}return o(e,"listCacheSet"),FP=e,FP}function PJe(){if(H0e)return $P;H0e=1;var t=RJe(),e=NJe(),r=IJe(),i=MJe(),n=OJe();function a(s){var l=-1,u=s==null?0:s.length;for(this.clear();++l-1&&i%1==0&&i0;){var f=n.shift();e(f),a.add(f.id()),l&&i(n,a,f)}return t}function Jge(t,e,r){if(r.isParent())for(var i=r._private.children,n=0;n0&&arguments[0]!==void 0?arguments[0]:jet,e=arguments.length>1?arguments[1]:void 0,r=0;r0?A=D:I=D;while(Math.abs(_)>s&&++N=a?b(M,N):R===0?N:w(M,I,I+h)}o(k,"getTForX");var C=!1;function E(){C=!0,(t!==e||r!==i)&&T()}o(E,"precompute");var S=o(function(I){return C||E(),t===e&&r===i?I:I===0?0:I===1?1:v(k(I),e,i)},"f");S.getControlPoints=function(){return[{x:t,y:e},{x:r,y:i}]};var L="generateBezier("+[t,e,r,i]+")";return S.toString=function(){return L},S}function Ome(t,e,r,i,n){if(i===1||e===r)return r;var a=n(e,r,i);return t==null||((t.roundValue||t.color)&&(a=Math.round(a)),t.min!==void 0&&(a=Math.max(a,t.min)),t.max!==void 0&&(a=Math.min(a,t.max))),a}function Pme(t,e){return t.pfValue!=null||t.value!=null?t.pfValue!=null&&(e==null||e.type.units!=="%")?t.pfValue:t.value:t}function ry(t,e,r,i,n){var a=n!=null?n.type:null;r<0?r=0:r>1&&(r=1);var s=Pme(t,n),l=Pme(e,n);if(Mt(s)&&Mt(l))return Ome(a,s,l,r,i);if(qi(s)&&qi(l)){for(var u=[],h=0;h0?(m==="spring"&&g.push(s.duration),s.easingImpl=aS[m].apply(null,g)):s.easingImpl=aS[m]}var y=s.easingImpl,v;if(s.duration===0?v=1:v=(r-u)/s.duration,s.applying&&(v=s.progress),v<0?v=0:v>1&&(v=1),s.delay==null){var x=s.startPosition,b=s.position;if(b&&n&&!t.locked()){var T={};Hb(x.x,b.x)&&(T.x=ry(x.x,b.x,v,y)),Hb(x.y,b.y)&&(T.y=ry(x.y,b.y,v,y)),t.position(T)}var w=s.startPan,k=s.pan,C=a.pan,E=k!=null&&i;E&&(Hb(w.x,k.x)&&(C.x=ry(w.x,k.x,v,y)),Hb(w.y,k.y)&&(C.y=ry(w.y,k.y,v,y)),t.emit("pan"));var S=s.startZoom,L=s.zoom,M=L!=null&&i;M&&(Hb(S,L)&&(a.zoom=aT(a.minZoom,ry(S,L,v,y),a.maxZoom)),t.emit("zoom")),(E||M)&&t.emit("viewport");var I=s.style;if(I&&I.length>0&&n){for(var A=0;A=0;E--){var S=C[E];S()}C.splice(0,C.length)},"callbacks"),b=m.length-1;b>=0;b--){var T=m[b],w=T._private;if(w.stopped){m.splice(b,1),w.hooked=!1,w.playing=!1,w.started=!1,x(w.frames);continue}!w.playing&&!w.applying||(w.playing&&w.applying&&(w.applying=!1),w.started||ltt(f,T,t),ott(f,T,t,d),w.applying&&(w.applying=!1),x(w.frames),w.step!=null&&w.step(t),T.completed()&&(m.splice(b,1),w.hooked=!1,w.playing=!1,w.started=!1,x(w.completes)),y=!0)}return!d&&m.length===0&&g.length===0&&i.push(f),y}o(n,"stepOne");for(var a=!1,s=0;s0?e.notify("draw",r):e.notify("draw")),r.unmerge(i),e.emit("step")}function y1e(t){this.options=yr({},gtt,ytt,t)}function v1e(t){this.options=yr({},vtt,t)}function x1e(t){this.options=yr({},xtt,t)}function zS(t){this.options=yr({},btt,t),this.options.layout=this;var e=this.options.eles.nodes(),r=this.options.eles.edges(),i=r.filter(function(n){var a=n.source().data("id"),s=n.target().data("id"),l=e.some(function(h){return h.data("id")===a}),u=e.some(function(h){return h.data("id")===s});return!l||!u});this.options.eles=this.options.eles.not(i)}function C1e(t){this.options=yr({},Ott,t)}function uF(t){this.options=yr({},Ptt,t)}function w1e(t){this.options=yr({},Btt,t)}function E1e(t){this.options=yr({},Ftt,t)}function S1e(t){this.options=t,this.notifications=0}function D1e(t,e){e.radius===0?t.lineTo(e.cx,e.cy):t.arc(e.cx,e.cy,e.radius,e.startAngle,e.endAngle,e.counterClockwise)}function fF(t,e,r,i){var n=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0;return i===0||e.radius===0?{cx:e.x,cy:e.y,radius:0,startX:e.x,startY:e.y,stopX:e.x,stopY:e.y,startAngle:void 0,endAngle:void 0,counterClockwise:void 0}:(Gtt(t,e,r,i,n),{cx:PB,cy:BB,radius:X0,startX:A1e,startY:_1e,stopX:FB,stopY:$B,startAngle:Bu.ang+Math.PI/2*Q0,endAngle:Gl.ang-Math.PI/2*Q0,counterClockwise:lS})}function L1e(t){var e=[];if(t!=null){for(var r=0;r5&&arguments[5]!==void 0?arguments[5]:5,s=Math.min(a,i/2,n/2);t.beginPath(),t.moveTo(e+s,r),t.lineTo(e+i-s,r),t.quadraticCurveTo(e+i,r,e+i,r+s),t.lineTo(e+i,r+n-s),t.quadraticCurveTo(e+i,r+n,e+i-s,r+n),t.lineTo(e+s,r+n),t.quadraticCurveTo(e,r+n,e,r+n-s),t.lineTo(e,r+s),t.quadraticCurveTo(e,r,e+s,r),t.closePath()}function ige(t,e,r){var i=t.createShader(e);if(t.shaderSource(i,r),t.compileShader(i),!t.getShaderParameter(i,t.COMPILE_STATUS))throw new Error(t.getShaderInfoLog(i));return i}function Lrt(t,e,r){var i=ige(t,t.VERTEX_SHADER,e),n=ige(t,t.FRAGMENT_SHADER,r),a=t.createProgram();if(t.attachShader(a,i),t.attachShader(a,n),t.linkProgram(a),!t.getProgramParameter(a,t.LINK_STATUS))throw new Error("Could not initialize shaders");return a}function Rrt(t,e,r){r===void 0&&(r=e);var i=t.makeOffscreenCanvas(e,r),n=i.context=i.getContext("2d");return i.clear=function(){return n.clearRect(0,0,i.width,i.height)},i.clear(),i}function mF(t){var e=t.pixelRatio,r=t.cy.zoom(),i=t.cy.pan();return{zoom:r*e,pan:{x:i.x*e,y:i.y*e}}}function Nrt(t){var e=t.pixelRatio,r=t.cy.zoom();return r*e}function Irt(t,e,r,i,n){var a=i*r+e.x,s=n*r+e.y;return s=Math.round(t.canvasHeight-s),[a,s]}function Mrt(t){return t.pstyle("background-fill").value!=="solid"||t.pstyle("background-image").strValue!=="none"?!1:t.pstyle("border-width").value===0||t.pstyle("border-opacity").value===0?!0:t.pstyle("border-style").value==="solid"}function Ort(t,e){if(t.length!==e.length)return!1;for(var r=0;r>0&255)/255,r[1]=(t>>8&255)/255,r[2]=(t>>16&255)/255,r[3]=(t>>24&255)/255,r}function Prt(t){return t[0]+(t[1]<<8)+(t[2]<<16)+(t[3]<<24)}function Brt(t,e){var r=t.createTexture();return r.buffer=function(i){t.bindTexture(t.TEXTURE_2D,r),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR_MIPMAP_NEAREST),t.pixelStorei(t.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,i),t.generateMipmap(t.TEXTURE_2D),t.bindTexture(t.TEXTURE_2D,null)},r.deleteTexture=function(){t.deleteTexture(r)},r}function q1e(t,e){switch(e){case"float":return[1,t.FLOAT,4];case"vec2":return[2,t.FLOAT,4];case"vec3":return[3,t.FLOAT,4];case"vec4":return[4,t.FLOAT,4];case"int":return[1,t.INT,4];case"ivec2":return[2,t.INT,4]}}function W1e(t,e,r){switch(e){case t.FLOAT:return new Float32Array(r);case t.INT:return new Int32Array(r)}}function Frt(t,e,r,i,n,a){switch(e){case t.FLOAT:return new Float32Array(r.buffer,a*i,n);case t.INT:return new Int32Array(r.buffer,a*i,n)}}function $rt(t,e,r,i){var n=q1e(t,e),a=ea(n,2),s=a[0],l=a[1],u=W1e(t,l,i),h=t.createBuffer();return t.bindBuffer(t.ARRAY_BUFFER,h),t.bufferData(t.ARRAY_BUFFER,u,t.STATIC_DRAW),l===t.FLOAT?t.vertexAttribPointer(r,s,l,!1,0,0):l===t.INT&&t.vertexAttribIPointer(r,s,l,0,0),t.enableVertexAttribArray(r),t.bindBuffer(t.ARRAY_BUFFER,null),h}function Pu(t,e,r,i){var n=q1e(t,r),a=ea(n,3),s=a[0],l=a[1],u=a[2],h=W1e(t,l,e*s),f=s*u,d=t.createBuffer();t.bindBuffer(t.ARRAY_BUFFER,d),t.bufferData(t.ARRAY_BUFFER,e*f,t.DYNAMIC_DRAW),t.enableVertexAttribArray(i),l===t.FLOAT?t.vertexAttribPointer(i,s,l,!1,f,0):l===t.INT&&t.vertexAttribIPointer(i,s,l,f,0),t.vertexAttribDivisor(i,1),t.bindBuffer(t.ARRAY_BUFFER,null);for(var p=new Array(e),m=0;mF1e?(rit(t),e.call(t,a)):(iit(t),j1e(t,a,tT.SCREEN)))}}{var r=t.matchCanvasSize;t.matchCanvasSize=function(a){r.call(t,a),t.pickingFrameBuffer.setFramebufferAttachmentSizes(t.canvasWidth,t.canvasHeight),t.pickingFrameBuffer.needsDraw=!0}}t.findNearestElements=function(a,s,l,u){return cit(t,a,s)};{var i=t.invalidateCachedZSortedEles;t.invalidateCachedZSortedEles=function(){i.call(t),t.pickingFrameBuffer.needsDraw=!0}}{var n=t.notify;t.notify=function(a,s){n.call(t,a,s),a==="viewport"||a==="bounds"?t.pickingFrameBuffer.needsDraw=!0:a==="background"&&t.drawing.invalidate(s,{type:"node-body"})}}}function rit(t){var e=t.data.contexts[t.WEBGL];e.clear(e.COLOR_BUFFER_BIT|e.DEPTH_BUFFER_BIT)}function iit(t){var e=o(function(i){i.save(),i.setTransform(1,0,0,1,0,0),i.clearRect(0,0,t.canvasWidth,t.canvasHeight),i.restore()},"clear");e(t.data.contexts[t.NODE]),e(t.data.contexts[t.DRAG])}function nit(t){var e=t.canvasWidth,r=t.canvasHeight,i=mF(t),n=i.pan,a=i.zoom,s=xB();uS(s,s,[n.x,n.y]),GB(s,s,[a,a]);var l=xB();qrt(l,e,r);var u=xB();return Vrt(u,l,s),u}function Y1e(t,e){var r=t.canvasWidth,i=t.canvasHeight,n=mF(t),a=n.pan,s=n.zoom;e.setTransform(1,0,0,1,0,0),e.clearRect(0,0,r,i),e.translate(a.x,a.y),e.scale(s,s)}function ait(t,e){t.drawSelectionRectangle(e,function(r){return Y1e(t,r)})}function sit(t){var e=t.data.contexts[t.NODE];e.save(),Y1e(t,e),e.strokeStyle="rgba(0, 0, 0, 0.3)",e.beginPath(),e.moveTo(-1e3,0),e.lineTo(1e3,0),e.stroke(),e.beginPath(),e.moveTo(0,-1e3),e.lineTo(0,1e3),e.stroke(),e.restore()}function oit(t){var e=o(function(n,a,s){for(var l=n.atlasManager.getAtlasCollection(a),u=t.data.contexts[t.NODE],h=l.atlases,f=0;f=0&&w.add(E)}return w}function cit(t,e,r){var i=lit(t,e,r),n=t.getCachedZSortedEles(),a,s,l=Lo(i),u;try{for(l.s();!(u=l.n()).done;){var h=u.value,f=n[h];if(!a&&f.isNode()&&(a=f),!s&&f.isEdge()&&(s=f),a&&s)break}}catch(d){l.e(d)}finally{l.f()}return[a,s].filter(Boolean)}function wB(t,e,r){var i=t.drawing;e+=1,r.isNode()?(i.drawNode(r,e,"node-underlay"),i.drawNode(r,e,"node-body"),i.drawTexture(r,e,"label"),i.drawNode(r,e,"node-overlay")):(i.drawEdgeLine(r,e),i.drawEdgeArrow(r,e,"source"),i.drawEdgeArrow(r,e,"target"),i.drawTexture(r,e,"label"),i.drawTexture(r,e,"edge-source-label"),i.drawTexture(r,e,"edge-target-label"))}function j1e(t,e,r){var i;t.webglDebug&&(i=performance.now());var n=t.drawing,a=0;if(r.screen&&t.data.canvasNeedsRedraw[t.SELECT_BOX]&&ait(t,e),t.data.canvasNeedsRedraw[t.NODE]||r.picking){var s=t.data.contexts[t.WEBGL];r.screen?(s.clearColor(0,0,0,0),s.enable(s.BLEND),s.blendFunc(s.ONE,s.ONE_MINUS_SRC_ALPHA)):s.disable(s.BLEND),s.clear(s.COLOR_BUFFER_BIT|s.DEPTH_BUFFER_BIT),s.viewport(0,0,s.canvas.width,s.canvas.height);var l=nit(t),u=t.getCachedZSortedEles();if(a=u.length,n.startFrame(l,r),r.screen){for(var h=0;h{"use strict";o(EB,"_arrayLikeToArray");o(zKe,"_arrayWithHoles");o(GKe,"_arrayWithoutHoles");o($d,"_classCallCheck");o(VKe,"_defineProperties");o(zd,"_createClass");o(Lo,"_createForOfIteratorHelper");o(fge,"_defineProperty$1");o(qKe,"_iterableToArray");o(WKe,"_iterableToArrayLimit");o(UKe,"_nonIterableRest");o(HKe,"_nonIterableSpread");o(ea,"_slicedToArray");o(hS,"_toConsumableArray");o(YKe,"_toPrimitive");o(dge,"_toPropertyKey");o(pa,"_typeof");o(UB,"_unsupportedIterableToArray");fa=typeof window>"u"?null:window,Fpe=fa?fa.navigator:null;fa&&fa.document;jKe=pa(""),pge=pa({}),XKe=pa(function(){}),KKe=typeof HTMLElement>"u"?"undefined":pa(HTMLElement),fT=o(function(e){return e&&e.instanceString&&An(e.instanceString)?e.instanceString():null},"instanceStr"),lr=o(function(e){return e!=null&&pa(e)==jKe},"string"),An=o(function(e){return e!=null&&pa(e)===XKe},"fn"),qi=o(function(e){return!il(e)&&(Array.isArray?Array.isArray(e):e!=null&&e instanceof Array)},"array"),si=o(function(e){return e!=null&&pa(e)===pge&&!qi(e)&&e.constructor===Object},"plainObject"),QKe=o(function(e){return e!=null&&pa(e)===pge},"object"),Mt=o(function(e){return e!=null&&pa(e)===pa(1)&&!isNaN(e)},"number"),ZKe=o(function(e){return Mt(e)&&Math.floor(e)===e},"integer"),fS=o(function(e){if(KKe!=="undefined")return e!=null&&e instanceof HTMLElement},"htmlElement"),il=o(function(e){return dT(e)||mge(e)},"elementOrCollection"),dT=o(function(e){return fT(e)==="collection"&&e._private.single},"element"),mge=o(function(e){return fT(e)==="collection"&&!e._private.single},"collection"),HB=o(function(e){return fT(e)==="core"},"core"),gge=o(function(e){return fT(e)==="stylesheet"},"stylesheet"),JKe=o(function(e){return fT(e)==="event"},"event"),Id=o(function(e){return e==null?!0:!!(e===""||e.match(/^\s+$/))},"emptyString"),eQe=o(function(e){return typeof HTMLElement>"u"?!1:e instanceof HTMLElement},"domElement"),tQe=o(function(e){return si(e)&&Mt(e.x1)&&Mt(e.x2)&&Mt(e.y1)&&Mt(e.y2)},"boundingBox"),rQe=o(function(e){return QKe(e)&&An(e.then)},"promise"),iQe=o(function(){return Fpe&&Fpe.userAgent.match(/msie|trident|edge/i)},"ms"),my=o(function(e,r){r||(r=o(function(){if(arguments.length===1)return arguments[0];if(arguments.length===0)return"undefined";for(var a=[],s=0;sr?1:0},"ascending"),uQe=o(function(e,r){return-1*vge(e,r)},"descending"),yr=Object.assign!=null?Object.assign.bind(Object):function(t){for(var e=arguments,r=1;r1&&(v-=1),v<1/6?g+(y-g)*6*v:v<1/2?y:v<2/3?g+(y-g)*(2/3-v)*6:g}o(f,"hue2rgb");var d=new RegExp("^"+sQe+"$").exec(e);if(d){if(i=parseInt(d[1]),i<0?i=(360- -1*i%360)%360:i>360&&(i=i%360),i/=360,n=parseFloat(d[2]),n<0||n>100||(n=n/100,a=parseFloat(d[3]),a<0||a>100)||(a=a/100,s=d[4],s!==void 0&&(s=parseFloat(s),s<0||s>1)))return;if(n===0)l=u=h=Math.round(a*255);else{var p=a<.5?a*(1+n):a+n-a*n,m=2*a-p;l=Math.round(255*f(m,p,i+1/3)),u=Math.round(255*f(m,p,i)),h=Math.round(255*f(m,p,i-1/3))}r=[l,u,h,s]}return r},"hsl2tuple"),dQe=o(function(e){var r,i=new RegExp("^"+nQe+"$").exec(e);if(i){r=[];for(var n=[],a=1;a<=3;a++){var s=i[a];if(s[s.length-1]==="%"&&(n[a]=!0),s=parseFloat(s),n[a]&&(s=s/100*255),s<0||s>255)return;r.push(Math.floor(s))}var l=n[1]||n[2]||n[3],u=n[1]&&n[2]&&n[3];if(l&&!u)return;var h=i[4];if(h!==void 0){if(h=parseFloat(h),h<0||h>1)return;r.push(h)}}return r},"rgb2tuple"),pQe=o(function(e){return mQe[e.toLowerCase()]},"colorname2tuple"),xge=o(function(e){return(qi(e)?e:null)||pQe(e)||hQe(e)||dQe(e)||fQe(e)},"color2tuple"),mQe={transparent:[0,0,0,0],aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],grey:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},bge=o(function(e){for(var r=e.map,i=e.keys,n=i.length,a=0;a1&&arguments[1]!==void 0?arguments[1]:K0,i=r,n;n=e.next(),!n.done;)i=i*wge+n.value|0;return i},"hashIterableInts"),rT=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:K0;return r*wge+e|0},"hashInt"),iT=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:oy;return(r<<5)+r+e|0},"hashIntAlt"),AQe=o(function(e,r){return e*2097152+r},"combineHashes"),Ed=o(function(e){return e[0]*2097152+e[1]},"combineHashesArray"),VE=o(function(e,r){return[rT(e[0],r[0]),iT(e[1],r[1])]},"hashArrays"),e0e=o(function(e,r){var i={value:0,done:!1},n=0,a=e.length,s={next:o(function(){return n=0;n--)e[n]===r&&e.splice(n,1)},"removeFromArray"),QB=o(function(e){e.splice(0,e.length)},"clearArray"),BQe=o(function(e,r){for(var i=0;i"u"?"undefined":pa(Set))!==$Qe?Set:zQe,AS=o(function(e,r){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(e===void 0||r===void 0||!HB(e)){mn("An element must have a core reference and parameters set");return}var n=r.group;if(n==null&&(r.data&&r.data.source!=null&&r.data.target!=null?n="edges":n="nodes"),n!=="nodes"&&n!=="edges"){mn("An element must be of type `nodes` or `edges`; you specified `"+n+"`");return}this.length=1,this[0]=this;var a=this._private={cy:e,single:!0,data:r.data||{},position:r.position||{x:0,y:0},autoWidth:void 0,autoHeight:void 0,autoPadding:void 0,compoundBoundsClean:!1,listeners:[],group:n,style:{},rstyle:{},styleCxts:[],styleKeys:{},removed:!0,selected:!!r.selected,selectable:r.selectable===void 0?!0:!!r.selectable,locked:!!r.locked,grabbed:!1,grabbable:r.grabbable===void 0?!0:!!r.grabbable,pannable:r.pannable===void 0?n==="edges":!!r.pannable,active:!1,classes:new vy,animation:{current:[],queue:[]},rscratch:{},scratch:r.scratch||{},edges:[],children:[],parent:r.parent&&r.parent.isNode()?r.parent:null,traversalCache:{},backgrounding:!1,bbCache:null,bbCacheShift:{x:0,y:0},bodyBounds:null,overlayBounds:null,labelBounds:{all:null,source:null,target:null,main:null},arrowBounds:{source:null,target:null,"mid-source":null,"mid-target":null}};if(a.position.x==null&&(a.position.x=0),a.position.y==null&&(a.position.y=0),r.renderedPosition){var s=r.renderedPosition,l=e.pan(),u=e.zoom();a.position={x:(s.x-l.x)/u,y:(s.y-l.y)/u}}var h=[];qi(r.classes)?h=r.classes:lr(r.classes)&&(h=r.classes.split(/\s+/));for(var f=0,d=h.length;f0;){var C=b.pop(),E=v(C),S=C.id();if(p[S]=E,E!==1/0)for(var L=C.neighborhood().intersect(g),M=0;M0)for(O.unshift(B);d[z];){var F=d[z];O.unshift(F.edge),O.unshift(F.node),$=F.node,z=$.id()}return l.spawn(O)},"pathTo")}},"dijkstra")},YQe={kruskal:o(function(e){e=e||function(T){return 1};for(var r=this.byGroup(),i=r.nodes,n=r.edges,a=i.length,s=new Array(a),l=i,u=o(function(w){for(var k=0;k0;){if(k(),E++,w===f){for(var S=[],L=a,M=f,I=x[M];S.unshift(L),I!=null&&S.unshift(I),L=v[M],L!=null;)M=L.id(),I=x[M];return{found:!0,distance:d[w],path:this.spawn(S),steps:E}}m[w]=!0;for(var A=T._private.edges,_=0;_I&&(g[M]=I,b[M]=L,T[M]=k),!a){var A=L*f+S;!a&&g[A]>I&&(g[A]=I,b[A]=S,T[A]=k)}}}for(var _=0;_1&&arguments[1]!==void 0?arguments[1]:s,$e=T(Te),pe=[],Je=$e;;){if(Je==null)return r.spawn();var Ce=b(Je),Fe=Ce.edge,Ue=Ce.pred;if(pe.unshift(Je[0]),Je.same(De)&&pe.length>0)break;Fe!=null&&pe.unshift(Fe),Je=Ue}return u.spawn(pe)},"pathTo"),C=0;C=0;f--){var d=h[f],p=d[1],m=d[2];(r[p]===l&&r[m]===u||r[p]===u&&r[m]===l)&&h.splice(f,1)}for(var g=0;gn;){var a=Math.floor(Math.random()*r.length);r=tZe(a,e,r),i--}return r},"contractUntil"),rZe={kargerStein:o(function(){var e=this,r=this.byGroup(),i=r.nodes,n=r.edges;n.unmergeBy(function(O){return O.isLoop()});var a=i.length,s=n.length,l=Math.ceil(Math.pow(Math.log(a)/Math.LN2,2)),u=Math.floor(a/eZe);if(a<2){mn("At least 2 nodes are required for Karger-Stein algorithm");return}for(var h=[],f=0;f1&&arguments[1]!==void 0?arguments[1]:0,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,n=1/0,a=r;a1&&arguments[1]!==void 0?arguments[1]:0,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,n=-1/0,a=r;a1&&arguments[1]!==void 0?arguments[1]:0,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,n=0,a=0,s=r;s1&&arguments[1]!==void 0?arguments[1]:0,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,s=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0;n?e=e.slice(r,i):(i0&&e.splice(0,r));for(var l=0,u=e.length-1;u>=0;u--){var h=e[u];s?isFinite(h)||(e[u]=-1/0,l++):e.splice(u,1)}a&&e.sort(function(p,m){return p-m});var f=e.length,d=Math.floor(f/2);return f%2!==0?e[d+1+l]:(e[d-1+l]+e[d+l])/2},"median"),lZe=o(function(e){return Math.PI*e/180},"deg2rad"),qE=o(function(e,r){return Math.atan2(r,e)-Math.PI/2},"getAngleFromDisp"),ZB=Math.log2||function(t){return Math.log(t)/Math.log(2)},JB=o(function(e){return e>0?1:e<0?-1:0},"signum"),em=o(function(e,r){return Math.sqrt(j0(e,r))},"dist"),j0=o(function(e,r){var i=r.x-e.x,n=r.y-e.y;return i*i+n*n},"sqdist"),cZe=o(function(e){for(var r=e.length,i=0,n=0;n=e.x1&&e.y2>=e.y1)return{x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2,w:e.x2-e.x1,h:e.y2-e.y1};if(e.w!=null&&e.h!=null&&e.w>=0&&e.h>=0)return{x1:e.x1,y1:e.y1,x2:e.x1+e.w,y2:e.y1+e.h,w:e.w,h:e.h}}},"makeBoundingBox"),hZe=o(function(e){return{x1:e.x1,x2:e.x2,w:e.w,y1:e.y1,y2:e.y2,h:e.h}},"copyBoundingBox"),fZe=o(function(e){e.x1=1/0,e.y1=1/0,e.x2=-1/0,e.y2=-1/0,e.w=0,e.h=0},"clearBoundingBox"),dZe=o(function(e,r){e.x1=Math.min(e.x1,r.x1),e.x2=Math.max(e.x2,r.x2),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,r.y1),e.y2=Math.max(e.y2,r.y2),e.h=e.y2-e.y1},"updateBoundingBox"),Nge=o(function(e,r,i){e.x1=Math.min(e.x1,r),e.x2=Math.max(e.x2,r),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,i),e.y2=Math.max(e.y2,i),e.h=e.y2-e.y1},"expandBoundingBoxByPoint"),tS=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return e.x1-=r,e.x2+=r,e.y1-=r,e.y2+=r,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},"expandBoundingBox"),rS=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[0],i,n,a,s;if(r.length===1)i=n=a=s=r[0];else if(r.length===2)i=a=r[0],s=n=r[1];else if(r.length===4){var l=ea(r,4);i=l[0],n=l[1],a=l[2],s=l[3]}return e.x1-=s,e.x2+=n,e.y1-=i,e.y2+=a,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},"expandBoundingBoxSides"),s0e=o(function(e,r){e.x1=r.x1,e.y1=r.y1,e.x2=r.x2,e.y2=r.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1},"assignBoundingBox"),eF=o(function(e,r){return!(e.x1>r.x2||r.x1>e.x2||e.x2r.y2||r.y1>e.y2)},"boundingBoxesIntersect"),Dd=o(function(e,r,i){return e.x1<=r&&r<=e.x2&&e.y1<=i&&i<=e.y2},"inBoundingBox"),o0e=o(function(e,r){return Dd(e,r.x,r.y)},"pointInBoundingBox"),Ige=o(function(e,r){return Dd(e,r.x1,r.y1)&&Dd(e,r.x2,r.y2)},"boundingBoxInBoundingBox"),pZe=(fP=Math.hypot)!==null&&fP!==void 0?fP:function(t,e){return Math.sqrt(t*t+e*e)};o(mZe,"inflatePolygon");o(gZe,"miterBox");Mge=o(function(e,r,i,n,a,s,l){var u=arguments.length>7&&arguments[7]!==void 0?arguments[7]:"auto",h=u==="auto"?Od(a,s):u,f=a/2,d=s/2;h=Math.min(h,f,d);var p=h!==f,m=h!==d,g;if(p){var y=i-f+h-l,v=n-d-l,x=i+f-h+l,b=v;if(g=Ld(e,r,i,n,y,v,x,b,!1),g.length>0)return g}if(m){var T=i+f+l,w=n-d+h-l,k=T,C=n+d-h+l;if(g=Ld(e,r,i,n,T,w,k,C,!1),g.length>0)return g}if(p){var E=i-f+h-l,S=n+d+l,L=i+f-h+l,M=S;if(g=Ld(e,r,i,n,E,S,L,M,!1),g.length>0)return g}if(m){var I=i-f-l,A=n-d+h-l,_=I,D=n+d-h+l;if(g=Ld(e,r,i,n,I,A,_,D,!1),g.length>0)return g}var N;{var R=i-f+h,B=n-d+h;if(N=Kb(e,r,i,n,R,B,h+l),N.length>0&&N[0]<=R&&N[1]<=B)return[N[0],N[1]]}{var O=i+f-h,$=n-d+h;if(N=Kb(e,r,i,n,O,$,h+l),N.length>0&&N[0]>=O&&N[1]<=$)return[N[0],N[1]]}{var z=i+f-h,F=n+d-h;if(N=Kb(e,r,i,n,z,F,h+l),N.length>0&&N[0]>=z&&N[1]>=F)return[N[0],N[1]]}{var V=i-f+h,H=n+d-h;if(N=Kb(e,r,i,n,V,H,h+l),N.length>0&&N[0]<=V&&N[1]>=H)return[N[0],N[1]]}return[]},"roundRectangleIntersectLine"),yZe=o(function(e,r,i,n,a,s,l){var u=l,h=Math.min(i,a),f=Math.max(i,a),d=Math.min(n,s),p=Math.max(n,s);return h-u<=e&&e<=f+u&&d-u<=r&&r<=p+u},"inLineVicinity"),vZe=o(function(e,r,i,n,a,s,l,u,h){var f={x1:Math.min(i,l,a)-h,x2:Math.max(i,l,a)+h,y1:Math.min(n,u,s)-h,y2:Math.max(n,u,s)+h};return!(ef.x2||rf.y2)},"inBezierVicinity"),xZe=o(function(e,r,i,n){i-=n;var a=r*r-4*e*i;if(a<0)return[];var s=Math.sqrt(a),l=2*e,u=(-r+s)/l,h=(-r-s)/l;return[u,h]},"solveQuadratic"),bZe=o(function(e,r,i,n,a){var s=1e-5;e===0&&(e=s),r/=e,i/=e,n/=e;var l,u,h,f,d,p,m,g;if(u=(3*i-r*r)/9,h=-(27*n)+r*(9*i-2*(r*r)),h/=54,l=u*u*u+h*h,a[1]=0,m=r/3,l>0){d=h+Math.sqrt(l),d=d<0?-Math.pow(-d,1/3):Math.pow(d,1/3),p=h-Math.sqrt(l),p=p<0?-Math.pow(-p,1/3):Math.pow(p,1/3),a[0]=-m+d+p,m+=(d+p)/2,a[4]=a[2]=-m,m=Math.sqrt(3)*(-p+d)/2,a[3]=m,a[5]=-m;return}if(a[5]=a[3]=0,l===0){g=h<0?-Math.pow(-h,1/3):Math.pow(h,1/3),a[0]=-m+2*g,a[4]=a[2]=-(g+m);return}u=-u,f=u*u*u,f=Math.acos(h/Math.sqrt(f)),g=2*Math.sqrt(u),a[0]=-m+g*Math.cos(f/3),a[2]=-m+g*Math.cos((f+2*Math.PI)/3),a[4]=-m+g*Math.cos((f+4*Math.PI)/3)},"solveCubic"),TZe=o(function(e,r,i,n,a,s,l,u){var h=1*i*i-4*i*a+2*i*l+4*a*a-4*a*l+l*l+n*n-4*n*s+2*n*u+4*s*s-4*s*u+u*u,f=9*i*a-3*i*i-3*i*l-6*a*a+3*a*l+9*n*s-3*n*n-3*n*u-6*s*s+3*s*u,d=3*i*i-6*i*a+i*l-i*e+2*a*a+2*a*e-l*e+3*n*n-6*n*s+n*u-n*r+2*s*s+2*s*r-u*r,p=1*i*a-i*i+i*e-a*e+n*s-n*n+n*r-s*r,m=[];bZe(h,f,d,p,m);for(var g=1e-7,y=[],v=0;v<6;v+=2)Math.abs(m[v+1])=0&&m[v]<=1&&y.push(m[v]);y.push(1),y.push(0);for(var x=-1,b,T,w,k=0;k=0?wh?(e-a)*(e-a)+(r-s)*(r-s):f-p},"sqdistToFiniteLine"),Do=o(function(e,r,i){for(var n,a,s,l,u,h=0,f=0;f=e&&e>=s||n<=e&&e<=s)u=(e-n)/(s-n)*(l-a)+a,u>r&&h++;else continue;return h%2!==0},"pointInsidePolygonPoints"),Qh=o(function(e,r,i,n,a,s,l,u,h){var f=new Array(i.length),d;u[0]!=null?(d=Math.atan(u[1]/u[0]),u[0]<0?d=d+Math.PI/2:d=-d-Math.PI/2):d=u;for(var p=Math.cos(-d),m=Math.sin(-d),g=0;g0){var v=gS(f,-h);y=mS(v)}else y=f;return Do(e,r,y)},"pointInsidePolygon"),CZe=o(function(e,r,i,n,a,s,l,u){for(var h=new Array(i.length*2),f=0;f=0&&v<=1&&b.push(v),x>=0&&x<=1&&b.push(x),b.length===0)return[];var T=b[0]*u[0]+e,w=b[0]*u[1]+r;if(b.length>1){if(b[0]==b[1])return[T,w];var k=b[1]*u[0]+e,C=b[1]*u[1]+r;return[T,w,k,C]}else return[T,w]},"intersectLineCircle"),dP=o(function(e,r,i){return r<=e&&e<=i||i<=e&&e<=r?e:e<=r&&r<=i||i<=r&&r<=e?r:i},"midOfThree"),Ld=o(function(e,r,i,n,a,s,l,u,h){var f=e-a,d=i-e,p=l-a,m=r-s,g=n-r,y=u-s,v=p*m-y*f,x=d*m-g*f,b=y*d-p*g;if(b!==0){var T=v/b,w=x/b,k=.001,C=0-k,E=1+k;return C<=T&&T<=E&&C<=w&&w<=E?[e+T*d,r+T*g]:h?[e+T*d,r+T*g]:[]}else return v===0||x===0?dP(e,i,l)===l?[l,u]:dP(e,i,a)===a?[a,s]:dP(a,l,i)===i?[i,n]:[]:[]},"finiteLinesIntersect"),EZe=o(function(e,r,i,n,a){var s=[],l=n/2,u=a/2,h=r,f=i;s.push({x:h+l*e[0],y:f+u*e[1]});for(var d=1;d0){var y=gS(d,-u);m=mS(y)}else m=d}else m=i;for(var v,x,b,T,w=0;w2){for(var g=[f[0],f[1]],y=Math.pow(g[0]-e,2)+Math.pow(g[1]-r,2),v=1;vf&&(f=w)},"set"),get:o(function(T){return h[T]},"get")},p=0;p0?N=D.edgesTo(_)[0]:N=_.edgesTo(D)[0];var R=n(N);_=_.id(),E[_]>E[I]+R&&(E[_]=E[I]+R,S.nodes.indexOf(_)<0?S.push(_):S.updateItem(_),C[_]=0,k[_]=[]),E[_]==E[I]+R&&(C[_]=C[_]+C[I],k[_].push(I))}else for(var B=0;B0;){for(var F=w.pop(),V=0;V0&&l.push(i[u]);l.length!==0&&a.push(n.collection(l))}return a},"assign"),zZe=o(function(e,r){for(var i=0;i5&&arguments[5]!==void 0?arguments[5]:qZe,l=n,u,h,f=0;f=2?qb(e,r,i,0,f0e,WZe):qb(e,r,i,0,h0e)},"euclidean"),squaredEuclidean:o(function(e,r,i){return qb(e,r,i,0,f0e)},"squaredEuclidean"),manhattan:o(function(e,r,i){return qb(e,r,i,0,h0e)},"manhattan"),max:o(function(e,r,i){return qb(e,r,i,-1/0,UZe)},"max")};gy["squared-euclidean"]=gy.squaredEuclidean;gy.squaredeuclidean=gy.squaredEuclidean;o(DS,"clusteringDistance");HZe=rs({k:2,m:2,sensitivityThreshold:1e-4,distance:"euclidean",maxIterations:10,attributes:[],testMode:!1,testCentroids:null}),rF=o(function(e){return HZe(e)},"setOptions"),yS=o(function(e,r,i,n,a){var s=a!=="kMedoids",l=s?function(d){return i[d]}:function(d){return n[d](i)},u=o(function(p){return n[p](r)},"getQ"),h=i,f=r;return DS(e,n.length,l,u,h,f)},"getDist"),mP=o(function(e,r,i){for(var n=i.length,a=new Array(n),s=new Array(n),l=new Array(r),u=null,h=0;hi)return!1}return!0},"haveMatricesConverged"),XZe=o(function(e,r,i){for(var n=0;nl&&(l=r[h][f],u=f);a[u].push(e[h])}for(var d=0;d=a.threshold||a.mode==="dendrogram"&&e.length===1)return!1;var g=r[s],y=r[n[s]],v;a.mode==="dendrogram"?v={left:g,right:y,key:g.key}:v={value:g.value.concat(y.value),key:g.key},e[g.index]=v,e.splice(y.index,1),r[g.key]=v;for(var x=0;xi[y.key][b.key]&&(u=i[y.key][b.key])):a.linkage==="max"?(u=i[g.key][b.key],i[g.key][b.key]0&&n.push(a);return n},"findExemplars"),v0e=o(function(e,r,i){for(var n=[],a=0;al&&(s=h,l=r[a*e+h])}s>0&&n.push(s)}for(var f=0;fh&&(u=f,h=d)}i[a]=s[u]}return n=v0e(e,r,i),n},"assign"),x0e=o(function(e){for(var r=this.cy(),i=this.nodes(),n=oJe(e),a={},s=0;s=I?(A=I,I=D,_=N):D>A&&(A=D);for(var R=0;R0?1:0;E[L%n.minIterations*l+V]=H,F+=H}if(F>0&&(L>=n.minIterations-1||L==n.maxIterations-1)){for(var X=0,W=0;W1||C>1)&&(l=!0),d[T]=[],b.outgoers().forEach(function(S){S.isEdge()&&d[T].push(S.id())})}else p[T]=[void 0,b.target().id()]}):s.forEach(function(b){var T=b.id();if(b.isNode()){var w=b.degree(!0);w%2&&(u?h?l=!0:h=T:u=T),d[T]=[],b.connectedEdges().forEach(function(k){return d[T].push(k.id())})}else p[T]=[b.source().id(),b.target().id()]});var m={found:!1,trail:void 0};if(l)return m;if(h&&u)if(a){if(f&&h!=f)return m;f=h}else{if(f&&h!=f&&u!=f)return m;f||(f=h)}else f||(f=s[0].id());var g=o(function(T){for(var w=T,k=[T],C,E,S;d[w].length;)C=d[w].shift(),E=p[C][0],S=p[C][1],w!=S?(d[S]=d[S].filter(function(L){return L!=C}),w=S):!a&&w!=E&&(d[E]=d[E].filter(function(L){return L!=C}),w=E),k.unshift(C),k.unshift(w);return k},"walk"),y=[],v=[];for(v=g(f);v.length!=1;)d[v[0]].length==0?(y.unshift(s.getElementById(v.shift())),y.unshift(s.getElementById(v.shift()))):v=g(v.shift()).concat(v);y.unshift(s.getElementById(v.shift()));for(var x in d)if(d[x].length)return m;return m.found=!0,m.trail=this.spawn(y,!0),m},"hierholzer")},UE=o(function(){var e=this,r={},i=0,n=0,a=[],s=[],l={},u=o(function(p,m){for(var g=s.length-1,y=[],v=e.spawn();s[g].x!=p||s[g].y!=m;)y.push(s.pop().edge),g--;y.push(s.pop().edge),y.forEach(function(x){var b=x.connectedNodes().intersection(e);v.merge(x),b.forEach(function(T){var w=T.id(),k=T.connectedEdges().intersection(e);v.merge(T),r[w].cutVertex?v.merge(k.filter(function(C){return C.isLoop()})):v.merge(k)})}),a.push(v)},"buildComponent"),h=o(function(p,m,g){p===g&&(n+=1),r[m]={id:i,low:i++,cutVertex:!1};var y=e.getElementById(m).connectedEdges().intersection(e);if(y.size()===0)a.push(e.spawn(e.getElementById(m)));else{var v,x,b,T;y.forEach(function(w){v=w.source().id(),x=w.target().id(),b=v===m?x:v,b!==g&&(T=w.id(),l[T]||(l[T]=!0,s.push({x:m,y:b,edge:w})),b in r?r[m].low=Math.min(r[m].low,r[b].id):(h(p,b,m),r[m].low=Math.min(r[m].low,r[b].low),r[m].id<=r[b].low&&(r[m].cutVertex=!0,u(m,b))))})}},"biconnectedSearch");e.forEach(function(d){if(d.isNode()){var p=d.id();p in r||(n=0,h(p,p),r[p].cutVertex=n>1)}});var f=Object.keys(r).filter(function(d){return r[d].cutVertex}).map(function(d){return e.getElementById(d)});return{cut:e.spawn(f),components:a}},"hopcroftTarjanBiconnected"),mJe={hopcroftTarjanBiconnected:UE,htbc:UE,htb:UE,hopcroftTarjanBiconnectedComponents:UE},HE=o(function(){var e=this,r={},i=0,n=[],a=[],s=e.spawn(e),l=o(function(h){a.push(h),r[h]={index:i,low:i++,explored:!1};var f=e.getElementById(h).connectedEdges().intersection(e);if(f.forEach(function(y){var v=y.target().id();v!==h&&(v in r||l(v),r[v].explored||(r[h].low=Math.min(r[h].low,r[v].low)))}),r[h].index===r[h].low){for(var d=e.spawn();;){var p=a.pop();if(d.merge(e.getElementById(p)),r[p].low=r[h].index,r[p].explored=!0,p===h)break}var m=d.edgesWith(d),g=d.merge(m);n.push(g),s=s.difference(g)}},"stronglyConnectedSearch");return e.forEach(function(u){if(u.isNode()){var h=u.id();h in r||l(h)}}),{cut:s,components:n}},"tarjanStronglyConnected"),gJe={tarjanStronglyConnected:HE,tsc:HE,tscc:HE,tarjanStronglyConnectedComponents:HE},Gge={};[nT,HQe,YQe,XQe,QQe,JQe,rZe,DZe,fy,dy,_B,VZe,tJe,aJe,fJe,pJe,mJe,gJe].forEach(function(t){yr(Gge,t)});Vge=0,qge=1,Wge=2,Ic=o(function(e){if(!(this instanceof Ic))return new Ic(e);this.id="Thenable/1.0.7",this.state=Vge,this.fulfillValue=void 0,this.rejectReason=void 0,this.onFulfilled=[],this.onRejected=[],this.proxy={then:this.then.bind(this)},typeof e=="function"&&e.call(this,this.fulfill.bind(this),this.reject.bind(this))},"api");Ic.prototype={fulfill:o(function(e){return b0e(this,qge,"fulfillValue",e)},"fulfill"),reject:o(function(e){return b0e(this,Wge,"rejectReason",e)},"reject"),then:o(function(e,r){var i=this,n=new Ic;return i.onFulfilled.push(k0e(e,n,"fulfill")),i.onRejected.push(k0e(r,n,"reject")),Uge(i),n.proxy},"then")};b0e=o(function(e,r,i,n){return e.state===Vge&&(e.state=r,e[i]=n,Uge(e)),e},"deliver"),Uge=o(function(e){e.state===qge?T0e(e,"onFulfilled",e.fulfillValue):e.state===Wge&&T0e(e,"onRejected",e.rejectReason)},"execute"),T0e=o(function(e,r,i){if(e[r].length!==0){var n=e[r];e[r]=[];var a=o(function(){for(var l=0;l0},"animatedImpl")},"animated"),clearQueue:o(function(){return o(function(){var r=this,i=r.length!==void 0,n=i?r:[r],a=this._private.cy||this;if(!a.styleEnabled())return this;for(var s=0;s0&&this.spawn(n).updateStyle().emit("class"),r},"classes"),addClass:o(function(e){return this.toggleClass(e,!0)},"addClass"),hasClass:o(function(e){var r=this[0];return r!=null&&r._private.classes.has(e)},"hasClass"),toggleClass:o(function(e,r){qi(e)||(e=e.match(/\S+/g)||[]);for(var i=this,n=r===void 0,a=[],s=0,l=i.length;s0&&this.spawn(a).updateStyle().emit("class"),i},"toggleClass"),removeClass:o(function(e){return this.toggleClass(e,!1)},"removeClass"),flashClass:o(function(e,r){var i=this;if(r==null)r=250;else if(r===0)return i;return i.addClass(e),setTimeout(function(){i.removeClass(e)},r),i},"flashClass")};iS.className=iS.classNames=iS.classes;ai={metaChar:"[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]",comparatorOp:"=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=",boolOp:"\\?|\\!|\\^",string:`"(?:\\\\"|[^"])*"|'(?:\\\\'|[^'])*'`,number:da,meta:"degree|indegree|outdegree",separator:"\\s*,\\s*",descendant:"\\s+",child:"\\s+>\\s+",subject:"\\$",group:"node|edge|\\*",directedEdge:"\\s+->\\s+",undirectedEdge:"\\s+<->\\s+"};ai.variable="(?:[\\w-.]|(?:\\\\"+ai.metaChar+"))+";ai.className="(?:[\\w-]|(?:\\\\"+ai.metaChar+"))+";ai.value=ai.string+"|"+ai.number;ai.id=ai.variable;(function(){var t,e,r;for(t=ai.comparatorOp.split("|"),r=0;r=0)&&e!=="="&&(ai.comparatorOp+="|\\!"+e)})();Bi=o(function(){return{checks:[]}},"newQuery"),Wt={GROUP:0,COLLECTION:1,FILTER:2,DATA_COMPARE:3,DATA_EXIST:4,DATA_BOOL:5,META_COMPARE:6,STATE:7,ID:8,CLASS:9,UNDIRECTED_EDGE:10,DIRECTED_EDGE:11,NODE_SOURCE:12,NODE_TARGET:13,NODE_NEIGHBOR:14,CHILD:15,DESCENDANT:16,PARENT:17,ANCESTOR:18,COMPOUND_SPLIT:19,TRUE:20},NB=[{selector:":selected",matches:o(function(e){return e.selected()},"matches")},{selector:":unselected",matches:o(function(e){return!e.selected()},"matches")},{selector:":selectable",matches:o(function(e){return e.selectable()},"matches")},{selector:":unselectable",matches:o(function(e){return!e.selectable()},"matches")},{selector:":locked",matches:o(function(e){return e.locked()},"matches")},{selector:":unlocked",matches:o(function(e){return!e.locked()},"matches")},{selector:":visible",matches:o(function(e){return e.visible()},"matches")},{selector:":hidden",matches:o(function(e){return!e.visible()},"matches")},{selector:":transparent",matches:o(function(e){return e.transparent()},"matches")},{selector:":grabbed",matches:o(function(e){return e.grabbed()},"matches")},{selector:":free",matches:o(function(e){return!e.grabbed()},"matches")},{selector:":removed",matches:o(function(e){return e.removed()},"matches")},{selector:":inside",matches:o(function(e){return!e.removed()},"matches")},{selector:":grabbable",matches:o(function(e){return e.grabbable()},"matches")},{selector:":ungrabbable",matches:o(function(e){return!e.grabbable()},"matches")},{selector:":animated",matches:o(function(e){return e.animated()},"matches")},{selector:":unanimated",matches:o(function(e){return!e.animated()},"matches")},{selector:":parent",matches:o(function(e){return e.isParent()},"matches")},{selector:":childless",matches:o(function(e){return e.isChildless()},"matches")},{selector:":child",matches:o(function(e){return e.isChild()},"matches")},{selector:":orphan",matches:o(function(e){return e.isOrphan()},"matches")},{selector:":nonorphan",matches:o(function(e){return e.isChild()},"matches")},{selector:":compound",matches:o(function(e){return e.isNode()?e.isParent():e.source().isParent()||e.target().isParent()},"matches")},{selector:":loop",matches:o(function(e){return e.isLoop()},"matches")},{selector:":simple",matches:o(function(e){return e.isSimple()},"matches")},{selector:":active",matches:o(function(e){return e.active()},"matches")},{selector:":inactive",matches:o(function(e){return!e.active()},"matches")},{selector:":backgrounding",matches:o(function(e){return e.backgrounding()},"matches")},{selector:":nonbackgrounding",matches:o(function(e){return!e.backgrounding()},"matches")}].sort(function(t,e){return uQe(t.selector,e.selector)}),pet=(function(){for(var t={},e,r=0;r0&&f.edgeCount>0)return Di("The selector `"+e+"` is invalid because it uses both a compound selector and an edge selector"),!1;if(f.edgeCount>1)return Di("The selector `"+e+"` is invalid because it uses multiple edge selectors"),!1;f.edgeCount===1&&Di("The selector `"+e+"` is deprecated. Edge selectors do not take effect on changes to source and target nodes after an edge is added, for performance reasons. Use a class or data selector on edges instead, updating the class or data of an edge when your app detects a change in source or target nodes.")}return!0},"parse"),bet=o(function(){if(this.toStringCache!=null)return this.toStringCache;for(var e=o(function(f){return f??""},"clean"),r=o(function(f){return lr(f)?'"'+f+'"':e(f)},"cleanVal"),i=o(function(f){return" "+f+" "},"space"),n=o(function(f,d){var p=f.type,m=f.value;switch(p){case Wt.GROUP:{var g=e(m);return g.substring(0,g.length-1)}case Wt.DATA_COMPARE:{var y=f.field,v=f.operator;return"["+y+i(e(v))+r(m)+"]"}case Wt.DATA_BOOL:{var x=f.operator,b=f.field;return"["+e(x)+b+"]"}case Wt.DATA_EXIST:{var T=f.field;return"["+T+"]"}case Wt.META_COMPARE:{var w=f.operator,k=f.field;return"[["+k+i(e(w))+r(m)+"]]"}case Wt.STATE:return m;case Wt.ID:return"#"+m;case Wt.CLASS:return"."+m;case Wt.PARENT:case Wt.CHILD:return a(f.parent,d)+i(">")+a(f.child,d);case Wt.ANCESTOR:case Wt.DESCENDANT:return a(f.ancestor,d)+" "+a(f.descendant,d);case Wt.COMPOUND_SPLIT:{var C=a(f.left,d),E=a(f.subject,d),S=a(f.right,d);return C+(C.length>0?" ":"")+E+S}case Wt.TRUE:return""}},"checkToString"),a=o(function(f,d){return f.checks.reduce(function(p,m,g){return p+(d===f&&g===0?"$":"")+n(m,d)},"")},"queryToString"),s="",l=0;l1&&l=0&&(r=r.replace("!",""),d=!0),r.indexOf("@")>=0&&(r=r.replace("@",""),f=!0),(a||l||f)&&(u=!a&&!s?"":""+e,h=""+i),f&&(e=u=u.toLowerCase(),i=h=h.toLowerCase()),r){case"*=":n=u.indexOf(h)>=0;break;case"$=":n=u.indexOf(h,u.length-h.length)>=0;break;case"^=":n=u.indexOf(h)===0;break;case"=":n=e===i;break;case">":p=!0,n=e>i;break;case">=":p=!0,n=e>=i;break;case"<":p=!0,n=e1&&arguments[1]!==void 0?arguments[1]:!0;return sF(this,t,e,Jge)};o(e1e,"addParent");yy.forEachUp=function(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return sF(this,t,e,e1e)};o(Det,"addParentAndChildren");yy.forEachUpAndDown=function(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return sF(this,t,e,Det)};yy.ancestors=yy.parents;oT=t1e={data:_i.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),removeData:_i.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),scratch:_i.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:_i.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),rscratch:_i.data({field:"rscratch",allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!0}),removeRscratch:_i.removeData({field:"rscratch",triggerEvent:!1}),id:o(function(){var e=this[0];if(e)return e._private.data.id},"id")};oT.attr=oT.data;oT.removeAttr=oT.removeData;Let=t1e,MS={};o(dB,"defineDegreeFunction");yr(MS,{degree:dB(function(t,e){return e.source().same(e.target())?2:1}),indegree:dB(function(t,e){return e.target().same(t)?1:0}),outdegree:dB(function(t,e){return e.source().same(t)?1:0})});o(ty,"defineDegreeBoundsFunction");yr(MS,{minDegree:ty("degree",function(t,e){return te}),minIndegree:ty("indegree",function(t,e){return te}),minOutdegree:ty("outdegree",function(t,e){return te})});yr(MS,{totalDegree:o(function(e){for(var r=0,i=this.nodes(),n=0;n0,p=d;d&&(f=f[0]);var m=p?f.position():{x:0,y:0};r!==void 0?h.position(e,r+m[e]):a!==void 0&&h.position({x:a.x+m.x,y:a.y+m.y})}else{var g=i.position(),y=l?i.parent():null,v=y&&y.length>0,x=v;v&&(y=y[0]);var b=x?y.position():{x:0,y:0};return a={x:g.x-b.x,y:g.y-b.y},e===void 0?a:a[e]}else if(!s)return;return this},"relativePosition")};Nc.modelPosition=Nc.point=Nc.position;Nc.modelPositions=Nc.points=Nc.positions;Nc.renderedPoint=Nc.renderedPosition;Nc.relativePoint=Nc.relativePosition;Ret=r1e;py=Gd={};Gd.renderedBoundingBox=function(t){var e=this.boundingBox(t),r=this.cy(),i=r.zoom(),n=r.pan(),a=e.x1*i+n.x,s=e.x2*i+n.x,l=e.y1*i+n.y,u=e.y2*i+n.y;return{x1:a,x2:s,y1:l,y2:u,w:s-a,h:u-l}};Gd.dirtyCompoundBoundsCache=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,e=this.cy();return!e.styleEnabled()||!e.hasCompoundNodes()?this:(this.forEachUp(function(r){if(r.isParent()){var i=r._private;i.compoundBoundsClean=!1,i.bbCache=null,t||r.emitAndNotify("bounds")}}),this)};Gd.updateCompoundBounds=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,e=this.cy();if(!e.styleEnabled()||!e.hasCompoundNodes())return this;if(!t&&e.batching())return this;function r(s){if(!s.isParent())return;var l=s._private,u=s.children(),h=s.pstyle("compound-sizing-wrt-labels").value==="include",f={width:{val:s.pstyle("min-width").pfValue,left:s.pstyle("min-width-bias-left"),right:s.pstyle("min-width-bias-right")},height:{val:s.pstyle("min-height").pfValue,top:s.pstyle("min-height-bias-top"),bottom:s.pstyle("min-height-bias-bottom")}},d=u.boundingBox({includeLabels:h,includeOverlays:!1,useCache:!1}),p=l.position;(d.w===0||d.h===0)&&(d={w:s.pstyle("width").pfValue,h:s.pstyle("height").pfValue},d.x1=p.x-d.w/2,d.x2=p.x+d.w/2,d.y1=p.y-d.h/2,d.y2=p.y+d.h/2);function m(L,M,I){var A=0,_=0,D=M+I;return L>0&&D>0&&(A=M/D*L,_=I/D*L),{biasDiff:A,biasComplementDiff:_}}o(m,"computeBiasValues");function g(L,M,I,A){if(I.units==="%")switch(A){case"width":return L>0?I.pfValue*L:0;case"height":return M>0?I.pfValue*M:0;case"average":return L>0&&M>0?I.pfValue*(L+M)/2:0;case"min":return L>0&&M>0?L>M?I.pfValue*M:I.pfValue*L:0;case"max":return L>0&&M>0?L>M?I.pfValue*L:I.pfValue*M:0;default:return 0}else return I.units==="px"?I.pfValue:0}o(g,"computePaddingValues");var y=f.width.left.value;f.width.left.units==="px"&&f.width.val>0&&(y=y*100/f.width.val);var v=f.width.right.value;f.width.right.units==="px"&&f.width.val>0&&(v=v*100/f.width.val);var x=f.height.top.value;f.height.top.units==="px"&&f.height.val>0&&(x=x*100/f.height.val);var b=f.height.bottom.value;f.height.bottom.units==="px"&&f.height.val>0&&(b=b*100/f.height.val);var T=m(f.width.val-d.w,y,v),w=T.biasDiff,k=T.biasComplementDiff,C=m(f.height.val-d.h,x,b),E=C.biasDiff,S=C.biasComplementDiff;l.autoPadding=g(d.w,d.h,s.pstyle("padding"),s.pstyle("padding-relative-to").value),l.autoWidth=Math.max(d.w,f.width.val),p.x=(-w+d.x1+d.x2+k)/2,l.autoHeight=Math.max(d.h,f.height.val),p.y=(-E+d.y1+d.y2+S)/2}o(r,"update");for(var i=0;ie.x2?n:e.x2,e.y1=ie.y2?a:e.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1)},"updateBounds"),Ad=o(function(e,r){return r==null?e:Rc(e,r.x1,r.y1,r.x2,r.y2)},"updateBoundsFromBox"),Wb=o(function(e,r,i){return _o(e,r,i)},"prefixedProperty"),YE=o(function(e,r,i){if(!r.cy().headless()){var n=r._private,a=n.rstyle,s=a.arrowWidth/2,l=r.pstyle(i+"-arrow-shape").value,u,h;if(l!=="none"){i==="source"?(u=a.srcX,h=a.srcY):i==="target"?(u=a.tgtX,h=a.tgtY):(u=a.midX,h=a.midY);var f=n.arrowBounds=n.arrowBounds||{},d=f[i]=f[i]||{};d.x1=u-s,d.y1=h-s,d.x2=u+s,d.y2=h+s,d.w=d.x2-d.x1,d.h=d.y2-d.y1,tS(d,1),Rc(e,d.x1,d.y1,d.x2,d.y2)}}},"updateBoundsFromArrow"),pB=o(function(e,r,i){if(!r.cy().headless()){var n;i?n=i+"-":n="";var a=r._private,s=a.rstyle,l=r.pstyle(n+"label").strValue;if(l){var u=r.pstyle("text-halign"),h=r.pstyle("text-valign"),f=Wb(s,"labelWidth",i),d=Wb(s,"labelHeight",i),p=Wb(s,"labelX",i),m=Wb(s,"labelY",i),g=r.pstyle(n+"text-margin-x").pfValue,y=r.pstyle(n+"text-margin-y").pfValue,v=r.isEdge(),x=r.pstyle(n+"text-rotation"),b=r.pstyle("text-outline-width").pfValue,T=r.pstyle("text-border-width").pfValue,w=T/2,k=r.pstyle("text-background-padding").pfValue,C=2,E=d,S=f,L=S/2,M=E/2,I,A,_,D;if(v)I=p-L,A=p+L,_=m-M,D=m+M;else{switch(u.value){case"left":I=p-S,A=p;break;case"center":I=p-L,A=p+L;break;case"right":I=p,A=p+S;break}switch(h.value){case"top":_=m-E,D=m;break;case"center":_=m-M,D=m+M;break;case"bottom":_=m,D=m+E;break}}var N=g-Math.max(b,w)-k-C,R=g+Math.max(b,w)+k+C,B=y-Math.max(b,w)-k-C,O=y+Math.max(b,w)+k+C;I+=N,A+=R,_+=B,D+=O;var $=i||"main",z=a.labelBounds,F=z[$]=z[$]||{};F.x1=I,F.y1=_,F.x2=A,F.y2=D,F.w=A-I,F.h=D-_,F.leftPad=N,F.rightPad=R,F.topPad=B,F.botPad=O;var V=v&&x.strValue==="autorotate",H=x.pfValue!=null&&x.pfValue!==0;if(V||H){var X=V?Wb(a.rstyle,"labelAngle",i):x.pfValue,W=Math.cos(X),Z=Math.sin(X),Y=(I+A)/2,ae=(_+D)/2;if(!v){switch(u.value){case"left":Y=A;break;case"right":Y=I;break}switch(h.value){case"top":ae=D;break;case"bottom":ae=_;break}}var J=o(function(we,Te){return we=we-Y,Te=Te-ae,{x:we*W-Te*Z+Y,y:we*Z+Te*W+ae}},"rotate"),ee=J(I,_),re=J(I,D),te=J(A,_),be=J(A,D);I=Math.min(ee.x,re.x,te.x,be.x),A=Math.max(ee.x,re.x,te.x,be.x),_=Math.min(ee.y,re.y,te.y,be.y),D=Math.max(ee.y,re.y,te.y,be.y)}var de=$+"Rot",Ee=z[de]=z[de]||{};Ee.x1=I,Ee.y1=_,Ee.x2=A,Ee.y2=D,Ee.w=A-I,Ee.h=D-_,Rc(e,I,_,A,D),Rc(a.labelBounds.all,I,_,A,D)}return e}},"updateBoundsFromLabel"),Tme=o(function(e,r){if(!r.cy().headless()){var i=r.pstyle("outline-opacity").value,n=r.pstyle("outline-width").value,a=r.pstyle("outline-offset").value,s=n+a;n1e(e,r,i,s,"outside",s/2)}},"updateBoundsFromOutline"),n1e=o(function(e,r,i,n,a,s){if(!(i===0||n<=0||a==="inside")){var l=r.cy(),u=r.pstyle("shape").value,h=l.renderer().nodeShapes[u],f=r.position(),d=f.x,p=f.y,m=r.width(),g=r.height();if(h.hasMiterBounds){a==="center"&&(n/=2);var y=h.miterBounds(d,p,m,g,n);Ad(e,y)}else s!=null&&s>0&&rS(e,[s,s,s,s])}},"updateBoundsFromMiter"),Net=o(function(e,r){if(!r.cy().headless()){var i=r.pstyle("border-opacity").value,n=r.pstyle("border-width").pfValue,a=r.pstyle("border-position").value;n1e(e,r,i,n,a)}},"updateBoundsFromMiterBorder"),Iet=o(function(e,r){var i=e._private.cy,n=i.styleEnabled(),a=i.headless(),s=Us(),l=e._private,u=e.isNode(),h=e.isEdge(),f,d,p,m,g,y,v=l.rstyle,x=u&&n?e.pstyle("bounds-expansion").pfValue:[0],b=o(function(Ne){return Ne.pstyle("display").value!=="none"},"isDisplayed"),T=!n||b(e)&&(!h||b(e.source())&&b(e.target()));if(T){var w=0,k=0;n&&r.includeOverlays&&(w=e.pstyle("overlay-opacity").value,w!==0&&(k=e.pstyle("overlay-padding").value));var C=0,E=0;n&&r.includeUnderlays&&(C=e.pstyle("underlay-opacity").value,C!==0&&(E=e.pstyle("underlay-padding").value));var S=Math.max(k,E),L=0,M=0;if(n&&(L=e.pstyle("width").pfValue,M=L/2),u&&r.includeNodes){var I=e.position();g=I.x,y=I.y;var A=e.outerWidth(),_=A/2,D=e.outerHeight(),N=D/2;f=g-_,d=g+_,p=y-N,m=y+N,Rc(s,f,p,d,m),n&&Tme(s,e),n&&r.includeOutlines&&!a&&Tme(s,e),n&&Net(s,e)}else if(h&&r.includeEdges)if(n&&!a){var R=e.pstyle("curve-style").strValue;if(f=Math.min(v.srcX,v.midX,v.tgtX),d=Math.max(v.srcX,v.midX,v.tgtX),p=Math.min(v.srcY,v.midY,v.tgtY),m=Math.max(v.srcY,v.midY,v.tgtY),f-=M,d+=M,p-=M,m+=M,Rc(s,f,p,d,m),R==="haystack"){var B=v.haystackPts;if(B&&B.length===2){if(f=B[0].x,p=B[0].y,d=B[1].x,m=B[1].y,f>d){var O=f;f=d,d=O}if(p>m){var $=p;p=m,m=$}Rc(s,f-M,p-M,d+M,m+M)}}else if(R==="bezier"||R==="unbundled-bezier"||_d(R,"segments")||_d(R,"taxi")){var z;switch(R){case"bezier":case"unbundled-bezier":z=v.bezierPts;break;case"segments":case"taxi":case"round-segments":case"round-taxi":z=v.linePts;break}if(z!=null)for(var F=0;Fd){var Y=f;f=d,d=Y}if(p>m){var ae=p;p=m,m=ae}f-=M,d+=M,p-=M,m+=M,Rc(s,f,p,d,m)}if(n&&r.includeEdges&&h&&(YE(s,e,"mid-source"),YE(s,e,"mid-target"),YE(s,e,"source"),YE(s,e,"target")),n){var J=e.pstyle("ghost").value==="yes";if(J){var ee=e.pstyle("ghost-offset-x").pfValue,re=e.pstyle("ghost-offset-y").pfValue;Rc(s,s.x1+ee,s.y1+re,s.x2+ee,s.y2+re)}}var te=l.bodyBounds=l.bodyBounds||{};s0e(te,s),rS(te,x),tS(te,1),n&&(f=s.x1,d=s.x2,p=s.y1,m=s.y2,Rc(s,f-S,p-S,d+S,m+S));var be=l.overlayBounds=l.overlayBounds||{};s0e(be,s),rS(be,x),tS(be,1);var de=l.labelBounds=l.labelBounds||{};de.all!=null?fZe(de.all):de.all=Us(),n&&r.includeLabels&&(r.includeMainLabels&&pB(s,e,null),h&&(r.includeSourceLabels&&pB(s,e,"source"),r.includeTargetLabels&&pB(s,e,"target")))}return s.x1=Vl(s.x1),s.y1=Vl(s.y1),s.x2=Vl(s.x2),s.y2=Vl(s.y2),s.w=Vl(s.x2-s.x1),s.h=Vl(s.y2-s.y1),s.w>0&&s.h>0&&T&&(rS(s,x),tS(s,1)),s},"boundingBoxImpl"),a1e=o(function(e){var r=0,i=o(function(s){return(s?1:0)<=0;l--)s(l);return this};Fd.removeAllListeners=function(){return this.removeListener("*")};Fd.emit=Fd.trigger=function(t,e,r){var i=this.listeners,n=i.length;return this.emitting++,qi(e)||(e=[e]),Xet(this,function(a,s){r!=null&&(i=[{event:s.event,type:s.type,namespace:s.namespace,callback:r}],n=i.length);for(var l=o(function(){var f=i[u];if(f.type===s.type&&(!f.namespace||f.namespace===s.namespace||f.namespace===Yet)&&a.eventMatches(a.context,f,s)){var d=[s];e!=null&&BQe(d,e),a.beforeEmit(a.context,f,s),f.conf&&f.conf.one&&(a.listeners=a.listeners.filter(function(g){return g!==f}));var p=a.callbackContext(a.context,f,s),m=f.callback.apply(p,d);a.afterEmit(a.context,f,s),m===!1&&(s.stopPropagation(),s.preventDefault())}},"_loop2"),u=0;u1&&!s){var l=this.length-1,u=this[l],h=u._private.data.id;this[l]=void 0,this[e]=u,a.set(h,{ele:u,index:e})}return this.length--,this},"unmergeAt"),unmergeOne:o(function(e){e=e[0];var r=this._private,i=e._private.data.id,n=r.map,a=n.get(i);if(!a)return this;var s=a.index;return this.unmergeAt(s),this},"unmergeOne"),unmerge:o(function(e){var r=this._private.cy;if(!e)return this;if(e&&lr(e)){var i=e;e=r.mutableElements().filter(i)}for(var n=0;n=0;r--){var i=this[r];e(i)&&this.unmergeAt(r)}return this},"unmergeBy"),map:o(function(e,r){for(var i=[],n=this,a=0;ai&&(i=u,n=l)}return{value:i,ele:n}},"max"),min:o(function(e,r){for(var i=1/0,n,a=this,s=0;s=0&&a"u"?"undefined":pa(Symbol))!=e&&pa(Symbol.iterator)!=e;r&&(vS[Symbol.iterator]=function(){var i=this,n={value:void 0,done:!1},a=0,s=this.length;return fge({next:o(function(){return a1&&arguments[1]!==void 0?arguments[1]:!0,i=this[0],n=i.cy();if(n.styleEnabled()&&i){i._private.styleDirty&&(i._private.styleDirty=!1,n.style().apply(i));var a=i._private.style[e];return a??(r?n.style().getDefaultProperty(e):null)}},"parsedStyle"),numericStyle:o(function(e){var r=this[0];if(r.cy().styleEnabled()&&r){var i=r.pstyle(e);return i.pfValue!==void 0?i.pfValue:i.value}},"numericStyle"),numericStyleUnits:o(function(e){var r=this[0];if(r.cy().styleEnabled()&&r)return r.pstyle(e).units},"numericStyleUnits"),renderedStyle:o(function(e){var r=this.cy();if(!r.styleEnabled())return this;var i=this[0];if(i)return r.style().getRenderedStyle(i,e)},"renderedStyle"),style:o(function(e,r){var i=this.cy();if(!i.styleEnabled())return this;var n=!1,a=i.style();if(si(e)){var s=e;a.applyBypass(this,s,n),this.emitAndNotify("style")}else if(lr(e))if(r===void 0){var l=this[0];return l?a.getStylePropertyValue(l,e):void 0}else a.applyBypass(this,e,r,n),this.emitAndNotify("style");else if(e===void 0){var u=this[0];return u?a.getRawStyle(u):void 0}return this},"style"),removeStyle:o(function(e){var r=this.cy();if(!r.styleEnabled())return this;var i=!1,n=r.style(),a=this;if(e===void 0)for(var s=0;s0&&e.push(f[0]),e.push(l[0])}return this.spawn(e,!0).filter(t)},"neighborhood"),closedNeighborhood:o(function(e){return this.neighborhood().add(this).filter(e)},"closedNeighborhood"),openNeighborhood:o(function(e){return this.neighborhood(e)},"openNeighborhood")});gs.neighbourhood=gs.neighborhood;gs.closedNeighbourhood=gs.closedNeighborhood;gs.openNeighbourhood=gs.openNeighborhood;yr(gs,{source:ql(o(function(e){var r=this[0],i;return r&&(i=r._private.source||r.cy().collection()),i&&e?i.filter(e):i},"sourceImpl"),"source"),target:ql(o(function(e){var r=this[0],i;return r&&(i=r._private.target||r.cy().collection()),i&&e?i.filter(e):i},"targetImpl"),"target"),sources:Nme({attr:"source"}),targets:Nme({attr:"target"})});o(Nme,"defineSourceFunction");yr(gs,{edgesWith:ql(Ime(),"edgesWith"),edgesTo:ql(Ime({thisIsSrc:!0}),"edgesTo")});o(Ime,"defineEdgesWithFunction");yr(gs,{connectedEdges:ql(function(t){for(var e=[],r=this,i=0;i0);return s},"components"),component:o(function(){var e=this[0];return e.cy().mutableElements().components(e)[0]},"component")});gs.componentsOf=gs.components;ts=o(function(e,r){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(e===void 0){mn("A collection must have a reference to the core");return}var a=new Xh,s=!1;if(!r)r=[];else if(r.length>0&&si(r[0])&&!dT(r[0])){s=!0;for(var l=[],u=new vy,h=0,f=r.length;h0&&arguments[0]!==void 0?arguments[0]:!0,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,r=this,i=r.cy(),n=i._private,a=[],s=[],l,u=0,h=r.length;u0){for(var $=l.length===r.length?r:new ts(i,l),z=0;z<$.length;z++){var F=$[z];F.isNode()||(F.parallelEdges().clearTraversalCache(),F.source().clearTraversalCache(),F.target().clearTraversalCache())}var V;n.hasCompoundNodes?V=i.collection().merge($).merge($.connectedNodes()).merge($.parent()):V=$,V.dirtyCompoundBoundsCache().dirtyBoundingBoxCache().updateStyle(t),t?$.emitAndNotify("add"):e&&$.emit("add")}return r};Ji.removed=function(){var t=this[0];return t&&t._private.removed};Ji.inside=function(){var t=this[0];return t&&!t._private.removed};Ji.remove=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,r=this,i=[],n={},a=r._private.cy;function s(D){for(var N=D._private.edges,R=0;R0&&(t?I.emitAndNotify("remove"):e&&I.emit("remove"));for(var A=0;Af&&Math.abs(g.v)>f;);return p?function(y){return u[y*(u.length-1)|0]}:h},"springRK4Factory")})(),Zi=o(function(e,r,i,n){var a=att(e,r,i,n);return function(s,l,u){return s+(l-s)*a(u)}},"cubicBezier"),aS={linear:o(function(e,r,i){return e+(r-e)*i},"linear"),ease:Zi(.25,.1,.25,1),"ease-in":Zi(.42,0,1,1),"ease-out":Zi(0,0,.58,1),"ease-in-out":Zi(.42,0,.58,1),"ease-in-sine":Zi(.47,0,.745,.715),"ease-out-sine":Zi(.39,.575,.565,1),"ease-in-out-sine":Zi(.445,.05,.55,.95),"ease-in-quad":Zi(.55,.085,.68,.53),"ease-out-quad":Zi(.25,.46,.45,.94),"ease-in-out-quad":Zi(.455,.03,.515,.955),"ease-in-cubic":Zi(.55,.055,.675,.19),"ease-out-cubic":Zi(.215,.61,.355,1),"ease-in-out-cubic":Zi(.645,.045,.355,1),"ease-in-quart":Zi(.895,.03,.685,.22),"ease-out-quart":Zi(.165,.84,.44,1),"ease-in-out-quart":Zi(.77,0,.175,1),"ease-in-quint":Zi(.755,.05,.855,.06),"ease-out-quint":Zi(.23,1,.32,1),"ease-in-out-quint":Zi(.86,0,.07,1),"ease-in-expo":Zi(.95,.05,.795,.035),"ease-out-expo":Zi(.19,1,.22,1),"ease-in-out-expo":Zi(1,0,0,1),"ease-in-circ":Zi(.6,.04,.98,.335),"ease-out-circ":Zi(.075,.82,.165,1),"ease-in-out-circ":Zi(.785,.135,.15,.86),spring:o(function(e,r,i){if(i===0)return aS.linear;var n=stt(e,r,i);return function(a,s,l){return a+(s-a)*n(l)}},"spring"),"cubic-bezier":Zi};o(Ome,"getEasedValue");o(Pme,"getValue");o(ry,"ease");o(ott,"step$1");o(Hb,"valid");o(ltt,"startAnimation");o(Bme,"stepAll");ctt={animate:_i.animate(),animation:_i.animation(),animated:_i.animated(),clearQueue:_i.clearQueue(),delay:_i.delay(),delayAnimation:_i.delayAnimation(),stop:_i.stop(),addToAnimationPool:o(function(e){var r=this;r.styleEnabled()&&r._private.aniEles.merge(e)},"addToAnimationPool"),stopAnimationLoop:o(function(){this._private.animationsRunning=!1},"stopAnimationLoop"),startAnimationLoop:o(function(){var e=this;if(e._private.animationsRunning=!0,!e.styleEnabled())return;function r(){e._private.animationsRunning&&dS(o(function(a){Bme(a,e),r()},"animationStep"))}o(r,"headlessStep");var i=e.renderer();i&&i.beforeRender?i.beforeRender(o(function(a,s){Bme(s,e)},"rendererAnimationStep"),i.beforeRenderPriorities.animations):r()},"startAnimationLoop")},utt={qualifierCompare:o(function(e,r){return e==null||r==null?e==null&&r==null:e.sameText(r)},"qualifierCompare"),eventMatches:o(function(e,r,i){var n=r.qualifier;return n!=null?e!==i.target&&dT(i.target)&&n.matches(i.target):!0},"eventMatches"),addEventFields:o(function(e,r){r.cy=e,r.target=e},"addEventFields"),callbackContext:o(function(e,r,i){return r.qualifier!=null?i.target:e},"callbackContext")},KE=o(function(e){return lr(e)?new Pd(e):e},"argSelector"),g1e={createEmitter:o(function(){var e=this._private;return e.emitter||(e.emitter=new OS(utt,this)),this},"createEmitter"),emitter:o(function(){return this._private.emitter},"emitter"),on:o(function(e,r,i){return this.emitter().on(e,KE(r),i),this},"on"),removeListener:o(function(e,r,i){return this.emitter().removeListener(e,KE(r),i),this},"removeListener"),removeAllListeners:o(function(){return this.emitter().removeAllListeners(),this},"removeAllListeners"),one:o(function(e,r,i){return this.emitter().one(e,KE(r),i),this},"one"),once:o(function(e,r,i){return this.emitter().one(e,KE(r),i),this},"once"),emit:o(function(e,r){return this.emitter().emit(e,r),this},"emit"),emitAndNotify:o(function(e,r){return this.emit(e),this.notify(e,r),this},"emitAndNotify")};_i.eventAliasesOn(g1e);MB={png:o(function(e){var r=this._private.renderer;return e=e||{},r.png(e)},"png"),jpg:o(function(e){var r=this._private.renderer;return e=e||{},e.bg=e.bg||"#fff",r.jpg(e)},"jpg")};MB.jpeg=MB.jpg;sS={layout:o(function(e){var r=this;if(e==null){mn("Layout options must be specified to make a layout");return}if(e.name==null){mn("A `name` must be specified to make a layout");return}var i=e.name,n=r.extension("layout",i);if(n==null){mn("No such layout `"+i+"` found. Did you forget to import it and `cytoscape.use()` it?");return}var a;lr(e.eles)?a=r.$(e.eles):a=e.eles!=null?e.eles:r.$();var s=new n(yr({},e,{cy:r,eles:a}));return s},"layout")};sS.createLayout=sS.makeLayout=sS.layout;htt={notify:o(function(e,r){var i=this._private;if(this.batching()){i.batchNotifications=i.batchNotifications||{};var n=i.batchNotifications[e]=i.batchNotifications[e]||this.collection();r!=null&&n.merge(r);return}if(i.notificationsEnabled){var a=this.renderer();this.destroyed()||!a||a.notify(e,r)}},"notify"),notifications:o(function(e){var r=this._private;return e===void 0?r.notificationsEnabled:(r.notificationsEnabled=!!e,this)},"notifications"),noNotifications:o(function(e){this.notifications(!1),e(),this.notifications(!0)},"noNotifications"),batching:o(function(){return this._private.batchCount>0},"batching"),startBatch:o(function(){var e=this._private;return e.batchCount==null&&(e.batchCount=0),e.batchCount===0&&(e.batchStyleEles=this.collection(),e.batchNotifications={}),e.batchCount++,this},"startBatch"),endBatch:o(function(){var e=this._private;if(e.batchCount===0)return this;if(e.batchCount--,e.batchCount===0){e.batchStyleEles.updateStyle();var r=this.renderer();Object.keys(e.batchNotifications).forEach(function(i){var n=e.batchNotifications[i];n.empty()?r.notify(i):r.notify(i,n)})}return this},"endBatch"),batch:o(function(e){return this.startBatch(),e(),this.endBatch(),this},"batch"),batchData:o(function(e){var r=this;return this.batch(function(){for(var i=Object.keys(e),n=0;n0;)r.removeChild(r.childNodes[0]);e._private.renderer=null,e.mutableElements().forEach(function(i){var n=i._private;n.rscratch={},n.rstyle={},n.animation.current=[],n.animation.queue=[]})},"destroyRenderer"),onRender:o(function(e){return this.on("render",e)},"onRender"),offRender:o(function(e){return this.off("render",e)},"offRender")};OB.invalidateDimensions=OB.resize;oS={collection:o(function(e,r){return lr(e)?this.$(e):il(e)?e.collection():qi(e)?(r||(r={}),new ts(this,e,r.unique,r.removed)):new ts(this)},"collection"),nodes:o(function(e){var r=this.$(function(i){return i.isNode()});return e?r.filter(e):r},"nodes"),edges:o(function(e){var r=this.$(function(i){return i.isEdge()});return e?r.filter(e):r},"edges"),$:o(function(e){var r=this._private.elements;return e?r.filter(e):r.spawnSelf()},"$"),mutableElements:o(function(){return this._private.elements},"mutableElements")};oS.elements=oS.filter=oS.$;Pa={},Jb="t",dtt="f";Pa.apply=function(t){for(var e=this,r=e._private,i=r.cy,n=i.collection(),a=0;a0;if(p||d&&m){var g=void 0;p&&m||p?g=h.properties:m&&(g=h.mappedProperties);for(var y=0;y1&&(w=1),l.color){var C=i.valueMin[0],E=i.valueMax[0],S=i.valueMin[1],L=i.valueMax[1],M=i.valueMin[2],I=i.valueMax[2],A=i.valueMin[3]==null?1:i.valueMin[3],_=i.valueMax[3]==null?1:i.valueMax[3],D=[Math.round(C+(E-C)*w),Math.round(S+(L-S)*w),Math.round(M+(I-M)*w),Math.round(A+(_-A)*w)];a={bypass:i.bypass,name:i.name,value:D,strValue:"rgb("+D[0]+", "+D[1]+", "+D[2]+")"}}else if(l.number){var N=i.valueMin+(i.valueMax-i.valueMin)*w;a=this.parse(i.name,N,i.bypass,p)}else return!1;if(!a)return y(),!1;a.mapping=i,i=a;break}case s.data:{for(var R=i.field.split("."),B=d.data,O=0;O0&&a>0){for(var l={},u=!1,h=0;h0?t.delayAnimation(s).play().promise().then(T):T()}).then(function(){return t.animation({style:l,duration:a,easing:t.pstyle("transition-timing-function").value,queue:!1}).play().promise()}).then(function(){r.removeBypasses(t,n),t.emitAndNotify("style"),i.transitioning=!1})}else i.transitioning&&(this.removeBypasses(t,n),t.emitAndNotify("style"),i.transitioning=!1)};Pa.checkTrigger=function(t,e,r,i,n,a){var s=this.properties[e],l=n(s);t.removed()||l!=null&&l(r,i,t)&&a(s)};Pa.checkZOrderTrigger=function(t,e,r,i){var n=this;this.checkTrigger(t,e,r,i,function(a){return a.triggersZOrder},function(){n._private.cy.notify("zorder",t)})};Pa.checkBoundsTrigger=function(t,e,r,i){this.checkTrigger(t,e,r,i,function(n){return n.triggersBounds},function(n){t.dirtyCompoundBoundsCache(),t.dirtyBoundingBoxCache()})};Pa.checkConnectedEdgesBoundsTrigger=function(t,e,r,i){this.checkTrigger(t,e,r,i,function(n){return n.triggersBoundsOfConnectedEdges},function(n){t.connectedEdges().forEach(function(a){a.dirtyBoundingBoxCache()})})};Pa.checkParallelEdgesBoundsTrigger=function(t,e,r,i){this.checkTrigger(t,e,r,i,function(n){return n.triggersBoundsOfParallelEdges},function(n){t.parallelEdges().forEach(function(a){a.dirtyBoundingBoxCache()})})};Pa.checkTriggers=function(t,e,r,i){t.dirtyStyleCache(),this.checkZOrderTrigger(t,e,r,i),this.checkBoundsTrigger(t,e,r,i),this.checkConnectedEdgesBoundsTrigger(t,e,r,i),this.checkParallelEdgesBoundsTrigger(t,e,r,i)};bT={};bT.applyBypass=function(t,e,r,i){var n=this,a=[],s=!0;if(e==="*"||e==="**"){if(r!==void 0)for(var l=0;ln.length?i=i.substr(n.length):i=""}o(l,"removeSelAndBlockFromRemaining");function u(){a.length>s.length?a=a.substr(s.length):a=""}for(o(u,"removePropAndValFromRem");;){var h=i.match(/^\s*$/);if(h)break;var f=i.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/);if(!f){Di("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: "+i);break}n=f[0];var d=f[1];if(d!=="core"){var p=new Pd(d);if(p.invalid){Di("Skipping parsing of block: Invalid selector found in string stylesheet: "+d),l();continue}}var m=f[2],g=!1;a=m;for(var y=[];;){var v=a.match(/^\s*$/);if(v)break;var x=a.match(/^\s*(.+?)\s*:\s*(.+?)(?:\s*;|\s*$)/);if(!x){Di("Skipping parsing of block: Invalid formatting of style property and value definitions found in:"+m),g=!0;break}s=x[0];var b=x[1],T=x[2],w=e.properties[b];if(!w){Di("Skipping property: Invalid property name in: "+s),u();continue}var k=r.parse(b,T);if(!k){Di("Skipping property: Invalid property definition in: "+s),u();continue}y.push({name:b,val:T}),u()}if(g){l();break}r.selector(d);for(var C=0;C=7&&e[0]==="d"&&(f=new RegExp(l.data.regex).exec(e))){if(r)return!1;var p=l.data;return{name:t,value:f,strValue:""+e,mapped:p,field:f[1],bypass:r}}else if(e.length>=10&&e[0]==="m"&&(d=new RegExp(l.mapData.regex).exec(e))){if(r||h.multiple)return!1;var m=l.mapData;if(!(h.color||h.number))return!1;var g=this.parse(t,d[4]);if(!g||g.mapped)return!1;var y=this.parse(t,d[5]);if(!y||y.mapped)return!1;if(g.pfValue===y.pfValue||g.strValue===y.strValue)return Di("`"+t+": "+e+"` is not a valid mapper because the output range is zero; converting to `"+t+": "+g.strValue+"`"),this.parse(t,g.strValue);if(h.color){var v=g.value,x=y.value,b=v[0]===x[0]&&v[1]===x[1]&&v[2]===x[2]&&(v[3]===x[3]||(v[3]==null||v[3]===1)&&(x[3]==null||x[3]===1));if(b)return!1}return{name:t,value:d,strValue:""+e,mapped:m,field:d[1],fieldMin:parseFloat(d[2]),fieldMax:parseFloat(d[3]),valueMin:g.value,valueMax:y.value,bypass:r}}}if(h.multiple&&i!=="multiple"){var T;if(u?T=e.split(/\s+/):qi(e)?T=e:T=[e],h.evenMultiple&&T.length%2!==0)return null;for(var w=[],k=[],C=[],E="",S=!1,L=0;L0?" ":"")+M.strValue}return h.validate&&!h.validate(w,k)?null:h.singleEnum&&S?w.length===1&&lr(w[0])?{name:t,value:w[0],strValue:w[0],bypass:r}:null:{name:t,value:w,pfValue:C,strValue:E,bypass:r,units:k}}var I=o(function(){for(var J=0;Jh.max||h.strictMax&&e===h.max))return null;var R={name:t,value:e,strValue:""+e+(A||""),units:A,bypass:r};return h.unitless||A!=="px"&&A!=="em"?R.pfValue=e:R.pfValue=A==="px"||!A?e:this.getEmSizeInPixels()*e,(A==="ms"||A==="s")&&(R.pfValue=A==="ms"?e:1e3*e),(A==="deg"||A==="rad")&&(R.pfValue=A==="rad"?e:lZe(e)),A==="%"&&(R.pfValue=e/100),R}else if(h.propList){var B=[],O=""+e;if(O!=="none"){for(var $=O.split(/\s*,\s*|\s+/),z=0;z<$.length;z++){var F=$[z].trim();n.properties[F]?B.push(F):Di("`"+F+"` is not a valid property name")}if(B.length===0)return null}return{name:t,value:B,strValue:B.length===0?"none":B.join(" "),bypass:r}}else if(h.color){var V=xge(e);return V?{name:t,value:V,pfValue:V,strValue:"rgb("+V[0]+","+V[1]+","+V[2]+")",bypass:r}:null}else if(h.regex||h.regexes){if(h.enums){var H=I();if(H)return H}for(var X=h.regexes?h.regexes:[h.regex],W=0;W0&&l>0&&!isNaN(i.w)&&!isNaN(i.h)&&i.w>0&&i.h>0){u=Math.min((s-2*r)/i.w,(l-2*r)/i.h),u=u>this._private.maxZoom?this._private.maxZoom:u,u=u=i.minZoom&&(i.maxZoom=r),this},"zoomRange"),minZoom:o(function(e){return e===void 0?this._private.minZoom:this.zoomRange({min:e})},"minZoom"),maxZoom:o(function(e){return e===void 0?this._private.maxZoom:this.zoomRange({max:e})},"maxZoom"),getZoomedViewport:o(function(e){var r=this._private,i=r.pan,n=r.zoom,a,s,l=!1;if(r.zoomingEnabled||(l=!0),Mt(e)?s=e:si(e)&&(s=e.level,e.position!=null?a=_S(e.position,n,i):e.renderedPosition!=null&&(a=e.renderedPosition),a!=null&&!r.panningEnabled&&(l=!0)),s=s>r.maxZoom?r.maxZoom:s,s=sr.maxZoom||!r.zoomingEnabled?s=!0:(r.zoom=u,a.push("zoom"))}if(n&&(!s||!e.cancelOnFailedZoom)&&r.panningEnabled){var h=e.pan;Mt(h.x)&&(r.pan.x=h.x,l=!1),Mt(h.y)&&(r.pan.y=h.y,l=!1),l||a.push("pan")}return a.length>0&&(a.push("viewport"),this.emit(a.join(" ")),this.notify("viewport")),this},"viewport"),center:o(function(e){var r=this.getCenterPan(e);return r&&(this._private.pan=r,this.emit("pan viewport"),this.notify("viewport")),this},"center"),getCenterPan:o(function(e,r){if(this._private.panningEnabled){if(lr(e)){var i=e;e=this.mutableElements().filter(i)}else il(e)||(e=this.mutableElements());if(e.length!==0){var n=e.boundingBox(),a=this.width(),s=this.height();r=r===void 0?this._private.zoom:r;var l={x:(a-r*(n.x1+n.x2))/2,y:(s-r*(n.y1+n.y2))/2};return l}}},"getCenterPan"),reset:o(function(){return!this._private.panningEnabled||!this._private.zoomingEnabled?this:(this.viewport({pan:{x:0,y:0},zoom:1}),this)},"reset"),invalidateSize:o(function(){this._private.sizeCache=null},"invalidateSize"),size:o(function(){var e=this._private,r=e.container,i=this;return e.sizeCache=e.sizeCache||(r?(function(){var n=i.window().getComputedStyle(r),a=o(function(l){return parseFloat(n.getPropertyValue(l))},"val");return{width:r.clientWidth-a("padding-left")-a("padding-right"),height:r.clientHeight-a("padding-top")-a("padding-bottom")}})():{width:1,height:1})},"size"),width:o(function(){return this.size().width},"width"),height:o(function(){return this.size().height},"height"),extent:o(function(){var e=this._private.pan,r=this._private.zoom,i=this.renderedExtent(),n={x1:(i.x1-e.x)/r,x2:(i.x2-e.x)/r,y1:(i.y1-e.y)/r,y2:(i.y2-e.y)/r};return n.w=n.x2-n.x1,n.h=n.y2-n.y1,n},"extent"),renderedExtent:o(function(){var e=this.width(),r=this.height();return{x1:0,y1:0,x2:e,y2:r,w:e,h:r}},"renderedExtent"),multiClickDebounceTime:o(function(e){if(e)this._private.multiClickDebounceTime=e;else return this._private.multiClickDebounceTime;return this},"multiClickDebounceTime")};rm.centre=rm.center;rm.autolockNodes=rm.autolock;rm.autoungrabifyNodes=rm.autoungrabify;cT={data:_i.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeData:_i.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),scratch:_i.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:_i.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0})};cT.attr=cT.data;cT.removeAttr=cT.removeData;uT=o(function(e){var r=this;e=yr({},e);var i=e.container;i&&!fS(i)&&fS(i[0])&&(i=i[0]);var n=i?i._cyreg:null;n=n||{},n&&n.cy&&(n.cy.destroy(),n={});var a=n.readies=n.readies||[];i&&(i._cyreg=n),n.cy=r;var s=fa!==void 0&&i!==void 0&&!e.headless,l=e;l.layout=yr({name:s?"grid":"null"},l.layout),l.renderer=yr({name:s?"canvas":"null"},l.renderer);var u=o(function(g,y,v){return y!==void 0?y:v!==void 0?v:g},"defVal"),h=this._private={container:i,ready:!1,options:l,elements:new ts(this),listeners:[],aniEles:new ts(this),data:l.data||{},scratch:{},layout:null,renderer:null,destroyed:!1,notificationsEnabled:!0,minZoom:1e-50,maxZoom:1e50,zoomingEnabled:u(!0,l.zoomingEnabled),userZoomingEnabled:u(!0,l.userZoomingEnabled),panningEnabled:u(!0,l.panningEnabled),userPanningEnabled:u(!0,l.userPanningEnabled),boxSelectionEnabled:u(!0,l.boxSelectionEnabled),autolock:u(!1,l.autolock,l.autolockNodes),autoungrabify:u(!1,l.autoungrabify,l.autoungrabifyNodes),autounselectify:u(!1,l.autounselectify),styleEnabled:l.styleEnabled===void 0?s:l.styleEnabled,zoom:Mt(l.zoom)?l.zoom:1,pan:{x:si(l.pan)&&Mt(l.pan.x)?l.pan.x:0,y:si(l.pan)&&Mt(l.pan.y)?l.pan.y:0},animation:{current:[],queue:[]},hasCompoundNodes:!1,multiClickDebounceTime:u(250,l.multiClickDebounceTime)};this.createEmitter(),this.selectionType(l.selectionType),this.zoomRange({min:l.minZoom,max:l.maxZoom});var f=o(function(g,y){var v=g.some(rQe);if(v)return xy.all(g).then(y);y(g)},"loadExtData");h.styleEnabled&&r.setStyle([]);var d=yr({},l,l.renderer);r.initRenderer(d);var p=o(function(g,y,v){r.notifications(!1);var x=r.mutableElements();x.length>0&&x.remove(),g!=null&&(si(g)||qi(g))&&r.add(g),r.one("layoutready",function(T){r.notifications(!0),r.emit(T),r.one("load",y),r.emitAndNotify("load")}).one("layoutstop",function(){r.one("done",v),r.emit("done")});var b=yr({},r._private.options.layout);b.eles=r.elements(),r.layout(b).run()},"setElesAndLayout");f([l.style,l.elements],function(m){var g=m[0],y=m[1];h.styleEnabled&&r.style().append(g),p(y,function(){r.startAnimationLoop(),h.ready=!0,An(l.ready)&&r.on("ready",l.ready);for(var v=0;v0,l=!!t.boundingBox,u=Us(l?t.boundingBox:structuredClone(e.extent())),h;if(il(t.roots))h=t.roots;else if(qi(t.roots)){for(var f=[],d=0;d0;){var D=_(),N=L(D,I);if(N)D.outgoers().filter(function(De){return De.isNode()&&r.has(De)}).forEach(A);else if(N===null){Di("Detected double maximal shift for node `"+D.id()+"`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.");break}}}var R=0;if(t.avoidOverlap)for(var B=0;B0&&x[0].length<=3?Fe/2:0),qe=2*Math.PI/x[Je].length*Ce;return Je===0&&x[0].length===1&&(Ue=1),{x:te.x+Ue*Math.cos(qe),y:te.y+Ue*Math.sin(qe)}}else{var Me=x[Je].length,He=Math.max(Me===1?0:l?(u.w-t.padding*2-be.w)/((t.grid?Ee:Me)-1):(u.w-t.padding*2-be.w)/((t.grid?Ee:Me)+1),R),K={x:te.x+(Ce+1-(Me+1)/2)*He,y:te.y+(Je+1-(W+1)/2)*de};return K}},"getPositionTopBottom"),we={downward:0,leftward:90,upward:180,rightward:-90};Object.keys(we).indexOf(t.direction)===-1&&mn("Invalid direction '".concat(t.direction,"' specified for breadthfirst layout. Valid values are: ").concat(Object.keys(we).join(", ")));var Te=o(function($e){return RQe(Ne($e),u,we[t.direction])},"getPosition");return r.nodes().layoutPositions(this,t,Te),this};vtt={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,radius:void 0,startAngle:3/2*Math.PI,sweep:void 0,clockwise:!0,sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")};o(v1e,"CircleLayout");v1e.prototype.run=function(){var t=this.options,e=t,r=t.cy,i=e.eles,n=e.counterclockwise!==void 0?!e.counterclockwise:e.clockwise,a=i.nodes().not(":parent");e.sort&&(a=a.sort(e.sort));for(var s=Us(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()}),l={x:s.x1+s.w/2,y:s.y1+s.h/2},u=e.sweep===void 0?2*Math.PI-2*Math.PI/a.length:e.sweep,h=u/Math.max(1,a.length-1),f,d=0,p=0;p1&&e.avoidOverlap){d*=1.75;var x=Math.cos(h)-Math.cos(0),b=Math.sin(h)-Math.sin(0),T=Math.sqrt(d*d/(x*x+b*b));f=Math.max(T,f)}var w=o(function(C,E){var S=e.startAngle+E*h*(n?1:-1),L=f*Math.cos(S),M=f*Math.sin(S),I={x:l.x+L,y:l.y+M};return I},"getPos");return i.nodes().layoutPositions(this,e,w),this};xtt={fit:!0,padding:30,startAngle:3/2*Math.PI,sweep:void 0,clockwise:!0,equidistant:!1,minNodeSpacing:10,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,height:void 0,width:void 0,spacingFactor:void 0,concentric:o(function(e){return e.degree()},"concentric"),levelWidth:o(function(e){return e.maxDegree()/4},"levelWidth"),animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")};o(x1e,"ConcentricLayout");x1e.prototype.run=function(){for(var t=this.options,e=t,r=e.counterclockwise!==void 0?!e.counterclockwise:e.clockwise,i=t.cy,n=e.eles,a=n.nodes().not(":parent"),s=Us(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:i.width(),h:i.height()}),l={x:s.x1+s.w/2,y:s.y1+s.h/2},u=[],h=0,f=0;f0){var k=Math.abs(b[0].value-w.value);k>=v&&(b=[],x.push(b))}b.push(w)}var C=h+e.minNodeSpacing;if(!e.avoidOverlap){var E=x.length>0&&x[0].length>1,S=Math.min(s.w,s.h)/2-C,L=S/(x.length+E?1:0);C=Math.min(C,L)}for(var M=0,I=0;I1&&e.avoidOverlap){var N=Math.cos(D)-Math.cos(0),R=Math.sin(D)-Math.sin(0),B=Math.sqrt(C*C/(N*N+R*R));M=Math.max(B,M)}A.r=M,M+=C}if(e.equidistant){for(var O=0,$=0,z=0;z=t.numIter||(Stt(i,t),i.temperature=i.temperature*t.coolingFactor,i.temperature=t.animationThreshold&&a(),dS(f)}},"frame");f()}else{for(;h;)h=s(u),u++;zme(i,t),l()}return this};zS.prototype.stop=function(){return this.stopped=!0,this.thread&&this.thread.stop(),this.emit("layoutstop"),this};zS.prototype.destroy=function(){return this.thread&&this.thread.stop(),this};Ttt=o(function(e,r,i){for(var n=i.eles.edges(),a=i.eles.nodes(),s=Us(i.boundingBox?i.boundingBox:{x1:0,y1:0,w:e.width(),h:e.height()}),l={isCompound:e.hasCompoundNodes(),layoutNodes:[],idToIndex:{},nodeSize:a.size(),graphSet:[],indexToGraph:[],layoutEdges:[],edgeSize:n.size(),temperature:i.initialTemp,clientWidth:s.w,clientHeight:s.h,boundingBox:s},u=i.eles.components(),h={},f=0;f0){l.graphSet.push(S);for(var f=0;fn.count?0:n.graph},"findLCA"),b1e=o(function(e,r,i,n){var a=n.graphSet[i];if(-10)var d=n.nodeOverlap*f,p=Math.sqrt(l*l+u*u),m=d*l/p,g=d*u/p;else var y=bS(e,l,u),v=bS(r,-1*l,-1*u),x=v.x-y.x,b=v.y-y.y,T=x*x+b*b,p=Math.sqrt(T),d=(e.nodeRepulsion+r.nodeRepulsion)/T,m=d*x/p,g=d*b/p;e.isLocked||(e.offsetX-=m,e.offsetY-=g),r.isLocked||(r.offsetX+=m,r.offsetY+=g)}},"nodeRepulsion"),Dtt=o(function(e,r,i,n){if(i>0)var a=e.maxX-r.minX;else var a=r.maxX-e.minX;if(n>0)var s=e.maxY-r.minY;else var s=r.maxY-e.minY;return a>=0&&s>=0?Math.sqrt(a*a+s*s):0},"nodesOverlap"),bS=o(function(e,r,i){var n=e.positionX,a=e.positionY,s=e.height||1,l=e.width||1,u=i/r,h=s/l,f={};return r===0&&0i?(f.x=n,f.y=a+s/2,f):0r&&-1*h<=u&&u<=h?(f.x=n-l/2,f.y=a-l*i/2/r,f):0=h)?(f.x=n+s*r/2/i,f.y=a+s/2,f):(0>i&&(u<=-1*h||u>=h)&&(f.x=n-s*r/2/i,f.y=a-s/2),f)},"findClippingPoint"),Ltt=o(function(e,r){for(var i=0;ii){var v=r.gravity*m/y,x=r.gravity*g/y;p.offsetX+=v,p.offsetY+=x}}}}},"calculateGravityForces"),Ntt=o(function(e,r){var i=[],n=0,a=-1;for(i.push.apply(i,e.graphSet[0]),a+=e.graphSet[0].length;n<=a;){var s=i[n++],l=e.idToIndex[s],u=e.layoutNodes[l],h=u.children;if(0i)var a={x:i*e/n,y:i*r/n};else var a={x:e,y:r};return a},"limitForce"),k1e=o(function(e,r){var i=e.parentId;if(i!=null){var n=r.layoutNodes[r.idToIndex[i]],a=!1;if((n.maxX==null||e.maxX+n.padRight>n.maxX)&&(n.maxX=e.maxX+n.padRight,a=!0),(n.minX==null||e.minX-n.padLeftn.maxY)&&(n.maxY=e.maxY+n.padBottom,a=!0),(n.minY==null||e.minY-n.padTopx&&(g+=v+r.componentSpacing,m=0,y=0,v=0)}}},"separateComponents"),Ott={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,avoidOverlapPadding:10,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,condense:!1,rows:void 0,cols:void 0,position:o(function(e){},"position"),sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")};o(C1e,"GridLayout");C1e.prototype.run=function(){var t=this.options,e=t,r=t.cy,i=e.eles,n=i.nodes().not(":parent");e.sort&&(n=n.sort(e.sort));var a=Us(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()});if(a.h===0||a.w===0)i.nodes().layoutPositions(this,e,function(H){return{x:a.x1,y:a.y1}});else{var s=n.size(),l=Math.sqrt(s*a.h/a.w),u=Math.round(l),h=Math.round(a.w/a.h*l),f=o(function(X){if(X==null)return Math.min(u,h);var W=Math.min(u,h);W==u?u=X:h=X},"small"),d=o(function(X){if(X==null)return Math.max(u,h);var W=Math.max(u,h);W==u?u=X:h=X},"large"),p=e.rows,m=e.cols!=null?e.cols:e.columns;if(p!=null&&m!=null)u=p,h=m;else if(p!=null&&m==null)u=p,h=Math.ceil(s/u);else if(p==null&&m!=null)h=m,u=Math.ceil(s/h);else if(h*u>s){var g=f(),y=d();(g-1)*y>=s?f(g-1):(y-1)*g>=s&&d(y-1)}else for(;h*u=s?d(x+1):f(v+1)}var b=a.w/h,T=a.h/u;if(e.condense&&(b=0,T=0),e.avoidOverlap)for(var w=0;w=h&&(N=0,D++)},"moveToNextCell"),B={},O=0;O(N=kZe(t,e,R[B],R[B+1],R[B+2],R[B+3])))return v(E,N),!0}else if(L.edgeType==="bezier"||L.edgeType==="multibezier"||L.edgeType==="self"||L.edgeType==="compound"){for(var R=L.allpts,B=0;B+5(N=TZe(t,e,R[B],R[B+1],R[B+2],R[B+3],R[B+4],R[B+5])))return v(E,N),!0}for(var O=O||S.source,$=$||S.target,z=n.getArrowWidth(M,I),F=[{name:"source",x:L.arrowStartX,y:L.arrowStartY,angle:L.srcArrowAngle},{name:"target",x:L.arrowEndX,y:L.arrowEndY,angle:L.tgtArrowAngle},{name:"mid-source",x:L.midX,y:L.midY,angle:L.midsrcArrowAngle},{name:"mid-target",x:L.midX,y:L.midY,angle:L.midtgtArrowAngle}],B=0;B0&&(x(O),x($))}o(b,"checkEdge");function T(E,S,L){return _o(E,S,L)}o(T,"preprop");function w(E,S){var L=E._private,M=p,I;S?I=S+"-":I="",E.boundingBox();var A=L.labelBounds[S||"main"],_=E.pstyle(I+"label").value,D=E.pstyle("text-events").strValue==="yes";if(!(!D||!_)){var N=T(L.rscratch,"labelX",S),R=T(L.rscratch,"labelY",S),B=T(L.rscratch,"labelAngle",S),O=E.pstyle(I+"text-margin-x").pfValue,$=E.pstyle(I+"text-margin-y").pfValue,z=A.x1-M-O,F=A.x2+M-O,V=A.y1-M-$,H=A.y2+M-$;if(B){var X=Math.cos(B),W=Math.sin(B),Z=o(function(be,de){return be=be-N,de=de-R,{x:be*X-de*W+N,y:be*W+de*X+R}},"rotate"),Y=Z(z,V),ae=Z(z,H),J=Z(F,V),ee=Z(F,H),re=[Y.x+O,Y.y+$,J.x+O,J.y+$,ee.x+O,ee.y+$,ae.x+O,ae.y+$];if(Do(t,e,re))return v(E),!0}else if(Dd(A,t,e))return v(E),!0}}o(w,"checkLabel");for(var k=s.length-1;k>=0;k--){var C=s[k];C.isNode()?x(C)||w(C):b(C)||w(C)||w(C,"source")||w(C,"target")}return l};nm.getAllInBox=function(t,e,r,i){var n=this.getCachedZSortedEles().interactive,a=this.cy.zoom(),s=2/a,l=[],u=Math.min(t,r),h=Math.max(t,r),f=Math.min(e,i),d=Math.max(e,i);t=u,r=h,e=f,i=d;var p=Us({x1:t,y1:e,x2:r,y2:i}),m=[{x:p.x1,y:p.y1},{x:p.x2,y:p.y1},{x:p.x2,y:p.y2},{x:p.x1,y:p.y2}],g=[[m[0],m[1]],[m[1],m[2]],[m[2],m[3]],[m[3],m[0]]];function y(be,de,Ee){return _o(be,de,Ee)}o(y,"preprop");function v(be,de){var Ee=be._private,Ne=s,we="";be.boundingBox();var Te=Ee.labelBounds.main;if(!Te)return null;var De=y(Ee.rscratch,"labelX",de),$e=y(Ee.rscratch,"labelY",de),pe=y(Ee.rscratch,"labelAngle",de),Je=be.pstyle(we+"text-margin-x").pfValue,Ce=be.pstyle(we+"text-margin-y").pfValue,Fe=Te.x1-Ne-Je,Ue=Te.x2+Ne-Je,qe=Te.y1-Ne-Ce,Me=Te.y2+Ne-Ce;if(pe){var He=Math.cos(pe),K=Math.sin(pe),oe=o(function(ue,G){return ue=ue-De,G=G-$e,{x:ue*He-G*K+De,y:ue*K+G*He+$e}},"rotate");return[oe(Fe,qe),oe(Ue,qe),oe(Ue,Me),oe(Fe,Me)]}else return[{x:Fe,y:qe},{x:Ue,y:qe},{x:Ue,y:Me},{x:Fe,y:Me}]}o(v,"getRotatedLabelBox");function x(be,de,Ee,Ne){function we(Te,De,$e){return($e.y-Te.y)*(De.x-Te.x)>(De.y-Te.y)*($e.x-Te.x)}return o(we,"ccw"),we(be,Ee,Ne)!==we(de,Ee,Ne)&&we(be,de,Ee)!==we(be,de,Ne)}o(x,"doLinesIntersect");for(var b=0;b0?-(Math.PI-e.ang):Math.PI+e.ang},"invertVec"),Gtt=o(function(e,r,i,n,a){if(e!==Ume?Hme(r,e,Bu):ztt(Gl,Bu),Hme(r,i,Gl),qme=Bu.nx*Gl.ny-Bu.ny*Gl.nx,Wme=Bu.nx*Gl.nx-Bu.ny*-Gl.ny,Yh=Math.asin(Math.max(-1,Math.min(1,qme))),Math.abs(Yh)<1e-6){PB=r.x,BB=r.y,X0=ny=0;return}Q0=1,lS=!1,Wme<0?Yh<0?Yh=Math.PI+Yh:(Yh=Math.PI-Yh,Q0=-1,lS=!0):Yh>0&&(Q0=-1,lS=!0),r.radius!==void 0?ny=r.radius:ny=n,U0=Yh/2,QE=Math.min(Bu.len/2,Gl.len/2),a?(Ou=Math.abs(Math.cos(U0)*ny/Math.sin(U0)),Ou>QE?(Ou=QE,X0=Math.abs(Ou*Math.sin(U0)/Math.cos(U0))):X0=ny):(Ou=Math.min(QE,ny),X0=Math.abs(Ou*Math.sin(U0)/Math.cos(U0))),FB=r.x+Gl.nx*Ou,$B=r.y+Gl.ny*Ou,PB=FB-Gl.ny*X0*Q0,BB=$B+Gl.nx*X0*Q0,A1e=r.x+Bu.nx*Ou,_1e=r.y+Bu.ny*Ou,Ume=r},"calcCornerArc");o(D1e,"drawPreparedRoundCorner");o(fF,"getRoundCorner");hT=.01,Vtt=Math.sqrt(2*hT),vs={};vs.findMidptPtsEtc=function(t,e){var r=e.posPts,i=e.intersectionPts,n=e.vectorNormInverse,a,s=t.pstyle("source-endpoint"),l=t.pstyle("target-endpoint"),u=s.units!=null&&l.units!=null,h=o(function(k,C,E,S){var L=S-C,M=E-k,I=Math.sqrt(M*M+L*L);return{x:-L/I,y:M/I}},"recalcVectorNormInverse"),f=t.pstyle("edge-distances").value;switch(f){case"node-position":a=r;break;case"intersection":a=i;break;case"endpoints":{if(u){var d=this.manualEndptToPx(t.source()[0],s),p=ea(d,2),m=p[0],g=p[1],y=this.manualEndptToPx(t.target()[0],l),v=ea(y,2),x=v[0],b=v[1],T={x1:m,y1:g,x2:x,y2:b};n=h(m,g,x,b),a=T}else Di("Edge ".concat(t.id()," has edge-distances:endpoints specified without manual endpoints specified via source-endpoint and target-endpoint. Falling back on edge-distances:intersection (default).")),a=i;break}}return{midptPts:a,vectorNormInverse:n}};vs.findHaystackPoints=function(t){for(var e=0;e0?Math.max(G-se,0):Math.min(G+se,0)},"subDWH"),_=A(M,S),D=A(I,L),N=!1;b===h?x=Math.abs(_)>Math.abs(D)?n:i:b===u||b===l?(x=i,N=!0):(b===a||b===s)&&(x=n,N=!0);var R=x===i,B=R?D:_,O=R?I:M,$=JB(O),z=!1;!(N&&(w||C))&&(b===l&&O<0||b===u&&O>0||b===a&&O>0||b===s&&O<0)&&($*=-1,B=$*Math.abs(B),z=!0);var F;if(w){var V=k<0?1+k:k;F=V*B}else{var H=k<0?B:0;F=H+k*$}var X=o(function(G){return Math.abs(G)=Math.abs(B)},"getIsTooClose"),W=X(F),Z=X(Math.abs(B)-Math.abs(F)),Y=W||Z;if(Y&&!z)if(R){var ae=Math.abs(O)<=p/2,J=Math.abs(M)<=m/2;if(ae){var ee=(f.x1+f.x2)/2,re=f.y1,te=f.y2;r.segpts=[ee,re,ee,te]}else if(J){var be=(f.y1+f.y2)/2,de=f.x1,Ee=f.x2;r.segpts=[de,be,Ee,be]}else r.segpts=[f.x1,f.y2]}else{var Ne=Math.abs(O)<=d/2,we=Math.abs(I)<=g/2;if(Ne){var Te=(f.y1+f.y2)/2,De=f.x1,$e=f.x2;r.segpts=[De,Te,$e,Te]}else if(we){var pe=(f.x1+f.x2)/2,Je=f.y1,Ce=f.y2;r.segpts=[pe,Je,pe,Ce]}else r.segpts=[f.x2,f.y1]}else if(R){var Fe=f.y1+F+(v?p/2*$:0),Ue=f.x1,qe=f.x2;r.segpts=[Ue,Fe,qe,Fe]}else{var Me=f.x1+F+(v?d/2*$:0),He=f.y1,K=f.y2;r.segpts=[Me,He,Me,K]}if(r.isRound){var oe=t.pstyle("taxi-radius").value,U=t.pstyle("radius-type").value[0]==="arc-radius";r.radii=new Array(r.segpts.length/2).fill(oe),r.isArcRadius=new Array(r.segpts.length/2).fill(U)}};vs.tryToCorrectInvalidPoints=function(t,e){var r=t._private.rscratch;if(r.edgeType==="bezier"){var i=e.srcPos,n=e.tgtPos,a=e.srcW,s=e.srcH,l=e.tgtW,u=e.tgtH,h=e.srcShape,f=e.tgtShape,d=e.srcCornerRadius,p=e.tgtCornerRadius,m=e.srcRs,g=e.tgtRs,y=!Mt(r.startX)||!Mt(r.startY),v=!Mt(r.arrowStartX)||!Mt(r.arrowStartY),x=!Mt(r.endX)||!Mt(r.endY),b=!Mt(r.arrowEndX)||!Mt(r.arrowEndY),T=3,w=this.getArrowWidth(t.pstyle("width").pfValue,t.pstyle("arrow-scale").value)*this.arrowShapeWidth,k=T*w,C=em({x:r.ctrlpts[0],y:r.ctrlpts[1]},{x:r.startX,y:r.startY}),E=CO.poolIndex()){var $=B;B=O,O=$}var z=_.srcPos=B.position(),F=_.tgtPos=O.position(),V=_.srcW=B.outerWidth(),H=_.srcH=B.outerHeight(),X=_.tgtW=O.outerWidth(),W=_.tgtH=O.outerHeight(),Z=_.srcShape=r.nodeShapes[e.getNodeShape(B)],Y=_.tgtShape=r.nodeShapes[e.getNodeShape(O)],ae=_.srcCornerRadius=B.pstyle("corner-radius").value==="auto"?"auto":B.pstyle("corner-radius").pfValue,J=_.tgtCornerRadius=O.pstyle("corner-radius").value==="auto"?"auto":O.pstyle("corner-radius").pfValue,ee=_.tgtRs=O._private.rscratch,re=_.srcRs=B._private.rscratch;_.dirCounts={north:0,west:0,south:0,east:0,northwest:0,southwest:0,northeast:0,southeast:0};for(var te=0;te<_.eles.length;te++){var be=_.eles[te],de=be[0]._private.rscratch,Ee=be.pstyle("curve-style").value,Ne=Ee==="unbundled-bezier"||_d(Ee,"segments")||_d(Ee,"taxi"),we=!B.same(be.source());if(!_.calculatedIntersection&&B!==O&&(_.hasBezier||_.hasUnbundled)){_.calculatedIntersection=!0;var Te=Z.intersectLine(z.x,z.y,V,H,F.x,F.y,0,ae,re),De=_.srcIntn=Te,$e=Y.intersectLine(F.x,F.y,X,W,z.x,z.y,0,J,ee),pe=_.tgtIntn=$e,Je=_.intersectionPts={x1:Te[0],x2:$e[0],y1:Te[1],y2:$e[1]},Ce=_.posPts={x1:z.x,x2:F.x,y1:z.y,y2:F.y},Fe=$e[1]-Te[1],Ue=$e[0]-Te[0],qe=Math.sqrt(Ue*Ue+Fe*Fe);Mt(qe)&&qe>=Vtt||(qe=Math.sqrt(Math.max(Ue*Ue,hT)+Math.max(Fe*Fe,hT)));var Me=_.vector={x:Ue,y:Fe},He=_.vectorNorm={x:Me.x/qe,y:Me.y/qe},K={x:-He.y,y:He.x};_.nodesOverlap=!Mt(qe)||Y.checkPoint(Te[0],Te[1],0,X,W,F.x,F.y,J,ee)||Z.checkPoint($e[0],$e[1],0,V,H,z.x,z.y,ae,re),_.vectorNormInverse=K,D={nodesOverlap:_.nodesOverlap,dirCounts:_.dirCounts,calculatedIntersection:!0,hasBezier:_.hasBezier,hasUnbundled:_.hasUnbundled,eles:_.eles,srcPos:F,srcRs:ee,tgtPos:z,tgtRs:re,srcW:X,srcH:W,tgtW:V,tgtH:H,srcIntn:pe,tgtIntn:De,srcShape:Y,tgtShape:Z,posPts:{x1:Ce.x2,y1:Ce.y2,x2:Ce.x1,y2:Ce.y1},intersectionPts:{x1:Je.x2,y1:Je.y2,x2:Je.x1,y2:Je.y1},vector:{x:-Me.x,y:-Me.y},vectorNorm:{x:-He.x,y:-He.y},vectorNormInverse:{x:-K.x,y:-K.y}}}var oe=we?D:_;de.nodesOverlap=oe.nodesOverlap,de.srcIntn=oe.srcIntn,de.tgtIntn=oe.tgtIntn,de.isRound=Ee.startsWith("round"),n&&(B.isParent()||B.isChild()||O.isParent()||O.isChild())&&(B.parents().anySame(O)||O.parents().anySame(B)||B.same(O)&&B.isParent())?e.findCompoundLoopPoints(be,oe,te,Ne):B===O?e.findLoopPoints(be,oe,te,Ne):Ee.endsWith("segments")?e.findSegmentsPoints(be,oe):Ee.endsWith("taxi")?e.findTaxiPoints(be,oe):Ee==="straight"||!Ne&&_.eles.length%2===1&&te===Math.floor(_.eles.length/2)?e.findStraightEdgePoints(be):e.findBezierPoints(be,oe,te,Ne,we),e.findEndpoints(be),e.tryToCorrectInvalidPoints(be,oe),e.checkForInvalidEdgeWarning(be),e.storeAllpts(be),e.storeEdgeProjections(be),e.calculateArrowAngles(be),e.recalculateEdgeLabelProjections(be),e.calculateLabelAngles(be)}},"_loop"),E=0;E0){var Te=h,De=j0(Te,ly(s)),$e=j0(Te,ly(we)),pe=De;if($e2){var Je=j0(Te,{x:we[2],y:we[3]});Je0){var le=f,ke=j0(le,ly(s)),me=j0(le,ly(se)),ye=ke;if(me2){var Re=j0(le,{x:se[2],y:se[3]});Re=g||E){v={cp:w,segment:C};break}}if(v)break}var S=v.cp,L=v.segment,M=(g-x)/L.length,I=L.t1-L.t0,A=m?L.t0+I*M:L.t1-I*M;A=aT(0,A,1),e=hy(S.p0,S.p1,S.p2,A),p=Wtt(S.p0,S.p1,S.p2,A);break}case"straight":case"segments":case"haystack":{for(var _=0,D,N,R,B,O=i.allpts.length,$=0;$+3=g));$+=2);var z=g-N,F=z/D;F=aT(0,F,1),e=uZe(R,B,F),p=N1e(R,B);break}}s("labelX",d,e.x),s("labelY",d,e.y),s("labelAutoAngle",d,p)}},"calculateEndProjection");h("source"),h("target"),this.applyLabelDimensions(t)}};zu.applyLabelDimensions=function(t){this.applyPrefixedLabelDimensions(t),t.isEdge()&&(this.applyPrefixedLabelDimensions(t,"source"),this.applyPrefixedLabelDimensions(t,"target"))};zu.applyPrefixedLabelDimensions=function(t,e){var r=t._private,i=this.getLabelText(t,e),n=J0(i,t._private.labelDimsKey);if(_o(r.rscratch,"prefixedLabelDimsKey",e)!==n){jh(r.rscratch,"prefixedLabelDimsKey",e,n);var a=this.calculateLabelDimensions(t,i),s=t.pstyle("line-height").pfValue,l=t.pstyle("text-wrap").strValue,u=_o(r.rscratch,"labelWrapCachedLines",e)||[],h=l!=="wrap"?1:Math.max(u.length,1),f=a.height/h,d=f*s,p=a.width,m=a.height+(h-1)*(s-1)*f;jh(r.rstyle,"labelWidth",e,p),jh(r.rscratch,"labelWidth",e,p),jh(r.rstyle,"labelHeight",e,m),jh(r.rscratch,"labelHeight",e,m),jh(r.rscratch,"labelLineHeight",e,d)}};zu.getLabelText=function(t,e){var r=t._private,i=e?e+"-":"",n=t.pstyle(i+"label").strValue,a=t.pstyle("text-transform").value,s=o(function(H,X){return X?(jh(r.rscratch,H,e,X),X):_o(r.rscratch,H,e)},"rscratch");if(!n)return"";a=="none"||(a=="uppercase"?n=n.toUpperCase():a=="lowercase"&&(n=n.toLowerCase()));var l=t.pstyle("text-wrap").value;if(l==="wrap"){var u=s("labelKey");if(u!=null&&s("labelWrapKey")===u)return s("labelWrapCachedText");for(var h="\u200B",f=n.split(` +`),d=t.pstyle("text-max-width").pfValue,p=t.pstyle("text-overflow-wrap").value,m=p==="anywhere",g=[],y=/[\s\u200b]+|$/g,v=0;vd){var k=x.matchAll(y),C="",E=0,S=Lo(k),L;try{for(S.s();!(L=S.n()).done;){var M=L.value,I=M[0],A=x.substring(E,M.index);E=M.index+I.length;var _=C.length===0?A:C+A+I,D=this.calculateLabelDimensions(t,_),N=D.width;N<=d?C+=A+I:(C&&g.push(C),C=A+I)}}catch(V){S.e(V)}finally{S.f()}C.match(/^[\s\u200b]+$/)||g.push(C)}else g.push(x)}s("labelWrapCachedLines",g),n=s("labelWrapCachedText",g.join(` +`)),s("labelWrapKey",u)}else if(l==="ellipsis"){var R=t.pstyle("text-max-width").pfValue,B="",O="\u2026",$=!1;if(this.calculateLabelDimensions(t,n).widthR)break;B+=n[z],z===n.length-1&&($=!0)}return $||(B+=O),B}return n};zu.getLabelJustification=function(t){var e=t.pstyle("text-justification").strValue,r=t.pstyle("text-halign").strValue;if(e==="auto")if(t.isNode())switch(r){case"left":return"right";case"right":return"left";default:return"center"}else return"center";else return e};zu.calculateLabelDimensions=function(t,e){var r=this,i=r.cy.window(),n=i.document,a=0,s=t.pstyle("font-style").strValue,l=t.pstyle("font-size").pfValue,u=t.pstyle("font-family").strValue,h=t.pstyle("font-weight").strValue,f=this.labelCalcCanvas,d=this.labelCalcCanvasContext;if(!f){f=this.labelCalcCanvas=n.createElement("canvas"),d=this.labelCalcCanvasContext=f.getContext("2d");var p=f.style;p.position="absolute",p.left="-9999px",p.top="-9999px",p.zIndex="-1",p.visibility="hidden",p.pointerEvents="none"}d.font="".concat(s," ").concat(h," ").concat(l,"px ").concat(u);for(var m=0,g=0,y=e.split(` +`),v=0;v1&&arguments[1]!==void 0?arguments[1]:!0;if(e.merge(s),l)for(var u=0;u=t.desktopTapThreshold2}var ct=a(G);ut&&(t.hoverData.tapholdCancelled=!0);var Dt=o(function(){var xt=t.hoverData.dragDelta=t.hoverData.dragDelta||[];xt.length===0?(xt.push(it[0]),xt.push(it[1])):(xt[0]+=it[0],xt[1]+=it[1])},"updateDragDelta");le=!0,n(Be,["mousemove","vmousemove","tapdrag"],G,{x:Re[0],y:Re[1]});var kt=o(function(xt){return{originalEvent:G,type:xt,position:{x:Re[0],y:Re[1]}}},"makeEvent"),yt=o(function(){t.data.bgActivePosistion=void 0,t.hoverData.selecting||ke.emit(kt("boxstart")),We[4]=1,t.hoverData.selecting=!0,t.redrawHint("select",!0),t.redraw()},"goIntoBoxMode");if(t.hoverData.which===3){if(ut){var jt=kt("cxtdrag");ce?ce.emit(jt):ke.emit(jt),t.hoverData.cxtDragged=!0,(!t.hoverData.cxtOver||Be!==t.hoverData.cxtOver)&&(t.hoverData.cxtOver&&t.hoverData.cxtOver.emit(kt("cxtdragout")),t.hoverData.cxtOver=Be,Be&&Be.emit(kt("cxtdragover")))}}else if(t.hoverData.dragging){if(le=!0,ke.panningEnabled()&&ke.userPanningEnabled()){var hr;if(t.hoverData.justStartedPan){var Qt=t.hoverData.mdownPos;hr={x:(Re[0]-Qt[0])*me,y:(Re[1]-Qt[1])*me},t.hoverData.justStartedPan=!1}else hr={x:it[0]*me,y:it[1]*me};ke.panBy(hr),ke.emit(kt("dragpan")),t.hoverData.dragged=!0}Re=t.projectIntoViewport(G.clientX,G.clientY)}else if(We[4]==1&&(ce==null||ce.pannable())){if(ut){if(!t.hoverData.dragging&&ke.boxSelectionEnabled()&&(ct||!ke.panningEnabled()||!ke.userPanningEnabled()))yt();else if(!t.hoverData.selecting&&ke.panningEnabled()&&ke.userPanningEnabled()){var Er=s(ce,t.hoverData.downs);Er&&(t.hoverData.dragging=!0,t.hoverData.justStartedPan=!0,We[4]=0,t.data.bgActivePosistion=ly(ve),t.redrawHint("select",!0),t.redraw())}ce&&ce.pannable()&&ce.active()&&ce.unactivate()}}else{if(ce&&ce.pannable()&&ce.active()&&ce.unactivate(),(!ce||!ce.grabbed())&&Be!=Qe&&(Qe&&n(Qe,["mouseout","tapdragout"],G,{x:Re[0],y:Re[1]}),Be&&n(Be,["mouseover","tapdragover"],G,{x:Re[0],y:Re[1]}),t.hoverData.last=Be),ce)if(ut){if(ke.boxSelectionEnabled()&&ct)ce&&ce.grabbed()&&(x(fe),ce.emit(kt("freeon")),fe.emit(kt("free")),t.dragData.didDrag&&(ce.emit(kt("dragfreeon")),fe.emit(kt("dragfree")))),yt();else if(ce&&ce.grabbed()&&t.nodeIsDraggable(ce)){var dr=!t.dragData.didDrag;dr&&t.redrawHint("eles",!0),t.dragData.didDrag=!0,t.hoverData.draggingEles||y(fe,{inDragLayer:!0});var ir={x:0,y:0};if(Mt(it[0])&&Mt(it[1])&&(ir.x+=it[0],ir.y+=it[1],dr)){var pr=t.hoverData.dragDelta;pr&&Mt(pr[0])&&Mt(pr[1])&&(ir.x+=pr[0],ir.y+=pr[1])}t.hoverData.draggingEles=!0,fe.silentShift(ir).emit(kt("position")).emit(kt("drag")),t.redrawHint("drag",!0),t.redraw()}}else Dt();le=!0}if(We[2]=Re[0],We[3]=Re[1],le)return G.stopPropagation&&G.stopPropagation(),G.preventDefault&&G.preventDefault(),!1}},"mousemoveHandler"),!1);var A,_,D;t.registerBinding(e,"mouseup",o(function(G){if(!(t.hoverData.which===1&&G.which!==1&&t.hoverData.capture)){var se=t.hoverData.capture;if(se){t.hoverData.capture=!1;var le=t.cy,ke=t.projectIntoViewport(G.clientX,G.clientY),me=t.selection,ye=t.findNearestElement(ke[0],ke[1],!0,!1),Re=t.dragData.possibleDragElements,ve=t.hoverData.down,Oe=a(G);t.data.bgActivePosistion&&(t.redrawHint("select",!0),t.redraw()),t.hoverData.tapholdCancelled=!0,t.data.bgActivePosistion=void 0,ve&&ve.unactivate();var We=o(function(Nt){return{originalEvent:G,type:Nt,position:{x:ke[0],y:ke[1]}}},"makeEvent");if(t.hoverData.which===3){var Be=We("cxttapend");if(ve?ve.emit(Be):le.emit(Be),!t.hoverData.cxtDragged){var Qe=We("cxttap");ve?ve.emit(Qe):le.emit(Qe)}t.hoverData.cxtDragged=!1,t.hoverData.which=null}else if(t.hoverData.which===1){if(n(ye,["mouseup","tapend","vmouseup"],G,{x:ke[0],y:ke[1]}),!t.dragData.didDrag&&!t.hoverData.dragged&&!t.hoverData.selecting&&!t.hoverData.isOverThresholdDrag&&(n(ve,["click","tap","vclick"],G,{x:ke[0],y:ke[1]}),_=!1,G.timeStamp-D<=le.multiClickDebounceTime()?(A&&clearTimeout(A),_=!0,D=null,n(ve,["dblclick","dbltap","vdblclick"],G,{x:ke[0],y:ke[1]})):(A=setTimeout(function(){_||n(ve,["oneclick","onetap","voneclick"],G,{x:ke[0],y:ke[1]})},le.multiClickDebounceTime()),D=G.timeStamp)),ve==null&&!t.dragData.didDrag&&!t.hoverData.selecting&&!t.hoverData.dragged&&!a(G)&&(le.$(r).unselect(["tapunselect"]),Re.length>0&&t.redrawHint("eles",!0),t.dragData.possibleDragElements=Re=le.collection()),ye==ve&&!t.dragData.didDrag&&!t.hoverData.selecting&&ye!=null&&ye._private.selectable&&(t.hoverData.dragging||(le.selectionType()==="additive"||Oe?ye.selected()?ye.unselect(["tapunselect"]):ye.select(["tapselect"]):Oe||(le.$(r).unmerge(ye).unselect(["tapunselect"]),ye.select(["tapselect"]))),t.redrawHint("eles",!0)),t.hoverData.selecting){var ce=le.collection(t.getAllInBox(me[0],me[1],me[2],me[3]));t.redrawHint("select",!0),ce.length>0&&t.redrawHint("eles",!0),le.emit(We("boxend"));var it=o(function(Nt){return Nt.selectable()&&!Nt.selected()},"eleWouldBeSelected");le.selectionType()==="additive"||Oe||le.$(r).unmerge(ce).unselect(),ce.emit(We("box")).stdFilter(it).select().emit(We("boxselect")),t.redraw()}if(t.hoverData.dragging&&(t.hoverData.dragging=!1,t.redrawHint("select",!0),t.redrawHint("eles",!0),t.redraw()),!me[4]){t.redrawHint("drag",!0),t.redrawHint("eles",!0);var fe=ve&&ve.grabbed();x(Re),fe&&(ve.emit(We("freeon")),Re.emit(We("free")),t.dragData.didDrag&&(ve.emit(We("dragfreeon")),Re.emit(We("dragfree"))))}}me[4]=0,t.hoverData.down=null,t.hoverData.cxtStarted=!1,t.hoverData.draggingEles=!1,t.hoverData.selecting=!1,t.hoverData.isOverThresholdDrag=!1,t.dragData.didDrag=!1,t.hoverData.dragged=!1,t.hoverData.dragDelta=[],t.hoverData.mdownPos=null,t.hoverData.mdownGPos=null,t.hoverData.which=null}}},"mouseupHandler"),!1);var N=[],R=4,B,O=1e5,$=o(function(G,se){for(var le=0;le=R){var ke=N;if(B=$(ke,5),!B){var me=Math.abs(ke[0]);B=z(ke)&&me>5}if(B)for(var ye=0;ye5&&(le=JB(le)*5),Qe=le/-250,B&&(Qe/=O,Qe*=3),Qe=Qe*t.wheelSensitivity;var ce=G.deltaMode===1;ce&&(Qe*=33);var it=Re.zoom()*Math.pow(10,Qe);G.type==="gesturechange"&&(it=t.gestureStartZoom*G.scale),Re.zoom({level:it,renderedPosition:{x:Be[0],y:Be[1]}}),Re.emit({type:G.type==="gesturechange"?"pinchzoom":"scrollzoom",originalEvent:G,position:{x:We[0],y:We[1]}})}}}},"wheelHandler");t.registerBinding(t.container,"wheel",F,!0),t.registerBinding(e,"scroll",o(function(G){t.scrollingPage=!0,clearTimeout(t.scrollingPageTimeout),t.scrollingPageTimeout=setTimeout(function(){t.scrollingPage=!1},250)},"scrollHandler"),!0),t.registerBinding(t.container,"gesturestart",o(function(G){t.gestureStartZoom=t.cy.zoom(),t.hasTouchStarted||G.preventDefault()},"gestureStartHandler"),!0),t.registerBinding(t.container,"gesturechange",function(ue){t.hasTouchStarted||F(ue)},!0),t.registerBinding(t.container,"mouseout",o(function(G){var se=t.projectIntoViewport(G.clientX,G.clientY);t.cy.emit({originalEvent:G,type:"mouseout",position:{x:se[0],y:se[1]}})},"mouseOutHandler"),!1),t.registerBinding(t.container,"mouseover",o(function(G){var se=t.projectIntoViewport(G.clientX,G.clientY);t.cy.emit({originalEvent:G,type:"mouseover",position:{x:se[0],y:se[1]}})},"mouseOverHandler"),!1);var V,H,X,W,Z,Y,ae,J,ee,re,te,be,de,Ee=o(function(G,se,le,ke){return Math.sqrt((le-G)*(le-G)+(ke-se)*(ke-se))},"distance"),Ne=o(function(G,se,le,ke){return(le-G)*(le-G)+(ke-se)*(ke-se)},"distanceSq"),we;t.registerBinding(t.container,"touchstart",we=o(function(G){if(t.hasTouchStarted=!0,!!M(G)){T(),t.touchData.capture=!0,t.data.bgActivePosistion=void 0;var se=t.cy,le=t.touchData.now,ke=t.touchData.earlier;if(G.touches[0]){var me=t.projectIntoViewport(G.touches[0].clientX,G.touches[0].clientY);le[0]=me[0],le[1]=me[1]}if(G.touches[1]){var me=t.projectIntoViewport(G.touches[1].clientX,G.touches[1].clientY);le[2]=me[0],le[3]=me[1]}if(G.touches[2]){var me=t.projectIntoViewport(G.touches[2].clientX,G.touches[2].clientY);le[4]=me[0],le[5]=me[1]}var ye=o(function(ct){return{originalEvent:G,type:ct,position:{x:le[0],y:le[1]}}},"makeEvent");if(G.touches[1]){t.touchData.singleTouchMoved=!0,x(t.dragData.touchDragEles);var Re=t.findContainerClientCoords();ee=Re[0],re=Re[1],te=Re[2],be=Re[3],V=G.touches[0].clientX-ee,H=G.touches[0].clientY-re,X=G.touches[1].clientX-ee,W=G.touches[1].clientY-re,de=0<=V&&V<=te&&0<=X&&X<=te&&0<=H&&H<=be&&0<=W&&W<=be;var ve=se.pan(),Oe=se.zoom();Z=Ee(V,H,X,W),Y=Ne(V,H,X,W),ae=[(V+X)/2,(H+W)/2],J=[(ae[0]-ve.x)/Oe,(ae[1]-ve.y)/Oe];var We=200,Be=We*We;if(Y=1){for(var Pt=t.touchData.startPosition=[null,null,null,null,null,null],St=0;St=t.touchTapThreshold2}if(se&&t.touchData.cxt){G.preventDefault();var St=G.touches[0].clientX-ee,It=G.touches[0].clientY-re,ot=G.touches[1].clientX-ee,ct=G.touches[1].clientY-re,Dt=Ne(St,It,ot,ct),kt=Dt/Y,yt=150,jt=yt*yt,hr=1.5,Qt=hr*hr;if(kt>=Qt||Dt>=jt){t.touchData.cxt=!1,t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);var Er=Oe("cxttapend");t.touchData.start?(t.touchData.start.unactivate().emit(Er),t.touchData.start=null):ke.emit(Er)}}if(se&&t.touchData.cxt){var Er=Oe("cxtdrag");t.data.bgActivePosistion=void 0,t.redrawHint("select",!0),t.touchData.start?t.touchData.start.emit(Er):ke.emit(Er),t.touchData.start&&(t.touchData.start._private.grabbed=!1),t.touchData.cxtDragged=!0;var dr=t.findNearestElement(me[0],me[1],!0,!0);(!t.touchData.cxtOver||dr!==t.touchData.cxtOver)&&(t.touchData.cxtOver&&t.touchData.cxtOver.emit(Oe("cxtdragout")),t.touchData.cxtOver=dr,dr&&dr.emit(Oe("cxtdragover")))}else if(se&&G.touches[2]&&ke.boxSelectionEnabled())G.preventDefault(),t.data.bgActivePosistion=void 0,this.lastThreeTouch=+new Date,t.touchData.selecting||ke.emit(Oe("boxstart")),t.touchData.selecting=!0,t.touchData.didSelect=!0,le[4]=1,!le||le.length===0||le[0]===void 0?(le[0]=(me[0]+me[2]+me[4])/3,le[1]=(me[1]+me[3]+me[5])/3,le[2]=(me[0]+me[2]+me[4])/3+1,le[3]=(me[1]+me[3]+me[5])/3+1):(le[2]=(me[0]+me[2]+me[4])/3,le[3]=(me[1]+me[3]+me[5])/3),t.redrawHint("select",!0),t.redraw();else if(se&&G.touches[1]&&!t.touchData.didSelect&&ke.zoomingEnabled()&&ke.panningEnabled()&&ke.userZoomingEnabled()&&ke.userPanningEnabled()){G.preventDefault(),t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);var ir=t.dragData.touchDragEles;if(ir){t.redrawHint("drag",!0);for(var pr=0;pr0&&!t.hoverData.draggingEles&&!t.swipePanning&&t.data.bgActivePosistion!=null&&(t.data.bgActivePosistion=void 0,t.redrawHint("select",!0),t.redraw())}},"touchmoveHandler"),!1);var De;t.registerBinding(e,"touchcancel",De=o(function(G){var se=t.touchData.start;t.touchData.capture=!1,se&&se.unactivate()},"touchcancelHandler"));var $e,pe,Je,Ce;if(t.registerBinding(e,"touchend",$e=o(function(G){var se=t.touchData.start,le=t.touchData.capture;if(le)G.touches.length===0&&(t.touchData.capture=!1),G.preventDefault();else return;var ke=t.selection;t.swipePanning=!1,t.hoverData.draggingEles=!1;var me=t.cy,ye=me.zoom(),Re=t.touchData.now,ve=t.touchData.earlier;if(G.touches[0]){var Oe=t.projectIntoViewport(G.touches[0].clientX,G.touches[0].clientY);Re[0]=Oe[0],Re[1]=Oe[1]}if(G.touches[1]){var Oe=t.projectIntoViewport(G.touches[1].clientX,G.touches[1].clientY);Re[2]=Oe[0],Re[3]=Oe[1]}if(G.touches[2]){var Oe=t.projectIntoViewport(G.touches[2].clientX,G.touches[2].clientY);Re[4]=Oe[0],Re[5]=Oe[1]}var We=o(function(jt){return{originalEvent:G,type:jt,position:{x:Re[0],y:Re[1]}}},"makeEvent");se&&se.unactivate();var Be;if(t.touchData.cxt){if(Be=We("cxttapend"),se?se.emit(Be):me.emit(Be),!t.touchData.cxtDragged){var Qe=We("cxttap");se?se.emit(Qe):me.emit(Qe)}t.touchData.start&&(t.touchData.start._private.grabbed=!1),t.touchData.cxt=!1,t.touchData.start=null,t.redraw();return}if(!G.touches[2]&&me.boxSelectionEnabled()&&t.touchData.selecting){t.touchData.selecting=!1;var ce=me.collection(t.getAllInBox(ke[0],ke[1],ke[2],ke[3]));ke[0]=void 0,ke[1]=void 0,ke[2]=void 0,ke[3]=void 0,ke[4]=0,t.redrawHint("select",!0),me.emit(We("boxend"));var it=o(function(jt){return jt.selectable()&&!jt.selected()},"eleWouldBeSelected");ce.emit(We("box")).stdFilter(it).select().emit(We("boxselect")),ce.nonempty()&&t.redrawHint("eles",!0),t.redraw()}if(se?.unactivate(),G.touches[2])t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);else if(!G.touches[1]){if(!G.touches[0]){if(!G.touches[0]){t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);var fe=t.dragData.touchDragEles;if(se!=null){var ut=se._private.grabbed;x(fe),t.redrawHint("drag",!0),t.redrawHint("eles",!0),ut&&(se.emit(We("freeon")),fe.emit(We("free")),t.dragData.didDrag&&(se.emit(We("dragfreeon")),fe.emit(We("dragfree")))),n(se,["touchend","tapend","vmouseup","tapdragout"],G,{x:Re[0],y:Re[1]}),se.unactivate(),t.touchData.start=null}else{var Nt=t.findNearestElement(Re[0],Re[1],!0,!0);n(Nt,["touchend","tapend","vmouseup","tapdragout"],G,{x:Re[0],y:Re[1]})}var Pt=t.touchData.startPosition[0]-Re[0],St=Pt*Pt,It=t.touchData.startPosition[1]-Re[1],ot=It*It,ct=St+ot,Dt=ct*ye*ye;t.touchData.singleTouchMoved||(se||me.$(":selected").unselect(["tapunselect"]),n(se,["tap","vclick"],G,{x:Re[0],y:Re[1]}),pe=!1,G.timeStamp-Ce<=me.multiClickDebounceTime()?(Je&&clearTimeout(Je),pe=!0,Ce=null,n(se,["dbltap","vdblclick"],G,{x:Re[0],y:Re[1]})):(Je=setTimeout(function(){pe||n(se,["onetap","voneclick"],G,{x:Re[0],y:Re[1]})},me.multiClickDebounceTime()),Ce=G.timeStamp)),se!=null&&!t.dragData.didDrag&&se._private.selectable&&Dt"u"){var Fe=[],Ue=o(function(G){return{clientX:G.clientX,clientY:G.clientY,force:1,identifier:G.pointerId,pageX:G.pageX,pageY:G.pageY,radiusX:G.width/2,radiusY:G.height/2,screenX:G.screenX,screenY:G.screenY,target:G.target}},"makeTouch"),qe=o(function(G){return{event:G,touch:Ue(G)}},"makePointer"),Me=o(function(G){Fe.push(qe(G))},"addPointer"),He=o(function(G){for(var se=0;se0)return V[0]}return null},"getCurveT"),g=Object.keys(p),y=0;y0?m:Mge(a,s,e,r,i,n,l,u)},"intersectLine"),checkPoint:o(function(e,r,i,n,a,s,l,u){u=u==="auto"?Od(n,a):u;var h=2*u;if(Qh(e,r,this.points,s,l,n,a-h,[0,-1],i)||Qh(e,r,this.points,s,l,n-h,a,[0,-1],i))return!0;var f=n/2+2*i,d=a/2+2*i,p=[s-f,l-d,s-f,l,s+f,l,s+f,l-d];return!!(Do(e,r,p)||Z0(e,r,h,h,s+n/2-u,l+a/2-u,i)||Z0(e,r,h,h,s-n/2+u,l+a/2-u,i))},"checkPoint")}};Zh.registerNodeShapes=function(){var t=this.nodeShapes={},e=this;this.generateEllipse(),this.generatePolygon("triangle",Ws(3,0)),this.generateRoundPolygon("round-triangle",Ws(3,0)),this.generatePolygon("rectangle",Ws(4,0)),t.square=t.rectangle,this.generateRoundRectangle(),this.generateCutRectangle(),this.generateBarrel(),this.generateBottomRoundrectangle();{var r=[0,1,1,0,0,-1,-1,0];this.generatePolygon("diamond",r),this.generateRoundPolygon("round-diamond",r)}this.generatePolygon("pentagon",Ws(5,0)),this.generateRoundPolygon("round-pentagon",Ws(5,0)),this.generatePolygon("hexagon",Ws(6,0)),this.generateRoundPolygon("round-hexagon",Ws(6,0)),this.generatePolygon("heptagon",Ws(7,0)),this.generateRoundPolygon("round-heptagon",Ws(7,0)),this.generatePolygon("octagon",Ws(8,0)),this.generateRoundPolygon("round-octagon",Ws(8,0));var i=new Array(20);{var n=SB(5,0),a=SB(5,Math.PI/5),s=.5*(3-Math.sqrt(5));s*=1.57;for(var l=0;l=e.deqFastCost*w)break}else if(h){if(b>=e.deqCost*m||b>=e.deqAvgCost*p)break}else if(T>=e.deqNoDrawCost*yB)break;var k=e.deq(i,v,y);if(k.length>0)for(var C=0;C0&&(e.onDeqd(i,g),!h&&e.shouldRedraw(i,g,v,y)&&a())},"dequeue"),l=e.priority||KB;n.beforeRender(s,l(i))}},"setupDequeueingImpl")},"setupDequeueing")},Htt=(function(){function t(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:pS;$d(this,t),this.idsByKey=new Xh,this.keyForId=new Xh,this.cachesByLvl=new Xh,this.lvls=[],this.getKey=e,this.doesEleInvalidateKey=r}return o(t,"ElementTextureCacheLookup"),zd(t,[{key:"getIdsFor",value:o(function(r){r==null&&mn("Can not get id list for null key");var i=this.idsByKey,n=this.idsByKey.get(r);return n||(n=new vy,i.set(r,n)),n},"getIdsFor")},{key:"addIdForKey",value:o(function(r,i){r!=null&&this.getIdsFor(r).add(i)},"addIdForKey")},{key:"deleteIdForKey",value:o(function(r,i){r!=null&&this.getIdsFor(r).delete(i)},"deleteIdForKey")},{key:"getNumberOfIdsForKey",value:o(function(r){return r==null?0:this.getIdsFor(r).size},"getNumberOfIdsForKey")},{key:"updateKeyMappingFor",value:o(function(r){var i=r.id(),n=this.keyForId.get(i),a=this.getKey(r);this.deleteIdForKey(n,i),this.addIdForKey(a,i),this.keyForId.set(i,a)},"updateKeyMappingFor")},{key:"deleteKeyMappingFor",value:o(function(r){var i=r.id(),n=this.keyForId.get(i);this.deleteIdForKey(n,i),this.keyForId.delete(i)},"deleteKeyMappingFor")},{key:"keyHasChangedFor",value:o(function(r){var i=r.id(),n=this.keyForId.get(i),a=this.getKey(r);return n!==a},"keyHasChangedFor")},{key:"isInvalid",value:o(function(r){return this.keyHasChangedFor(r)||this.doesEleInvalidateKey(r)},"isInvalid")},{key:"getCachesAt",value:o(function(r){var i=this.cachesByLvl,n=this.lvls,a=i.get(r);return a||(a=new Xh,i.set(r,a),n.push(r)),a},"getCachesAt")},{key:"getCache",value:o(function(r,i){return this.getCachesAt(i).get(r)},"getCache")},{key:"get",value:o(function(r,i){var n=this.getKey(r),a=this.getCache(n,i);return a!=null&&this.updateKeyMappingFor(r),a},"get")},{key:"getForCachedKey",value:o(function(r,i){var n=this.keyForId.get(r.id()),a=this.getCache(n,i);return a},"getForCachedKey")},{key:"hasCache",value:o(function(r,i){return this.getCachesAt(i).has(r)},"hasCache")},{key:"has",value:o(function(r,i){var n=this.getKey(r);return this.hasCache(n,i)},"has")},{key:"setCache",value:o(function(r,i,n){n.key=r,this.getCachesAt(i).set(r,n)},"setCache")},{key:"set",value:o(function(r,i,n){var a=this.getKey(r);this.setCache(a,i,n),this.updateKeyMappingFor(r)},"set")},{key:"deleteCache",value:o(function(r,i){this.getCachesAt(i).delete(r)},"deleteCache")},{key:"delete",value:o(function(r,i){var n=this.getKey(r);this.deleteCache(n,i)},"_delete")},{key:"invalidateKey",value:o(function(r){var i=this;this.lvls.forEach(function(n){return i.deleteCache(r,n)})},"invalidateKey")},{key:"invalidate",value:o(function(r){var i=r.id(),n=this.keyForId.get(i);this.deleteKeyMappingFor(r);var a=this.doesEleInvalidateKey(r);return a&&this.invalidateKey(n),a||this.getNumberOfIdsForKey(n)===0},"invalidate")}])})(),Kme=25,ZE=50,cS=-4,zB=3,F1e=7.99,Ytt=8,jtt=1024,Xtt=1024,Ktt=1024,Qtt=.2,Ztt=.8,Jtt=10,ert=.15,trt=.1,rrt=.9,irt=.9,nrt=100,art=1,uy={dequeue:"dequeue",downscale:"downscale",highQuality:"highQuality"},srt=rs({getKey:null,doesEleInvalidateKey:pS,drawElement:null,getBoundingBox:null,getRotationPoint:null,getRotationOffset:null,isVisible:Age,allowEdgeTxrCaching:!0,allowParentTxrCaching:!0}),Zb=o(function(e,r){var i=this;i.renderer=e,i.onDequeues=[];var n=srt(r);yr(i,n),i.lookup=new Htt(n.getKey,n.doesEleInvalidateKey),i.setupDequeueing()},"ElementTextureCache"),ma=Zb.prototype;ma.reasons=uy;ma.getTextureQueue=function(t){var e=this;return e.eleImgCaches=e.eleImgCaches||{},e.eleImgCaches[t]=e.eleImgCaches[t]||[]};ma.getRetiredTextureQueue=function(t){var e=this,r=e.eleImgCaches.retired=e.eleImgCaches.retired||{},i=r[t]=r[t]||[];return i};ma.getElementQueue=function(){var t=this,e=t.eleCacheQueue=t.eleCacheQueue||new vT(function(r,i){return i.reqs-r.reqs});return e};ma.getElementKeyToQueue=function(){var t=this,e=t.eleKeyToCacheQueue=t.eleKeyToCacheQueue||{};return e};ma.getElement=function(t,e,r,i,n){var a=this,s=this.renderer,l=s.cy.zoom(),u=this.lookup;if(!e||e.w===0||e.h===0||isNaN(e.w)||isNaN(e.h)||!t.visible()||t.removed()||!a.allowEdgeTxrCaching&&t.isEdge()||!a.allowParentTxrCaching&&t.isParent())return null;if(i==null&&(i=Math.ceil(ZB(l*r))),i=F1e||i>zB)return null;var h=Math.pow(2,i),f=e.h*h,d=e.w*h,p=s.eleTextBiggerThanMin(t,h);if(!this.isVisible(t,p))return null;var m=u.get(t,i);if(m&&m.invalidated&&(m.invalidated=!1,m.texture.invalidatedWidth-=m.width),m)return m;var g;if(f<=Kme?g=Kme:f<=ZE?g=ZE:g=Math.ceil(f/ZE)*ZE,f>Ktt||d>Xtt)return null;var y=a.getTextureQueue(g),v=y[y.length-2],x=o(function(){return a.recycleTexture(g,d)||a.addTexture(g,d)},"addNewTxr");v||(v=y[y.length-1]),v||(v=x()),v.width-v.usedWidthi;I--)L=a.getElement(t,e,r,I,uy.downscale);M()}else return a.queueElement(t,C.level-1),C;else{var A;if(!T&&!w&&!k)for(var _=i-1;_>=cS;_--){var D=u.get(t,_);if(D){A=D;break}}if(b(A))return a.queueElement(t,i),A;v.context.translate(v.usedWidth,0),v.context.scale(h,h),this.drawElement(v.context,t,e,p,!1),v.context.scale(1/h,1/h),v.context.translate(-v.usedWidth,0)}return m={x:v.usedWidth,texture:v,level:i,scale:h,width:d,height:f,scaledLabelShown:p},v.usedWidth+=Math.ceil(d+Ytt),v.eleCaches.push(m),u.set(t,i,m),a.checkTextureFullness(v),m};ma.invalidateElements=function(t){for(var e=0;e=Qtt*t.width&&this.retireTexture(t)};ma.checkTextureFullness=function(t){var e=this,r=e.getTextureQueue(t.height);t.usedWidth/t.width>Ztt&&t.fullnessChecks>=Jtt?Md(r,t):t.fullnessChecks++};ma.retireTexture=function(t){var e=this,r=t.height,i=e.getTextureQueue(r),n=this.lookup;Md(i,t),t.retired=!0;for(var a=t.eleCaches,s=0;s=e)return s.retired=!1,s.usedWidth=0,s.invalidatedWidth=0,s.fullnessChecks=0,QB(s.eleCaches),s.context.setTransform(1,0,0,1,0,0),s.context.clearRect(0,0,s.width,s.height),Md(n,s),i.push(s),s}};ma.queueElement=function(t,e){var r=this,i=r.getElementQueue(),n=r.getElementKeyToQueue(),a=this.getKey(t),s=n[a];if(s)s.level=Math.max(s.level,e),s.eles.merge(t),s.reqs++,i.updateItem(s);else{var l={eles:t.spawn().merge(t),level:e,reqs:1,key:a};i.push(l),n[a]=l}};ma.dequeue=function(t){for(var e=this,r=e.getElementQueue(),i=e.getElementKeyToQueue(),n=[],a=e.lookup,s=0;s0;s++){var l=r.pop(),u=l.key,h=l.eles[0],f=a.hasCache(h,l.level);if(i[u]=null,f)continue;n.push(l);var d=e.getBoundingBox(h);e.getElement(h,d,t,l.level,uy.dequeue)}return n};ma.removeFromQueue=function(t){var e=this,r=e.getElementQueue(),i=e.getElementKeyToQueue(),n=this.getKey(t),a=i[n];a!=null&&(a.eles.length===1?(a.reqs=XB,r.updateItem(a),r.pop(),i[n]=null):a.eles.unmerge(t))};ma.onDequeue=function(t){this.onDequeues.push(t)};ma.offDequeue=function(t){Md(this.onDequeues,t)};ma.setupDequeueing=B1e.setupDequeueing({deqRedrawThreshold:nrt,deqCost:ert,deqAvgCost:trt,deqNoDrawCost:rrt,deqFastCost:irt,deq:o(function(e,r,i){return e.dequeue(r,i)},"deq"),onDeqd:o(function(e,r){for(var i=0;i=lrt||r>kS)return null}i.validateLayersElesOrdering(r,t);var u=i.layersByLevel,h=Math.pow(2,r),f=u[r]=u[r]||[],d,p=i.levelIsComplete(r,t),m,g=o(function(){var M=o(function(N){if(i.validateLayersElesOrdering(N,t),i.levelIsComplete(N,t))return m=u[N],!0},"canUseAsTmpLvl"),I=o(function(N){if(!m)for(var R=r+N;eT<=R&&R<=kS&&!M(R);R+=N);},"checkLvls");I(1),I(-1);for(var A=f.length-1;A>=0;A--){var _=f[A];_.invalid&&Md(f,_)}},"checkTempLevels");if(!p)g();else return f;var y=o(function(){if(!d){d=Us();for(var M=0;MZme||_>Zme)return null;var D=A*_;if(D>grt)return null;var N=i.makeLayer(d,r);if(I!=null){var R=f.indexOf(I)+1;f.splice(R,0,N)}else(M.insert===void 0||M.insert)&&f.unshift(N);return N},"makeLayer");if(i.skipping&&!l)return null;for(var x=null,b=t.length/ort,T=!l,w=0;w=b||!Ige(x.bb,k.boundingBox()))&&(x=v({insert:!0,after:x}),!x))return null;m||T?i.queueLayer(x,k):i.drawEleInLayer(x,k,r,e),x.eles.push(k),E[r]=x}return m||(T?null:f)};is.getEleLevelForLayerLevel=function(t,e){return t};is.drawEleInLayer=function(t,e,r,i){var n=this,a=this.renderer,s=t.context,l=e.boundingBox();l.w===0||l.h===0||!e.visible()||(r=n.getEleLevelForLayerLevel(r,i),a.setImgSmoothing(s,!1),a.drawCachedElement(s,e,null,null,r,yrt),a.setImgSmoothing(s,!0))};is.levelIsComplete=function(t,e){var r=this,i=r.layersByLevel[t];if(!i||i.length===0)return!1;for(var n=0,a=0;a0||s.invalid)return!1;n+=s.eles.length}return n===e.length};is.validateLayersElesOrdering=function(t,e){var r=this.layersByLevel[t];if(r)for(var i=0;i0){e=!0;break}}return e};is.invalidateElements=function(t){var e=this;t.length!==0&&(e.lastInvalidationTime=Kh(),!(t.length===0||!e.haveLayers())&&e.updateElementsInLayers(t,o(function(i,n,a){e.invalidateLayer(i)},"invalAssocLayers")))};is.invalidateLayer=function(t){if(this.lastInvalidationTime=Kh(),!t.invalid){var e=t.level,r=t.eles,i=this.layersByLevel[e];Md(i,t),t.elesQueue=[],t.invalid=!0,t.replacement&&(t.replacement.invalid=!0);for(var n=0;n3&&arguments[3]!==void 0?arguments[3]:!0,n=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,s=this,l=e._private.rscratch;if(!(a&&!e.visible())&&!(l.badLine||l.allpts==null||isNaN(l.allpts[0]))){var u;r&&(u=r,t.translate(-u.x1,-u.y1));var h=a?e.pstyle("opacity").value:1,f=a?e.pstyle("line-opacity").value:1,d=e.pstyle("curve-style").value,p=e.pstyle("line-style").value,m=e.pstyle("width").pfValue,g=e.pstyle("line-cap").value,y=e.pstyle("line-outline-width").value,v=e.pstyle("line-outline-color").value,x=h*f,b=h*f,T=o(function(){var N=arguments.length>0&&arguments[0]!==void 0?arguments[0]:x;d==="straight-triangle"?(s.eleStrokeStyle(t,e,N),s.drawEdgeTrianglePath(e,t,l.allpts)):(t.lineWidth=m,t.lineCap=g,s.eleStrokeStyle(t,e,N),s.drawEdgePath(e,t,l.allpts,p),t.lineCap="butt")},"drawLine"),w=o(function(){var N=arguments.length>0&&arguments[0]!==void 0?arguments[0]:x;if(t.lineWidth=m+y,t.lineCap=g,y>0)s.colorStrokeStyle(t,v[0],v[1],v[2],N);else{t.lineCap="butt";return}d==="straight-triangle"?s.drawEdgeTrianglePath(e,t,l.allpts):(s.drawEdgePath(e,t,l.allpts,p),t.lineCap="butt")},"drawLineOutline"),k=o(function(){n&&s.drawEdgeOverlay(t,e)},"drawOverlay"),C=o(function(){n&&s.drawEdgeUnderlay(t,e)},"drawUnderlay"),E=o(function(){var N=arguments.length>0&&arguments[0]!==void 0?arguments[0]:b;s.drawArrowheads(t,e,N)},"drawArrows"),S=o(function(){s.drawElementText(t,e,null,i)},"drawText");t.lineJoin="round";var L=e.pstyle("ghost").value==="yes";if(L){var M=e.pstyle("ghost-offset-x").pfValue,I=e.pstyle("ghost-offset-y").pfValue,A=e.pstyle("ghost-opacity").value,_=x*A;t.translate(M,I),T(_),E(_),t.translate(-M,-I)}else w();C(),T(),E(),k(),S(),r&&t.translate(u.x1,u.y1)}};G1e=o(function(e){if(!["overlay","underlay"].includes(e))throw new Error("Invalid state");return function(r,i){if(i.visible()){var n=i.pstyle("".concat(e,"-opacity")).value;if(n!==0){var a=this,s=a.usePaths(),l=i._private.rscratch,u=i.pstyle("".concat(e,"-padding")).pfValue,h=2*u,f=i.pstyle("".concat(e,"-color")).value;r.lineWidth=h,l.edgeType==="self"&&!s?r.lineCap="butt":r.lineCap="round",a.colorStrokeStyle(r,f[0],f[1],f[2],n),a.drawEdgePath(i,r,l.allpts,"solid")}}}},"drawEdgeOverlayUnderlay");Jh.drawEdgeOverlay=G1e("overlay");Jh.drawEdgeUnderlay=G1e("underlay");Jh.drawEdgePath=function(t,e,r,i){var n=t._private.rscratch,a=e,s,l=!1,u=this.usePaths(),h=t.pstyle("line-dash-pattern").pfValue,f=t.pstyle("line-dash-offset").pfValue;if(u){var d=r.join("$"),p=n.pathCacheKey&&n.pathCacheKey===d;p?(s=e=n.pathCache,l=!0):(s=e=new Path2D,n.pathCacheKey=d,n.pathCache=s)}if(a.setLineDash)switch(i){case"dotted":a.setLineDash([1,1]);break;case"dashed":a.setLineDash(h),a.lineDashOffset=f;break;case"solid":a.setLineDash([]);break}if(!l&&!n.badLine)switch(e.beginPath&&e.beginPath(),e.moveTo(r[0],r[1]),n.edgeType){case"bezier":case"self":case"compound":case"multibezier":for(var m=2;m+35&&arguments[5]!==void 0?arguments[5]:!0,s=this;if(i==null){if(a&&!s.eleTextBiggerThanMin(e))return}else if(i===!1)return;if(e.isNode()){var l=e.pstyle("label");if(!l||!l.value)return;var u=s.getLabelJustification(e);t.textAlign=u,t.textBaseline="bottom"}else{var h=e.element()._private.rscratch.badLine,f=e.pstyle("label"),d=e.pstyle("source-label"),p=e.pstyle("target-label");if(h||(!f||!f.value)&&(!d||!d.value)&&(!p||!p.value))return;t.textAlign="center",t.textBaseline="bottom"}var m=!r,g;r&&(g=r,t.translate(-g.x1,-g.y1)),n==null?(s.drawText(t,e,null,m,a),e.isEdge()&&(s.drawText(t,e,"source",m,a),s.drawText(t,e,"target",m,a))):s.drawText(t,e,n,m,a),r&&t.translate(g.x1,g.y1)};am.getFontCache=function(t){var e;this.fontCaches=this.fontCaches||[];for(var r=0;r2&&arguments[2]!==void 0?arguments[2]:!0,i=e.pstyle("font-style").strValue,n=e.pstyle("font-size").pfValue+"px",a=e.pstyle("font-family").strValue,s=e.pstyle("font-weight").strValue,l=r?e.effectiveOpacity()*e.pstyle("text-opacity").value:1,u=e.pstyle("text-outline-opacity").value*l,h=e.pstyle("color").value,f=e.pstyle("text-outline-color").value;t.font=i+" "+s+" "+n+" "+a,t.lineJoin="round",this.colorFillStyle(t,h[0],h[1],h[2],l),this.colorStrokeStyle(t,f[0],f[1],f[2],u)};o(_rt,"circle");o(rge,"roundRect");am.getTextAngle=function(t,e){var r,i=t._private,n=i.rscratch,a=e?e+"-":"",s=t.pstyle(a+"text-rotation");if(s.strValue==="autorotate"){var l=_o(n,"labelAngle",e);r=t.isEdge()?l:0}else s.strValue==="none"?r=0:r=s.pfValue;return r};am.drawText=function(t,e,r){var i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,n=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,a=e._private,s=a.rscratch,l=n?e.effectiveOpacity():1;if(!(n&&(l===0||e.pstyle("text-opacity").value===0))){r==="main"&&(r=null);var u=_o(s,"labelX",r),h=_o(s,"labelY",r),f,d,p=this.getLabelText(e,r);if(p!=null&&p!==""&&!isNaN(u)&&!isNaN(h)){this.setupTextStyle(t,e,n);var m=r?r+"-":"",g=_o(s,"labelWidth",r),y=_o(s,"labelHeight",r),v=e.pstyle(m+"text-margin-x").pfValue,x=e.pstyle(m+"text-margin-y").pfValue,b=e.isEdge(),T=e.pstyle("text-halign").value,w=e.pstyle("text-valign").value;b&&(T="center",w="center"),u+=v,h+=x;var k;switch(i?k=this.getTextAngle(e,r):k=0,k!==0&&(f=u,d=h,t.translate(f,d),t.rotate(k),u=0,h=0),w){case"top":break;case"center":h+=y/2;break;case"bottom":h+=y;break}var C=e.pstyle("text-background-opacity").value,E=e.pstyle("text-border-opacity").value,S=e.pstyle("text-border-width").pfValue,L=e.pstyle("text-background-padding").pfValue,M=e.pstyle("text-background-shape").strValue,I=M==="round-rectangle"||M==="roundrectangle",A=M==="circle",_=2;if(C>0||S>0&&E>0){var D=t.fillStyle,N=t.strokeStyle,R=t.lineWidth,B=e.pstyle("text-background-color").value,O=e.pstyle("text-border-color").value,$=e.pstyle("text-border-style").value,z=C>0,F=S>0&&E>0,V=u-L;switch(T){case"left":V-=g;break;case"center":V-=g/2;break}var H=h-y-L,X=g+2*L,W=y+2*L;if(z&&(t.fillStyle="rgba(".concat(B[0],",").concat(B[1],",").concat(B[2],",").concat(C*l,")")),F&&(t.strokeStyle="rgba(".concat(O[0],",").concat(O[1],",").concat(O[2],",").concat(E*l,")"),t.lineWidth=S,t.setLineDash))switch($){case"dotted":t.setLineDash([1,1]);break;case"dashed":t.setLineDash([4,2]);break;case"double":t.lineWidth=S/4,t.setLineDash([]);break;case"solid":default:t.setLineDash([]);break}if(I?(t.beginPath(),rge(t,V,H,X,W,_)):A?(t.beginPath(),_rt(t,V,H,X,W)):(t.beginPath(),t.rect(V,H,X,W)),z&&t.fill(),F&&t.stroke(),F&&$==="double"){var Z=S/2;t.beginPath(),I?rge(t,V+Z,H+Z,X-2*Z,W-2*Z,_):t.rect(V+Z,H+Z,X-2*Z,W-2*Z),t.stroke()}t.fillStyle=D,t.strokeStyle=N,t.lineWidth=R,t.setLineDash&&t.setLineDash([])}var Y=2*e.pstyle("text-outline-width").pfValue;if(Y>0&&(t.lineWidth=Y),e.pstyle("text-wrap").value==="wrap"){var ae=_o(s,"labelWrapCachedLines",r),J=_o(s,"labelLineHeight",r),ee=g/2,re=this.getLabelJustification(e);switch(re==="auto"||(T==="left"?re==="left"?u+=-g:re==="center"&&(u+=-ee):T==="center"?re==="left"?u+=-ee:re==="right"&&(u+=ee):T==="right"&&(re==="center"?u+=ee:re==="right"&&(u+=g))),w){case"top":h-=(ae.length-1)*J;break;case"center":case"bottom":h-=(ae.length-1)*J;break}for(var te=0;te0&&t.strokeText(ae[te],u,h),t.fillText(ae[te],u,h),h+=J}else Y>0&&t.strokeText(p,u,h),t.fillText(p,u,h);k!==0&&(t.rotate(-k),t.translate(-f,-d))}}};Vd={};Vd.drawNode=function(t,e,r){var i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,n=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,s=this,l,u,h=e._private,f=h.rscratch,d=e.position();if(!(!Mt(d.x)||!Mt(d.y))&&!(a&&!e.visible())){var p=a?e.effectiveOpacity():1,m=s.usePaths(),g,y=!1,v=e.padding();l=e.width()+2*v,u=e.height()+2*v;var x;r&&(x=r,t.translate(-x.x1,-x.y1));for(var b=e.pstyle("background-image"),T=b.value,w=new Array(T.length),k=new Array(T.length),C=0,E=0;E0&&arguments[0]!==void 0?arguments[0]:_;s.eleFillStyle(t,e,U)},"setupShapeColor"),J=o(function(){var U=arguments.length>0&&arguments[0]!==void 0?arguments[0]:F;s.colorStrokeStyle(t,D[0],D[1],D[2],U)},"setupBorderColor"),ee=o(function(){var U=arguments.length>0&&arguments[0]!==void 0?arguments[0]:W;s.colorStrokeStyle(t,H[0],H[1],H[2],U)},"setupOutlineColor"),re=o(function(U,ue,G,se){var le=s.nodePathCache=s.nodePathCache||[],ke=Sge(G==="polygon"?G+","+se.join(","):G,""+ue,""+U,""+Y),me=le[ke],ye,Re=!1;return me!=null?(ye=me,Re=!0,f.pathCache=ye):(ye=new Path2D,le[ke]=f.pathCache=ye),{path:ye,cacheHit:Re}},"getPath"),te=e.pstyle("shape").strValue,be=e.pstyle("shape-polygon-points").pfValue;if(m){t.translate(d.x,d.y);var de=re(l,u,te,be);g=de.path,y=de.cacheHit}var Ee=o(function(){if(!y){var U=d;m&&(U={x:0,y:0}),s.nodeShapes[s.getNodeShape(e)].draw(g||t,U.x,U.y,l,u,Y,f)}m?t.fill(g):t.fill()},"drawShape"),Ne=o(function(){for(var U=arguments.length>0&&arguments[0]!==void 0?arguments[0]:p,ue=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,G=h.backgrounding,se=0,le=0;le0&&arguments[0]!==void 0?arguments[0]:!1,ue=arguments.length>1&&arguments[1]!==void 0?arguments[1]:p;s.hasPie(e)&&(s.drawPie(t,e,ue),U&&(m||s.nodeShapes[s.getNodeShape(e)].draw(t,d.x,d.y,l,u,Y,f)))},"drawPie"),Te=o(function(){var U=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,ue=arguments.length>1&&arguments[1]!==void 0?arguments[1]:p;s.hasStripe(e)&&(t.save(),m?t.clip(f.pathCache):(s.nodeShapes[s.getNodeShape(e)].draw(t,d.x,d.y,l,u,Y,f),t.clip()),s.drawStripe(t,e,ue),t.restore(),U&&(m||s.nodeShapes[s.getNodeShape(e)].draw(t,d.x,d.y,l,u,Y,f)))},"drawStripe"),De=o(function(){var U=arguments.length>0&&arguments[0]!==void 0?arguments[0]:p,ue=(I>0?I:-I)*U,G=I>0?0:255;I!==0&&(s.colorFillStyle(t,G,G,G,ue),m?t.fill(g):t.fill())},"darken"),$e=o(function(){if(A>0){if(t.lineWidth=A,t.lineCap=B,t.lineJoin=R,t.setLineDash)switch(N){case"dotted":t.setLineDash([1,1]);break;case"dashed":t.setLineDash($),t.lineDashOffset=z;break;case"solid":case"double":t.setLineDash([]);break}if(O!=="center"){if(t.save(),t.lineWidth*=2,O==="inside")m?t.clip(g):t.clip();else{var U=new Path2D;U.rect(-l/2-A,-u/2-A,l+2*A,u+2*A),U.addPath(g),t.clip(U,"evenodd")}m?t.stroke(g):t.stroke(),t.restore()}else m?t.stroke(g):t.stroke();if(N==="double"){t.lineWidth=A/3;var ue=t.globalCompositeOperation;t.globalCompositeOperation="destination-out",m?t.stroke(g):t.stroke(),t.globalCompositeOperation=ue}t.setLineDash&&t.setLineDash([])}},"drawBorder"),pe=o(function(){if(V>0){if(t.lineWidth=V,t.lineCap="butt",t.setLineDash)switch(X){case"dotted":t.setLineDash([1,1]);break;case"dashed":t.setLineDash([4,2]);break;case"solid":case"double":t.setLineDash([]);break}var U=d;m&&(U={x:0,y:0});var ue=s.getNodeShape(e),G=A;O==="inside"&&(G=0),O==="outside"&&(G*=2);var se=(l+G+(V+Z))/l,le=(u+G+(V+Z))/u,ke=l*se,me=u*le,ye=s.nodeShapes[ue].points,Re;if(m){var ve=re(ke,me,ue,ye);Re=ve.path}if(ue==="ellipse")s.drawEllipsePath(Re||t,U.x,U.y,ke,me);else if(["round-diamond","round-heptagon","round-hexagon","round-octagon","round-pentagon","round-polygon","round-triangle","round-tag"].includes(ue)){var Oe=0,We=0,Be=0;ue==="round-diamond"?Oe=(G+Z+V)*1.4:ue==="round-heptagon"?(Oe=(G+Z+V)*1.075,Be=-(G/2+Z+V)/35):ue==="round-hexagon"?Oe=(G+Z+V)*1.12:ue==="round-pentagon"?(Oe=(G+Z+V)*1.13,Be=-(G/2+Z+V)/15):ue==="round-tag"?(Oe=(G+Z+V)*1.12,We=(G/2+V+Z)*.07):ue==="round-triangle"&&(Oe=(G+Z+V)*(Math.PI/2),Be=-(G+Z/2+V)/Math.PI),Oe!==0&&(se=(l+Oe)/l,ke=l*se,["round-hexagon","round-tag"].includes(ue)||(le=(u+Oe)/u,me=u*le)),Y=Y==="auto"?Pge(ke,me):Y;for(var Qe=ke/2,ce=me/2,it=Y+(G+V+Z)/2,fe=new Array(ye.length/2),ut=new Array(ye.length/2),Nt=0;Nt0){if(n=n||i.position(),a==null||s==null){var m=i.padding();a=i.width()+2*m,s=i.height()+2*m}l.colorFillStyle(r,f[0],f[1],f[2],h),l.nodeShapes[d].draw(r,n.x,n.y,a+u*2,s+u*2,p),r.fill()}}}},"drawNodeOverlayUnderlay");Vd.drawNodeOverlay=V1e("overlay");Vd.drawNodeUnderlay=V1e("underlay");Vd.hasPie=function(t){return t=t[0],t._private.hasPie};Vd.hasStripe=function(t){return t=t[0],t._private.hasStripe};Vd.drawPie=function(t,e,r,i){e=e[0],i=i||e.position();var n=e.cy().style(),a=e.pstyle("pie-size"),s=e.pstyle("pie-hole"),l=e.pstyle("pie-start-angle").pfValue,u=i.x,h=i.y,f=e.width(),d=e.height(),p=Math.min(f,d)/2,m,g=0,y=this.usePaths();if(y&&(u=0,h=0),a.units==="%"?p=p*a.pfValue:a.pfValue!==void 0&&(p=a.pfValue/2),s.units==="%"?m=p*s.pfValue:s.pfValue!==void 0&&(m=s.pfValue/2),!(m>=p))for(var v=1;v<=n.pieBackgroundN;v++){var x=e.pstyle("pie-"+v+"-background-size").value,b=e.pstyle("pie-"+v+"-background-color").value,T=e.pstyle("pie-"+v+"-background-opacity").value*r,w=x/100;w+g>1&&(w=1-g);var k=1.5*Math.PI+2*Math.PI*g;k+=l;var C=2*Math.PI*w,E=k+C;x===0||g>=1||g+w>1||(m===0?(t.beginPath(),t.moveTo(u,h),t.arc(u,h,p,k,E),t.closePath()):(t.beginPath(),t.arc(u,h,p,k,E),t.arc(u,h,m,E,k,!0),t.closePath()),this.colorFillStyle(t,b[0],b[1],b[2],T),t.fill(),g+=w)}};Vd.drawStripe=function(t,e,r,i){e=e[0],i=i||e.position();var n=e.cy().style(),a=i.x,s=i.y,l=e.width(),u=e.height(),h=0,f=this.usePaths();t.save();var d=e.pstyle("stripe-direction").value,p=e.pstyle("stripe-size");switch(d){case"vertical":break;case"righward":t.rotate(-Math.PI/2);break}var m=l,g=u;p.units==="%"?(m=m*p.pfValue,g=g*p.pfValue):p.pfValue!==void 0&&(m=p.pfValue,g=p.pfValue),f&&(a=0,s=0),s-=m/2,a-=g/2;for(var y=1;y<=n.stripeBackgroundN;y++){var v=e.pstyle("stripe-"+y+"-background-size").value,x=e.pstyle("stripe-"+y+"-background-color").value,b=e.pstyle("stripe-"+y+"-background-opacity").value*r,T=v/100;T+h>1&&(T=1-h),!(v===0||h>=1||h+T>1)&&(t.beginPath(),t.rect(a,s+g*h,m,g*T),t.closePath(),this.colorFillStyle(t,x[0],x[1],x[2],b),t.fill(),h+=T)}t.restore()};Hs={},Drt=100;Hs.getPixelRatio=function(){var t=this.data.contexts[0];if(this.forcedPixelRatio!=null)return this.forcedPixelRatio;var e=this.cy.window(),r=t.backingStorePixelRatio||t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1;return(e.devicePixelRatio||1)/r};Hs.paintCache=function(t){for(var e=this.paintCaches=this.paintCaches||[],r=!0,i,n=0;ne.minMbLowQualFrames&&(e.motionBlurPxRatio=e.mbPxRBlurry)),e.clearingMotionBlur&&(e.motionBlurPxRatio=1),e.textureDrawLastFrame&&!d&&(f[e.NODE]=!0,f[e.SELECT_BOX]=!0);var b=r.style(),T=r.zoom(),w=s!==void 0?s:T,k=r.pan(),C={x:k.x,y:k.y},E={zoom:T,pan:{x:k.x,y:k.y}},S=e.prevViewport,L=S===void 0||E.zoom!==S.zoom||E.pan.x!==S.pan.x||E.pan.y!==S.pan.y;!L&&!(y&&!g)&&(e.motionBlurPxRatio=1),l&&(C=l),w*=u,C.x*=u,C.y*=u;var M=e.getCachedZSortedEles();function I(J,ee,re,te,be){var de=J.globalCompositeOperation;J.globalCompositeOperation="destination-out",e.colorFillStyle(J,255,255,255,e.motionBlurTransparency),J.fillRect(ee,re,te,be),J.globalCompositeOperation=de}o(I,"mbclear");function A(J,ee){var re,te,be,de;!e.clearingMotionBlur&&(J===h.bufferContexts[e.MOTIONBLUR_BUFFER_NODE]||J===h.bufferContexts[e.MOTIONBLUR_BUFFER_DRAG])?(re={x:k.x*m,y:k.y*m},te=T*m,be=e.canvasWidth*m,de=e.canvasHeight*m):(re=C,te=w,be=e.canvasWidth,de=e.canvasHeight),J.setTransform(1,0,0,1,0,0),ee==="motionBlur"?I(J,0,0,be,de):!i&&(ee===void 0||ee)&&J.clearRect(0,0,be,de),n||(J.translate(re.x,re.y),J.scale(te,te)),l&&J.translate(l.x,l.y),s&&J.scale(s,s)}if(o(A,"setContextTransform"),d||(e.textureDrawLastFrame=!1),d){if(e.textureDrawLastFrame=!0,!e.textureCache){e.textureCache={},e.textureCache.bb=r.mutableElements().boundingBox(),e.textureCache.texture=e.data.bufferCanvases[e.TEXTURE_BUFFER];var _=e.data.bufferContexts[e.TEXTURE_BUFFER];_.setTransform(1,0,0,1,0,0),_.clearRect(0,0,e.canvasWidth*e.textureMult,e.canvasHeight*e.textureMult),e.render({forcedContext:_,drawOnlyNodeLayer:!0,forcedPxRatio:u*e.textureMult});var E=e.textureCache.viewport={zoom:r.zoom(),pan:r.pan(),width:e.canvasWidth,height:e.canvasHeight};E.mpan={x:(0-E.pan.x)/E.zoom,y:(0-E.pan.y)/E.zoom}}f[e.DRAG]=!1,f[e.NODE]=!1;var D=h.contexts[e.NODE],N=e.textureCache.texture,E=e.textureCache.viewport;D.setTransform(1,0,0,1,0,0),p?I(D,0,0,E.width,E.height):D.clearRect(0,0,E.width,E.height);var R=b.core("outside-texture-bg-color").value,B=b.core("outside-texture-bg-opacity").value;e.colorFillStyle(D,R[0],R[1],R[2],B),D.fillRect(0,0,E.width,E.height);var T=r.zoom();A(D,!1),D.clearRect(E.mpan.x,E.mpan.y,E.width/E.zoom/u,E.height/E.zoom/u),D.drawImage(N,E.mpan.x,E.mpan.y,E.width/E.zoom/u,E.height/E.zoom/u)}else e.textureOnViewport&&!i&&(e.textureCache=null);var O=r.extent(),$=e.pinching||e.hoverData.dragging||e.swipePanning||e.data.wheelZooming||e.hoverData.draggingEles||e.cy.animated(),z=e.hideEdgesOnViewport&&$,F=[];if(F[e.NODE]=!f[e.NODE]&&p&&!e.clearedForMotionBlur[e.NODE]||e.clearingMotionBlur,F[e.NODE]&&(e.clearedForMotionBlur[e.NODE]=!0),F[e.DRAG]=!f[e.DRAG]&&p&&!e.clearedForMotionBlur[e.DRAG]||e.clearingMotionBlur,F[e.DRAG]&&(e.clearedForMotionBlur[e.DRAG]=!0),f[e.NODE]||n||a||F[e.NODE]){var V=p&&!F[e.NODE]&&m!==1,D=i||(V?e.data.bufferContexts[e.MOTIONBLUR_BUFFER_NODE]:h.contexts[e.NODE]),H=p&&!V?"motionBlur":void 0;A(D,H),z?e.drawCachedNodes(D,M.nondrag,u,O):e.drawLayeredElements(D,M.nondrag,u,O),e.debug&&e.drawDebugPoints(D,M.nondrag),!n&&!p&&(f[e.NODE]=!1)}if(!a&&(f[e.DRAG]||n||F[e.DRAG])){var V=p&&!F[e.DRAG]&&m!==1,D=i||(V?e.data.bufferContexts[e.MOTIONBLUR_BUFFER_DRAG]:h.contexts[e.DRAG]);A(D,p&&!V?"motionBlur":void 0),z?e.drawCachedNodes(D,M.drag,u,O):e.drawCachedElements(D,M.drag,u,O),e.debug&&e.drawDebugPoints(D,M.drag),!n&&!p&&(f[e.DRAG]=!1)}if(this.drawSelectionRectangle(t,A),p&&m!==1){var X=h.contexts[e.NODE],W=e.data.bufferCanvases[e.MOTIONBLUR_BUFFER_NODE],Z=h.contexts[e.DRAG],Y=e.data.bufferCanvases[e.MOTIONBLUR_BUFFER_DRAG],ae=o(function(ee,re,te){ee.setTransform(1,0,0,1,0,0),te||!x?ee.clearRect(0,0,e.canvasWidth,e.canvasHeight):I(ee,0,0,e.canvasWidth,e.canvasHeight);var be=m;ee.drawImage(re,0,0,e.canvasWidth*be,e.canvasHeight*be,0,0,e.canvasWidth,e.canvasHeight)},"drawMotionBlur");(f[e.NODE]||F[e.NODE])&&(ae(X,W,F[e.NODE]),f[e.NODE]=!1),(f[e.DRAG]||F[e.DRAG])&&(ae(Z,Y,F[e.DRAG]),f[e.DRAG]=!1)}e.prevViewport=E,e.clearingMotionBlur&&(e.clearingMotionBlur=!1,e.motionBlurCleared=!0,e.motionBlur=!0),p&&(e.motionBlurTimeout=setTimeout(function(){e.motionBlurTimeout=null,e.clearedForMotionBlur[e.NODE]=!1,e.clearedForMotionBlur[e.DRAG]=!1,e.motionBlur=!1,e.clearingMotionBlur=!d,e.mbFrames=0,f[e.NODE]=!0,f[e.DRAG]=!0,e.redraw()},Drt)),i||r.emit("render")};Hs.drawSelectionRectangle=function(t,e){var r=this,i=r.cy,n=r.data,a=i.style(),s=t.drawOnlyNodeLayer,l=t.drawAllLayers,u=n.canvasNeedsRedraw,h=t.forcedContext;if(r.showFps||!s&&u[r.SELECT_BOX]&&!l){var f=h||n.contexts[r.SELECT_BOX];if(e(f),r.selection[4]==1&&(r.hoverData.selecting||r.touchData.selecting)){var d=r.cy.zoom(),p=a.core("selection-box-border-width").value/d;f.lineWidth=p,f.fillStyle="rgba("+a.core("selection-box-color").value[0]+","+a.core("selection-box-color").value[1]+","+a.core("selection-box-color").value[2]+","+a.core("selection-box-opacity").value+")",f.fillRect(r.selection[0],r.selection[1],r.selection[2]-r.selection[0],r.selection[3]-r.selection[1]),p>0&&(f.strokeStyle="rgba("+a.core("selection-box-border-color").value[0]+","+a.core("selection-box-border-color").value[1]+","+a.core("selection-box-border-color").value[2]+","+a.core("selection-box-opacity").value+")",f.strokeRect(r.selection[0],r.selection[1],r.selection[2]-r.selection[0],r.selection[3]-r.selection[1]))}if(n.bgActivePosistion&&!r.hoverData.selecting){var d=r.cy.zoom(),m=n.bgActivePosistion;f.fillStyle="rgba("+a.core("active-bg-color").value[0]+","+a.core("active-bg-color").value[1]+","+a.core("active-bg-color").value[2]+","+a.core("active-bg-opacity").value+")",f.beginPath(),f.arc(m.x,m.y,a.core("active-bg-size").pfValue/d,0,2*Math.PI),f.fill()}var g=r.lastRedrawTime;if(r.showFps&&g){g=Math.round(g);var y=Math.round(1e3/g),v="1 frame = "+g+" ms = "+y+" fps";if(f.setTransform(1,0,0,1,0,0),f.fillStyle="rgba(255, 0, 0, 0.75)",f.strokeStyle="rgba(255, 0, 0, 0.75)",f.font="30px Arial",!Yb){var x=f.measureText(v);Yb=x.actualBoundingBoxAscent}f.fillText(v,0,Yb);var b=60;f.strokeRect(0,Yb+10,250,20),f.fillRect(0,Yb+10,250*Math.min(y/b,1),20)}l||(u[r.SELECT_BOX]=!1)}};o(ige,"compileShader");o(Lrt,"createProgram");o(Rrt,"createTextureCanvas");o(mF,"getEffectivePanZoom");o(Nrt,"getEffectiveZoom");o(Irt,"modelToRenderedPosition");o(Mrt,"isSimpleShape");o(Ort,"arrayEqual");o(H0,"toWebGLColor");o(ay,"indexToVec4");o(Prt,"vec4ToIndex");o(Brt,"createTexture");o(q1e,"getTypeInfo");o(W1e,"createTypedArray");o(Frt,"createTypedArrayView");o($rt,"createBufferStaticDraw");o(Pu,"createBufferDynamicDraw");o(zrt,"create3x3MatrixBufferDynamicDraw");o(Grt,"createPickingFrameBuffer");nge=typeof Float32Array<"u"?Float32Array:Array;Math.hypot||(Math.hypot=function(){for(var t=0,e=arguments.length;e--;)t+=arguments[e]*arguments[e];return Math.sqrt(t)});o(xB,"create");o(age,"identity");o(Vrt,"multiply");o(uS,"translate");o(sge,"rotate");o(GB,"scale");o(qrt,"projection");Wrt=(function(){function t(e,r,i,n){$d(this,t),this.debugID=Math.floor(Math.random()*1e4),this.r=e,this.texSize=r,this.texRows=i,this.texHeight=Math.floor(r/i),this.enableWrapping=!0,this.locked=!1,this.texture=null,this.needsBuffer=!0,this.freePointer={x:0,row:0},this.keyToLocation=new Map,this.canvas=n(e,r,r),this.scratch=n(e,r,this.texHeight,"scratch")}return o(t,"Atlas"),zd(t,[{key:"lock",value:o(function(){this.locked=!0},"lock")},{key:"getKeys",value:o(function(){return new Set(this.keyToLocation.keys())},"getKeys")},{key:"getScale",value:o(function(r){var i=r.w,n=r.h,a=this.texHeight,s=this.texSize,l=a/n,u=i*l,h=n*l;return u>s&&(l=s/i,u=i*l,h=n*l),{scale:l,texW:u,texH:h}},"getScale")},{key:"draw",value:o(function(r,i,n){var a=this;if(this.locked)throw new Error("can't draw, atlas is locked");var s=this.texSize,l=this.texRows,u=this.texHeight,h=this.getScale(i),f=h.scale,d=h.texW,p=h.texH,m=o(function(T,w){if(n&&w){var k=w.context,C=T.x,E=T.row,S=C,L=u*E;k.save(),k.translate(S,L),k.scale(f,f),n(k,i),k.restore()}},"drawAt"),g=[null,null],y=o(function(){m(a.freePointer,a.canvas),g[0]={x:a.freePointer.x,y:a.freePointer.row*u,w:d,h:p},g[1]={x:a.freePointer.x+d,y:a.freePointer.row*u,w:0,h:p},a.freePointer.x+=d,a.freePointer.x==s&&(a.freePointer.x=0,a.freePointer.row++)},"drawNormal"),v=o(function(){var T=a.scratch,w=a.canvas;T.clear(),m({x:0,row:0},T);var k=s-a.freePointer.x,C=d-k,E=u;{var S=a.freePointer.x,L=a.freePointer.row*u,M=k;w.context.drawImage(T,0,0,M,E,S,L,M,E),g[0]={x:S,y:L,w:M,h:p}}{var I=k,A=(a.freePointer.row+1)*u,_=C;w&&w.context.drawImage(T,I,0,_,E,0,A,_,E),g[1]={x:0,y:A,w:_,h:p}}a.freePointer.x=C,a.freePointer.row++},"drawWrapped"),x=o(function(){a.freePointer.x=0,a.freePointer.row++},"moveToStartOfNextRow");if(this.freePointer.x+d<=s)y();else{if(this.freePointer.row>=l-1)return!1;this.freePointer.x===s?(x(),y()):this.enableWrapping?v():(x(),y())}return this.keyToLocation.set(r,g),this.needsBuffer=!0,g},"draw")},{key:"getOffsets",value:o(function(r){return this.keyToLocation.get(r)},"getOffsets")},{key:"isEmpty",value:o(function(){return this.freePointer.x===0&&this.freePointer.row===0},"isEmpty")},{key:"canFit",value:o(function(r){if(this.locked)return!1;var i=this.texSize,n=this.texRows,a=this.getScale(r),s=a.texW;return this.freePointer.x+s>i?this.freePointer.row1&&arguments[1]!==void 0?arguments[1]:{},a=n.forceRedraw,s=a===void 0?!1:a,l=n.filterEle,u=l===void 0?function(){return!0}:l,h=n.filterType,f=h===void 0?function(){return!0}:h,d=!1,p=!1,m=Lo(r),g;try{for(m.s();!(g=m.n()).done;){var y=g.value;if(u(y)){var v=Lo(this.renderTypes.values()),x;try{var b=o(function(){var w=x.value,k=w.type;if(f(k)){var C=i.collections.get(w.collection),E=w.getKey(y),S=Array.isArray(E)?E:[E];if(s)S.forEach(function(A){return C.markKeyForGC(A)}),p=!0;else{var L=w.getID?w.getID(y):y.id(),M=i._key(k,L),I=i.typeAndIdToKey.get(M);I!==void 0&&!Ort(S,I)&&(d=!0,i.typeAndIdToKey.delete(M),I.forEach(function(A){return C.markKeyForGC(A)}))}}},"_loop2");for(v.s();!(x=v.n()).done;)b()}catch(T){v.e(T)}finally{v.f()}}}}catch(T){m.e(T)}finally{m.f()}return p&&(this.gc(),d=!1),d},"invalidate")},{key:"gc",value:o(function(){var r=Lo(this.collections.values()),i;try{for(r.s();!(i=r.n()).done;){var n=i.value;n.gc()}}catch(a){r.e(a)}finally{r.f()}},"gc")},{key:"getOrCreateAtlas",value:o(function(r,i,n,a){var s=this.renderTypes.get(i),l=this.collections.get(s.collection),u=!1,h=l.draw(a,n,function(p){s.drawClipped?(p.save(),p.beginPath(),p.rect(0,0,n.w,n.h),p.clip(),s.drawElement(p,r,n,!0,!0),p.restore()):s.drawElement(p,r,n,!0,!0),u=!0});if(u){var f=s.getID?s.getID(r):r.id(),d=this._key(i,f);this.typeAndIdToKey.has(d)?this.typeAndIdToKey.get(d).push(a):this.typeAndIdToKey.set(d,[a])}return h},"getOrCreateAtlas")},{key:"getAtlasInfo",value:o(function(r,i){var n=this,a=this.renderTypes.get(i),s=a.getKey(r),l=Array.isArray(s)?s:[s];return l.map(function(u){var h=a.getBoundingBox(r,u),f=n.getOrCreateAtlas(r,i,h,u),d=f.getOffsets(u),p=ea(d,2),m=p[0],g=p[1];return{atlas:f,tex:m,tex1:m,tex2:g,bb:h}})},"getAtlasInfo")},{key:"getDebugInfo",value:o(function(){var r=[],i=Lo(this.collections),n;try{for(i.s();!(n=i.n()).done;){var a=ea(n.value,2),s=a[0],l=a[1],u=l.getCounts(),h=u.keyCount,f=u.atlasCount;r.push({type:s,keyCount:h,atlasCount:f})}}catch(d){i.e(d)}finally{i.f()}return r},"getDebugInfo")}])})(),jrt=(function(){function t(e){$d(this,t),this.globalOptions=e,this.atlasSize=e.webglTexSize,this.maxAtlasesPerBatch=e.webglTexPerBatch,this.batchAtlases=[]}return o(t,"AtlasBatchManager"),zd(t,[{key:"getMaxAtlasesPerBatch",value:o(function(){return this.maxAtlasesPerBatch},"getMaxAtlasesPerBatch")},{key:"getAtlasSize",value:o(function(){return this.atlasSize},"getAtlasSize")},{key:"getIndexArray",value:o(function(){return Array.from({length:this.maxAtlasesPerBatch},function(r,i){return i})},"getIndexArray")},{key:"startBatch",value:o(function(){this.batchAtlases=[]},"startBatch")},{key:"getAtlasCount",value:o(function(){return this.batchAtlases.length},"getAtlasCount")},{key:"getAtlases",value:o(function(){return this.batchAtlases},"getAtlases")},{key:"canAddToCurrentBatch",value:o(function(r){return this.batchAtlases.length===this.maxAtlasesPerBatch?this.batchAtlases.includes(r):!0},"canAddToCurrentBatch")},{key:"getAtlasIndexForBatch",value:o(function(r){var i=this.batchAtlases.indexOf(r);if(i<0){if(this.batchAtlases.length===this.maxAtlasesPerBatch)throw new Error("cannot add more atlases to batch");this.batchAtlases.push(r),i=this.batchAtlases.length-1}return i},"getAtlasIndexForBatch")}])})(),Xrt=` + float circleSD(vec2 p, float r) { + return distance(vec2(0), p) - r; // signed distance + } +`,Krt=` + float rectangleSD(vec2 p, vec2 b) { + vec2 d = abs(p)-b; + return distance(vec2(0),max(d,0.0)) + min(max(d.x,d.y),0.0); + } +`,Qrt=` + float roundRectangleSD(vec2 p, vec2 b, vec4 cr) { + cr.xy = (p.x > 0.0) ? cr.xy : cr.zw; + cr.x = (p.y > 0.0) ? cr.x : cr.y; + vec2 q = abs(p) - b + cr.x; + return min(max(q.x, q.y), 0.0) + distance(vec2(0), max(q, 0.0)) - cr.x; + } +`,Zrt=` + float ellipseSD(vec2 p, vec2 ab) { + p = abs( p ); // symmetry + + // find root with Newton solver + vec2 q = ab*(p-ab); + float w = (q.x1.0) ? d : -d; + } +`,tT={SCREEN:{name:"screen",screen:!0},PICKING:{name:"picking",picking:!0}},CS={IGNORE:1,USE_BB:2},bB=0,oge=1,lge=2,TB=3,sy=4,JE=5,jb=6,Xb=7,Jrt=(function(){function t(e,r,i){$d(this,t),this.r=e,this.gl=r,this.maxInstances=i.webglBatchSize,this.atlasSize=i.webglTexSize,this.bgColor=i.bgColor,this.debug=i.webglDebug,this.batchDebugInfo=[],i.enableWrapping=!0,i.createTextureCanvas=Rrt,this.atlasManager=new Yrt(e,i),this.batchManager=new jrt(i),this.simpleShapeOptions=new Map,this.program=this._createShaderProgram(tT.SCREEN),this.pickingProgram=this._createShaderProgram(tT.PICKING),this.vao=this._createVAO()}return o(t,"ElementDrawingWebGL"),zd(t,[{key:"addAtlasCollection",value:o(function(r,i){this.atlasManager.addAtlasCollection(r,i)},"addAtlasCollection")},{key:"addTextureAtlasRenderType",value:o(function(r,i){this.atlasManager.addRenderType(r,i)},"addTextureAtlasRenderType")},{key:"addSimpleShapeRenderType",value:o(function(r,i){this.simpleShapeOptions.set(r,i)},"addSimpleShapeRenderType")},{key:"invalidate",value:o(function(r){var i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=i.type,a=this.atlasManager;return n?a.invalidate(r,{filterType:o(function(l){return l===n},"filterType"),forceRedraw:!0}):a.invalidate(r)},"invalidate")},{key:"gc",value:o(function(){this.atlasManager.gc()},"gc")},{key:"_createShaderProgram",value:o(function(r){var i=this.gl,n=`#version 300 es + precision highp float; + + uniform mat3 uPanZoomMatrix; + uniform int uAtlasSize; + + // instanced + in vec2 aPosition; // a vertex from the unit square + + in mat3 aTransform; // used to transform verticies, eg into a bounding box + in int aVertType; // the type of thing we are rendering + + // the z-index that is output when using picking mode + in vec4 aIndex; + + // For textures + in int aAtlasId; // which shader unit/atlas to use + in vec4 aTex; // x/y/w/h of texture in atlas + + // for edges + in vec4 aPointAPointB; + in vec4 aPointCPointD; + in vec2 aLineWidth; // also used for node border width + + // simple shapes + in vec4 aCornerRadius; // for round-rectangle [top-right, bottom-right, top-left, bottom-left] + in vec4 aColor; // also used for edges + in vec4 aBorderColor; // aLineWidth is used for border width + + // output values passed to the fragment shader + out vec2 vTexCoord; + out vec4 vColor; + out vec2 vPosition; + // flat values are not interpolated + flat out int vAtlasId; + flat out int vVertType; + flat out vec2 vTopRight; + flat out vec2 vBotLeft; + flat out vec4 vCornerRadius; + flat out vec4 vBorderColor; + flat out vec2 vBorderWidth; + flat out vec4 vIndex; + + void main(void) { + int vid = gl_VertexID; + vec2 position = aPosition; // TODO make this a vec3, simplifies some code below + + if(aVertType == `.concat(bB,`) { + float texX = aTex.x; // texture coordinates + float texY = aTex.y; + float texW = aTex.z; + float texH = aTex.w; + + if(vid == 1 || vid == 2 || vid == 4) { + texX += texW; + } + if(vid == 2 || vid == 4 || vid == 5) { + texY += texH; + } + + float d = float(uAtlasSize); + vTexCoord = vec2(texX / d, texY / d); // tex coords must be between 0 and 1 + + gl_Position = vec4(uPanZoomMatrix * aTransform * vec3(position, 1.0), 1.0); + } + else if(aVertType == `).concat(sy," || aVertType == ").concat(Xb,` + || aVertType == `).concat(JE," || aVertType == ").concat(jb,`) { // simple shapes + + // the bounding box is needed by the fragment shader + vBotLeft = (aTransform * vec3(0, 0, 1)).xy; // flat + vTopRight = (aTransform * vec3(1, 1, 1)).xy; // flat + vPosition = (aTransform * vec3(position, 1)).xy; // will be interpolated + + // calculations are done in the fragment shader, just pass these along + vColor = aColor; + vCornerRadius = aCornerRadius; + vBorderColor = aBorderColor; + vBorderWidth = aLineWidth; + + gl_Position = vec4(uPanZoomMatrix * aTransform * vec3(position, 1.0), 1.0); + } + else if(aVertType == `).concat(oge,`) { + vec2 source = aPointAPointB.xy; + vec2 target = aPointAPointB.zw; + + // adjust the geometry so that the line is centered on the edge + position.y = position.y - 0.5; + + // stretch the unit square into a long skinny rectangle + vec2 xBasis = target - source; + vec2 yBasis = normalize(vec2(-xBasis.y, xBasis.x)); + vec2 point = source + xBasis * position.x + yBasis * aLineWidth[0] * position.y; + + gl_Position = vec4(uPanZoomMatrix * vec3(point, 1.0), 1.0); + vColor = aColor; + } + else if(aVertType == `).concat(lge,`) { + vec2 pointA = aPointAPointB.xy; + vec2 pointB = aPointAPointB.zw; + vec2 pointC = aPointCPointD.xy; + vec2 pointD = aPointCPointD.zw; + + // adjust the geometry so that the line is centered on the edge + position.y = position.y - 0.5; + + vec2 p0, p1, p2, pos; + if(position.x == 0.0) { // The left side of the unit square + p0 = pointA; + p1 = pointB; + p2 = pointC; + pos = position; + } else { // The right side of the unit square, use same approach but flip the geometry upside down + p0 = pointD; + p1 = pointC; + p2 = pointB; + pos = vec2(0.0, -position.y); + } + + vec2 p01 = p1 - p0; + vec2 p12 = p2 - p1; + vec2 p21 = p1 - p2; + + // Find the normal vector. + vec2 tangent = normalize(normalize(p12) + normalize(p01)); + vec2 normal = vec2(-tangent.y, tangent.x); + + // Find the vector perpendicular to p0 -> p1. + vec2 p01Norm = normalize(vec2(-p01.y, p01.x)); + + // Determine the bend direction. + float sigma = sign(dot(p01 + p21, normal)); + float width = aLineWidth[0]; + + if(sign(pos.y) == -sigma) { + // This is an intersecting vertex. Adjust the position so that there's no overlap. + vec2 point = 0.5 * width * normal * -sigma / dot(normal, p01Norm); + gl_Position = vec4(uPanZoomMatrix * vec3(p1 + point, 1.0), 1.0); + } else { + // This is a non-intersecting vertex. Treat it like a mitre join. + vec2 point = 0.5 * width * normal * sigma * dot(normal, p01Norm); + gl_Position = vec4(uPanZoomMatrix * vec3(p1 + point, 1.0), 1.0); + } + + vColor = aColor; + } + else if(aVertType == `).concat(TB,` && vid < 3) { + // massage the first triangle into an edge arrow + if(vid == 0) + position = vec2(-0.15, -0.3); + if(vid == 1) + position = vec2( 0.0, 0.0); + if(vid == 2) + position = vec2( 0.15, -0.3); + + gl_Position = vec4(uPanZoomMatrix * aTransform * vec3(position, 1.0), 1.0); + vColor = aColor; + } + else { + gl_Position = vec4(2.0, 0.0, 0.0, 1.0); // discard vertex by putting it outside webgl clip space + } + + vAtlasId = aAtlasId; + vVertType = aVertType; + vIndex = aIndex; + } + `),a=this.batchManager.getIndexArray(),s=`#version 300 es + precision highp float; + + // declare texture unit for each texture atlas in the batch + `.concat(a.map(function(h){return"uniform sampler2D uTexture".concat(h,";")}).join(` + `),` + + uniform vec4 uBGColor; + uniform float uZoom; + + in vec2 vTexCoord; + in vec4 vColor; + in vec2 vPosition; // model coordinates + + flat in int vAtlasId; + flat in vec4 vIndex; + flat in int vVertType; + flat in vec2 vTopRight; + flat in vec2 vBotLeft; + flat in vec4 vCornerRadius; + flat in vec4 vBorderColor; + flat in vec2 vBorderWidth; + + out vec4 outColor; + + `).concat(Xrt,` + `).concat(Krt,` + `).concat(Qrt,` + `).concat(Zrt,` + + vec4 blend(vec4 top, vec4 bot) { // blend colors with premultiplied alpha + return vec4( + top.rgb + (bot.rgb * (1.0 - top.a)), + top.a + (bot.a * (1.0 - top.a)) + ); + } + + vec4 distInterp(vec4 cA, vec4 cB, float d) { // interpolate color using Signed Distance + // scale to the zoom level so that borders don't look blurry when zoomed in + // note 1.5 is an aribitrary value chosen because it looks good + return mix(cA, cB, 1.0 - smoothstep(0.0, 1.5 / uZoom, abs(d))); + } + + void main(void) { + if(vVertType == `).concat(bB,`) { + // look up the texel from the texture unit + `).concat(a.map(function(h){return"if(vAtlasId == ".concat(h,") outColor = texture(uTexture").concat(h,", vTexCoord);")}).join(` + else `),` + } + else if(vVertType == `).concat(TB,`) { + // mimics how canvas renderer uses context.globalCompositeOperation = 'destination-out'; + outColor = blend(vColor, uBGColor); + outColor.a = 1.0; // make opaque, masks out line under arrow + } + else if(vVertType == `).concat(sy,` && vBorderWidth == vec2(0.0)) { // simple rectangle with no border + outColor = vColor; // unit square is already transformed to the rectangle, nothing else needs to be done + } + else if(vVertType == `).concat(sy," || vVertType == ").concat(Xb,` + || vVertType == `).concat(JE," || vVertType == ").concat(jb,`) { // use SDF + + float outerBorder = vBorderWidth[0]; + float innerBorder = vBorderWidth[1]; + float borderPadding = outerBorder * 2.0; + float w = vTopRight.x - vBotLeft.x - borderPadding; + float h = vTopRight.y - vBotLeft.y - borderPadding; + vec2 b = vec2(w/2.0, h/2.0); // half width, half height + vec2 p = vPosition - vec2(vTopRight.x - b[0] - outerBorder, vTopRight.y - b[1] - outerBorder); // translate to center + + float d; // signed distance + if(vVertType == `).concat(sy,`) { + d = rectangleSD(p, b); + } else if(vVertType == `).concat(Xb,` && w == h) { + d = circleSD(p, b.x); // faster than ellipse + } else if(vVertType == `).concat(Xb,`) { + d = ellipseSD(p, b); + } else { + d = roundRectangleSD(p, b, vCornerRadius.wzyx); + } + + // use the distance to interpolate a color to smooth the edges of the shape, doesn't need multisampling + // we must smooth colors inwards, because we can't change pixels outside the shape's bounding box + if(d > 0.0) { + if(d > outerBorder) { + discard; + } else { + outColor = distInterp(vBorderColor, vec4(0), d - outerBorder); + } + } else { + if(d > innerBorder) { + vec4 outerColor = outerBorder == 0.0 ? vec4(0) : vBorderColor; + vec4 innerBorderColor = blend(vBorderColor, vColor); + outColor = distInterp(innerBorderColor, outerColor, d); + } + else { + vec4 outerColor; + if(innerBorder == 0.0 && outerBorder == 0.0) { + outerColor = vec4(0); + } else if(innerBorder == 0.0) { + outerColor = vBorderColor; + } else { + outerColor = blend(vBorderColor, vColor); + } + outColor = distInterp(vColor, outerColor, d - innerBorder); + } + } + } + else { + outColor = vColor; + } + + `).concat(r.picking?`if(outColor.a == 0.0) discard; + else outColor = vIndex;`:"",` + } + `),l=Lrt(i,n,s);l.aPosition=i.getAttribLocation(l,"aPosition"),l.aIndex=i.getAttribLocation(l,"aIndex"),l.aVertType=i.getAttribLocation(l,"aVertType"),l.aTransform=i.getAttribLocation(l,"aTransform"),l.aAtlasId=i.getAttribLocation(l,"aAtlasId"),l.aTex=i.getAttribLocation(l,"aTex"),l.aPointAPointB=i.getAttribLocation(l,"aPointAPointB"),l.aPointCPointD=i.getAttribLocation(l,"aPointCPointD"),l.aLineWidth=i.getAttribLocation(l,"aLineWidth"),l.aColor=i.getAttribLocation(l,"aColor"),l.aCornerRadius=i.getAttribLocation(l,"aCornerRadius"),l.aBorderColor=i.getAttribLocation(l,"aBorderColor"),l.uPanZoomMatrix=i.getUniformLocation(l,"uPanZoomMatrix"),l.uAtlasSize=i.getUniformLocation(l,"uAtlasSize"),l.uBGColor=i.getUniformLocation(l,"uBGColor"),l.uZoom=i.getUniformLocation(l,"uZoom"),l.uTextures=[];for(var u=0;u1&&arguments[1]!==void 0?arguments[1]:tT.SCREEN;this.panZoomMatrix=r,this.renderTarget=i,this.batchDebugInfo=[],this.wrappedCount=0,this.simpleCount=0,this.startBatch()},"startFrame")},{key:"startBatch",value:o(function(){this.instanceCount=0,this.batchManager.startBatch()},"startBatch")},{key:"endFrame",value:o(function(){this.endBatch()},"endFrame")},{key:"_isVisible",value:o(function(r,i){return r.visible()?i&&i.isVisible?i.isVisible(r):!0:!1},"_isVisible")},{key:"drawTexture",value:o(function(r,i,n){var a=this.atlasManager,s=this.batchManager,l=a.getRenderTypeOpts(n);if(this._isVisible(r,l)&&!(r.isEdge()&&!this._isValidEdge(r))){if(this.renderTarget.picking&&l.getTexPickingMode){var u=l.getTexPickingMode(r);if(u===CS.IGNORE)return;if(u==CS.USE_BB){this.drawPickingRectangle(r,i,n);return}}var h=a.getAtlasInfo(r,n),f=Lo(h),d;try{for(f.s();!(d=f.n()).done;){var p=d.value,m=p.atlas,g=p.tex1,y=p.tex2;s.canAddToCurrentBatch(m)||this.endBatch();for(var v=s.getAtlasIndexForBatch(m),x=0,b=[[g,!0],[y,!1]];x=this.maxInstances&&this.endBatch()}}}}catch(I){f.e(I)}finally{f.f()}}},"drawTexture")},{key:"setTransformMatrix",value:o(function(r,i,n,a){var s=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,l=0;if(n.shapeProps&&n.shapeProps.padding&&(l=r.pstyle(n.shapeProps.padding).pfValue),a){var u=a.bb,h=a.tex1,f=a.tex2,d=h.w/(h.w+f.w);s||(d=1-d);var p=this._getAdjustedBB(u,l,s,d);this._applyTransformMatrix(i,p,n,r)}else{var m=n.getBoundingBox(r),g=this._getAdjustedBB(m,l,!0,1);this._applyTransformMatrix(i,g,n,r)}},"setTransformMatrix")},{key:"_applyTransformMatrix",value:o(function(r,i,n,a){var s,l;age(r);var u=n.getRotation?n.getRotation(a):0;if(u!==0){var h=n.getRotationPoint(a),f=h.x,d=h.y;uS(r,r,[f,d]),sge(r,r,u);var p=n.getRotationOffset(a);s=p.x+(i.xOffset||0),l=p.y+(i.yOffset||0)}else s=i.x1,l=i.y1;uS(r,r,[s,l]),GB(r,r,[i.w,i.h])},"_applyTransformMatrix")},{key:"_getAdjustedBB",value:o(function(r,i,n,a){var s=r.x1,l=r.y1,u=r.w,h=r.h,f=r.yOffset;i&&(s-=i,l-=i,u+=2*i,h+=2*i);var d=0,p=u*a;return n&&a<1?u=p:!n&&a<1&&(d=u-p,s+=d,u=p),{x1:s,y1:l,w:u,h,xOffset:d,yOffset:f}},"_getAdjustedBB")},{key:"drawPickingRectangle",value:o(function(r,i,n){var a=this.atlasManager.getRenderTypeOpts(n),s=this.instanceCount;this.vertTypeBuffer.getView(s)[0]=sy;var l=this.indexBuffer.getView(s);ay(i,l);var u=this.colorBuffer.getView(s);H0([0,0,0],1,u);var h=this.transformBuffer.getMatrixView(s);this.setTransformMatrix(r,h,a),this.simpleCount++,this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()},"drawPickingRectangle")},{key:"drawNode",value:o(function(r,i,n){var a=this.simpleShapeOptions.get(n);if(this._isVisible(r,a)){var s=a.shapeProps,l=this._getVertTypeForShape(r,s.shape);if(l===void 0||a.isSimple&&!a.isSimple(r)){this.drawTexture(r,i,n);return}var u=this.instanceCount;if(this.vertTypeBuffer.getView(u)[0]=l,l===JE||l===jb){var h=a.getBoundingBox(r),f=this._getCornerRadius(r,s.radius,h),d=this.cornerRadiusBuffer.getView(u);d[0]=f,d[1]=f,d[2]=f,d[3]=f,l===jb&&(d[0]=0,d[2]=0)}var p=this.indexBuffer.getView(u);ay(i,p);var m=r.pstyle(s.color).value,g=r.pstyle(s.opacity).value,y=this.colorBuffer.getView(u);H0(m,g,y);var v=this.lineWidthBuffer.getView(u);if(v[0]=0,v[1]=0,s.border){var x=r.pstyle("border-width").value;if(x>0){var b=r.pstyle("border-color").value,T=r.pstyle("border-opacity").value,w=this.borderColorBuffer.getView(u);H0(b,T,w);var k=r.pstyle("border-position").value;if(k==="inside")v[0]=0,v[1]=-x;else if(k==="outside")v[0]=x,v[1]=0;else{var C=x/2;v[0]=C,v[1]=-C}}}var E=this.transformBuffer.getMatrixView(u);this.setTransformMatrix(r,E,a),this.simpleCount++,this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}},"drawNode")},{key:"_getVertTypeForShape",value:o(function(r,i){var n=r.pstyle(i).value;switch(n){case"rectangle":return sy;case"ellipse":return Xb;case"roundrectangle":case"round-rectangle":return JE;case"bottom-round-rectangle":return jb;default:return}},"_getVertTypeForShape")},{key:"_getCornerRadius",value:o(function(r,i,n){var a=n.w,s=n.h;if(r.pstyle(i).value==="auto")return Od(a,s);var l=r.pstyle(i).pfValue,u=a/2,h=s/2;return Math.min(l,h,u)},"_getCornerRadius")},{key:"drawEdgeArrow",value:o(function(r,i,n){if(r.visible()){var a=r._private.rscratch,s,l,u;if(n==="source"?(s=a.arrowStartX,l=a.arrowStartY,u=a.srcArrowAngle):(s=a.arrowEndX,l=a.arrowEndY,u=a.tgtArrowAngle),!(isNaN(s)||s==null||isNaN(l)||l==null||isNaN(u)||u==null)){var h=r.pstyle(n+"-arrow-shape").value;if(h!=="none"){var f=r.pstyle(n+"-arrow-color").value,d=r.pstyle("opacity").value,p=r.pstyle("line-opacity").value,m=d*p,g=r.pstyle("width").pfValue,y=r.pstyle("arrow-scale").value,v=this.r.getArrowWidth(g,y),x=this.instanceCount,b=this.transformBuffer.getMatrixView(x);age(b),uS(b,b,[s,l]),GB(b,b,[v,v]),sge(b,b,u),this.vertTypeBuffer.getView(x)[0]=TB;var T=this.indexBuffer.getView(x);ay(i,T);var w=this.colorBuffer.getView(x);H0(f,m,w),this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}}}},"drawEdgeArrow")},{key:"drawEdgeLine",value:o(function(r,i){if(r.visible()){var n=this._getEdgePoints(r);if(n){var a=r.pstyle("opacity").value,s=r.pstyle("line-opacity").value,l=r.pstyle("width").pfValue,u=r.pstyle("line-color").value,h=a*s;if(n.length/2+this.instanceCount>this.maxInstances&&this.endBatch(),n.length==4){var f=this.instanceCount;this.vertTypeBuffer.getView(f)[0]=oge;var d=this.indexBuffer.getView(f);ay(i,d);var p=this.colorBuffer.getView(f);H0(u,h,p);var m=this.lineWidthBuffer.getView(f);m[0]=l;var g=this.pointAPointBBuffer.getView(f);g[0]=n[0],g[1]=n[1],g[2]=n[2],g[3]=n[3],this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}else for(var y=0;y=this.maxInstances&&this.endBatch()}}}},"drawEdgeLine")},{key:"_isValidEdge",value:o(function(r){var i=r._private.rscratch;return!(i.badLine||i.allpts==null||isNaN(i.allpts[0]))},"_isValidEdge")},{key:"_getEdgePoints",value:o(function(r){var i=r._private.rscratch;if(this._isValidEdge(r)){var n=i.allpts;if(n.length==4)return n;var a=this._getNumSegments(r);return this._getCurveSegmentPoints(n,a)}},"_getEdgePoints")},{key:"_getNumSegments",value:o(function(r){var i=15;return Math.min(Math.max(i,5),this.maxInstances)},"_getNumSegments")},{key:"_getCurveSegmentPoints",value:o(function(r,i){if(r.length==4)return r;for(var n=Array((i+1)*2),a=0;a<=i;a++)if(a==0)n[0]=r[0],n[1]=r[1];else if(a==i)n[a*2]=r[r.length-2],n[a*2+1]=r[r.length-1];else{var s=a/i;this._setCurvePoint(r,s,n,a*2)}return n},"_getCurveSegmentPoints")},{key:"_setCurvePoint",value:o(function(r,i,n,a){if(r.length<=2)n[a]=r[0],n[a+1]=r[1];else{for(var s=Array(r.length-2),l=0;l0}},"isLayerVisible"),l=o(function(d){var p=d.pstyle("text-events").strValue==="yes";return p?CS.USE_BB:CS.IGNORE},"getTexPickingMode"),u=o(function(d){var p=d.position(),m=p.x,g=p.y,y=d.outerWidth(),v=d.outerHeight();return{w:y,h:v,x1:m-y/2,y1:g-v/2}},"getBBForSimpleShape");r.drawing.addAtlasCollection("node",{texRows:t.webglTexRowsNodes}),r.drawing.addAtlasCollection("label",{texRows:t.webglTexRows}),r.drawing.addTextureAtlasRenderType("node-body",{collection:"node",getKey:e.getStyleKey,getBoundingBox:e.getElementBox,drawElement:e.drawElement}),r.drawing.addSimpleShapeRenderType("node-body",{getBoundingBox:u,isSimple:Mrt,shapeProps:{shape:"shape",color:"background-color",opacity:"background-opacity",radius:"corner-radius",border:!0}}),r.drawing.addSimpleShapeRenderType("node-overlay",{getBoundingBox:u,isVisible:s("overlay"),shapeProps:{shape:"overlay-shape",color:"overlay-color",opacity:"overlay-opacity",padding:"overlay-padding",radius:"overlay-corner-radius"}}),r.drawing.addSimpleShapeRenderType("node-underlay",{getBoundingBox:u,isVisible:s("underlay"),shapeProps:{shape:"underlay-shape",color:"underlay-color",opacity:"underlay-opacity",padding:"underlay-padding",radius:"underlay-corner-radius"}}),r.drawing.addTextureAtlasRenderType("label",{collection:"label",getTexPickingMode:l,getKey:kB(e.getLabelKey,null),getBoundingBox:CB(e.getLabelBox,null),drawClipped:!0,drawElement:e.drawLabel,getRotation:n(null),getRotationPoint:e.getLabelRotationPoint,getRotationOffset:e.getLabelRotationOffset,isVisible:a("label")}),r.drawing.addTextureAtlasRenderType("edge-source-label",{collection:"label",getTexPickingMode:l,getKey:kB(e.getSourceLabelKey,"source"),getBoundingBox:CB(e.getSourceLabelBox,"source"),drawClipped:!0,drawElement:e.drawSourceLabel,getRotation:n("source"),getRotationPoint:e.getSourceLabelRotationPoint,getRotationOffset:e.getSourceLabelRotationOffset,isVisible:a("source-label")}),r.drawing.addTextureAtlasRenderType("edge-target-label",{collection:"label",getTexPickingMode:l,getKey:kB(e.getTargetLabelKey,"target"),getBoundingBox:CB(e.getTargetLabelBox,"target"),drawClipped:!0,drawElement:e.drawTargetLabel,getRotation:n("target"),getRotationPoint:e.getTargetLabelRotationPoint,getRotationOffset:e.getTargetLabelRotationOffset,isVisible:a("target-label")});var h=yT(function(){console.log("garbage collect flag set"),r.data.gc=!0},1e4);r.onUpdateEleCalcs(function(f,d){var p=!1;d&&d.length>0&&(p|=r.drawing.invalidate(d)),p&&h()}),tit(r)};o(eit,"getBGColor");o(H1e,"getLabelLines");kB=o(function(e,r){return function(i){var n=e(i),a=H1e(i,r);return a.length>1?a.map(function(s,l){return"".concat(n,"_").concat(l)}):n}},"getStyleKeysForLabel"),CB=o(function(e,r){return function(i,n){var a=e(i);if(typeof n=="string"){var s=n.indexOf("_");if(s>0){var l=Number(n.substring(s+1)),u=H1e(i,r),h=a.h/u.length,f=h*l,d=a.y1+f;return{x1:a.x1,w:a.w,y1:d,h,yOffset:f}}}return a}},"getBoundingBoxForLabel");o(tit,"overrideCanvasRendererFunctions");o(rit,"clearWebgl");o(iit,"clearCanvas");o(nit,"createPanZoomMatrix");o(Y1e,"setContextTransform");o(ait,"drawSelectionRectangle");o(sit,"drawAxes");o(oit,"drawAtlases");o(lit,"getPickingIndexes");o(cit,"findNearestElementsWebgl");o(wB,"drawEle");o(j1e,"renderWebgl");qd={};qd.drawPolygonPath=function(t,e,r,i,n,a){var s=i/2,l=n/2;t.beginPath&&t.beginPath(),t.moveTo(e+s*a[0],r+l*a[1]);for(var u=1;u0&&s>0){m.clearRect(0,0,a,s),m.globalCompositeOperation="source-over";var g=this.getCachedZSortedEles();if(t.full)m.translate(-i.x1*h,-i.y1*h),m.scale(h,h),this.drawElements(m,g),m.scale(1/h,1/h),m.translate(i.x1*h,i.y1*h);else{var y=e.pan(),v={x:y.x*h,y:y.y*h};h*=e.zoom(),m.translate(v.x,v.y),m.scale(h,h),this.drawElements(m,g),m.scale(1/h,1/h),m.translate(-v.x,-v.y)}t.bg&&(m.globalCompositeOperation="destination-over",m.fillStyle=t.bg,m.rect(0,0,a,s),m.fill())}return p};o(uit,"b64ToBlob");o(hge,"b64UriToB64");o(K1e,"output");CT.png=function(t){return K1e(t,this.bufferCanvasImage(t),"image/png")};CT.jpg=function(t){return K1e(t,this.bufferCanvasImage(t),"image/jpeg")};Q1e={};Q1e.nodeShapeImpl=function(t,e,r,i,n,a,s,l){switch(t){case"ellipse":return this.drawEllipsePath(e,r,i,n,a);case"polygon":return this.drawPolygonPath(e,r,i,n,a,s);case"round-polygon":return this.drawRoundPolygonPath(e,r,i,n,a,s,l);case"roundrectangle":case"round-rectangle":return this.drawRoundRectanglePath(e,r,i,n,a,l);case"cutrectangle":case"cut-rectangle":return this.drawCutRectanglePath(e,r,i,n,a,s,l);case"bottomroundrectangle":case"bottom-round-rectangle":return this.drawBottomRoundRectanglePath(e,r,i,n,a,l);case"barrel":return this.drawBarrelPath(e,r,i,n,a)}};hit=Z1e,Yr=Z1e.prototype;Yr.CANVAS_LAYERS=3;Yr.SELECT_BOX=0;Yr.DRAG=1;Yr.NODE=2;Yr.WEBGL=3;Yr.CANVAS_TYPES=["2d","2d","2d","webgl2"];Yr.BUFFER_COUNT=3;Yr.TEXTURE_BUFFER=0;Yr.MOTIONBLUR_BUFFER_NODE=1;Yr.MOTIONBLUR_BUFFER_DRAG=2;o(Z1e,"CanvasRenderer");Yr.redrawHint=function(t,e){var r=this;switch(t){case"eles":r.data.canvasNeedsRedraw[Yr.NODE]=e;break;case"drag":r.data.canvasNeedsRedraw[Yr.DRAG]=e;break;case"select":r.data.canvasNeedsRedraw[Yr.SELECT_BOX]=e;break;case"gc":r.data.gc=!0;break}};fit=typeof Path2D<"u";Yr.path2dEnabled=function(t){if(t===void 0)return this.pathsEnabled;this.pathsEnabled=!!t};Yr.usePaths=function(){return fit&&this.pathsEnabled};Yr.setImgSmoothing=function(t,e){t.imageSmoothingEnabled!=null?t.imageSmoothingEnabled=e:(t.webkitImageSmoothingEnabled=e,t.mozImageSmoothingEnabled=e,t.msImageSmoothingEnabled=e)};Yr.getImgSmoothing=function(t){return t.imageSmoothingEnabled!=null?t.imageSmoothingEnabled:t.webkitImageSmoothingEnabled||t.mozImageSmoothingEnabled||t.msImageSmoothingEnabled};Yr.makeOffscreenCanvas=function(t,e){var r;if((typeof OffscreenCanvas>"u"?"undefined":pa(OffscreenCanvas))!=="undefined")r=new OffscreenCanvas(t,e);else{var i=this.cy.window(),n=i.document;r=n.createElement("canvas"),r.width=t,r.height=e}return r};[z1e,Gu,Jh,pF,am,Vd,Hs,U1e,qd,CT,Q1e].forEach(function(t){yr(Yr,t)});dit=[{name:"null",impl:S1e},{name:"base",impl:P1e},{name:"canvas",impl:hit}],pit=[{type:"layout",extensions:$tt},{type:"renderer",extensions:dit}],J1e={},eye={};o(tye,"setExtension");o(rye,"getExtension");o(mit,"setModule");o(git,"getModule");WB=o(function(){if(arguments.length===2)return rye.apply(null,arguments);if(arguments.length===3)return tye.apply(null,arguments);if(arguments.length===4)return git.apply(null,arguments);if(arguments.length===5)return mit.apply(null,arguments);mn("Invalid extension access syntax")},"extension");uT.prototype.extension=WB;pit.forEach(function(t){t.extensions.forEach(function(e){tye(t.type,e.name,e.impl)})});wS=o(function(){if(!(this instanceof wS))return new wS;this.length=0},"Stylesheet"),im=wS.prototype;im.instanceString=function(){return"stylesheet"};im.selector=function(t){var e=this.length++;return this[e]={selector:t,properties:[]},this};im.css=function(t,e){var r=this.length-1;if(lr(t))this[r].properties.push({name:t,value:e});else if(si(t))for(var i=t,n=Object.keys(i),a=0;a{"use strict";o((function(e,r){typeof wT=="object"&&typeof yF=="object"?yF.exports=r():typeof define=="function"&&define.amd?define([],r):typeof wT=="object"?wT.layoutBase=r():e.layoutBase=r()}),"webpackUniversalModuleDefinition")(wT,function(){return(function(t){var e={};function r(i){if(e[i])return e[i].exports;var n=e[i]={i,l:!1,exports:{}};return t[i].call(n.exports,n,n.exports,r),n.l=!0,n.exports}return o(r,"__webpack_require__"),r.m=t,r.c=e,r.i=function(i){return i},r.d=function(i,n,a){r.o(i,n)||Object.defineProperty(i,n,{configurable:!1,enumerable:!0,get:a})},r.n=function(i){var n=i&&i.__esModule?o(function(){return i.default},"getDefault"):o(function(){return i},"getModuleExports");return r.d(n,"a",n),n},r.o=function(i,n){return Object.prototype.hasOwnProperty.call(i,n)},r.p="",r(r.s=26)})([(function(t,e,r){"use strict";function i(){}o(i,"LayoutConstants"),i.QUALITY=1,i.DEFAULT_CREATE_BENDS_AS_NEEDED=!1,i.DEFAULT_INCREMENTAL=!1,i.DEFAULT_ANIMATION_ON_LAYOUT=!0,i.DEFAULT_ANIMATION_DURING_LAYOUT=!1,i.DEFAULT_ANIMATION_PERIOD=50,i.DEFAULT_UNIFORM_LEAF_NODE_SIZES=!1,i.DEFAULT_GRAPH_MARGIN=15,i.NODE_DIMENSIONS_INCLUDE_LABELS=!1,i.SIMPLE_NODE_SIZE=40,i.SIMPLE_NODE_HALF_SIZE=i.SIMPLE_NODE_SIZE/2,i.EMPTY_COMPOUND_NODE_SIZE=40,i.MIN_EDGE_LENGTH=1,i.WORLD_BOUNDARY=1e6,i.INITIAL_WORLD_BOUNDARY=i.WORLD_BOUNDARY/1e3,i.WORLD_CENTER_X=1200,i.WORLD_CENTER_Y=900,t.exports=i}),(function(t,e,r){"use strict";var i=r(2),n=r(8),a=r(9);function s(u,h,f){i.call(this,f),this.isOverlapingSourceAndTarget=!1,this.vGraphObject=f,this.bendpoints=[],this.source=u,this.target=h}o(s,"LEdge"),s.prototype=Object.create(i.prototype);for(var l in i)s[l]=i[l];s.prototype.getSource=function(){return this.source},s.prototype.getTarget=function(){return this.target},s.prototype.isInterGraph=function(){return this.isInterGraph},s.prototype.getLength=function(){return this.length},s.prototype.isOverlapingSourceAndTarget=function(){return this.isOverlapingSourceAndTarget},s.prototype.getBendpoints=function(){return this.bendpoints},s.prototype.getLca=function(){return this.lca},s.prototype.getSourceInLca=function(){return this.sourceInLca},s.prototype.getTargetInLca=function(){return this.targetInLca},s.prototype.getOtherEnd=function(u){if(this.source===u)return this.target;if(this.target===u)return this.source;throw"Node is not incident with this edge"},s.prototype.getOtherEndInGraph=function(u,h){for(var f=this.getOtherEnd(u),d=h.getGraphManager().getRoot();;){if(f.getOwner()==h)return f;if(f.getOwner()==d)break;f=f.getOwner().getParent()}return null},s.prototype.updateLength=function(){var u=new Array(4);this.isOverlapingSourceAndTarget=n.getIntersection(this.target.getRect(),this.source.getRect(),u),this.isOverlapingSourceAndTarget||(this.lengthX=u[0]-u[2],this.lengthY=u[1]-u[3],Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY))},s.prototype.updateLengthSimple=function(){this.lengthX=this.target.getCenterX()-this.source.getCenterX(),this.lengthY=this.target.getCenterY()-this.source.getCenterY(),Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY)},t.exports=s}),(function(t,e,r){"use strict";function i(n){this.vGraphObject=n}o(i,"LGraphObject"),t.exports=i}),(function(t,e,r){"use strict";var i=r(2),n=r(10),a=r(13),s=r(0),l=r(16),u=r(4);function h(d,p,m,g){m==null&&g==null&&(g=p),i.call(this,g),d.graphManager!=null&&(d=d.graphManager),this.estimatedSize=n.MIN_VALUE,this.inclusionTreeDepth=n.MAX_VALUE,this.vGraphObject=g,this.edges=[],this.graphManager=d,m!=null&&p!=null?this.rect=new a(p.x,p.y,m.width,m.height):this.rect=new a}o(h,"LNode"),h.prototype=Object.create(i.prototype);for(var f in i)h[f]=i[f];h.prototype.getEdges=function(){return this.edges},h.prototype.getChild=function(){return this.child},h.prototype.getOwner=function(){return this.owner},h.prototype.getWidth=function(){return this.rect.width},h.prototype.setWidth=function(d){this.rect.width=d},h.prototype.getHeight=function(){return this.rect.height},h.prototype.setHeight=function(d){this.rect.height=d},h.prototype.getCenterX=function(){return this.rect.x+this.rect.width/2},h.prototype.getCenterY=function(){return this.rect.y+this.rect.height/2},h.prototype.getCenter=function(){return new u(this.rect.x+this.rect.width/2,this.rect.y+this.rect.height/2)},h.prototype.getLocation=function(){return new u(this.rect.x,this.rect.y)},h.prototype.getRect=function(){return this.rect},h.prototype.getDiagonal=function(){return Math.sqrt(this.rect.width*this.rect.width+this.rect.height*this.rect.height)},h.prototype.getHalfTheDiagonal=function(){return Math.sqrt(this.rect.height*this.rect.height+this.rect.width*this.rect.width)/2},h.prototype.setRect=function(d,p){this.rect.x=d.x,this.rect.y=d.y,this.rect.width=p.width,this.rect.height=p.height},h.prototype.setCenter=function(d,p){this.rect.x=d-this.rect.width/2,this.rect.y=p-this.rect.height/2},h.prototype.setLocation=function(d,p){this.rect.x=d,this.rect.y=p},h.prototype.moveBy=function(d,p){this.rect.x+=d,this.rect.y+=p},h.prototype.getEdgeListToNode=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(y.target==d){if(y.source!=g)throw"Incorrect edge source!";p.push(y)}}),p},h.prototype.getEdgesBetween=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(!(y.source==g||y.target==g))throw"Incorrect edge source and/or target";(y.target==d||y.source==d)&&p.push(y)}),p},h.prototype.getNeighborsList=function(){var d=new Set,p=this;return p.edges.forEach(function(m){if(m.source==p)d.add(m.target);else{if(m.target!=p)throw"Incorrect incidency!";d.add(m.source)}}),d},h.prototype.withChildren=function(){var d=new Set,p,m;if(d.add(this),this.child!=null)for(var g=this.child.getNodes(),y=0;yp&&(this.rect.x-=(this.labelWidth-p)/2,this.setWidth(this.labelWidth)),this.labelHeight>m&&(this.labelPos=="center"?this.rect.y-=(this.labelHeight-m)/2:this.labelPos=="top"&&(this.rect.y-=this.labelHeight-m),this.setHeight(this.labelHeight))}}},h.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==n.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},h.prototype.transform=function(d){var p=this.rect.x;p>s.WORLD_BOUNDARY?p=s.WORLD_BOUNDARY:p<-s.WORLD_BOUNDARY&&(p=-s.WORLD_BOUNDARY);var m=this.rect.y;m>s.WORLD_BOUNDARY?m=s.WORLD_BOUNDARY:m<-s.WORLD_BOUNDARY&&(m=-s.WORLD_BOUNDARY);var g=new u(p,m),y=d.inverseTransformPoint(g);this.setLocation(y.x,y.y)},h.prototype.getLeft=function(){return this.rect.x},h.prototype.getRight=function(){return this.rect.x+this.rect.width},h.prototype.getTop=function(){return this.rect.y},h.prototype.getBottom=function(){return this.rect.y+this.rect.height},h.prototype.getParent=function(){return this.owner==null?null:this.owner.getParent()},t.exports=h}),(function(t,e,r){"use strict";function i(n,a){n==null&&a==null?(this.x=0,this.y=0):(this.x=n,this.y=a)}o(i,"PointD"),i.prototype.getX=function(){return this.x},i.prototype.getY=function(){return this.y},i.prototype.setX=function(n){this.x=n},i.prototype.setY=function(n){this.y=n},i.prototype.getDifference=function(n){return new DimensionD(this.x-n.x,this.y-n.y)},i.prototype.getCopy=function(){return new i(this.x,this.y)},i.prototype.translate=function(n){return this.x+=n.width,this.y+=n.height,this},t.exports=i}),(function(t,e,r){"use strict";var i=r(2),n=r(10),a=r(0),s=r(6),l=r(3),u=r(1),h=r(13),f=r(12),d=r(11);function p(g,y,v){i.call(this,v),this.estimatedSize=n.MIN_VALUE,this.margin=a.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=g,y!=null&&y instanceof s?this.graphManager=y:y!=null&&y instanceof Layout&&(this.graphManager=y.graphManager)}o(p,"LGraph"),p.prototype=Object.create(i.prototype);for(var m in i)p[m]=i[m];p.prototype.getNodes=function(){return this.nodes},p.prototype.getEdges=function(){return this.edges},p.prototype.getGraphManager=function(){return this.graphManager},p.prototype.getParent=function(){return this.parent},p.prototype.getLeft=function(){return this.left},p.prototype.getRight=function(){return this.right},p.prototype.getTop=function(){return this.top},p.prototype.getBottom=function(){return this.bottom},p.prototype.isConnected=function(){return this.isConnected},p.prototype.add=function(g,y,v){if(y==null&&v==null){var x=g;if(this.graphManager==null)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(x)>-1)throw"Node already in graph!";return x.owner=this,this.getNodes().push(x),x}else{var b=g;if(!(this.getNodes().indexOf(y)>-1&&this.getNodes().indexOf(v)>-1))throw"Source or target not in graph!";if(!(y.owner==v.owner&&y.owner==this))throw"Both owners must be this graph!";return y.owner!=v.owner?null:(b.source=y,b.target=v,b.isInterGraph=!1,this.getEdges().push(b),y.edges.push(b),v!=y&&v.edges.push(b),b)}},p.prototype.remove=function(g){var y=g;if(g instanceof l){if(y==null)throw"Node is null!";if(!(y.owner!=null&&y.owner==this))throw"Owner graph is invalid!";if(this.graphManager==null)throw"Owner graph manager is invalid!";for(var v=y.edges.slice(),x,b=v.length,T=0;T-1&&C>-1))throw"Source and/or target doesn't know this edge!";x.source.edges.splice(k,1),x.target!=x.source&&x.target.edges.splice(C,1);var w=x.source.owner.getEdges().indexOf(x);if(w==-1)throw"Not in owner's edge list!";x.source.owner.getEdges().splice(w,1)}},p.prototype.updateLeftTop=function(){for(var g=n.MAX_VALUE,y=n.MAX_VALUE,v,x,b,T=this.getNodes(),w=T.length,k=0;kv&&(g=v),y>x&&(y=x)}return g==n.MAX_VALUE?null:(T[0].getParent().paddingLeft!=null?b=T[0].getParent().paddingLeft:b=this.margin,this.left=y-b,this.top=g-b,new f(this.left,this.top))},p.prototype.updateBounds=function(g){for(var y=n.MAX_VALUE,v=-n.MAX_VALUE,x=n.MAX_VALUE,b=-n.MAX_VALUE,T,w,k,C,E,S=this.nodes,L=S.length,M=0;MT&&(y=T),vk&&(x=k),bT&&(y=T),vk&&(x=k),b=this.nodes.length){var L=0;v.forEach(function(M){M.owner==g&&L++}),L==this.nodes.length&&(this.isConnected=!0)}},t.exports=p}),(function(t,e,r){"use strict";var i,n=r(1);function a(s){i=r(5),this.layout=s,this.graphs=[],this.edges=[]}o(a,"LGraphManager"),a.prototype.addRoot=function(){var s=this.layout.newGraph(),l=this.layout.newNode(null),u=this.add(s,l);return this.setRootGraph(u),this.rootGraph},a.prototype.add=function(s,l,u,h,f){if(u==null&&h==null&&f==null){if(s==null)throw"Graph is null!";if(l==null)throw"Parent node is null!";if(this.graphs.indexOf(s)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(s),s.parent!=null)throw"Already has a parent!";if(l.child!=null)throw"Already has a child!";return s.parent=l,l.child=s,s}else{f=u,h=l,u=s;var d=h.getOwner(),p=f.getOwner();if(!(d!=null&&d.getGraphManager()==this))throw"Source not in this graph mgr!";if(!(p!=null&&p.getGraphManager()==this))throw"Target not in this graph mgr!";if(d==p)return u.isInterGraph=!1,d.add(u,h,f);if(u.isInterGraph=!0,u.source=h,u.target=f,this.edges.indexOf(u)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(u),!(u.source!=null&&u.target!=null))throw"Edge source and/or target is null!";if(!(u.source.edges.indexOf(u)==-1&&u.target.edges.indexOf(u)==-1))throw"Edge already in source and/or target incidency list!";return u.source.edges.push(u),u.target.edges.push(u),u}},a.prototype.remove=function(s){if(s instanceof i){var l=s;if(l.getGraphManager()!=this)throw"Graph not in this graph mgr";if(!(l==this.rootGraph||l.parent!=null&&l.parent.graphManager==this))throw"Invalid parent node!";var u=[];u=u.concat(l.getEdges());for(var h,f=u.length,d=0;d=s.getRight()?l[0]+=Math.min(s.getX()-a.getX(),a.getRight()-s.getRight()):s.getX()<=a.getX()&&s.getRight()>=a.getRight()&&(l[0]+=Math.min(a.getX()-s.getX(),s.getRight()-a.getRight())),a.getY()<=s.getY()&&a.getBottom()>=s.getBottom()?l[1]+=Math.min(s.getY()-a.getY(),a.getBottom()-s.getBottom()):s.getY()<=a.getY()&&s.getBottom()>=a.getBottom()&&(l[1]+=Math.min(a.getY()-s.getY(),s.getBottom()-a.getBottom()));var f=Math.abs((s.getCenterY()-a.getCenterY())/(s.getCenterX()-a.getCenterX()));s.getCenterY()===a.getCenterY()&&s.getCenterX()===a.getCenterX()&&(f=1);var d=f*l[0],p=l[1]/f;l[0]d)return l[0]=u,l[1]=m,l[2]=f,l[3]=S,!1;if(hf)return l[0]=p,l[1]=h,l[2]=C,l[3]=d,!1;if(uf?(l[0]=y,l[1]=v,A=!0):(l[0]=g,l[1]=m,A=!0):D===R&&(u>f?(l[0]=p,l[1]=m,A=!0):(l[0]=x,l[1]=v,A=!0)),-N===R?f>u?(l[2]=E,l[3]=S,_=!0):(l[2]=C,l[3]=k,_=!0):N===R&&(f>u?(l[2]=w,l[3]=k,_=!0):(l[2]=L,l[3]=S,_=!0)),A&&_)return!1;if(u>f?h>d?(B=this.getCardinalDirection(D,R,4),O=this.getCardinalDirection(N,R,2)):(B=this.getCardinalDirection(-D,R,3),O=this.getCardinalDirection(-N,R,1)):h>d?(B=this.getCardinalDirection(-D,R,1),O=this.getCardinalDirection(-N,R,3)):(B=this.getCardinalDirection(D,R,2),O=this.getCardinalDirection(N,R,4)),!A)switch(B){case 1:z=m,$=u+-T/R,l[0]=$,l[1]=z;break;case 2:$=x,z=h+b*R,l[0]=$,l[1]=z;break;case 3:z=v,$=u+T/R,l[0]=$,l[1]=z;break;case 4:$=y,z=h+-b*R,l[0]=$,l[1]=z;break}if(!_)switch(O){case 1:V=k,F=f+-I/R,l[2]=F,l[3]=V;break;case 2:F=L,V=d+M*R,l[2]=F,l[3]=V;break;case 3:V=S,F=f+I/R,l[2]=F,l[3]=V;break;case 4:F=E,V=d+-M*R,l[2]=F,l[3]=V;break}}return!1},n.getCardinalDirection=function(a,s,l){return a>s?l:1+l%4},n.getIntersection=function(a,s,l,u){if(u==null)return this.getIntersection2(a,s,l);var h=a.x,f=a.y,d=s.x,p=s.y,m=l.x,g=l.y,y=u.x,v=u.y,x=void 0,b=void 0,T=void 0,w=void 0,k=void 0,C=void 0,E=void 0,S=void 0,L=void 0;return T=p-f,k=h-d,E=d*f-h*p,w=v-g,C=m-y,S=y*g-m*v,L=T*C-w*k,L===0?null:(x=(k*S-C*E)/L,b=(w*E-T*S)/L,new i(x,b))},n.angleOfVector=function(a,s,l,u){var h=void 0;return a!==l?(h=Math.atan((u-s)/(l-a)),l0?1:n<0?-1:0},i.floor=function(n){return n<0?Math.ceil(n):Math.floor(n)},i.ceil=function(n){return n<0?Math.floor(n):Math.ceil(n)},t.exports=i}),(function(t,e,r){"use strict";function i(){}o(i,"Integer"),i.MAX_VALUE=2147483647,i.MIN_VALUE=-2147483648,t.exports=i}),(function(t,e,r){"use strict";var i=(function(){function h(f,d){for(var p=0;p"u"?"undefined":i(a);return a==null||s!="object"&&s!="function"},t.exports=n}),(function(t,e,r){"use strict";function i(m){if(Array.isArray(m)){for(var g=0,y=Array(m.length);g0&&g;){for(T.push(k[0]);T.length>0&&g;){var C=T[0];T.splice(0,1),b.add(C);for(var E=C.getEdges(),x=0;x-1&&k.splice(I,1)}b=new Set,w=new Map}}return m},p.prototype.createDummyNodesForBendpoints=function(m){for(var g=[],y=m.source,v=this.graphManager.calcLowestCommonAncestor(m.source,m.target),x=0;x0){for(var v=this.edgeToDummyNodes.get(y),x=0;x=0&&g.splice(S,1);var L=w.getNeighborsList();L.forEach(function(A){if(y.indexOf(A)<0){var _=v.get(A),D=_-1;D==1&&C.push(A),v.set(A,D)}})}y=y.concat(C),(g.length==1||g.length==2)&&(x=!0,b=g[0])}return b},p.prototype.setGraphManager=function(m){this.graphManager=m},t.exports=p}),(function(t,e,r){"use strict";function i(){}o(i,"RandomSeed"),i.seed=1,i.x=0,i.nextDouble=function(){return i.x=Math.sin(i.seed++)*1e4,i.x-Math.floor(i.x)},t.exports=i}),(function(t,e,r){"use strict";var i=r(4);function n(a,s){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}o(n,"Transform"),n.prototype.getWorldOrgX=function(){return this.lworldOrgX},n.prototype.setWorldOrgX=function(a){this.lworldOrgX=a},n.prototype.getWorldOrgY=function(){return this.lworldOrgY},n.prototype.setWorldOrgY=function(a){this.lworldOrgY=a},n.prototype.getWorldExtX=function(){return this.lworldExtX},n.prototype.setWorldExtX=function(a){this.lworldExtX=a},n.prototype.getWorldExtY=function(){return this.lworldExtY},n.prototype.setWorldExtY=function(a){this.lworldExtY=a},n.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},n.prototype.setDeviceOrgX=function(a){this.ldeviceOrgX=a},n.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},n.prototype.setDeviceOrgY=function(a){this.ldeviceOrgY=a},n.prototype.getDeviceExtX=function(){return this.ldeviceExtX},n.prototype.setDeviceExtX=function(a){this.ldeviceExtX=a},n.prototype.getDeviceExtY=function(){return this.ldeviceExtY},n.prototype.setDeviceExtY=function(a){this.ldeviceExtY=a},n.prototype.transformX=function(a){var s=0,l=this.lworldExtX;return l!=0&&(s=this.ldeviceOrgX+(a-this.lworldOrgX)*this.ldeviceExtX/l),s},n.prototype.transformY=function(a){var s=0,l=this.lworldExtY;return l!=0&&(s=this.ldeviceOrgY+(a-this.lworldOrgY)*this.ldeviceExtY/l),s},n.prototype.inverseTransformX=function(a){var s=0,l=this.ldeviceExtX;return l!=0&&(s=this.lworldOrgX+(a-this.ldeviceOrgX)*this.lworldExtX/l),s},n.prototype.inverseTransformY=function(a){var s=0,l=this.ldeviceExtY;return l!=0&&(s=this.lworldOrgY+(a-this.ldeviceOrgY)*this.lworldExtY/l),s},n.prototype.inverseTransformPoint=function(a){var s=new i(this.inverseTransformX(a.x),this.inverseTransformY(a.y));return s},t.exports=n}),(function(t,e,r){"use strict";function i(d){if(Array.isArray(d)){for(var p=0,m=Array(d.length);pa.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*a.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-a.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT_INCREMENTAL):(d>a.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(a.COOLING_ADAPTATION_FACTOR,1-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*(1-a.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(this.getAllNodes().length*5,this.maxIterations),this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},h.prototype.calcSpringForces=function(){for(var d=this.getAllEdges(),p,m=0;m0&&arguments[0]!==void 0?arguments[0]:!0,p=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,m,g,y,v,x=this.getAllNodes(),b;if(this.useFRGridVariant)for(this.totalIterations%a.GRID_CALCULATION_CHECK_PERIOD==1&&d&&this.updateGrid(),b=new Set,m=0;mT||b>T)&&(d.gravitationForceX=-this.gravityConstant*y,d.gravitationForceY=-this.gravityConstant*v)):(T=p.getEstimatedSize()*this.compoundGravityRangeFactor,(x>T||b>T)&&(d.gravitationForceX=-this.gravityConstant*y*this.compoundGravityConstant,d.gravitationForceY=-this.gravityConstant*v*this.compoundGravityConstant))},h.prototype.isConverged=function(){var d,p=!1;return this.totalIterations>this.maxIterations/3&&(p=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),d=this.totalDisplacement=x.length||T>=x[0].length)){for(var w=0;wh},"_defaultCompareFunction")}]),l})();t.exports=s}),(function(t,e,r){"use strict";var i=(function(){function s(l,u){for(var h=0;h2&&arguments[2]!==void 0?arguments[2]:1,f=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,d=arguments.length>4&&arguments[4]!==void 0?arguments[4]:-1;n(this,s),this.sequence1=l,this.sequence2=u,this.match_score=h,this.mismatch_penalty=f,this.gap_penalty=d,this.iMax=l.length+1,this.jMax=u.length+1,this.grid=new Array(this.iMax);for(var p=0;p=0;l--){var u=this.listeners[l];u.event===a&&u.callback===s&&this.listeners.splice(l,1)}},n.emit=function(a,s){for(var l=0;l{"use strict";o((function(e,r){typeof ET=="object"&&typeof xF=="object"?xF.exports=r(vF()):typeof define=="function"&&define.amd?define(["layout-base"],r):typeof ET=="object"?ET.coseBase=r(vF()):e.coseBase=r(e.layoutBase)}),"webpackUniversalModuleDefinition")(ET,function(t){return(function(e){var r={};function i(n){if(r[n])return r[n].exports;var a=r[n]={i:n,l:!1,exports:{}};return e[n].call(a.exports,a,a.exports,i),a.l=!0,a.exports}return o(i,"__webpack_require__"),i.m=e,i.c=r,i.i=function(n){return n},i.d=function(n,a,s){i.o(n,a)||Object.defineProperty(n,a,{configurable:!1,enumerable:!0,get:s})},i.n=function(n){var a=n&&n.__esModule?o(function(){return n.default},"getDefault"):o(function(){return n},"getModuleExports");return i.d(a,"a",a),a},i.o=function(n,a){return Object.prototype.hasOwnProperty.call(n,a)},i.p="",i(i.s=7)})([(function(e,r){e.exports=t}),(function(e,r,i){"use strict";var n=i(0).FDLayoutConstants;function a(){}o(a,"CoSEConstants");for(var s in n)a[s]=n[s];a.DEFAULT_USE_MULTI_LEVEL_SCALING=!1,a.DEFAULT_RADIAL_SEPARATION=n.DEFAULT_EDGE_LENGTH,a.DEFAULT_COMPONENT_SEPERATION=60,a.TILE=!0,a.TILING_PADDING_VERTICAL=10,a.TILING_PADDING_HORIZONTAL=10,a.TREE_REDUCTION_ON_INCREMENTAL=!1,e.exports=a}),(function(e,r,i){"use strict";var n=i(0).FDLayoutEdge;function a(l,u,h){n.call(this,l,u,h)}o(a,"CoSEEdge"),a.prototype=Object.create(n.prototype);for(var s in n)a[s]=n[s];e.exports=a}),(function(e,r,i){"use strict";var n=i(0).LGraph;function a(l,u,h){n.call(this,l,u,h)}o(a,"CoSEGraph"),a.prototype=Object.create(n.prototype);for(var s in n)a[s]=n[s];e.exports=a}),(function(e,r,i){"use strict";var n=i(0).LGraphManager;function a(l){n.call(this,l)}o(a,"CoSEGraphManager"),a.prototype=Object.create(n.prototype);for(var s in n)a[s]=n[s];e.exports=a}),(function(e,r,i){"use strict";var n=i(0).FDLayoutNode,a=i(0).IMath;function s(u,h,f,d){n.call(this,u,h,f,d)}o(s,"CoSENode"),s.prototype=Object.create(n.prototype);for(var l in n)s[l]=n[l];s.prototype.move=function(){var u=this.graphManager.getLayout();this.displacementX=u.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.noOfChildren,this.displacementY=u.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.noOfChildren,Math.abs(this.displacementX)>u.coolingFactor*u.maxNodeDisplacement&&(this.displacementX=u.coolingFactor*u.maxNodeDisplacement*a.sign(this.displacementX)),Math.abs(this.displacementY)>u.coolingFactor*u.maxNodeDisplacement&&(this.displacementY=u.coolingFactor*u.maxNodeDisplacement*a.sign(this.displacementY)),this.child==null?this.moveBy(this.displacementX,this.displacementY):this.child.getNodes().length==0?this.moveBy(this.displacementX,this.displacementY):this.propogateDisplacementToChildren(this.displacementX,this.displacementY),u.totalDisplacement+=Math.abs(this.displacementX)+Math.abs(this.displacementY),this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0},s.prototype.propogateDisplacementToChildren=function(u,h){for(var f=this.getChild().getNodes(),d,p=0;p0)this.positionNodesRadially(k);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var C=new Set(this.getAllNodes()),E=this.nodesWithGravity.filter(function(S){return C.has(S)});this.graphManager.setAllNodesToApplyGravitation(E),this.positionNodesRandomly()}}return this.initSpringEmbedder(),this.runSpringEmbedder(),!0},T.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished)if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;if(this.totalIterations%f.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged())if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;this.coolingCycle++,this.layoutQuality==0?this.coolingAdjuster=this.coolingCycle:this.layoutQuality==1&&(this.coolingAdjuster=this.coolingCycle/3),this.coolingFactor=Math.max(this.initialCoolingFactor-Math.pow(this.coolingCycle,Math.log(100*(this.initialCoolingFactor-this.finalTemperature))/Math.log(this.maxCoolingCycle))/100*this.coolingAdjuster,this.finalTemperature),this.animationPeriod=Math.ceil(this.initialAnimationPeriod*Math.sqrt(this.coolingFactor))}if(this.isTreeGrowing){if(this.growTreeIterations%10==0)if(this.prunedNodesAll.length>0){this.graphManager.updateBounds(),this.updateGrid(),this.growTree(this.prunedNodesAll),this.graphManager.resetAllNodesToApplyGravitation();var k=new Set(this.getAllNodes()),C=this.nodesWithGravity.filter(function(L){return k.has(L)});this.graphManager.setAllNodesToApplyGravitation(C),this.graphManager.updateBounds(),this.updateGrid(),this.coolingFactor=f.DEFAULT_COOLING_FACTOR_INCREMENTAL}else this.isTreeGrowing=!1,this.isGrowthFinished=!0;this.growTreeIterations++}if(this.isGrowthFinished){if(this.isConverged())return!0;this.afterGrowthIterations%10==0&&(this.graphManager.updateBounds(),this.updateGrid()),this.coolingFactor=f.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var E=!this.isTreeGrowing&&!this.isGrowthFinished,S=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(E,S),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},T.prototype.getPositionsData=function(){for(var k=this.graphManager.getAllNodes(),C={},E=0;E1){var A;for(A=0;AS&&(S=Math.floor(I.y)),M=Math.floor(I.x+h.DEFAULT_COMPONENT_SEPERATION)}this.transform(new m(d.WORLD_CENTER_X-I.x/2,d.WORLD_CENTER_Y-I.y/2))},T.radialLayout=function(k,C,E){var S=Math.max(this.maxDiagonalInTree(k),h.DEFAULT_RADIAL_SEPARATION);T.branchRadialLayout(C,null,0,359,0,S);var L=x.calculateBounds(k),M=new b;M.setDeviceOrgX(L.getMinX()),M.setDeviceOrgY(L.getMinY()),M.setWorldOrgX(E.x),M.setWorldOrgY(E.y);for(var I=0;I1;){var H=V[0];V.splice(0,1);var X=B.indexOf(H);X>=0&&B.splice(X,1),z--,O--}C!=null?F=(B.indexOf(V[0])+1)%z:F=0;for(var W=Math.abs(S-E)/O,Z=F;$!=O;Z=++Z%z){var Y=B[Z].getOtherEnd(k);if(Y!=C){var ae=(E+$*W)%360,J=(ae+W)%360;T.branchRadialLayout(Y,k,ae,J,L+M,M),$++}}},T.maxDiagonalInTree=function(k){for(var C=y.MIN_VALUE,E=0;EC&&(C=L)}return C},T.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},T.prototype.groupZeroDegreeMembers=function(){var k=this,C={};this.memberGroups={},this.idToDummyNode={};for(var E=[],S=this.graphManager.getAllNodes(),L=0;L"u"&&(C[A]=[]),C[A]=C[A].concat(M)}Object.keys(C).forEach(function(_){if(C[_].length>1){var D="DummyCompound_"+_;k.memberGroups[D]=C[_];var N=C[_][0].getParent(),R=new l(k.graphManager);R.id=D,R.paddingLeft=N.paddingLeft||0,R.paddingRight=N.paddingRight||0,R.paddingBottom=N.paddingBottom||0,R.paddingTop=N.paddingTop||0,k.idToDummyNode[D]=R;var B=k.getGraphManager().add(k.newGraph(),R),O=N.getChild();O.add(R);for(var $=0;$=0;k--){var C=this.compoundOrder[k],E=C.id,S=C.paddingLeft,L=C.paddingTop;this.adjustLocations(this.tiledMemberPack[E],C.rect.x,C.rect.y,S,L)}},T.prototype.repopulateZeroDegreeMembers=function(){var k=this,C=this.tiledZeroDegreePack;Object.keys(C).forEach(function(E){var S=k.idToDummyNode[E],L=S.paddingLeft,M=S.paddingTop;k.adjustLocations(C[E],S.rect.x,S.rect.y,L,M)})},T.prototype.getToBeTiled=function(k){var C=k.id;if(this.toBeTiled[C]!=null)return this.toBeTiled[C];var E=k.getChild();if(E==null)return this.toBeTiled[C]=!1,!1;for(var S=E.getNodes(),L=0;L0)return this.toBeTiled[C]=!1,!1;if(M.getChild()==null){this.toBeTiled[M.id]=!1;continue}if(!this.getToBeTiled(M))return this.toBeTiled[C]=!1,!1}return this.toBeTiled[C]=!0,!0},T.prototype.getNodeDegree=function(k){for(var C=k.id,E=k.getEdges(),S=0,L=0;L_&&(_=N.rect.height)}E+=_+k.verticalPadding}},T.prototype.tileCompoundMembers=function(k,C){var E=this;this.tiledMemberPack=[],Object.keys(k).forEach(function(S){var L=C[S];E.tiledMemberPack[S]=E.tileNodes(k[S],L.paddingLeft+L.paddingRight),L.rect.width=E.tiledMemberPack[S].width,L.rect.height=E.tiledMemberPack[S].height})},T.prototype.tileNodes=function(k,C){var E=h.TILING_PADDING_VERTICAL,S=h.TILING_PADDING_HORIZONTAL,L={rows:[],rowWidth:[],rowHeight:[],width:0,height:C,verticalPadding:E,horizontalPadding:S};k.sort(function(A,_){return A.rect.width*A.rect.height>_.rect.width*_.rect.height?-1:A.rect.width*A.rect.height<_.rect.width*_.rect.height?1:0});for(var M=0;M0&&(I+=k.horizontalPadding),k.rowWidth[E]=I,k.width0&&(A+=k.verticalPadding);var _=0;A>k.rowHeight[E]&&(_=k.rowHeight[E],k.rowHeight[E]=A,_=k.rowHeight[E]-_),k.height+=_,k.rows[E].push(C)},T.prototype.getShortestRowIndex=function(k){for(var C=-1,E=Number.MAX_VALUE,S=0;SE&&(C=S,E=k.rowWidth[S]);return C},T.prototype.canAddHorizontal=function(k,C,E){var S=this.getShortestRowIndex(k);if(S<0)return!0;var L=k.rowWidth[S];if(L+k.horizontalPadding+C<=k.width)return!0;var M=0;k.rowHeight[S]0&&(M=E+k.verticalPadding-k.rowHeight[S]);var I;k.width-L>=C+k.horizontalPadding?I=(k.height+M)/(L+C+k.horizontalPadding):I=(k.height+M)/k.width,M=E+k.verticalPadding;var A;return k.widthM&&C!=E){S.splice(-1,1),k.rows[E].push(L),k.rowWidth[C]=k.rowWidth[C]-M,k.rowWidth[E]=k.rowWidth[E]+M,k.width=k.rowWidth[instance.getLongestRowIndex(k)];for(var I=Number.MIN_VALUE,A=0;AI&&(I=S[A].height);C>0&&(I+=k.verticalPadding);var _=k.rowHeight[C]+k.rowHeight[E];k.rowHeight[C]=I,k.rowHeight[E]0)for(var O=L;O<=M;O++)B[0]+=this.grid[O][I-1].length+this.grid[O][I].length-1;if(M0)for(var O=I;O<=A;O++)B[3]+=this.grid[L-1][O].length+this.grid[L][O].length-1;for(var $=y.MAX_VALUE,z,F,V=0;V{"use strict";o((function(e,r){typeof ST=="object"&&typeof TF=="object"?TF.exports=r(bF()):typeof define=="function"&&define.amd?define(["cose-base"],r):typeof ST=="object"?ST.cytoscapeCoseBilkent=r(bF()):e.cytoscapeCoseBilkent=r(e.coseBase)}),"webpackUniversalModuleDefinition")(ST,function(t){return(function(e){var r={};function i(n){if(r[n])return r[n].exports;var a=r[n]={i:n,l:!1,exports:{}};return e[n].call(a.exports,a,a.exports,i),a.l=!0,a.exports}return o(i,"__webpack_require__"),i.m=e,i.c=r,i.i=function(n){return n},i.d=function(n,a,s){i.o(n,a)||Object.defineProperty(n,a,{configurable:!1,enumerable:!0,get:s})},i.n=function(n){var a=n&&n.__esModule?o(function(){return n.default},"getDefault"):o(function(){return n},"getModuleExports");return i.d(a,"a",a),a},i.o=function(n,a){return Object.prototype.hasOwnProperty.call(n,a)},i.p="",i(i.s=1)})([(function(e,r){e.exports=t}),(function(e,r,i){"use strict";var n=i(0).layoutBase.LayoutConstants,a=i(0).layoutBase.FDLayoutConstants,s=i(0).CoSEConstants,l=i(0).CoSELayout,u=i(0).CoSENode,h=i(0).layoutBase.PointD,f=i(0).layoutBase.DimensionD,d={ready:o(function(){},"ready"),stop:o(function(){},"stop"),quality:"default",nodeDimensionsIncludeLabels:!1,refresh:30,fit:!0,padding:10,randomize:!0,nodeRepulsion:4500,idealEdgeLength:50,edgeElasticity:.45,nestingFactor:.1,gravity:.25,numIter:2500,tile:!0,animate:"end",animationDuration:500,tilingPaddingVertical:10,tilingPaddingHorizontal:10,gravityRangeCompound:1.5,gravityCompound:1,gravityRange:3.8,initialEnergyOnIncremental:.5};function p(v,x){var b={};for(var T in v)b[T]=v[T];for(var T in x)b[T]=x[T];return b}o(p,"extend");function m(v){this.options=p(d,v),g(this.options)}o(m,"_CoSELayout");var g=o(function(x){x.nodeRepulsion!=null&&(s.DEFAULT_REPULSION_STRENGTH=a.DEFAULT_REPULSION_STRENGTH=x.nodeRepulsion),x.idealEdgeLength!=null&&(s.DEFAULT_EDGE_LENGTH=a.DEFAULT_EDGE_LENGTH=x.idealEdgeLength),x.edgeElasticity!=null&&(s.DEFAULT_SPRING_STRENGTH=a.DEFAULT_SPRING_STRENGTH=x.edgeElasticity),x.nestingFactor!=null&&(s.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=a.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=x.nestingFactor),x.gravity!=null&&(s.DEFAULT_GRAVITY_STRENGTH=a.DEFAULT_GRAVITY_STRENGTH=x.gravity),x.numIter!=null&&(s.MAX_ITERATIONS=a.MAX_ITERATIONS=x.numIter),x.gravityRange!=null&&(s.DEFAULT_GRAVITY_RANGE_FACTOR=a.DEFAULT_GRAVITY_RANGE_FACTOR=x.gravityRange),x.gravityCompound!=null&&(s.DEFAULT_COMPOUND_GRAVITY_STRENGTH=a.DEFAULT_COMPOUND_GRAVITY_STRENGTH=x.gravityCompound),x.gravityRangeCompound!=null&&(s.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=a.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=x.gravityRangeCompound),x.initialEnergyOnIncremental!=null&&(s.DEFAULT_COOLING_FACTOR_INCREMENTAL=a.DEFAULT_COOLING_FACTOR_INCREMENTAL=x.initialEnergyOnIncremental),x.quality=="draft"?n.QUALITY=0:x.quality=="proof"?n.QUALITY=2:n.QUALITY=1,s.NODE_DIMENSIONS_INCLUDE_LABELS=a.NODE_DIMENSIONS_INCLUDE_LABELS=n.NODE_DIMENSIONS_INCLUDE_LABELS=x.nodeDimensionsIncludeLabels,s.DEFAULT_INCREMENTAL=a.DEFAULT_INCREMENTAL=n.DEFAULT_INCREMENTAL=!x.randomize,s.ANIMATE=a.ANIMATE=n.ANIMATE=x.animate,s.TILE=x.tile,s.TILING_PADDING_VERTICAL=typeof x.tilingPaddingVertical=="function"?x.tilingPaddingVertical.call():x.tilingPaddingVertical,s.TILING_PADDING_HORIZONTAL=typeof x.tilingPaddingHorizontal=="function"?x.tilingPaddingHorizontal.call():x.tilingPaddingHorizontal},"getUserOptions");m.prototype.run=function(){var v,x,b=this.options,T=this.idToLNode={},w=this.layout=new l,k=this;k.stopped=!1,this.cy=this.options.cy,this.cy.trigger({type:"layoutstart",layout:this});var C=w.newGraphManager();this.gm=C;var E=this.options.eles.nodes(),S=this.options.eles.edges();this.root=C.addRoot(),this.processChildrenList(this.root,this.getTopMostNodes(E),w);for(var L=0;L0){var A;A=b.getGraphManager().add(b.newGraph(),E),this.processChildrenList(A,C,b)}}},m.prototype.stop=function(){return this.stopped=!0,this};var y=o(function(x){x("layout","cose-bilkent",m)},"register");typeof cytoscape<"u"&&y(cytoscape),e.exports=y})])})});function vit(t,e){t.forEach(r=>{let i={id:r.id,labelText:r.label,height:r.height,width:r.width,padding:r.padding??0};Object.keys(r).forEach(n=>{["id","label","height","width","padding","x","y"].includes(n)||(i[n]=r[n])}),e.add({group:"nodes",data:i,position:{x:r.x??0,y:r.y??0}})})}function xit(t,e){t.forEach(r=>{let i={id:r.id,source:r.start,target:r.end};Object.keys(r).forEach(n=>{["id","start","end"].includes(n)||(i[n]=r[n])}),e.add({group:"edges",data:i})})}function aye(t){return new Promise(e=>{let r=Ze("body").append("div").attr("id","cy").attr("style","display:none"),i=Wl({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"bezier"}}]});r.remove(),vit(t.nodes,i),xit(t.edges,i),i.nodes().forEach(function(a){a.layoutDimensions=()=>{let s=a.data();return{w:s.width,h:s.height}}});let n={name:"cose-bilkent",quality:"proof",styleEnabled:!1,animate:!1};i.layout(n).run(),i.ready(a=>{Q.info("Cytoscape ready",a),e(i)})})}function sye(t){return t.nodes().map(e=>{let r=e.data(),i=e.position(),n={id:r.id,x:i.x,y:i.y};return Object.keys(r).forEach(a=>{a!=="id"&&(n[a]=r[a])}),n})}function oye(t){return t.edges().map(e=>{let r=e.data(),i=e._private.rscratch,n={id:r.id,source:r.source,target:r.target,startX:i.startX,startY:i.startY,midX:i.midX,midY:i.midY,endX:i.endX,endY:i.endY};return Object.keys(r).forEach(a=>{["id","source","target"].includes(a)||(n[a]=r[a])}),n})}var nye,lye=P(()=>{"use strict";gF();nye=Wa(iye(),1);Pr();bt();Wl.use(nye.default);o(vit,"addNodes");o(xit,"addEdges");o(aye,"createCytoscapeInstance");o(sye,"extractPositionedNodes");o(oye,"extractPositionedEdges")});async function cye(t,e){Q.debug("Starting cose-bilkent layout algorithm");try{bit(t);let r=await aye(t),i=sye(r),n=oye(r);return Q.debug(`Layout completed: ${i.length} nodes, ${n.length} edges`),{nodes:i,edges:n}}catch(r){throw Q.error("Error in cose-bilkent layout algorithm:",r),r}}function bit(t){if(!t)throw new Error("Layout data is required");if(!t.config)throw new Error("Configuration is required in layout data");if(!t.rootNode)throw new Error("Root node is required");if(!t.nodes||!Array.isArray(t.nodes))throw new Error("No nodes found in layout data");if(!Array.isArray(t.edges))throw new Error("Edges array is required in layout data");return!0}var uye=P(()=>{"use strict";bt();lye();o(cye,"executeCoseBilkentLayout");o(bit,"validateLayoutData")});var hye,fye=P(()=>{"use strict";uye();hye=o(async(t,e,{insertCluster:r,insertEdge:i,insertEdgeLabel:n,insertMarkers:a,insertNode:s,log:l,positionEdgeLabel:u},{algorithm:h})=>{let f={},d={},p=e.select("g");a(p,t.markers,t.type,t.diagramId);let m=p.insert("g").attr("class","subgraphs"),g=p.insert("g").attr("class","edgePaths"),y=p.insert("g").attr("class","edgeLabels"),v=p.insert("g").attr("class","nodes");l.debug("Inserting nodes into DOM for dimension calculation"),await Promise.all(t.nodes.map(async T=>{if(T.isGroup){let w={...T};d[T.id]=w,f[T.id]=w,await r(m,T)}else{let w={...T};f[T.id]=w;let k=await s(v,T,{config:t.config,dir:t.direction||"TB"}),C=k.node().getBBox();w.width=C.width,w.height=C.height,w.domId=k,l.debug(`Node ${T.id} dimensions: ${C.width}x${C.height}`)}})),l.debug("Running cose-bilkent layout algorithm");let x={...t,nodes:t.nodes.map(T=>{let w=f[T.id];return{...T,width:w.width,height:w.height}})},b=await cye(x,t.config);l.debug("Positioning nodes based on layout results"),b.nodes.forEach(T=>{let w=f[T.id];w?.domId&&(w.domId.attr("transform",`translate(${T.x}, ${T.y})`),w.x=T.x,w.y=T.y,l.debug(`Positioned node ${w.id} at center (${T.x}, ${T.y})`))}),b.edges.forEach(T=>{let w=t.edges.find(k=>k.id===T.id);w&&(w.points=[{x:T.startX,y:T.startY},{x:T.midX,y:T.midY},{x:T.endX,y:T.endY}])}),l.debug("Inserting and positioning edges"),await Promise.all(t.edges.map(async T=>{let w=await n(y,T),k=f[T.start??""],C=f[T.end??""];if(k&&C){let E=b.edges.find(S=>S.id===T.id);if(E){l.debug("APA01 positionedEdge",E);let S={...T},L=i(g,S,d,t.type,k,C,t.diagramId);u(S,L)}else{let S={...T,points:[{x:k.x||0,y:k.y||0},{x:C.x||0,y:C.y||0}]},L=i(g,S,d,t.type,k,C,t.diagramId);u(S,L)}}})),l.debug("Cose-bilkent rendering completed")},"render")});var dye={};ur(dye,{render:()=>Tit});var Tit,pye=P(()=>{"use strict";fye();Tit=hye});var AT,kF,kit,Ul,Vu,Wd=P(()=>{"use strict";ice();bt();AT={},kF=o(t=>{for(let e of t)AT[e.name]=e},"registerLayoutLoaders"),kit=o(()=>{kF([{name:"dagre",loader:o(async()=>await Promise.resolve().then(()=>(Bpe(),Ppe)),"loader")},{name:"cose-bilkent",loader:o(async()=>await Promise.resolve().then(()=>(pye(),dye)),"loader")}])},"registerDefaultLayoutLoaders");kit();Ul=o(async(t,e)=>{if(!(t.layoutAlgorithm in AT))throw new Error(`Unknown layout algorithm: ${t.layoutAlgorithm}`);if(t.diagramId)for(let f of t.nodes){let d=f.domId||f.id;f.domId=`${t.diagramId}-${d}`}let r=AT[t.layoutAlgorithm],i=await r.loader(),{theme:n,themeVariables:a}=t.config,{useGradient:s,gradientStart:l,gradientStop:u}=a,h=e.attr("id");if(e.append("defs").append("filter").attr("id",`${h}-drop-shadow`).attr("height","130%").attr("width","130%").append("feDropShadow").attr("dx","4").attr("dy","4").attr("stdDeviation",0).attr("flood-opacity","0.06").attr("flood-color",`${n?.includes("dark")?"#FFFFFF":"#000000"}`),e.append("defs").append("filter").attr("id",`${h}-drop-shadow-small`).attr("height","150%").attr("width","150%").append("feDropShadow").attr("dx","2").attr("dy","2").attr("stdDeviation",0).attr("flood-opacity","0.06").attr("flood-color",`${n?.includes("dark")?"#FFFFFF":"#000000"}`),s){let f=e.append("linearGradient").attr("id",e.attr("id")+"-gradient").attr("gradientUnits","objectBoundingBox").attr("x1","0%").attr("y1","0%").attr("x2","100%").attr("y2","0%");f.append("svg:stop").attr("offset","0%").attr("stop-color",l).attr("stop-opacity",1),f.append("svg:stop").attr("offset","100%").attr("stop-color",u).attr("stop-opacity",1)}return i.render(t,e,rce,{algorithm:r.algorithm})},"render"),Vu=o((t="",{fallback:e="dagre"}={})=>{if(t in AT)return t;if(e in AT)return Q.warn(`Layout algorithm ${t} is not registered. Using ${e} as fallback.`),e;throw new Error(`Both layout algorithms ${t} and ${e} are not registered.`)},"getRegisteredLayoutAlgorithm")});var Ro,Cit,wit,Ud=P(()=>{"use strict";Xi();bt();Ro=o((t,e,r,i)=>{t.attr("class",r);let{width:n,height:a,x:s,y:l}=Cit(t,e);Hr(t,a,n,i);let u=wit(s,l,n,a,e);t.attr("viewBox",u),Q.debug(`viewBox configured: ${u} with padding: ${e}`)},"setupViewPortForSVG"),Cit=o((t,e)=>{let r=t.node()?.getBBox()||{width:0,height:0,x:0,y:0};return{width:r.width+e*2,height:r.height+e*2,x:r.x,y:r.y}},"calculateDimensionsWithPadding"),wit=o((t,e,r,i,n)=>`${t-n} ${e-n} ${r} ${i}`,"createViewBox")});var Eit,Sit,mye,gye=P(()=>{"use strict";Ut();bt();I0();Wd();Ud();er();Eit=o(function(t,e){return e.db.getClasses()},"getClasses"),Sit=o(async function(t,e,r,i){Q.info("REF0:"),Q.info("Drawing state diagram (v2)",e);let{securityLevel:n,flowchart:a,layout:s}=ge();i.db.setDiagramId(e),Q.debug("Before getData: ");let l=i.db.getData();Q.debug("Data: ",l);let u=Ol(e,n),h=i.db.getDirection();l.type=i.type,l.layoutAlgorithm=Vu(s),l.layoutAlgorithm==="dagre"&&s==="elk"&&Q.warn("flowchart-elk was moved to an external package in Mermaid v11. Please refer [release notes](https://github.com/mermaid-js/mermaid/releases/tag/v11.0.0) for more details. This diagram will be rendered using `dagre` layout as a fallback."),l.direction=h,l.nodeSpacing=a?.nodeSpacing||50,l.rankSpacing=a?.rankSpacing||50,l.markers=["point","circle","cross"],l.diagramId=e,Q.debug("REF1:",l),await Ul(l,u);let f=l.config.flowchart?.diagramPadding??8;Kt.insertTitle(u,"flowchartTitleText",a?.titleTopMargin||0,i.db.getDiagramTitle()),Ro(u,f,"flowchart",a?.useMaxWidth||!1)},"draw"),mye={getClasses:Eit,draw:Sit}});var CF,wF,yye=P(()=>{"use strict";CF=(function(){var t=o(function(Ft,Et,qt,Zt){for(qt=qt||{},Zt=Ft.length;Zt--;qt[Ft[Zt]]=Et);return qt},"o"),e=[1,4],r=[1,3],i=[1,5],n=[1,8,9,10,11,27,34,36,38,44,60,84,85,86,87,88,89,102,105,106,109,111,114,115,116,121,122,123,124,125],a=[2,2],s=[1,13],l=[1,14],u=[1,15],h=[1,16],f=[1,23],d=[1,25],p=[1,26],m=[1,27],g=[1,50],y=[1,49],v=[1,29],x=[1,30],b=[1,31],T=[1,32],w=[1,33],k=[1,45],C=[1,47],E=[1,43],S=[1,48],L=[1,44],M=[1,51],I=[1,46],A=[1,52],_=[1,53],D=[1,34],N=[1,35],R=[1,36],B=[1,37],O=[1,38],$=[1,58],z=[1,8,9,10,11,27,32,34,36,38,44,60,84,85,86,87,88,89,102,105,106,109,111,114,115,116,121,122,123,124,125],F=[1,62],V=[1,61],H=[1,63],X=[8,9,11,75,77,78],W=[1,79],Z=[1,92],Y=[1,97],ae=[1,96],J=[1,93],ee=[1,89],re=[1,95],te=[1,91],be=[1,98],de=[1,94],Ee=[1,99],Ne=[1,90],we=[8,9,10,11,40,75,77,78],Te=[8,9,10,11,40,46,75,77,78],De=[8,9,10,11,29,40,44,46,48,50,52,54,56,58,60,63,65,67,68,70,75,77,78,89,102,105,106,109,111,114,115,116],$e=[8,9,11,44,60,75,77,78,89,102,105,106,109,111,114,115,116],pe=[44,60,89,102,105,106,109,111,114,115,116],Je=[1,122],Ce=[1,123],Fe=[1,125],Ue=[1,124],qe=[44,60,62,74,89,102,105,106,109,111,114,115,116],Me=[1,134],He=[1,148],K=[1,149],oe=[1,150],U=[1,151],ue=[1,136],G=[1,138],se=[1,142],le=[1,143],ke=[1,144],me=[1,145],ye=[1,146],Re=[1,147],ve=[1,152],Oe=[1,153],We=[1,132],Be=[1,133],Qe=[1,140],ce=[1,135],it=[1,139],fe=[1,137],ut=[8,9,10,11,27,32,34,36,38,44,60,84,85,86,87,88,89,102,105,106,109,111,114,115,116,121,122,123,124,125],Nt=[1,155],Pt=[1,157],St=[8,9,11],It=[8,9,10,11,14,44,60,89,105,106,109,111,114,115,116],ot=[1,177],ct=[1,173],Dt=[1,174],kt=[1,178],yt=[1,175],jt=[1,176],hr=[77,116,119],Qt=[8,9,10,11,12,14,27,29,32,44,60,75,84,85,86,87,88,89,90,105,109,111,114,115,116],Er=[10,106],dr=[31,49,51,53,55,57,62,64,66,67,69,71,116,117,118],ir=[1,248],pr=[1,246],Ii=[1,250],xt=[1,244],Ie=[1,245],ft=[1,247],_t=[1,249],zr=[1,251],ri=[1,269],ci=[8,9,11,106],Ir=[8,9,10,11,60,84,105,106,109,110,111,112],sa={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,graphConfig:4,document:5,line:6,statement:7,SEMI:8,NEWLINE:9,SPACE:10,EOF:11,GRAPH:12,NODIR:13,DIR:14,FirstStmtSeparator:15,ending:16,endToken:17,spaceList:18,spaceListNewline:19,vertexStatement:20,separator:21,styleStatement:22,linkStyleStatement:23,classDefStatement:24,classStatement:25,clickStatement:26,subgraph:27,textNoTags:28,SQS:29,text:30,SQE:31,end:32,direction:33,acc_title:34,acc_title_value:35,acc_descr:36,acc_descr_value:37,acc_descr_multiline_value:38,shapeData:39,SHAPE_DATA:40,link:41,node:42,styledVertex:43,AMP:44,vertex:45,STYLE_SEPARATOR:46,idString:47,DOUBLECIRCLESTART:48,DOUBLECIRCLEEND:49,PS:50,PE:51,"(-":52,"-)":53,STADIUMSTART:54,STADIUMEND:55,SUBROUTINESTART:56,SUBROUTINEEND:57,VERTEX_WITH_PROPS_START:58,"NODE_STRING[field]":59,COLON:60,"NODE_STRING[value]":61,PIPE:62,CYLINDERSTART:63,CYLINDEREND:64,DIAMOND_START:65,DIAMOND_STOP:66,TAGEND:67,TRAPSTART:68,TRAPEND:69,INVTRAPSTART:70,INVTRAPEND:71,linkStatement:72,arrowText:73,TESTSTR:74,START_LINK:75,edgeText:76,LINK:77,LINK_ID:78,edgeTextToken:79,STR:80,MD_STR:81,textToken:82,keywords:83,STYLE:84,LINKSTYLE:85,CLASSDEF:86,CLASS:87,CLICK:88,DOWN:89,UP:90,textNoTagsToken:91,stylesOpt:92,"idString[vertex]":93,"idString[class]":94,CALLBACKNAME:95,CALLBACKARGS:96,HREF:97,LINK_TARGET:98,"STR[link]":99,"STR[tooltip]":100,alphaNum:101,DEFAULT:102,numList:103,INTERPOLATE:104,NUM:105,COMMA:106,style:107,styleComponent:108,NODE_STRING:109,UNIT:110,BRKT:111,PCT:112,idStringToken:113,MINUS:114,MULT:115,UNICODE_TEXT:116,TEXT:117,TAGSTART:118,EDGE_TEXT:119,alphaNumToken:120,direction_tb:121,direction_bt:122,direction_rl:123,direction_lr:124,direction_td:125,$accept:0,$end:1},terminals_:{2:"error",8:"SEMI",9:"NEWLINE",10:"SPACE",11:"EOF",12:"GRAPH",13:"NODIR",14:"DIR",27:"subgraph",29:"SQS",31:"SQE",32:"end",34:"acc_title",35:"acc_title_value",36:"acc_descr",37:"acc_descr_value",38:"acc_descr_multiline_value",40:"SHAPE_DATA",44:"AMP",46:"STYLE_SEPARATOR",48:"DOUBLECIRCLESTART",49:"DOUBLECIRCLEEND",50:"PS",51:"PE",52:"(-",53:"-)",54:"STADIUMSTART",55:"STADIUMEND",56:"SUBROUTINESTART",57:"SUBROUTINEEND",58:"VERTEX_WITH_PROPS_START",59:"NODE_STRING[field]",60:"COLON",61:"NODE_STRING[value]",62:"PIPE",63:"CYLINDERSTART",64:"CYLINDEREND",65:"DIAMOND_START",66:"DIAMOND_STOP",67:"TAGEND",68:"TRAPSTART",69:"TRAPEND",70:"INVTRAPSTART",71:"INVTRAPEND",74:"TESTSTR",75:"START_LINK",77:"LINK",78:"LINK_ID",80:"STR",81:"MD_STR",84:"STYLE",85:"LINKSTYLE",86:"CLASSDEF",87:"CLASS",88:"CLICK",89:"DOWN",90:"UP",93:"idString[vertex]",94:"idString[class]",95:"CALLBACKNAME",96:"CALLBACKARGS",97:"HREF",98:"LINK_TARGET",99:"STR[link]",100:"STR[tooltip]",102:"DEFAULT",104:"INTERPOLATE",105:"NUM",106:"COMMA",109:"NODE_STRING",110:"UNIT",111:"BRKT",112:"PCT",114:"MINUS",115:"MULT",116:"UNICODE_TEXT",117:"TEXT",118:"TAGSTART",119:"EDGE_TEXT",121:"direction_tb",122:"direction_bt",123:"direction_rl",124:"direction_lr",125:"direction_td"},productions_:[0,[3,2],[5,0],[5,2],[6,1],[6,1],[6,1],[6,1],[6,1],[4,2],[4,2],[4,2],[4,3],[16,2],[16,1],[17,1],[17,1],[17,1],[15,1],[15,1],[15,2],[19,2],[19,2],[19,1],[19,1],[18,2],[18,1],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,9],[7,6],[7,4],[7,1],[7,2],[7,2],[7,1],[21,1],[21,1],[21,1],[39,2],[39,1],[20,4],[20,3],[20,4],[20,2],[20,2],[20,1],[42,1],[42,6],[42,5],[43,1],[43,3],[45,4],[45,4],[45,6],[45,4],[45,4],[45,4],[45,8],[45,4],[45,4],[45,4],[45,6],[45,4],[45,4],[45,4],[45,4],[45,4],[45,1],[41,2],[41,3],[41,3],[41,1],[41,3],[41,4],[76,1],[76,2],[76,1],[76,1],[72,1],[72,2],[73,3],[30,1],[30,2],[30,1],[30,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[28,1],[28,2],[28,1],[28,1],[24,5],[25,5],[26,2],[26,4],[26,3],[26,5],[26,3],[26,5],[26,5],[26,7],[26,2],[26,4],[26,2],[26,4],[26,4],[26,6],[22,5],[23,5],[23,5],[23,9],[23,9],[23,7],[23,7],[103,1],[103,3],[92,1],[92,3],[107,1],[107,2],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[82,1],[82,1],[82,1],[82,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[79,1],[79,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[47,1],[47,2],[101,1],[101,2],[33,1],[33,1],[33,1],[33,1],[33,1]],performAction:o(function(Et,qt,Zt,Tt,wi,xe,Wo){var Se=xe.length-1;switch(wi){case 2:this.$=[];break;case 3:(!Array.isArray(xe[Se])||xe[Se].length>0)&&xe[Se-1].push(xe[Se]),this.$=xe[Se-1];break;case 4:case 183:this.$=xe[Se];break;case 11:Tt.setDirection("TB"),this.$="TB";break;case 12:Tt.setDirection(xe[Se-1]),this.$=xe[Se-1];break;case 27:this.$=xe[Se-1].nodes;break;case 28:case 29:case 30:case 31:case 32:this.$=[];break;case 33:this.$=Tt.addSubGraph(xe[Se-6],xe[Se-1],xe[Se-4]);break;case 34:this.$=Tt.addSubGraph(xe[Se-3],xe[Se-1],xe[Se-3]);break;case 35:this.$=Tt.addSubGraph(void 0,xe[Se-1],void 0);break;case 37:this.$=xe[Se].trim(),Tt.setAccTitle(this.$);break;case 38:case 39:this.$=xe[Se].trim(),Tt.setAccDescription(this.$);break;case 43:this.$=xe[Se-1]+xe[Se];break;case 44:this.$=xe[Se];break;case 45:Tt.addVertex(xe[Se-1][xe[Se-1].length-1],void 0,void 0,void 0,void 0,void 0,void 0,xe[Se]),Tt.addLink(xe[Se-3].stmt,xe[Se-1],xe[Se-2]),this.$={stmt:xe[Se-1],nodes:xe[Se-1].concat(xe[Se-3].nodes)};break;case 46:Tt.addLink(xe[Se-2].stmt,xe[Se],xe[Se-1]),this.$={stmt:xe[Se],nodes:xe[Se].concat(xe[Se-2].nodes)};break;case 47:Tt.addLink(xe[Se-3].stmt,xe[Se-1],xe[Se-2]),this.$={stmt:xe[Se-1],nodes:xe[Se-1].concat(xe[Se-3].nodes)};break;case 48:this.$={stmt:xe[Se-1],nodes:xe[Se-1]};break;case 49:Tt.addVertex(xe[Se-1][xe[Se-1].length-1],void 0,void 0,void 0,void 0,void 0,void 0,xe[Se]),this.$={stmt:xe[Se-1],nodes:xe[Se-1],shapeData:xe[Se]};break;case 50:this.$={stmt:xe[Se],nodes:xe[Se]};break;case 51:this.$=[xe[Se]];break;case 52:Tt.addVertex(xe[Se-5][xe[Se-5].length-1],void 0,void 0,void 0,void 0,void 0,void 0,xe[Se-4]),this.$=xe[Se-5].concat(xe[Se]);break;case 53:this.$=xe[Se-4].concat(xe[Se]);break;case 54:this.$=xe[Se];break;case 55:this.$=xe[Se-2],Tt.setClass(xe[Se-2],xe[Se]);break;case 56:this.$=xe[Se-3],Tt.addVertex(xe[Se-3],xe[Se-1],"square");break;case 57:this.$=xe[Se-3],Tt.addVertex(xe[Se-3],xe[Se-1],"doublecircle");break;case 58:this.$=xe[Se-5],Tt.addVertex(xe[Se-5],xe[Se-2],"circle");break;case 59:this.$=xe[Se-3],Tt.addVertex(xe[Se-3],xe[Se-1],"ellipse");break;case 60:this.$=xe[Se-3],Tt.addVertex(xe[Se-3],xe[Se-1],"stadium");break;case 61:this.$=xe[Se-3],Tt.addVertex(xe[Se-3],xe[Se-1],"subroutine");break;case 62:this.$=xe[Se-7],Tt.addVertex(xe[Se-7],xe[Se-1],"rect",void 0,void 0,void 0,Object.fromEntries([[xe[Se-5],xe[Se-3]]]));break;case 63:this.$=xe[Se-3],Tt.addVertex(xe[Se-3],xe[Se-1],"cylinder");break;case 64:this.$=xe[Se-3],Tt.addVertex(xe[Se-3],xe[Se-1],"round");break;case 65:this.$=xe[Se-3],Tt.addVertex(xe[Se-3],xe[Se-1],"diamond");break;case 66:this.$=xe[Se-5],Tt.addVertex(xe[Se-5],xe[Se-2],"hexagon");break;case 67:this.$=xe[Se-3],Tt.addVertex(xe[Se-3],xe[Se-1],"odd");break;case 68:this.$=xe[Se-3],Tt.addVertex(xe[Se-3],xe[Se-1],"trapezoid");break;case 69:this.$=xe[Se-3],Tt.addVertex(xe[Se-3],xe[Se-1],"inv_trapezoid");break;case 70:this.$=xe[Se-3],Tt.addVertex(xe[Se-3],xe[Se-1],"lean_right");break;case 71:this.$=xe[Se-3],Tt.addVertex(xe[Se-3],xe[Se-1],"lean_left");break;case 72:this.$=xe[Se],Tt.addVertex(xe[Se]);break;case 73:xe[Se-1].text=xe[Se],this.$=xe[Se-1];break;case 74:case 75:xe[Se-2].text=xe[Se-1],this.$=xe[Se-2];break;case 76:this.$=xe[Se];break;case 77:var Rn=Tt.destructLink(xe[Se],xe[Se-2]);this.$={type:Rn.type,stroke:Rn.stroke,length:Rn.length,text:xe[Se-1]};break;case 78:var Rn=Tt.destructLink(xe[Se],xe[Se-2]);this.$={type:Rn.type,stroke:Rn.stroke,length:Rn.length,text:xe[Se-1],id:xe[Se-3]};break;case 79:this.$={text:xe[Se],type:"text"};break;case 80:this.$={text:xe[Se-1].text+""+xe[Se],type:xe[Se-1].type};break;case 81:this.$={text:xe[Se],type:"string"};break;case 82:this.$={text:xe[Se],type:"markdown"};break;case 83:var Rn=Tt.destructLink(xe[Se]);this.$={type:Rn.type,stroke:Rn.stroke,length:Rn.length};break;case 84:var Rn=Tt.destructLink(xe[Se]);this.$={type:Rn.type,stroke:Rn.stroke,length:Rn.length,id:xe[Se-1]};break;case 85:this.$=xe[Se-1];break;case 86:this.$={text:xe[Se],type:"text"};break;case 87:this.$={text:xe[Se-1].text+""+xe[Se],type:xe[Se-1].type};break;case 88:this.$={text:xe[Se],type:"string"};break;case 89:case 104:this.$={text:xe[Se],type:"markdown"};break;case 101:this.$={text:xe[Se],type:"text"};break;case 102:this.$={text:xe[Se-1].text+""+xe[Se],type:xe[Se-1].type};break;case 103:this.$={text:xe[Se],type:"text"};break;case 105:this.$=xe[Se-4],Tt.addClass(xe[Se-2],xe[Se]);break;case 106:this.$=xe[Se-4],Tt.setClass(xe[Se-2],xe[Se]);break;case 107:case 115:this.$=xe[Se-1],Tt.setClickEvent(xe[Se-1],xe[Se]);break;case 108:case 116:this.$=xe[Se-3],Tt.setClickEvent(xe[Se-3],xe[Se-2]),Tt.setTooltip(xe[Se-3],xe[Se]);break;case 109:this.$=xe[Se-2],Tt.setClickEvent(xe[Se-2],xe[Se-1],xe[Se]);break;case 110:this.$=xe[Se-4],Tt.setClickEvent(xe[Se-4],xe[Se-3],xe[Se-2]),Tt.setTooltip(xe[Se-4],xe[Se]);break;case 111:this.$=xe[Se-2],Tt.setLink(xe[Se-2],xe[Se]);break;case 112:this.$=xe[Se-4],Tt.setLink(xe[Se-4],xe[Se-2]),Tt.setTooltip(xe[Se-4],xe[Se]);break;case 113:this.$=xe[Se-4],Tt.setLink(xe[Se-4],xe[Se-2],xe[Se]);break;case 114:this.$=xe[Se-6],Tt.setLink(xe[Se-6],xe[Se-4],xe[Se]),Tt.setTooltip(xe[Se-6],xe[Se-2]);break;case 117:this.$=xe[Se-1],Tt.setLink(xe[Se-1],xe[Se]);break;case 118:this.$=xe[Se-3],Tt.setLink(xe[Se-3],xe[Se-2]),Tt.setTooltip(xe[Se-3],xe[Se]);break;case 119:this.$=xe[Se-3],Tt.setLink(xe[Se-3],xe[Se-2],xe[Se]);break;case 120:this.$=xe[Se-5],Tt.setLink(xe[Se-5],xe[Se-4],xe[Se]),Tt.setTooltip(xe[Se-5],xe[Se-2]);break;case 121:this.$=xe[Se-4],Tt.addVertex(xe[Se-2],void 0,void 0,xe[Se]);break;case 122:this.$=xe[Se-4],Tt.updateLink([xe[Se-2]],xe[Se]);break;case 123:this.$=xe[Se-4],Tt.updateLink(xe[Se-2],xe[Se]);break;case 124:this.$=xe[Se-8],Tt.updateLinkInterpolate([xe[Se-6]],xe[Se-2]),Tt.updateLink([xe[Se-6]],xe[Se]);break;case 125:this.$=xe[Se-8],Tt.updateLinkInterpolate(xe[Se-6],xe[Se-2]),Tt.updateLink(xe[Se-6],xe[Se]);break;case 126:this.$=xe[Se-6],Tt.updateLinkInterpolate([xe[Se-4]],xe[Se]);break;case 127:this.$=xe[Se-6],Tt.updateLinkInterpolate(xe[Se-4],xe[Se]);break;case 128:case 130:this.$=[xe[Se]];break;case 129:case 131:xe[Se-2].push(xe[Se]),this.$=xe[Se-2];break;case 133:this.$=xe[Se-1]+xe[Se];break;case 181:this.$=xe[Se];break;case 182:this.$=xe[Se-1]+""+xe[Se];break;case 184:this.$=xe[Se-1]+""+xe[Se];break;case 185:this.$={stmt:"dir",value:"TB"};break;case 186:this.$={stmt:"dir",value:"BT"};break;case 187:this.$={stmt:"dir",value:"RL"};break;case 188:this.$={stmt:"dir",value:"LR"};break;case 189:this.$={stmt:"dir",value:"TD"};break}},"anonymous"),table:[{3:1,4:2,9:e,10:r,12:i},{1:[3]},t(n,a,{5:6}),{4:7,9:e,10:r,12:i},{4:8,9:e,10:r,12:i},{13:[1,9],14:[1,10]},{1:[2,1],6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,33:24,34:d,36:p,38:m,42:28,43:39,44:g,45:40,47:41,60:y,84:v,85:x,86:b,87:T,88:w,89:k,102:C,105:E,106:S,109:L,111:M,113:42,114:I,115:A,116:_,121:D,122:N,123:R,124:B,125:O},t(n,[2,9]),t(n,[2,10]),t(n,[2,11]),{8:[1,55],9:[1,56],10:$,15:54,18:57},t(z,[2,3]),t(z,[2,4]),t(z,[2,5]),t(z,[2,6]),t(z,[2,7]),t(z,[2,8]),{8:F,9:V,11:H,21:59,41:60,72:64,75:[1,65],77:[1,67],78:[1,66]},{8:F,9:V,11:H,21:68},{8:F,9:V,11:H,21:69},{8:F,9:V,11:H,21:70},{8:F,9:V,11:H,21:71},{8:F,9:V,11:H,21:72},{8:F,9:V,10:[1,73],11:H,21:74},t(z,[2,36]),{35:[1,75]},{37:[1,76]},t(z,[2,39]),t(X,[2,50],{18:77,39:78,10:$,40:W}),{10:[1,80]},{10:[1,81]},{10:[1,82]},{10:[1,83]},{14:Z,44:Y,60:ae,80:[1,87],89:J,95:[1,84],97:[1,85],101:86,105:ee,106:re,109:te,111:be,114:de,115:Ee,116:Ne,120:88},t(z,[2,185]),t(z,[2,186]),t(z,[2,187]),t(z,[2,188]),t(z,[2,189]),t(we,[2,51]),t(we,[2,54],{46:[1,100]}),t(Te,[2,72],{113:113,29:[1,101],44:g,48:[1,102],50:[1,103],52:[1,104],54:[1,105],56:[1,106],58:[1,107],60:y,63:[1,108],65:[1,109],67:[1,110],68:[1,111],70:[1,112],89:k,102:C,105:E,106:S,109:L,111:M,114:I,115:A,116:_}),t(De,[2,181]),t(De,[2,142]),t(De,[2,143]),t(De,[2,144]),t(De,[2,145]),t(De,[2,146]),t(De,[2,147]),t(De,[2,148]),t(De,[2,149]),t(De,[2,150]),t(De,[2,151]),t(De,[2,152]),t(n,[2,12]),t(n,[2,18]),t(n,[2,19]),{9:[1,114]},t($e,[2,26],{18:115,10:$}),t(z,[2,27]),{42:116,43:39,44:g,45:40,47:41,60:y,89:k,102:C,105:E,106:S,109:L,111:M,113:42,114:I,115:A,116:_},t(z,[2,40]),t(z,[2,41]),t(z,[2,42]),t(pe,[2,76],{73:117,62:[1,119],74:[1,118]}),{76:120,79:121,80:Je,81:Ce,116:Fe,119:Ue},{75:[1,126],77:[1,127]},t(qe,[2,83]),t(z,[2,28]),t(z,[2,29]),t(z,[2,30]),t(z,[2,31]),t(z,[2,32]),{10:Me,12:He,14:K,27:oe,28:128,32:U,44:ue,60:G,75:se,80:[1,130],81:[1,131],83:141,84:le,85:ke,86:me,87:ye,88:Re,89:ve,90:Oe,91:129,105:We,109:Be,111:Qe,114:ce,115:it,116:fe},t(ut,a,{5:154}),t(z,[2,37]),t(z,[2,38]),t(X,[2,48],{44:Nt}),t(X,[2,49],{18:156,10:$,40:Pt}),t(we,[2,44]),{44:g,47:158,60:y,89:k,102:C,105:E,106:S,109:L,111:M,113:42,114:I,115:A,116:_},{102:[1,159],103:160,105:[1,161]},{44:g,47:162,60:y,89:k,102:C,105:E,106:S,109:L,111:M,113:42,114:I,115:A,116:_},{44:g,47:163,60:y,89:k,102:C,105:E,106:S,109:L,111:M,113:42,114:I,115:A,116:_},t(St,[2,107],{10:[1,164],96:[1,165]}),{80:[1,166]},t(St,[2,115],{120:168,10:[1,167],14:Z,44:Y,60:ae,89:J,105:ee,106:re,109:te,111:be,114:de,115:Ee,116:Ne}),t(St,[2,117],{10:[1,169]}),t(It,[2,183]),t(It,[2,170]),t(It,[2,171]),t(It,[2,172]),t(It,[2,173]),t(It,[2,174]),t(It,[2,175]),t(It,[2,176]),t(It,[2,177]),t(It,[2,178]),t(It,[2,179]),t(It,[2,180]),{44:g,47:170,60:y,89:k,102:C,105:E,106:S,109:L,111:M,113:42,114:I,115:A,116:_},{30:171,67:ot,80:ct,81:Dt,82:172,116:kt,117:yt,118:jt},{30:179,67:ot,80:ct,81:Dt,82:172,116:kt,117:yt,118:jt},{30:181,50:[1,180],67:ot,80:ct,81:Dt,82:172,116:kt,117:yt,118:jt},{30:182,67:ot,80:ct,81:Dt,82:172,116:kt,117:yt,118:jt},{30:183,67:ot,80:ct,81:Dt,82:172,116:kt,117:yt,118:jt},{30:184,67:ot,80:ct,81:Dt,82:172,116:kt,117:yt,118:jt},{109:[1,185]},{30:186,67:ot,80:ct,81:Dt,82:172,116:kt,117:yt,118:jt},{30:187,65:[1,188],67:ot,80:ct,81:Dt,82:172,116:kt,117:yt,118:jt},{30:189,67:ot,80:ct,81:Dt,82:172,116:kt,117:yt,118:jt},{30:190,67:ot,80:ct,81:Dt,82:172,116:kt,117:yt,118:jt},{30:191,67:ot,80:ct,81:Dt,82:172,116:kt,117:yt,118:jt},t(De,[2,182]),t(n,[2,20]),t($e,[2,25]),t(X,[2,46],{39:192,18:193,10:$,40:W}),t(pe,[2,73],{10:[1,194]}),{10:[1,195]},{30:196,67:ot,80:ct,81:Dt,82:172,116:kt,117:yt,118:jt},{77:[1,197],79:198,116:Fe,119:Ue},t(hr,[2,79]),t(hr,[2,81]),t(hr,[2,82]),t(hr,[2,168]),t(hr,[2,169]),{76:199,79:121,80:Je,81:Ce,116:Fe,119:Ue},t(qe,[2,84]),{8:F,9:V,10:Me,11:H,12:He,14:K,21:201,27:oe,29:[1,200],32:U,44:ue,60:G,75:se,83:141,84:le,85:ke,86:me,87:ye,88:Re,89:ve,90:Oe,91:202,105:We,109:Be,111:Qe,114:ce,115:it,116:fe},t(Qt,[2,101]),t(Qt,[2,103]),t(Qt,[2,104]),t(Qt,[2,157]),t(Qt,[2,158]),t(Qt,[2,159]),t(Qt,[2,160]),t(Qt,[2,161]),t(Qt,[2,162]),t(Qt,[2,163]),t(Qt,[2,164]),t(Qt,[2,165]),t(Qt,[2,166]),t(Qt,[2,167]),t(Qt,[2,90]),t(Qt,[2,91]),t(Qt,[2,92]),t(Qt,[2,93]),t(Qt,[2,94]),t(Qt,[2,95]),t(Qt,[2,96]),t(Qt,[2,97]),t(Qt,[2,98]),t(Qt,[2,99]),t(Qt,[2,100]),{6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,32:[1,203],33:24,34:d,36:p,38:m,42:28,43:39,44:g,45:40,47:41,60:y,84:v,85:x,86:b,87:T,88:w,89:k,102:C,105:E,106:S,109:L,111:M,113:42,114:I,115:A,116:_,121:D,122:N,123:R,124:B,125:O},{10:$,18:204},{44:[1,205]},t(we,[2,43]),{10:[1,206],44:g,60:y,89:k,102:C,105:E,106:S,109:L,111:M,113:113,114:I,115:A,116:_},{10:[1,207]},{10:[1,208],106:[1,209]},t(Er,[2,128]),{10:[1,210],44:g,60:y,89:k,102:C,105:E,106:S,109:L,111:M,113:113,114:I,115:A,116:_},{10:[1,211],44:g,60:y,89:k,102:C,105:E,106:S,109:L,111:M,113:113,114:I,115:A,116:_},{80:[1,212]},t(St,[2,109],{10:[1,213]}),t(St,[2,111],{10:[1,214]}),{80:[1,215]},t(It,[2,184]),{80:[1,216],98:[1,217]},t(we,[2,55],{113:113,44:g,60:y,89:k,102:C,105:E,106:S,109:L,111:M,114:I,115:A,116:_}),{31:[1,218],67:ot,82:219,116:kt,117:yt,118:jt},t(dr,[2,86]),t(dr,[2,88]),t(dr,[2,89]),t(dr,[2,153]),t(dr,[2,154]),t(dr,[2,155]),t(dr,[2,156]),{49:[1,220],67:ot,82:219,116:kt,117:yt,118:jt},{30:221,67:ot,80:ct,81:Dt,82:172,116:kt,117:yt,118:jt},{51:[1,222],67:ot,82:219,116:kt,117:yt,118:jt},{53:[1,223],67:ot,82:219,116:kt,117:yt,118:jt},{55:[1,224],67:ot,82:219,116:kt,117:yt,118:jt},{57:[1,225],67:ot,82:219,116:kt,117:yt,118:jt},{60:[1,226]},{64:[1,227],67:ot,82:219,116:kt,117:yt,118:jt},{66:[1,228],67:ot,82:219,116:kt,117:yt,118:jt},{30:229,67:ot,80:ct,81:Dt,82:172,116:kt,117:yt,118:jt},{31:[1,230],67:ot,82:219,116:kt,117:yt,118:jt},{67:ot,69:[1,231],71:[1,232],82:219,116:kt,117:yt,118:jt},{67:ot,69:[1,234],71:[1,233],82:219,116:kt,117:yt,118:jt},t(X,[2,45],{18:156,10:$,40:Pt}),t(X,[2,47],{44:Nt}),t(pe,[2,75]),t(pe,[2,74]),{62:[1,235],67:ot,82:219,116:kt,117:yt,118:jt},t(pe,[2,77]),t(hr,[2,80]),{77:[1,236],79:198,116:Fe,119:Ue},{30:237,67:ot,80:ct,81:Dt,82:172,116:kt,117:yt,118:jt},t(ut,a,{5:238}),t(Qt,[2,102]),t(z,[2,35]),{43:239,44:g,45:40,47:41,60:y,89:k,102:C,105:E,106:S,109:L,111:M,113:42,114:I,115:A,116:_},{10:$,18:240},{10:ir,60:pr,84:Ii,92:241,105:xt,107:242,108:243,109:Ie,110:ft,111:_t,112:zr},{10:ir,60:pr,84:Ii,92:252,104:[1,253],105:xt,107:242,108:243,109:Ie,110:ft,111:_t,112:zr},{10:ir,60:pr,84:Ii,92:254,104:[1,255],105:xt,107:242,108:243,109:Ie,110:ft,111:_t,112:zr},{105:[1,256]},{10:ir,60:pr,84:Ii,92:257,105:xt,107:242,108:243,109:Ie,110:ft,111:_t,112:zr},{44:g,47:258,60:y,89:k,102:C,105:E,106:S,109:L,111:M,113:42,114:I,115:A,116:_},t(St,[2,108]),{80:[1,259]},{80:[1,260],98:[1,261]},t(St,[2,116]),t(St,[2,118],{10:[1,262]}),t(St,[2,119]),t(Te,[2,56]),t(dr,[2,87]),t(Te,[2,57]),{51:[1,263],67:ot,82:219,116:kt,117:yt,118:jt},t(Te,[2,64]),t(Te,[2,59]),t(Te,[2,60]),t(Te,[2,61]),{109:[1,264]},t(Te,[2,63]),t(Te,[2,65]),{66:[1,265],67:ot,82:219,116:kt,117:yt,118:jt},t(Te,[2,67]),t(Te,[2,68]),t(Te,[2,70]),t(Te,[2,69]),t(Te,[2,71]),t([10,44,60,89,102,105,106,109,111,114,115,116],[2,85]),t(pe,[2,78]),{31:[1,266],67:ot,82:219,116:kt,117:yt,118:jt},{6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,32:[1,267],33:24,34:d,36:p,38:m,42:28,43:39,44:g,45:40,47:41,60:y,84:v,85:x,86:b,87:T,88:w,89:k,102:C,105:E,106:S,109:L,111:M,113:42,114:I,115:A,116:_,121:D,122:N,123:R,124:B,125:O},t(we,[2,53]),{43:268,44:g,45:40,47:41,60:y,89:k,102:C,105:E,106:S,109:L,111:M,113:42,114:I,115:A,116:_},t(St,[2,121],{106:ri}),t(ci,[2,130],{108:270,10:ir,60:pr,84:Ii,105:xt,109:Ie,110:ft,111:_t,112:zr}),t(Ir,[2,132]),t(Ir,[2,134]),t(Ir,[2,135]),t(Ir,[2,136]),t(Ir,[2,137]),t(Ir,[2,138]),t(Ir,[2,139]),t(Ir,[2,140]),t(Ir,[2,141]),t(St,[2,122],{106:ri}),{10:[1,271]},t(St,[2,123],{106:ri}),{10:[1,272]},t(Er,[2,129]),t(St,[2,105],{106:ri}),t(St,[2,106],{113:113,44:g,60:y,89:k,102:C,105:E,106:S,109:L,111:M,114:I,115:A,116:_}),t(St,[2,110]),t(St,[2,112],{10:[1,273]}),t(St,[2,113]),{98:[1,274]},{51:[1,275]},{62:[1,276]},{66:[1,277]},{8:F,9:V,11:H,21:278},t(z,[2,34]),t(we,[2,52]),{10:ir,60:pr,84:Ii,105:xt,107:279,108:243,109:Ie,110:ft,111:_t,112:zr},t(Ir,[2,133]),{14:Z,44:Y,60:ae,89:J,101:280,105:ee,106:re,109:te,111:be,114:de,115:Ee,116:Ne,120:88},{14:Z,44:Y,60:ae,89:J,101:281,105:ee,106:re,109:te,111:be,114:de,115:Ee,116:Ne,120:88},{98:[1,282]},t(St,[2,120]),t(Te,[2,58]),{30:283,67:ot,80:ct,81:Dt,82:172,116:kt,117:yt,118:jt},t(Te,[2,66]),t(ut,a,{5:284}),t(ci,[2,131],{108:270,10:ir,60:pr,84:Ii,105:xt,109:Ie,110:ft,111:_t,112:zr}),t(St,[2,126],{120:168,10:[1,285],14:Z,44:Y,60:ae,89:J,105:ee,106:re,109:te,111:be,114:de,115:Ee,116:Ne}),t(St,[2,127],{120:168,10:[1,286],14:Z,44:Y,60:ae,89:J,105:ee,106:re,109:te,111:be,114:de,115:Ee,116:Ne}),t(St,[2,114]),{31:[1,287],67:ot,82:219,116:kt,117:yt,118:jt},{6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,32:[1,288],33:24,34:d,36:p,38:m,42:28,43:39,44:g,45:40,47:41,60:y,84:v,85:x,86:b,87:T,88:w,89:k,102:C,105:E,106:S,109:L,111:M,113:42,114:I,115:A,116:_,121:D,122:N,123:R,124:B,125:O},{10:ir,60:pr,84:Ii,92:289,105:xt,107:242,108:243,109:Ie,110:ft,111:_t,112:zr},{10:ir,60:pr,84:Ii,92:290,105:xt,107:242,108:243,109:Ie,110:ft,111:_t,112:zr},t(Te,[2,62]),t(z,[2,33]),t(St,[2,124],{106:ri}),t(St,[2,125],{106:ri})],defaultActions:{},parseError:o(function(Et,qt){if(qt.recoverable)this.trace(Et);else{var Zt=new Error(Et);throw Zt.hash=qt,Zt}},"parseError"),parse:o(function(Et){var qt=this,Zt=[0],Tt=[],wi=[null],xe=[],Wo=this.table,Se="",Rn=0,k8=0,r4=0,r8e=2,xY=1,i8e=xe.slice.call(arguments,1),Ca=Object.create(this.lexer),Bp={yy:{}};for(var C8 in this.yy)Object.prototype.hasOwnProperty.call(this.yy,C8)&&(Bp.yy[C8]=this.yy[C8]);Ca.setInput(Et,Bp.yy),Bp.yy.lexer=Ca,Bp.yy.parser=this,typeof Ca.yylloc>"u"&&(Ca.yylloc={});var w8=Ca.yylloc;xe.push(w8);var n8e=Ca.options&&Ca.options.ranges;typeof Bp.yy.parseError=="function"?this.parseError=Bp.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Tvt(Uo){Zt.length=Zt.length-2*Uo,wi.length=wi.length-Uo,xe.length=xe.length-Uo}o(Tvt,"popStack");function a8e(){var Uo;return Uo=Tt.pop()||Ca.lex()||xY,typeof Uo!="number"&&(Uo instanceof Array&&(Tt=Uo,Uo=Tt.pop()),Uo=qt.symbols_[Uo]||Uo),Uo}o(a8e,"lex");for(var Ls,E8,Fp,gl,kvt,S8,bg={},i4,fh,bY,n4;;){if(Fp=Zt[Zt.length-1],this.defaultActions[Fp]?gl=this.defaultActions[Fp]:((Ls===null||typeof Ls>"u")&&(Ls=a8e()),gl=Wo[Fp]&&Wo[Fp][Ls]),typeof gl>"u"||!gl.length||!gl[0]){var A8="";n4=[];for(i4 in Wo[Fp])this.terminals_[i4]&&i4>r8e&&n4.push("'"+this.terminals_[i4]+"'");Ca.showPosition?A8="Parse error on line "+(Rn+1)+`: +`+Ca.showPosition()+` +Expecting `+n4.join(", ")+", got '"+(this.terminals_[Ls]||Ls)+"'":A8="Parse error on line "+(Rn+1)+": Unexpected "+(Ls==xY?"end of input":"'"+(this.terminals_[Ls]||Ls)+"'"),this.parseError(A8,{text:Ca.match,token:this.terminals_[Ls]||Ls,line:Ca.yylineno,loc:w8,expected:n4})}if(gl[0]instanceof Array&&gl.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Fp+", token: "+Ls);switch(gl[0]){case 1:Zt.push(Ls),wi.push(Ca.yytext),xe.push(Ca.yylloc),Zt.push(gl[1]),Ls=null,E8?(Ls=E8,E8=null):(k8=Ca.yyleng,Se=Ca.yytext,Rn=Ca.yylineno,w8=Ca.yylloc,r4>0&&r4--);break;case 2:if(fh=this.productions_[gl[1]][1],bg.$=wi[wi.length-fh],bg._$={first_line:xe[xe.length-(fh||1)].first_line,last_line:xe[xe.length-1].last_line,first_column:xe[xe.length-(fh||1)].first_column,last_column:xe[xe.length-1].last_column},n8e&&(bg._$.range=[xe[xe.length-(fh||1)].range[0],xe[xe.length-1].range[1]]),S8=this.performAction.apply(bg,[Se,k8,Rn,Bp.yy,gl[1],wi,xe].concat(i8e)),typeof S8<"u")return S8;fh&&(Zt=Zt.slice(0,-1*fh*2),wi=wi.slice(0,-1*fh),xe=xe.slice(0,-1*fh)),Zt.push(this.productions_[gl[1]][0]),wi.push(bg.$),xe.push(bg._$),bY=Wo[Zt[Zt.length-2]][Zt[Zt.length-1]],Zt.push(bY);break;case 3:return!0}}return!0},"parse")},qa=(function(){var Ft={EOF:1,parseError:o(function(qt,Zt){if(this.yy.parser)this.yy.parser.parseError(qt,Zt);else throw new Error(qt)},"parseError"),setInput:o(function(Et,qt){return this.yy=qt||this.yy||{},this._input=Et,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var Et=this._input[0];this.yytext+=Et,this.yyleng++,this.offset++,this.match+=Et,this.matched+=Et;var qt=Et.match(/(?:\r\n?|\n).*/g);return qt?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Et},"input"),unput:o(function(Et){var qt=Et.length,Zt=Et.split(/(?:\r\n?|\n)/g);this._input=Et+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-qt),this.offset-=qt;var Tt=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),Zt.length-1&&(this.yylineno-=Zt.length-1);var wi=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:Zt?(Zt.length===Tt.length?this.yylloc.first_column:0)+Tt[Tt.length-Zt.length].length-Zt[0].length:this.yylloc.first_column-qt},this.options.ranges&&(this.yylloc.range=[wi[0],wi[0]+this.yyleng-qt]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(Et){this.unput(this.match.slice(Et))},"less"),pastInput:o(function(){var Et=this.matched.substr(0,this.matched.length-this.match.length);return(Et.length>20?"...":"")+Et.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var Et=this.match;return Et.length<20&&(Et+=this._input.substr(0,20-Et.length)),(Et.substr(0,20)+(Et.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var Et=this.pastInput(),qt=new Array(Et.length+1).join("-");return Et+this.upcomingInput()+` +`+qt+"^"},"showPosition"),test_match:o(function(Et,qt){var Zt,Tt,wi;if(this.options.backtrack_lexer&&(wi={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(wi.yylloc.range=this.yylloc.range.slice(0))),Tt=Et[0].match(/(?:\r\n?|\n).*/g),Tt&&(this.yylineno+=Tt.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Tt?Tt[Tt.length-1].length-Tt[Tt.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Et[0].length},this.yytext+=Et[0],this.match+=Et[0],this.matches=Et,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(Et[0].length),this.matched+=Et[0],Zt=this.performAction.call(this,this.yy,this,qt,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Zt)return Zt;if(this._backtrack){for(var xe in wi)this[xe]=wi[xe];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Et,qt,Zt,Tt;this._more||(this.yytext="",this.match="");for(var wi=this._currentRules(),xe=0;xeqt[0].length)){if(qt=Zt,Tt=xe,this.options.backtrack_lexer){if(Et=this.test_match(Zt,wi[xe]),Et!==!1)return Et;if(this._backtrack){qt=!1;continue}else return!1}else if(!this.options.flex)break}return qt?(Et=this.test_match(qt,wi[Tt]),Et!==!1?Et:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var qt=this.next();return qt||this.lex()},"lex"),begin:o(function(qt){this.conditionStack.push(qt)},"begin"),popState:o(function(){var qt=this.conditionStack.length-1;return qt>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(qt){return qt=this.conditionStack.length-1-Math.abs(qt||0),qt>=0?this.conditionStack[qt]:"INITIAL"},"topState"),pushState:o(function(qt){this.begin(qt)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(qt,Zt,Tt,wi){var xe=wi;switch(Tt){case 0:return this.begin("acc_title"),34;break;case 1:return this.popState(),"acc_title_value";break;case 2:return this.begin("acc_descr"),36;break;case 3:return this.popState(),"acc_descr_value";break;case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return this.pushState("shapeData"),Zt.yytext="",40;break;case 8:return this.pushState("shapeDataStr"),40;break;case 9:return this.popState(),40;break;case 10:let Wo=/\n\s*/g;return Zt.yytext=Zt.yytext.replace(Wo,"
    "),40;break;case 11:return 40;case 12:this.popState();break;case 13:this.begin("callbackname");break;case 14:this.popState();break;case 15:this.popState(),this.begin("callbackargs");break;case 16:return 95;case 17:this.popState();break;case 18:return 96;case 19:return"MD_STR";case 20:this.popState();break;case 21:this.begin("md_string");break;case 22:return"STR";case 23:this.popState();break;case 24:this.pushState("string");break;case 25:return 84;case 26:return 102;case 27:return 85;case 28:return 104;case 29:return 86;case 30:return 87;case 31:return 97;case 32:this.begin("click");break;case 33:this.popState();break;case 34:return 88;case 35:return qt.lex.firstGraph()&&this.begin("dir"),12;break;case 36:return qt.lex.firstGraph()&&this.begin("dir"),12;break;case 37:return qt.lex.firstGraph()&&this.begin("dir"),12;break;case 38:return 27;case 39:return 32;case 40:return 98;case 41:return 98;case 42:return 98;case 43:return 98;case 44:return this.popState(),13;break;case 45:return this.popState(),14;break;case 46:return this.popState(),14;break;case 47:return this.popState(),14;break;case 48:return this.popState(),14;break;case 49:return this.popState(),14;break;case 50:return this.popState(),14;break;case 51:return this.popState(),14;break;case 52:return this.popState(),14;break;case 53:return this.popState(),14;break;case 54:return this.popState(),14;break;case 55:return 121;case 56:return 122;case 57:return 123;case 58:return 124;case 59:return 125;case 60:return 78;case 61:return 105;case 62:return 111;case 63:return 46;case 64:return 60;case 65:return 44;case 66:return 8;case 67:return 106;case 68:return 115;case 69:return this.popState(),77;break;case 70:return this.pushState("edgeText"),75;break;case 71:return 119;case 72:return this.popState(),77;break;case 73:return this.pushState("thickEdgeText"),75;break;case 74:return 119;case 75:return this.popState(),77;break;case 76:return this.pushState("dottedEdgeText"),75;break;case 77:return 119;case 78:return 77;case 79:return this.popState(),53;break;case 80:return"TEXT";case 81:return this.pushState("ellipseText"),52;break;case 82:return this.popState(),55;break;case 83:return this.pushState("text"),54;break;case 84:return this.popState(),57;break;case 85:return this.pushState("text"),56;break;case 86:return 58;case 87:return this.pushState("text"),67;break;case 88:return this.popState(),64;break;case 89:return this.pushState("text"),63;break;case 90:return this.popState(),49;break;case 91:return this.pushState("text"),48;break;case 92:return this.popState(),69;break;case 93:return this.popState(),71;break;case 94:return 117;case 95:return this.pushState("trapText"),68;break;case 96:return this.pushState("trapText"),70;break;case 97:return 118;case 98:return 67;case 99:return 90;case 100:return"SEP";case 101:return 89;case 102:return 115;case 103:return 111;case 104:return 44;case 105:return 109;case 106:return 114;case 107:return 116;case 108:return this.popState(),62;break;case 109:return this.pushState("text"),62;break;case 110:return this.popState(),51;break;case 111:return this.pushState("text"),50;break;case 112:return this.popState(),31;break;case 113:return this.pushState("text"),29;break;case 114:return this.popState(),66;break;case 115:return this.pushState("text"),65;break;case 116:return"TEXT";case 117:return"QUOTE";case 118:return 9;case 119:return 10;case 120:return 11}},"anonymous"),rules:[/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:@\{)/,/^(?:["])/,/^(?:["])/,/^(?:[^\"]+)/,/^(?:[^}^"]+)/,/^(?:\})/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["][`])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:["])/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:href[\s])/,/^(?:click[\s]+)/,/^(?:[\s\n])/,/^(?:[^\s\n]*)/,/^(?:flowchart-elk\b)/,/^(?:graph\b)/,/^(?:flowchart\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:(\r?\n)*\s*\n)/,/^(?:\s*LR\b)/,/^(?:\s*RL\b)/,/^(?:\s*TB\b)/,/^(?:\s*BT\b)/,/^(?:\s*TD\b)/,/^(?:\s*BR\b)/,/^(?:\s*<)/,/^(?:\s*>)/,/^(?:\s*\^)/,/^(?:\s*v\b)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:.*direction\s+TD[^\n]*)/,/^(?:[^\s\"]+@(?=[^\{\"]))/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::::)/,/^(?::)/,/^(?:&)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:[^-]|-(?!-)+)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:[^=]|=(?!))/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:[^\.]|\.(?!))/,/^(?:\s*~~[\~]+\s*)/,/^(?:[-/\)][\)])/,/^(?:[^\(\)\[\]\{\}]|!\)+)/,/^(?:\(-)/,/^(?:\]\))/,/^(?:\(\[)/,/^(?:\]\])/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:>)/,/^(?:\)\])/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\(\(\()/,/^(?:[\\(?=\])][\]])/,/^(?:\/(?=\])\])/,/^(?:\/(?!\])|\\(?!\])|[^\\\[\]\(\)\{\}\/]+)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:\\\|)/,/^(?:v\b)/,/^(?:\*)/,/^(?:#)/,/^(?:&)/,/^(?:([A-Za-z0-9!"\#$%&'*+\.`?\\_\/]|-(?=[^\>\-\.])|(?!))+)/,/^(?:-)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\|)/,/^(?:\|)/,/^(?:\))/,/^(?:\()/,/^(?:\])/,/^(?:\[)/,/^(?:(\}))/,/^(?:\{)/,/^(?:[^\[\]\(\)\{\}\|\"]+)/,/^(?:")/,/^(?:(\r?\n)+)/,/^(?:\s)/,/^(?:$)/],conditions:{shapeDataEndBracket:{rules:[21,24,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},shapeDataStr:{rules:[9,10,21,24,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},shapeData:{rules:[8,11,12,21,24,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},callbackargs:{rules:[17,18,21,24,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},callbackname:{rules:[14,15,16,21,24,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},href:{rules:[21,24,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},click:{rules:[21,24,33,34,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},dottedEdgeText:{rules:[21,24,75,77,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},thickEdgeText:{rules:[21,24,72,74,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},edgeText:{rules:[21,24,69,71,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},trapText:{rules:[21,24,78,81,83,85,89,91,92,93,94,95,96,109,111,113,115],inclusive:!1},ellipseText:{rules:[21,24,78,79,80,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},text:{rules:[21,24,78,81,82,83,84,85,88,89,90,91,95,96,108,109,110,111,112,113,114,115,116],inclusive:!1},vertex:{rules:[21,24,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},dir:{rules:[21,24,44,45,46,47,48,49,50,51,52,53,54,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},acc_descr_multiline:{rules:[5,6,21,24,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},acc_descr:{rules:[3,21,24,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},acc_title:{rules:[1,21,24,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},md_string:{rules:[19,20,21,24,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},string:{rules:[21,22,23,24,78,81,83,85,89,91,95,96,109,111,113,115],inclusive:!1},INITIAL:{rules:[0,2,4,7,13,21,24,25,26,27,28,29,30,31,32,35,36,37,38,39,40,41,42,43,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,72,73,75,76,78,81,83,85,86,87,89,91,95,96,97,98,99,100,101,102,103,104,105,106,107,109,111,113,115,117,118,119,120],inclusive:!0}}};return Ft})();sa.lexer=qa;function Mi(){this.yy={}}return o(Mi,"Parser"),Mi.prototype=sa,sa.Parser=Mi,new Mi})();CF.parser=CF;wF=CF});var vye,xye,bye=P(()=>{"use strict";yye();vye=Object.assign({},wF);vye.parse=t=>{let e=t.replace(/}\s*\n/g,`} +`);return wF.parse(e)};xye=vye});var qu,wy=P(()=>{"use strict";qu=o(()=>` + /* Font Awesome icon styling - consolidated */ + .label-icon { + display: inline-block; + height: 1em; + overflow: visible; + vertical-align: -0.125em; + } + + .node .label-icon path { + fill: currentColor; + stroke: revert; + stroke-width: revert; + } +`,"getIconStyles")});var Ait,_it,Tye,kye=P(()=>{"use strict";Yn();wy();Ait=o((t,e)=>{let r=zp,i=r(t,"r"),n=r(t,"g"),a=r(t,"b");return Fn(i,n,a,e)},"fade"),_it=o(t=>`.label { + font-family: ${t.fontFamily}; + color: ${t.nodeTextColor||t.textColor}; + } + .cluster-label text { + fill: ${t.titleColor}; + } + .cluster-label span { + color: ${t.titleColor}; + } + .cluster-label span p { + background-color: transparent; + } + + .label text,span { + fill: ${t.nodeTextColor||t.textColor}; + color: ${t.nodeTextColor||t.textColor}; + } + + .node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; + stroke-width: ${t.strokeWidth??1}px; + } + .rough-node .label text , .node .label text, .image-shape .label, .icon-shape .label { + text-anchor: middle; + } + // .flowchart-label .text-outer-tspan { + // text-anchor: middle; + // } + // .flowchart-label .text-inner-tspan { + // text-anchor: start; + // } + + .node .katex path { + fill: #000; + stroke: #000; + stroke-width: 1px; + } + + .rough-node .label,.node .label, .image-shape .label, .icon-shape .label { + text-align: center; + } + .node.clickable { + cursor: pointer; + } + + + .root .anchor path { + fill: ${t.lineColor} !important; + stroke-width: 0; + stroke: ${t.lineColor}; + } + + .arrowheadPath { + fill: ${t.arrowheadColor}; + } + + .edgePath .path { + stroke: ${t.lineColor}; + stroke-width: ${t.strokeWidth??2}px; + } + + .flowchart-link { + stroke: ${t.lineColor}; + fill: none; + } + + .edgeLabel { + background-color: ${t.edgeLabelBackground}; + p { + background-color: ${t.edgeLabelBackground}; + } + rect { + opacity: 0.5; + background-color: ${t.edgeLabelBackground}; + fill: ${t.edgeLabelBackground}; + } + text-align: center; + } + + /* For html labels only */ + .labelBkg { + background-color: ${Ait(t.edgeLabelBackground,.5)}; + // background-color: + } + + .cluster rect { + fill: ${t.clusterBkg}; + stroke: ${t.clusterBorder}; + stroke-width: 1px; + } + + .cluster text { + fill: ${t.titleColor}; + } + + .cluster span { + color: ${t.titleColor}; + } + /* .cluster div { + color: ${t.titleColor}; + } */ + + div.mermaidTooltip { + position: absolute; + text-align: center; + max-width: 200px; + padding: 2px; + font-family: ${t.fontFamily}; + font-size: 12px; + background: ${t.tertiaryColor}; + border: 1px solid ${t.border2}; + border-radius: 2px; + pointer-events: none; + z-index: 100; + } + + .flowchartTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${t.textColor}; + } + + rect.text { + fill: none; + stroke-width: 0; + } + + .icon-shape, .image-shape { + background-color: ${t.edgeLabelBackground}; + p { + background-color: ${t.edgeLabelBackground}; + padding: 2px; + } + .label rect { + opacity: 0.5; + background-color: ${t.edgeLabelBackground}; + fill: ${t.edgeLabelBackground}; + } + text-align: center; + } + ${qu()} +`,"getStyles"),Tye=_it});var qS={};ur(qS,{diagram:()=>Dit});var Dit,WS=P(()=>{"use strict";Ut();qle();gye();bye();kye();Dit={parser:xye,get db(){return new S5},renderer:mye,styles:Tye,init:o(t=>{t.flowchart||(t.flowchart={}),t.layout&&t2({layout:t.layout}),t.flowchart.arrowMarkerAbsolute=t.arrowMarkerAbsolute,t2({flowchart:{arrowMarkerAbsolute:t.arrowMarkerAbsolute}})},"init")}});var EF,Aye,_ye=P(()=>{"use strict";EF=(function(){var t=o(function(Ee,Ne,we,Te){for(we=we||{},Te=Ee.length;Te--;we[Ee[Te]]=Ne);return we},"o"),e=[6,8,10,22,24,26,28,33,34,35,36,37,40,43,44,48,50,51,52],r=[1,10],i=[1,11],n=[1,12],a=[1,13],s=[1,23],l=[1,24],u=[1,25],h=[1,26],f=[1,27],d=[1,19],p=[1,28],m=[1,29],g=[1,20],y=[1,18],v=[1,21],x=[1,22],b=[1,36],T=[1,37],w=[1,38],k=[1,39],C=[1,40],E=[6,8,10,13,15,17,20,21,22,24,26,28,33,34,35,36,37,40,43,44,48,50,51,52,65,66,67,68,69],S=[1,45],L=[1,46],M=[1,55],I=[40,48,50,51,52,70,71],A=[1,66],_=[1,64],D=[1,61],N=[1,65],R=[1,67],B=[6,8,10,13,17,22,24,26,28,33,34,35,36,37,40,41,42,43,44,48,49,50,51,52,65,66,67,68,69],O=[65,66,67,68,69],$=[1,84],z=[1,83],F=[1,81],V=[1,82],H=[6,10,42,47],X=[6,10,13,41,42,47,48,49],W=[1,92],Z=[1,91],Y=[1,90],ae=[19,58],J=[1,101],ee=[1,100],re=[19,58,60,62],te={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,entityName:11,relSpec:12,COLON:13,role:14,STYLE_SEPARATOR:15,idList:16,BLOCK_START:17,attributes:18,BLOCK_STOP:19,SQS:20,SQE:21,title:22,title_value:23,acc_title:24,acc_title_value:25,acc_descr:26,acc_descr_value:27,acc_descr_multiline_value:28,direction:29,classDefStatement:30,classStatement:31,styleStatement:32,direction_tb:33,direction_bt:34,direction_rl:35,direction_lr:36,CLASSDEF:37,stylesOpt:38,separator:39,UNICODE_TEXT:40,STYLE_TEXT:41,COMMA:42,CLASS:43,STYLE:44,style:45,styleComponent:46,SEMI:47,NUM:48,BRKT:49,ENTITY_NAME:50,DECIMAL_NUM:51,ENTITY_ONE:52,attribute:53,attributeType:54,attributeName:55,attributeKeyTypeList:56,attributeComment:57,ATTRIBUTE_WORD:58,attributeKeyType:59,",":60,ATTRIBUTE_KEY:61,COMMENT:62,cardinality:63,relType:64,ZERO_OR_ONE:65,ZERO_OR_MORE:66,ONE_OR_MORE:67,ONLY_ONE:68,MD_PARENT:69,NON_IDENTIFYING:70,IDENTIFYING:71,WORD:72,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",8:"SPACE",10:"NEWLINE",13:"COLON",15:"STYLE_SEPARATOR",17:"BLOCK_START",19:"BLOCK_STOP",20:"SQS",21:"SQE",22:"title",23:"title_value",24:"acc_title",25:"acc_title_value",26:"acc_descr",27:"acc_descr_value",28:"acc_descr_multiline_value",33:"direction_tb",34:"direction_bt",35:"direction_rl",36:"direction_lr",37:"CLASSDEF",40:"UNICODE_TEXT",41:"STYLE_TEXT",42:"COMMA",43:"CLASS",44:"STYLE",47:"SEMI",48:"NUM",49:"BRKT",50:"ENTITY_NAME",51:"DECIMAL_NUM",52:"ENTITY_ONE",58:"ATTRIBUTE_WORD",60:",",61:"ATTRIBUTE_KEY",62:"COMMENT",65:"ZERO_OR_ONE",66:"ZERO_OR_MORE",67:"ONE_OR_MORE",68:"ONLY_ONE",69:"MD_PARENT",70:"NON_IDENTIFYING",71:"IDENTIFYING",72:"WORD"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,5],[9,9],[9,7],[9,7],[9,4],[9,6],[9,3],[9,5],[9,1],[9,3],[9,7],[9,9],[9,6],[9,8],[9,4],[9,6],[9,2],[9,2],[9,2],[9,1],[9,1],[9,1],[9,1],[9,1],[29,1],[29,1],[29,1],[29,1],[30,4],[16,1],[16,1],[16,3],[16,3],[31,3],[32,4],[38,1],[38,3],[45,1],[45,2],[39,1],[39,1],[39,1],[46,1],[46,1],[46,1],[46,1],[11,1],[11,1],[11,1],[11,1],[11,1],[18,1],[18,2],[53,2],[53,3],[53,3],[53,4],[54,1],[55,1],[56,1],[56,3],[59,1],[57,1],[12,3],[63,1],[63,1],[63,1],[63,1],[63,1],[64,1],[64,1],[14,1],[14,1],[14,1]],performAction:o(function(Ne,we,Te,De,$e,pe,Je){var Ce=pe.length-1;switch($e){case 1:break;case 2:this.$=[];break;case 3:pe[Ce-1].push(pe[Ce]),this.$=pe[Ce-1];break;case 4:case 5:this.$=pe[Ce];break;case 6:case 7:this.$=[];break;case 8:De.addEntity(pe[Ce-4]),De.addEntity(pe[Ce-2]),De.addRelationship(pe[Ce-4],pe[Ce],pe[Ce-2],pe[Ce-3]);break;case 9:De.addEntity(pe[Ce-8]),De.addEntity(pe[Ce-4]),De.addRelationship(pe[Ce-8],pe[Ce],pe[Ce-4],pe[Ce-5]),De.setClass([pe[Ce-8]],pe[Ce-6]),De.setClass([pe[Ce-4]],pe[Ce-2]);break;case 10:De.addEntity(pe[Ce-6]),De.addEntity(pe[Ce-2]),De.addRelationship(pe[Ce-6],pe[Ce],pe[Ce-2],pe[Ce-3]),De.setClass([pe[Ce-6]],pe[Ce-4]);break;case 11:De.addEntity(pe[Ce-6]),De.addEntity(pe[Ce-4]),De.addRelationship(pe[Ce-6],pe[Ce],pe[Ce-4],pe[Ce-5]),De.setClass([pe[Ce-4]],pe[Ce-2]);break;case 12:De.addEntity(pe[Ce-3]),De.addAttributes(pe[Ce-3],pe[Ce-1]);break;case 13:De.addEntity(pe[Ce-5]),De.addAttributes(pe[Ce-5],pe[Ce-1]),De.setClass([pe[Ce-5]],pe[Ce-3]);break;case 14:De.addEntity(pe[Ce-2]);break;case 15:De.addEntity(pe[Ce-4]),De.setClass([pe[Ce-4]],pe[Ce-2]);break;case 16:De.addEntity(pe[Ce]);break;case 17:De.addEntity(pe[Ce-2]),De.setClass([pe[Ce-2]],pe[Ce]);break;case 18:De.addEntity(pe[Ce-6],pe[Ce-4]),De.addAttributes(pe[Ce-6],pe[Ce-1]);break;case 19:De.addEntity(pe[Ce-8],pe[Ce-6]),De.addAttributes(pe[Ce-8],pe[Ce-1]),De.setClass([pe[Ce-8]],pe[Ce-3]);break;case 20:De.addEntity(pe[Ce-5],pe[Ce-3]);break;case 21:De.addEntity(pe[Ce-7],pe[Ce-5]),De.setClass([pe[Ce-7]],pe[Ce-2]);break;case 22:De.addEntity(pe[Ce-3],pe[Ce-1]);break;case 23:De.addEntity(pe[Ce-5],pe[Ce-3]),De.setClass([pe[Ce-5]],pe[Ce]);break;case 24:case 25:this.$=pe[Ce].trim(),De.setAccTitle(this.$);break;case 26:case 27:this.$=pe[Ce].trim(),De.setAccDescription(this.$);break;case 32:De.setDirection("TB");break;case 33:De.setDirection("BT");break;case 34:De.setDirection("RL");break;case 35:De.setDirection("LR");break;case 36:this.$=pe[Ce-3],De.addClass(pe[Ce-2],pe[Ce-1]);break;case 37:case 38:case 59:case 67:this.$=[pe[Ce]];break;case 39:case 40:this.$=pe[Ce-2].concat([pe[Ce]]);break;case 41:this.$=pe[Ce-2],De.setClass(pe[Ce-1],pe[Ce]);break;case 42:this.$=pe[Ce-3],De.addCssStyles(pe[Ce-2],pe[Ce-1]);break;case 43:this.$=[pe[Ce]];break;case 44:pe[Ce-2].push(pe[Ce]),this.$=pe[Ce-2];break;case 46:this.$=pe[Ce-1]+pe[Ce];break;case 54:case 79:case 80:this.$=pe[Ce].replace(/"/g,"");break;case 55:case 56:case 57:case 58:case 81:this.$=pe[Ce];break;case 60:pe[Ce].push(pe[Ce-1]),this.$=pe[Ce];break;case 61:this.$={type:pe[Ce-1],name:pe[Ce]};break;case 62:this.$={type:pe[Ce-2],name:pe[Ce-1],keys:pe[Ce]};break;case 63:this.$={type:pe[Ce-2],name:pe[Ce-1],comment:pe[Ce]};break;case 64:this.$={type:pe[Ce-3],name:pe[Ce-2],keys:pe[Ce-1],comment:pe[Ce]};break;case 65:case 66:case 69:this.$=pe[Ce];break;case 68:pe[Ce-2].push(pe[Ce]),this.$=pe[Ce-2];break;case 70:this.$=pe[Ce].replace(/"/g,"");break;case 71:this.$={cardA:pe[Ce],relType:pe[Ce-1],cardB:pe[Ce-2]};break;case 72:this.$=De.Cardinality.ZERO_OR_ONE;break;case 73:this.$=De.Cardinality.ZERO_OR_MORE;break;case 74:this.$=De.Cardinality.ONE_OR_MORE;break;case 75:this.$=De.Cardinality.ONLY_ONE;break;case 76:this.$=De.Cardinality.MD_PARENT;break;case 77:this.$=De.Identification.NON_IDENTIFYING;break;case 78:this.$=De.Identification.IDENTIFYING;break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:9,22:r,24:i,26:n,28:a,29:14,30:15,31:16,32:17,33:s,34:l,35:u,36:h,37:f,40:d,43:p,44:m,48:g,50:y,51:v,52:x},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:30,11:9,22:r,24:i,26:n,28:a,29:14,30:15,31:16,32:17,33:s,34:l,35:u,36:h,37:f,40:d,43:p,44:m,48:g,50:y,51:v,52:x},t(e,[2,5]),t(e,[2,6]),t(e,[2,16],{12:31,63:35,15:[1,32],17:[1,33],20:[1,34],65:b,66:T,67:w,68:k,69:C}),{23:[1,41]},{25:[1,42]},{27:[1,43]},t(e,[2,27]),t(e,[2,28]),t(e,[2,29]),t(e,[2,30]),t(e,[2,31]),t(E,[2,54]),t(E,[2,55]),t(E,[2,56]),t(E,[2,57]),t(E,[2,58]),t(e,[2,32]),t(e,[2,33]),t(e,[2,34]),t(e,[2,35]),{16:44,40:S,41:L},{16:47,40:S,41:L},{16:48,40:S,41:L},t(e,[2,4]),{11:49,40:d,48:g,50:y,51:v,52:x},{16:50,40:S,41:L},{18:51,19:[1,52],53:53,54:54,58:M},{11:56,40:d,48:g,50:y,51:v,52:x},{64:57,70:[1,58],71:[1,59]},t(I,[2,72]),t(I,[2,73]),t(I,[2,74]),t(I,[2,75]),t(I,[2,76]),t(e,[2,24]),t(e,[2,25]),t(e,[2,26]),{13:A,38:60,41:_,42:D,45:62,46:63,48:N,49:R},t(B,[2,37]),t(B,[2,38]),{16:68,40:S,41:L,42:D},{13:A,38:69,41:_,42:D,45:62,46:63,48:N,49:R},{13:[1,70],15:[1,71]},t(e,[2,17],{63:35,12:72,17:[1,73],42:D,65:b,66:T,67:w,68:k,69:C}),{19:[1,74]},t(e,[2,14]),{18:75,19:[2,59],53:53,54:54,58:M},{55:76,58:[1,77]},{58:[2,65]},{21:[1,78]},{63:79,65:b,66:T,67:w,68:k,69:C},t(O,[2,77]),t(O,[2,78]),{6:$,10:z,39:80,42:F,47:V},{40:[1,85],41:[1,86]},t(H,[2,43],{46:87,13:A,41:_,48:N,49:R}),t(X,[2,45]),t(X,[2,50]),t(X,[2,51]),t(X,[2,52]),t(X,[2,53]),t(e,[2,41],{42:D}),{6:$,10:z,39:88,42:F,47:V},{14:89,40:W,50:Z,72:Y},{16:93,40:S,41:L},{11:94,40:d,48:g,50:y,51:v,52:x},{18:95,19:[1,96],53:53,54:54,58:M},t(e,[2,12]),{19:[2,60]},t(ae,[2,61],{56:97,57:98,59:99,61:J,62:ee}),t([19,58,61,62],[2,66]),t(e,[2,22],{15:[1,103],17:[1,102]}),t([40,48,50,51,52],[2,71]),t(e,[2,36]),{13:A,41:_,45:104,46:63,48:N,49:R},t(e,[2,47]),t(e,[2,48]),t(e,[2,49]),t(B,[2,39]),t(B,[2,40]),t(X,[2,46]),t(e,[2,42]),t(e,[2,8]),t(e,[2,79]),t(e,[2,80]),t(e,[2,81]),{13:[1,105],42:D},{13:[1,107],15:[1,106]},{19:[1,108]},t(e,[2,15]),t(ae,[2,62],{57:109,60:[1,110],62:ee}),t(ae,[2,63]),t(re,[2,67]),t(ae,[2,70]),t(re,[2,69]),{18:111,19:[1,112],53:53,54:54,58:M},{16:113,40:S,41:L},t(H,[2,44],{46:87,13:A,41:_,48:N,49:R}),{14:114,40:W,50:Z,72:Y},{16:115,40:S,41:L},{14:116,40:W,50:Z,72:Y},t(e,[2,13]),t(ae,[2,64]),{59:117,61:J},{19:[1,118]},t(e,[2,20]),t(e,[2,23],{17:[1,119],42:D}),t(e,[2,11]),{13:[1,120],42:D},t(e,[2,10]),t(re,[2,68]),t(e,[2,18]),{18:121,19:[1,122],53:53,54:54,58:M},{14:123,40:W,50:Z,72:Y},{19:[1,124]},t(e,[2,21]),t(e,[2,9]),t(e,[2,19])],defaultActions:{55:[2,65],75:[2,60]},parseError:o(function(Ne,we){if(we.recoverable)this.trace(Ne);else{var Te=new Error(Ne);throw Te.hash=we,Te}},"parseError"),parse:o(function(Ne){var we=this,Te=[0],De=[],$e=[null],pe=[],Je=this.table,Ce="",Fe=0,Ue=0,qe=0,Me=2,He=1,K=pe.slice.call(arguments,1),oe=Object.create(this.lexer),U={yy:{}};for(var ue in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ue)&&(U.yy[ue]=this.yy[ue]);oe.setInput(Ne,U.yy),U.yy.lexer=oe,U.yy.parser=this,typeof oe.yylloc>"u"&&(oe.yylloc={});var G=oe.yylloc;pe.push(G);var se=oe.options&&oe.options.ranges;typeof U.yy.parseError=="function"?this.parseError=U.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function le(Nt){Te.length=Te.length-2*Nt,$e.length=$e.length-Nt,pe.length=pe.length-Nt}o(le,"popStack");function ke(){var Nt;return Nt=De.pop()||oe.lex()||He,typeof Nt!="number"&&(Nt instanceof Array&&(De=Nt,Nt=De.pop()),Nt=we.symbols_[Nt]||Nt),Nt}o(ke,"lex");for(var me,ye,Re,ve,Oe,We,Be={},Qe,ce,it,fe;;){if(Re=Te[Te.length-1],this.defaultActions[Re]?ve=this.defaultActions[Re]:((me===null||typeof me>"u")&&(me=ke()),ve=Je[Re]&&Je[Re][me]),typeof ve>"u"||!ve.length||!ve[0]){var ut="";fe=[];for(Qe in Je[Re])this.terminals_[Qe]&&Qe>Me&&fe.push("'"+this.terminals_[Qe]+"'");oe.showPosition?ut="Parse error on line "+(Fe+1)+`: +`+oe.showPosition()+` +Expecting `+fe.join(", ")+", got '"+(this.terminals_[me]||me)+"'":ut="Parse error on line "+(Fe+1)+": Unexpected "+(me==He?"end of input":"'"+(this.terminals_[me]||me)+"'"),this.parseError(ut,{text:oe.match,token:this.terminals_[me]||me,line:oe.yylineno,loc:G,expected:fe})}if(ve[0]instanceof Array&&ve.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Re+", token: "+me);switch(ve[0]){case 1:Te.push(me),$e.push(oe.yytext),pe.push(oe.yylloc),Te.push(ve[1]),me=null,ye?(me=ye,ye=null):(Ue=oe.yyleng,Ce=oe.yytext,Fe=oe.yylineno,G=oe.yylloc,qe>0&&qe--);break;case 2:if(ce=this.productions_[ve[1]][1],Be.$=$e[$e.length-ce],Be._$={first_line:pe[pe.length-(ce||1)].first_line,last_line:pe[pe.length-1].last_line,first_column:pe[pe.length-(ce||1)].first_column,last_column:pe[pe.length-1].last_column},se&&(Be._$.range=[pe[pe.length-(ce||1)].range[0],pe[pe.length-1].range[1]]),We=this.performAction.apply(Be,[Ce,Ue,Fe,U.yy,ve[1],$e,pe].concat(K)),typeof We<"u")return We;ce&&(Te=Te.slice(0,-1*ce*2),$e=$e.slice(0,-1*ce),pe=pe.slice(0,-1*ce)),Te.push(this.productions_[ve[1]][0]),$e.push(Be.$),pe.push(Be._$),it=Je[Te[Te.length-2]][Te[Te.length-1]],Te.push(it);break;case 3:return!0}}return!0},"parse")},be=(function(){var Ee={EOF:1,parseError:o(function(we,Te){if(this.yy.parser)this.yy.parser.parseError(we,Te);else throw new Error(we)},"parseError"),setInput:o(function(Ne,we){return this.yy=we||this.yy||{},this._input=Ne,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var Ne=this._input[0];this.yytext+=Ne,this.yyleng++,this.offset++,this.match+=Ne,this.matched+=Ne;var we=Ne.match(/(?:\r\n?|\n).*/g);return we?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Ne},"input"),unput:o(function(Ne){var we=Ne.length,Te=Ne.split(/(?:\r\n?|\n)/g);this._input=Ne+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-we),this.offset-=we;var De=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),Te.length-1&&(this.yylineno-=Te.length-1);var $e=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:Te?(Te.length===De.length?this.yylloc.first_column:0)+De[De.length-Te.length].length-Te[0].length:this.yylloc.first_column-we},this.options.ranges&&(this.yylloc.range=[$e[0],$e[0]+this.yyleng-we]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(Ne){this.unput(this.match.slice(Ne))},"less"),pastInput:o(function(){var Ne=this.matched.substr(0,this.matched.length-this.match.length);return(Ne.length>20?"...":"")+Ne.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var Ne=this.match;return Ne.length<20&&(Ne+=this._input.substr(0,20-Ne.length)),(Ne.substr(0,20)+(Ne.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var Ne=this.pastInput(),we=new Array(Ne.length+1).join("-");return Ne+this.upcomingInput()+` +`+we+"^"},"showPosition"),test_match:o(function(Ne,we){var Te,De,$e;if(this.options.backtrack_lexer&&($e={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&($e.yylloc.range=this.yylloc.range.slice(0))),De=Ne[0].match(/(?:\r\n?|\n).*/g),De&&(this.yylineno+=De.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:De?De[De.length-1].length-De[De.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Ne[0].length},this.yytext+=Ne[0],this.match+=Ne[0],this.matches=Ne,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(Ne[0].length),this.matched+=Ne[0],Te=this.performAction.call(this,this.yy,this,we,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Te)return Te;if(this._backtrack){for(var pe in $e)this[pe]=$e[pe];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Ne,we,Te,De;this._more||(this.yytext="",this.match="");for(var $e=this._currentRules(),pe=0;pe<$e.length;pe++)if(Te=this._input.match(this.rules[$e[pe]]),Te&&(!we||Te[0].length>we[0].length)){if(we=Te,De=pe,this.options.backtrack_lexer){if(Ne=this.test_match(Te,$e[pe]),Ne!==!1)return Ne;if(this._backtrack){we=!1;continue}else return!1}else if(!this.options.flex)break}return we?(Ne=this.test_match(we,$e[De]),Ne!==!1?Ne:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var we=this.next();return we||this.lex()},"lex"),begin:o(function(we){this.conditionStack.push(we)},"begin"),popState:o(function(){var we=this.conditionStack.length-1;return we>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(we){return we=this.conditionStack.length-1-Math.abs(we||0),we>=0?this.conditionStack[we]:"INITIAL"},"topState"),pushState:o(function(we){this.begin(we)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(we,Te,De,$e){var pe=$e;switch(De){case 0:return this.begin("acc_title"),24;break;case 1:return this.popState(),"acc_title_value";break;case 2:return this.begin("acc_descr"),26;break;case 3:return this.popState(),"acc_descr_value";break;case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return 33;case 8:return 34;case 9:return 35;case 10:return 36;case 11:return 10;case 12:break;case 13:return 8;case 14:return 50;case 15:return 72;case 16:return 4;case 17:return this.begin("block"),17;break;case 18:return 49;case 19:return 49;case 20:return 42;case 21:return 15;case 22:return 13;case 23:break;case 24:return 61;case 25:return 58;case 26:return 58;case 27:return 62;case 28:break;case 29:return this.popState(),19;break;case 30:return Te.yytext[0];case 31:return 20;case 32:return 21;case 33:return this.begin("style"),44;break;case 34:return this.popState(),10;break;case 35:break;case 36:return 13;case 37:return 42;case 38:return 49;case 39:return this.begin("style"),37;break;case 40:return 43;case 41:return 65;case 42:return 67;case 43:return 67;case 44:return 67;case 45:return 65;case 46:return 65;case 47:return 66;case 48:return 66;case 49:return 66;case 50:return 66;case 51:return 66;case 52:return 67;case 53:return 66;case 54:return 67;case 55:return 68;case 56:return 68;case 57:return 51;case 58:return 68;case 59:return 68;case 60:return 68;case 61:return 52;case 62:return 48;case 63:return 68;case 64:return 65;case 65:return 66;case 66:return 67;case 67:return 69;case 68:return 70;case 69:return 71;case 70:return 71;case 71:return 70;case 72:return 70;case 73:return 70;case 74:return 41;case 75:return 47;case 76:return 40;case 77:return Te.yytext[0];case 78:return 6}},"anonymous"),rules:[/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:[\s]+)/i,/^(?:"[^"%\r\n\v\b\\]+")/i,/^(?:"[^"]*")/i,/^(?:erDiagram\b)/i,/^(?:\{)/i,/^(?:#)/i,/^(?:#)/i,/^(?:,)/i,/^(?::::)/i,/^(?::)/i,/^(?:\s+)/i,/^(?:\b((?:PK)|(?:FK)|(?:UK))\b)/i,/^(?:([^\s]*)[~].*[~]([^\s]*))/i,/^(?:([\*A-Za-z_\u00C0-\uFFFF][A-Za-z0-9\-\_\[\]\(\)\u00C0-\uFFFF\*]*))/i,/^(?:"[^"]*")/i,/^(?:[\n]+)/i,/^(?:\})/i,/^(?:.)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:style\b)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?::)/i,/^(?:,)/i,/^(?:#)/i,/^(?:classDef\b)/i,/^(?:class\b)/i,/^(?:one or zero\b)/i,/^(?:one or more\b)/i,/^(?:one or many\b)/i,/^(?:1\+)/i,/^(?:\|o\b)/i,/^(?:zero or one\b)/i,/^(?:zero or more\b)/i,/^(?:zero or many\b)/i,/^(?:0\+)/i,/^(?:\}o\b)/i,/^(?:many\(0\))/i,/^(?:many\(1\))/i,/^(?:many\b)/i,/^(?:\}\|)/i,/^(?:one\b)/i,/^(?:only one\b)/i,/^(?:[0-9]+\.[0-9]+)/i,/^(?:1(?=\s+[A-Za-z_"']))/i,/^(?:1(?=\s+[0-9]))/i,/^(?:1(?=(--|\.\.|\.-|-\.)))/i,/^(?:1\b)/i,/^(?:[0-9]+)/i,/^(?:\|\|)/i,/^(?:o\|)/i,/^(?:o\{)/i,/^(?:\|\{)/i,/^(?:u(?=[\.\-\|]))/i,/^(?:\.\.)/i,/^(?:--)/i,/^(?:to\b)/i,/^(?:optionally to\b)/i,/^(?:\.-)/i,/^(?:-\.)/i,/^(?:([^\x00-\x7F]|\w|-|\*)+)/i,/^(?:;)/i,/^(?:([^\x00-\x7F]|\w|-|\*|\.)+)/i,/^(?:.)/i,/^(?:$)/i],conditions:{style:{rules:[34,35,36,37,38,74,75],inclusive:!1},acc_descr_multiline:{rules:[5,6],inclusive:!1},acc_descr:{rules:[3],inclusive:!1},acc_title:{rules:[1],inclusive:!1},block:{rules:[23,24,25,26,27,28,29,30],inclusive:!1},INITIAL:{rules:[0,2,4,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,31,32,33,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,65,66,67,68,69,70,71,72,73,76,77,78],inclusive:!0}}};return Ee})();te.lexer=be;function de(){this.yy={}}return o(de,"Parser"),de.prototype=te,te.Parser=de,new de})();EF.parser=EF;Aye=EF});var US,Dye=P(()=>{"use strict";bt();Ut();Ki();er();US=class{constructor(){this.entities=new Map;this.relationships=[];this.classes=new Map;this.direction="TB";this.Cardinality={ZERO_OR_ONE:"ZERO_OR_ONE",ZERO_OR_MORE:"ZERO_OR_MORE",ONE_OR_MORE:"ONE_OR_MORE",ONLY_ONE:"ONLY_ONE",MD_PARENT:"MD_PARENT"};this.Identification={NON_IDENTIFYING:"NON_IDENTIFYING",IDENTIFYING:"IDENTIFYING"};this.setAccTitle=Ar;this.getAccTitle=Dr;this.setAccDescription=Lr;this.getAccDescription=Rr;this.setDiagramTitle=Mr;this.getDiagramTitle=Nr;this.getConfig=o(()=>ge().er,"getConfig");this.clear(),this.addEntity=this.addEntity.bind(this),this.addAttributes=this.addAttributes.bind(this),this.addRelationship=this.addRelationship.bind(this),this.setDirection=this.setDirection.bind(this),this.addCssStyles=this.addCssStyles.bind(this),this.addClass=this.addClass.bind(this),this.setClass=this.setClass.bind(this),this.setAccTitle=this.setAccTitle.bind(this),this.setAccDescription=this.setAccDescription.bind(this)}static{o(this,"ErDB")}addEntity(e,r=""){return this.entities.has(e)?!this.entities.get(e)?.alias&&r&&(this.entities.get(e).alias=r,Q.info(`Add alias '${r}' to entity '${e}'`)):(this.entities.set(e,{id:`entity-${e}-${this.entities.size}`,label:e,attributes:[],alias:r,shape:"erBox",look:ge().look??"default",cssClasses:"default",cssStyles:[],labelType:"markdown"}),Q.info("Added new entity :",e)),this.entities.get(e)}getEntity(e){return this.entities.get(e)}getEntities(){return this.entities}getClasses(){return this.classes}addAttributes(e,r){let i=this.addEntity(e),n;for(n=r.length-1;n>=0;n--)r[n].keys||(r[n].keys=[]),r[n].comment||(r[n].comment=""),i.attributes.push(r[n]),Q.debug("Added attribute ",r[n].name)}addRelationship(e,r,i,n){let a=this.entities.get(e),s=this.entities.get(i);if(!a||!s)return;let l={entityA:a.id,roleA:r,entityB:s.id,relSpec:n};this.relationships.push(l),Q.debug("Added new relationship :",l)}getRelationships(){return this.relationships}getDirection(){return this.direction}setDirection(e){this.direction=e}getCompiledStyles(e){let r=[];for(let i of e){let n=this.classes.get(i);n?.styles&&(r=[...r,...n.styles??[]].map(a=>a.trim())),n?.textStyles&&(r=[...r,...n.textStyles??[]].map(a=>a.trim()))}return r}addCssStyles(e,r){for(let i of e){let n=this.entities.get(i);if(!r||!n)return;for(let a of r)n.cssStyles.push(a)}}addClass(e,r){e.forEach(i=>{let n=this.classes.get(i);n===void 0&&(n={id:i,styles:[],textStyles:[]},this.classes.set(i,n)),r&&r.forEach(function(a){if(/color/.exec(a)){let s=a.replace("fill","bgFill");n.textStyles.push(s)}n.styles.push(a)})})}setClass(e,r){for(let i of e){let n=this.entities.get(i);if(n)for(let a of r)n.cssClasses+=" "+a}}clear(){this.entities=new Map,this.classes=new Map,this.relationships=[],wr()}getData(){let e=[],r=[],i=ge(),n=0;for(let s of this.entities.keys()){let l=this.entities.get(s);l&&(l.cssCompiledStyles=this.getCompiledStyles(l.cssClasses.split(" ")),l.colorIndex=n++,e.push(l))}let a=0;for(let s of this.relationships){let l={id:Cu(s.entityA,s.entityB,{prefix:"id",counter:a++}),type:"normal",curve:"basis",start:s.entityA,end:s.entityB,label:s.roleA,labelpos:"c",thickness:"normal",classes:"relationshipLine",arrowTypeStart:s.relSpec.cardB.toLowerCase(),arrowTypeEnd:s.relSpec.cardA.toLowerCase(),pattern:s.relSpec.relType=="IDENTIFYING"?"solid":"dashed",look:i.look,labelType:"markdown"};r.push(l)}return{nodes:e,edges:r,other:{},config:i,direction:"TB"}}}});var SF={};ur(SF,{draw:()=>Pit});var Pit,Lye=P(()=>{"use strict";Ut();bt();I0();Wd();Ud();er();Pr();Pit=o(async function(t,e,r,i){Q.info("REF0:"),Q.info("Drawing er diagram (unified)",e);let{securityLevel:n,er:a,layout:s}=ge(),l=i.db.getData(),u=Ol(e,n);l.type=i.type,l.layoutAlgorithm=Vu(s),l.config.flowchart.nodeSpacing=a?.nodeSpacing||140,l.config.flowchart.rankSpacing=a?.rankSpacing||80,l.direction=i.db.getDirection();let{config:h}=l,{look:f}=h;f==="neo"?l.markers=["only_one_neo","zero_or_one_neo","one_or_more_neo","zero_or_more_neo"]:l.markers=["only_one","zero_or_one","one_or_more","zero_or_more"],l.diagramId=e,await Ul(l,u),l.layoutAlgorithm==="elk"&&u.select(".edges").lower();let d=u.selectAll('[id*="-background"]');Array.from(d).length>0&&d.each(function(){let m=Ze(this),y=m.attr("id").replace("-background",""),v=u.select(`#${CSS.escape(y)}`);if(!v.empty()){let x=v.attr("transform");m.attr("transform",x)}});let p=8;Kt.insertTitle(u,"erDiagramTitleText",a?.titleTopMargin??25,i.db.getDiagramTitle()),Ro(u,p,"erDiagram",a?.useMaxWidth??!0)},"draw")});var Rye,HS,Bit,Fit,Nye,Iye=P(()=>{"use strict";Yn();Rye=o((t,e)=>{let r=zp,i=r(t,"r"),n=r(t,"g"),a=r(t,"b");return Fn(i,n,a,e)},"fade"),HS=new Set(["redux-color","redux-dark-color"]),Bit=o(t=>{let{theme:e,look:r,bkgColorArray:i,borderColorArray:n}=t;if(!HS.has(e))return"";let a=i?.length>0,s="";for(let l=0;l{let{look:e,theme:r,erEdgeLabelBackground:i,strokeWidth:n}=t;return` + ${Bit(t)} + .entityBox { + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; + } + + .relationshipLabelBox { + fill: ${t.tertiaryColor}; + opacity: 0.7; + background-color: ${t.tertiaryColor}; + rect { + opacity: 0.5; + } + } + + .labelBkg { + background-color: ${HS.has(r)&&i?i:Rye(t.tertiaryColor,.5)}; + } + + .edgeLabel { + background-color: ${HS.has(r)&&i?i:t.edgeLabelBackground}; + } + .edgeLabel .label rect { + fill: ${HS.has(r)&&i?i:t.edgeLabelBackground}; + } + .edgeLabel .label text { + fill: ${t.textColor}; + } + + .edgeLabel .label { + fill: ${t.nodeBorder}; + font-size: 14px; + } + + .label { + font-family: ${t.fontFamily}; + color: ${t.nodeTextColor||t.textColor}; + } + + .edge-pattern-dashed { + stroke-dasharray: 8,8; + } + + .node rect, + .node circle, + .node ellipse, + .node polygon + { + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; + stroke-width: ${e==="neo"?n:"1px"}; + } + + .relationshipLine { + stroke: ${t.lineColor}; + stroke-width: ${e==="neo"?n:"1px"}; + fill: none; + } + + .marker { + fill: none !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; + } + [data-look=neo].labelBkg { + background-color: ${Rye(t.tertiaryColor,.5)}; + } +`},"getStyles"),Nye=Fit});var Mye={};ur(Mye,{diagram:()=>$it});var $it,Oye=P(()=>{"use strict";_ye();Dye();Lye();Iye();$it={parser:Aye,get db(){return new US},renderer:SF,styles:Nye}});function _n(t){return typeof t=="object"&&t!==null&&typeof t.$type=="string"}function ga(t){return typeof t=="object"&&t!==null&&typeof t.$refText=="string"&&"ref"in t}function nl(t){return typeof t=="object"&&t!==null&&typeof t.$refText=="string"&&"items"in t}function AF(t){return typeof t=="object"&&t!==null&&typeof t.name=="string"&&typeof t.type=="string"&&typeof t.path=="string"}function om(t){return typeof t=="object"&&t!==null&&typeof t.info=="object"&&typeof t.message=="string"}function Mc(t){return typeof t=="object"&&t!==null&&Array.isArray(t.content)}function Hd(t){return typeof t=="object"&&t!==null&&typeof t.tokenType=="object"}function _T(t){return Mc(t)&&typeof t.fullText=="string"}var sm,Oc=P(()=>{"use strict";o(_n,"isAstNode");o(ga,"isReference");o(nl,"isMultiReference");o(AF,"isAstNodeDescription");o(om,"isLinkingError");sm=class{static{o(this,"AbstractAstReflection")}constructor(){this.subtypes={},this.allSubtypes={}}getAllTypes(){return Object.keys(this.types)}getReferenceType(e){let r=this.types[e.container.$type];if(!r)throw new Error(`Type ${e.container.$type||"undefined"} not found.`);let i=r.properties[e.property]?.referenceType;if(!i)throw new Error(`Property ${e.property||"undefined"} of type ${e.container.$type} is not a reference.`);return i}getTypeMetaData(e){let r=this.types[e];return r||{name:e,properties:{},superTypes:[]}}isInstance(e,r){return _n(e)&&this.isSubtype(e.$type,r)}isSubtype(e,r){if(e===r)return!0;let i=this.subtypes[e];i||(i=this.subtypes[e]={});let n=i[r];if(n!==void 0)return n;{let a=this.types[e],s=a?a.superTypes.some(l=>this.isSubtype(l,r)):!1;return i[r]=s,s}}getAllSubTypes(e){let r=this.allSubtypes[e];if(r)return r;{let i=this.getAllTypes(),n=[];for(let a of i)this.isSubtype(a,e)&&n.push(a);return this.allSubtypes[e]=n,n}}};o(Mc,"isCompositeCstNode");o(Hd,"isLeafCstNode");o(_T,"isRootCstNode")});function Wit(t){return typeof t=="string"?t:typeof t>"u"?"undefined":typeof t.toString=="function"?t.toString():Object.prototype.toString.call(t)}function YS(t){return!!t&&typeof t[Symbol.iterator]=="function"}function jr(...t){if(t.length===1){let e=t[0];if(e instanceof al)return e;if(YS(e))return new al(()=>e[Symbol.iterator](),r=>r.next());if(typeof e.length=="number")return new al(()=>({index:0}),r=>r.index1?new al(()=>({collIndex:0,arrIndex:0}),e=>{do{if(e.iterator){let r=e.iterator.next();if(!r.done)return r;e.iterator=void 0}if(e.array){if(e.arrIndex{"use strict";al=class t{static{o(this,"StreamImpl")}constructor(e,r){this.startFn=e,this.nextFn=r}iterator(){let e={state:this.startFn(),next:o(()=>this.nextFn(e.state),"next"),[Symbol.iterator]:()=>e};return e}[Symbol.iterator](){return this.iterator()}isEmpty(){return!!this.iterator().next().done}count(){let e=this.iterator(),r=0,i=e.next();for(;!i.done;)r++,i=e.next();return r}toArray(){let e=[],r=this.iterator(),i;do i=r.next(),i.value!==void 0&&e.push(i.value);while(!i.done);return e}toSet(){return new Set(this)}toMap(e,r){let i=this.map(n=>[e?e(n):n,r?r(n):n]);return new Map(i)}toString(){return this.join()}concat(e){return new t(()=>({first:this.startFn(),firstDone:!1,iterator:e[Symbol.iterator]()}),r=>{let i;if(!r.firstDone){do if(i=this.nextFn(r.first),!i.done)return i;while(!i.done);r.firstDone=!0}do if(i=r.iterator.next(),!i.done)return i;while(!i.done);return xs})}join(e=","){let r=this.iterator(),i="",n,a=!1;do n=r.next(),n.done||(a&&(i+=e),i+=Wit(n.value)),a=!0;while(!n.done);return i}indexOf(e,r=0){let i=this.iterator(),n=0,a=i.next();for(;!a.done;){if(n>=r&&a.value===e)return n;a=i.next(),n++}return-1}every(e){let r=this.iterator(),i=r.next();for(;!i.done;){if(!e(i.value))return!1;i=r.next()}return!0}some(e){let r=this.iterator(),i=r.next();for(;!i.done;){if(e(i.value))return!0;i=r.next()}return!1}forEach(e){let r=this.iterator(),i=0,n=r.next();for(;!n.done;)e(n.value,i),n=r.next(),i++}map(e){return new t(this.startFn,r=>{let{done:i,value:n}=this.nextFn(r);return i?xs:{done:!1,value:e(n)}})}filter(e){return new t(this.startFn,r=>{let i;do if(i=this.nextFn(r),!i.done&&e(i.value))return i;while(!i.done);return xs})}nonNullable(){return this.filter(e=>e!=null)}reduce(e,r){let i=this.iterator(),n=r,a=i.next();for(;!a.done;)n===void 0?n=a.value:n=e(n,a.value),a=i.next();return n}reduceRight(e,r){return this.recursiveReduce(this.iterator(),e,r)}recursiveReduce(e,r,i){let n=e.next();if(n.done)return i;let a=this.recursiveReduce(e,r,i);return a===void 0?n.value:r(a,n.value)}find(e){let r=this.iterator(),i=r.next();for(;!i.done;){if(e(i.value))return i.value;i=r.next()}}findIndex(e){let r=this.iterator(),i=0,n=r.next();for(;!n.done;){if(e(n.value))return i;n=r.next(),i++}return-1}includes(e){let r=this.iterator(),i=r.next();for(;!i.done;){if(i.value===e)return!0;i=r.next()}return!1}flatMap(e){return new t(()=>({this:this.startFn()}),r=>{do{if(r.iterator){let a=r.iterator.next();if(a.done)r.iterator=void 0;else return a}let{done:i,value:n}=this.nextFn(r.this);if(!i){let a=e(n);if(YS(a))r.iterator=a[Symbol.iterator]();else return{done:!1,value:a}}}while(r.iterator);return xs})}flat(e){if(e===void 0&&(e=1),e<=0)return this;let r=e>1?this.flat(e-1):this;return new t(()=>({this:r.startFn()}),i=>{do{if(i.iterator){let s=i.iterator.next();if(s.done)i.iterator=void 0;else return s}let{done:n,value:a}=r.nextFn(i.this);if(!n)if(YS(a))i.iterator=a[Symbol.iterator]();else return{done:!1,value:a}}while(i.iterator);return xs})}head(){let r=this.iterator().next();if(!r.done)return r.value}tail(e=1){return new t(()=>{let r=this.startFn();for(let i=0;i({size:0,state:this.startFn()}),r=>(r.size++,r.size>e?xs:this.nextFn(r.state)))}distinct(e){return new t(()=>({set:new Set,internalState:this.startFn()}),r=>{let i;do if(i=this.nextFn(r.internalState),!i.done){let n=e?e(i.value):i.value;if(!r.set.has(n))return r.set.add(n),i}while(!i.done);return xs})}exclude(e,r){let i=new Set;for(let n of e){let a=r?r(n):n;i.add(a)}return this.filter(n=>{let a=r?r(n):n;return!i.has(a)})}};o(Wit,"toString");o(YS,"isIterable");Yd=new al(()=>{},()=>xs),xs=Object.freeze({done:!0,value:void 0});o(jr,"stream");Wu=class extends al{static{o(this,"TreeStreamImpl")}constructor(e,r,i){super(()=>({iterators:i?.includeRoot?[[e][Symbol.iterator]()]:[r(e)[Symbol.iterator]()],pruned:!1}),n=>{for(n.pruned&&(n.iterators.pop(),n.pruned=!1);n.iterators.length>0;){let s=n.iterators[n.iterators.length-1].next();if(s.done)n.iterators.pop();else return n.iterators.push(r(s.value)[Symbol.iterator]()),s}return xs})}iterator(){let e={state:this.startFn(),next:o(()=>this.nextFn(e.state),"next"),prune:o(()=>{e.state.pruned=!0},"prune"),[Symbol.iterator]:()=>e};return e}};(function(t){function e(a){return a.reduce((s,l)=>s+l,0)}o(e,"sum"),t.sum=e;function r(a){return a.reduce((s,l)=>s*l,0)}o(r,"product"),t.product=r;function i(a){return a.reduce((s,l)=>Math.min(s,l))}o(i,"min"),t.min=i;function n(a){return a.reduce((s,l)=>Math.max(s,l))}o(n,"max"),t.max=n})(Ey||(Ey={}))});var XS={};ur(XS,{assignMandatoryProperties:()=>LF,copyAstNode:()=>DF,findRootNode:()=>Ay,getContainerOfType:()=>ef,getDocument:()=>bs,getReferenceNodes:()=>jS,hasContainerOfType:()=>Uit,linkContentToContainer:()=>Sy,streamAllContents:()=>Pc,streamAst:()=>js,streamContents:()=>DT,streamReferences:()=>jd});function Sy(t,e={}){for(let[r,i]of Object.entries(t))r.startsWith("$")||(Array.isArray(i)?i.forEach((n,a)=>{_n(n)&&(n.$container=t,n.$containerProperty=r,n.$containerIndex=a,e.deep&&Sy(n,e))}):_n(i)&&(i.$container=t,i.$containerProperty=r,e.deep&&Sy(i,e)))}function ef(t,e){let r=t;for(;r;){if(e(r))return r;r=r.$container}}function Uit(t,e){let r=t;for(;r;){if(e(r))return!0;r=r.$container}return!1}function bs(t){let r=Ay(t).$document;if(!r)throw new Error("AST node has no document.");return r}function Ay(t){for(;t.$container;)t=t.$container;return t}function jS(t){return ga(t)?t.ref?[t.ref]:[]:nl(t)?t.items.map(e=>e.ref):[]}function DT(t,e){if(!t)throw new Error("Node must be an AstNode.");let r=e?.range;return new al(()=>({keys:Object.keys(t),keyIndex:0,arrayIndex:0}),i=>{for(;i.keyIndexDT(r,e))}function js(t,e){if(t){if(e?.range&&!_F(t,e.range))return new Wu(t,()=>[])}else throw new Error("Root node must be an AstNode.");return new Wu(t,r=>DT(r,e),{includeRoot:!0})}function _F(t,e){if(!e)return!0;let r=t.$cstNode?.range;return r?RF(r,e):!1}function jd(t){return new al(()=>({keys:Object.keys(t),keyIndex:0,arrayIndex:0}),e=>{for(;e.keyIndex{"use strict";Oc();Ys();Bc();o(Sy,"linkContentToContainer");o(ef,"getContainerOfType");o(Uit,"hasContainerOfType");o(bs,"getDocument");o(Ay,"findRootNode");o(jS,"getReferenceNodes");o(DT,"streamContents");o(Pc,"streamAllContents");o(js,"streamAst");o(_F,"isAstNodeInRange");o(jd,"streamReferences");o(LF,"assignMandatoryProperties");o(Bye,"copyDefaultValue");o(DF,"copyAstNode")});var zT={};ur(zT,{AbstractElement:()=>No,AbstractParserRule:()=>LT,AbstractRule:()=>_y,AbstractType:()=>sl,Action:()=>Xd,Alternatives:()=>RT,ArrayLiteral:()=>KS,ArrayType:()=>QS,Assignment:()=>Kd,BooleanLiteral:()=>ZS,CharacterRange:()=>Qd,Condition:()=>Zd,Conjunction:()=>NT,CrossReference:()=>Jd,Disjunction:()=>IT,EndOfFile:()=>JS,Grammar:()=>tf,GrammarImport:()=>e6,Group:()=>lm,InferredType:()=>t6,InfixRule:()=>Uu,InfixRuleOperatorList:()=>MT,InfixRuleOperators:()=>r6,Interface:()=>Dy,Keyword:()=>Ly,LangiumGrammarAstReflection:()=>Oy,LangiumGrammarTerminals:()=>Hit,NamedArgument:()=>Ry,NegatedToken:()=>cm,Negation:()=>i6,NumberLiteral:()=>n6,Parameter:()=>Ny,ParameterReference:()=>a6,ParserRule:()=>Fc,ReferenceType:()=>OT,RegexToken:()=>um,ReturnType:()=>s6,RuleCall:()=>hm,SimpleType:()=>Iy,StringLiteral:()=>o6,TerminalAlternatives:()=>fm,TerminalElement:()=>Io,TerminalGroup:()=>dm,TerminalRule:()=>rf,TerminalRuleCall:()=>pm,Type:()=>PT,TypeAttribute:()=>mm,TypeDefinition:()=>gm,UnionType:()=>l6,UnorderedGroup:()=>BT,UntilToken:()=>ym,ValueLiteral:()=>vm,Wildcard:()=>My,isAbstractElement:()=>FT,isAbstractParserRule:()=>nf,isAbstractRule:()=>Yit,isAbstractType:()=>jit,isAction:()=>af,isAlternatives:()=>c6,isArrayLiteral:()=>Xit,isArrayType:()=>NF,isAssignment:()=>$c,isBooleanLiteral:()=>IF,isCharacterRange:()=>MF,isCondition:()=>Kit,isConjunction:()=>OF,isCrossReference:()=>zc,isDisjunction:()=>PF,isEndOfFile:()=>BF,isGrammar:()=>Qit,isGrammarImport:()=>Zit,isGroup:()=>ep,isInferredType:()=>$T,isInfixRule:()=>tp,isInfixRuleOperatorList:()=>Jit,isInfixRuleOperators:()=>ent,isInterface:()=>FF,isKeyword:()=>Hl,isNamedArgument:()=>tnt,isNegatedToken:()=>$F,isNegation:()=>zF,isNumberLiteral:()=>rnt,isParameter:()=>int,isParameterReference:()=>GF,isParserRule:()=>Ba,isReferenceType:()=>VF,isRegexToken:()=>qF,isReturnType:()=>WF,isRuleCall:()=>Gc,isSimpleType:()=>u6,isStringLiteral:()=>nnt,isTerminalAlternatives:()=>UF,isTerminalElement:()=>ant,isTerminalGroup:()=>HF,isTerminalRule:()=>Xs,isTerminalRuleCall:()=>h6,isType:()=>f6,isTypeAttribute:()=>snt,isTypeDefinition:()=>ont,isUnionType:()=>YF,isUnorderedGroup:()=>d6,isUntilToken:()=>jF,isValueLiteral:()=>lnt,isWildcard:()=>XF,reflection:()=>vr});function FT(t){return vr.isInstance(t,No.$type)}function nf(t){return vr.isInstance(t,LT.$type)}function Yit(t){return vr.isInstance(t,_y.$type)}function jit(t){return vr.isInstance(t,sl.$type)}function af(t){return vr.isInstance(t,Xd.$type)}function c6(t){return vr.isInstance(t,RT.$type)}function Xit(t){return vr.isInstance(t,KS.$type)}function NF(t){return vr.isInstance(t,QS.$type)}function $c(t){return vr.isInstance(t,Kd.$type)}function IF(t){return vr.isInstance(t,ZS.$type)}function MF(t){return vr.isInstance(t,Qd.$type)}function Kit(t){return vr.isInstance(t,Zd.$type)}function OF(t){return vr.isInstance(t,NT.$type)}function zc(t){return vr.isInstance(t,Jd.$type)}function PF(t){return vr.isInstance(t,IT.$type)}function BF(t){return vr.isInstance(t,JS.$type)}function Qit(t){return vr.isInstance(t,tf.$type)}function Zit(t){return vr.isInstance(t,e6.$type)}function ep(t){return vr.isInstance(t,lm.$type)}function $T(t){return vr.isInstance(t,t6.$type)}function tp(t){return vr.isInstance(t,Uu.$type)}function Jit(t){return vr.isInstance(t,MT.$type)}function ent(t){return vr.isInstance(t,r6.$type)}function FF(t){return vr.isInstance(t,Dy.$type)}function Hl(t){return vr.isInstance(t,Ly.$type)}function tnt(t){return vr.isInstance(t,Ry.$type)}function $F(t){return vr.isInstance(t,cm.$type)}function zF(t){return vr.isInstance(t,i6.$type)}function rnt(t){return vr.isInstance(t,n6.$type)}function int(t){return vr.isInstance(t,Ny.$type)}function GF(t){return vr.isInstance(t,a6.$type)}function Ba(t){return vr.isInstance(t,Fc.$type)}function VF(t){return vr.isInstance(t,OT.$type)}function qF(t){return vr.isInstance(t,um.$type)}function WF(t){return vr.isInstance(t,s6.$type)}function Gc(t){return vr.isInstance(t,hm.$type)}function u6(t){return vr.isInstance(t,Iy.$type)}function nnt(t){return vr.isInstance(t,o6.$type)}function UF(t){return vr.isInstance(t,fm.$type)}function ant(t){return vr.isInstance(t,Io.$type)}function HF(t){return vr.isInstance(t,dm.$type)}function Xs(t){return vr.isInstance(t,rf.$type)}function h6(t){return vr.isInstance(t,pm.$type)}function f6(t){return vr.isInstance(t,PT.$type)}function snt(t){return vr.isInstance(t,mm.$type)}function ont(t){return vr.isInstance(t,gm.$type)}function YF(t){return vr.isInstance(t,l6.$type)}function d6(t){return vr.isInstance(t,BT.$type)}function jF(t){return vr.isInstance(t,ym.$type)}function lnt(t){return vr.isInstance(t,vm.$type)}function XF(t){return vr.isInstance(t,My.$type)}var Hit,No,LT,_y,sl,Xd,RT,KS,QS,Kd,ZS,Qd,Zd,NT,Jd,IT,JS,tf,e6,lm,t6,Uu,MT,r6,Dy,Ly,Ry,cm,i6,n6,Ny,a6,Fc,OT,um,s6,hm,Iy,o6,fm,Io,dm,rf,pm,PT,mm,gm,l6,BT,ym,vm,My,Oy,vr,ol=P(()=>{"use strict";Oc();Hit={ID:/\^?[_a-zA-Z][\w_]*/,STRING:/"(\\.|[^"\\])*"|'(\\.|[^'\\])*'/,NUMBER:/NaN|-?((\d*\.\d+|\d+)([Ee][+-]?\d+)?|Infinity)/,RegexLiteral:/\/(?![*+?])(?:[^\r\n\[/\\]|\\.|\[(?:[^\r\n\]\\]|\\.)*\])+\/[a-z]*/,WS:/\s+/,ML_COMMENT:/\/\*[\s\S]*?\*\//,SL_COMMENT:/\/\/[^\n\r]*/},No={$type:"AbstractElement",cardinality:"cardinality"};o(FT,"isAbstractElement");LT={$type:"AbstractParserRule"};o(nf,"isAbstractParserRule");_y={$type:"AbstractRule"};o(Yit,"isAbstractRule");sl={$type:"AbstractType"};o(jit,"isAbstractType");Xd={$type:"Action",cardinality:"cardinality",feature:"feature",inferredType:"inferredType",operator:"operator",type:"type"};o(af,"isAction");RT={$type:"Alternatives",cardinality:"cardinality",elements:"elements"};o(c6,"isAlternatives");KS={$type:"ArrayLiteral",elements:"elements"};o(Xit,"isArrayLiteral");QS={$type:"ArrayType",elementType:"elementType"};o(NF,"isArrayType");Kd={$type:"Assignment",cardinality:"cardinality",feature:"feature",operator:"operator",predicate:"predicate",terminal:"terminal"};o($c,"isAssignment");ZS={$type:"BooleanLiteral",true:"true"};o(IF,"isBooleanLiteral");Qd={$type:"CharacterRange",cardinality:"cardinality",left:"left",lookahead:"lookahead",parenthesized:"parenthesized",right:"right"};o(MF,"isCharacterRange");Zd={$type:"Condition"};o(Kit,"isCondition");NT={$type:"Conjunction",left:"left",right:"right"};o(OF,"isConjunction");Jd={$type:"CrossReference",cardinality:"cardinality",deprecatedSyntax:"deprecatedSyntax",isMulti:"isMulti",terminal:"terminal",type:"type"};o(zc,"isCrossReference");IT={$type:"Disjunction",left:"left",right:"right"};o(PF,"isDisjunction");JS={$type:"EndOfFile",cardinality:"cardinality"};o(BF,"isEndOfFile");tf={$type:"Grammar",imports:"imports",interfaces:"interfaces",isDeclared:"isDeclared",name:"name",rules:"rules",types:"types"};o(Qit,"isGrammar");e6={$type:"GrammarImport",path:"path"};o(Zit,"isGrammarImport");lm={$type:"Group",cardinality:"cardinality",elements:"elements",guardCondition:"guardCondition",predicate:"predicate"};o(ep,"isGroup");t6={$type:"InferredType",name:"name"};o($T,"isInferredType");Uu={$type:"InfixRule",call:"call",dataType:"dataType",inferredType:"inferredType",name:"name",operators:"operators",parameters:"parameters",returnType:"returnType"};o(tp,"isInfixRule");MT={$type:"InfixRuleOperatorList",associativity:"associativity",operators:"operators"};o(Jit,"isInfixRuleOperatorList");r6={$type:"InfixRuleOperators",precedences:"precedences"};o(ent,"isInfixRuleOperators");Dy={$type:"Interface",attributes:"attributes",name:"name",superTypes:"superTypes"};o(FF,"isInterface");Ly={$type:"Keyword",cardinality:"cardinality",predicate:"predicate",value:"value"};o(Hl,"isKeyword");Ry={$type:"NamedArgument",calledByName:"calledByName",parameter:"parameter",value:"value"};o(tnt,"isNamedArgument");cm={$type:"NegatedToken",cardinality:"cardinality",lookahead:"lookahead",parenthesized:"parenthesized",terminal:"terminal"};o($F,"isNegatedToken");i6={$type:"Negation",value:"value"};o(zF,"isNegation");n6={$type:"NumberLiteral",value:"value"};o(rnt,"isNumberLiteral");Ny={$type:"Parameter",name:"name"};o(int,"isParameter");a6={$type:"ParameterReference",parameter:"parameter"};o(GF,"isParameterReference");Fc={$type:"ParserRule",dataType:"dataType",definition:"definition",entry:"entry",fragment:"fragment",inferredType:"inferredType",name:"name",parameters:"parameters",returnType:"returnType"};o(Ba,"isParserRule");OT={$type:"ReferenceType",isMulti:"isMulti",referenceType:"referenceType"};o(VF,"isReferenceType");um={$type:"RegexToken",cardinality:"cardinality",lookahead:"lookahead",parenthesized:"parenthesized",regex:"regex"};o(qF,"isRegexToken");s6={$type:"ReturnType",name:"name"};o(WF,"isReturnType");hm={$type:"RuleCall",arguments:"arguments",cardinality:"cardinality",predicate:"predicate",rule:"rule"};o(Gc,"isRuleCall");Iy={$type:"SimpleType",primitiveType:"primitiveType",stringType:"stringType",typeRef:"typeRef"};o(u6,"isSimpleType");o6={$type:"StringLiteral",value:"value"};o(nnt,"isStringLiteral");fm={$type:"TerminalAlternatives",cardinality:"cardinality",elements:"elements",lookahead:"lookahead",parenthesized:"parenthesized"};o(UF,"isTerminalAlternatives");Io={$type:"TerminalElement",cardinality:"cardinality",lookahead:"lookahead",parenthesized:"parenthesized"};o(ant,"isTerminalElement");dm={$type:"TerminalGroup",cardinality:"cardinality",elements:"elements",lookahead:"lookahead",parenthesized:"parenthesized"};o(HF,"isTerminalGroup");rf={$type:"TerminalRule",definition:"definition",fragment:"fragment",hidden:"hidden",name:"name",type:"type"};o(Xs,"isTerminalRule");pm={$type:"TerminalRuleCall",cardinality:"cardinality",lookahead:"lookahead",parenthesized:"parenthesized",rule:"rule"};o(h6,"isTerminalRuleCall");PT={$type:"Type",name:"name",type:"type"};o(f6,"isType");mm={$type:"TypeAttribute",defaultValue:"defaultValue",isOptional:"isOptional",name:"name",type:"type"};o(snt,"isTypeAttribute");gm={$type:"TypeDefinition"};o(ont,"isTypeDefinition");l6={$type:"UnionType",types:"types"};o(YF,"isUnionType");BT={$type:"UnorderedGroup",cardinality:"cardinality",elements:"elements"};o(d6,"isUnorderedGroup");ym={$type:"UntilToken",cardinality:"cardinality",lookahead:"lookahead",parenthesized:"parenthesized",terminal:"terminal"};o(jF,"isUntilToken");vm={$type:"ValueLiteral"};o(lnt,"isValueLiteral");My={$type:"Wildcard",cardinality:"cardinality",lookahead:"lookahead",parenthesized:"parenthesized"};o(XF,"isWildcard");Oy=class extends sm{static{o(this,"LangiumGrammarAstReflection")}constructor(){super(...arguments),this.types={AbstractElement:{name:No.$type,properties:{cardinality:{name:No.cardinality}},superTypes:[]},AbstractParserRule:{name:LT.$type,properties:{},superTypes:[_y.$type,sl.$type]},AbstractRule:{name:_y.$type,properties:{},superTypes:[]},AbstractType:{name:sl.$type,properties:{},superTypes:[]},Action:{name:Xd.$type,properties:{cardinality:{name:Xd.cardinality},feature:{name:Xd.feature},inferredType:{name:Xd.inferredType},operator:{name:Xd.operator},type:{name:Xd.type,referenceType:sl.$type}},superTypes:[No.$type]},Alternatives:{name:RT.$type,properties:{cardinality:{name:RT.cardinality},elements:{name:RT.elements,defaultValue:[]}},superTypes:[No.$type]},ArrayLiteral:{name:KS.$type,properties:{elements:{name:KS.elements,defaultValue:[]}},superTypes:[vm.$type]},ArrayType:{name:QS.$type,properties:{elementType:{name:QS.elementType}},superTypes:[gm.$type]},Assignment:{name:Kd.$type,properties:{cardinality:{name:Kd.cardinality},feature:{name:Kd.feature},operator:{name:Kd.operator},predicate:{name:Kd.predicate},terminal:{name:Kd.terminal}},superTypes:[No.$type]},BooleanLiteral:{name:ZS.$type,properties:{true:{name:ZS.true,defaultValue:!1}},superTypes:[Zd.$type,vm.$type]},CharacterRange:{name:Qd.$type,properties:{cardinality:{name:Qd.cardinality},left:{name:Qd.left},lookahead:{name:Qd.lookahead},parenthesized:{name:Qd.parenthesized,defaultValue:!1},right:{name:Qd.right}},superTypes:[Io.$type]},Condition:{name:Zd.$type,properties:{},superTypes:[]},Conjunction:{name:NT.$type,properties:{left:{name:NT.left},right:{name:NT.right}},superTypes:[Zd.$type]},CrossReference:{name:Jd.$type,properties:{cardinality:{name:Jd.cardinality},deprecatedSyntax:{name:Jd.deprecatedSyntax,defaultValue:!1},isMulti:{name:Jd.isMulti,defaultValue:!1},terminal:{name:Jd.terminal},type:{name:Jd.type,referenceType:sl.$type}},superTypes:[No.$type]},Disjunction:{name:IT.$type,properties:{left:{name:IT.left},right:{name:IT.right}},superTypes:[Zd.$type]},EndOfFile:{name:JS.$type,properties:{cardinality:{name:JS.cardinality}},superTypes:[No.$type]},Grammar:{name:tf.$type,properties:{imports:{name:tf.imports,defaultValue:[]},interfaces:{name:tf.interfaces,defaultValue:[]},isDeclared:{name:tf.isDeclared,defaultValue:!1},name:{name:tf.name},rules:{name:tf.rules,defaultValue:[]},types:{name:tf.types,defaultValue:[]}},superTypes:[]},GrammarImport:{name:e6.$type,properties:{path:{name:e6.path}},superTypes:[]},Group:{name:lm.$type,properties:{cardinality:{name:lm.cardinality},elements:{name:lm.elements,defaultValue:[]},guardCondition:{name:lm.guardCondition},predicate:{name:lm.predicate}},superTypes:[No.$type]},InferredType:{name:t6.$type,properties:{name:{name:t6.name}},superTypes:[sl.$type]},InfixRule:{name:Uu.$type,properties:{call:{name:Uu.call},dataType:{name:Uu.dataType},inferredType:{name:Uu.inferredType},name:{name:Uu.name},operators:{name:Uu.operators},parameters:{name:Uu.parameters,defaultValue:[]},returnType:{name:Uu.returnType,referenceType:sl.$type}},superTypes:[LT.$type]},InfixRuleOperatorList:{name:MT.$type,properties:{associativity:{name:MT.associativity},operators:{name:MT.operators,defaultValue:[]}},superTypes:[]},InfixRuleOperators:{name:r6.$type,properties:{precedences:{name:r6.precedences,defaultValue:[]}},superTypes:[]},Interface:{name:Dy.$type,properties:{attributes:{name:Dy.attributes,defaultValue:[]},name:{name:Dy.name},superTypes:{name:Dy.superTypes,defaultValue:[],referenceType:sl.$type}},superTypes:[sl.$type]},Keyword:{name:Ly.$type,properties:{cardinality:{name:Ly.cardinality},predicate:{name:Ly.predicate},value:{name:Ly.value}},superTypes:[No.$type]},NamedArgument:{name:Ry.$type,properties:{calledByName:{name:Ry.calledByName,defaultValue:!1},parameter:{name:Ry.parameter,referenceType:Ny.$type},value:{name:Ry.value}},superTypes:[]},NegatedToken:{name:cm.$type,properties:{cardinality:{name:cm.cardinality},lookahead:{name:cm.lookahead},parenthesized:{name:cm.parenthesized,defaultValue:!1},terminal:{name:cm.terminal}},superTypes:[Io.$type]},Negation:{name:i6.$type,properties:{value:{name:i6.value}},superTypes:[Zd.$type]},NumberLiteral:{name:n6.$type,properties:{value:{name:n6.value}},superTypes:[vm.$type]},Parameter:{name:Ny.$type,properties:{name:{name:Ny.name}},superTypes:[]},ParameterReference:{name:a6.$type,properties:{parameter:{name:a6.parameter,referenceType:Ny.$type}},superTypes:[Zd.$type]},ParserRule:{name:Fc.$type,properties:{dataType:{name:Fc.dataType},definition:{name:Fc.definition},entry:{name:Fc.entry,defaultValue:!1},fragment:{name:Fc.fragment,defaultValue:!1},inferredType:{name:Fc.inferredType},name:{name:Fc.name},parameters:{name:Fc.parameters,defaultValue:[]},returnType:{name:Fc.returnType,referenceType:sl.$type}},superTypes:[LT.$type]},ReferenceType:{name:OT.$type,properties:{isMulti:{name:OT.isMulti,defaultValue:!1},referenceType:{name:OT.referenceType}},superTypes:[gm.$type]},RegexToken:{name:um.$type,properties:{cardinality:{name:um.cardinality},lookahead:{name:um.lookahead},parenthesized:{name:um.parenthesized,defaultValue:!1},regex:{name:um.regex}},superTypes:[Io.$type]},ReturnType:{name:s6.$type,properties:{name:{name:s6.name}},superTypes:[]},RuleCall:{name:hm.$type,properties:{arguments:{name:hm.arguments,defaultValue:[]},cardinality:{name:hm.cardinality},predicate:{name:hm.predicate},rule:{name:hm.rule,referenceType:_y.$type}},superTypes:[No.$type]},SimpleType:{name:Iy.$type,properties:{primitiveType:{name:Iy.primitiveType},stringType:{name:Iy.stringType},typeRef:{name:Iy.typeRef,referenceType:sl.$type}},superTypes:[gm.$type]},StringLiteral:{name:o6.$type,properties:{value:{name:o6.value}},superTypes:[vm.$type]},TerminalAlternatives:{name:fm.$type,properties:{cardinality:{name:fm.cardinality},elements:{name:fm.elements,defaultValue:[]},lookahead:{name:fm.lookahead},parenthesized:{name:fm.parenthesized,defaultValue:!1}},superTypes:[Io.$type]},TerminalElement:{name:Io.$type,properties:{cardinality:{name:Io.cardinality},lookahead:{name:Io.lookahead},parenthesized:{name:Io.parenthesized,defaultValue:!1}},superTypes:[No.$type]},TerminalGroup:{name:dm.$type,properties:{cardinality:{name:dm.cardinality},elements:{name:dm.elements,defaultValue:[]},lookahead:{name:dm.lookahead},parenthesized:{name:dm.parenthesized,defaultValue:!1}},superTypes:[Io.$type]},TerminalRule:{name:rf.$type,properties:{definition:{name:rf.definition},fragment:{name:rf.fragment,defaultValue:!1},hidden:{name:rf.hidden,defaultValue:!1},name:{name:rf.name},type:{name:rf.type}},superTypes:[_y.$type]},TerminalRuleCall:{name:pm.$type,properties:{cardinality:{name:pm.cardinality},lookahead:{name:pm.lookahead},parenthesized:{name:pm.parenthesized,defaultValue:!1},rule:{name:pm.rule,referenceType:rf.$type}},superTypes:[Io.$type]},Type:{name:PT.$type,properties:{name:{name:PT.name},type:{name:PT.type}},superTypes:[sl.$type]},TypeAttribute:{name:mm.$type,properties:{defaultValue:{name:mm.defaultValue},isOptional:{name:mm.isOptional,defaultValue:!1},name:{name:mm.name},type:{name:mm.type}},superTypes:[]},TypeDefinition:{name:gm.$type,properties:{},superTypes:[]},UnionType:{name:l6.$type,properties:{types:{name:l6.types,defaultValue:[]}},superTypes:[gm.$type]},UnorderedGroup:{name:BT.$type,properties:{cardinality:{name:BT.cardinality},elements:{name:BT.elements,defaultValue:[]}},superTypes:[No.$type]},UntilToken:{name:ym.$type,properties:{cardinality:{name:ym.cardinality},lookahead:{name:ym.lookahead},parenthesized:{name:ym.parenthesized,defaultValue:!1},terminal:{name:ym.terminal}},superTypes:[Io.$type]},ValueLiteral:{name:vm.$type,properties:{},superTypes:[]},Wildcard:{name:My.$type,properties:{cardinality:{name:My.cardinality},lookahead:{name:My.lookahead},parenthesized:{name:My.parenthesized,defaultValue:!1}},superTypes:[Io.$type]}}}},vr=new Oy});var m6={};ur(m6,{DefaultNameRegexp:()=>p6,RangeComparison:()=>Hu,compareRange:()=>$ye,findCommentNode:()=>ZF,findDeclarationNodeAtOffset:()=>hnt,findLeafNodeAtOffset:()=>JF,findLeafNodeBeforeOffset:()=>zye,flattenCst:()=>unt,getDatatypeNode:()=>cnt,getInteriorNodes:()=>pnt,getNextNode:()=>fnt,getPreviousNode:()=>Vye,getStartlineNode:()=>dnt,inRange:()=>RF,isChildNode:()=>QF,isCommentNode:()=>KF,streamCst:()=>xm,toDocumentSegment:()=>bm,tokenToRange:()=>Py});function cnt(t){let e=t,r=!1;for(;e;){let i=ef(e.grammarSource,Ba);if(i&&i.dataType)e=e.container,r=!0;else return r?e:void 0}}function xm(t){return new Wu(t,e=>Mc(e)?e.content:[],{includeRoot:!0})}function unt(t){return xm(t).filter(Hd)}function QF(t,e){for(;t.container;)if(t=t.container,t===e)return!0;return!1}function Py(t){return{start:{character:t.startColumn-1,line:t.startLine-1},end:{character:t.endColumn,line:t.endLine-1}}}function bm(t){if(!t)return;let{offset:e,end:r,range:i}=t;return{range:i,offset:e,end:r,length:r-e}}function $ye(t,e){if(t.end.linee.end.line||t.start.line===e.end.line&&t.start.character>=e.end.character)return Hu.After;let r=t.start.line>e.start.line||t.start.line===e.start.line&&t.start.character>=e.start.character,i=t.end.lineHu.After}function hnt(t,e,r=p6){if(t){if(e>0){let i=e-t.offset,n=t.text.charAt(i);r.test(n)||e--}return JF(t,e)}}function ZF(t,e){if(t){let r=Vye(t,!0);if(r&&KF(r,e))return r;if(_T(t)){let i=t.content.findIndex(n=>!n.hidden);for(let n=i-1;n>=0;n--){let a=t.content[n];if(KF(a,e))return a}}}}function KF(t,e){return Hd(t)&&e.includes(t.tokenType.name)}function JF(t,e){if(Hd(t))return t;if(Mc(t)){let r=Gye(t,e,!1);if(r)return JF(r,e)}}function zye(t,e){if(Hd(t))return t;if(Mc(t)){let r=Gye(t,e,!0);if(r)return zye(r,e)}}function Gye(t,e,r){let i=0,n=t.content.length-1,a;for(;i<=n;){let s=Math.floor((i+n)/2),l=t.content[s];if(l.offset<=e&&l.end>e)return l;l.end<=e?(a=r?l:void 0,i=s+1):n=s-1}return a}function Vye(t,e=!0){for(;t.container;){let r=t.container,i=r.content.indexOf(t);for(;i>0;){i--;let n=r.content[i];if(e||!n.hidden)return n}t=r}}function fnt(t,e=!0){for(;t.container;){let r=t.container,i=r.content.indexOf(t),n=r.content.length-1;for(;i{"use strict";Oc();Ys();Ts();ol();o(cnt,"getDatatypeNode");o(xm,"streamCst");o(unt,"flattenCst");o(QF,"isChildNode");o(Py,"tokenToRange");o(bm,"toDocumentSegment");(function(t){t[t.Before=0]="Before",t[t.After=1]="After",t[t.OverlapFront=2]="OverlapFront",t[t.OverlapBack=3]="OverlapBack",t[t.Inside=4]="Inside",t[t.Outside=5]="Outside"})(Hu||(Hu={}));o($ye,"compareRange");o(RF,"inRange");p6=/^[\w\p{L}]$/u;o(hnt,"findDeclarationNodeAtOffset");o(ZF,"findCommentNode");o(KF,"isCommentNode");o(JF,"findLeafNodeAtOffset");o(zye,"findLeafNodeBeforeOffset");o(Gye,"binarySearch");o(Vye,"getPreviousNode");o(fnt,"getNextNode");o(dnt,"getStartlineNode");o(pnt,"getInteriorNodes");o(mnt,"getCommonParent");o(Fye,"getParentChain")});function Yu(t,e="Error: Got unexpected value."){throw new Error(e)}function qye(t,e="Error: Condition is violated."){if(!t)throw new Error(e)}var Tm,g6=P(()=>{"use strict";Tm=class extends Error{static{o(this,"ErrorWithLocation")}constructor(e,r){super(e?`${r} at ${e.range.start.line}:${e.range.start.character}`:r)}};o(Yu,"assertUnreachable");o(qye,"assertCondition")});function br(t){return t.charCodeAt(0)}function y6(t,e){Array.isArray(t)?t.forEach(function(r){e.push(r)}):e.push(t)}function By(t,e){if(t[e]===!0)throw"duplicate flag "+e;let r=t[e];t[e]=!0}function km(t){if(t===void 0)throw Error("Internal Error - Should never get here!");return!0}function GT(){throw Error("Internal Error - Should never get here!")}function e$(t){return t.type==="Character"}var t$=P(()=>{"use strict";o(br,"cc");o(y6,"insertToSet");o(By,"addFlag");o(km,"ASSERT_EXISTS");o(GT,"ASSERT_NEVER_REACH_HERE");o(e$,"isCharacter")});var VT,qT,r$,Wye=P(()=>{"use strict";t$();VT=[];for(let t=br("0");t<=br("9");t++)VT.push(t);qT=[br("_")].concat(VT);for(let t=br("a");t<=br("z");t++)qT.push(t);for(let t=br("A");t<=br("Z");t++)qT.push(t);r$=[br(" "),br("\f"),br(` +`),br("\r"),br(" "),br("\v"),br(" "),br("\xA0"),br("\u1680"),br("\u2000"),br("\u2001"),br("\u2002"),br("\u2003"),br("\u2004"),br("\u2005"),br("\u2006"),br("\u2007"),br("\u2008"),br("\u2009"),br("\u200A"),br("\u2028"),br("\u2029"),br("\u202F"),br("\u205F"),br("\u3000"),br("\uFEFF")]});var gnt,v6,ynt,Cm,Uye=P(()=>{"use strict";t$();Wye();gnt=/[0-9a-fA-F]/,v6=/[0-9]/,ynt=/[1-9]/,Cm=class{static{o(this,"RegExpParser")}constructor(){this.idx=0,this.input="",this.groupIdx=0}saveState(){return{idx:this.idx,input:this.input,groupIdx:this.groupIdx}}restoreState(e){this.idx=e.idx,this.input=e.input,this.groupIdx=e.groupIdx}pattern(e){this.idx=0,this.input=e,this.groupIdx=0,this.consumeChar("/");let r=this.disjunction();this.consumeChar("/");let i={type:"Flags",loc:{begin:this.idx,end:e.length},global:!1,ignoreCase:!1,multiLine:!1,unicode:!1,sticky:!1};for(;this.isRegExpFlag();)switch(this.popChar()){case"g":By(i,"global");break;case"i":By(i,"ignoreCase");break;case"m":By(i,"multiLine");break;case"u":By(i,"unicode");break;case"y":By(i,"sticky");break}if(this.idx!==this.input.length)throw Error("Redundant input: "+this.input.substring(this.idx));return{type:"Pattern",flags:i,value:r,loc:this.loc(0)}}disjunction(){let e=[],r=this.idx;for(e.push(this.alternative());this.peekChar()==="|";)this.consumeChar("|"),e.push(this.alternative());return{type:"Disjunction",value:e,loc:this.loc(r)}}alternative(){let e=[],r=this.idx;for(;this.isTerm();)e.push(this.term());return{type:"Alternative",value:e,loc:this.loc(r)}}term(){return this.isAssertion()?this.assertion():this.atom()}assertion(){let e=this.idx;switch(this.popChar()){case"^":return{type:"StartAnchor",loc:this.loc(e)};case"$":return{type:"EndAnchor",loc:this.loc(e)};case"\\":switch(this.popChar()){case"b":return{type:"WordBoundary",loc:this.loc(e)};case"B":return{type:"NonWordBoundary",loc:this.loc(e)}}throw Error("Invalid Assertion Escape");case"(":this.consumeChar("?");let r;switch(this.popChar()){case"=":r="Lookahead";break;case"!":r="NegativeLookahead";break;case"<":{switch(this.popChar()){case"=":r="Lookbehind";break;case"!":r="NegativeLookbehind"}break}}km(r);let i=this.disjunction();return this.consumeChar(")"),{type:r,value:i,loc:this.loc(e)}}return GT()}quantifier(e=!1){let r,i=this.idx;switch(this.popChar()){case"*":r={atLeast:0,atMost:1/0};break;case"+":r={atLeast:1,atMost:1/0};break;case"?":r={atLeast:0,atMost:1};break;case"{":let n=this.integerIncludingZero();switch(this.popChar()){case"}":r={atLeast:n,atMost:n};break;case",":let a;this.isDigit()?(a=this.integerIncludingZero(),r={atLeast:n,atMost:a}):r={atLeast:n,atMost:1/0},this.consumeChar("}");break}if(e===!0&&r===void 0)return;km(r);break}if(!(e===!0&&r===void 0)&&km(r))return this.peekChar(0)==="?"?(this.consumeChar("?"),r.greedy=!1):r.greedy=!0,r.type="Quantifier",r.loc=this.loc(i),r}atom(){let e,r=this.idx;switch(this.peekChar()){case".":e=this.dotAll();break;case"\\":e=this.atomEscape();break;case"[":e=this.characterClass();break;case"(":e=this.group();break}return e===void 0&&this.isPatternCharacter()&&(e=this.patternCharacter()),km(e)?(e.loc=this.loc(r),this.isQuantifier()&&(e.quantifier=this.quantifier()),e):GT()}dotAll(){return this.consumeChar("."),{type:"Set",complement:!0,value:[br(` +`),br("\r"),br("\u2028"),br("\u2029")]}}atomEscape(){switch(this.consumeChar("\\"),this.peekChar()){case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":return this.decimalEscapeAtom();case"d":case"D":case"s":case"S":case"w":case"W":return this.characterClassEscape();case"f":case"n":case"r":case"t":case"v":return this.controlEscapeAtom();case"c":return this.controlLetterEscapeAtom();case"0":return this.nulCharacterAtom();case"x":return this.hexEscapeSequenceAtom();case"u":return this.regExpUnicodeEscapeSequenceAtom();default:return this.identityEscapeAtom()}}decimalEscapeAtom(){return{type:"GroupBackReference",value:this.positiveInteger()}}characterClassEscape(){let e,r=!1;switch(this.popChar()){case"d":e=VT;break;case"D":e=VT,r=!0;break;case"s":e=r$;break;case"S":e=r$,r=!0;break;case"w":e=qT;break;case"W":e=qT,r=!0;break}return km(e)?{type:"Set",value:e,complement:r}:GT()}controlEscapeAtom(){let e;switch(this.popChar()){case"f":e=br("\f");break;case"n":e=br(` +`);break;case"r":e=br("\r");break;case"t":e=br(" ");break;case"v":e=br("\v");break}return km(e)?{type:"Character",value:e}:GT()}controlLetterEscapeAtom(){this.consumeChar("c");let e=this.popChar();if(/[a-zA-Z]/.test(e)===!1)throw Error("Invalid ");return{type:"Character",value:e.toUpperCase().charCodeAt(0)-64}}nulCharacterAtom(){return this.consumeChar("0"),{type:"Character",value:br("\0")}}hexEscapeSequenceAtom(){return this.consumeChar("x"),this.parseHexDigits(2)}regExpUnicodeEscapeSequenceAtom(){return this.consumeChar("u"),this.parseHexDigits(4)}identityEscapeAtom(){let e=this.popChar();return{type:"Character",value:br(e)}}classPatternCharacterAtom(){switch(this.peekChar()){case` +`:case"\r":case"\u2028":case"\u2029":case"\\":case"]":throw Error("TBD");default:let e=this.popChar();return{type:"Character",value:br(e)}}}characterClass(){let e=[],r=!1;for(this.consumeChar("["),this.peekChar(0)==="^"&&(this.consumeChar("^"),r=!0);this.isClassAtom();){let i=this.classAtom(),n=i.type==="Character";if(e$(i)&&this.isRangeDash()){this.consumeChar("-");let a=this.classAtom(),s=a.type==="Character";if(e$(a)){if(a.value=this.input.length)throw Error("Unexpected end of input");this.idx++}loc(e){return{begin:e,end:this.idx}}}});var ju,Hye=P(()=>{"use strict";ju=class{static{o(this,"BaseRegExpVisitor")}visitChildren(e){for(let r in e){let i=e[r];e.hasOwnProperty(r)&&(i.type!==void 0?this.visit(i):Array.isArray(i)&&i.forEach(n=>{this.visit(n)},this))}}visit(e){switch(e.type){case"Pattern":this.visitPattern(e);break;case"Flags":this.visitFlags(e);break;case"Disjunction":this.visitDisjunction(e);break;case"Alternative":this.visitAlternative(e);break;case"StartAnchor":this.visitStartAnchor(e);break;case"EndAnchor":this.visitEndAnchor(e);break;case"WordBoundary":this.visitWordBoundary(e);break;case"NonWordBoundary":this.visitNonWordBoundary(e);break;case"Lookahead":this.visitLookahead(e);break;case"NegativeLookahead":this.visitNegativeLookahead(e);break;case"Lookbehind":this.visitLookbehind(e);break;case"NegativeLookbehind":this.visitNegativeLookbehind(e);break;case"Character":this.visitCharacter(e);break;case"Set":this.visitSet(e);break;case"Group":this.visitGroup(e);break;case"GroupBackReference":this.visitGroupBackReference(e);break;case"Quantifier":this.visitQuantifier(e);break}this.visitChildren(e)}visitPattern(e){}visitFlags(e){}visitDisjunction(e){}visitAlternative(e){}visitStartAnchor(e){}visitEndAnchor(e){}visitWordBoundary(e){}visitNonWordBoundary(e){}visitLookahead(e){}visitNegativeLookahead(e){}visitLookbehind(e){}visitNegativeLookbehind(e){}visitCharacter(e){}visitSet(e){}visitGroup(e){}visitGroupBackReference(e){}visitQuantifier(e){}}});var WT=P(()=>{"use strict";Uye();Hye()});var x6={};ur(x6,{NEWLINE_REGEXP:()=>n$,escapeRegExp:()=>rp,getTerminalParts:()=>vnt,isMultilineComment:()=>a$,isWhitespace:()=>UT,partialMatches:()=>s$,partialRegExp:()=>Xye,whitespaceCharacters:()=>jye});function vnt(t){try{typeof t!="string"&&(t=t.source),t=`/${t}/`;let e=Yye.pattern(t),r=[];for(let i of e.value.value)wm.reset(t),wm.visit(i),r.push({start:wm.startRegexp,end:wm.endRegex});return r}catch{return[]}}function a$(t){try{return typeof t=="string"&&(t=new RegExp(t)),t=t.toString(),wm.reset(t),wm.visit(Yye.pattern(t)),wm.multiline}catch{return!1}}function UT(t){let e=typeof t=="string"?new RegExp(t):t;return jye.some(r=>e.test(r))}function rp(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function s$(t,e){let r=Xye(t),i=e.match(r);return!!i&&i[0].length>0}function Xye(t){typeof t=="string"&&(t=new RegExp(t));let e=t,r=t.source,i=0;function n(){let a="",s;function l(h){a+=r.substr(i,h),i+=h}o(l,"appendRaw");function u(h){a+="(?:"+r.substr(i,h)+"|$)",i+=h}for(o(u,"appendOptional");i",i)-i+1);break;default:u(2);break}break;case"[":s=/\[(?:\\.|.)*?\]/g,s.lastIndex=i,s=s.exec(r)||[],u(s[0].length);break;case"|":case"^":case"$":case"*":case"+":case"?":l(1);break;case"{":s=/\{\d+,?\d*\}/g,s.lastIndex=i,s=s.exec(r),s?l(s[0].length):u(1);break;case"(":if(r[i+1]==="?")switch(r[i+2]){case":":a+="(?:",i+=3,a+=n()+"|$)";break;case"=":a+="(?=",i+=3,a+=n()+")";break;case"!":s=i,i+=3,n(),a+=r.substr(s,i-s);break;case"<":switch(r[i+3]){case"=":case"!":s=i,i+=4,n(),a+=r.substr(s,i-s);break;default:l(r.indexOf(">",i)-i+1),a+=n()+"|$)";break}break}else l(1),a+=n()+"|$)";break;case")":return++i,a;default:u(1);break}return a}return o(n,"process"),new RegExp(n(),t.flags)}var n$,Yye,i$,wm,jye,Fy=P(()=>{"use strict";WT();n$=/\r?\n/gm,Yye=new Cm,i$=class extends ju{static{o(this,"TerminalRegExpVisitor")}constructor(){super(...arguments),this.isStarting=!0,this.endRegexpStack=[],this.multiline=!1}get endRegex(){return this.endRegexpStack.join("")}reset(e){this.multiline=!1,this.regex=e,this.startRegexp="",this.isStarting=!0,this.endRegexpStack=[]}visitGroup(e){e.quantifier&&(this.isStarting=!1,this.endRegexpStack=[])}visitCharacter(e){let r=String.fromCharCode(e.value);if(!this.multiline&&r===` +`&&(this.multiline=!0),e.quantifier)this.isStarting=!1,this.endRegexpStack=[];else{let i=rp(r);this.endRegexpStack.push(i),this.isStarting&&(this.startRegexp+=i)}}visitSet(e){if(!this.multiline){let r=this.regex.substring(e.loc.begin,e.loc.end),i=new RegExp(r);this.multiline=!!` +`.match(i)}if(e.quantifier)this.isStarting=!1,this.endRegexpStack=[];else{let r=this.regex.substring(e.loc.begin,e.loc.end);this.endRegexpStack.push(r),this.isStarting&&(this.startRegexp+=r)}}visitChildren(e){e.type==="Group"&&e.quantifier||super.visitChildren(e)}},wm=new i$;o(vnt,"getTerminalParts");o(a$,"isMultilineComment");jye=`\f +\r \v \xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF`.split("");o(UT,"isWhitespace");o(rp,"escapeRegExp");o(s$,"partialMatches");o(Xye,"partialRegExp")});var k6={};ur(k6,{findAssignment:()=>m$,findNameAssignment:()=>b6,findNodeForKeyword:()=>d$,findNodeForProperty:()=>YT,findNodesForKeyword:()=>bnt,findNodesForKeywordInternal:()=>p$,findNodesForProperty:()=>h$,getActionAtElement:()=>eve,getActionType:()=>rve,getAllReachableRules:()=>HT,getAllRulesUsedForCrossReferences:()=>xnt,getCrossReferenceTerminal:()=>c$,getEntryRule:()=>Kye,getExplicitRuleType:()=>T6,getHiddenRules:()=>Qye,getRuleType:()=>g$,getRuleTypeName:()=>Ent,getTypeName:()=>ip,isArrayCardinality:()=>knt,isArrayOperator:()=>Cnt,isCommentTerminal:()=>u$,isDataType:()=>wnt,isDataTypeRule:()=>jT,isOptionalCardinality:()=>Tnt,terminalRegex:()=>$y});function Kye(t){return t.rules.find(e=>Ba(e)&&e.entry)}function Qye(t){return t.rules.filter(e=>Xs(e)&&e.hidden)}function HT(t,e){let r=new Set,i=Kye(t);if(!i)return new Set(t.rules);let n=[i].concat(Qye(t));for(let s of n)Zye(s,r,e);let a=new Set;for(let s of t.rules)(r.has(s.name)||Xs(s)&&s.hidden)&&a.add(s);return a}function Zye(t,e,r){e.add(t.name),Pc(t).forEach(i=>{if(Gc(i)||r&&h6(i)){let n=i.rule.ref;n&&!e.has(n.name)&&Zye(n,e,r)}})}function xnt(t){let e=new Set;return Pc(t).forEach(r=>{zc(r)&&(Ba(r.type.ref)&&e.add(r.type.ref),$T(r.type.ref)&&Ba(r.type.ref.$container)&&e.add(r.type.ref.$container))}),e}function c$(t){if(t.terminal)return t.terminal;if(t.type.ref)return b6(t.type.ref)?.terminal}function u$(t){return t.hidden&&!UT($y(t))}function h$(t,e){return!t||!e?[]:f$(t,e,t.astNode,!0)}function YT(t,e,r){if(!t||!e)return;let i=f$(t,e,t.astNode,!0);if(i.length!==0)return r!==void 0?r=Math.max(0,Math.min(r,i.length-1)):r=0,i[r]}function f$(t,e,r,i){if(!i){let n=ef(t.grammarSource,$c);if(n&&n.feature===e)return[t]}return Mc(t)&&t.astNode===r?t.content.flatMap(n=>f$(n,e,r,!1)):[]}function bnt(t,e){return t?p$(t,e,t?.astNode):[]}function d$(t,e,r){if(!t)return;let i=p$(t,e,t?.astNode);if(i.length!==0)return r!==void 0?r=Math.max(0,Math.min(r,i.length-1)):r=0,i[r]}function p$(t,e,r){if(t.astNode!==r)return[];if(Hl(t.grammarSource)&&t.grammarSource.value===e)return[t];let i=xm(t).iterator(),n,a=[];do if(n=i.next(),!n.done){let s=n.value;s.astNode===r?Hl(s.grammarSource)&&s.grammarSource.value===e&&a.push(s):i.prune()}while(!n.done);return a}function m$(t){let e=t.astNode;for(;e===t.container?.astNode;){let r=ef(t.grammarSource,$c);if(r)return r;t=t.container}}function b6(t){let e=t;return $T(e)&&(af(e.$container)?e=e.$container.$container:nf(e.$container)?e=e.$container:Yu(e.$container)),Jye(t,e,new Map)}function Jye(t,e,r){function i(n,a){let s;return ef(n,$c)||(s=Jye(a,a,r)),r.set(t,s),s}if(o(i,"go"),r.has(t))return r.get(t);r.set(t,void 0);for(let n of Pc(e)){if($c(n)&&n.feature.toLowerCase()==="name")return r.set(t,n),n;if(Gc(n)&&Ba(n.rule.ref))return i(n,n.rule.ref);if(u6(n)&&n.typeRef?.ref)return i(n,n.typeRef.ref)}}function eve(t){let e=t.$container;if(ep(e)){let r=e.elements,i=r.indexOf(t);for(let n=i-1;n>=0;n--){let a=r[n];if(af(a))return a;{let s=Pc(r[n]).find(af);if(s)return s}}}if(FT(e))return eve(e)}function Tnt(t,e){return t==="?"||t==="*"||ep(e)&&!!e.guardCondition}function knt(t){return t==="*"||t==="+"}function Cnt(t){return t==="+="}function jT(t){return tve(t,new Set)}function tve(t,e){if(e.has(t))return!0;e.add(t);for(let r of Pc(t))if(Gc(r)){if(!r.rule.ref||Ba(r.rule.ref)&&!tve(r.rule.ref,e)||tp(r.rule.ref))return!1}else{if($c(r))return!1;if(af(r))return!1}return!!t.definition}function wnt(t){return l$(t.type,new Set)}function l$(t,e){if(e.has(t))return!0;if(e.add(t),NF(t))return!1;if(VF(t))return!1;if(YF(t))return t.types.every(r=>l$(r,e));if(u6(t)){if(t.primitiveType!==void 0)return!0;if(t.stringType!==void 0)return!0;if(t.typeRef!==void 0){let r=t.typeRef.ref;return f6(r)?l$(r.type,e):!1}else return!1}else return!1}function T6(t){if(!Xs(t)){if(t.inferredType)return t.inferredType.name;if(t.dataType)return t.dataType;if(t.returnType){let e=t.returnType.ref;if(e)return e.name}}}function ip(t){if(nf(t))return Ba(t)&&jT(t)?t.name:T6(t)??t.name;if(FF(t)||f6(t)||WF(t))return t.name;if(af(t)){let e=rve(t);if(e)return e}else if($T(t))return t.name;throw new Error("Cannot get name of Unknown Type")}function rve(t){if(t.inferredType)return t.inferredType.name;if(t.type?.ref)return ip(t.type.ref)}function Ent(t){return Xs(t)?t.type?.name??"string":Ba(t)&&jT(t)?t.name:T6(t)??t.name}function g$(t){return Xs(t)?t.type?.name??"string":T6(t)??t.name}function $y(t){let e={s:!1,i:!1,u:!1},r=zy(t.definition,e),i=Object.entries(e).filter(([,n])=>n).map(([n])=>n).join("");return new RegExp(r,i)}function zy(t,e){if(UF(t))return Snt(t);if(HF(t))return Ant(t);if(MF(t))return Lnt(t);if(h6(t)){let r=t.rule.ref;if(!r)throw new Error("Missing rule reference.");return sf(zy(r.definition),{cardinality:t.cardinality,lookahead:t.lookahead,parenthesized:t.parenthesized})}else{if($F(t))return Dnt(t);if(jF(t))return _nt(t);if(qF(t)){let r=t.regex.lastIndexOf("/"),i=t.regex.substring(1,r),n=t.regex.substring(r+1);return e&&(e.i=n.includes("i"),e.s=n.includes("s"),e.u=n.includes("u")),sf(i,{cardinality:t.cardinality,lookahead:t.lookahead,parenthesized:t.parenthesized,wrap:!1})}else{if(XF(t))return sf(y$,{cardinality:t.cardinality,lookahead:t.lookahead,parenthesized:t.parenthesized});throw new Error(`Invalid terminal element: ${t?.$type}, ${t?.$cstNode?.text}`)}}}function Snt(t){return sf(t.elements.map(e=>zy(e)).join("|"),{cardinality:t.cardinality,lookahead:t.lookahead,parenthesized:t.parenthesized,wrap:!1})}function Ant(t){return sf(t.elements.map(e=>zy(e)).join(""),{cardinality:t.cardinality,lookahead:t.lookahead,parenthesized:t.parenthesized,wrap:!1})}function _nt(t){return sf(`${y$}*?${zy(t.terminal)}`,{cardinality:t.cardinality,lookahead:t.lookahead,parenthesized:t.parenthesized})}function Dnt(t){return sf(`(?!${zy(t.terminal)})${y$}*?`,{cardinality:t.cardinality,lookahead:t.lookahead,parenthesized:t.parenthesized})}function Lnt(t){return t.right?sf(`[${o$(t.left)}-${o$(t.right)}]`,{cardinality:t.cardinality,lookahead:t.lookahead,parenthesized:t.parenthesized,wrap:!1}):sf(o$(t.left),{cardinality:t.cardinality,lookahead:t.lookahead,parenthesized:t.parenthesized,wrap:!1})}function o$(t){return rp(t.value)}function sf(t,e){return(e.parenthesized||e.lookahead||e.wrap!==!1)&&(t=`(${e.lookahead??(e.parenthesized?"":"?:")}${t})`),e.cardinality?`${t}${e.cardinality}`:t}var y$,Vc=P(()=>{"use strict";g6();ol();Oc();Ts();Bc();Fy();o(Kye,"getEntryRule");o(Qye,"getHiddenRules");o(HT,"getAllReachableRules");o(Zye,"ruleDfs");o(xnt,"getAllRulesUsedForCrossReferences");o(c$,"getCrossReferenceTerminal");o(u$,"isCommentTerminal");o(h$,"findNodesForProperty");o(YT,"findNodeForProperty");o(f$,"findNodesForPropertyInternal");o(bnt,"findNodesForKeyword");o(d$,"findNodeForKeyword");o(p$,"findNodesForKeywordInternal");o(m$,"findAssignment");o(b6,"findNameAssignment");o(Jye,"findNameAssignmentInternal");o(eve,"getActionAtElement");o(Tnt,"isOptionalCardinality");o(knt,"isArrayCardinality");o(Cnt,"isArrayOperator");o(jT,"isDataTypeRule");o(tve,"isDataTypeRuleInternal");o(wnt,"isDataType");o(l$,"isDataTypeInternal");o(T6,"getExplicitRuleType");o(ip,"getTypeName");o(rve,"getActionType");o(Ent,"getRuleTypeName");o(g$,"getRuleType");o($y,"terminalRegex");y$=/[\s\S]/.source;o(zy,"abstractElementToRegex");o(Snt,"terminalAlternativesToRegex");o(Ant,"terminalGroupToRegex");o(_nt,"untilTokenToRegex");o(Dnt,"negateTokenToRegex");o(Lnt,"characterRangeToRegex");o(o$,"keywordToRegex");o(sf,"withCardinality")});function v$(t){let e=[],r=t.Grammar;for(let i of r.rules)Xs(i)&&u$(i)&&a$($y(i))&&e.push(i.name);return{multilineCommentRules:e,nameRegexp:p6}}var x$=P(()=>{"use strict";Bc();Vc();Fy();ol();o(v$,"createGrammarConfig")});var b$=P(()=>{"use strict"});function Gy(t){console&&console.error&&console.error(`Error: ${t}`)}function XT(t){console&&console.warn&&console.warn(`Warning: ${t}`)}var ive=P(()=>{"use strict";o(Gy,"PRINT_ERROR");o(XT,"PRINT_WARNING")});function KT(t){let e=new Date().getTime(),r=t();return{time:new Date().getTime()-e,value:r}}var nve=P(()=>{"use strict";o(KT,"timer")});function QT(t){function e(){}o(e,"FakeConstructor"),e.prototype=t;let r=new e;function i(){return typeof r.bar}return o(i,"fakeAccess"),i(),i(),t;(0,eval)(t)}var ave=P(()=>{"use strict";o(QT,"toFastProperties")});var Vy=P(()=>{"use strict";ive();nve();ave()});function Rnt(t){return Nnt(t)?t.LABEL:t.name}function Nnt(t){return Gn(t.LABEL)&&t.LABEL!==""}function C6(t){return ht(t,qy)}function qy(t){function e(r){return ht(r,qy)}if(o(e,"convertDefinition"),t instanceof Li){let r={type:"NonTerminal",name:t.nonTerminalName,idx:t.idx};return Gn(t.label)&&(r.label=t.label),r}else{if(t instanceof en)return{type:"Alternative",definition:e(t.definition)};if(t instanceof Ri)return{type:"Option",idx:t.idx,definition:e(t.definition)};if(t instanceof tn)return{type:"RepetitionMandatory",idx:t.idx,definition:e(t.definition)};if(t instanceof rn)return{type:"RepetitionMandatoryWithSeparator",idx:t.idx,separator:qy(new Xr({terminalType:t.separator})),definition:e(t.definition)};if(t instanceof Wi)return{type:"RepetitionWithSeparator",idx:t.idx,separator:qy(new Xr({terminalType:t.separator})),definition:e(t.definition)};if(t instanceof ti)return{type:"Repetition",idx:t.idx,definition:e(t.definition)};if(t instanceof Ui)return{type:"Alternation",idx:t.idx,definition:e(t.definition)};if(t instanceof Xr){let r={type:"Terminal",name:t.terminalType.name,label:Rnt(t.terminalType),idx:t.idx};Gn(t.label)&&(r.terminalLabel=t.label);let i=t.terminalType.PATTERN;return t.terminalType.PATTERN&&(r.pattern=Bl(i)?i.source:i),r}else{if(t instanceof Ks)return{type:"Rule",name:t.name,orgText:t.orgText,definition:e(t.definition)};throw Error("non exhaustive match")}}}var ll,Li,Ks,en,Ri,tn,rn,ti,Wi,Ui,Xr,w6=P(()=>{"use strict";nr();o(Rnt,"tokenLabel");o(Nnt,"hasTokenLabel");ll=class{static{o(this,"AbstractProduction")}get definition(){return this._definition}set definition(e){this._definition=e}constructor(e){this._definition=e}accept(e){e.visit(this),Pe(this.definition,r=>{r.accept(e)})}},Li=class extends ll{static{o(this,"NonTerminal")}constructor(e){super([]),this.idx=1,Za(this,Ao(e,r=>r!==void 0))}set definition(e){}get definition(){return this.referencedRule!==void 0?this.referencedRule.definition:[]}accept(e){e.visit(this)}},Ks=class extends ll{static{o(this,"Rule")}constructor(e){super(e.definition),this.orgText="",Za(this,Ao(e,r=>r!==void 0))}},en=class extends ll{static{o(this,"Alternative")}constructor(e){super(e.definition),this.ignoreAmbiguities=!1,Za(this,Ao(e,r=>r!==void 0))}},Ri=class extends ll{static{o(this,"Option")}constructor(e){super(e.definition),this.idx=1,Za(this,Ao(e,r=>r!==void 0))}},tn=class extends ll{static{o(this,"RepetitionMandatory")}constructor(e){super(e.definition),this.idx=1,Za(this,Ao(e,r=>r!==void 0))}},rn=class extends ll{static{o(this,"RepetitionMandatoryWithSeparator")}constructor(e){super(e.definition),this.idx=1,Za(this,Ao(e,r=>r!==void 0))}},ti=class extends ll{static{o(this,"Repetition")}constructor(e){super(e.definition),this.idx=1,Za(this,Ao(e,r=>r!==void 0))}},Wi=class extends ll{static{o(this,"RepetitionWithSeparator")}constructor(e){super(e.definition),this.idx=1,Za(this,Ao(e,r=>r!==void 0))}},Ui=class extends ll{static{o(this,"Alternation")}get definition(){return this._definition}set definition(e){this._definition=e}constructor(e){super(e.definition),this.idx=1,this.ignoreAmbiguities=!1,this.hasPredicates=!1,Za(this,Ao(e,r=>r!==void 0))}},Xr=class{static{o(this,"Terminal")}constructor(e){this.idx=1,Za(this,Ao(e,r=>r!==void 0))}accept(e){e.visit(this)}};o(C6,"serializeGrammar");o(qy,"serializeProduction")});var Qs,sve=P(()=>{"use strict";w6();Qs=class{static{o(this,"GAstVisitor")}visit(e){let r=e;switch(r.constructor){case Li:return this.visitNonTerminal(r);case en:return this.visitAlternative(r);case Ri:return this.visitOption(r);case tn:return this.visitRepetitionMandatory(r);case rn:return this.visitRepetitionMandatoryWithSeparator(r);case Wi:return this.visitRepetitionWithSeparator(r);case ti:return this.visitRepetition(r);case Ui:return this.visitAlternation(r);case Xr:return this.visitTerminal(r);case Ks:return this.visitRule(r);default:throw Error("non exhaustive match")}}visitNonTerminal(e){}visitAlternative(e){}visitOption(e){}visitRepetition(e){}visitRepetitionMandatory(e){}visitRepetitionMandatoryWithSeparator(e){}visitRepetitionWithSeparator(e){}visitAlternation(e){}visitTerminal(e){}visitRule(e){}}});function T$(t){return t instanceof en||t instanceof Ri||t instanceof ti||t instanceof tn||t instanceof rn||t instanceof Wi||t instanceof Xr||t instanceof Ks}function Em(t,e=[]){return t instanceof Ri||t instanceof ti||t instanceof Wi?!0:t instanceof Ui?Fb(t.definition,i=>Em(i,e)):t instanceof Li&&pn(e,t)?!1:t instanceof ll?(t instanceof Li&&e.push(t),ms(t.definition,i=>Em(i,e))):!1}function k$(t){return t instanceof Ui}function Mo(t){if(t instanceof Li)return"SUBRULE";if(t instanceof Ri)return"OPTION";if(t instanceof Ui)return"OR";if(t instanceof tn)return"AT_LEAST_ONE";if(t instanceof rn)return"AT_LEAST_ONE_SEP";if(t instanceof Wi)return"MANY_SEP";if(t instanceof ti)return"MANY";if(t instanceof Xr)return"CONSUME";throw Error("non exhaustive match")}var ove=P(()=>{"use strict";nr();w6();o(T$,"isSequenceProd");o(Em,"isOptionalProd");o(k$,"isBranchingProd");o(Mo,"getProductionDslName")});var Zs=P(()=>{"use strict";w6();sve();ove()});function lve(t,e,r){return[new Ri({definition:[new Xr({terminalType:t.separator})].concat(t.definition)})].concat(e,r)}var of,E6=P(()=>{"use strict";nr();Zs();of=class{static{o(this,"RestWalker")}walk(e,r=[]){Pe(e.definition,(i,n)=>{let a=zn(e.definition,n+1);if(i instanceof Li)this.walkProdRef(i,a,r);else if(i instanceof Xr)this.walkTerminal(i,a,r);else if(i instanceof en)this.walkFlat(i,a,r);else if(i instanceof Ri)this.walkOption(i,a,r);else if(i instanceof tn)this.walkAtLeastOne(i,a,r);else if(i instanceof rn)this.walkAtLeastOneSep(i,a,r);else if(i instanceof Wi)this.walkManySep(i,a,r);else if(i instanceof ti)this.walkMany(i,a,r);else if(i instanceof Ui)this.walkOr(i,a,r);else throw Error("non exhaustive match")})}walkTerminal(e,r,i){}walkProdRef(e,r,i){}walkFlat(e,r,i){let n=r.concat(i);this.walk(e,n)}walkOption(e,r,i){let n=r.concat(i);this.walk(e,n)}walkAtLeastOne(e,r,i){let n=[new Ri({definition:e.definition})].concat(r,i);this.walk(e,n)}walkAtLeastOneSep(e,r,i){let n=lve(e,r,i);this.walk(e,n)}walkMany(e,r,i){let n=[new Ri({definition:e.definition})].concat(r,i);this.walk(e,n)}walkManySep(e,r,i){let n=lve(e,r,i);this.walk(e,n)}walkOr(e,r,i){let n=r.concat(i);Pe(e.definition,a=>{let s=new en({definition:[a]});this.walk(s,n)})}};o(lve,"restForRepetitionWithSeparator")});function Sm(t){if(t instanceof Li)return Sm(t.referencedRule);if(t instanceof Xr)return Ont(t);if(T$(t))return Int(t);if(k$(t))return Mnt(t);throw Error("non exhaustive match")}function Int(t){let e=[],r=t.definition,i=0,n=r.length>i,a,s=!0;for(;n&&s;)a=r[i],s=Em(a),e=e.concat(Sm(a)),i=i+1,n=r.length>i;return Z1(e)}function Mnt(t){let e=ht(t.definition,r=>Sm(r));return Z1(di(e))}function Ont(t){return[t.terminalType]}var C$=P(()=>{"use strict";nr();Zs();o(Sm,"first");o(Int,"firstForSequence");o(Mnt,"firstForBranching");o(Ont,"firstForTerminal")});var S6,w$=P(()=>{"use strict";S6="_~IN~_"});function cve(t){let e={};return Pe(t,r=>{let i=new E$(r).startWalking();Za(e,i)}),e}function Pnt(t,e){return t.name+e+S6}var E$,uve=P(()=>{"use strict";E6();C$();nr();w$();Zs();E$=class extends of{static{o(this,"ResyncFollowsWalker")}constructor(e){super(),this.topProd=e,this.follows={}}startWalking(){return this.walk(this.topProd),this.follows}walkTerminal(e,r,i){}walkProdRef(e,r,i){let n=Pnt(e.referencedRule,e.idx)+this.topProd.name,a=r.concat(i),s=new en({definition:a}),l=Sm(s);this.follows[n]=l}};o(cve,"computeAllProdsFollows");o(Pnt,"buildBetweenProdsFollowPrefix")});function Wy(t){let e=t.toString();if(A6.hasOwnProperty(e))return A6[e];{let r=Bnt.pattern(e);return A6[e]=r,r}}function hve(){A6={}}var A6,Bnt,_6=P(()=>{"use strict";WT();A6={},Bnt=new Cm;o(Wy,"getRegExpAst");o(hve,"clearRegExpParserCache")});function pve(t,e=!1){try{let r=Wy(t);return S$(r.value,{},r.flags.ignoreCase)}catch(r){if(r.message===dve)e&&XT(`${ZT} Unable to optimize: < ${t.toString()} > + Complement Sets cannot be automatically optimized. + This will disable the lexer's first char optimizations. + See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.`);else{let i="";e&&(i=` + This will disable the lexer's first char optimizations. + See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details.`),Gy(`${ZT} + Failed parsing: < ${t.toString()} > + Using the @chevrotain/regexp-to-ast library + Please open an issue at: https://github.com/chevrotain/chevrotain/issues`+i)}}return[]}function S$(t,e,r){switch(t.type){case"Disjunction":for(let n=0;n{if(typeof u=="number")D6(u,e,r);else{let h=u;if(r===!0)for(let f=h.from;f<=h.to;f++)D6(f,e,r);else{for(let f=h.from;f<=h.to&&f=Uy){let f=h.from>=Uy?h.from:Uy,d=h.to,p=Xu(f),m=Xu(d);for(let g=p;g<=m;g++)e[g]=g}}}});break;case"Group":S$(s.value,e,r);break;default:throw Error("Non Exhaustive Match")}let l=s.quantifier!==void 0&&s.quantifier.atLeast===0;if(s.type==="Group"&&A$(s)===!1||s.type!=="Group"&&l===!1)break}break;default:throw Error("non exhaustive match!")}return qr(e)}function D6(t,e,r){let i=Xu(t);e[i]=i,r===!0&&Fnt(t,e)}function Fnt(t,e){let r=String.fromCharCode(t),i=r.toUpperCase();if(i!==r){let n=Xu(i.charCodeAt(0));e[n]=n}else{let n=r.toLowerCase();if(n!==r){let a=Xu(n.charCodeAt(0));e[a]=a}}}function fve(t,e){return qs(t.value,r=>{if(typeof r=="number")return pn(e,r);{let i=r;return qs(e,n=>i.from<=n&&n<=i.to)!==void 0}})}function A$(t){let e=t.quantifier;return e&&e.atLeast===0?!0:t.value?Gt(t.value)?ms(t.value,A$):A$(t.value):!1}function L6(t,e){if(e instanceof RegExp){let r=Wy(e),i=new _$(t);return i.visit(r),i.found}else return qs(e,r=>pn(t,r.charCodeAt(0)))!==void 0}var dve,ZT,_$,mve=P(()=>{"use strict";WT();nr();Vy();_6();D$();dve="Complement Sets are not supported for first char optimization",ZT=`Unable to use "first char" lexer optimizations: +`;o(pve,"getOptimizedStartCodesIndices");o(S$,"firstCharOptimizedIndices");o(D6,"addOptimizedIdxToResult");o(Fnt,"handleIgnoreCase");o(fve,"findCode");o(A$,"isWholeOptional");_$=class extends ju{static{o(this,"CharCodeFinder")}constructor(e){super(),this.targetCharCodes=e,this.found=!1}visitChildren(e){if(this.found!==!0){switch(e.type){case"Lookahead":this.visitLookahead(e);return;case"NegativeLookahead":this.visitNegativeLookahead(e);return;case"Lookbehind":this.visitLookbehind(e);return;case"NegativeLookbehind":this.visitNegativeLookbehind(e);return}super.visitChildren(e)}}visitCharacter(e){pn(this.targetCharCodes,e.value)&&(this.found=!0)}visitSet(e){e.complement?fve(e,this.targetCharCodes)===void 0&&(this.found=!0):fve(e,this.targetCharCodes)!==void 0&&(this.found=!0)}};o(L6,"canMatchCharCode")});function vve(t,e){e=xd(e,{useSticky:R$,debug:!1,safeMode:!1,positionTracking:"full",lineTerminatorCharacters:["\r",` +`],tracer:o((b,T)=>T(),"tracer")});let r=e.tracer;r("initCharCodeToOptimizedIndexMap",()=>{iat()});let i;r("Reject Lexer.NA",()=>{i=Td(t,b=>b[Am]===yn.NA)});let n=!1,a;r("Transform Patterns",()=>{n=!1,a=ht(i,b=>{let T=b[Am];if(Bl(T)){let w=T.source;return w.length===1&&w!=="^"&&w!=="$"&&w!=="."&&!T.ignoreCase?w:w.length===2&&w[0]==="\\"&&!pn(["d","D","s","S","t","r","n","t","0","c","b","B","f","v","w","W"],w[1])?w[1]:e.useSticky?yve(T):gve(T)}else{if(Qn(T))return n=!0,{exec:T};if(typeof T=="object")return n=!0,T;if(typeof T=="string"){if(T.length===1)return T;{let w=T.replace(/[\\^$.*+?()[\]{}|]/g,"\\$&"),k=new RegExp(w);return e.useSticky?yve(k):gve(k)}}else throw Error("non exhaustive match")}})});let s,l,u,h,f;r("misc mapping",()=>{s=ht(i,b=>b.tokenTypeIdx),l=ht(i,b=>{let T=b.GROUP;if(T!==yn.SKIPPED){if(Gn(T))return T;if(Br(T))return!1;throw Error("non exhaustive match")}}),u=ht(i,b=>{let T=b.LONGER_ALT;if(T)return Gt(T)?ht(T,k=>SE(i,k)):[SE(i,T)]}),h=ht(i,b=>b.PUSH_MODE),f=ht(i,b=>Vt(b,"POP_MODE"))});let d;r("Line Terminator Handling",()=>{let b=Sve(e.lineTerminatorCharacters);d=ht(i,T=>!1),e.positionTracking!=="onlyOffset"&&(d=ht(i,T=>Vt(T,"LINE_BREAKS")?!!T.LINE_BREAKS:Eve(T,b)===!1&&L6(b,T.PATTERN)))});let p,m,g,y;r("Misc Mapping #2",()=>{p=ht(i,Cve),m=ht(a,tat),g=mi(i,(b,T)=>{let w=T.GROUP;return Gn(w)&&w!==yn.SKIPPED&&(b[w]=[]),b},{}),y=ht(a,(b,T)=>({pattern:a[T],longerAlt:u[T],canLineTerminator:d[T],isCustom:p[T],short:m[T],group:l[T],push:h[T],pop:f[T],tokenTypeIdx:s[T],tokenType:i[T]}))});let v=!0,x=[];return e.safeMode||r("First Char Optimization",()=>{x=mi(i,(b,T,w)=>{if(typeof T.PATTERN=="string"){let k=T.PATTERN.charCodeAt(0),C=Xu(k);L$(b,C,y[w])}else if(Gt(T.START_CHARS_HINT)){let k;Pe(T.START_CHARS_HINT,C=>{let E=typeof C=="string"?C.charCodeAt(0):C,S=Xu(E);k!==S&&(k=S,L$(b,S,y[w]))})}else if(Bl(T.PATTERN))if(T.PATTERN.unicode)v=!1,e.ensureOptimizations&&Gy(`${ZT} Unable to analyze < ${T.PATTERN.toString()} > pattern. + The regexp unicode flag is not currently supported by the regexp-to-ast library. + This will disable the lexer's first char optimizations. + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE`);else{let k=pve(T.PATTERN,e.ensureOptimizations);_r(k)&&(v=!1),Pe(k,C=>{L$(b,C,y[w])})}else e.ensureOptimizations&&Gy(`${ZT} TokenType: <${T.name}> is using a custom token pattern without providing parameter. + This will disable the lexer's first char optimizations. + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE`),v=!1;return b},[])}),{emptyGroups:g,patternIdxToConfig:y,charCodeToPatternIdxToConfig:x,hasCustom:n,canBeOptimized:v}}function xve(t,e){let r=[],i=znt(t);r=r.concat(i.errors);let n=Gnt(i.valid),a=n.valid;return r=r.concat(n.errors),r=r.concat($nt(a)),r=r.concat(Xnt(a)),r=r.concat(Knt(a,e)),r=r.concat(Qnt(a)),r}function $nt(t){let e=[],r=pi(t,i=>Bl(i[Am]));return e=e.concat(qnt(r)),e=e.concat(Hnt(r)),e=e.concat(Ynt(r)),e=e.concat(jnt(r)),e=e.concat(Wnt(r)),e}function znt(t){let e=pi(t,n=>!Vt(n,Am)),r=ht(e,n=>({message:"Token Type: ->"+n.name+"<- missing static 'PATTERN' property",type:gn.MISSING_PATTERN,tokenTypes:[n]})),i=bd(t,e);return{errors:r,valid:i}}function Gnt(t){let e=pi(t,n=>{let a=n[Am];return!Bl(a)&&!Qn(a)&&!Vt(a,"exec")&&!Gn(a)}),r=ht(e,n=>({message:"Token Type: ->"+n.name+"<- static 'PATTERN' can only be a RegExp, a Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.",type:gn.INVALID_PATTERN,tokenTypes:[n]})),i=bd(t,e);return{errors:r,valid:i}}function qnt(t){class e extends ju{static{o(this,"EndAnchorFinder")}constructor(){super(...arguments),this.found=!1}visitEndAnchor(a){this.found=!0}}let r=pi(t,n=>{let a=n.PATTERN;try{let s=Wy(a),l=new e;return l.visit(s),l.found}catch{return Vnt.test(a.source)}});return ht(r,n=>({message:`Unexpected RegExp Anchor Error: + Token Type: ->`+n.name+`<- static 'PATTERN' cannot contain end of input anchor '$' + See chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`,type:gn.EOI_ANCHOR_FOUND,tokenTypes:[n]}))}function Wnt(t){let e=pi(t,i=>i.PATTERN.test(""));return ht(e,i=>({message:"Token Type: ->"+i.name+"<- static 'PATTERN' must not match an empty string",type:gn.EMPTY_MATCH_PATTERN,tokenTypes:[i]}))}function Hnt(t){class e extends ju{static{o(this,"StartAnchorFinder")}constructor(){super(...arguments),this.found=!1}visitStartAnchor(a){this.found=!0}}let r=pi(t,n=>{let a=n.PATTERN;try{let s=Wy(a),l=new e;return l.visit(s),l.found}catch{return Unt.test(a.source)}});return ht(r,n=>({message:`Unexpected RegExp Anchor Error: + Token Type: ->`+n.name+`<- static 'PATTERN' cannot contain start of input anchor '^' + See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`,type:gn.SOI_ANCHOR_FOUND,tokenTypes:[n]}))}function Ynt(t){let e=pi(t,i=>{let n=i[Am];return n instanceof RegExp&&(n.multiline||n.global)});return ht(e,i=>({message:"Token Type: ->"+i.name+"<- static 'PATTERN' may NOT contain global('g') or multiline('m')",type:gn.UNSUPPORTED_FLAGS_FOUND,tokenTypes:[i]}))}function jnt(t){let e=[],r=ht(t,a=>mi(t,(s,l)=>(a.PATTERN.source===l.PATTERN.source&&!pn(e,l)&&l.PATTERN!==yn.NA&&(e.push(l),s.push(l)),s),[]));r=Ru(r);let i=pi(r,a=>a.length>1);return ht(i,a=>{let s=ht(a,u=>u.name);return{message:`The same RegExp pattern ->${Ia(a).PATTERN}<-has been used in all of the following Token Types: ${s.join(", ")} <-`,type:gn.DUPLICATE_PATTERNS_FOUND,tokenTypes:a}})}function Xnt(t){let e=pi(t,i=>{if(!Vt(i,"GROUP"))return!1;let n=i.GROUP;return n!==yn.SKIPPED&&n!==yn.NA&&!Gn(n)});return ht(e,i=>({message:"Token Type: ->"+i.name+"<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String",type:gn.INVALID_GROUP_TYPE_FOUND,tokenTypes:[i]}))}function Knt(t,e){let r=pi(t,n=>n.PUSH_MODE!==void 0&&!pn(e,n.PUSH_MODE));return ht(r,n=>({message:`Token Type: ->${n.name}<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->${n.PUSH_MODE}<-which does not exist`,type:gn.PUSH_MODE_DOES_NOT_EXIST,tokenTypes:[n]}))}function Qnt(t){let e=[],r=mi(t,(i,n,a)=>{let s=n.PATTERN;return s===yn.NA||(Gn(s)?i.push({str:s,idx:a,tokenType:n}):Bl(s)&&Jnt(s)&&i.push({str:s.source,idx:a,tokenType:n})),i},[]);return Pe(t,(i,n)=>{Pe(r,({str:a,idx:s,tokenType:l})=>{if(n${l.name}<- can never be matched. +Because it appears AFTER the Token Type ->${i.name}<-in the lexer's definition. +See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE`;e.push({message:u,type:gn.UNREACHABLE_PATTERN,tokenTypes:[i,l]})}})}),e}function Znt(t,e){if(Bl(e)){if(eat(e))return!1;let r=e.exec(t);return r!==null&&r.index===0}else{if(Qn(e))return e(t,0,[],{});if(Vt(e,"exec"))return e.exec(t,0,[],{});if(typeof e=="string")return e===t;throw Error("non exhaustive match")}}function Jnt(t){return qs([".","\\","[","]","|","^","$","(",")","?","*","+","{"],r=>t.source.indexOf(r)!==-1)===void 0}function eat(t){return/(\(\?=)|(\(\?!)|(\(\?<=)|(\(\? property in its definition +`,type:gn.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE}),Vt(t,R6)||i.push({message:"A MultiMode Lexer cannot be initialized without a <"+R6+`> property in its definition +`,type:gn.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY}),Vt(t,R6)&&Vt(t,Hy)&&!Vt(t.modes,t.defaultMode)&&i.push({message:`A MultiMode Lexer cannot be initialized with a ${Hy}: <${t.defaultMode}>which does not exist +`,type:gn.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST}),Vt(t,R6)&&Pe(t.modes,(n,a)=>{Pe(n,(s,l)=>{if(Br(s))i.push({message:`A Lexer cannot be initialized using an undefined Token Type. Mode:<${a}> at index: <${l}> +`,type:gn.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED});else if(Vt(s,"LONGER_ALT")){let u=Gt(s.LONGER_ALT)?s.LONGER_ALT:[s.LONGER_ALT];Pe(u,h=>{!Br(h)&&!pn(n,h)&&i.push({message:`A MultiMode Lexer cannot be initialized with a longer_alt <${h.name}> on token <${s.name}> outside of mode <${a}> +`,type:gn.MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE})})}})}),i}function Tve(t,e,r){let i=[],n=!1,a=Ru(di(qr(t.modes))),s=Td(a,u=>u[Am]===yn.NA),l=Sve(r);return e&&Pe(s,u=>{let h=Eve(u,l);if(h!==!1){let d={message:rat(u,h),type:h.issue,tokenType:u};i.push(d)}else Vt(u,"LINE_BREAKS")?u.LINE_BREAKS===!0&&(n=!0):L6(l,u.PATTERN)&&(n=!0)}),e&&!n&&i.push({message:`Warning: No LINE_BREAKS Found. + This Lexer has been defined to track line and column information, + But none of the Token Types can be identified as matching a line terminator. + See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#LINE_BREAKS + for details.`,type:gn.NO_LINE_BREAKS_FLAGS}),i}function kve(t){let e={},r=ni(t);return Pe(r,i=>{let n=t[i];if(Gt(n))e[i]=[];else throw Error("non exhaustive match")}),e}function Cve(t){let e=t.PATTERN;if(Bl(e))return!1;if(Qn(e))return!0;if(Vt(e,"exec"))return!0;if(Gn(e))return!1;throw Error("non exhaustive match")}function tat(t){return Gn(t)&&t.length===1?t.charCodeAt(0):!1}function Eve(t,e){if(Vt(t,"LINE_BREAKS"))return!1;if(Bl(t.PATTERN)){try{L6(e,t.PATTERN)}catch(r){return{issue:gn.IDENTIFY_TERMINATOR,errMsg:r.message}}return!1}else{if(Gn(t.PATTERN))return!1;if(Cve(t))return{issue:gn.CUSTOM_LINE_BREAK};throw Error("non exhaustive match")}}function rat(t,e){if(e.issue===gn.IDENTIFY_TERMINATOR)return`Warning: unable to identify line terminator usage in pattern. + The problem is in the <${t.name}> Token Type + Root cause: ${e.errMsg}. + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR`;if(e.issue===gn.CUSTOM_LINE_BREAK)return`Warning: A Custom Token Pattern should specify the option. + The problem is in the <${t.name}> Token Type + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK`;throw Error("non exhaustive match")}function Sve(t){return ht(t,r=>Gn(r)?r.charCodeAt(0):r)}function L$(t,e,r){t[e]===void 0?t[e]=[r]:t[e].push(r)}function Xu(t){return t255?255+~~(t/255):t}}var Am,Hy,R6,R$,Vnt,Unt,wve,Uy,N6,D$=P(()=>{"use strict";WT();JT();nr();Vy();mve();_6();Am="PATTERN",Hy="defaultMode",R6="modes",R$=typeof new RegExp("(?:)").sticky=="boolean";o(vve,"analyzeTokenTypes");o(xve,"validatePatterns");o($nt,"validateRegExpPattern");o(znt,"findMissingPatterns");o(Gnt,"findInvalidPatterns");Vnt=/[^\\][$]/;o(qnt,"findEndOfInputAnchor");o(Wnt,"findEmptyMatchRegExps");Unt=/[^\\[][\^]|^\^/;o(Hnt,"findStartOfInputAnchor");o(Ynt,"findUnsupportedFlags");o(jnt,"findDuplicatePatterns");o(Xnt,"findInvalidGroupType");o(Knt,"findModesThatDoNotExist");o(Qnt,"findUnreachablePatterns");o(Znt,"tryToMatchStrToPattern");o(Jnt,"noMetaChar");o(eat,"usesLookAheadOrBehind");o(gve,"addStartOfInput");o(yve,"addStickyFlag");o(bve,"performRuntimeChecks");o(Tve,"performWarningRuntimeChecks");o(kve,"cloneEmptyGroups");o(Cve,"isCustomPattern");o(tat,"isShortPattern");wve={test:o(function(t){let e=t.length;for(let r=this.lastIndex;r{r.isParent=r.categoryMatches.length>0})}function nat(t){let e=Si(t),r=t,i=!0;for(;i;){r=Ru(di(ht(r,a=>a.CATEGORIES)));let n=bd(r,e);e=e.concat(n),_r(n)?i=!1:r=n}return e}function aat(t){Pe(t,e=>{N$(e)||(Dve[Ave]=e,e.tokenTypeIdx=Ave++),_ve(e)&&!Gt(e.CATEGORIES)&&(e.CATEGORIES=[e.CATEGORIES]),_ve(e)||(e.CATEGORIES=[]),lat(e)||(e.categoryMatches=[]),cat(e)||(e.categoryMatchesMap={})})}function sat(t){Pe(t,e=>{e.categoryMatches=[],Pe(e.categoryMatchesMap,(r,i)=>{e.categoryMatches.push(Dve[i].tokenTypeIdx)})})}function oat(t){Pe(t,e=>{Lve([],e)})}function Lve(t,e){Pe(t,r=>{e.categoryMatchesMap[r.tokenTypeIdx]=!0}),Pe(e.CATEGORIES,r=>{let i=t.concat(e);pn(i,r)||Lve(i,r)})}function N$(t){return Vt(t,"tokenTypeIdx")}function _ve(t){return Vt(t,"CATEGORIES")}function lat(t){return Vt(t,"categoryMatches")}function cat(t){return Vt(t,"categoryMatchesMap")}function Rve(t){return Vt(t,"tokenTypeIdx")}var Ave,Dve,_m=P(()=>{"use strict";nr();o(lf,"tokenStructuredMatcher");o(Yy,"tokenStructuredMatcherNoCategories");Ave=1,Dve={};o(cf,"augmentTokenTypes");o(nat,"expandCategories");o(aat,"assignTokenDefaultProps");o(sat,"assignCategoriesTokensProp");o(oat,"assignCategoriesMapProp");o(Lve,"singleAssignCategoriesToksMap");o(N$,"hasShortKeyProperty");o(_ve,"hasCategoriesProperty");o(lat,"hasExtendingTokensTypesProperty");o(cat,"hasExtendingTokensTypesMapProperty");o(Rve,"isTokenType")});var jy,I$=P(()=>{"use strict";jy={buildUnableToPopLexerModeMessage(t){return`Unable to pop Lexer Mode after encountering Token ->${t.image}<- The Mode Stack is empty`},buildUnexpectedCharactersMessage(t,e,r,i,n,a){return`unexpected character: ->${t.charAt(e)}<- at offset: ${e}, skipped ${r} characters.`}}});var gn,ek,yn,JT=P(()=>{"use strict";D$();nr();Vy();_m();I$();_6();(function(t){t[t.MISSING_PATTERN=0]="MISSING_PATTERN",t[t.INVALID_PATTERN=1]="INVALID_PATTERN",t[t.EOI_ANCHOR_FOUND=2]="EOI_ANCHOR_FOUND",t[t.UNSUPPORTED_FLAGS_FOUND=3]="UNSUPPORTED_FLAGS_FOUND",t[t.DUPLICATE_PATTERNS_FOUND=4]="DUPLICATE_PATTERNS_FOUND",t[t.INVALID_GROUP_TYPE_FOUND=5]="INVALID_GROUP_TYPE_FOUND",t[t.PUSH_MODE_DOES_NOT_EXIST=6]="PUSH_MODE_DOES_NOT_EXIST",t[t.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE=7]="MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE",t[t.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY=8]="MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY",t[t.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST=9]="MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST",t[t.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED=10]="LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED",t[t.SOI_ANCHOR_FOUND=11]="SOI_ANCHOR_FOUND",t[t.EMPTY_MATCH_PATTERN=12]="EMPTY_MATCH_PATTERN",t[t.NO_LINE_BREAKS_FLAGS=13]="NO_LINE_BREAKS_FLAGS",t[t.UNREACHABLE_PATTERN=14]="UNREACHABLE_PATTERN",t[t.IDENTIFY_TERMINATOR=15]="IDENTIFY_TERMINATOR",t[t.CUSTOM_LINE_BREAK=16]="CUSTOM_LINE_BREAK",t[t.MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE=17]="MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE"})(gn||(gn={}));ek={deferDefinitionErrorsHandling:!1,positionTracking:"full",lineTerminatorsPattern:/\n|\r\n?/g,lineTerminatorCharacters:[` +`,"\r"],ensureOptimizations:!1,safeMode:!1,errorMessageProvider:jy,traceInitPerf:!1,skipValidations:!1,recoveryEnabled:!0};Object.freeze(ek);yn=class{static{o(this,"Lexer")}constructor(e,r=ek){if(this.lexerDefinition=e,this.lexerDefinitionErrors=[],this.lexerDefinitionWarning=[],this.patternIdxToConfig={},this.charCodeToPatternIdxToConfig={},this.modes=[],this.emptyGroups={},this.trackStartLines=!0,this.trackEndLines=!0,this.hasCustom=!1,this.canModeBeOptimized={},this.TRACE_INIT=(n,a)=>{if(this.traceInitPerf===!0){this.traceInitIndent++;let s=new Array(this.traceInitIndent+1).join(" ");this.traceInitIndent <${n}>`);let{time:l,value:u}=KT(a),h=l>10?console.warn:console.log;return this.traceInitIndent time: ${l}ms`),this.traceInitIndent--,u}else return a()},typeof r=="boolean")throw Error(`The second argument to the Lexer constructor is now an ILexerConfig Object. +a boolean 2nd argument is no longer supported`);this.config=Za({},ek,r);let i=this.config.traceInitPerf;i===!0?(this.traceInitMaxIdent=1/0,this.traceInitPerf=!0):typeof i=="number"&&(this.traceInitMaxIdent=i,this.traceInitPerf=!0),this.traceInitIndent=-1,this.TRACE_INIT("Lexer Constructor",()=>{let n,a=!0;this.TRACE_INIT("Lexer Config handling",()=>{if(this.config.lineTerminatorsPattern===ek.lineTerminatorsPattern)this.config.lineTerminatorsPattern=wve;else if(this.config.lineTerminatorCharacters===ek.lineTerminatorCharacters)throw Error(`Error: Missing property on the Lexer config. + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS`);if(r.safeMode&&r.ensureOptimizations)throw Error('"safeMode" and "ensureOptimizations" flags are mutually exclusive.');this.trackStartLines=/full|onlyStart/i.test(this.config.positionTracking),this.trackEndLines=/full/i.test(this.config.positionTracking),Gt(e)?n={modes:{defaultMode:Si(e)},defaultMode:Hy}:(a=!1,n=Si(e))}),this.config.skipValidations===!1&&(this.TRACE_INIT("performRuntimeChecks",()=>{this.lexerDefinitionErrors=this.lexerDefinitionErrors.concat(bve(n,this.trackStartLines,this.config.lineTerminatorCharacters))}),this.TRACE_INIT("performWarningRuntimeChecks",()=>{this.lexerDefinitionWarning=this.lexerDefinitionWarning.concat(Tve(n,this.trackStartLines,this.config.lineTerminatorCharacters))})),n.modes=n.modes?n.modes:{},Pe(n.modes,(l,u)=>{n.modes[u]=Td(l,h=>Br(h))});let s=ni(n.modes);if(Pe(n.modes,(l,u)=>{this.TRACE_INIT(`Mode: <${u}> processing`,()=>{if(this.modes.push(u),this.config.skipValidations===!1&&this.TRACE_INIT("validatePatterns",()=>{this.lexerDefinitionErrors=this.lexerDefinitionErrors.concat(xve(l,s))}),_r(this.lexerDefinitionErrors)){cf(l);let h;this.TRACE_INIT("analyzeTokenTypes",()=>{h=vve(l,{lineTerminatorCharacters:this.config.lineTerminatorCharacters,positionTracking:r.positionTracking,ensureOptimizations:r.ensureOptimizations,safeMode:r.safeMode,tracer:this.TRACE_INIT})}),this.patternIdxToConfig[u]=h.patternIdxToConfig,this.charCodeToPatternIdxToConfig[u]=h.charCodeToPatternIdxToConfig,this.emptyGroups=Za({},this.emptyGroups,h.emptyGroups),this.hasCustom=h.hasCustom||this.hasCustom,this.canModeBeOptimized[u]=h.canBeOptimized}})}),this.defaultMode=n.defaultMode,!_r(this.lexerDefinitionErrors)&&!this.config.deferDefinitionErrorsHandling){let u=ht(this.lexerDefinitionErrors,h=>h.message).join(`----------------------- +`);throw new Error(`Errors detected in definition of Lexer: +`+u)}Pe(this.lexerDefinitionWarning,l=>{XT(l.message)}),this.TRACE_INIT("Choosing sub-methods implementations",()=>{if(R$?(this.chopInput=La,this.match=this.matchWithTest):(this.updateLastIndex=Sn,this.match=this.matchWithExec),a&&(this.handleModes=Sn),this.trackStartLines===!1&&(this.computeNewColumn=La),this.trackEndLines===!1&&(this.updateTokenEndLineColumnLocation=Sn),/full/i.test(this.config.positionTracking))this.createTokenInstance=this.createFullToken;else if(/onlyStart/i.test(this.config.positionTracking))this.createTokenInstance=this.createStartOnlyToken;else if(/onlyOffset/i.test(this.config.positionTracking))this.createTokenInstance=this.createOffsetOnlyToken;else throw Error(`Invalid config option: "${this.config.positionTracking}"`);this.hasCustom?(this.addToken=this.addTokenUsingPush,this.handlePayload=this.handlePayloadWithCustom):(this.addToken=this.addTokenUsingMemberAccess,this.handlePayload=this.handlePayloadNoCustom)}),this.TRACE_INIT("Failed Optimization Warnings",()=>{let l=mi(this.canModeBeOptimized,(u,h,f)=>(h===!1&&u.push(f),u),[]);if(r.ensureOptimizations&&!_r(l))throw Error(`Lexer Modes: < ${l.join(", ")} > cannot be optimized. + Disable the "ensureOptimizations" lexer config flag to silently ignore this and run the lexer in an un-optimized mode. + Or inspect the console log for details on how to resolve these issues.`)}),this.TRACE_INIT("clearRegExpParserCache",()=>{hve()}),this.TRACE_INIT("toFastProperties",()=>{QT(this)})})}tokenize(e,r=this.defaultMode){if(!_r(this.lexerDefinitionErrors)){let n=ht(this.lexerDefinitionErrors,a=>a.message).join(`----------------------- +`);throw new Error(`Unable to Tokenize because Errors detected in definition of Lexer: +`+n)}return this.tokenizeInternal(e,r)}tokenizeInternal(e,r){let i,n,a,s,l,u,h,f,d,p,m,g,y,v,x,b,T=e,w=T.length,k=0,C=0,E=this.hasCustom?0:Math.floor(e.length/10),S=new Array(E),L=[],M=this.trackStartLines?1:void 0,I=this.trackStartLines?1:void 0,A=kve(this.emptyGroups),_=this.trackStartLines,D=this.config.lineTerminatorsPattern,N=0,R=[],B=[],O=[],$=[];Object.freeze($);let z;function F(){return R}o(F,"getPossiblePatternsSlow");function V(Y){let ae=Xu(Y),J=B[ae];return J===void 0?$:J}o(V,"getPossiblePatternsOptimized");let H=o(Y=>{if(O.length===1&&Y.tokenType.PUSH_MODE===void 0){let ae=this.config.errorMessageProvider.buildUnableToPopLexerModeMessage(Y);L.push({offset:Y.startOffset,line:Y.startLine,column:Y.startColumn,length:Y.image.length,message:ae})}else{O.pop();let ae=Na(O);R=this.patternIdxToConfig[ae],B=this.charCodeToPatternIdxToConfig[ae],N=R.length;let J=this.canModeBeOptimized[ae]&&this.config.safeMode===!1;B&&J?z=V:z=F}},"pop_mode");function X(Y){O.push(Y),B=this.charCodeToPatternIdxToConfig[Y],R=this.patternIdxToConfig[Y],N=R.length,N=R.length;let ae=this.canModeBeOptimized[Y]&&this.config.safeMode===!1;B&&ae?z=V:z=F}o(X,"push_mode"),X.call(this,r);let W,Z=this.config.recoveryEnabled;for(;ku.length){u=s,h=f,W=be;break}}}break}}if(u!==null){if(d=u.length,p=W.group,p!==void 0&&(m=W.tokenTypeIdx,g=this.createTokenInstance(u,k,m,W.tokenType,M,I,d),this.handlePayload(g,h),p===!1?C=this.addToken(S,C,g):A[p].push(g)),e=this.chopInput(e,d),k=k+d,I=this.computeNewColumn(I,d),_===!0&&W.canLineTerminator===!0){let ee=0,re,te;D.lastIndex=0;do re=D.test(u),re===!0&&(te=D.lastIndex-1,ee++);while(re===!0);ee!==0&&(M=M+ee,I=d-te,this.updateTokenEndLineColumnLocation(g,p,te,ee,M,I,d))}this.handleModes(W,H,X,g)}else{let ee=k,re=M,te=I,be=Z===!1;for(;be===!1&&k{"use strict";nr();JT();_m();o(uf,"tokenLabel");o(M$,"hasTokenLabel");uat="parent",Nve="categories",Ive="label",Mve="group",Ove="push_mode",Pve="pop_mode",Bve="longer_alt",Fve="line_breaks",$ve="start_chars_hint";o(np,"createToken");o(hat,"createTokenInternal");cl=np({name:"EOF",pattern:yn.NA});cf([cl]);o(hf,"createTokenInstance");o(tk,"tokenMatcher")});var ff,zve,qc,Xy=P(()=>{"use strict";Dm();nr();Zs();ff={buildMismatchTokenMessage({expected:t,actual:e,previous:r,ruleName:i}){return`Expecting ${M$(t)?`--> ${uf(t)} <--`:`token of type --> ${t.name} <--`} but found --> '${e.image}' <--`},buildNotAllInputParsedMessage({firstRedundant:t,ruleName:e}){return"Redundant input, expecting EOF but found: "+t.image},buildNoViableAltMessage({expectedPathsPerAlt:t,actual:e,previous:r,customUserDescription:i,ruleName:n}){let a="Expecting: ",l=` +but found: '`+Ia(e).image+"'";if(i)return a+i+l;{let u=mi(t,(p,m)=>p.concat(m),[]),h=ht(u,p=>`[${ht(p,m=>uf(m)).join(", ")}]`),d=`one of these possible Token sequences: +${ht(h,(p,m)=>` ${m+1}. ${p}`).join(` +`)}`;return a+d+l}},buildEarlyExitMessage({expectedIterationPaths:t,actual:e,customUserDescription:r,ruleName:i}){let n="Expecting: ",s=` +but found: '`+Ia(e).image+"'";if(r)return n+r+s;{let u=`expecting at least one iteration which starts with one of these possible Token sequences:: + <${ht(t,h=>`[${ht(h,f=>uf(f)).join(",")}]`).join(" ,")}>`;return n+u+s}}};Object.freeze(ff);zve={buildRuleNotFoundError(t,e){return"Invalid grammar, reference to a rule which is not defined: ->"+e.nonTerminalName+`<- +inside top level rule: ->`+t.name+"<-"}},qc={buildDuplicateFoundError(t,e){function r(f){return f instanceof Xr?f.terminalType.name:f instanceof Li?f.nonTerminalName:""}o(r,"getExtraProductionArgument");let i=t.name,n=Ia(e),a=n.idx,s=Mo(n),l=r(n),u=a>0,h=`->${s}${u?a:""}<- ${l?`with argument: ->${l}<-`:""} + appears more than once (${e.length} times) in the top level rule: ->${i}<-. + For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES + `;return h=h.replace(/[ \t]+/g," "),h=h.replace(/\s\s+/g,` +`),h},buildNamespaceConflictError(t){return`Namespace conflict found in grammar. +The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <${t.name}>. +To resolve this make sure each Terminal and Non-Terminal names are unique +This is easy to accomplish by using the convention that Terminal names start with an uppercase letter +and Non-Terminal names start with a lower case letter.`},buildAlternationPrefixAmbiguityError(t){let e=ht(t.prefixPath,n=>uf(n)).join(", "),r=t.alternation.idx===0?"":t.alternation.idx;return`Ambiguous alternatives: <${t.ambiguityIndices.join(" ,")}> due to common lookahead prefix +in inside <${t.topLevelRule.name}> Rule, +<${e}> may appears as a prefix path in all these alternatives. +See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX +For Further details.`},buildAlternationAmbiguityError(t){let e=ht(t.prefixPath,n=>uf(n)).join(", "),r=t.alternation.idx===0?"":t.alternation.idx,i=`Ambiguous Alternatives Detected: <${t.ambiguityIndices.join(" ,")}> in inside <${t.topLevelRule.name}> Rule, +<${e}> may appears as a prefix path in all these alternatives. +`;return i=i+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES +For Further details.`,i},buildEmptyRepetitionError(t){let e=Mo(t.repetition);return t.repetition.idx!==0&&(e+=t.repetition.idx),`The repetition <${e}> within Rule <${t.topLevelRule.name}> can never consume any tokens. +This could lead to an infinite loop.`},buildTokenNameError(t){return"deprecated"},buildEmptyAlternationError(t){return`Ambiguous empty alternative: <${t.emptyChoiceIdx+1}> in inside <${t.topLevelRule.name}> Rule. +Only the last alternative may be an empty alternative.`},buildTooManyAlternativesError(t){return`An Alternation cannot have more than 256 alternatives: + inside <${t.topLevelRule.name}> Rule. + has ${t.alternation.definition.length+1} alternatives.`},buildLeftRecursionError(t){let e=t.topLevelRule.name,r=ht(t.leftRecursionPath,a=>a.name),i=`${e} --> ${r.concat([e]).join(" --> ")}`;return`Left Recursion found in grammar. +rule: <${e}> can be invoked from itself (directly or indirectly) +without consuming any Tokens. The grammar path that causes this is: + ${i} + To fix this refactor your grammar to remove the left recursion. +see: https://en.wikipedia.org/wiki/LL_parser#Left_factoring.`},buildInvalidRuleNameError(t){return"deprecated"},buildDuplicateRuleNameError(t){let e;return t.topLevelRule instanceof Ks?e=t.topLevelRule.name:e=t.topLevelRule,`Duplicate definition, rule: ->${e}<- is already defined in the grammar: ->${t.grammarName}<-`}}});function Gve(t,e){let r=new O$(t,e);return r.resolveRefs(),r.errors}var O$,Vve=P(()=>{"use strict";Oo();nr();Zs();o(Gve,"resolveGrammar");O$=class extends Qs{static{o(this,"GastRefResolverVisitor")}constructor(e,r){super(),this.nameToTopRule=e,this.errMsgProvider=r,this.errors=[]}resolveRefs(){Pe(qr(this.nameToTopRule),e=>{this.currTopLevel=e,e.accept(this)})}visitNonTerminal(e){let r=this.nameToTopRule[e.nonTerminalName];if(r)e.referencedRule=r;else{let i=this.errMsgProvider.buildRuleNotFoundError(this.currTopLevel,e);this.errors.push({message:i,type:ya.UNRESOLVED_SUBRULE_REF,ruleName:this.currTopLevel.name,unresolvedRefName:e.nonTerminalName})}}}});function P6(t,e,r=[]){r=Si(r);let i=[],n=0;function a(l){return l.concat(zn(t,n+1))}o(a,"remainingPathWith");function s(l){let u=P6(a(l),e,r);return i.concat(u)}for(o(s,"getAlternativesForProd");r.length{_r(u.definition)===!1&&(i=s(u.definition))}),i;if(l instanceof Xr)r.push(l.terminalType);else throw Error("non exhaustive match")}n++}return i.push({partialPath:r,suffixDef:zn(t,n)}),i}function B6(t,e,r,i){let n="EXIT_NONE_TERMINAL",a=[n],s="EXIT_ALTERNATIVE",l=!1,u=e.length,h=u-i-1,f=[],d=[];for(d.push({idx:-1,def:t,ruleStack:[],occurrenceStack:[]});!_r(d);){let p=d.pop();if(p===s){l&&Na(d).idx<=h&&d.pop();continue}let m=p.def,g=p.idx,y=p.ruleStack,v=p.occurrenceStack;if(_r(m))continue;let x=m[0];if(x===n){let b={idx:g,def:zn(m),ruleStack:Hh(y),occurrenceStack:Hh(v)};d.push(b)}else if(x instanceof Xr)if(g=0;b--){let T=x.definition[b],w={idx:g,def:T.definition.concat(zn(m)),ruleStack:y,occurrenceStack:v};d.push(w),d.push(s)}else if(x instanceof en)d.push({idx:g,def:x.definition.concat(zn(m)),ruleStack:y,occurrenceStack:v});else if(x instanceof Ks)d.push(fat(x,g,y,v));else throw Error("non exhaustive match")}return f}function fat(t,e,r,i){let n=Si(r);n.push(t.name);let a=Si(i);return a.push(1),{idx:e,def:t.definition,ruleStack:n,occurrenceStack:a}}var P$,I6,Ky,M6,rk,O6,ik,nk=P(()=>{"use strict";nr();C$();E6();Zs();P$=class extends of{static{o(this,"AbstractNextPossibleTokensWalker")}constructor(e,r){super(),this.topProd=e,this.path=r,this.possibleTokTypes=[],this.nextProductionName="",this.nextProductionOccurrence=0,this.found=!1,this.isAtEndOfPath=!1}startWalking(){if(this.found=!1,this.path.ruleStack[0]!==this.topProd.name)throw Error("The path does not start with the walker's top Rule!");return this.ruleStack=Si(this.path.ruleStack).reverse(),this.occurrenceStack=Si(this.path.occurrenceStack).reverse(),this.ruleStack.pop(),this.occurrenceStack.pop(),this.updateExpectedNext(),this.walk(this.topProd),this.possibleTokTypes}walk(e,r=[]){this.found||super.walk(e,r)}walkProdRef(e,r,i){if(e.referencedRule.name===this.nextProductionName&&e.idx===this.nextProductionOccurrence){let n=r.concat(i);this.updateExpectedNext(),this.walk(e.referencedRule,n)}}updateExpectedNext(){_r(this.ruleStack)?(this.nextProductionName="",this.nextProductionOccurrence=0,this.isAtEndOfPath=!0):(this.nextProductionName=this.ruleStack.pop(),this.nextProductionOccurrence=this.occurrenceStack.pop())}},I6=class extends P${static{o(this,"NextAfterTokenWalker")}constructor(e,r){super(e,r),this.path=r,this.nextTerminalName="",this.nextTerminalOccurrence=0,this.nextTerminalName=this.path.lastTok.name,this.nextTerminalOccurrence=this.path.lastTokOccurrence}walkTerminal(e,r,i){if(this.isAtEndOfPath&&e.terminalType.name===this.nextTerminalName&&e.idx===this.nextTerminalOccurrence&&!this.found){let n=r.concat(i),a=new en({definition:n});this.possibleTokTypes=Sm(a),this.found=!0}}},Ky=class extends of{static{o(this,"AbstractNextTerminalAfterProductionWalker")}constructor(e,r){super(),this.topRule=e,this.occurrence=r,this.result={token:void 0,occurrence:void 0,isEndOfRule:void 0}}startWalking(){return this.walk(this.topRule),this.result}},M6=class extends Ky{static{o(this,"NextTerminalAfterManyWalker")}walkMany(e,r,i){if(e.idx===this.occurrence){let n=Ia(r.concat(i));this.result.isEndOfRule=n===void 0,n instanceof Xr&&(this.result.token=n.terminalType,this.result.occurrence=n.idx)}else super.walkMany(e,r,i)}},rk=class extends Ky{static{o(this,"NextTerminalAfterManySepWalker")}walkManySep(e,r,i){if(e.idx===this.occurrence){let n=Ia(r.concat(i));this.result.isEndOfRule=n===void 0,n instanceof Xr&&(this.result.token=n.terminalType,this.result.occurrence=n.idx)}else super.walkManySep(e,r,i)}},O6=class extends Ky{static{o(this,"NextTerminalAfterAtLeastOneWalker")}walkAtLeastOne(e,r,i){if(e.idx===this.occurrence){let n=Ia(r.concat(i));this.result.isEndOfRule=n===void 0,n instanceof Xr&&(this.result.token=n.terminalType,this.result.occurrence=n.idx)}else super.walkAtLeastOne(e,r,i)}},ik=class extends Ky{static{o(this,"NextTerminalAfterAtLeastOneSepWalker")}walkAtLeastOneSep(e,r,i){if(e.idx===this.occurrence){let n=Ia(r.concat(i));this.result.isEndOfRule=n===void 0,n instanceof Xr&&(this.result.token=n.terminalType,this.result.occurrence=n.idx)}else super.walkAtLeastOneSep(e,r,i)}};o(P6,"possiblePathsFrom");o(B6,"nextPossibleTokensAfter");o(fat,"expandTopLevelRule")});function ak(t){if(t instanceof Ri||t==="Option")return vn.OPTION;if(t instanceof ti||t==="Repetition")return vn.REPETITION;if(t instanceof tn||t==="RepetitionMandatory")return vn.REPETITION_MANDATORY;if(t instanceof rn||t==="RepetitionMandatoryWithSeparator")return vn.REPETITION_MANDATORY_WITH_SEPARATOR;if(t instanceof Wi||t==="RepetitionWithSeparator")return vn.REPETITION_WITH_SEPARATOR;if(t instanceof Ui||t==="Alternation")return vn.ALTERNATION;throw Error("non exhaustive match")}function $6(t){let{occurrence:e,rule:r,prodType:i,maxLookahead:n}=t,a=ak(i);return a===vn.ALTERNATION?Qy(e,r,n):Zy(e,r,a,n)}function Wve(t,e,r,i,n,a){let s=Qy(t,e,r),l=Kve(s)?Yy:lf;return a(s,i,l,n)}function Uve(t,e,r,i,n,a){let s=Zy(t,e,n,r),l=Kve(s)?Yy:lf;return a(s[0],l,i)}function Hve(t,e,r,i){let n=t.length,a=ms(t,s=>ms(s,l=>l.length===1));if(e)return function(s){let l=ht(s,u=>u.GATE);for(let u=0;udi(u)),l=mi(s,(u,h,f)=>(Pe(h,d=>{Vt(u,d.tokenTypeIdx)||(u[d.tokenTypeIdx]=f),Pe(d.categoryMatches,p=>{Vt(u,p)||(u[p]=f)})}),u),{});return function(){let u=this.LA(1);return l[u.tokenTypeIdx]}}else return function(){for(let s=0;sa.length===1),n=t.length;if(i&&!r){let a=di(t);if(a.length===1&&_r(a[0].categoryMatches)){let l=a[0].tokenTypeIdx;return function(){return this.LA(1).tokenTypeIdx===l}}else{let s=mi(a,(l,u,h)=>(l[u.tokenTypeIdx]=!0,Pe(u.categoryMatches,f=>{l[f]=!0}),l),[]);return function(){let l=this.LA(1);return s[l.tokenTypeIdx]===!0}}}else return function(){e:for(let a=0;aP6([s],1)),i=qve(r.length),n=ht(r,s=>{let l={};return Pe(s,u=>{let h=B$(u.partialPath);Pe(h,f=>{l[f]=!0})}),l}),a=r;for(let s=1;s<=e;s++){let l=a;a=qve(l.length);for(let u=0;u{let x=B$(v.partialPath);Pe(x,b=>{n[u][b]=!0})})}}}}return i}function Qy(t,e,r,i){let n=new F6(t,vn.ALTERNATION,i);return e.accept(n),jve(n.result,r)}function Zy(t,e,r,i){let n=new F6(t,r);e.accept(n);let a=n.result,l=new F$(e,t,r).startWalking(),u=new en({definition:a}),h=new en({definition:l});return jve([u,h],i)}function z6(t,e){e:for(let r=0;r{let n=e[i];return r===n||n.categoryMatchesMap[r.tokenTypeIdx]})}function Kve(t){return ms(t,e=>ms(e,r=>ms(r,i=>_r(i.categoryMatches))))}var vn,F$,F6,Jy=P(()=>{"use strict";nr();nk();E6();_m();Zs();(function(t){t[t.OPTION=0]="OPTION",t[t.REPETITION=1]="REPETITION",t[t.REPETITION_MANDATORY=2]="REPETITION_MANDATORY",t[t.REPETITION_MANDATORY_WITH_SEPARATOR=3]="REPETITION_MANDATORY_WITH_SEPARATOR",t[t.REPETITION_WITH_SEPARATOR=4]="REPETITION_WITH_SEPARATOR",t[t.ALTERNATION=5]="ALTERNATION"})(vn||(vn={}));o(ak,"getProdType");o($6,"getLookaheadPaths");o(Wve,"buildLookaheadFuncForOr");o(Uve,"buildLookaheadFuncForOptionalProd");o(Hve,"buildAlternativesLookAheadFunc");o(Yve,"buildSingleAlternativeLookaheadFunction");F$=class extends of{static{o(this,"RestDefinitionFinderWalker")}constructor(e,r,i){super(),this.topProd=e,this.targetOccurrence=r,this.targetProdType=i}startWalking(){return this.walk(this.topProd),this.restDef}checkIsTarget(e,r,i,n){return e.idx===this.targetOccurrence&&this.targetProdType===r?(this.restDef=i.concat(n),!0):!1}walkOption(e,r,i){this.checkIsTarget(e,vn.OPTION,r,i)||super.walkOption(e,r,i)}walkAtLeastOne(e,r,i){this.checkIsTarget(e,vn.REPETITION_MANDATORY,r,i)||super.walkOption(e,r,i)}walkAtLeastOneSep(e,r,i){this.checkIsTarget(e,vn.REPETITION_MANDATORY_WITH_SEPARATOR,r,i)||super.walkOption(e,r,i)}walkMany(e,r,i){this.checkIsTarget(e,vn.REPETITION,r,i)||super.walkOption(e,r,i)}walkManySep(e,r,i){this.checkIsTarget(e,vn.REPETITION_WITH_SEPARATOR,r,i)||super.walkOption(e,r,i)}},F6=class extends Qs{static{o(this,"InsideDefinitionFinderVisitor")}constructor(e,r,i){super(),this.targetOccurrence=e,this.targetProdType=r,this.targetRef=i,this.result=[]}checkIsTarget(e,r){e.idx===this.targetOccurrence&&this.targetProdType===r&&(this.targetRef===void 0||e===this.targetRef)&&(this.result=e.definition)}visitOption(e){this.checkIsTarget(e,vn.OPTION)}visitRepetition(e){this.checkIsTarget(e,vn.REPETITION)}visitRepetitionMandatory(e){this.checkIsTarget(e,vn.REPETITION_MANDATORY)}visitRepetitionMandatoryWithSeparator(e){this.checkIsTarget(e,vn.REPETITION_MANDATORY_WITH_SEPARATOR)}visitRepetitionWithSeparator(e){this.checkIsTarget(e,vn.REPETITION_WITH_SEPARATOR)}visitAlternation(e){this.checkIsTarget(e,vn.ALTERNATION)}};o(qve,"initializeArrayOfArrays");o(B$,"pathToHashKeys");o(dat,"isUniquePrefixHash");o(jve,"lookAheadSequenceFromAlternatives");o(Qy,"getLookaheadPathsForOr");o(Zy,"getLookaheadPathsForOptionalProd");o(z6,"containsPath");o(Xve,"isStrictPrefixOfPath");o(Kve,"areTokenCategoriesNotUsed")});function Qve(t){let e=t.lookaheadStrategy.validate({rules:t.rules,tokenTypes:t.tokenTypes,grammarName:t.grammarName});return ht(e,r=>Object.assign({type:ya.CUSTOM_LOOKAHEAD_VALIDATION},r))}function Zve(t,e,r,i){let n=Ja(t,u=>pat(u,r)),a=bat(t,e,r),s=Ja(t,u=>yat(u,r)),l=Ja(t,u=>gat(u,t,i,r));return n.concat(a,s,l)}function pat(t,e){let r=new $$;t.accept(r);let i=r.allProductions,n=hO(i,mat),a=Ao(n,l=>l.length>1);return ht(qr(a),l=>{let u=Ia(l),h=e.buildDuplicateFoundError(t,l),f=Mo(u),d={message:h,type:ya.DUPLICATE_PRODUCTIONS,ruleName:t.name,dslName:f,occurrence:u.idx},p=Jve(u);return p&&(d.parameter=p),d})}function mat(t){return`${Mo(t)}_#_${t.idx}_#_${Jve(t)}`}function Jve(t){return t instanceof Xr?t.terminalType.name:t instanceof Li?t.nonTerminalName:""}function gat(t,e,r,i){let n=[];if(mi(e,(s,l)=>l.name===t.name?s+1:s,0)>1){let s=i.buildDuplicateRuleNameError({topLevelRule:t,grammarName:r});n.push({message:s,type:ya.DUPLICATE_RULE_NAME,ruleName:t.name})}return n}function exe(t,e,r){let i=[],n;return pn(e,t)||(n=`Invalid rule override, rule: ->${t}<- cannot be overridden in the grammar: ->${r}<-as it is not defined in any of the super grammars `,i.push({message:n,type:ya.INVALID_RULE_OVERRIDE,ruleName:t})),i}function G$(t,e,r,i=[]){let n=[],a=G6(e.definition);if(_r(a))return[];{let s=t.name;pn(a,t)&&n.push({message:r.buildLeftRecursionError({topLevelRule:t,leftRecursionPath:i}),type:ya.LEFT_RECURSION,ruleName:s});let u=bd(a,i.concat([t])),h=Ja(u,f=>{let d=Si(i);return d.push(f),G$(t,f,r,d)});return n.concat(h)}}function G6(t){let e=[];if(_r(t))return e;let r=Ia(t);if(r instanceof Li)e.push(r.referencedRule);else if(r instanceof en||r instanceof Ri||r instanceof tn||r instanceof rn||r instanceof Wi||r instanceof ti)e=e.concat(G6(r.definition));else if(r instanceof Ui)e=di(ht(r.definition,a=>G6(a.definition)));else if(!(r instanceof Xr))throw Error("non exhaustive match");let i=Em(r),n=t.length>1;if(i&&n){let a=zn(t);return e.concat(G6(a))}else return e}function txe(t,e){let r=new sk;t.accept(r);let i=r.alternations;return Ja(i,a=>{let s=Hh(a.definition);return Ja(s,(l,u)=>{let h=B6([l],[],lf,1);return _r(h)?[{message:e.buildEmptyAlternationError({topLevelRule:t,alternation:a,emptyChoiceIdx:u}),type:ya.NONE_LAST_EMPTY_ALT,ruleName:t.name,occurrence:a.idx,alternative:u+1}]:[]})})}function rxe(t,e,r){let i=new sk;t.accept(i);let n=i.alternations;return n=Td(n,s=>s.ignoreAmbiguities===!0),Ja(n,s=>{let l=s.idx,u=s.maxLookahead||e,h=Qy(l,t,u,s),f=vat(h,s,t,r),d=xat(h,s,t,r);return f.concat(d)})}function yat(t,e){let r=new sk;t.accept(r);let i=r.alternations;return Ja(i,a=>a.definition.length>255?[{message:e.buildTooManyAlternativesError({topLevelRule:t,alternation:a}),type:ya.TOO_MANY_ALTS,ruleName:t.name,occurrence:a.idx}]:[])}function ixe(t,e,r){let i=[];return Pe(t,n=>{let a=new z$;n.accept(a);let s=a.allProductions;Pe(s,l=>{let u=ak(l),h=l.maxLookahead||e,f=l.idx,p=Zy(f,n,u,h)[0];if(_r(di(p))){let m=r.buildEmptyRepetitionError({topLevelRule:n,repetition:l});i.push({message:m,type:ya.NO_NON_EMPTY_LOOKAHEAD,ruleName:n.name})}})}),i}function vat(t,e,r,i){let n=[],a=mi(t,(l,u,h)=>(e.definition[h].ignoreAmbiguities===!0||Pe(u,f=>{let d=[h];Pe(t,(p,m)=>{h!==m&&z6(p,f)&&e.definition[m].ignoreAmbiguities!==!0&&d.push(m)}),d.length>1&&!z6(n,f)&&(n.push(f),l.push({alts:d,path:f}))}),l),[]);return ht(a,l=>{let u=ht(l.alts,f=>f+1);return{message:i.buildAlternationAmbiguityError({topLevelRule:r,alternation:e,ambiguityIndices:u,prefixPath:l.path}),type:ya.AMBIGUOUS_ALTS,ruleName:r.name,occurrence:e.idx,alternatives:l.alts}})}function xat(t,e,r,i){let n=mi(t,(s,l,u)=>{let h=ht(l,f=>({idx:u,path:f}));return s.concat(h)},[]);return Ru(Ja(n,s=>{if(e.definition[s.idx].ignoreAmbiguities===!0)return[];let u=s.idx,h=s.path,f=pi(n,p=>e.definition[p.idx].ignoreAmbiguities!==!0&&p.idx{let m=[p.idx+1,u+1],g=e.idx===0?"":e.idx;return{message:i.buildAlternationPrefixAmbiguityError({topLevelRule:r,alternation:e,ambiguityIndices:m,prefixPath:p.path}),type:ya.AMBIGUOUS_PREFIX_ALTS,ruleName:r.name,occurrence:g,alternatives:m}})}))}function bat(t,e,r){let i=[],n=ht(e,a=>a.name);return Pe(t,a=>{let s=a.name;if(pn(n,s)){let l=r.buildNamespaceConflictError(a);i.push({message:l,type:ya.CONFLICT_TOKENS_RULES_NAMESPACE,ruleName:s})}}),i}var $$,sk,z$,ok=P(()=>{"use strict";nr();Oo();Zs();Jy();nk();_m();o(Qve,"validateLookahead");o(Zve,"validateGrammar");o(pat,"validateDuplicateProductions");o(mat,"identifyProductionForDuplicates");o(Jve,"getExtraProductionArgument");$$=class extends Qs{static{o(this,"OccurrenceValidationCollector")}constructor(){super(...arguments),this.allProductions=[]}visitNonTerminal(e){this.allProductions.push(e)}visitOption(e){this.allProductions.push(e)}visitRepetitionWithSeparator(e){this.allProductions.push(e)}visitRepetitionMandatory(e){this.allProductions.push(e)}visitRepetitionMandatoryWithSeparator(e){this.allProductions.push(e)}visitRepetition(e){this.allProductions.push(e)}visitAlternation(e){this.allProductions.push(e)}visitTerminal(e){this.allProductions.push(e)}};o(gat,"validateRuleDoesNotAlreadyExist");o(exe,"validateRuleIsOverridden");o(G$,"validateNoLeftRecursion");o(G6,"getFirstNoneTerminal");sk=class extends Qs{static{o(this,"OrCollector")}constructor(){super(...arguments),this.alternations=[]}visitAlternation(e){this.alternations.push(e)}};o(txe,"validateEmptyOrAlternative");o(rxe,"validateAmbiguousAlternationAlternatives");z$=class extends Qs{static{o(this,"RepetitionCollector")}constructor(){super(...arguments),this.allProductions=[]}visitRepetitionWithSeparator(e){this.allProductions.push(e)}visitRepetitionMandatory(e){this.allProductions.push(e)}visitRepetitionMandatoryWithSeparator(e){this.allProductions.push(e)}visitRepetition(e){this.allProductions.push(e)}};o(yat,"validateTooManyAlts");o(ixe,"validateSomeNonEmptyLookaheadPath");o(vat,"checkAlternativesAmbiguities");o(xat,"checkPrefixAlternativesAmbiguities");o(bat,"checkTerminalAndNoneTerminalsNameSpace")});function nxe(t){let e=xd(t,{errMsgProvider:zve}),r={};return Pe(t.rules,i=>{r[i.name]=i}),Gve(r,e.errMsgProvider)}function axe(t){return t=xd(t,{errMsgProvider:qc}),Zve(t.rules,t.tokenTypes,t.errMsgProvider,t.grammarName)}var sxe=P(()=>{"use strict";nr();Vve();ok();Xy();o(nxe,"resolveGrammar");o(axe,"validateGrammar")});function ap(t){return pn(hxe,t.name)}var oxe,lxe,cxe,uxe,hxe,ev,Lm,lk,ck,uk,tv=P(()=>{"use strict";nr();oxe="MismatchedTokenException",lxe="NoViableAltException",cxe="EarlyExitException",uxe="NotAllInputParsedException",hxe=[oxe,lxe,cxe,uxe];Object.freeze(hxe);o(ap,"isRecognitionException");ev=class extends Error{static{o(this,"RecognitionException")}constructor(e,r){super(e),this.token=r,this.resyncedTokens=[],Object.setPrototypeOf(this,new.target.prototype),Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}},Lm=class extends ev{static{o(this,"MismatchedTokenException")}constructor(e,r,i){super(e,r),this.previousToken=i,this.name=oxe}},lk=class extends ev{static{o(this,"NoViableAltException")}constructor(e,r,i){super(e,r),this.previousToken=i,this.name=lxe}},ck=class extends ev{static{o(this,"NotAllInputParsedException")}constructor(e,r){super(e,r),this.name=uxe}},uk=class extends ev{static{o(this,"EarlyExitException")}constructor(e,r,i){super(e,r),this.previousToken=i,this.name=cxe}}});function Tat(t,e,r,i,n,a,s){let l=this.getKeyForAutomaticLookahead(i,n),u=this.firstAfterRepMap[l];if(u===void 0){let p=this.getCurrRuleFullName(),m=this.getGAstProductions()[p];u=new a(m,n).startWalking(),this.firstAfterRepMap[l]=u}let h=u.token,f=u.occurrence,d=u.isEndOfRule;this.RULE_STACK.length===1&&d&&h===void 0&&(h=cl,f=1),!(h===void 0||f===void 0)&&this.shouldInRepetitionRecoveryBeTried(h,f,s)&&this.tryInRepetitionRecovery(t,e,r,h)}var V$,W$,q$,V6,U$=P(()=>{"use strict";Dm();nr();tv();w$();Oo();V$={},W$="InRuleRecoveryException",q$=class extends Error{static{o(this,"InRuleRecoveryException")}constructor(e){super(e),this.name=W$}},V6=class{static{o(this,"Recoverable")}initRecoverable(e){this.firstAfterRepMap={},this.resyncFollows={},this.recoveryEnabled=Vt(e,"recoveryEnabled")?e.recoveryEnabled:Js.recoveryEnabled,this.recoveryEnabled&&(this.attemptInRepetitionRecovery=Tat)}getTokenToInsert(e){let r=hf(e,"",NaN,NaN,NaN,NaN,NaN,NaN);return r.isInsertedInRecovery=!0,r}canTokenTypeBeInsertedInRecovery(e){return!0}canTokenTypeBeDeletedInRecovery(e){return!0}tryInRepetitionRecovery(e,r,i,n){let a=this.findReSyncTokenType(),s=this.exportLexerState(),l=[],u=!1,h=this.LA(1),f=this.LA(1),d=o(()=>{let p=this.LA(0),m=this.errorMessageProvider.buildMismatchTokenMessage({expected:n,actual:h,previous:p,ruleName:this.getCurrRuleFullName()}),g=new Lm(m,h,this.LA(0));g.resyncedTokens=Hh(l),this.SAVE_ERROR(g)},"generateErrorMessage");for(;!u;)if(this.tokenMatcher(f,n)){d();return}else if(i.call(this)){d(),e.apply(this,r);return}else this.tokenMatcher(f,a)?u=!0:(f=this.SKIP_TOKEN(),this.addToResyncTokens(f,l));this.importLexerState(s)}shouldInRepetitionRecoveryBeTried(e,r,i){return!(i===!1||this.tokenMatcher(this.LA(1),e)||this.isBackTracking()||this.canPerformInRuleRecovery(e,this.getFollowsForInRuleRecovery(e,r)))}getFollowsForInRuleRecovery(e,r){let i=this.getCurrentGrammarPath(e,r);return this.getNextPossibleTokenTypes(i)}tryInRuleRecovery(e,r){if(this.canRecoverWithSingleTokenInsertion(e,r))return this.getTokenToInsert(e);if(this.canRecoverWithSingleTokenDeletion(e)){let i=this.SKIP_TOKEN();return this.consumeToken(),i}throw new q$("sad sad panda")}canPerformInRuleRecovery(e,r){return this.canRecoverWithSingleTokenInsertion(e,r)||this.canRecoverWithSingleTokenDeletion(e)}canRecoverWithSingleTokenInsertion(e,r){if(!this.canTokenTypeBeInsertedInRecovery(e)||_r(r))return!1;let i=this.LA(1);return qs(r,a=>this.tokenMatcher(i,a))!==void 0}canRecoverWithSingleTokenDeletion(e){return this.canTokenTypeBeDeletedInRecovery(e)?this.tokenMatcher(this.LA(2),e):!1}isInCurrentRuleReSyncSet(e){let r=this.getCurrFollowKey(),i=this.getFollowSetFromFollowKey(r);return pn(i,e)}findReSyncTokenType(){let e=this.flattenFollowSet(),r=this.LA(1),i=2;for(;;){let n=qs(e,a=>tk(r,a));if(n!==void 0)return n;r=this.LA(i),i++}}getCurrFollowKey(){if(this.RULE_STACK.length===1)return V$;let e=this.getLastExplicitRuleShortName(),r=this.getLastExplicitRuleOccurrenceIndex(),i=this.getPreviousExplicitRuleShortName();return{ruleName:this.shortRuleNameToFullName(e),idxInCallingRule:r,inRule:this.shortRuleNameToFullName(i)}}buildFullFollowKeyStack(){let e=this.RULE_STACK,r=this.RULE_OCCURRENCE_STACK;return ht(e,(i,n)=>n===0?V$:{ruleName:this.shortRuleNameToFullName(i),idxInCallingRule:r[n],inRule:this.shortRuleNameToFullName(e[n-1])})}flattenFollowSet(){let e=ht(this.buildFullFollowKeyStack(),r=>this.getFollowSetFromFollowKey(r));return di(e)}getFollowSetFromFollowKey(e){if(e===V$)return[cl];let r=e.ruleName+e.idxInCallingRule+S6+e.inRule;return this.resyncFollows[r]}addToResyncTokens(e,r){return this.tokenMatcher(e,cl)||r.push(e),r}reSyncTo(e){let r=[],i=this.LA(1);for(;this.tokenMatcher(i,e)===!1;)i=this.SKIP_TOKEN(),this.addToResyncTokens(i,r);return Hh(r)}attemptInRepetitionRecovery(e,r,i,n,a,s,l){}getCurrentGrammarPath(e,r){let i=this.getHumanReadableRuleStack(),n=Si(this.RULE_OCCURRENCE_STACK);return{ruleStack:i,occurrenceStack:n,lastTok:e,lastTokOccurrence:r}}getHumanReadableRuleStack(){return ht(this.RULE_STACK,e=>this.shortRuleNameToFullName(e))}};o(Tat,"attemptInRepetitionRecovery")});function q6(t,e,r){return r|e|t}var W6=P(()=>{"use strict";o(q6,"getKeyForAutomaticLookahead")});var df,H$=P(()=>{"use strict";nr();Xy();Oo();ok();Jy();df=class{static{o(this,"LLkLookaheadStrategy")}constructor(e){var r;this.maxLookahead=(r=e?.maxLookahead)!==null&&r!==void 0?r:Js.maxLookahead}validate(e){let r=this.validateNoLeftRecursion(e.rules);if(_r(r)){let i=this.validateEmptyOrAlternatives(e.rules),n=this.validateAmbiguousAlternationAlternatives(e.rules,this.maxLookahead),a=this.validateSomeNonEmptyLookaheadPath(e.rules,this.maxLookahead);return[...r,...i,...n,...a]}return r}validateNoLeftRecursion(e){return Ja(e,r=>G$(r,r,qc))}validateEmptyOrAlternatives(e){return Ja(e,r=>txe(r,qc))}validateAmbiguousAlternationAlternatives(e,r){return Ja(e,i=>rxe(i,r,qc))}validateSomeNonEmptyLookaheadPath(e,r){return ixe(e,r,qc)}buildLookaheadForAlternation(e){return Wve(e.prodOccurrence,e.rule,e.maxLookahead,e.hasPredicates,e.dynamicTokensEnabled,Hve)}buildLookaheadForOptional(e){return Uve(e.prodOccurrence,e.rule,e.maxLookahead,e.dynamicTokensEnabled,ak(e.prodType),Yve)}}});function kat(t){U6.reset(),t.accept(U6);let e=U6.dslMethods;return U6.reset(),e}var H6,Y$,U6,fxe=P(()=>{"use strict";nr();Oo();W6();Zs();H$();H6=class{static{o(this,"LooksAhead")}initLooksAhead(e){this.dynamicTokensEnabled=Vt(e,"dynamicTokensEnabled")?e.dynamicTokensEnabled:Js.dynamicTokensEnabled,this.maxLookahead=Vt(e,"maxLookahead")?e.maxLookahead:Js.maxLookahead,this.lookaheadStrategy=Vt(e,"lookaheadStrategy")?e.lookaheadStrategy:new df({maxLookahead:this.maxLookahead}),this.lookAheadFuncsCache=new Map}preComputeLookaheadFunctions(e){Pe(e,r=>{this.TRACE_INIT(`${r.name} Rule Lookahead`,()=>{let{alternation:i,repetition:n,option:a,repetitionMandatory:s,repetitionMandatoryWithSeparator:l,repetitionWithSeparator:u}=kat(r);Pe(i,h=>{let f=h.idx===0?"":h.idx;this.TRACE_INIT(`${Mo(h)}${f}`,()=>{let d=this.lookaheadStrategy.buildLookaheadForAlternation({prodOccurrence:h.idx,rule:r,maxLookahead:h.maxLookahead||this.maxLookahead,hasPredicates:h.hasPredicates,dynamicTokensEnabled:this.dynamicTokensEnabled}),p=q6(this.fullRuleNameToShort[r.name],256,h.idx);this.setLaFuncCache(p,d)})}),Pe(n,h=>{this.computeLookaheadFunc(r,h.idx,768,"Repetition",h.maxLookahead,Mo(h))}),Pe(a,h=>{this.computeLookaheadFunc(r,h.idx,512,"Option",h.maxLookahead,Mo(h))}),Pe(s,h=>{this.computeLookaheadFunc(r,h.idx,1024,"RepetitionMandatory",h.maxLookahead,Mo(h))}),Pe(l,h=>{this.computeLookaheadFunc(r,h.idx,1536,"RepetitionMandatoryWithSeparator",h.maxLookahead,Mo(h))}),Pe(u,h=>{this.computeLookaheadFunc(r,h.idx,1280,"RepetitionWithSeparator",h.maxLookahead,Mo(h))})})})}computeLookaheadFunc(e,r,i,n,a,s){this.TRACE_INIT(`${s}${r===0?"":r}`,()=>{let l=this.lookaheadStrategy.buildLookaheadForOptional({prodOccurrence:r,rule:e,maxLookahead:a||this.maxLookahead,dynamicTokensEnabled:this.dynamicTokensEnabled,prodType:n}),u=q6(this.fullRuleNameToShort[e.name],i,r);this.setLaFuncCache(u,l)})}getKeyForAutomaticLookahead(e,r){let i=this.getLastExplicitRuleShortName();return q6(i,e,r)}getLaFuncFromCache(e){return this.lookAheadFuncsCache.get(e)}setLaFuncCache(e,r){this.lookAheadFuncsCache.set(e,r)}},Y$=class extends Qs{static{o(this,"DslMethodsCollectorVisitor")}constructor(){super(...arguments),this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}}reset(){this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}}visitOption(e){this.dslMethods.option.push(e)}visitRepetitionWithSeparator(e){this.dslMethods.repetitionWithSeparator.push(e)}visitRepetitionMandatory(e){this.dslMethods.repetitionMandatory.push(e)}visitRepetitionMandatoryWithSeparator(e){this.dslMethods.repetitionMandatoryWithSeparator.push(e)}visitRepetition(e){this.dslMethods.repetition.push(e)}visitAlternation(e){this.dslMethods.alternation.push(e)}},U6=new Y$;o(kat,"collectMethods")});function K$(t,e){isNaN(t.startOffset)===!0?(t.startOffset=e.startOffset,t.endOffset=e.endOffset):t.endOffset{"use strict";o(K$,"setNodeLocationOnlyOffset");o(Q$,"setNodeLocationFull");o(dxe,"addTerminalToCst");o(pxe,"addNoneTerminalToCst")});function Z$(t,e){Object.defineProperty(t,Cat,{enumerable:!1,configurable:!0,writable:!1,value:e})}var Cat,gxe=P(()=>{"use strict";Cat="name";o(Z$,"defineNameProp")});function wat(t,e){let r=ni(t),i=r.length;for(let n=0;ns.msg);throw Error(`Errors Detected in CST Visitor <${this.constructor.name}>: + ${a.join(` + +`).replace(/\n/g,` + `)}`)}},"validateVisitor")};return r.prototype=i,r.prototype.constructor=r,r._RULE_NAMES=e,r}function vxe(t,e,r){let i=o(function(){},"derivedConstructor");Z$(i,t+"BaseSemanticsWithDefaults");let n=Object.create(r.prototype);return Pe(e,a=>{n[a]=wat}),i.prototype=n,i.prototype.constructor=i,i}function Eat(t,e){return Sat(t,e)}function Sat(t,e){let r=pi(e,n=>Qn(t[n])===!1),i=ht(r,n=>({msg:`Missing visitor method: <${n}> on ${t.constructor.name} CST Visitor.`,type:J$.MISSING_METHOD,methodName:n}));return Ru(i)}var J$,xxe=P(()=>{"use strict";nr();gxe();o(wat,"defaultVisit");o(yxe,"createBaseSemanticVisitorConstructor");o(vxe,"createBaseVisitorConstructorWithDefaults");(function(t){t[t.REDUNDANT_METHOD=0]="REDUNDANT_METHOD",t[t.MISSING_METHOD=1]="MISSING_METHOD"})(J$||(J$={}));o(Eat,"validateVisitor");o(Sat,"validateMissingCstMethods")});var K6,bxe=P(()=>{"use strict";mxe();nr();xxe();Oo();K6=class{static{o(this,"TreeBuilder")}initTreeBuilder(e){if(this.CST_STACK=[],this.outputCst=e.outputCst,this.nodeLocationTracking=Vt(e,"nodeLocationTracking")?e.nodeLocationTracking:Js.nodeLocationTracking,!this.outputCst)this.cstInvocationStateUpdate=Sn,this.cstFinallyStateUpdate=Sn,this.cstPostTerminal=Sn,this.cstPostNonTerminal=Sn,this.cstPostRule=Sn;else if(/full/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=Q$,this.setNodeLocationFromNode=Q$,this.cstPostRule=Sn,this.setInitialNodeLocation=this.setInitialNodeLocationFullRecovery):(this.setNodeLocationFromToken=Sn,this.setNodeLocationFromNode=Sn,this.cstPostRule=this.cstPostRuleFull,this.setInitialNodeLocation=this.setInitialNodeLocationFullRegular);else if(/onlyOffset/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=K$,this.setNodeLocationFromNode=K$,this.cstPostRule=Sn,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRecovery):(this.setNodeLocationFromToken=Sn,this.setNodeLocationFromNode=Sn,this.cstPostRule=this.cstPostRuleOnlyOffset,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRegular);else if(/none/i.test(this.nodeLocationTracking))this.setNodeLocationFromToken=Sn,this.setNodeLocationFromNode=Sn,this.cstPostRule=Sn,this.setInitialNodeLocation=Sn;else throw Error(`Invalid config option: "${e.nodeLocationTracking}"`)}setInitialNodeLocationOnlyOffsetRecovery(e){e.location={startOffset:NaN,endOffset:NaN}}setInitialNodeLocationOnlyOffsetRegular(e){e.location={startOffset:this.LA(1).startOffset,endOffset:NaN}}setInitialNodeLocationFullRecovery(e){e.location={startOffset:NaN,startLine:NaN,startColumn:NaN,endOffset:NaN,endLine:NaN,endColumn:NaN}}setInitialNodeLocationFullRegular(e){let r=this.LA(1);e.location={startOffset:r.startOffset,startLine:r.startLine,startColumn:r.startColumn,endOffset:NaN,endLine:NaN,endColumn:NaN}}cstInvocationStateUpdate(e){let r={name:e,children:Object.create(null)};this.setInitialNodeLocation(r),this.CST_STACK.push(r)}cstFinallyStateUpdate(){this.CST_STACK.pop()}cstPostRuleFull(e){let r=this.LA(0),i=e.location;i.startOffset<=r.startOffset?(i.endOffset=r.endOffset,i.endLine=r.endLine,i.endColumn=r.endColumn):(i.startOffset=NaN,i.startLine=NaN,i.startColumn=NaN)}cstPostRuleOnlyOffset(e){let r=this.LA(0),i=e.location;i.startOffset<=r.startOffset?i.endOffset=r.endOffset:i.startOffset=NaN}cstPostTerminal(e,r){let i=this.CST_STACK[this.CST_STACK.length-1];dxe(i,r,e),this.setNodeLocationFromToken(i.location,r)}cstPostNonTerminal(e,r){let i=this.CST_STACK[this.CST_STACK.length-1];pxe(i,r,e),this.setNodeLocationFromNode(i.location,e.location)}getBaseCstVisitorConstructor(){if(Br(this.baseCstVisitorConstructor)){let e=yxe(this.className,ni(this.gastProductionsCache));return this.baseCstVisitorConstructor=e,e}return this.baseCstVisitorConstructor}getBaseCstVisitorConstructorWithDefaults(){if(Br(this.baseCstVisitorWithDefaultsConstructor)){let e=vxe(this.className,ni(this.gastProductionsCache),this.getBaseCstVisitorConstructor());return this.baseCstVisitorWithDefaultsConstructor=e,e}return this.baseCstVisitorWithDefaultsConstructor}getLastExplicitRuleShortName(){let e=this.RULE_STACK;return e[e.length-1]}getPreviousExplicitRuleShortName(){let e=this.RULE_STACK;return e[e.length-2]}getLastExplicitRuleOccurrenceIndex(){let e=this.RULE_OCCURRENCE_STACK;return e[e.length-1]}}});var Q6,Txe=P(()=>{"use strict";Oo();Q6=class{static{o(this,"LexerAdapter")}initLexerAdapter(){this.tokVector=[],this.tokVectorLength=0,this.currIdx=-1}set input(e){if(this.selfAnalysisDone!==!0)throw Error("Missing invocation at the end of the Parser's constructor.");this.reset(),this.tokVector=e,this.tokVectorLength=e.length}get input(){return this.tokVector}SKIP_TOKEN(){return this.currIdx<=this.tokVector.length-2?(this.consumeToken(),this.LA(1)):rv}LA(e){let r=this.currIdx+e;return r<0||this.tokVectorLength<=r?rv:this.tokVector[r]}consumeToken(){this.currIdx++}exportLexerState(){return this.currIdx}importLexerState(e){this.currIdx=e}resetLexerState(){this.currIdx=-1}moveToTerminatedState(){this.currIdx=this.tokVector.length-1}getLexerPosition(){return this.exportLexerState()}}});var Z6,kxe=P(()=>{"use strict";nr();tv();Oo();Xy();ok();Zs();Z6=class{static{o(this,"RecognizerApi")}ACTION(e){return e.call(this)}consume(e,r,i){return this.consumeInternal(r,e,i)}subrule(e,r,i){return this.subruleInternal(r,e,i)}option(e,r){return this.optionInternal(r,e)}or(e,r){return this.orInternal(r,e)}many(e,r){return this.manyInternal(e,r)}atLeastOne(e,r){return this.atLeastOneInternal(e,r)}CONSUME(e,r){return this.consumeInternal(e,0,r)}CONSUME1(e,r){return this.consumeInternal(e,1,r)}CONSUME2(e,r){return this.consumeInternal(e,2,r)}CONSUME3(e,r){return this.consumeInternal(e,3,r)}CONSUME4(e,r){return this.consumeInternal(e,4,r)}CONSUME5(e,r){return this.consumeInternal(e,5,r)}CONSUME6(e,r){return this.consumeInternal(e,6,r)}CONSUME7(e,r){return this.consumeInternal(e,7,r)}CONSUME8(e,r){return this.consumeInternal(e,8,r)}CONSUME9(e,r){return this.consumeInternal(e,9,r)}SUBRULE(e,r){return this.subruleInternal(e,0,r)}SUBRULE1(e,r){return this.subruleInternal(e,1,r)}SUBRULE2(e,r){return this.subruleInternal(e,2,r)}SUBRULE3(e,r){return this.subruleInternal(e,3,r)}SUBRULE4(e,r){return this.subruleInternal(e,4,r)}SUBRULE5(e,r){return this.subruleInternal(e,5,r)}SUBRULE6(e,r){return this.subruleInternal(e,6,r)}SUBRULE7(e,r){return this.subruleInternal(e,7,r)}SUBRULE8(e,r){return this.subruleInternal(e,8,r)}SUBRULE9(e,r){return this.subruleInternal(e,9,r)}OPTION(e){return this.optionInternal(e,0)}OPTION1(e){return this.optionInternal(e,1)}OPTION2(e){return this.optionInternal(e,2)}OPTION3(e){return this.optionInternal(e,3)}OPTION4(e){return this.optionInternal(e,4)}OPTION5(e){return this.optionInternal(e,5)}OPTION6(e){return this.optionInternal(e,6)}OPTION7(e){return this.optionInternal(e,7)}OPTION8(e){return this.optionInternal(e,8)}OPTION9(e){return this.optionInternal(e,9)}OR(e){return this.orInternal(e,0)}OR1(e){return this.orInternal(e,1)}OR2(e){return this.orInternal(e,2)}OR3(e){return this.orInternal(e,3)}OR4(e){return this.orInternal(e,4)}OR5(e){return this.orInternal(e,5)}OR6(e){return this.orInternal(e,6)}OR7(e){return this.orInternal(e,7)}OR8(e){return this.orInternal(e,8)}OR9(e){return this.orInternal(e,9)}MANY(e){this.manyInternal(0,e)}MANY1(e){this.manyInternal(1,e)}MANY2(e){this.manyInternal(2,e)}MANY3(e){this.manyInternal(3,e)}MANY4(e){this.manyInternal(4,e)}MANY5(e){this.manyInternal(5,e)}MANY6(e){this.manyInternal(6,e)}MANY7(e){this.manyInternal(7,e)}MANY8(e){this.manyInternal(8,e)}MANY9(e){this.manyInternal(9,e)}MANY_SEP(e){this.manySepFirstInternal(0,e)}MANY_SEP1(e){this.manySepFirstInternal(1,e)}MANY_SEP2(e){this.manySepFirstInternal(2,e)}MANY_SEP3(e){this.manySepFirstInternal(3,e)}MANY_SEP4(e){this.manySepFirstInternal(4,e)}MANY_SEP5(e){this.manySepFirstInternal(5,e)}MANY_SEP6(e){this.manySepFirstInternal(6,e)}MANY_SEP7(e){this.manySepFirstInternal(7,e)}MANY_SEP8(e){this.manySepFirstInternal(8,e)}MANY_SEP9(e){this.manySepFirstInternal(9,e)}AT_LEAST_ONE(e){this.atLeastOneInternal(0,e)}AT_LEAST_ONE1(e){return this.atLeastOneInternal(1,e)}AT_LEAST_ONE2(e){this.atLeastOneInternal(2,e)}AT_LEAST_ONE3(e){this.atLeastOneInternal(3,e)}AT_LEAST_ONE4(e){this.atLeastOneInternal(4,e)}AT_LEAST_ONE5(e){this.atLeastOneInternal(5,e)}AT_LEAST_ONE6(e){this.atLeastOneInternal(6,e)}AT_LEAST_ONE7(e){this.atLeastOneInternal(7,e)}AT_LEAST_ONE8(e){this.atLeastOneInternal(8,e)}AT_LEAST_ONE9(e){this.atLeastOneInternal(9,e)}AT_LEAST_ONE_SEP(e){this.atLeastOneSepFirstInternal(0,e)}AT_LEAST_ONE_SEP1(e){this.atLeastOneSepFirstInternal(1,e)}AT_LEAST_ONE_SEP2(e){this.atLeastOneSepFirstInternal(2,e)}AT_LEAST_ONE_SEP3(e){this.atLeastOneSepFirstInternal(3,e)}AT_LEAST_ONE_SEP4(e){this.atLeastOneSepFirstInternal(4,e)}AT_LEAST_ONE_SEP5(e){this.atLeastOneSepFirstInternal(5,e)}AT_LEAST_ONE_SEP6(e){this.atLeastOneSepFirstInternal(6,e)}AT_LEAST_ONE_SEP7(e){this.atLeastOneSepFirstInternal(7,e)}AT_LEAST_ONE_SEP8(e){this.atLeastOneSepFirstInternal(8,e)}AT_LEAST_ONE_SEP9(e){this.atLeastOneSepFirstInternal(9,e)}RULE(e,r,i=iv){if(pn(this.definedRulesNames,e)){let s={message:qc.buildDuplicateRuleNameError({topLevelRule:e,grammarName:this.className}),type:ya.DUPLICATE_RULE_NAME,ruleName:e};this.definitionErrors.push(s)}this.definedRulesNames.push(e);let n=this.defineRule(e,r,i);return this[e]=n,n}OVERRIDE_RULE(e,r,i=iv){let n=exe(e,this.definedRulesNames,this.className);this.definitionErrors=this.definitionErrors.concat(n);let a=this.defineRule(e,r,i);return this[e]=a,a}BACKTRACK(e,r){return function(){this.isBackTrackingStack.push(1);let i=this.saveRecogState();try{return e.apply(this,r),!0}catch(n){if(ap(n))return!1;throw n}finally{this.reloadRecogState(i),this.isBackTrackingStack.pop()}}}getGAstProductions(){return this.gastProductionsCache}getSerializedGastProductions(){return C6(qr(this.gastProductionsCache))}}});var J6,Cxe=P(()=>{"use strict";nr();W6();tv();Jy();nk();Oo();U$();Dm();_m();J6=class{static{o(this,"RecognizerEngine")}initRecognizerEngine(e,r){if(this.className=this.constructor.name,this.shortRuleNameToFull={},this.fullRuleNameToShort={},this.ruleShortNameIdx=256,this.tokenMatcher=Yy,this.subruleIdx=0,this.definedRulesNames=[],this.tokensMap={},this.isBackTrackingStack=[],this.RULE_STACK=[],this.RULE_OCCURRENCE_STACK=[],this.gastProductionsCache={},Vt(r,"serializedGrammar"))throw Error(`The Parser's configuration can no longer contain a property. + See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0 + For Further details.`);if(Gt(e)){if(_r(e))throw Error(`A Token Vocabulary cannot be empty. + Note that the first argument for the parser constructor + is no longer a Token vector (since v4.0).`);if(typeof e[0].startOffset=="number")throw Error(`The Parser constructor no longer accepts a token vector as the first argument. + See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0 + For Further details.`)}if(Gt(e))this.tokensMap=mi(e,(a,s)=>(a[s.name]=s,a),{});else if(Vt(e,"modes")&&ms(di(qr(e.modes)),Rve)){let a=di(qr(e.modes)),s=Z1(a);this.tokensMap=mi(s,(l,u)=>(l[u.name]=u,l),{})}else if(Gi(e))this.tokensMap=Si(e);else throw new Error(" argument must be An Array of Token constructors, A dictionary of Token constructors or an IMultiModeLexerDefinition");this.tokensMap.EOF=cl;let i=Vt(e,"modes")?di(qr(e.modes)):qr(e),n=ms(i,a=>_r(a.categoryMatches));this.tokenMatcher=n?Yy:lf,cf(qr(this.tokensMap))}defineRule(e,r,i){if(this.selfAnalysisDone)throw Error(`Grammar rule <${e}> may not be defined after the 'performSelfAnalysis' method has been called' +Make sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`);let n=Vt(i,"resyncEnabled")?i.resyncEnabled:iv.resyncEnabled,a=Vt(i,"recoveryValueFunc")?i.recoveryValueFunc:iv.recoveryValueFunc,s=this.ruleShortNameIdx<<12;this.ruleShortNameIdx++,this.shortRuleNameToFull[s]=e,this.fullRuleNameToShort[e]=s;let l;return this.outputCst===!0?l=o(function(...f){try{this.ruleInvocationStateUpdate(s,e,this.subruleIdx),r.apply(this,f);let d=this.CST_STACK[this.CST_STACK.length-1];return this.cstPostRule(d),d}catch(d){return this.invokeRuleCatch(d,n,a)}finally{this.ruleFinallyStateUpdate()}},"invokeRuleWithTry"):l=o(function(...f){try{return this.ruleInvocationStateUpdate(s,e,this.subruleIdx),r.apply(this,f)}catch(d){return this.invokeRuleCatch(d,n,a)}finally{this.ruleFinallyStateUpdate()}},"invokeRuleWithTryCst"),Object.assign(l,{ruleName:e,originalGrammarAction:r})}invokeRuleCatch(e,r,i){let n=this.RULE_STACK.length===1,a=r&&!this.isBackTracking()&&this.recoveryEnabled;if(ap(e)){let s=e;if(a){let l=this.findReSyncTokenType();if(this.isInCurrentRuleReSyncSet(l))if(s.resyncedTokens=this.reSyncTo(l),this.outputCst){let u=this.CST_STACK[this.CST_STACK.length-1];return u.recoveredNode=!0,u}else return i(e);else{if(this.outputCst){let u=this.CST_STACK[this.CST_STACK.length-1];u.recoveredNode=!0,s.partialCstResult=u}throw s}}else{if(n)return this.moveToTerminatedState(),i(e);throw s}}else throw e}optionInternal(e,r){let i=this.getKeyForAutomaticLookahead(512,r);return this.optionInternalLogic(e,r,i)}optionInternalLogic(e,r,i){let n=this.getLaFuncFromCache(i),a;if(typeof e!="function"){a=e.DEF;let s=e.GATE;if(s!==void 0){let l=n;n=o(()=>s.call(this)&&l.call(this),"lookAheadFunc")}}else a=e;if(n.call(this)===!0)return a.call(this)}atLeastOneInternal(e,r){let i=this.getKeyForAutomaticLookahead(1024,e);return this.atLeastOneInternalLogic(e,r,i)}atLeastOneInternalLogic(e,r,i){let n=this.getLaFuncFromCache(i),a;if(typeof r!="function"){a=r.DEF;let s=r.GATE;if(s!==void 0){let l=n;n=o(()=>s.call(this)&&l.call(this),"lookAheadFunc")}}else a=r;if(n.call(this)===!0){let s=this.doSingleRepetition(a);for(;n.call(this)===!0&&s===!0;)s=this.doSingleRepetition(a)}else throw this.raiseEarlyExitException(e,vn.REPETITION_MANDATORY,r.ERR_MSG);this.attemptInRepetitionRecovery(this.atLeastOneInternal,[e,r],n,1024,e,O6)}atLeastOneSepFirstInternal(e,r){let i=this.getKeyForAutomaticLookahead(1536,e);this.atLeastOneSepFirstInternalLogic(e,r,i)}atLeastOneSepFirstInternalLogic(e,r,i){let n=r.DEF,a=r.SEP;if(this.getLaFuncFromCache(i).call(this)===!0){n.call(this);let l=o(()=>this.tokenMatcher(this.LA(1),a),"separatorLookAheadFunc");for(;this.tokenMatcher(this.LA(1),a)===!0;)this.CONSUME(a),n.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,a,l,n,ik],l,1536,e,ik)}else throw this.raiseEarlyExitException(e,vn.REPETITION_MANDATORY_WITH_SEPARATOR,r.ERR_MSG)}manyInternal(e,r){let i=this.getKeyForAutomaticLookahead(768,e);return this.manyInternalLogic(e,r,i)}manyInternalLogic(e,r,i){let n=this.getLaFuncFromCache(i),a;if(typeof r!="function"){a=r.DEF;let l=r.GATE;if(l!==void 0){let u=n;n=o(()=>l.call(this)&&u.call(this),"lookaheadFunction")}}else a=r;let s=!0;for(;n.call(this)===!0&&s===!0;)s=this.doSingleRepetition(a);this.attemptInRepetitionRecovery(this.manyInternal,[e,r],n,768,e,M6,s)}manySepFirstInternal(e,r){let i=this.getKeyForAutomaticLookahead(1280,e);this.manySepFirstInternalLogic(e,r,i)}manySepFirstInternalLogic(e,r,i){let n=r.DEF,a=r.SEP;if(this.getLaFuncFromCache(i).call(this)===!0){n.call(this);let l=o(()=>this.tokenMatcher(this.LA(1),a),"separatorLookAheadFunc");for(;this.tokenMatcher(this.LA(1),a)===!0;)this.CONSUME(a),n.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,a,l,n,rk],l,1280,e,rk)}}repetitionSepSecondInternal(e,r,i,n,a){for(;i();)this.CONSUME(r),n.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,r,i,n,a],i,1536,e,a)}doSingleRepetition(e){let r=this.getLexerPosition();return e.call(this),this.getLexerPosition()>r}orInternal(e,r){let i=this.getKeyForAutomaticLookahead(256,r),n=Gt(e)?e:e.DEF,s=this.getLaFuncFromCache(i).call(this,n);if(s!==void 0)return n[s].ALT.call(this);this.raiseNoAltException(r,e.ERR_MSG)}ruleFinallyStateUpdate(){if(this.RULE_STACK.pop(),this.RULE_OCCURRENCE_STACK.pop(),this.cstFinallyStateUpdate(),this.RULE_STACK.length===0&&this.isAtEndOfInput()===!1){let e=this.LA(1),r=this.errorMessageProvider.buildNotAllInputParsedMessage({firstRedundant:e,ruleName:this.getCurrRuleFullName()});this.SAVE_ERROR(new ck(r,e))}}subruleInternal(e,r,i){let n;try{let a=i!==void 0?i.ARGS:void 0;return this.subruleIdx=r,n=e.apply(this,a),this.cstPostNonTerminal(n,i!==void 0&&i.LABEL!==void 0?i.LABEL:e.ruleName),n}catch(a){throw this.subruleInternalError(a,i,e.ruleName)}}subruleInternalError(e,r,i){throw ap(e)&&e.partialCstResult!==void 0&&(this.cstPostNonTerminal(e.partialCstResult,r!==void 0&&r.LABEL!==void 0?r.LABEL:i),delete e.partialCstResult),e}consumeInternal(e,r,i){let n;try{let a=this.LA(1);this.tokenMatcher(a,e)===!0?(this.consumeToken(),n=a):this.consumeInternalError(e,a,i)}catch(a){n=this.consumeInternalRecovery(e,r,a)}return this.cstPostTerminal(i!==void 0&&i.LABEL!==void 0?i.LABEL:e.name,n),n}consumeInternalError(e,r,i){let n,a=this.LA(0);throw i!==void 0&&i.ERR_MSG?n=i.ERR_MSG:n=this.errorMessageProvider.buildMismatchTokenMessage({expected:e,actual:r,previous:a,ruleName:this.getCurrRuleFullName()}),this.SAVE_ERROR(new Lm(n,r,a))}consumeInternalRecovery(e,r,i){if(this.recoveryEnabled&&i.name==="MismatchedTokenException"&&!this.isBackTracking()){let n=this.getFollowsForInRuleRecovery(e,r);try{return this.tryInRuleRecovery(e,n)}catch(a){throw a.name===W$?i:a}}else throw i}saveRecogState(){let e=this.errors,r=Si(this.RULE_STACK);return{errors:e,lexerState:this.exportLexerState(),RULE_STACK:r,CST_STACK:this.CST_STACK}}reloadRecogState(e){this.errors=e.errors,this.importLexerState(e.lexerState),this.RULE_STACK=e.RULE_STACK}ruleInvocationStateUpdate(e,r,i){this.RULE_OCCURRENCE_STACK.push(i),this.RULE_STACK.push(e),this.cstInvocationStateUpdate(r)}isBackTracking(){return this.isBackTrackingStack.length!==0}getCurrRuleFullName(){let e=this.getLastExplicitRuleShortName();return this.shortRuleNameToFull[e]}shortRuleNameToFullName(e){return this.shortRuleNameToFull[e]}isAtEndOfInput(){return this.tokenMatcher(this.LA(1),cl)}reset(){this.resetLexerState(),this.subruleIdx=0,this.isBackTrackingStack=[],this.errors=[],this.RULE_STACK=[],this.CST_STACK=[],this.RULE_OCCURRENCE_STACK=[]}}});var eA,wxe=P(()=>{"use strict";tv();nr();Jy();Oo();eA=class{static{o(this,"ErrorHandler")}initErrorHandler(e){this._errors=[],this.errorMessageProvider=Vt(e,"errorMessageProvider")?e.errorMessageProvider:Js.errorMessageProvider}SAVE_ERROR(e){if(ap(e))return e.context={ruleStack:this.getHumanReadableRuleStack(),ruleOccurrenceStack:Si(this.RULE_OCCURRENCE_STACK)},this._errors.push(e),e;throw Error("Trying to save an Error which is not a RecognitionException")}get errors(){return Si(this._errors)}set errors(e){this._errors=e}raiseEarlyExitException(e,r,i){let n=this.getCurrRuleFullName(),a=this.getGAstProductions()[n],l=Zy(e,a,r,this.maxLookahead)[0],u=[];for(let f=1;f<=this.maxLookahead;f++)u.push(this.LA(f));let h=this.errorMessageProvider.buildEarlyExitMessage({expectedIterationPaths:l,actual:u,previous:this.LA(0),customUserDescription:i,ruleName:n});throw this.SAVE_ERROR(new uk(h,this.LA(1),this.LA(0)))}raiseNoAltException(e,r){let i=this.getCurrRuleFullName(),n=this.getGAstProductions()[i],a=Qy(e,n,this.maxLookahead),s=[];for(let h=1;h<=this.maxLookahead;h++)s.push(this.LA(h));let l=this.LA(0),u=this.errorMessageProvider.buildNoViableAltMessage({expectedPathsPerAlt:a,actual:s,previous:l,customUserDescription:r,ruleName:this.getCurrRuleFullName()});throw this.SAVE_ERROR(new lk(u,this.LA(1),l))}}});var tA,Exe=P(()=>{"use strict";nk();nr();tA=class{static{o(this,"ContentAssist")}initContentAssist(){}computeContentAssist(e,r){let i=this.gastProductionsCache[e];if(Br(i))throw Error(`Rule ->${e}<- does not exist in this grammar.`);return B6([i],r,this.tokenMatcher,this.maxLookahead)}getNextPossibleTokenTypes(e){let r=Ia(e.ruleStack),n=this.getGAstProductions()[r];return new I6(n,e).startWalking()}}});function fk(t,e,r,i=!1){iA(r);let n=Na(this.recordingProdStack),a=Qn(e)?e:e.DEF,s=new t({definition:[],idx:r});return i&&(s.separator=e.SEP),Vt(e,"MAX_LOOKAHEAD")&&(s.maxLookahead=e.MAX_LOOKAHEAD),this.recordingProdStack.push(s),a.call(this),n.definition.push(s),this.recordingProdStack.pop(),nA}function Dat(t,e){iA(e);let r=Na(this.recordingProdStack),i=Gt(t)===!1,n=i===!1?t:t.DEF,a=new Ui({definition:[],idx:e,ignoreAmbiguities:i&&t.IGNORE_AMBIGUITIES===!0});Vt(t,"MAX_LOOKAHEAD")&&(a.maxLookahead=t.MAX_LOOKAHEAD);let s=Fb(n,l=>Qn(l.GATE));return a.hasPredicates=s,r.definition.push(a),Pe(n,l=>{let u=new en({definition:[]});a.definition.push(u),Vt(l,"IGNORE_AMBIGUITIES")?u.ignoreAmbiguities=l.IGNORE_AMBIGUITIES:Vt(l,"GATE")&&(u.ignoreAmbiguities=!0),this.recordingProdStack.push(u),l.ALT.call(this),this.recordingProdStack.pop()}),nA}function _xe(t){return t===0?"":`${t}`}function iA(t){if(t<0||t>Axe){let e=new Error(`Invalid DSL Method idx value: <${t}> + Idx value must be a none negative value smaller than ${Axe+1}`);throw e.KNOWN_RECORDER_ERROR=!0,e}}var nA,Sxe,Axe,Dxe,Lxe,_at,rA,Rxe=P(()=>{"use strict";nr();Zs();JT();_m();Dm();Oo();W6();nA={description:"This Object indicates the Parser is during Recording Phase"};Object.freeze(nA);Sxe=!0,Axe=Math.pow(2,8)-1,Dxe=np({name:"RECORDING_PHASE_TOKEN",pattern:yn.NA});cf([Dxe]);Lxe=hf(Dxe,`This IToken indicates the Parser is in Recording Phase + See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,-1,-1,-1,-1,-1,-1);Object.freeze(Lxe);_at={name:`This CSTNode indicates the Parser is in Recording Phase + See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,children:{}},rA=class{static{o(this,"GastRecorder")}initGastRecorder(e){this.recordingProdStack=[],this.RECORDING_PHASE=!1}enableRecording(){this.RECORDING_PHASE=!0,this.TRACE_INIT("Enable Recording",()=>{for(let e=0;e<10;e++){let r=e>0?e:"";this[`CONSUME${r}`]=function(i,n){return this.consumeInternalRecord(i,e,n)},this[`SUBRULE${r}`]=function(i,n){return this.subruleInternalRecord(i,e,n)},this[`OPTION${r}`]=function(i){return this.optionInternalRecord(i,e)},this[`OR${r}`]=function(i){return this.orInternalRecord(i,e)},this[`MANY${r}`]=function(i){this.manyInternalRecord(e,i)},this[`MANY_SEP${r}`]=function(i){this.manySepFirstInternalRecord(e,i)},this[`AT_LEAST_ONE${r}`]=function(i){this.atLeastOneInternalRecord(e,i)},this[`AT_LEAST_ONE_SEP${r}`]=function(i){this.atLeastOneSepFirstInternalRecord(e,i)}}this.consume=function(e,r,i){return this.consumeInternalRecord(r,e,i)},this.subrule=function(e,r,i){return this.subruleInternalRecord(r,e,i)},this.option=function(e,r){return this.optionInternalRecord(r,e)},this.or=function(e,r){return this.orInternalRecord(r,e)},this.many=function(e,r){this.manyInternalRecord(e,r)},this.atLeastOne=function(e,r){this.atLeastOneInternalRecord(e,r)},this.ACTION=this.ACTION_RECORD,this.BACKTRACK=this.BACKTRACK_RECORD,this.LA=this.LA_RECORD})}disableRecording(){this.RECORDING_PHASE=!1,this.TRACE_INIT("Deleting Recording methods",()=>{let e=this;for(let r=0;r<10;r++){let i=r>0?r:"";delete e[`CONSUME${i}`],delete e[`SUBRULE${i}`],delete e[`OPTION${i}`],delete e[`OR${i}`],delete e[`MANY${i}`],delete e[`MANY_SEP${i}`],delete e[`AT_LEAST_ONE${i}`],delete e[`AT_LEAST_ONE_SEP${i}`]}delete e.consume,delete e.subrule,delete e.option,delete e.or,delete e.many,delete e.atLeastOne,delete e.ACTION,delete e.BACKTRACK,delete e.LA})}ACTION_RECORD(e){}BACKTRACK_RECORD(e,r){return()=>!0}LA_RECORD(e){return rv}topLevelRuleRecord(e,r){try{let i=new Ks({definition:[],name:e});return i.name=e,this.recordingProdStack.push(i),r.call(this),this.recordingProdStack.pop(),i}catch(i){if(i.KNOWN_RECORDER_ERROR!==!0)try{i.message=i.message+` + This error was thrown during the "grammar recording phase" For more info see: + https://chevrotain.io/docs/guide/internals.html#grammar-recording`}catch{throw i}throw i}}optionInternalRecord(e,r){return fk.call(this,Ri,e,r)}atLeastOneInternalRecord(e,r){fk.call(this,tn,r,e)}atLeastOneSepFirstInternalRecord(e,r){fk.call(this,rn,r,e,Sxe)}manyInternalRecord(e,r){fk.call(this,ti,r,e)}manySepFirstInternalRecord(e,r){fk.call(this,Wi,r,e,Sxe)}orInternalRecord(e,r){return Dat.call(this,e,r)}subruleInternalRecord(e,r,i){if(iA(r),!e||Vt(e,"ruleName")===!1){let l=new Error(` argument is invalid expecting a Parser method reference but got: <${JSON.stringify(e)}> + inside top level rule: <${this.recordingProdStack[0].name}>`);throw l.KNOWN_RECORDER_ERROR=!0,l}let n=Na(this.recordingProdStack),a=e.ruleName,s=new Li({idx:r,nonTerminalName:a,label:i?.LABEL,referencedRule:void 0});return n.definition.push(s),this.outputCst?_at:nA}consumeInternalRecord(e,r,i){if(iA(r),!N$(e)){let s=new Error(` argument is invalid expecting a TokenType reference but got: <${JSON.stringify(e)}> + inside top level rule: <${this.recordingProdStack[0].name}>`);throw s.KNOWN_RECORDER_ERROR=!0,s}let n=Na(this.recordingProdStack),a=new Xr({idx:r,terminalType:e,label:i?.LABEL});return n.definition.push(a),Lxe}};o(fk,"recordProd");o(Dat,"recordOrProd");o(_xe,"getIdxSuffix");o(iA,"assertMethodIdxIsValid")});var aA,Nxe=P(()=>{"use strict";nr();Vy();Oo();aA=class{static{o(this,"PerformanceTracer")}initPerformanceTracer(e){if(Vt(e,"traceInitPerf")){let r=e.traceInitPerf,i=typeof r=="number";this.traceInitMaxIdent=i?r:1/0,this.traceInitPerf=i?r>0:r}else this.traceInitMaxIdent=0,this.traceInitPerf=Js.traceInitPerf;this.traceInitIndent=-1}TRACE_INIT(e,r){if(this.traceInitPerf===!0){this.traceInitIndent++;let i=new Array(this.traceInitIndent+1).join(" ");this.traceInitIndent <${e}>`);let{time:n,value:a}=KT(r),s=n>10?console.warn:console.log;return this.traceInitIndent time: ${n}ms`),this.traceInitIndent--,a}else return r()}}});function Ixe(t,e){e.forEach(r=>{let i=r.prototype;Object.getOwnPropertyNames(i).forEach(n=>{if(n==="constructor")return;let a=Object.getOwnPropertyDescriptor(i,n);a&&(a.get||a.set)?Object.defineProperty(t.prototype,n,a):t.prototype[n]=r.prototype[n]})})}var Mxe=P(()=>{"use strict";o(Ixe,"applyMixins")});function sA(t=void 0){return function(){return t}}var rv,Js,iv,ya,dk,pk,Oo=P(()=>{"use strict";nr();Vy();uve();Dm();Xy();sxe();U$();fxe();bxe();Txe();kxe();Cxe();wxe();Exe();Rxe();Nxe();Mxe();ok();rv=hf(cl,"",NaN,NaN,NaN,NaN,NaN,NaN);Object.freeze(rv);Js=Object.freeze({recoveryEnabled:!1,maxLookahead:3,dynamicTokensEnabled:!1,outputCst:!0,errorMessageProvider:ff,nodeLocationTracking:"none",traceInitPerf:!1,skipValidations:!1}),iv=Object.freeze({recoveryValueFunc:o(()=>{},"recoveryValueFunc"),resyncEnabled:!0});(function(t){t[t.INVALID_RULE_NAME=0]="INVALID_RULE_NAME",t[t.DUPLICATE_RULE_NAME=1]="DUPLICATE_RULE_NAME",t[t.INVALID_RULE_OVERRIDE=2]="INVALID_RULE_OVERRIDE",t[t.DUPLICATE_PRODUCTIONS=3]="DUPLICATE_PRODUCTIONS",t[t.UNRESOLVED_SUBRULE_REF=4]="UNRESOLVED_SUBRULE_REF",t[t.LEFT_RECURSION=5]="LEFT_RECURSION",t[t.NONE_LAST_EMPTY_ALT=6]="NONE_LAST_EMPTY_ALT",t[t.AMBIGUOUS_ALTS=7]="AMBIGUOUS_ALTS",t[t.CONFLICT_TOKENS_RULES_NAMESPACE=8]="CONFLICT_TOKENS_RULES_NAMESPACE",t[t.INVALID_TOKEN_NAME=9]="INVALID_TOKEN_NAME",t[t.NO_NON_EMPTY_LOOKAHEAD=10]="NO_NON_EMPTY_LOOKAHEAD",t[t.AMBIGUOUS_PREFIX_ALTS=11]="AMBIGUOUS_PREFIX_ALTS",t[t.TOO_MANY_ALTS=12]="TOO_MANY_ALTS",t[t.CUSTOM_LOOKAHEAD_VALIDATION=13]="CUSTOM_LOOKAHEAD_VALIDATION"})(ya||(ya={}));o(sA,"EMPTY_ALT");dk=class t{static{o(this,"Parser")}static performSelfAnalysis(e){throw Error("The **static** `performSelfAnalysis` method has been deprecated. \nUse the **instance** method with the same name instead.")}performSelfAnalysis(){this.TRACE_INIT("performSelfAnalysis",()=>{let e;this.selfAnalysisDone=!0;let r=this.className;this.TRACE_INIT("toFastProps",()=>{QT(this)}),this.TRACE_INIT("Grammar Recording",()=>{try{this.enableRecording(),Pe(this.definedRulesNames,n=>{let s=this[n].originalGrammarAction,l;this.TRACE_INIT(`${n} Rule`,()=>{l=this.topLevelRuleRecord(n,s)}),this.gastProductionsCache[n]=l})}finally{this.disableRecording()}});let i=[];if(this.TRACE_INIT("Grammar Resolving",()=>{i=nxe({rules:qr(this.gastProductionsCache)}),this.definitionErrors=this.definitionErrors.concat(i)}),this.TRACE_INIT("Grammar Validations",()=>{if(_r(i)&&this.skipValidations===!1){let n=axe({rules:qr(this.gastProductionsCache),tokenTypes:qr(this.tokensMap),errMsgProvider:qc,grammarName:r}),a=Qve({lookaheadStrategy:this.lookaheadStrategy,rules:qr(this.gastProductionsCache),tokenTypes:qr(this.tokensMap),grammarName:r});this.definitionErrors=this.definitionErrors.concat(n,a)}}),_r(this.definitionErrors)&&(this.recoveryEnabled&&this.TRACE_INIT("computeAllProdsFollows",()=>{let n=cve(qr(this.gastProductionsCache));this.resyncFollows=n}),this.TRACE_INIT("ComputeLookaheadFunctions",()=>{var n,a;(a=(n=this.lookaheadStrategy).initialize)===null||a===void 0||a.call(n,{rules:qr(this.gastProductionsCache)}),this.preComputeLookaheadFunctions(qr(this.gastProductionsCache))})),!t.DEFER_DEFINITION_ERRORS_HANDLING&&!_r(this.definitionErrors))throw e=ht(this.definitionErrors,n=>n.message),new Error(`Parser Definition Errors detected: + ${e.join(` +------------------------------- +`)}`)})}constructor(e,r){this.definitionErrors=[],this.selfAnalysisDone=!1;let i=this;if(i.initErrorHandler(r),i.initLexerAdapter(),i.initLooksAhead(r),i.initRecognizerEngine(e,r),i.initRecoverable(r),i.initTreeBuilder(r),i.initContentAssist(),i.initGastRecorder(r),i.initPerformanceTracer(r),Vt(r,"ignoredIssues"))throw new Error(`The IParserConfig property has been deprecated. + Please use the flag on the relevant DSL method instead. + See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES + For further details.`);this.skipValidations=Vt(r,"skipValidations")?r.skipValidations:Js.skipValidations}};dk.DEFER_DEFINITION_ERRORS_HANDLING=!1;Ixe(dk,[V6,H6,K6,Q6,J6,Z6,eA,tA,rA,aA]);pk=class extends dk{static{o(this,"EmbeddedActionsParser")}constructor(e,r=Js){let i=Si(r);i.outputCst=!1,super(e,i)}}});var Oxe=P(()=>{"use strict";Zs()});var Pxe=P(()=>{"use strict"});var Bxe=P(()=>{"use strict";Oxe();Pxe()});var Fxe=P(()=>{"use strict";b$()});var sp=P(()=>{"use strict";b$();Oo();JT();Dm();Jy();H$();Xy();tv();I$();Zs();Zs();Bxe();Fxe()});function Rm(t,e,r){return`${t.name}_${e}_${r}`}function Vxe(t){let e={decisionMap:{},decisionStates:[],ruleToStartState:new Map,ruleToStopState:new Map,states:[]};Pat(e,t);let r=t.length;for(let i=0;iqxe(t,e,s));return ov(t,e,i,r,...n)}function Vat(t,e,r){let i=Fa(t,e,r,{type:op});lp(t,i);let n=ov(t,e,i,r,Nm(t,e,r));return qat(t,e,r,n)}function Nm(t,e,r){let i=pi(ht(r.definition,n=>qxe(t,e,n)),n=>n!==void 0);return i.length===1?i[0]:i.length===0?void 0:Uat(t,i)}function Wxe(t,e,r,i,n){let a=i.left,s=i.right,l=Fa(t,e,r,{type:Oat});lp(t,l);let u=Fa(t,e,r,{type:Gxe});return a.loopback=l,u.loopback=l,t.decisionMap[Rm(e,n?"RepetitionMandatoryWithSeparator":"RepetitionMandatory",r.idx)]=l,ta(s,l),n===void 0?(ta(l,a),ta(l,u)):(ta(l,u),ta(l,n.left),ta(n.right,a)),{left:a,right:u}}function Uxe(t,e,r,i,n){let a=i.left,s=i.right,l=Fa(t,e,r,{type:Mat});lp(t,l);let u=Fa(t,e,r,{type:Gxe}),h=Fa(t,e,r,{type:Iat});return l.loopback=h,u.loopback=h,ta(l,a),ta(l,u),ta(s,h),n!==void 0?(ta(h,u),ta(h,n.left),ta(n.right,a)):ta(h,l),t.decisionMap[Rm(e,n?"RepetitionWithSeparator":"Repetition",r.idx)]=l,{left:l,right:u}}function qat(t,e,r,i){let n=i.left,a=i.right;return ta(n,a),t.decisionMap[Rm(e,"Option",r.idx)]=n,i}function lp(t,e){return t.decisionStates.push(e),e.decision=t.decisionStates.length-1,e.decision}function ov(t,e,r,i,...n){let a=Fa(t,e,i,{type:Nat,start:r});r.end=a;for(let l of n)l!==void 0?(ta(r,l.left),ta(l.right,a)):ta(r,a);let s={left:r,right:a};return t.decisionMap[Rm(e,Wat(i),i.idx)]=r,s}function Wat(t){if(t instanceof Ui)return"Alternation";if(t instanceof Ri)return"Option";if(t instanceof ti)return"Repetition";if(t instanceof Wi)return"RepetitionWithSeparator";if(t instanceof tn)return"RepetitionMandatory";if(t instanceof rn)return"RepetitionMandatoryWithSeparator";throw new Error("Invalid production type encountered")}function Uat(t,e){let r=e.length;for(let a=0;a{"use strict";X1();sO();sp();o(Rm,"buildATNKey");op=1,Rat=2,$xe=4,zxe=5,sv=7,Nat=8,Iat=9,Mat=10,Oat=11,Gxe=12,mk=class{static{o(this,"AbstractTransition")}constructor(e){this.target=e}isEpsilon(){return!1}},nv=class extends mk{static{o(this,"AtomTransition")}constructor(e,r){super(e),this.tokenType=r}},gk=class extends mk{static{o(this,"EpsilonTransition")}constructor(e){super(e)}isEpsilon(){return!0}},av=class extends mk{static{o(this,"RuleTransition")}constructor(e,r,i){super(e),this.rule=r,this.followState=i}isEpsilon(){return!0}};o(Vxe,"createATN");o(Pat,"createRuleStartAndStopATNStates");o(qxe,"atom");o(Bat,"repetition");o(Fat,"repetitionSep");o($at,"repetitionMandatory");o(zat,"repetitionMandatorySep");o(Gat,"alternation");o(Vat,"option");o(Nm,"block");o(Wxe,"plus");o(Uxe,"star");o(qat,"optional");o(lp,"defineDecisionState");o(ov,"makeAlts");o(Wat,"getProdType");o(Uat,"makeBlock");o(tz,"tokenRef");o(Hat,"ruleRef");o(Yat,"buildRuleHandle");o(ta,"epsilon");o(Fa,"newState");o(rz,"addTransition");o(jat,"removeState")});function iz(t,e=!0){return`${e?`a${t.alt}`:""}s${t.state.stateNumber}:${t.stack.map(r=>r.stateNumber.toString()).join("_")}`}var yk,lv,Yxe=P(()=>{"use strict";X1();yk={},lv=class{static{o(this,"ATNConfigSet")}constructor(){this.map={},this.configs=[]}get size(){return this.configs.length}finalize(){this.map={}}add(e){let r=iz(e);r in this.map||(this.map[r]=this.configs.length,this.configs.push(e))}get elements(){return this.configs}get alts(){return ht(this.configs,e=>e.alt)}get key(){let e="";for(let r in this.map)e+=r+":";return e}};o(iz,"getATNConfigKey")});function Xat(t,e){let r={};return i=>{let n=i.toString(),a=r[n];return a!==void 0||(a={atnStartState:t,decision:e,states:{}},r[n]=a),a}}function Xxe(t,e=!0){let r=new Set;for(let i of t){let n=new Set;for(let a of i){if(a===void 0){if(e)break;return!1}let s=[a.tokenTypeIdx].concat(a.categoryMatches);for(let l of s)if(r.has(l)){if(!n.has(l))return!1}else r.add(l),n.add(l)}}return!0}function Kat(t){let e=t.decisionStates.length,r=Array(e);for(let i=0;iuf(n)).join(", "),r=t.production.idx===0?"":t.production.idx,i=`Ambiguous Alternatives Detected: <${t.ambiguityIndices.join(", ")}> in <${tst(t.production)}${r}> inside <${t.topLevelRule.name}> Rule, +<${e}> may appears as a prefix path in all these alternatives. +`;return i=i+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES +For Further details.`,i}function tst(t){if(t instanceof Li)return"SUBRULE";if(t instanceof Ri)return"OPTION";if(t instanceof Ui)return"OR";if(t instanceof tn)return"AT_LEAST_ONE";if(t instanceof rn)return"AT_LEAST_ONE_SEP";if(t instanceof Wi)return"MANY_SEP";if(t instanceof ti)return"MANY";if(t instanceof Xr)return"CONSUME";throw Error("non exhaustive match")}function rst(t,e,r){let i=Ja(e.configs.elements,a=>a.state.transitions),n=Xfe(i.filter(a=>a instanceof nv).map(a=>a.tokenType),a=>a.tokenTypeIdx);return{actualToken:r,possibleTokenTypes:n,tokenPath:t}}function ist(t,e){return t.edges[e.tokenTypeIdx]}function nst(t,e,r){let i=new lv,n=[];for(let s of t.elements){if(r.is(s.alt)===!1)continue;if(s.state.type===sv){n.push(s);continue}let l=s.state.transitions.length;for(let u=0;u0&&!cst(a))for(let s of n)a.add(s);return a}function ast(t,e){if(t instanceof nv&&tk(e,t.tokenType))return t.target}function sst(t,e){let r;for(let i of t.elements)if(e.is(i.alt)===!0){if(r===void 0)r=i.alt;else if(r!==i.alt)return}return r}function Qxe(t){return{configs:t,edges:{},isAcceptState:!1,prediction:-1}}function Kxe(t,e,r,i){return i=Zxe(t,i),e.edges[r.tokenTypeIdx]=i,i}function Zxe(t,e){if(e===yk)return e;let r=e.configs.key,i=t.states[r];return i!==void 0?i:(e.configs.finalize(),t.states[r]=e,e)}function ost(t){let e=new lv,r=t.transitions.length;for(let i=0;i0){let n=[...t.stack],s={state:n.pop(),alt:t.alt,stack:n};lA(s,e)}else e.add(t);return}r.epsilonOnlyTransitions||e.add(t);let i=r.transitions.length;for(let n=0;n1)return!0;return!1}function pst(t){for(let e of Array.from(t.values()))if(Object.keys(e).length===1)return!0;return!1}var oA,jxe,vk,Jxe=P(()=>{"use strict";sp();Hxe();Yxe();pO();lO();Kfe();X1();Y5();kE();AE();vO();o(Xat,"createDFACache");oA=class{static{o(this,"PredicateSet")}constructor(){this.predicates=[]}is(e){return e>=this.predicates.length||this.predicates[e]}set(e,r){this.predicates[e]=r}toString(){let e="",r=this.predicates.length;for(let i=0;iconsole.log(i))}initialize(e){this.atn=Vxe(e.rules),this.dfas=Kat(this.atn)}validateAmbiguousAlternationAlternatives(){return[]}validateEmptyOrAlternatives(){return[]}buildLookaheadForAlternation(e){let{prodOccurrence:r,rule:i,hasPredicates:n,dynamicTokensEnabled:a}=e,s=this.dfas,l=this.logging,u=Rm(i,"Alternation",r),f=this.atn.decisionMap[u].decision,d=ht($6({maxLookahead:1,occurrence:r,prodType:"Alternation",rule:i}),p=>ht(p,m=>m[0]));if(Xxe(d,!1)&&!a){let p=mi(d,(m,g,y)=>(Pe(g,v=>{v&&(m[v.tokenTypeIdx]=y,Pe(v.categoryMatches,x=>{m[x]=y}))}),m),{});return n?function(m){var g;let y=this.LA(1),v=p[y.tokenTypeIdx];if(m!==void 0&&v!==void 0){let x=(g=m[v])===null||g===void 0?void 0:g.GATE;if(x!==void 0&&x.call(this)===!1)return}return v}:function(){let m=this.LA(1);return p[m.tokenTypeIdx]}}else return n?function(p){let m=new oA,g=p===void 0?0:p.length;for(let v=0;vht(p,m=>m[0]));if(Xxe(d)&&d[0][0]&&!a){let p=d[0],m=di(p);if(m.length===1&&_r(m[0].categoryMatches)){let y=m[0].tokenTypeIdx;return function(){return this.LA(1).tokenTypeIdx===y}}else{let g=mi(m,(y,v)=>(v!==void 0&&(y[v.tokenTypeIdx]=!0,Pe(v.categoryMatches,x=>{y[x]=!0})),y),{});return function(){let y=this.LA(1);return g[y.tokenTypeIdx]===!0}}}return function(){let p=nz.call(this,s,f,jxe,l);return typeof p=="object"?!1:p===0}}};o(Xxe,"isLL1Sequence");o(Kat,"initATNSimulator");o(nz,"adaptivePredict");o(Qat,"performLookahead");o(Zat,"computeLookaheadTarget");o(Jat,"reportLookaheadAmbiguity");o(est,"buildAmbiguityError");o(tst,"getProductionDslName");o(rst,"buildAdaptivePredictError");o(ist,"getExistingTargetState");o(nst,"computeReachSet");o(ast,"getReachableTarget");o(sst,"getUniqueAlt");o(Qxe,"newDFAState");o(Kxe,"addDFAEdge");o(Zxe,"addDFAState");o(ost,"computeStartState");o(lA,"closure");o(lst,"getEpsilonTarget");o(cst,"hasConfigInRuleStopState");o(ust,"allConfigsInRuleStopStates");o(hst,"hasConflictTerminatingPrediction");o(fst,"getConflictingAltSets");o(dst,"hasConflictingAltSet");o(pst,"hasStateAssociatedWithOneAlt")});var e2e=P(()=>{"use strict";Jxe()});var yA={};ur(yA,{AnnotatedTextEdit:()=>pf,ChangeAnnotation:()=>Im,ChangeAnnotationIdentifier:()=>ns,CodeAction:()=>$z,CodeActionContext:()=>Fz,CodeActionKind:()=>Bz,CodeActionTriggerKind:()=>Ek,CodeDescription:()=>pz,CodeLens:()=>zz,Color:()=>uA,ColorInformation:()=>lz,ColorPresentation:()=>cz,Command:()=>Mm,CompletionItem:()=>Ez,CompletionItemKind:()=>xz,CompletionItemLabelDetails:()=>wz,CompletionItemTag:()=>Tz,CompletionList:()=>Sz,CreateFile:()=>uv,DeleteFile:()=>fv,Diagnostic:()=>Tk,DiagnosticRelatedInformation:()=>hA,DiagnosticSeverity:()=>fz,DiagnosticTag:()=>dz,DocumentHighlight:()=>Rz,DocumentHighlightKind:()=>Lz,DocumentLink:()=>Vz,DocumentSymbol:()=>Pz,DocumentUri:()=>az,EOL:()=>mst,FoldingRange:()=>hz,FoldingRangeKind:()=>uz,FormattingOptions:()=>Gz,Hover:()=>Az,InlayHint:()=>Qz,InlayHintKind:()=>mA,InlayHintLabelPart:()=>gA,InlineCompletionContext:()=>iG,InlineCompletionItem:()=>Jz,InlineCompletionList:()=>eG,InlineCompletionTriggerKind:()=>tG,InlineValueContext:()=>Kz,InlineValueEvaluatableExpression:()=>Xz,InlineValueText:()=>Yz,InlineValueVariableLookup:()=>jz,InsertReplaceEdit:()=>kz,InsertTextFormat:()=>bz,InsertTextMode:()=>Cz,Location:()=>bk,LocationLink:()=>oz,MarkedString:()=>wk,MarkupContent:()=>dv,MarkupKind:()=>pA,OptionalVersionedTextDocumentIdentifier:()=>Ck,ParameterInformation:()=>_z,Position:()=>oi,Range:()=>Jr,RenameFile:()=>hv,SelectedCompletionInfo:()=>rG,SelectionRange:()=>qz,SemanticTokenModifiers:()=>Uz,SemanticTokenTypes:()=>Wz,SemanticTokens:()=>Hz,SignatureInformation:()=>Dz,StringValue:()=>Zz,SymbolInformation:()=>Mz,SymbolKind:()=>Nz,SymbolTag:()=>Iz,TextDocument:()=>aG,TextDocumentEdit:()=>kk,TextDocumentIdentifier:()=>gz,TextDocumentItem:()=>vz,TextEdit:()=>Ku,URI:()=>cA,VersionedTextDocumentIdentifier:()=>yz,WorkspaceChange:()=>mz,WorkspaceEdit:()=>fA,WorkspaceFolder:()=>nG,WorkspaceSymbol:()=>Oz,integer:()=>sz,uinteger:()=>xk});var az,cA,sz,xk,oi,Jr,bk,oz,uA,lz,cz,uz,hz,hA,fz,dz,pz,Tk,Mm,Ku,Im,ns,pf,kk,uv,hv,fv,fA,cv,dA,mz,gz,yz,Ck,vz,pA,dv,xz,bz,Tz,kz,Cz,wz,Ez,Sz,wk,Az,_z,Dz,Lz,Rz,Nz,Iz,Mz,Oz,Pz,Bz,Ek,Fz,$z,zz,Gz,Vz,qz,Wz,Uz,Hz,Yz,jz,Xz,Kz,mA,gA,Qz,Zz,Jz,eG,tG,rG,iG,nG,mst,aG,sG,Xe,pv=P(()=>{"use strict";(function(t){function e(r){return typeof r=="string"}o(e,"is"),t.is=e})(az||(az={}));(function(t){function e(r){return typeof r=="string"}o(e,"is"),t.is=e})(cA||(cA={}));(function(t){t.MIN_VALUE=-2147483648,t.MAX_VALUE=2147483647;function e(r){return typeof r=="number"&&t.MIN_VALUE<=r&&r<=t.MAX_VALUE}o(e,"is"),t.is=e})(sz||(sz={}));(function(t){t.MIN_VALUE=0,t.MAX_VALUE=2147483647;function e(r){return typeof r=="number"&&t.MIN_VALUE<=r&&r<=t.MAX_VALUE}o(e,"is"),t.is=e})(xk||(xk={}));(function(t){function e(i,n){return i===Number.MAX_VALUE&&(i=xk.MAX_VALUE),n===Number.MAX_VALUE&&(n=xk.MAX_VALUE),{line:i,character:n}}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.objectLiteral(n)&&Xe.uinteger(n.line)&&Xe.uinteger(n.character)}o(r,"is"),t.is=r})(oi||(oi={}));(function(t){function e(i,n,a,s){if(Xe.uinteger(i)&&Xe.uinteger(n)&&Xe.uinteger(a)&&Xe.uinteger(s))return{start:oi.create(i,n),end:oi.create(a,s)};if(oi.is(i)&&oi.is(n))return{start:i,end:n};throw new Error(`Range#create called with invalid arguments[${i}, ${n}, ${a}, ${s}]`)}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.objectLiteral(n)&&oi.is(n.start)&&oi.is(n.end)}o(r,"is"),t.is=r})(Jr||(Jr={}));(function(t){function e(i,n){return{uri:i,range:n}}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.objectLiteral(n)&&Jr.is(n.range)&&(Xe.string(n.uri)||Xe.undefined(n.uri))}o(r,"is"),t.is=r})(bk||(bk={}));(function(t){function e(i,n,a,s){return{targetUri:i,targetRange:n,targetSelectionRange:a,originSelectionRange:s}}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.objectLiteral(n)&&Jr.is(n.targetRange)&&Xe.string(n.targetUri)&&Jr.is(n.targetSelectionRange)&&(Jr.is(n.originSelectionRange)||Xe.undefined(n.originSelectionRange))}o(r,"is"),t.is=r})(oz||(oz={}));(function(t){function e(i,n,a,s){return{red:i,green:n,blue:a,alpha:s}}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.objectLiteral(n)&&Xe.numberRange(n.red,0,1)&&Xe.numberRange(n.green,0,1)&&Xe.numberRange(n.blue,0,1)&&Xe.numberRange(n.alpha,0,1)}o(r,"is"),t.is=r})(uA||(uA={}));(function(t){function e(i,n){return{range:i,color:n}}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.objectLiteral(n)&&Jr.is(n.range)&&uA.is(n.color)}o(r,"is"),t.is=r})(lz||(lz={}));(function(t){function e(i,n,a){return{label:i,textEdit:n,additionalTextEdits:a}}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.objectLiteral(n)&&Xe.string(n.label)&&(Xe.undefined(n.textEdit)||Ku.is(n))&&(Xe.undefined(n.additionalTextEdits)||Xe.typedArray(n.additionalTextEdits,Ku.is))}o(r,"is"),t.is=r})(cz||(cz={}));(function(t){t.Comment="comment",t.Imports="imports",t.Region="region"})(uz||(uz={}));(function(t){function e(i,n,a,s,l,u){let h={startLine:i,endLine:n};return Xe.defined(a)&&(h.startCharacter=a),Xe.defined(s)&&(h.endCharacter=s),Xe.defined(l)&&(h.kind=l),Xe.defined(u)&&(h.collapsedText=u),h}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.objectLiteral(n)&&Xe.uinteger(n.startLine)&&Xe.uinteger(n.startLine)&&(Xe.undefined(n.startCharacter)||Xe.uinteger(n.startCharacter))&&(Xe.undefined(n.endCharacter)||Xe.uinteger(n.endCharacter))&&(Xe.undefined(n.kind)||Xe.string(n.kind))}o(r,"is"),t.is=r})(hz||(hz={}));(function(t){function e(i,n){return{location:i,message:n}}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.defined(n)&&bk.is(n.location)&&Xe.string(n.message)}o(r,"is"),t.is=r})(hA||(hA={}));(function(t){t.Error=1,t.Warning=2,t.Information=3,t.Hint=4})(fz||(fz={}));(function(t){t.Unnecessary=1,t.Deprecated=2})(dz||(dz={}));(function(t){function e(r){let i=r;return Xe.objectLiteral(i)&&Xe.string(i.href)}o(e,"is"),t.is=e})(pz||(pz={}));(function(t){function e(i,n,a,s,l,u){let h={range:i,message:n};return Xe.defined(a)&&(h.severity=a),Xe.defined(s)&&(h.code=s),Xe.defined(l)&&(h.source=l),Xe.defined(u)&&(h.relatedInformation=u),h}o(e,"create"),t.create=e;function r(i){var n;let a=i;return Xe.defined(a)&&Jr.is(a.range)&&Xe.string(a.message)&&(Xe.number(a.severity)||Xe.undefined(a.severity))&&(Xe.integer(a.code)||Xe.string(a.code)||Xe.undefined(a.code))&&(Xe.undefined(a.codeDescription)||Xe.string((n=a.codeDescription)===null||n===void 0?void 0:n.href))&&(Xe.string(a.source)||Xe.undefined(a.source))&&(Xe.undefined(a.relatedInformation)||Xe.typedArray(a.relatedInformation,hA.is))}o(r,"is"),t.is=r})(Tk||(Tk={}));(function(t){function e(i,n,...a){let s={title:i,command:n};return Xe.defined(a)&&a.length>0&&(s.arguments=a),s}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.defined(n)&&Xe.string(n.title)&&Xe.string(n.command)}o(r,"is"),t.is=r})(Mm||(Mm={}));(function(t){function e(a,s){return{range:a,newText:s}}o(e,"replace"),t.replace=e;function r(a,s){return{range:{start:a,end:a},newText:s}}o(r,"insert"),t.insert=r;function i(a){return{range:a,newText:""}}o(i,"del"),t.del=i;function n(a){let s=a;return Xe.objectLiteral(s)&&Xe.string(s.newText)&&Jr.is(s.range)}o(n,"is"),t.is=n})(Ku||(Ku={}));(function(t){function e(i,n,a){let s={label:i};return n!==void 0&&(s.needsConfirmation=n),a!==void 0&&(s.description=a),s}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.objectLiteral(n)&&Xe.string(n.label)&&(Xe.boolean(n.needsConfirmation)||n.needsConfirmation===void 0)&&(Xe.string(n.description)||n.description===void 0)}o(r,"is"),t.is=r})(Im||(Im={}));(function(t){function e(r){let i=r;return Xe.string(i)}o(e,"is"),t.is=e})(ns||(ns={}));(function(t){function e(a,s,l){return{range:a,newText:s,annotationId:l}}o(e,"replace"),t.replace=e;function r(a,s,l){return{range:{start:a,end:a},newText:s,annotationId:l}}o(r,"insert"),t.insert=r;function i(a,s){return{range:a,newText:"",annotationId:s}}o(i,"del"),t.del=i;function n(a){let s=a;return Ku.is(s)&&(Im.is(s.annotationId)||ns.is(s.annotationId))}o(n,"is"),t.is=n})(pf||(pf={}));(function(t){function e(i,n){return{textDocument:i,edits:n}}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.defined(n)&&Ck.is(n.textDocument)&&Array.isArray(n.edits)}o(r,"is"),t.is=r})(kk||(kk={}));(function(t){function e(i,n,a){let s={kind:"create",uri:i};return n!==void 0&&(n.overwrite!==void 0||n.ignoreIfExists!==void 0)&&(s.options=n),a!==void 0&&(s.annotationId=a),s}o(e,"create"),t.create=e;function r(i){let n=i;return n&&n.kind==="create"&&Xe.string(n.uri)&&(n.options===void 0||(n.options.overwrite===void 0||Xe.boolean(n.options.overwrite))&&(n.options.ignoreIfExists===void 0||Xe.boolean(n.options.ignoreIfExists)))&&(n.annotationId===void 0||ns.is(n.annotationId))}o(r,"is"),t.is=r})(uv||(uv={}));(function(t){function e(i,n,a,s){let l={kind:"rename",oldUri:i,newUri:n};return a!==void 0&&(a.overwrite!==void 0||a.ignoreIfExists!==void 0)&&(l.options=a),s!==void 0&&(l.annotationId=s),l}o(e,"create"),t.create=e;function r(i){let n=i;return n&&n.kind==="rename"&&Xe.string(n.oldUri)&&Xe.string(n.newUri)&&(n.options===void 0||(n.options.overwrite===void 0||Xe.boolean(n.options.overwrite))&&(n.options.ignoreIfExists===void 0||Xe.boolean(n.options.ignoreIfExists)))&&(n.annotationId===void 0||ns.is(n.annotationId))}o(r,"is"),t.is=r})(hv||(hv={}));(function(t){function e(i,n,a){let s={kind:"delete",uri:i};return n!==void 0&&(n.recursive!==void 0||n.ignoreIfNotExists!==void 0)&&(s.options=n),a!==void 0&&(s.annotationId=a),s}o(e,"create"),t.create=e;function r(i){let n=i;return n&&n.kind==="delete"&&Xe.string(n.uri)&&(n.options===void 0||(n.options.recursive===void 0||Xe.boolean(n.options.recursive))&&(n.options.ignoreIfNotExists===void 0||Xe.boolean(n.options.ignoreIfNotExists)))&&(n.annotationId===void 0||ns.is(n.annotationId))}o(r,"is"),t.is=r})(fv||(fv={}));(function(t){function e(r){let i=r;return i&&(i.changes!==void 0||i.documentChanges!==void 0)&&(i.documentChanges===void 0||i.documentChanges.every(n=>Xe.string(n.kind)?uv.is(n)||hv.is(n)||fv.is(n):kk.is(n)))}o(e,"is"),t.is=e})(fA||(fA={}));cv=class{static{o(this,"TextEditChangeImpl")}constructor(e,r){this.edits=e,this.changeAnnotations=r}insert(e,r,i){let n,a;if(i===void 0?n=Ku.insert(e,r):ns.is(i)?(a=i,n=pf.insert(e,r,i)):(this.assertChangeAnnotations(this.changeAnnotations),a=this.changeAnnotations.manage(i),n=pf.insert(e,r,a)),this.edits.push(n),a!==void 0)return a}replace(e,r,i){let n,a;if(i===void 0?n=Ku.replace(e,r):ns.is(i)?(a=i,n=pf.replace(e,r,i)):(this.assertChangeAnnotations(this.changeAnnotations),a=this.changeAnnotations.manage(i),n=pf.replace(e,r,a)),this.edits.push(n),a!==void 0)return a}delete(e,r){let i,n;if(r===void 0?i=Ku.del(e):ns.is(r)?(n=r,i=pf.del(e,r)):(this.assertChangeAnnotations(this.changeAnnotations),n=this.changeAnnotations.manage(r),i=pf.del(e,n)),this.edits.push(i),n!==void 0)return n}add(e){this.edits.push(e)}all(){return this.edits}clear(){this.edits.splice(0,this.edits.length)}assertChangeAnnotations(e){if(e===void 0)throw new Error("Text edit change is not configured to manage change annotations.")}},dA=class{static{o(this,"ChangeAnnotations")}constructor(e){this._annotations=e===void 0?Object.create(null):e,this._counter=0,this._size=0}all(){return this._annotations}get size(){return this._size}manage(e,r){let i;if(ns.is(e)?i=e:(i=this.nextId(),r=e),this._annotations[i]!==void 0)throw new Error(`Id ${i} is already in use.`);if(r===void 0)throw new Error(`No annotation provided for id ${i}`);return this._annotations[i]=r,this._size++,i}nextId(){return this._counter++,this._counter.toString()}},mz=class{static{o(this,"WorkspaceChange")}constructor(e){this._textEditChanges=Object.create(null),e!==void 0?(this._workspaceEdit=e,e.documentChanges?(this._changeAnnotations=new dA(e.changeAnnotations),e.changeAnnotations=this._changeAnnotations.all(),e.documentChanges.forEach(r=>{if(kk.is(r)){let i=new cv(r.edits,this._changeAnnotations);this._textEditChanges[r.textDocument.uri]=i}})):e.changes&&Object.keys(e.changes).forEach(r=>{let i=new cv(e.changes[r]);this._textEditChanges[r]=i})):this._workspaceEdit={}}get edit(){return this.initDocumentChanges(),this._changeAnnotations!==void 0&&(this._changeAnnotations.size===0?this._workspaceEdit.changeAnnotations=void 0:this._workspaceEdit.changeAnnotations=this._changeAnnotations.all()),this._workspaceEdit}getTextEditChange(e){if(Ck.is(e)){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");let r={uri:e.uri,version:e.version},i=this._textEditChanges[r.uri];if(!i){let n=[],a={textDocument:r,edits:n};this._workspaceEdit.documentChanges.push(a),i=new cv(n,this._changeAnnotations),this._textEditChanges[r.uri]=i}return i}else{if(this.initChanges(),this._workspaceEdit.changes===void 0)throw new Error("Workspace edit is not configured for normal text edit changes.");let r=this._textEditChanges[e];if(!r){let i=[];this._workspaceEdit.changes[e]=i,r=new cv(i),this._textEditChanges[e]=r}return r}}initDocumentChanges(){this._workspaceEdit.documentChanges===void 0&&this._workspaceEdit.changes===void 0&&(this._changeAnnotations=new dA,this._workspaceEdit.documentChanges=[],this._workspaceEdit.changeAnnotations=this._changeAnnotations.all())}initChanges(){this._workspaceEdit.documentChanges===void 0&&this._workspaceEdit.changes===void 0&&(this._workspaceEdit.changes=Object.create(null))}createFile(e,r,i){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");let n;Im.is(r)||ns.is(r)?n=r:i=r;let a,s;if(n===void 0?a=uv.create(e,i):(s=ns.is(n)?n:this._changeAnnotations.manage(n),a=uv.create(e,i,s)),this._workspaceEdit.documentChanges.push(a),s!==void 0)return s}renameFile(e,r,i,n){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");let a;Im.is(i)||ns.is(i)?a=i:n=i;let s,l;if(a===void 0?s=hv.create(e,r,n):(l=ns.is(a)?a:this._changeAnnotations.manage(a),s=hv.create(e,r,n,l)),this._workspaceEdit.documentChanges.push(s),l!==void 0)return l}deleteFile(e,r,i){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");let n;Im.is(r)||ns.is(r)?n=r:i=r;let a,s;if(n===void 0?a=fv.create(e,i):(s=ns.is(n)?n:this._changeAnnotations.manage(n),a=fv.create(e,i,s)),this._workspaceEdit.documentChanges.push(a),s!==void 0)return s}};(function(t){function e(i){return{uri:i}}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.defined(n)&&Xe.string(n.uri)}o(r,"is"),t.is=r})(gz||(gz={}));(function(t){function e(i,n){return{uri:i,version:n}}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.defined(n)&&Xe.string(n.uri)&&Xe.integer(n.version)}o(r,"is"),t.is=r})(yz||(yz={}));(function(t){function e(i,n){return{uri:i,version:n}}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.defined(n)&&Xe.string(n.uri)&&(n.version===null||Xe.integer(n.version))}o(r,"is"),t.is=r})(Ck||(Ck={}));(function(t){function e(i,n,a,s){return{uri:i,languageId:n,version:a,text:s}}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.defined(n)&&Xe.string(n.uri)&&Xe.string(n.languageId)&&Xe.integer(n.version)&&Xe.string(n.text)}o(r,"is"),t.is=r})(vz||(vz={}));(function(t){t.PlainText="plaintext",t.Markdown="markdown";function e(r){let i=r;return i===t.PlainText||i===t.Markdown}o(e,"is"),t.is=e})(pA||(pA={}));(function(t){function e(r){let i=r;return Xe.objectLiteral(r)&&pA.is(i.kind)&&Xe.string(i.value)}o(e,"is"),t.is=e})(dv||(dv={}));(function(t){t.Text=1,t.Method=2,t.Function=3,t.Constructor=4,t.Field=5,t.Variable=6,t.Class=7,t.Interface=8,t.Module=9,t.Property=10,t.Unit=11,t.Value=12,t.Enum=13,t.Keyword=14,t.Snippet=15,t.Color=16,t.File=17,t.Reference=18,t.Folder=19,t.EnumMember=20,t.Constant=21,t.Struct=22,t.Event=23,t.Operator=24,t.TypeParameter=25})(xz||(xz={}));(function(t){t.PlainText=1,t.Snippet=2})(bz||(bz={}));(function(t){t.Deprecated=1})(Tz||(Tz={}));(function(t){function e(i,n,a){return{newText:i,insert:n,replace:a}}o(e,"create"),t.create=e;function r(i){let n=i;return n&&Xe.string(n.newText)&&Jr.is(n.insert)&&Jr.is(n.replace)}o(r,"is"),t.is=r})(kz||(kz={}));(function(t){t.asIs=1,t.adjustIndentation=2})(Cz||(Cz={}));(function(t){function e(r){let i=r;return i&&(Xe.string(i.detail)||i.detail===void 0)&&(Xe.string(i.description)||i.description===void 0)}o(e,"is"),t.is=e})(wz||(wz={}));(function(t){function e(r){return{label:r}}o(e,"create"),t.create=e})(Ez||(Ez={}));(function(t){function e(r,i){return{items:r||[],isIncomplete:!!i}}o(e,"create"),t.create=e})(Sz||(Sz={}));(function(t){function e(i){return i.replace(/[\\`*_{}[\]()#+\-.!]/g,"\\$&")}o(e,"fromPlainText"),t.fromPlainText=e;function r(i){let n=i;return Xe.string(n)||Xe.objectLiteral(n)&&Xe.string(n.language)&&Xe.string(n.value)}o(r,"is"),t.is=r})(wk||(wk={}));(function(t){function e(r){let i=r;return!!i&&Xe.objectLiteral(i)&&(dv.is(i.contents)||wk.is(i.contents)||Xe.typedArray(i.contents,wk.is))&&(r.range===void 0||Jr.is(r.range))}o(e,"is"),t.is=e})(Az||(Az={}));(function(t){function e(r,i){return i?{label:r,documentation:i}:{label:r}}o(e,"create"),t.create=e})(_z||(_z={}));(function(t){function e(r,i,...n){let a={label:r};return Xe.defined(i)&&(a.documentation=i),Xe.defined(n)?a.parameters=n:a.parameters=[],a}o(e,"create"),t.create=e})(Dz||(Dz={}));(function(t){t.Text=1,t.Read=2,t.Write=3})(Lz||(Lz={}));(function(t){function e(r,i){let n={range:r};return Xe.number(i)&&(n.kind=i),n}o(e,"create"),t.create=e})(Rz||(Rz={}));(function(t){t.File=1,t.Module=2,t.Namespace=3,t.Package=4,t.Class=5,t.Method=6,t.Property=7,t.Field=8,t.Constructor=9,t.Enum=10,t.Interface=11,t.Function=12,t.Variable=13,t.Constant=14,t.String=15,t.Number=16,t.Boolean=17,t.Array=18,t.Object=19,t.Key=20,t.Null=21,t.EnumMember=22,t.Struct=23,t.Event=24,t.Operator=25,t.TypeParameter=26})(Nz||(Nz={}));(function(t){t.Deprecated=1})(Iz||(Iz={}));(function(t){function e(r,i,n,a,s){let l={name:r,kind:i,location:{uri:a,range:n}};return s&&(l.containerName=s),l}o(e,"create"),t.create=e})(Mz||(Mz={}));(function(t){function e(r,i,n,a){return a!==void 0?{name:r,kind:i,location:{uri:n,range:a}}:{name:r,kind:i,location:{uri:n}}}o(e,"create"),t.create=e})(Oz||(Oz={}));(function(t){function e(i,n,a,s,l,u){let h={name:i,detail:n,kind:a,range:s,selectionRange:l};return u!==void 0&&(h.children=u),h}o(e,"create"),t.create=e;function r(i){let n=i;return n&&Xe.string(n.name)&&Xe.number(n.kind)&&Jr.is(n.range)&&Jr.is(n.selectionRange)&&(n.detail===void 0||Xe.string(n.detail))&&(n.deprecated===void 0||Xe.boolean(n.deprecated))&&(n.children===void 0||Array.isArray(n.children))&&(n.tags===void 0||Array.isArray(n.tags))}o(r,"is"),t.is=r})(Pz||(Pz={}));(function(t){t.Empty="",t.QuickFix="quickfix",t.Refactor="refactor",t.RefactorExtract="refactor.extract",t.RefactorInline="refactor.inline",t.RefactorRewrite="refactor.rewrite",t.Source="source",t.SourceOrganizeImports="source.organizeImports",t.SourceFixAll="source.fixAll"})(Bz||(Bz={}));(function(t){t.Invoked=1,t.Automatic=2})(Ek||(Ek={}));(function(t){function e(i,n,a){let s={diagnostics:i};return n!=null&&(s.only=n),a!=null&&(s.triggerKind=a),s}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.defined(n)&&Xe.typedArray(n.diagnostics,Tk.is)&&(n.only===void 0||Xe.typedArray(n.only,Xe.string))&&(n.triggerKind===void 0||n.triggerKind===Ek.Invoked||n.triggerKind===Ek.Automatic)}o(r,"is"),t.is=r})(Fz||(Fz={}));(function(t){function e(i,n,a){let s={title:i},l=!0;return typeof n=="string"?(l=!1,s.kind=n):Mm.is(n)?s.command=n:s.edit=n,l&&a!==void 0&&(s.kind=a),s}o(e,"create"),t.create=e;function r(i){let n=i;return n&&Xe.string(n.title)&&(n.diagnostics===void 0||Xe.typedArray(n.diagnostics,Tk.is))&&(n.kind===void 0||Xe.string(n.kind))&&(n.edit!==void 0||n.command!==void 0)&&(n.command===void 0||Mm.is(n.command))&&(n.isPreferred===void 0||Xe.boolean(n.isPreferred))&&(n.edit===void 0||fA.is(n.edit))}o(r,"is"),t.is=r})($z||($z={}));(function(t){function e(i,n){let a={range:i};return Xe.defined(n)&&(a.data=n),a}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.defined(n)&&Jr.is(n.range)&&(Xe.undefined(n.command)||Mm.is(n.command))}o(r,"is"),t.is=r})(zz||(zz={}));(function(t){function e(i,n){return{tabSize:i,insertSpaces:n}}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.defined(n)&&Xe.uinteger(n.tabSize)&&Xe.boolean(n.insertSpaces)}o(r,"is"),t.is=r})(Gz||(Gz={}));(function(t){function e(i,n,a){return{range:i,target:n,data:a}}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.defined(n)&&Jr.is(n.range)&&(Xe.undefined(n.target)||Xe.string(n.target))}o(r,"is"),t.is=r})(Vz||(Vz={}));(function(t){function e(i,n){return{range:i,parent:n}}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.objectLiteral(n)&&Jr.is(n.range)&&(n.parent===void 0||t.is(n.parent))}o(r,"is"),t.is=r})(qz||(qz={}));(function(t){t.namespace="namespace",t.type="type",t.class="class",t.enum="enum",t.interface="interface",t.struct="struct",t.typeParameter="typeParameter",t.parameter="parameter",t.variable="variable",t.property="property",t.enumMember="enumMember",t.event="event",t.function="function",t.method="method",t.macro="macro",t.keyword="keyword",t.modifier="modifier",t.comment="comment",t.string="string",t.number="number",t.regexp="regexp",t.operator="operator",t.decorator="decorator"})(Wz||(Wz={}));(function(t){t.declaration="declaration",t.definition="definition",t.readonly="readonly",t.static="static",t.deprecated="deprecated",t.abstract="abstract",t.async="async",t.modification="modification",t.documentation="documentation",t.defaultLibrary="defaultLibrary"})(Uz||(Uz={}));(function(t){function e(r){let i=r;return Xe.objectLiteral(i)&&(i.resultId===void 0||typeof i.resultId=="string")&&Array.isArray(i.data)&&(i.data.length===0||typeof i.data[0]=="number")}o(e,"is"),t.is=e})(Hz||(Hz={}));(function(t){function e(i,n){return{range:i,text:n}}o(e,"create"),t.create=e;function r(i){let n=i;return n!=null&&Jr.is(n.range)&&Xe.string(n.text)}o(r,"is"),t.is=r})(Yz||(Yz={}));(function(t){function e(i,n,a){return{range:i,variableName:n,caseSensitiveLookup:a}}o(e,"create"),t.create=e;function r(i){let n=i;return n!=null&&Jr.is(n.range)&&Xe.boolean(n.caseSensitiveLookup)&&(Xe.string(n.variableName)||n.variableName===void 0)}o(r,"is"),t.is=r})(jz||(jz={}));(function(t){function e(i,n){return{range:i,expression:n}}o(e,"create"),t.create=e;function r(i){let n=i;return n!=null&&Jr.is(n.range)&&(Xe.string(n.expression)||n.expression===void 0)}o(r,"is"),t.is=r})(Xz||(Xz={}));(function(t){function e(i,n){return{frameId:i,stoppedLocation:n}}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.defined(n)&&Jr.is(i.stoppedLocation)}o(r,"is"),t.is=r})(Kz||(Kz={}));(function(t){t.Type=1,t.Parameter=2;function e(r){return r===1||r===2}o(e,"is"),t.is=e})(mA||(mA={}));(function(t){function e(i){return{value:i}}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.objectLiteral(n)&&(n.tooltip===void 0||Xe.string(n.tooltip)||dv.is(n.tooltip))&&(n.location===void 0||bk.is(n.location))&&(n.command===void 0||Mm.is(n.command))}o(r,"is"),t.is=r})(gA||(gA={}));(function(t){function e(i,n,a){let s={position:i,label:n};return a!==void 0&&(s.kind=a),s}o(e,"create"),t.create=e;function r(i){let n=i;return Xe.objectLiteral(n)&&oi.is(n.position)&&(Xe.string(n.label)||Xe.typedArray(n.label,gA.is))&&(n.kind===void 0||mA.is(n.kind))&&n.textEdits===void 0||Xe.typedArray(n.textEdits,Ku.is)&&(n.tooltip===void 0||Xe.string(n.tooltip)||dv.is(n.tooltip))&&(n.paddingLeft===void 0||Xe.boolean(n.paddingLeft))&&(n.paddingRight===void 0||Xe.boolean(n.paddingRight))}o(r,"is"),t.is=r})(Qz||(Qz={}));(function(t){function e(r){return{kind:"snippet",value:r}}o(e,"createSnippet"),t.createSnippet=e})(Zz||(Zz={}));(function(t){function e(r,i,n,a){return{insertText:r,filterText:i,range:n,command:a}}o(e,"create"),t.create=e})(Jz||(Jz={}));(function(t){function e(r){return{items:r}}o(e,"create"),t.create=e})(eG||(eG={}));(function(t){t.Invoked=0,t.Automatic=1})(tG||(tG={}));(function(t){function e(r,i){return{range:r,text:i}}o(e,"create"),t.create=e})(rG||(rG={}));(function(t){function e(r,i){return{triggerKind:r,selectedCompletionInfo:i}}o(e,"create"),t.create=e})(iG||(iG={}));(function(t){function e(r){let i=r;return Xe.objectLiteral(i)&&cA.is(i.uri)&&Xe.string(i.name)}o(e,"is"),t.is=e})(nG||(nG={}));mst=[` +`,`\r +`,"\r"];(function(t){function e(a,s,l,u){return new sG(a,s,l,u)}o(e,"create"),t.create=e;function r(a){let s=a;return!!(Xe.defined(s)&&Xe.string(s.uri)&&(Xe.undefined(s.languageId)||Xe.string(s.languageId))&&Xe.uinteger(s.lineCount)&&Xe.func(s.getText)&&Xe.func(s.positionAt)&&Xe.func(s.offsetAt))}o(r,"is"),t.is=r;function i(a,s){let l=a.getText(),u=n(s,(f,d)=>{let p=f.range.start.line-d.range.start.line;return p===0?f.range.start.character-d.range.start.character:p}),h=l.length;for(let f=u.length-1;f>=0;f--){let d=u[f],p=a.offsetAt(d.range.start),m=a.offsetAt(d.range.end);if(m<=h)l=l.substring(0,p)+d.newText+l.substring(m,l.length);else throw new Error("Overlapping edit");h=p}return l}o(i,"applyEdits"),t.applyEdits=i;function n(a,s){if(a.length<=1)return a;let l=a.length/2|0,u=a.slice(0,l),h=a.slice(l);n(u,s),n(h,s);let f=0,d=0,p=0;for(;f0&&e.push(r.length),this._lineOffsets=e}return this._lineOffsets}positionAt(e){e=Math.max(Math.min(e,this._content.length),0);let r=this.getLineOffsets(),i=0,n=r.length;if(n===0)return oi.create(0,e);for(;ie?n=s:i=s+1}let a=i-1;return oi.create(a,e-r[a])}offsetAt(e){let r=this.getLineOffsets();if(e.line>=r.length)return this._content.length;if(e.line<0)return 0;let i=r[e.line],n=e.line+1"u"}o(i,"undefined"),t.undefined=i;function n(m){return m===!0||m===!1}o(n,"boolean"),t.boolean=n;function a(m){return e.call(m)==="[object String]"}o(a,"string"),t.string=a;function s(m){return e.call(m)==="[object Number]"}o(s,"number"),t.number=s;function l(m,g,y){return e.call(m)==="[object Number]"&&g<=m&&m<=y}o(l,"numberRange"),t.numberRange=l;function u(m){return e.call(m)==="[object Number]"&&-2147483648<=m&&m<=2147483647}o(u,"integer"),t.integer=u;function h(m){return e.call(m)==="[object Number]"&&0<=m&&m<=2147483647}o(h,"uinteger"),t.uinteger=h;function f(m){return e.call(m)==="[object Function]"}o(f,"func"),t.func=f;function d(m){return m!==null&&typeof m=="object"}o(d,"objectLiteral"),t.objectLiteral=d;function p(m,g){return Array.isArray(m)&&m.every(g)}o(p,"typedArray"),t.typedArray=p})(Xe||(Xe={}))});var Sk,Ak,Om,Pm,oG,mv,vA=P(()=>{"use strict";pv();Bc();Sk=class{static{o(this,"CstNodeBuilder")}constructor(){this.nodeStack=[]}get current(){return this.nodeStack[this.nodeStack.length-1]??this.rootNode}buildRootNode(e){return this.rootNode=new mv(e),this.rootNode.root=this.rootNode,this.nodeStack=[this.rootNode],this.rootNode}buildCompositeNode(e){let r=new Pm;return r.grammarSource=e,r.root=this.rootNode,this.current.content.push(r),this.nodeStack.push(r),r}buildLeafNode(e,r){let i=new Om(e.startOffset,e.image.length,Py(e),e.tokenType,!r);return i.grammarSource=r,i.root=this.rootNode,this.current.content.push(i),i}removeNode(e){let r=e.container;if(r){let i=r.content.indexOf(e);i>=0&&r.content.splice(i,1)}}addHiddenNodes(e){let r=[];for(let a of e){let s=new Om(a.startOffset,a.image.length,Py(a),a.tokenType,!0);s.root=this.rootNode,r.push(s)}let i=this.current,n=!1;if(i.content.length>0){i.content.push(...r);return}for(;i.container;){let a=i.container.content.indexOf(i);if(a>0){i.container.content.splice(a,0,...r),n=!0;break}i=i.container}n||this.rootNode.content.unshift(...r)}construct(e){let r=this.current;typeof e.$type=="string"&&!e.$infix&&(this.current.astNode=e),e.$cstNode=r;let i=this.nodeStack.pop();i?.content.length===0&&this.removeNode(i)}},Ak=class{static{o(this,"AbstractCstNode")}get hidden(){return!1}get astNode(){let e=typeof this._astNode?.$type=="string"?this._astNode:this.container?.astNode;if(!e)throw new Error("This node has no associated AST element");return e}set astNode(e){this._astNode=e}get text(){return this.root.fullText.substring(this.offset,this.end)}},Om=class extends Ak{static{o(this,"LeafCstNodeImpl")}get offset(){return this._offset}get length(){return this._length}get end(){return this._offset+this._length}get hidden(){return this._hidden}get tokenType(){return this._tokenType}get range(){return this._range}constructor(e,r,i,n,a=!1){super(),this._hidden=a,this._offset=e,this._tokenType=n,this._length=r,this._range=i}},Pm=class extends Ak{static{o(this,"CompositeCstNodeImpl")}constructor(){super(...arguments),this.content=new oG(this)}get offset(){return this.firstNonHiddenNode?.offset??0}get length(){return this.end-this.offset}get end(){return this.lastNonHiddenNode?.end??0}get range(){let e=this.firstNonHiddenNode,r=this.lastNonHiddenNode;if(e&&r){if(this._rangeCache===void 0){let{range:i}=e,{range:n}=r;this._rangeCache={start:i.start,end:n.end.line=0;e--){let r=this.content[e];if(!r.hidden)return r}return this.content[this.content.length-1]}},oG=class t extends Array{static{o(this,"CstNodeContainer")}constructor(e){super(),this.parent=e,Object.setPrototypeOf(this,t.prototype)}push(...e){return this.addParents(e),super.push(...e)}unshift(...e){return this.addParents(e),super.unshift(...e)}splice(e,r,...i){return this.addParents(i),super.splice(e,r,...i)}addParents(e){for(let r of e)r.container=this.parent}},mv=class extends Pm{static{o(this,"RootCstNodeImpl")}get text(){return this._text.substring(this.offset,this.end)}get fullText(){return this._text}constructor(e){super(),this._text="",this._text=e??""}}});function lG(t){return t.$type===xA}var xA,t2e,r2e,_k,Dk,bA,gv,Lk,gst,TA,cG,Rk=P(()=>{"use strict";ol();sp();e2e();ol();Vc();Ts();vA();xA=Symbol("Datatype");o(lG,"isDataTypeNode");t2e="\u200B",r2e=o(t=>t.endsWith(t2e)?t:t+t2e,"withRuleSuffix"),_k=class{static{o(this,"AbstractLangiumParser")}constructor(e){this._unorderedGroups=new Map,this.allRules=new Map,this.lexer=e.parser.Lexer;let r=this.lexer.definition,i=e.LanguageMetaData.mode==="production";e.shared.profilers.LangiumProfiler?.isActive("parsing")?this.wrapper=new cG(r,{...e.parser.ParserConfig,skipValidations:i,errorMessageProvider:e.parser.ParserErrorMessageProvider},e.shared.profilers.LangiumProfiler.createTask("parsing",e.LanguageMetaData.languageId)):this.wrapper=new TA(r,{...e.parser.ParserConfig,skipValidations:i,errorMessageProvider:e.parser.ParserErrorMessageProvider})}alternatives(e,r){this.wrapper.wrapOr(e,r)}optional(e,r){this.wrapper.wrapOption(e,r)}many(e,r){this.wrapper.wrapMany(e,r)}atLeastOne(e,r){this.wrapper.wrapAtLeastOne(e,r)}getRule(e){return this.allRules.get(e)}isRecording(){return this.wrapper.IS_RECORDING}get unorderedGroups(){return this._unorderedGroups}getRuleStack(){return this.wrapper.RULE_STACK}finalize(){this.wrapper.wrapSelfAnalysis()}},Dk=class extends _k{static{o(this,"LangiumParser")}get current(){return this.stack[this.stack.length-1]}constructor(e){super(e),this.nodeBuilder=new Sk,this.stack=[],this.assignmentMap=new Map,this.operatorPrecedence=new Map,this.linker=e.references.Linker,this.converter=e.parser.ValueConverter,this.astReflection=e.shared.AstReflection}rule(e,r){let i=this.computeRuleType(e),n;tp(e)&&(n=e.name,this.registerPrecedenceMap(e));let a=this.wrapper.DEFINE_RULE(r2e(e.name),this.startImplementation(i,n,r).bind(this));return this.allRules.set(e.name,a),Ba(e)&&e.entry&&(this.mainRule=a),a}registerPrecedenceMap(e){let r=e.name,i=new Map;for(let n=0;n0&&(r=this.construct()),r===void 0)throw new Error("No result from parser");if(this.stack.length>0)throw new Error("Parser stack is not empty after parsing");return r}startImplementation(e,r,i){return n=>{let a=!this.isRecording()&&e!==void 0;if(a){let s={$type:e};this.stack.push(s),e===xA?s.value="":r!==void 0&&(s.$infixName=r)}return i(n),a?this.construct():void 0}}extractHiddenTokens(e){let r=this.lexerResult.hidden;if(!r.length)return[];let i=e.startOffset;for(let n=0;ni)return r.splice(0,n);return r.splice(0,r.length)}consume(e,r,i){let n=this.wrapper.wrapConsume(e,r);if(!this.isRecording()&&this.isValidToken(n)){let a=this.extractHiddenTokens(n);this.nodeBuilder.addHiddenNodes(a);let s=this.nodeBuilder.buildLeafNode(n,i),{assignment:l,crossRef:u}=this.getAssignment(i),h=this.current;if(l){let f=Hl(i)?n.image:this.converter.convert(n.image,s);this.assign(l.operator,l.feature,f,s,u)}else if(lG(h)){let f=n.image;Hl(i)||(f=this.converter.convert(f,s).toString()),h.value+=f}}}isValidToken(e){return!e.isInsertedInRecovery&&!isNaN(e.startOffset)&&typeof e.endOffset=="number"&&!isNaN(e.endOffset)}subrule(e,r,i,n,a){let s;!this.isRecording()&&!i&&(s=this.nodeBuilder.buildCompositeNode(n));let l;try{l=this.wrapper.wrapSubrule(e,r,a)}finally{this.isRecording()||(l===void 0&&!i&&(l=this.construct()),l!==void 0&&s&&s.length>0&&this.performSubruleAssignment(l,n,s))}}performSubruleAssignment(e,r,i){let{assignment:n,crossRef:a}=this.getAssignment(r);if(n)this.assign(n.operator,n.feature,e,i,a);else if(!n){let s=this.current;if(lG(s))s.value+=e.toString();else if(typeof e=="object"&&e){let u=this.assignWithoutOverride(e,s);this.stack.pop(),this.stack.push(u)}}}action(e,r){if(!this.isRecording()){let i=this.current;if(r.feature&&r.operator){i=this.construct(),this.nodeBuilder.removeNode(i.$cstNode),this.nodeBuilder.buildCompositeNode(r).content.push(i.$cstNode);let a={$type:e};this.stack.push(a),this.assign(r.operator,r.feature,i,i.$cstNode)}else i.$type=e}}construct(){if(this.isRecording())return;let e=this.stack.pop();return this.nodeBuilder.construct(e),"$infixName"in e?this.constructInfix(e,this.operatorPrecedence.get(e.$infixName)):lG(e)?this.converter.convert(e.value,e.$cstNode):(LF(this.astReflection,e),e)}constructInfix(e,r){let i=e.parts;if(!Array.isArray(i)||i.length===0)return;let n=e.operators;if(!Array.isArray(n)||i.length<2)return i[0];let a=0,s=-1;for(let y=0;ys?(s=x.precedence,a=y):x.precedence===s&&(x.rightAssoc||(a=y))}let l=n.slice(0,a),u=n.slice(a+1),h=i.slice(0,a+1),f=i.slice(a+1),d={$infixName:e.$infixName,$type:e.$type,$cstNode:e.$cstNode,parts:h,operators:l},p={$infixName:e.$infixName,$type:e.$type,$cstNode:e.$cstNode,parts:f,operators:u},m=this.constructInfix(d,r),g=this.constructInfix(p,r);return{$type:e.$type,$cstNode:e.$cstNode,left:m,operator:n[a],right:g}}getAssignment(e){if(!this.assignmentMap.has(e)){let r=ef(e,$c);this.assignmentMap.set(e,{assignment:r,crossRef:r&&zc(r.terminal)?r.terminal.isMulti?"multi":"single":void 0})}return this.assignmentMap.get(e)}assign(e,r,i,n,a){let s=this.current,l;switch(a==="single"&&typeof i=="string"?l=this.linker.buildReference(s,r,n,i):a==="multi"&&typeof i=="string"?l=this.linker.buildMultiReference(s,r,n,i):l=i,e){case"=":{s[r]=l;break}case"?=":{s[r]=!0;break}case"+=":Array.isArray(s[r])||(s[r]=[]),s[r].push(l)}}assignWithoutOverride(e,r){for(let[n,a]of Object.entries(r)){let s=e[n];s===void 0?e[n]=a:Array.isArray(s)&&Array.isArray(a)&&(a.push(...s),e[n]=a)}let i=e.$cstNode;return i&&(i.astNode=void 0,e.$cstNode=void 0),e}get definitionErrors(){return this.wrapper.definitionErrors}},bA=class{static{o(this,"AbstractParserErrorMessageProvider")}buildMismatchTokenMessage(e){return ff.buildMismatchTokenMessage(e)}buildNotAllInputParsedMessage(e){return ff.buildNotAllInputParsedMessage(e)}buildNoViableAltMessage(e){return ff.buildNoViableAltMessage(e)}buildEarlyExitMessage(e){return ff.buildEarlyExitMessage(e)}},gv=class extends bA{static{o(this,"LangiumParserErrorMessageProvider")}buildMismatchTokenMessage({expected:e,actual:r}){return`Expecting ${e.LABEL?"`"+e.LABEL+"`":e.name.endsWith(":KW")?`keyword '${e.name.substring(0,e.name.length-3)}'`:`token of type '${e.name}'`} but found \`${r.image}\`.`}buildNotAllInputParsedMessage({firstRedundant:e}){return`Expecting end of file but found \`${e.image}\`.`}},Lk=class extends _k{static{o(this,"LangiumCompletionParser")}constructor(){super(...arguments),this.tokens=[],this.elementStack=[],this.lastElementStack=[],this.nextTokenIndex=0,this.stackSize=0}action(){}construct(){}parse(e){this.resetState();let r=this.lexer.tokenize(e,{mode:"partial"});return this.tokens=r.tokens,this.wrapper.input=[...this.tokens],this.mainRule.call(this.wrapper,{}),this.unorderedGroups.clear(),{tokens:this.tokens,elementStack:[...this.lastElementStack],tokenIndex:this.nextTokenIndex}}rule(e,r){let i=this.wrapper.DEFINE_RULE(r2e(e.name),this.startImplementation(r).bind(this));return this.allRules.set(e.name,i),e.entry&&(this.mainRule=i),i}resetState(){this.elementStack=[],this.lastElementStack=[],this.nextTokenIndex=0,this.stackSize=0}startImplementation(e){return r=>{let i=this.keepStackSize();try{e(r)}finally{this.resetStackSize(i)}}}removeUnexpectedElements(){this.elementStack.splice(this.stackSize)}keepStackSize(){let e=this.elementStack.length;return this.stackSize=e,e}resetStackSize(e){this.removeUnexpectedElements(),this.stackSize=e}consume(e,r,i){this.wrapper.wrapConsume(e,r),this.isRecording()||(this.lastElementStack=[...this.elementStack,i],this.nextTokenIndex=this.currIdx+1)}subrule(e,r,i,n,a){this.before(n),this.wrapper.wrapSubrule(e,r,a),this.after(n)}before(e){this.isRecording()||this.elementStack.push(e)}after(e){if(!this.isRecording()){let r=this.elementStack.lastIndexOf(e);r>=0&&this.elementStack.splice(r)}}get currIdx(){return this.wrapper.currIdx}},gst={recoveryEnabled:!0,nodeLocationTracking:"full",skipValidations:!0,errorMessageProvider:new gv},TA=class extends pk{static{o(this,"ChevrotainWrapper")}constructor(e,r){let i=r&&"maxLookahead"in r;super(e,{...gst,lookaheadStrategy:i?new df({maxLookahead:r.maxLookahead}):new vk({logging:r.skipValidations?()=>{}:void 0}),...r})}get IS_RECORDING(){return this.RECORDING_PHASE}DEFINE_RULE(e,r,i){return this.RULE(e,r,i)}wrapSelfAnalysis(){this.performSelfAnalysis()}wrapConsume(e,r){return this.consume(e,r,void 0)}wrapSubrule(e,r,i){return this.subrule(e,r,{ARGS:[i]})}wrapOr(e,r){this.or(e,r)}wrapOption(e,r){this.option(e,r)}wrapMany(e,r){this.many(e,r)}wrapAtLeastOne(e,r){this.atLeastOne(e,r)}rule(e){return e.call(this,{})}},cG=class extends TA{static{o(this,"ProfilerWrapper")}constructor(e,r,i){super(e,r),this.task=i}rule(e){this.task.start(),this.task.startSubTask(this.ruleName(e));try{return super.rule(e)}finally{this.task.stopSubTask(this.ruleName(e)),this.task.stop()}}ruleName(e){return e.ruleName}subrule(e,r,i){this.task.startSubTask(this.ruleName(r));try{return super.subrule(e,r,i)}finally{this.task.stopSubTask(this.ruleName(r))}}}});function Nk(t,e,r){return yst({parser:e,tokens:r,ruleNames:new Map},t),e}function yst(t,e){let r=HT(e,!1),i=jr(e.rules).filter(Ba).filter(a=>r.has(a));for(let a of i){let s={...t,consume:1,optional:1,subrule:1,many:1,or:1};t.parser.rule(a,Bm(s,a.definition))}let n=jr(e.rules).filter(tp).filter(a=>r.has(a));for(let a of n)t.parser.rule(a,vst(t,a))}function vst(t,e){let r=e.call.rule.ref;if(!r)throw new Error("Could not resolve reference to infix operator rule: "+e.call.rule.$refText);if(Xs(r))throw new Error("Cannot use terminal rule in infix expression");let i=e.operators.precedences.flatMap(m=>m.operators),n={$type:"Group",elements:[]},a={$container:n,$type:"Assignment",feature:"parts",operator:"+=",terminal:e.call},s={$container:n,$type:"Group",elements:[],cardinality:"*"};n.elements.push(a,s);let u={$container:s,$type:"Assignment",feature:"operators",operator:"+=",terminal:{$type:"Alternatives",elements:i}},h={...a,$container:s};s.elements.push(u,h);let d=i.map(m=>t.tokens[m.value]).map((m,g)=>({ALT:o(()=>t.parser.consume(g,m,u),"ALT")})),p;return m=>{p??(p=hG(t,r)),t.parser.subrule(0,p,!1,a,m),t.parser.many(0,{DEF:o(()=>{t.parser.alternatives(0,d),t.parser.subrule(1,p,!1,h,m)},"DEF")})}}function Bm(t,e,r=!1){let i;if(Hl(e))i=Est(t,e);else if(af(e))i=xst(t,e);else if($c(e))i=Bm(t,e.terminal);else if(zc(e))i=i2e(t,e);else if(Gc(e))i=bst(t,e);else if(c6(e))i=kst(t,e);else if(d6(e))i=Cst(t,e);else if(ep(e))i=wst(t,e);else if(BF(e)){let n=t.consume++;i=o(()=>t.parser.consume(n,cl,e),"method")}else throw new Tm(e.$cstNode,`Unexpected element type: ${e.$type}`);return n2e(t,r?void 0:kA(e),i,e.cardinality)}function xst(t,e){let r=ip(e);return()=>t.parser.action(r,e)}function bst(t,e){let r=e.rule.ref;if(nf(r)){let i=t.subrule++,n=Ba(r)&&r.fragment,a=e.arguments.length>0?Tst(r,e.arguments):()=>({}),s;return l=>{s??(s=hG(t,r)),t.parser.subrule(i,s,n,e,a(l))}}else if(Xs(r)){let i=t.consume++,n=uG(t,r.name);return()=>t.parser.consume(i,n,e)}else if(r)Yu(r);else throw new Tm(e.$cstNode,`Undefined rule: ${e.rule.$refText}`)}function Tst(t,e){if(e.some(i=>i.calledByName)){let i=e.map(n=>({parameterName:n.parameter?.ref?.name,predicate:Qu(n.value)}));return n=>{let a={};for(let{parameterName:s,predicate:l}of i)s&&(a[s]=l(n));return a}}else{let i=e.map(n=>Qu(n.value));return n=>{let a={};for(let s=0;se(i)||r(i)}else if(OF(t)){let e=Qu(t.left),r=Qu(t.right);return i=>e(i)&&r(i)}else if(zF(t)){let e=Qu(t.value);return r=>!e(r)}else if(GF(t)){let e=t.parameter.ref.name;return r=>r!==void 0&&r[e]===!0}else if(IF(t)){let e=!!t.true;return()=>e}Yu(t)}function kst(t,e){if(e.elements.length===1)return Bm(t,e.elements[0]);{let r=[];for(let n of e.elements){let a={ALT:Bm(t,n,!0)},s=kA(n);s&&(a.GATE=Qu(s)),r.push(a)}let i=t.or++;return n=>t.parser.alternatives(i,r.map(a=>{let s={ALT:o(()=>a.ALT(n),"ALT")},l=a.GATE;return l&&(s.GATE=()=>l(n)),s}))}}function Cst(t,e){if(e.elements.length===1)return Bm(t,e.elements[0]);let r=[];for(let l of e.elements){let u={ALT:Bm(t,l,!0)},h=kA(l);h&&(u.GATE=Qu(h)),r.push(u)}let i=t.or++,n=o((l,u)=>{let h=u.getRuleStack().join("-");return`uGroup_${l}_${h}`},"idFunc"),a=o(l=>t.parser.alternatives(i,r.map((u,h)=>{let f={ALT:o(()=>!0,"ALT")},d=t.parser;f.ALT=()=>{if(u.ALT(l),!d.isRecording()){let m=n(i,d);d.unorderedGroups.get(m)||d.unorderedGroups.set(m,[]);let g=d.unorderedGroups.get(m);typeof g?.[h]>"u"&&(g[h]=!0)}};let p=u.GATE;return p?f.GATE=()=>p(l):f.GATE=()=>!d.unorderedGroups.get(n(i,d))?.[h],f})),"alternatives"),s=n2e(t,kA(e),a,"*");return l=>{s(l),t.parser.isRecording()||t.parser.unorderedGroups.delete(n(i,t.parser))}}function wst(t,e){let r=e.elements.map(i=>Bm(t,i));return i=>r.forEach(n=>n(i))}function kA(t){if(ep(t))return t.guardCondition}function i2e(t,e,r=e.terminal){if(r)if(Gc(r)&&Ba(r.rule.ref)){let i=r.rule.ref,n=t.subrule++,a;return s=>{a??(a=hG(t,i)),t.parser.subrule(n,a,!1,e,s)}}else if(Gc(r)&&Xs(r.rule.ref)){let i=t.consume++,n=uG(t,r.rule.ref.name);return()=>t.parser.consume(i,n,e)}else if(Hl(r)){let i=t.consume++,n=uG(t,r.value);return()=>t.parser.consume(i,n,e)}else throw new Error("Could not build cross reference parser");else{if(!e.type.ref)throw new Error("Could not resolve reference to type: "+e.type.$refText);let n=b6(e.type.ref)?.terminal;if(!n)throw new Error("Could not find name assignment for type: "+ip(e.type.ref));return i2e(t,e,n)}}function Est(t,e){let r=t.consume++,i=t.tokens[e.value];if(!i)throw new Error("Could not find token for keyword: "+e.value);return()=>t.parser.consume(r,i,e)}function n2e(t,e,r,i){let n=e&&Qu(e);if(!i)if(n){let a=t.or++;return s=>t.parser.alternatives(a,[{ALT:o(()=>r(s),"ALT"),GATE:o(()=>n(s),"GATE")},{ALT:sA(),GATE:o(()=>!n(s),"GATE")}])}else return r;if(i==="*"){let a=t.many++;return s=>t.parser.many(a,{DEF:o(()=>r(s),"DEF"),GATE:n?()=>n(s):void 0})}else if(i==="+"){let a=t.many++;if(n){let s=t.or++;return l=>t.parser.alternatives(s,[{ALT:o(()=>t.parser.atLeastOne(a,{DEF:o(()=>r(l),"DEF")}),"ALT"),GATE:o(()=>n(l),"GATE")},{ALT:sA(),GATE:o(()=>!n(l),"GATE")}])}else return s=>t.parser.atLeastOne(a,{DEF:o(()=>r(s),"DEF")})}else if(i==="?"){let a=t.optional++;return s=>t.parser.optional(a,{DEF:o(()=>r(s),"DEF"),GATE:n?()=>n(s):void 0})}else Yu(i)}function hG(t,e){let r=Sst(t,e),i=t.parser.getRule(r);if(!i)throw new Error(`Rule "${r}" not found."`);return i}function Sst(t,e){if(nf(e))return e.name;if(t.ruleNames.has(e))return t.ruleNames.get(e);{let r=e,i=r.$container,n=e.$type;for(;!Ba(i);)(ep(i)||c6(i)||d6(i))&&(n=i.elements.indexOf(r).toString()+":"+n),r=i,i=i.$container;return n=i.name+":"+n,t.ruleNames.set(e,n),n}}function uG(t,e){let r=t.tokens[e];if(!r)throw new Error(`Token "${e}" not found."`);return r}var CA=P(()=>{"use strict";sp();ol();g6();Ys();Vc();o(Nk,"createParser");o(yst,"buildRules");o(vst,"buildInfixRule");o(Bm,"buildElement");o(xst,"buildAction");o(bst,"buildRuleCall");o(Tst,"buildRuleCallPredicate");o(Qu,"buildPredicate");o(kst,"buildAlternatives");o(Cst,"buildUnorderedGroup");o(wst,"buildGroup");o(kA,"getGuardCondition");o(i2e,"buildCrossReference");o(Est,"buildKeyword");o(n2e,"wrap");o(hG,"getRule");o(Sst,"getRuleName");o(uG,"getToken")});function fG(t){let e=t.Grammar,r=t.parser.Lexer,i=new Lk(t);return Nk(e,i,r.definition),i.finalize(),i}var dG=P(()=>{"use strict";Rk();CA();o(fG,"createCompletionParser")});function pG(t){let e=a2e(t);return e.finalize(),e}function a2e(t){let e=t.Grammar,r=t.parser.Lexer,i=new Dk(t);return Nk(e,i,r.definition)}var mG=P(()=>{"use strict";Rk();CA();o(pG,"createLangiumParser");o(a2e,"prepareLangiumParser")});var mf,wA=P(()=>{"use strict";sp();ol();Ts();Vc();Fy();Ys();mf=class{static{o(this,"DefaultTokenBuilder")}constructor(){this.diagnostics=[]}buildTokens(e,r){let i=jr(HT(e,!1)),n=this.buildTerminalTokens(i),a=this.buildKeywordTokens(i,n,r);return a.push(...n),a}flushLexingReport(e){return{diagnostics:this.popDiagnostics()}}popDiagnostics(){let e=[...this.diagnostics];return this.diagnostics=[],e}buildTerminalTokens(e){return e.filter(Xs).filter(r=>!r.fragment).map(r=>this.buildTerminalToken(r)).toArray()}buildTerminalToken(e){let r=$y(e),i=this.requiresCustomPattern(r)?this.regexPatternFunction(r):r,n={name:e.name,PATTERN:i};return typeof i=="function"&&(n.LINE_BREAKS=!0),e.hidden&&(n.GROUP=UT(r)?yn.SKIPPED:"hidden"),n}requiresCustomPattern(e){return!!(e.flags.includes("u")||e.flags.includes("s"))}regexPatternFunction(e){let r=new RegExp(e,e.flags+"y");return(i,n)=>(r.lastIndex=n,r.exec(i))}buildKeywordTokens(e,r,i){return e.filter(nf).flatMap(n=>Pc(n).filter(Hl)).distinct(n=>n.value).toArray().sort((n,a)=>a.value.length-n.value.length).map(n=>this.buildKeywordToken(n,r,!!i?.caseInsensitive))}buildKeywordToken(e,r,i){let n=this.buildKeywordPattern(e,i),a={name:e.value,PATTERN:n,LONGER_ALT:this.findLongerAlt(e,r)};return typeof n=="function"&&(a.LINE_BREAKS=!0),a}buildKeywordPattern(e,r){return r?new RegExp(rp(e.value),"i"):e.value}findLongerAlt(e,r){return r.reduce((i,n)=>{let a=n?.PATTERN;return a?.source&&s$("^"+a.source+"$",e.value)&&i.push(n),i},[])}}});var Fm,Zu,gG=P(()=>{"use strict";ol();Vc();Fm=class{static{o(this,"DefaultValueConverter")}convert(e,r){let i=r.grammarSource;if(zc(i)&&(i=c$(i)),Gc(i)){let n=i.rule.ref;if(!n)throw new Error("This cst node was not parsed by a rule.");return this.runConverter(n,e,r)}return e}runConverter(e,r,i){switch(e.name.toUpperCase()){case"INT":return Zu.convertInt(r);case"STRING":return Zu.convertString(r);case"ID":return Zu.convertID(r)}switch(g$(e)?.toLowerCase()){case"number":return Zu.convertNumber(r);case"boolean":return Zu.convertBoolean(r);case"bigint":return Zu.convertBigint(r);case"date":return Zu.convertDate(r);default:return r}}};(function(t){function e(h){let f="";for(let d=1;d{"use strict";Object.defineProperty(xG,"__esModule",{value:!0});var yG;function vG(){if(yG===void 0)throw new Error("No runtime abstraction layer installed");return yG}o(vG,"RAL");(function(t){function e(r){if(r===void 0)throw new Error("No runtime abstraction layer provided");yG=r}o(e,"install"),t.install=e})(vG||(vG={}));xG.default=vG});var yv=ar(ks=>{"use strict";Object.defineProperty(ks,"__esModule",{value:!0});ks.stringArray=ks.array=ks.func=ks.error=ks.number=ks.string=ks.boolean=void 0;function Ast(t){return t===!0||t===!1}o(Ast,"boolean");ks.boolean=Ast;function s2e(t){return typeof t=="string"||t instanceof String}o(s2e,"string");ks.string=s2e;function _st(t){return typeof t=="number"||t instanceof Number}o(_st,"number");ks.number=_st;function Dst(t){return t instanceof Error}o(Dst,"error");ks.error=Dst;function Lst(t){return typeof t=="function"}o(Lst,"func");ks.func=Lst;function o2e(t){return Array.isArray(t)}o(o2e,"array");ks.array=o2e;function Rst(t){return o2e(t)&&t.every(e=>s2e(e))}o(Rst,"stringArray");ks.stringArray=Rst});var $m=ar(vv=>{"use strict";Object.defineProperty(vv,"__esModule",{value:!0});vv.Emitter=vv.Event=void 0;var Nst=cp(),l2e;(function(t){let e={dispose(){}};t.None=function(){return e}})(l2e||(vv.Event=l2e={}));var bG=class{static{o(this,"CallbackList")}add(e,r=null,i){this._callbacks||(this._callbacks=[],this._contexts=[]),this._callbacks.push(e),this._contexts.push(r),Array.isArray(i)&&i.push({dispose:o(()=>this.remove(e,r),"dispose")})}remove(e,r=null){if(!this._callbacks)return;let i=!1;for(let n=0,a=this._callbacks.length;n{this._callbacks||(this._callbacks=new bG),this._options&&this._options.onFirstListenerAdd&&this._callbacks.isEmpty()&&this._options.onFirstListenerAdd(this),this._callbacks.add(e,r);let n={dispose:o(()=>{this._callbacks&&(this._callbacks.remove(e,r),n.dispose=t._noop,this._options&&this._options.onLastListenerRemove&&this._callbacks.isEmpty()&&this._options.onLastListenerRemove(this))},"dispose")};return Array.isArray(i)&&i.push(n),n}),this._event}fire(e){this._callbacks&&this._callbacks.invoke.call(this._callbacks,e)}dispose(){this._callbacks&&(this._callbacks.dispose(),this._callbacks=void 0)}};vv.Emitter=EA;EA._noop=function(){}});var Ik=ar(xv=>{"use strict";Object.defineProperty(xv,"__esModule",{value:!0});xv.CancellationTokenSource=xv.CancellationToken=void 0;var Ist=cp(),Mst=yv(),TG=$m(),SA;(function(t){t.None=Object.freeze({isCancellationRequested:!1,onCancellationRequested:TG.Event.None}),t.Cancelled=Object.freeze({isCancellationRequested:!0,onCancellationRequested:TG.Event.None});function e(r){let i=r;return i&&(i===t.None||i===t.Cancelled||Mst.boolean(i.isCancellationRequested)&&!!i.onCancellationRequested)}o(e,"is"),t.is=e})(SA||(xv.CancellationToken=SA={}));var Ost=Object.freeze(function(t,e){let r=(0,Ist.default)().timer.setTimeout(t.bind(e),0);return{dispose(){r.dispose()}}}),AA=class{static{o(this,"MutableToken")}constructor(){this._isCancelled=!1}cancel(){this._isCancelled||(this._isCancelled=!0,this._emitter&&(this._emitter.fire(void 0),this.dispose()))}get isCancellationRequested(){return this._isCancelled}get onCancellationRequested(){return this._isCancelled?Ost:(this._emitter||(this._emitter=new TG.Emitter),this._emitter.event)}dispose(){this._emitter&&(this._emitter.dispose(),this._emitter=void 0)}},kG=class{static{o(this,"CancellationTokenSource")}get token(){return this._token||(this._token=new AA),this._token}cancel(){this._token?this._token.cancel():this._token=SA.Cancelled}dispose(){this._token?this._token instanceof AA&&this._token.dispose():this._token=SA.None}};xv.CancellationTokenSource=kG});var $r={};var Yl=P(()=>{"use strict";Kr($r,Wa(Ik(),1))});function CG(){return new Promise(t=>{typeof setImmediate>"u"?setTimeout(t,0):setImmediate(t)})}function DA(){return _A=performance.now(),new $r.CancellationTokenSource}function u2e(t){c2e=t}function Ju(t){return t===jl}async function Dn(t){if(t===$r.CancellationToken.None)return;let e=performance.now();if(e-_A>=c2e&&(_A=e,await CG(),_A=performance.now()),t.isCancellationRequested)throw jl}var _A,c2e,jl,eo,Xl=P(()=>{"use strict";Yl();o(CG,"delayNextTick");_A=0,c2e=10;o(DA,"startCancelableOperation");o(u2e,"setInterruptionPeriod");jl=Symbol("OperationCancelled");o(Ju,"isOperationCancelled");o(Dn,"interruptAndCheck");eo=class{static{o(this,"Deferred")}constructor(){this.promise=new Promise((e,r)=>{this.resolve=i=>(e(i),this),this.reject=i=>(r(i),this)})}}});function wG(t,e){if(t.length<=1)return t;let r=t.length/2|0,i=t.slice(0,r),n=t.slice(r);wG(i,e),wG(n,e);let a=0,s=0,l=0;for(;ar.line||e.line===r.line&&e.character>r.character?{start:r,end:e}:t}function Pst(t){let e=d2e(t.range);return e!==t.range?{newText:t.newText,range:e}:t}var LA,bv,p2e=P(()=>{"use strict";LA=class t{static{o(this,"FullTextDocument")}constructor(e,r,i,n){this._uri=e,this._languageId=r,this._version=i,this._content=n,this._lineOffsets=void 0}get uri(){return this._uri}get languageId(){return this._languageId}get version(){return this._version}getText(e){if(e){let r=this.offsetAt(e.start),i=this.offsetAt(e.end);return this._content.substring(r,i)}return this._content}update(e,r){for(let i of e)if(t.isIncremental(i)){let n=d2e(i.range),a=this.offsetAt(n.start),s=this.offsetAt(n.end);this._content=this._content.substring(0,a)+i.text+this._content.substring(s,this._content.length);let l=Math.max(n.start.line,0),u=Math.max(n.end.line,0),h=this._lineOffsets,f=h2e(i.text,!1,a);if(u-l===f.length)for(let p=0,m=f.length;pe?n=s:i=s+1}let a=i-1;return e=this.ensureBeforeEOL(e,r[a]),{line:a,character:e-r[a]}}offsetAt(e){let r=this.getLineOffsets();if(e.line>=r.length)return this._content.length;if(e.line<0)return 0;let i=r[e.line];if(e.character<=0)return i;let n=e.line+1r&&f2e(this._content.charCodeAt(e-1));)e--;return e}get lineCount(){return this.getLineOffsets().length}static isIncremental(e){let r=e;return r!=null&&typeof r.text=="string"&&r.range!==void 0&&(r.rangeLength===void 0||typeof r.rangeLength=="number")}static isFull(e){let r=e;return r!=null&&typeof r.text=="string"&&r.range===void 0&&r.rangeLength===void 0}};(function(t){function e(n,a,s,l){return new LA(n,a,s,l)}o(e,"create"),t.create=e;function r(n,a,s){if(n instanceof LA)return n.update(a,s),n;throw new Error("TextDocument.update: document must be created by TextDocument.create")}o(r,"update"),t.update=r;function i(n,a){let s=n.getText(),l=wG(a.map(Pst),(f,d)=>{let p=f.range.start.line-d.range.start.line;return p===0?f.range.start.character-d.range.start.character:p}),u=0,h=[];for(let f of l){let d=n.offsetAt(f.range.start);if(du&&h.push(s.substring(u,d)),f.newText.length&&h.push(f.newText),u=n.offsetAt(f.range.end)}return h.push(s.substr(u)),h.join("")}o(i,"applyEdits"),t.applyEdits=i})(bv||(bv={}));o(wG,"mergeSort");o(h2e,"computeLineOffsets");o(f2e,"isEOL");o(d2e,"getWellformedRange");o(Pst,"getWellformedEdit")});var m2e,va,Tv,EG=P(()=>{"use strict";(()=>{"use strict";var t={975:I=>{function A(N){if(typeof N!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(N))}o(A,"e");function _(N,R){for(var B,O="",$=0,z=-1,F=0,V=0;V<=N.length;++V){if(V2){var H=O.lastIndexOf("/");if(H!==O.length-1){H===-1?(O="",$=0):$=(O=O.slice(0,H)).length-1-O.lastIndexOf("/"),z=V,F=0;continue}}else if(O.length===2||O.length===1){O="",$=0,z=V,F=0;continue}}R&&(O.length>0?O+="/..":O="..",$=2)}else O.length>0?O+="/"+N.slice(z+1,V):O=N.slice(z+1,V),$=V-z-1;z=V,F=0}else B===46&&F!==-1?++F:F=-1}return O}o(_,"r");var D={resolve:o(function(){for(var N,R="",B=!1,O=arguments.length-1;O>=-1&&!B;O--){var $;O>=0?$=arguments[O]:(N===void 0&&(N=process.cwd()),$=N),A($),$.length!==0&&(R=$+"/"+R,B=$.charCodeAt(0)===47)}return R=_(R,!B),B?R.length>0?"/"+R:"/":R.length>0?R:"."},"resolve"),normalize:o(function(N){if(A(N),N.length===0)return".";var R=N.charCodeAt(0)===47,B=N.charCodeAt(N.length-1)===47;return(N=_(N,!R)).length!==0||R||(N="."),N.length>0&&B&&(N+="/"),R?"/"+N:N},"normalize"),isAbsolute:o(function(N){return A(N),N.length>0&&N.charCodeAt(0)===47},"isAbsolute"),join:o(function(){if(arguments.length===0)return".";for(var N,R=0;R0&&(N===void 0?N=B:N+="/"+B)}return N===void 0?".":D.normalize(N)},"join"),relative:o(function(N,R){if(A(N),A(R),N===R||(N=D.resolve(N))===(R=D.resolve(R)))return"";for(var B=1;BV){if(R.charCodeAt(z+X)===47)return R.slice(z+X+1);if(X===0)return R.slice(z+X)}else $>V&&(N.charCodeAt(B+X)===47?H=X:X===0&&(H=0));break}var W=N.charCodeAt(B+X);if(W!==R.charCodeAt(z+X))break;W===47&&(H=X)}var Z="";for(X=B+H+1;X<=O;++X)X!==O&&N.charCodeAt(X)!==47||(Z.length===0?Z+="..":Z+="/..");return Z.length>0?Z+R.slice(z+H):(z+=H,R.charCodeAt(z)===47&&++z,R.slice(z))},"relative"),_makeLong:o(function(N){return N},"_makeLong"),dirname:o(function(N){if(A(N),N.length===0)return".";for(var R=N.charCodeAt(0),B=R===47,O=-1,$=!0,z=N.length-1;z>=1;--z)if((R=N.charCodeAt(z))===47){if(!$){O=z;break}}else $=!1;return O===-1?B?"/":".":B&&O===1?"//":N.slice(0,O)},"dirname"),basename:o(function(N,R){if(R!==void 0&&typeof R!="string")throw new TypeError('"ext" argument must be a string');A(N);var B,O=0,$=-1,z=!0;if(R!==void 0&&R.length>0&&R.length<=N.length){if(R.length===N.length&&R===N)return"";var F=R.length-1,V=-1;for(B=N.length-1;B>=0;--B){var H=N.charCodeAt(B);if(H===47){if(!z){O=B+1;break}}else V===-1&&(z=!1,V=B+1),F>=0&&(H===R.charCodeAt(F)?--F==-1&&($=B):(F=-1,$=V))}return O===$?$=V:$===-1&&($=N.length),N.slice(O,$)}for(B=N.length-1;B>=0;--B)if(N.charCodeAt(B)===47){if(!z){O=B+1;break}}else $===-1&&(z=!1,$=B+1);return $===-1?"":N.slice(O,$)},"basename"),extname:o(function(N){A(N);for(var R=-1,B=0,O=-1,$=!0,z=0,F=N.length-1;F>=0;--F){var V=N.charCodeAt(F);if(V!==47)O===-1&&($=!1,O=F+1),V===46?R===-1?R=F:z!==1&&(z=1):R!==-1&&(z=-1);else if(!$){B=F+1;break}}return R===-1||O===-1||z===0||z===1&&R===O-1&&R===B+1?"":N.slice(R,O)},"extname"),format:o(function(N){if(N===null||typeof N!="object")throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof N);return(function(R,B){var O=B.dir||B.root,$=B.base||(B.name||"")+(B.ext||"");return O?O===B.root?O+$:O+"/"+$:$})(0,N)},"format"),parse:o(function(N){A(N);var R={root:"",dir:"",base:"",ext:"",name:""};if(N.length===0)return R;var B,O=N.charCodeAt(0),$=O===47;$?(R.root="/",B=1):B=0;for(var z=-1,F=0,V=-1,H=!0,X=N.length-1,W=0;X>=B;--X)if((O=N.charCodeAt(X))!==47)V===-1&&(H=!1,V=X+1),O===46?z===-1?z=X:W!==1&&(W=1):z!==-1&&(W=-1);else if(!H){F=X+1;break}return z===-1||V===-1||W===0||W===1&&z===V-1&&z===F+1?V!==-1&&(R.base=R.name=F===0&&$?N.slice(1,V):N.slice(F,V)):(F===0&&$?(R.name=N.slice(1,z),R.base=N.slice(1,V)):(R.name=N.slice(F,z),R.base=N.slice(F,V)),R.ext=N.slice(z,V)),F>0?R.dir=N.slice(0,F-1):$&&(R.dir="/"),R},"parse"),sep:"/",delimiter:":",win32:null,posix:null};D.posix=D,I.exports=D}},e={};function r(I){var A=e[I];if(A!==void 0)return A.exports;var _=e[I]={exports:{}};return t[I](_,_.exports,r),_.exports}o(r,"r"),r.d=(I,A)=>{for(var _ in A)r.o(A,_)&&!r.o(I,_)&&Object.defineProperty(I,_,{enumerable:!0,get:A[_]})},r.o=(I,A)=>Object.prototype.hasOwnProperty.call(I,A),r.r=I=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(I,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(I,"__esModule",{value:!0})};var i={};let n;r.r(i),r.d(i,{URI:o(()=>p,"URI"),Utils:o(()=>M,"Utils")}),typeof process=="object"?n=process.platform==="win32":typeof navigator=="object"&&(n=navigator.userAgent.indexOf("Windows")>=0);let a=/^\w[\w\d+.-]*$/,s=/^\//,l=/^\/\//;function u(I,A){if(!I.scheme&&A)throw new Error(`[UriError]: Scheme is missing: {scheme: "", authority: "${I.authority}", path: "${I.path}", query: "${I.query}", fragment: "${I.fragment}"}`);if(I.scheme&&!a.test(I.scheme))throw new Error("[UriError]: Scheme contains illegal characters.");if(I.path){if(I.authority){if(!s.test(I.path))throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash ("/") character')}else if(l.test(I.path))throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters ("//")')}}o(u,"a");let h="",f="/",d=/^(([^:/?#]+?):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/;class p{static{o(this,"l")}static isUri(A){return A instanceof p||!!A&&typeof A.authority=="string"&&typeof A.fragment=="string"&&typeof A.path=="string"&&typeof A.query=="string"&&typeof A.scheme=="string"&&typeof A.fsPath=="string"&&typeof A.with=="function"&&typeof A.toString=="function"}scheme;authority;path;query;fragment;constructor(A,_,D,N,R,B=!1){typeof A=="object"?(this.scheme=A.scheme||h,this.authority=A.authority||h,this.path=A.path||h,this.query=A.query||h,this.fragment=A.fragment||h):(this.scheme=(function(O,$){return O||$?O:"file"})(A,B),this.authority=_||h,this.path=(function(O,$){switch(O){case"https":case"http":case"file":$?$[0]!==f&&($=f+$):$=f}return $})(this.scheme,D||h),this.query=N||h,this.fragment=R||h,u(this,B))}get fsPath(){return b(this,!1)}with(A){if(!A)return this;let{scheme:_,authority:D,path:N,query:R,fragment:B}=A;return _===void 0?_=this.scheme:_===null&&(_=h),D===void 0?D=this.authority:D===null&&(D=h),N===void 0?N=this.path:N===null&&(N=h),R===void 0?R=this.query:R===null&&(R=h),B===void 0?B=this.fragment:B===null&&(B=h),_===this.scheme&&D===this.authority&&N===this.path&&R===this.query&&B===this.fragment?this:new g(_,D,N,R,B)}static parse(A,_=!1){let D=d.exec(A);return D?new g(D[2]||h,C(D[4]||h),C(D[5]||h),C(D[7]||h),C(D[9]||h),_):new g(h,h,h,h,h)}static file(A){let _=h;if(n&&(A=A.replace(/\\/g,f)),A[0]===f&&A[1]===f){let D=A.indexOf(f,2);D===-1?(_=A.substring(2),A=f):(_=A.substring(2,D),A=A.substring(D)||f)}return new g("file",_,A,h,h)}static from(A){let _=new g(A.scheme,A.authority,A.path,A.query,A.fragment);return u(_,!0),_}toString(A=!1){return T(this,A)}toJSON(){return this}static revive(A){if(A){if(A instanceof p)return A;{let _=new g(A);return _._formatted=A.external,_._fsPath=A._sep===m?A.fsPath:null,_}}return A}}let m=n?1:void 0;class g extends p{static{o(this,"d")}_formatted=null;_fsPath=null;get fsPath(){return this._fsPath||(this._fsPath=b(this,!1)),this._fsPath}toString(A=!1){return A?T(this,!0):(this._formatted||(this._formatted=T(this,!1)),this._formatted)}toJSON(){let A={$mid:1};return this._fsPath&&(A.fsPath=this._fsPath,A._sep=m),this._formatted&&(A.external=this._formatted),this.path&&(A.path=this.path),this.scheme&&(A.scheme=this.scheme),this.authority&&(A.authority=this.authority),this.query&&(A.query=this.query),this.fragment&&(A.fragment=this.fragment),A}}let y={58:"%3A",47:"%2F",63:"%3F",35:"%23",91:"%5B",93:"%5D",64:"%40",33:"%21",36:"%24",38:"%26",39:"%27",40:"%28",41:"%29",42:"%2A",43:"%2B",44:"%2C",59:"%3B",61:"%3D",32:"%20"};function v(I,A,_){let D,N=-1;for(let R=0;R=97&&B<=122||B>=65&&B<=90||B>=48&&B<=57||B===45||B===46||B===95||B===126||A&&B===47||_&&B===91||_&&B===93||_&&B===58)N!==-1&&(D+=encodeURIComponent(I.substring(N,R)),N=-1),D!==void 0&&(D+=I.charAt(R));else{D===void 0&&(D=I.substr(0,R));let O=y[B];O!==void 0?(N!==-1&&(D+=encodeURIComponent(I.substring(N,R)),N=-1),D+=O):N===-1&&(N=R)}}return N!==-1&&(D+=encodeURIComponent(I.substring(N))),D!==void 0?D:I}o(v,"m");function x(I){let A;for(let _=0;_1&&I.scheme==="file"?`//${I.authority}${I.path}`:I.path.charCodeAt(0)===47&&(I.path.charCodeAt(1)>=65&&I.path.charCodeAt(1)<=90||I.path.charCodeAt(1)>=97&&I.path.charCodeAt(1)<=122)&&I.path.charCodeAt(2)===58?A?I.path.substr(1):I.path[1].toLowerCase()+I.path.substr(2):I.path,n&&(_=_.replace(/\//g,"\\")),_}o(b,"v");function T(I,A){let _=A?x:v,D="",{scheme:N,authority:R,path:B,query:O,fragment:$}=I;if(N&&(D+=N,D+=":"),(R||N==="file")&&(D+=f,D+=f),R){let z=R.indexOf("@");if(z!==-1){let F=R.substr(0,z);R=R.substr(z+1),z=F.lastIndexOf(":"),z===-1?D+=_(F,!1,!1):(D+=_(F.substr(0,z),!1,!1),D+=":",D+=_(F.substr(z+1),!1,!0)),D+="@"}R=R.toLowerCase(),z=R.lastIndexOf(":"),z===-1?D+=_(R,!1,!0):(D+=_(R.substr(0,z),!1,!0),D+=R.substr(z))}if(B){if(B.length>=3&&B.charCodeAt(0)===47&&B.charCodeAt(2)===58){let z=B.charCodeAt(1);z>=65&&z<=90&&(B=`/${String.fromCharCode(z+32)}:${B.substr(3)}`)}else if(B.length>=2&&B.charCodeAt(1)===58){let z=B.charCodeAt(0);z>=65&&z<=90&&(B=`${String.fromCharCode(z+32)}:${B.substr(2)}`)}D+=_(B,!0,!1)}return O&&(D+="?",D+=_(O,!1,!1)),$&&(D+="#",D+=A?$:v($,!1,!1)),D}o(T,"b");function w(I){try{return decodeURIComponent(I)}catch{return I.length>3?I.substr(0,3)+w(I.substr(3)):I}}o(w,"C");let k=/(%[0-9A-Za-z][0-9A-Za-z])+/g;function C(I){return I.match(k)?I.replace(k,(A=>w(A))):I}o(C,"w");var E=r(975);let S=E.posix||E,L="/";var M;(function(I){I.joinPath=function(A,..._){return A.with({path:S.join(A.path,..._)})},I.resolvePath=function(A,..._){let D=A.path,N=!1;D[0]!==L&&(D=L+D,N=!0);let R=S.resolve(D,..._);return N&&R[0]===L&&!A.authority&&(R=R.substring(1)),A.with({path:R})},I.dirname=function(A){if(A.path.length===0||A.path===L)return A;let _=S.dirname(A.path);return _.length===1&&_.charCodeAt(0)===46&&(_=""),A.with({path:_})},I.basename=function(A){return S.basename(A.path)},I.extname=function(A){return S.extname(A.path)}})(M||(M={})),m2e=i})();({URI:va,Utils:Tv}=m2e)});var Vn,kv,Wc=P(()=>{"use strict";EG();(function(t){t.basename=Tv.basename,t.dirname=Tv.dirname,t.extname=Tv.extname,t.joinPath=Tv.joinPath,t.resolvePath=Tv.resolvePath;let e=typeof process=="object"&&process?.platform==="win32";function r(s,l){return s?.toString()===l?.toString()}o(r,"equals"),t.equals=r;function i(s,l){let u=typeof s=="string"?va.parse(s).path:s.path,h=typeof l=="string"?va.parse(l).path:l.path,f=u.split("/").filter(y=>y.length>0),d=h.split("/").filter(y=>y.length>0);if(e){let y=/^[A-Z]:$/;if(f[0]&&y.test(f[0])&&(f[0]=f[0].toLowerCase()),d[0]&&y.test(d[0])&&(d[0]=d[0].toLowerCase()),f[0]!==d[0])return h.substring(1)}let p=0;for(;p({name:n.name,uri:Vn.joinPath(va.parse(r),n.name).toString(),element:n.element})):[]}all(){return this.collectValues(this.root)}findAll(e){let r=this.getNode(Vn.normalize(e),!1);return r?this.collectValues(r):[]}getNode(e,r){let i=e.split("/");e.charAt(e.length-1)==="/"&&i.pop();let n=this.root;for(let a of i){let s=n.children.get(a);if(!s)if(r)s={name:a,children:new Map,parent:n},n.children.set(a,s);else return;n=s}return n}collectValues(e){let r=[];e.element&&r.push(e.element);for(let i of e.children.values())r.push(...this.collectValues(i));return r}}});var Ur,Mk,Ok,Cv=P(()=>{"use strict";p2e();Cv();Yl();Ys();Wc();(function(t){t[t.Changed=0]="Changed",t[t.Parsed=1]="Parsed",t[t.IndexedContent=2]="IndexedContent",t[t.ComputedScopes=3]="ComputedScopes",t[t.Linked=4]="Linked",t[t.IndexedReferences=5]="IndexedReferences",t[t.Validated=6]="Validated"})(Ur||(Ur={}));Mk=class{static{o(this,"DefaultLangiumDocumentFactory")}constructor(e){this.serviceRegistry=e.ServiceRegistry,this.textDocuments=e.workspace.TextDocuments,this.fileSystemProvider=e.workspace.FileSystemProvider}async fromUri(e,r=$r.CancellationToken.None){let i=await this.fileSystemProvider.readFile(e);return this.createAsync(e,i,r)}fromTextDocument(e,r,i){return r=r??va.parse(e.uri),$r.CancellationToken.is(i)?this.createAsync(r,e,i):this.create(r,e,i)}fromString(e,r,i){return $r.CancellationToken.is(i)?this.createAsync(r,e,i):this.create(r,e,i)}fromModel(e,r){return this.create(r,{$model:e})}create(e,r,i){if(typeof r=="string"){let n=this.parse(e,r,i);return this.createLangiumDocument(n,e,void 0,r)}else if("$model"in r){let n={value:r.$model,parserErrors:[],lexerErrors:[]};return this.createLangiumDocument(n,e)}else{let n=this.parse(e,r.getText(),i);return this.createLangiumDocument(n,e,r)}}async createAsync(e,r,i){if(typeof r=="string"){let n=await this.parseAsync(e,r,i);return this.createLangiumDocument(n,e,void 0,r)}else{let n=await this.parseAsync(e,r.getText(),i);return this.createLangiumDocument(n,e,r)}}createLangiumDocument(e,r,i,n){let a;if(i)a={parseResult:e,uri:r,state:Ur.Parsed,references:[],textDocument:i};else{let s=this.createTextDocumentGetter(r,n);a={parseResult:e,uri:r,state:Ur.Parsed,references:[],get textDocument(){return s()}}}return e.value.$document=a,a}async update(e,r){let i=e.parseResult.value.$cstNode?.root.fullText,n=this.textDocuments?.get(e.uri.toString()),a=n?n.getText():await this.fileSystemProvider.readFile(e.uri);if(n)Object.defineProperty(e,"textDocument",{value:n});else{let s=this.createTextDocumentGetter(e.uri,a);Object.defineProperty(e,"textDocument",{get:s})}return i!==a&&(e.parseResult=await this.parseAsync(e.uri,a,r),e.parseResult.value.$document=e),e.state=Ur.Parsed,e}parse(e,r,i){return this.serviceRegistry.getServices(e).parser.LangiumParser.parse(r,i)}parseAsync(e,r,i){return this.serviceRegistry.getServices(e).parser.AsyncParser.parse(r,i)}createTextDocumentGetter(e,r){let i=this.serviceRegistry,n;return()=>n??(n=bv.create(e.toString(),i.getServices(e).LanguageMetaData.languageId,0,r??""))}},Ok=class{static{o(this,"DefaultLangiumDocuments")}constructor(e){this.documentTrie=new kv,this.services=e,this.langiumDocumentFactory=e.workspace.LangiumDocumentFactory,this.documentBuilder=()=>e.workspace.DocumentBuilder}get all(){return jr(this.documentTrie.all())}addDocument(e){let r=e.uri.toString();if(this.documentTrie.has(r))throw new Error(`A document with the URI '${r}' is already present.`);this.documentTrie.insert(r,e)}getDocument(e){let r=e.toString();return this.documentTrie.find(r)}getDocuments(e){let r=e.toString();return this.documentTrie.findAll(r)}async getOrCreateDocument(e,r){let i=this.getDocument(e);return i||(i=await this.langiumDocumentFactory.fromUri(e,r),this.addDocument(i),i)}createDocument(e,r,i){if(i)return this.langiumDocumentFactory.fromString(r,e,i).then(n=>(this.addDocument(n),n));{let n=this.langiumDocumentFactory.fromString(r,e);return this.addDocument(n),n}}hasDocument(e){return this.documentTrie.has(e.toString())}invalidateDocument(e){let r=e.toString(),i=this.documentTrie.find(r);return i&&this.documentBuilder().resetToState(i,Ur.Changed),i}deleteDocument(e){let r=e.toString(),i=this.documentTrie.find(r);return i&&(i.state=Ur.Changed,this.documentTrie.delete(r)),i}deleteDocuments(e){let r=e.toString(),i=this.documentTrie.findAll(r);for(let n of i)n.state=Ur.Changed;return this.documentTrie.delete(r),i}}});var zm,Pk,SG=P(()=>{"use strict";Yl();Oc();Ts();Xl();Cv();zm=Symbol("RefResolving"),Pk=class{static{o(this,"DefaultLinker")}constructor(e){this.reflection=e.shared.AstReflection,this.langiumDocuments=()=>e.shared.workspace.LangiumDocuments,this.scopeProvider=e.references.ScopeProvider,this.astNodeLocator=e.workspace.AstNodeLocator,this.profiler=e.shared.profilers.LangiumProfiler,this.languageId=e.LanguageMetaData.languageId}async link(e,r=$r.CancellationToken.None){if(this.profiler?.isActive("linking")){let i=this.profiler.createTask("linking",this.languageId);i.start();try{for(let n of js(e.parseResult.value))await Dn(r),jd(n).forEach(a=>{let s=`${n.$type}:${a.property}`;i.startSubTask(s);try{this.doLink(a,e)}finally{i.stopSubTask(s)}})}finally{i.stop()}}else for(let i of js(e.parseResult.value))await Dn(r),jd(i).forEach(n=>this.doLink(n,e))}doLink(e,r){let i=e.reference;if("_ref"in i&&i._ref===void 0){i._ref=zm;try{let n=this.getCandidate(e);if(om(n))i._ref=n;else{i._nodeDescription=n;let a=this.loadAstNode(n);i._ref=a??this.createLinkingError(e,n)}}catch(n){console.error(`An error occurred while resolving reference to '${i.$refText}':`,n);let a=n.message??String(n);i._ref={info:e,message:`An error occurred while resolving reference to '${i.$refText}': ${a}`}}r.references.push(i)}else if("_items"in i&&i._items===void 0){i._items=zm;try{let n=this.getCandidates(e),a=[];if(om(n))i._linkingError=n;else for(let s of n){let l=this.loadAstNode(s);l&&a.push({ref:l,$nodeDescription:s})}i._items=a}catch(n){i._linkingError={info:e,message:`An error occurred while resolving reference to '${i.$refText}': ${n}`},i._items=[]}r.references.push(i)}}unlink(e){for(let r of e.references)"_ref"in r?(r._ref=void 0,delete r._nodeDescription):"_items"in r&&(r._items=void 0,delete r._linkingError);e.references=[]}getCandidate(e){return this.scopeProvider.getScope(e).getElement(e.reference.$refText)??this.createLinkingError(e)}getCandidates(e){let i=this.scopeProvider.getScope(e).getElements(e.reference.$refText).distinct(n=>`${n.documentUri}#${n.path}`).toArray();return i.length>0?i:this.createLinkingError(e)}buildReference(e,r,i,n){let a=this,s={$refNode:i,$refText:n,_ref:void 0,get ref(){if(_n(this._ref))return this._ref;if(AF(this._nodeDescription)){let l=a.loadAstNode(this._nodeDescription);this._ref=l??a.createLinkingError({reference:s,container:e,property:r},this._nodeDescription)}else if(this._ref===void 0){this._ref=zm;let l=Ay(e).$document,u=a.getLinkedNode({reference:s,container:e,property:r});if(u.error&&l&&l.state0))return this._linkingError=a.createLinkingError({reference:s,container:e,property:r})}};return s}throwCyclicReferenceError(e,r,i){throw new Error(`Cyclic reference resolution detected: ${this.astNodeLocator.getAstNodePath(e)}/${r} (symbol '${i}')`)}getLinkedNode(e){try{let r=this.getCandidate(e);if(om(r))return{error:r};let i=this.loadAstNode(r);return i?{node:i,descr:r}:{descr:r,error:this.createLinkingError(e,r)}}catch(r){console.error(`An error occurred while resolving reference to '${e.reference.$refText}':`,r);let i=r.message??String(r);return{error:{info:e,message:`An error occurred while resolving reference to '${e.reference.$refText}': ${i}`}}}}loadAstNode(e){if(e.node)return e.node;let r=this.langiumDocuments().getDocument(e.documentUri);if(r)return this.astNodeLocator.getAstNode(r.parseResult.value,e.path)}createLinkingError(e,r){let i=Ay(e.container).$document;i&&i.state{"use strict";Vc();o(g2e,"isNamed");Bk=class{static{o(this,"DefaultNameProvider")}getName(e){if(g2e(e))return e.name}getNameNode(e){return YT(e.$cstNode,"name")}}});var Fk,_G=P(()=>{"use strict";Vc();Oc();Ts();Bc();Ys();Wc();ol();Fk=class{static{o(this,"DefaultReferences")}constructor(e){this.nameProvider=e.references.NameProvider,this.index=e.shared.workspace.IndexManager,this.nodeLocator=e.workspace.AstNodeLocator,this.documents=e.shared.workspace.LangiumDocuments,this.hasMultiReference=js(e.Grammar).some(r=>zc(r)&&r.isMulti)}findDeclarations(e){if(e){let r=m$(e),i=e.astNode;if(r&&i){let n=i[r.feature];if(ga(n)||nl(n))return jS(n);if(Array.isArray(n)){for(let a of n)if((ga(a)||nl(a))&&a.$refNode&&a.$refNode.offset<=e.offset&&a.$refNode.end>=e.end)return jS(a)}}if(i){let n=this.nameProvider.getNameNode(i);if(n&&(n===e||QF(e,n)))return this.getSelfNodes(i)}}return[]}getSelfNodes(e){if(this.hasMultiReference){let r=this.index.findAllReferences(e,this.nodeLocator.getAstNodePath(e)),i=this.getNodeFromReferenceDescription(r.head());if(i){for(let n of jd(i))if(nl(n.reference)&&n.reference.items.some(a=>a.ref===e))return n.reference.items.map(a=>a.ref)}return[e]}else return[e]}getNodeFromReferenceDescription(e){if(!e)return;let r=this.documents.getDocument(e.sourceUri);if(r)return this.nodeLocator.getAstNode(r.parseResult.value,e.sourcePath)}findDeclarationNodes(e){let r=this.findDeclarations(e),i=[];for(let n of r){let a=this.nameProvider.getNameNode(n)??n.$cstNode;a&&i.push(a)}return i}findReferences(e,r){let i=[];r.includeDeclaration&&i.push(...this.getSelfReferences(e));let n=this.index.findAllReferences(e,this.nodeLocator.getAstNodePath(e));return r.documentUri&&(n=n.filter(a=>Vn.equals(a.sourceUri,r.documentUri))),i.push(...n),jr(i)}getSelfReferences(e){let r=this.getSelfNodes(e),i=[];for(let n of r){let a=this.nameProvider.getNameNode(n);if(a){let s=bs(n),l=this.nodeLocator.getAstNodePath(n);i.push({sourceUri:s.uri,sourcePath:l,targetUri:s.uri,targetPath:l,segment:bm(a),local:!0})}}return i}}});var Cs,Gm,up=P(()=>{"use strict";Ys();Cs=class{static{o(this,"MultiMap")}constructor(e){if(this.map=new Map,e)for(let[r,i]of e)this.add(r,i)}get size(){return Ey.sum(jr(this.map.values()).map(e=>e.length))}clear(){this.map.clear()}delete(e,r){if(r===void 0)return this.map.delete(e);{let i=this.map.get(e);if(i){let n=i.indexOf(r);if(n>=0)return i.length===1?this.map.delete(e):i.splice(n,1),!0}return!1}}get(e){return this.map.get(e)??[]}getStream(e){let r=this.map.get(e);return r?jr(r):Yd}has(e,r){if(r===void 0)return this.map.has(e);{let i=this.map.get(e);return i?i.indexOf(r)>=0:!1}}add(e,r){return this.map.has(e)?this.map.get(e).push(r):this.map.set(e,[r]),this}addAll(e,r){return this.map.has(e)?this.map.get(e).push(...r):this.map.set(e,Array.from(r)),this}forEach(e){this.map.forEach((r,i)=>r.forEach(n=>e(n,i,this)))}[Symbol.iterator](){return this.entries().iterator()}entries(){return jr(this.map.entries()).flatMap(([e,r])=>r.map(i=>[e,i]))}keys(){return jr(this.map.keys())}values(){return jr(this.map.values()).flat()}entriesGroupedByKey(){return jr(this.map.entries())}},Gm=class{static{o(this,"BiMap")}get size(){return this.map.size}constructor(e){if(this.map=new Map,this.inverse=new Map,e)for(let[r,i]of e)this.set(r,i)}clear(){this.map.clear(),this.inverse.clear()}set(e,r){return this.map.set(e,r),this.inverse.set(r,e),this}get(e){return this.map.get(e)}getKey(e){return this.inverse.get(e)}delete(e){let r=this.map.get(e);return r!==void 0?(this.map.delete(e),this.inverse.delete(r),!0):!1}}});var $k,DG=P(()=>{"use strict";Ts();Yl();up();Xl();$k=class{static{o(this,"DefaultScopeComputation")}constructor(e){this.nameProvider=e.references.NameProvider,this.descriptions=e.workspace.AstNodeDescriptionProvider}async collectExportedSymbols(e,r=$r.CancellationToken.None){return this.collectExportedSymbolsForNode(e.parseResult.value,e,void 0,r)}async collectExportedSymbolsForNode(e,r,i=DT,n=$r.CancellationToken.None){let a=[];this.addExportedSymbol(e,a,r);for(let s of i(e))await Dn(n),this.addExportedSymbol(s,a,r);return a}addExportedSymbol(e,r,i){let n=this.nameProvider.getName(e);n&&r.push(this.descriptions.createDescription(e,n,i))}async collectLocalSymbols(e,r=$r.CancellationToken.None){let i=e.parseResult.value,n=new Cs;for(let a of Pc(i))await Dn(r),this.addLocalSymbol(a,e,n);return n}addLocalSymbol(e,r,i){let n=e.$container;if(n){let a=this.nameProvider.getName(e);a&&i.add(n,this.descriptions.createDescription(e,a,r))}}}});var wv,LG,zk,Bst,RG=P(()=>{"use strict";up();Ys();wv=class{static{o(this,"StreamScope")}constructor(e,r,i){this.elements=e,this.outerScope=r,this.caseInsensitive=i?.caseInsensitive??!1,this.concatOuterScope=i?.concatOuterScope??!0}getAllElements(){return this.outerScope?this.elements.concat(this.outerScope.getAllElements()):this.elements}getElement(e){let r=this.caseInsensitive?e.toLowerCase():e,i=this.caseInsensitive?this.elements.find(n=>n.name.toLowerCase()===r):this.elements.find(n=>n.name===e);if(i)return i;if(this.outerScope)return this.outerScope.getElement(e)}getElements(e){let r=this.caseInsensitive?e.toLowerCase():e,i=this.caseInsensitive?this.elements.filter(n=>n.name.toLowerCase()===r):this.elements.filter(n=>n.name===e);return(this.concatOuterScope||i.isEmpty())&&this.outerScope?i.concat(this.outerScope.getElements(e)):i}},LG=class{static{o(this,"MapScope")}constructor(e,r,i){this.elements=new Map,this.caseInsensitive=i?.caseInsensitive??!1,this.concatOuterScope=i?.concatOuterScope??!0;for(let n of e){let a=this.caseInsensitive?n.name.toLowerCase():n.name;this.elements.set(a,n)}this.outerScope=r}getElement(e){let r=this.caseInsensitive?e.toLowerCase():e,i=this.elements.get(r);if(i)return i;if(this.outerScope)return this.outerScope.getElement(e)}getElements(e){let r=this.caseInsensitive?e.toLowerCase():e,i=this.elements.get(r),n=i?[i]:[];return(this.concatOuterScope||n.length>0)&&this.outerScope?jr(n).concat(this.outerScope.getElements(e)):jr(n)}getAllElements(){let e=jr(this.elements.values());return this.outerScope&&(e=e.concat(this.outerScope.getAllElements())),e}},zk=class{static{o(this,"MultiMapScope")}constructor(e,r,i){this.elements=new Cs,this.caseInsensitive=i?.caseInsensitive??!1,this.concatOuterScope=i?.concatOuterScope??!0;for(let n of e){let a=this.caseInsensitive?n.name.toLowerCase():n.name;this.elements.add(a,n)}this.outerScope=r}getElement(e){let r=this.caseInsensitive?e.toLowerCase():e,i=this.elements.get(r)[0];if(i)return i;if(this.outerScope)return this.outerScope.getElement(e)}getElements(e){let r=this.caseInsensitive?e.toLowerCase():e,i=this.elements.get(r);return(this.concatOuterScope||i.length===0)&&this.outerScope?jr(i).concat(this.outerScope.getElements(e)):jr(i)}getAllElements(){let e=jr(this.elements.values());return this.outerScope&&(e=e.concat(this.outerScope.getAllElements())),e}},Bst={getElement(){},getElements(){return Yd},getAllElements(){return Yd}}});var Ev,Gk,Vm,RA,Sv,NA=P(()=>{"use strict";Ev=class{static{o(this,"DisposableCache")}constructor(){this.toDispose=[],this.isDisposed=!1}onDispose(e){this.toDispose.push(e)}dispose(){this.throwIfDisposed(),this.clear(),this.isDisposed=!0,this.toDispose.forEach(e=>e.dispose())}throwIfDisposed(){if(this.isDisposed)throw new Error("This cache has already been disposed")}},Gk=class extends Ev{static{o(this,"SimpleCache")}constructor(){super(...arguments),this.cache=new Map}has(e){return this.throwIfDisposed(),this.cache.has(e)}set(e,r){this.throwIfDisposed(),this.cache.set(e,r)}get(e,r){if(this.throwIfDisposed(),this.cache.has(e))return this.cache.get(e);if(r){let i=r();return this.cache.set(e,i),i}else return}delete(e){return this.throwIfDisposed(),this.cache.delete(e)}clear(){this.throwIfDisposed(),this.cache.clear()}},Vm=class extends Ev{static{o(this,"ContextCache")}constructor(e){super(),this.cache=new Map,this.converter=e??(r=>r)}has(e,r){return this.throwIfDisposed(),this.cacheForContext(e).has(r)}set(e,r,i){this.throwIfDisposed(),this.cacheForContext(e).set(r,i)}get(e,r,i){this.throwIfDisposed();let n=this.cacheForContext(e);if(n.has(r))return n.get(r);if(i){let a=i();return n.set(r,a),a}else return}delete(e,r){return this.throwIfDisposed(),this.cacheForContext(e).delete(r)}clear(e){if(this.throwIfDisposed(),e){let r=this.converter(e);this.cache.delete(r)}else this.cache.clear()}cacheForContext(e){let r=this.converter(e),i=this.cache.get(r);return i||(i=new Map,this.cache.set(r,i)),i}},RA=class extends Vm{static{o(this,"DocumentCache")}constructor(e,r){super(i=>i.toString()),r?(this.toDispose.push(e.workspace.DocumentBuilder.onDocumentPhase(r,i=>{this.clear(i.uri.toString())})),this.toDispose.push(e.workspace.DocumentBuilder.onUpdate((i,n)=>{for(let a of n)this.clear(a)}))):this.toDispose.push(e.workspace.DocumentBuilder.onUpdate((i,n)=>{let a=i.concat(n);for(let s of a)this.clear(s)}))}},Sv=class extends Gk{static{o(this,"WorkspaceCache")}constructor(e,r){super(),r?(this.toDispose.push(e.workspace.DocumentBuilder.onBuildPhase(r,()=>{this.clear()})),this.toDispose.push(e.workspace.DocumentBuilder.onUpdate((i,n)=>{n.length>0&&this.clear()}))):this.toDispose.push(e.workspace.DocumentBuilder.onUpdate(()=>{this.clear()}))}}});var Vk,NG=P(()=>{"use strict";RG();Ts();Ys();NA();Vk=class{static{o(this,"DefaultScopeProvider")}constructor(e){this.reflection=e.shared.AstReflection,this.nameProvider=e.references.NameProvider,this.descriptions=e.workspace.AstNodeDescriptionProvider,this.indexManager=e.shared.workspace.IndexManager,this.globalScopeCache=new Sv(e.shared)}getScope(e){let r=[],i=this.reflection.getReferenceType(e),n=bs(e.container).localSymbols;if(n){let s=e.container;do n.has(s)&&r.push(n.getStream(s).filter(l=>this.reflection.isSubtype(l.type,i))),s=s.$container;while(s)}let a=this.getGlobalScope(i,e);for(let s=r.length-1;s>=0;s--)a=this.createScope(r[s],a);return a}createScope(e,r,i){return new wv(jr(e),r,i)}createScopeForNodes(e,r,i){let n=jr(e).map(a=>{let s=this.nameProvider.getName(a);if(s)return this.descriptions.createDescription(a,s)}).nonNullable();return new wv(n,r,i)}getGlobalScope(e,r){return this.globalScopeCache.get(e,()=>new zk(this.indexManager.allElements(e)))}}});function IG(t){return typeof t.$comment=="string"}function y2e(t){return typeof t=="object"&&!!t&&("$ref"in t||"$error"in t)}var qk,IA=P(()=>{"use strict";EG();Oc();Ts();Vc();o(IG,"isAstNodeWithComment");o(y2e,"isIntermediateReference");qk=class{static{o(this,"DefaultJsonSerializer")}constructor(e){this.ignoreProperties=new Set(["$container","$containerProperty","$containerIndex","$document","$cstNode"]),this.langiumDocuments=e.shared.workspace.LangiumDocuments,this.astNodeLocator=e.workspace.AstNodeLocator,this.nameProvider=e.references.NameProvider,this.commentProvider=e.documentation.CommentProvider}serialize(e,r){let i=r??{},n=r?.replacer,a=o((l,u)=>this.replacer(l,u,i),"defaultReplacer"),s=n?(l,u)=>n(l,u,a):a;try{return this.currentDocument=bs(e),JSON.stringify(e,s,r?.space)}finally{this.currentDocument=void 0}}deserialize(e,r){let i=r??{},n=JSON.parse(e);return this.linkNode(n,n,i),n}replacer(e,r,{refText:i,sourceText:n,textRegions:a,comments:s,uriConverter:l}){if(!this.ignoreProperties.has(e))if(ga(r)){let u=r.ref,h=i?r.$refText:void 0;if(u){let f=bs(u),d="";this.currentDocument&&this.currentDocument!==f&&(l?d=l(f.uri,u):d=f.uri.toString());let p=this.astNodeLocator.getAstNodePath(u);return{$ref:`${d}#${p}`,$refText:h}}else return{$error:r.error?.message??"Could not resolve reference",$refText:h}}else if(nl(r)){let u=i?r.$refText:void 0,h=[];for(let f of r.items){let d=f.ref,p=bs(f.ref),m="";this.currentDocument&&this.currentDocument!==p&&(l?m=l(p.uri,d):m=p.uri.toString());let g=this.astNodeLocator.getAstNodePath(d);h.push(`${m}#${g}`)}return{$refs:h,$refText:u}}else if(_n(r)){let u;if(a&&(u=this.addAstNodeRegionWithAssignmentsTo({...r}),(!e||r.$document)&&u?.$textRegion&&(u.$textRegion.documentURI=this.currentDocument?.uri.toString())),n&&!e&&(u??(u={...r}),u.$sourceText=r.$cstNode?.text),s){u??(u={...r});let h=this.commentProvider.getComment(r);h&&(u.$comment=h.replace(/\r/g,""))}return u??r}else return r}addAstNodeRegionWithAssignmentsTo(e){let r=o(i=>({offset:i.offset,end:i.end,length:i.length,range:i.range}),"createDocumentSegment");if(e.$cstNode){let i=e.$textRegion=r(e.$cstNode),n=i.assignments={};return Object.keys(e).filter(a=>!a.startsWith("$")).forEach(a=>{let s=h$(e.$cstNode,a).map(r);s.length!==0&&(n[a]=s)}),e}}linkNode(e,r,i,n,a,s){for(let[u,h]of Object.entries(e))if(Array.isArray(h))for(let f=0;f{"use strict";Wc();Wk=class{static{o(this,"DefaultServiceRegistry")}get map(){return this.fileExtensionMap}constructor(e){this.languageIdMap=new Map,this.fileExtensionMap=new Map,this.fileNameMap=new Map,this.textDocuments=e?.workspace.TextDocuments}register(e){let r=e.LanguageMetaData;for(let i of r.fileExtensions)this.fileExtensionMap.has(i)&&console.warn(`The file extension ${i} is used by multiple languages. It is now assigned to '${r.languageId}'.`),this.fileExtensionMap.set(i,e);if(r.fileNames)for(let i of r.fileNames)this.fileNameMap.has(i)&&console.warn(`The file name ${i} is used by multiple languages. It is now assigned to '${r.languageId}'.`),this.fileNameMap.set(i,e);this.languageIdMap.set(r.languageId,e)}getServices(e){if(this.languageIdMap.size===0)throw new Error("The service registry is empty. Use `register` to register the services of a language.");let r=this.textDocuments?.get(e)?.languageId;if(r!==void 0){let s=this.languageIdMap.get(r);if(s)return s}let i=Vn.extname(e),n=Vn.basename(e),a=this.fileNameMap.get(n)??this.fileExtensionMap.get(i);if(!a)throw r?new Error(`The service registry contains no services for the extension '${i}' for language '${r}'.`):new Error(`The service registry contains no services for the extension '${i}'.`);return a}hasServices(e){try{return this.getServices(e),!0}catch{return!1}}get all(){return Array.from(this.languageIdMap.values())}}});function qm(t){return{code:t}}var MA,Uk,OA=P(()=>{"use strict";to();up();Xl();Ys();o(qm,"diagnosticData");(function(t){t.defaults=["fast","slow","built-in"],t.all=t.defaults})(MA||(MA={}));Uk=class{static{o(this,"ValidationRegistry")}constructor(e){this.entries=new Cs,this.knownCategories=new Set(MA.defaults),this.entriesBefore=[],this.entriesAfter=[],this.reflection=e.shared.AstReflection}register(e,r=this,i="fast"){if(i==="built-in")throw new Error("The 'built-in' category is reserved for lexer, parser, and linker errors.");this.knownCategories.add(i);for(let[n,a]of Object.entries(e)){let s=a;if(Array.isArray(s))for(let l of s){let u={check:this.wrapValidationException(l,r),category:i};this.addEntry(n,u)}else if(typeof s=="function"){let l={check:this.wrapValidationException(s,r),category:i};this.addEntry(n,l)}else Yu(s)}}wrapValidationException(e,r){return async(i,n,a)=>{await this.handleException(()=>e.call(r,i,n,a),"An error occurred during validation",n,i)}}async handleException(e,r,i,n){try{await e()}catch(a){if(Ju(a))throw a;console.error(`${r}:`,a),a instanceof Error&&a.stack&&console.error(a.stack);let s=a instanceof Error?a.message:String(a);i("error",`${r}: ${s}`,{node:n})}}addEntry(e,r){if(e==="AstNode"){this.entries.add("AstNode",r);return}for(let i of this.reflection.getAllSubTypes(e))this.entries.add(i,r)}getChecks(e,r){let i=jr(this.entries.get(e)).concat(this.entries.get("AstNode"));return r&&(i=i.filter(n=>r.includes(n.category))),i.map(n=>n.check)}registerBeforeDocument(e,r=this){this.entriesBefore.push(this.wrapPreparationException(e,"An error occurred during set-up of the validation",r))}registerAfterDocument(e,r=this){this.entriesAfter.push(this.wrapPreparationException(e,"An error occurred during tear-down of the validation",r))}wrapPreparationException(e,r,i){return async(n,a,s,l)=>{await this.handleException(()=>e.call(i,n,a,s,l),r,a,n)}}get checksBefore(){return this.entriesBefore}get checksAfter(){return this.entriesAfter}getAllValidationCategories(e){return this.knownCategories}}});function x2e(t){if(t.range)return t.range;let e;return typeof t.property=="string"?e=YT(t.node.$cstNode,t.property,t.index):typeof t.keyword=="string"&&(e=d$(t.node.$cstNode,t.keyword,t.index)),e??(e=t.node.$cstNode),e?e.range:{start:{line:0,character:0},end:{line:0,character:0}}}function PA(t){switch(t){case"error":return 1;case"warning":return 2;case"info":return 3;case"hint":return 4;default:throw new Error("Invalid diagnostic severity: "+t)}}function b2e(t){switch(t){case"error":return qm(Kl.LexingError);case"warning":return qm(Kl.LexingWarning);case"info":return qm(Kl.LexingInfo);case"hint":return qm(Kl.LexingHint);default:throw new Error("Invalid diagnostic severity: "+t)}}var v2e,Hk,Kl,OG=P(()=>{"use strict";Yl();Vc();Ts();Bc();Xl();OA();v2e=Object.freeze({validateNode:!0,validateChildren:!0}),Hk=class{static{o(this,"DefaultDocumentValidator")}constructor(e){this.validationRegistry=e.validation.ValidationRegistry,this.metadata=e.LanguageMetaData,this.profiler=e.shared.profilers.LangiumProfiler,this.languageId=e.LanguageMetaData.languageId}async validateDocument(e,r={},i=$r.CancellationToken.None){let n=e.parseResult,a=[];if(await Dn(i),(!r.categories||r.categories.includes("built-in"))&&(this.processLexingErrors(n,a,r),r.stopAfterLexingErrors&&a.some(s=>s.data?.code===Kl.LexingError)||(this.processParsingErrors(n,a,r),r.stopAfterParsingErrors&&a.some(s=>s.data?.code===Kl.ParsingError))||(this.processLinkingErrors(e,a,r),r.stopAfterLinkingErrors&&a.some(s=>s.data?.code===Kl.LinkingError))))return a;try{a.push(...await this.validateAst(n.value,r,i))}catch(s){if(Ju(s))throw s;console.error("An error occurred during validation:",s)}return await Dn(i),a}processLexingErrors(e,r,i){let n=[...e.lexerErrors,...e.lexerReport?.diagnostics??[]];for(let a of n){let s=a.severity??"error",l={severity:PA(s),range:{start:{line:a.line-1,character:a.column-1},end:{line:a.line-1,character:a.column+a.length-1}},message:a.message,data:b2e(s),source:this.getSource()};r.push(l)}}processParsingErrors(e,r,i){for(let n of e.parserErrors){let a;if(isNaN(n.token.startOffset)){if("previousToken"in n){let s=n.previousToken;if(isNaN(s.startOffset)){let l={line:0,character:0};a={start:l,end:l}}else{let l={line:s.endLine-1,character:s.endColumn};a={start:l,end:l}}}}else a=Py(n.token);if(a){let s={severity:PA("error"),range:a,message:n.message,data:qm(Kl.ParsingError),source:this.getSource()};r.push(s)}}}processLinkingErrors(e,r,i){for(let n of e.references){let a=n.error;if(a){let s={node:a.info.container,range:n.$refNode?.range,property:a.info.property,index:a.info.index,data:{code:Kl.LinkingError,containerType:a.info.container.$type,property:a.info.property,refText:a.info.reference.$refText}};r.push(this.toDiagnostic("error",a.message,s))}}}async validateAst(e,r,i=$r.CancellationToken.None){let n=[],a=o((s,l,u)=>{n.push(this.toDiagnostic(s,l,u))},"acceptor");return await this.validateAstBefore(e,r,a,i),await this.validateAstNodes(e,r,a,i),await this.validateAstAfter(e,r,a,i),n}async validateAstBefore(e,r,i,n=$r.CancellationToken.None){let a=this.validationRegistry.checksBefore;for(let s of a)await Dn(n),await s(e,i,r.categories??[],n)}async validateAstNodes(e,r,i,n=$r.CancellationToken.None){if(this.profiler?.isActive("validating")){let a=this.profiler.createTask("validating",this.languageId);a.start();try{let s=js(e).iterator();for(let l of s){a.startSubTask(l.$type);let u=this.validateSingleNodeOptions(l,r);if(u.validateNode)try{let h=this.validationRegistry.getChecks(l.$type,r.categories);for(let f of h)await f(l,i,n)}finally{a.stopSubTask(l.$type)}u.validateChildren||s.prune()}}finally{a.stop()}}else{let a=js(e).iterator();for(let s of a){await Dn(n);let l=this.validateSingleNodeOptions(s,r);if(l.validateNode){let u=this.validationRegistry.getChecks(s.$type,r.categories);for(let h of u)await h(s,i,n)}l.validateChildren||a.prune()}}}validateSingleNodeOptions(e,r){return v2e}async validateAstAfter(e,r,i,n=$r.CancellationToken.None){let a=this.validationRegistry.checksAfter;for(let s of a)await Dn(n),await s(e,i,r.categories??[],n)}toDiagnostic(e,r,i){return{message:r,range:x2e(i),severity:PA(e),code:i.code,codeDescription:i.codeDescription,tags:i.tags,relatedInformation:i.relatedInformation,data:i.data,source:this.getSource()}}getSource(){return this.metadata.languageId}};o(x2e,"getDiagnosticRange");o(PA,"toDiagnosticSeverity");o(b2e,"toDiagnosticData");(function(t){t.LexingError="lexing-error",t.LexingWarning="lexing-warning",t.LexingInfo="lexing-info",t.LexingHint="lexing-hint",t.ParsingError="parsing-error",t.LinkingError="linking-error"})(Kl||(Kl={}))});var Yk,jk,PG=P(()=>{"use strict";Yl();Oc();Ts();Bc();Xl();Wc();Yk=class{static{o(this,"DefaultAstNodeDescriptionProvider")}constructor(e){this.astNodeLocator=e.workspace.AstNodeLocator,this.nameProvider=e.references.NameProvider}createDescription(e,r,i){let n=i??bs(e);r??(r=this.nameProvider.getName(e));let a=this.astNodeLocator.getAstNodePath(e);if(!r)throw new Error(`Node at path ${a} has no name.`);let s,l=o(()=>s??(s=bm(this.nameProvider.getNameNode(e)??e.$cstNode)),"nameSegmentGetter");return{node:e,name:r,get nameSegment(){return l()},selectionSegment:bm(e.$cstNode),type:e.$type,documentUri:n.uri,path:a}}},jk=class{static{o(this,"DefaultReferenceDescriptionProvider")}constructor(e){this.nodeLocator=e.workspace.AstNodeLocator}async createDescriptions(e,r=$r.CancellationToken.None){let i=[],n=e.parseResult.value;for(let a of js(n))await Dn(r),jd(a).forEach(s=>{s.reference.error||i.push(...this.createInfoDescriptions(s))});return i}createInfoDescriptions(e){let r=e.reference;if(r.error||!r.$refNode)return[];let i=[];ga(r)&&r.$nodeDescription?i=[r.$nodeDescription]:nl(r)&&(i=r.items.map(u=>u.$nodeDescription).filter(u=>u!==void 0));let n=bs(e.container).uri,a=this.nodeLocator.getAstNodePath(e.container),s=[],l=bm(r.$refNode);for(let u of i)s.push({sourceUri:n,sourcePath:a,targetUri:u.documentUri,targetPath:u.path,segment:l,local:Vn.equals(u.documentUri,n)});return s}}});var Xk,BG=P(()=>{"use strict";Xk=class{static{o(this,"DefaultAstNodeLocator")}constructor(){this.segmentSeparator="/",this.indexSeparator="@"}getAstNodePath(e){if(e.$container){let r=this.getAstNodePath(e.$container),i=this.getPathSegment(e);return r+this.segmentSeparator+i}return""}getPathSegment({$containerProperty:e,$containerIndex:r}){if(!e)throw new Error("Missing '$containerProperty' in AST node.");return r!==void 0?e+this.indexSeparator+r:e}getAstNode(e,r){return r.split(this.segmentSeparator).reduce((n,a)=>{if(!n||a.length===0)return n;let s=a.indexOf(this.indexSeparator);if(s>0){let l=a.substring(0,s),u=parseInt(a.substring(s+1));return n[l]?.[u]}return n[a]},e)}}});var xn={};var BA=P(()=>{"use strict";Kr(xn,Wa($m(),1))});var Kk,FG=P(()=>{"use strict";BA();Xl();Kk=class{static{o(this,"DefaultConfigurationProvider")}constructor(e){this._ready=new eo,this.onConfigurationSectionUpdateEmitter=new xn.Emitter,this.settings={},this.workspaceConfig=!1,this.serviceRegistry=e.ServiceRegistry}get ready(){return this._ready.promise}initialize(e){this.workspaceConfig=e.capabilities.workspace?.configuration??!1}async initialized(e){if(this.workspaceConfig){if(e.register){let r=this.serviceRegistry.all;e.register({section:r.map(i=>this.toSectionName(i.LanguageMetaData.languageId))})}if(e.fetchConfiguration){let r=this.serviceRegistry.all.map(n=>({section:this.toSectionName(n.LanguageMetaData.languageId)})),i=await e.fetchConfiguration(r);r.forEach((n,a)=>{this.updateSectionConfiguration(n.section,i[a])})}}this._ready.resolve()}updateConfiguration(e){typeof e.settings!="object"||e.settings===null||Object.entries(e.settings).forEach(([r,i])=>{this.updateSectionConfiguration(r,i),this.onConfigurationSectionUpdateEmitter.fire({section:r,configuration:i})})}updateSectionConfiguration(e,r){this.settings[e]=r}async getConfiguration(e,r){await this.ready;let i=this.toSectionName(e);if(this.settings[i])return this.settings[i][r]}toSectionName(e){return`${e}`}get onConfigurationSectionUpdate(){return this.onConfigurationSectionUpdateEmitter.event}}});var cV=ar(cr=>{"use strict";Object.defineProperty(cr,"__esModule",{value:!0});cr.Message=cr.NotificationType9=cr.NotificationType8=cr.NotificationType7=cr.NotificationType6=cr.NotificationType5=cr.NotificationType4=cr.NotificationType3=cr.NotificationType2=cr.NotificationType1=cr.NotificationType0=cr.NotificationType=cr.RequestType9=cr.RequestType8=cr.RequestType7=cr.RequestType6=cr.RequestType5=cr.RequestType4=cr.RequestType3=cr.RequestType2=cr.RequestType1=cr.RequestType=cr.RequestType0=cr.AbstractMessageSignature=cr.ParameterStructures=cr.ResponseError=cr.ErrorCodes=void 0;var Wm=yv(),$G;(function(t){t.ParseError=-32700,t.InvalidRequest=-32600,t.MethodNotFound=-32601,t.InvalidParams=-32602,t.InternalError=-32603,t.jsonrpcReservedErrorRangeStart=-32099,t.serverErrorStart=-32099,t.MessageWriteError=-32099,t.MessageReadError=-32098,t.PendingResponseRejected=-32097,t.ConnectionInactive=-32096,t.ServerNotInitialized=-32002,t.UnknownErrorCode=-32001,t.jsonrpcReservedErrorRangeEnd=-32e3,t.serverErrorEnd=-32e3})($G||(cr.ErrorCodes=$G={}));var zG=class t extends Error{static{o(this,"ResponseError")}constructor(e,r,i){super(r),this.code=Wm.number(e)?e:$G.UnknownErrorCode,this.data=i,Object.setPrototypeOf(this,t.prototype)}toJson(){let e={code:this.code,message:this.message};return this.data!==void 0&&(e.data=this.data),e}};cr.ResponseError=zG;var Po=class t{static{o(this,"ParameterStructures")}constructor(e){this.kind=e}static is(e){return e===t.auto||e===t.byName||e===t.byPosition}toString(){return this.kind}};cr.ParameterStructures=Po;Po.auto=new Po("auto");Po.byPosition=new Po("byPosition");Po.byName=new Po("byName");var un=class{static{o(this,"AbstractMessageSignature")}constructor(e,r){this.method=e,this.numberOfParams=r}get parameterStructures(){return Po.auto}};cr.AbstractMessageSignature=un;var GG=class extends un{static{o(this,"RequestType0")}constructor(e){super(e,0)}};cr.RequestType0=GG;var VG=class extends un{static{o(this,"RequestType")}constructor(e,r=Po.auto){super(e,1),this._parameterStructures=r}get parameterStructures(){return this._parameterStructures}};cr.RequestType=VG;var qG=class extends un{static{o(this,"RequestType1")}constructor(e,r=Po.auto){super(e,1),this._parameterStructures=r}get parameterStructures(){return this._parameterStructures}};cr.RequestType1=qG;var WG=class extends un{static{o(this,"RequestType2")}constructor(e){super(e,2)}};cr.RequestType2=WG;var UG=class extends un{static{o(this,"RequestType3")}constructor(e){super(e,3)}};cr.RequestType3=UG;var HG=class extends un{static{o(this,"RequestType4")}constructor(e){super(e,4)}};cr.RequestType4=HG;var YG=class extends un{static{o(this,"RequestType5")}constructor(e){super(e,5)}};cr.RequestType5=YG;var jG=class extends un{static{o(this,"RequestType6")}constructor(e){super(e,6)}};cr.RequestType6=jG;var XG=class extends un{static{o(this,"RequestType7")}constructor(e){super(e,7)}};cr.RequestType7=XG;var KG=class extends un{static{o(this,"RequestType8")}constructor(e){super(e,8)}};cr.RequestType8=KG;var QG=class extends un{static{o(this,"RequestType9")}constructor(e){super(e,9)}};cr.RequestType9=QG;var ZG=class extends un{static{o(this,"NotificationType")}constructor(e,r=Po.auto){super(e,1),this._parameterStructures=r}get parameterStructures(){return this._parameterStructures}};cr.NotificationType=ZG;var JG=class extends un{static{o(this,"NotificationType0")}constructor(e){super(e,0)}};cr.NotificationType0=JG;var eV=class extends un{static{o(this,"NotificationType1")}constructor(e,r=Po.auto){super(e,1),this._parameterStructures=r}get parameterStructures(){return this._parameterStructures}};cr.NotificationType1=eV;var tV=class extends un{static{o(this,"NotificationType2")}constructor(e){super(e,2)}};cr.NotificationType2=tV;var rV=class extends un{static{o(this,"NotificationType3")}constructor(e){super(e,3)}};cr.NotificationType3=rV;var iV=class extends un{static{o(this,"NotificationType4")}constructor(e){super(e,4)}};cr.NotificationType4=iV;var nV=class extends un{static{o(this,"NotificationType5")}constructor(e){super(e,5)}};cr.NotificationType5=nV;var aV=class extends un{static{o(this,"NotificationType6")}constructor(e){super(e,6)}};cr.NotificationType6=aV;var sV=class extends un{static{o(this,"NotificationType7")}constructor(e){super(e,7)}};cr.NotificationType7=sV;var oV=class extends un{static{o(this,"NotificationType8")}constructor(e){super(e,8)}};cr.NotificationType8=oV;var lV=class extends un{static{o(this,"NotificationType9")}constructor(e){super(e,9)}};cr.NotificationType9=lV;var T2e;(function(t){function e(n){let a=n;return a&&Wm.string(a.method)&&(Wm.string(a.id)||Wm.number(a.id))}o(e,"isRequest"),t.isRequest=e;function r(n){let a=n;return a&&Wm.string(a.method)&&n.id===void 0}o(r,"isNotification"),t.isNotification=r;function i(n){let a=n;return a&&(a.result!==void 0||!!a.error)&&(Wm.string(a.id)||Wm.number(a.id)||a.id===null)}o(i,"isResponse"),t.isResponse=i})(T2e||(cr.Message=T2e={}))});var hV=ar(hp=>{"use strict";var k2e;Object.defineProperty(hp,"__esModule",{value:!0});hp.LRUCache=hp.LinkedMap=hp.Touch=void 0;var ws;(function(t){t.None=0,t.First=1,t.AsOld=t.First,t.Last=2,t.AsNew=t.Last})(ws||(hp.Touch=ws={}));var FA=class{static{o(this,"LinkedMap")}constructor(){this[k2e]="LinkedMap",this._map=new Map,this._head=void 0,this._tail=void 0,this._size=0,this._state=0}clear(){this._map.clear(),this._head=void 0,this._tail=void 0,this._size=0,this._state++}isEmpty(){return!this._head&&!this._tail}get size(){return this._size}get first(){return this._head?.value}get last(){return this._tail?.value}has(e){return this._map.has(e)}get(e,r=ws.None){let i=this._map.get(e);if(i)return r!==ws.None&&this.touch(i,r),i.value}set(e,r,i=ws.None){let n=this._map.get(e);if(n)n.value=r,i!==ws.None&&this.touch(n,i);else{switch(n={key:e,value:r,next:void 0,previous:void 0},i){case ws.None:this.addItemLast(n);break;case ws.First:this.addItemFirst(n);break;case ws.Last:this.addItemLast(n);break;default:this.addItemLast(n);break}this._map.set(e,n),this._size++}return this}delete(e){return!!this.remove(e)}remove(e){let r=this._map.get(e);if(r)return this._map.delete(e),this.removeItem(r),this._size--,r.value}shift(){if(!this._head&&!this._tail)return;if(!this._head||!this._tail)throw new Error("Invalid list");let e=this._head;return this._map.delete(e.key),this.removeItem(e),this._size--,e.value}forEach(e,r){let i=this._state,n=this._head;for(;n;){if(r?e.bind(r)(n.value,n.key,this):e(n.value,n.key,this),this._state!==i)throw new Error("LinkedMap got modified during iteration.");n=n.next}}keys(){let e=this._state,r=this._head,i={[Symbol.iterator]:()=>i,next:o(()=>{if(this._state!==e)throw new Error("LinkedMap got modified during iteration.");if(r){let n={value:r.key,done:!1};return r=r.next,n}else return{value:void 0,done:!0}},"next")};return i}values(){let e=this._state,r=this._head,i={[Symbol.iterator]:()=>i,next:o(()=>{if(this._state!==e)throw new Error("LinkedMap got modified during iteration.");if(r){let n={value:r.value,done:!1};return r=r.next,n}else return{value:void 0,done:!0}},"next")};return i}entries(){let e=this._state,r=this._head,i={[Symbol.iterator]:()=>i,next:o(()=>{if(this._state!==e)throw new Error("LinkedMap got modified during iteration.");if(r){let n={value:[r.key,r.value],done:!1};return r=r.next,n}else return{value:void 0,done:!0}},"next")};return i}[(k2e=Symbol.toStringTag,Symbol.iterator)](){return this.entries()}trimOld(e){if(e>=this.size)return;if(e===0){this.clear();return}let r=this._head,i=this.size;for(;r&&i>e;)this._map.delete(r.key),r=r.next,i--;this._head=r,this._size=i,r&&(r.previous=void 0),this._state++}addItemFirst(e){if(!this._head&&!this._tail)this._tail=e;else if(this._head)e.next=this._head,this._head.previous=e;else throw new Error("Invalid list");this._head=e,this._state++}addItemLast(e){if(!this._head&&!this._tail)this._head=e;else if(this._tail)e.previous=this._tail,this._tail.next=e;else throw new Error("Invalid list");this._tail=e,this._state++}removeItem(e){if(e===this._head&&e===this._tail)this._head=void 0,this._tail=void 0;else if(e===this._head){if(!e.next)throw new Error("Invalid list");e.next.previous=void 0,this._head=e.next}else if(e===this._tail){if(!e.previous)throw new Error("Invalid list");e.previous.next=void 0,this._tail=e.previous}else{let r=e.next,i=e.previous;if(!r||!i)throw new Error("Invalid list");r.previous=i,i.next=r}e.next=void 0,e.previous=void 0,this._state++}touch(e,r){if(!this._head||!this._tail)throw new Error("Invalid list");if(!(r!==ws.First&&r!==ws.Last)){if(r===ws.First){if(e===this._head)return;let i=e.next,n=e.previous;e===this._tail?(n.next=void 0,this._tail=n):(i.previous=n,n.next=i),e.previous=void 0,e.next=this._head,this._head.previous=e,this._head=e,this._state++}else if(r===ws.Last){if(e===this._tail)return;let i=e.next,n=e.previous;e===this._head?(i.previous=void 0,this._head=i):(i.previous=n,n.next=i),e.next=void 0,e.previous=this._tail,this._tail.next=e,this._tail=e,this._state++}}}toJSON(){let e=[];return this.forEach((r,i)=>{e.push([i,r])}),e}fromJSON(e){this.clear();for(let[r,i]of e)this.set(r,i)}};hp.LinkedMap=FA;var uV=class extends FA{static{o(this,"LRUCache")}constructor(e,r=1){super(),this._limit=e,this._ratio=Math.min(Math.max(0,r),1)}get limit(){return this._limit}set limit(e){this._limit=e,this.checkTrim()}get ratio(){return this._ratio}set ratio(e){this._ratio=Math.min(Math.max(0,e),1),this.checkTrim()}get(e,r=ws.AsNew){return super.get(e,r)}peek(e){return super.get(e,ws.None)}set(e,r){return super.set(e,r,ws.Last),this.checkTrim(),this}checkTrim(){this.size>this._limit&&this.trimOld(Math.round(this._limit*this._ratio))}};hp.LRUCache=uV});var w2e=ar($A=>{"use strict";Object.defineProperty($A,"__esModule",{value:!0});$A.Disposable=void 0;var C2e;(function(t){function e(r){return{dispose:r}}o(e,"create"),t.create=e})(C2e||($A.Disposable=C2e={}))});var E2e=ar(Av=>{"use strict";Object.defineProperty(Av,"__esModule",{value:!0});Av.SharedArrayReceiverStrategy=Av.SharedArraySenderStrategy=void 0;var Fst=Ik(),Qk;(function(t){t.Continue=0,t.Cancelled=1})(Qk||(Qk={}));var fV=class{static{o(this,"SharedArraySenderStrategy")}constructor(){this.buffers=new Map}enableCancellation(e){if(e.id===null)return;let r=new SharedArrayBuffer(4),i=new Int32Array(r,0,1);i[0]=Qk.Continue,this.buffers.set(e.id,r),e.$cancellationData=r}async sendCancellation(e,r){let i=this.buffers.get(r);if(i===void 0)return;let n=new Int32Array(i,0,1);Atomics.store(n,0,Qk.Cancelled)}cleanup(e){this.buffers.delete(e)}dispose(){this.buffers.clear()}};Av.SharedArraySenderStrategy=fV;var dV=class{static{o(this,"SharedArrayBufferCancellationToken")}constructor(e){this.data=new Int32Array(e,0,1)}get isCancellationRequested(){return Atomics.load(this.data,0)===Qk.Cancelled}get onCancellationRequested(){throw new Error("Cancellation over SharedArrayBuffer doesn't support cancellation events")}},pV=class{static{o(this,"SharedArrayBufferCancellationTokenSource")}constructor(e){this.token=new dV(e)}cancel(){}dispose(){}},mV=class{static{o(this,"SharedArrayReceiverStrategy")}constructor(){this.kind="request"}createCancellationTokenSource(e){let r=e.$cancellationData;return r===void 0?new Fst.CancellationTokenSource:new pV(r)}};Av.SharedArrayReceiverStrategy=mV});var yV=ar(zA=>{"use strict";Object.defineProperty(zA,"__esModule",{value:!0});zA.Semaphore=void 0;var $st=cp(),gV=class{static{o(this,"Semaphore")}constructor(e=1){if(e<=0)throw new Error("Capacity must be greater than 0");this._capacity=e,this._active=0,this._waiting=[]}lock(e){return new Promise((r,i)=>{this._waiting.push({thunk:e,resolve:r,reject:i}),this.runNext()})}get active(){return this._active}runNext(){this._waiting.length===0||this._active===this._capacity||(0,$st.default)().timer.setImmediate(()=>this.doRunNext())}doRunNext(){if(this._waiting.length===0||this._active===this._capacity)return;let e=this._waiting.shift();if(this._active++,this._active>this._capacity)throw new Error("To many thunks active");try{let r=e.thunk();r instanceof Promise?r.then(i=>{this._active--,e.resolve(i),this.runNext()},i=>{this._active--,e.reject(i),this.runNext()}):(this._active--,e.resolve(r),this.runNext())}catch(r){this._active--,e.reject(r),this.runNext()}}};zA.Semaphore=gV});var A2e=ar(fp=>{"use strict";Object.defineProperty(fp,"__esModule",{value:!0});fp.ReadableStreamMessageReader=fp.AbstractMessageReader=fp.MessageReader=void 0;var xV=cp(),_v=yv(),vV=$m(),zst=yV(),S2e;(function(t){function e(r){let i=r;return i&&_v.func(i.listen)&&_v.func(i.dispose)&&_v.func(i.onError)&&_v.func(i.onClose)&&_v.func(i.onPartialMessage)}o(e,"is"),t.is=e})(S2e||(fp.MessageReader=S2e={}));var GA=class{static{o(this,"AbstractMessageReader")}constructor(){this.errorEmitter=new vV.Emitter,this.closeEmitter=new vV.Emitter,this.partialMessageEmitter=new vV.Emitter}dispose(){this.errorEmitter.dispose(),this.closeEmitter.dispose()}get onError(){return this.errorEmitter.event}fireError(e){this.errorEmitter.fire(this.asError(e))}get onClose(){return this.closeEmitter.event}fireClose(){this.closeEmitter.fire(void 0)}get onPartialMessage(){return this.partialMessageEmitter.event}firePartialMessage(e){this.partialMessageEmitter.fire(e)}asError(e){return e instanceof Error?e:new Error(`Reader received error. Reason: ${_v.string(e.message)?e.message:"unknown"}`)}};fp.AbstractMessageReader=GA;var bV;(function(t){function e(r){let i,n,a,s=new Map,l,u=new Map;if(r===void 0||typeof r=="string")i=r??"utf-8";else{if(i=r.charset??"utf-8",r.contentDecoder!==void 0&&(a=r.contentDecoder,s.set(a.name,a)),r.contentDecoders!==void 0)for(let h of r.contentDecoders)s.set(h.name,h);if(r.contentTypeDecoder!==void 0&&(l=r.contentTypeDecoder,u.set(l.name,l)),r.contentTypeDecoders!==void 0)for(let h of r.contentTypeDecoders)u.set(h.name,h)}return l===void 0&&(l=(0,xV.default)().applicationJson.decoder,u.set(l.name,l)),{charset:i,contentDecoder:a,contentDecoders:s,contentTypeDecoder:l,contentTypeDecoders:u}}o(e,"fromOptions"),t.fromOptions=e})(bV||(bV={}));var TV=class extends GA{static{o(this,"ReadableStreamMessageReader")}constructor(e,r){super(),this.readable=e,this.options=bV.fromOptions(r),this.buffer=(0,xV.default)().messageBuffer.create(this.options.charset),this._partialMessageTimeout=1e4,this.nextMessageLength=-1,this.messageToken=0,this.readSemaphore=new zst.Semaphore(1)}set partialMessageTimeout(e){this._partialMessageTimeout=e}get partialMessageTimeout(){return this._partialMessageTimeout}listen(e){this.nextMessageLength=-1,this.messageToken=0,this.partialMessageTimer=void 0,this.callback=e;let r=this.readable.onData(i=>{this.onData(i)});return this.readable.onError(i=>this.fireError(i)),this.readable.onClose(()=>this.fireClose()),r}onData(e){try{for(this.buffer.append(e);;){if(this.nextMessageLength===-1){let i=this.buffer.tryReadHeaders(!0);if(!i)return;let n=i.get("content-length");if(!n){this.fireError(new Error(`Header must provide a Content-Length property. +${JSON.stringify(Object.fromEntries(i))}`));return}let a=parseInt(n);if(isNaN(a)){this.fireError(new Error(`Content-Length value must be a number. Got ${n}`));return}this.nextMessageLength=a}let r=this.buffer.tryReadBody(this.nextMessageLength);if(r===void 0){this.setPartialMessageTimer();return}this.clearPartialMessageTimer(),this.nextMessageLength=-1,this.readSemaphore.lock(async()=>{let i=this.options.contentDecoder!==void 0?await this.options.contentDecoder.decode(r):r,n=await this.options.contentTypeDecoder.decode(i,this.options);this.callback(n)}).catch(i=>{this.fireError(i)})}}catch(r){this.fireError(r)}}clearPartialMessageTimer(){this.partialMessageTimer&&(this.partialMessageTimer.dispose(),this.partialMessageTimer=void 0)}setPartialMessageTimer(){this.clearPartialMessageTimer(),!(this._partialMessageTimeout<=0)&&(this.partialMessageTimer=(0,xV.default)().timer.setTimeout((e,r)=>{this.partialMessageTimer=void 0,e===this.messageToken&&(this.firePartialMessage({messageToken:e,waitingTime:r}),this.setPartialMessageTimer())},this._partialMessageTimeout,this.messageToken,this._partialMessageTimeout))}};fp.ReadableStreamMessageReader=TV});var N2e=ar(dp=>{"use strict";Object.defineProperty(dp,"__esModule",{value:!0});dp.WriteableStreamMessageWriter=dp.AbstractMessageWriter=dp.MessageWriter=void 0;var _2e=cp(),Zk=yv(),Gst=yV(),D2e=$m(),Vst="Content-Length: ",L2e=`\r +`,R2e;(function(t){function e(r){let i=r;return i&&Zk.func(i.dispose)&&Zk.func(i.onClose)&&Zk.func(i.onError)&&Zk.func(i.write)}o(e,"is"),t.is=e})(R2e||(dp.MessageWriter=R2e={}));var VA=class{static{o(this,"AbstractMessageWriter")}constructor(){this.errorEmitter=new D2e.Emitter,this.closeEmitter=new D2e.Emitter}dispose(){this.errorEmitter.dispose(),this.closeEmitter.dispose()}get onError(){return this.errorEmitter.event}fireError(e,r,i){this.errorEmitter.fire([this.asError(e),r,i])}get onClose(){return this.closeEmitter.event}fireClose(){this.closeEmitter.fire(void 0)}asError(e){return e instanceof Error?e:new Error(`Writer received error. Reason: ${Zk.string(e.message)?e.message:"unknown"}`)}};dp.AbstractMessageWriter=VA;var kV;(function(t){function e(r){return r===void 0||typeof r=="string"?{charset:r??"utf-8",contentTypeEncoder:(0,_2e.default)().applicationJson.encoder}:{charset:r.charset??"utf-8",contentEncoder:r.contentEncoder,contentTypeEncoder:r.contentTypeEncoder??(0,_2e.default)().applicationJson.encoder}}o(e,"fromOptions"),t.fromOptions=e})(kV||(kV={}));var CV=class extends VA{static{o(this,"WriteableStreamMessageWriter")}constructor(e,r){super(),this.writable=e,this.options=kV.fromOptions(r),this.errorCount=0,this.writeSemaphore=new Gst.Semaphore(1),this.writable.onError(i=>this.fireError(i)),this.writable.onClose(()=>this.fireClose())}async write(e){return this.writeSemaphore.lock(async()=>this.options.contentTypeEncoder.encode(e,this.options).then(i=>this.options.contentEncoder!==void 0?this.options.contentEncoder.encode(i):i).then(i=>{let n=[];return n.push(Vst,i.byteLength.toString(),L2e),n.push(L2e),this.doWrite(e,n,i)},i=>{throw this.fireError(i),i}))}async doWrite(e,r,i){try{return await this.writable.write(r.join(""),"ascii"),this.writable.write(i)}catch(n){return this.handleError(n,e),Promise.reject(n)}}handleError(e,r){this.errorCount++,this.fireError(e,r,this.errorCount)}end(){this.writable.end()}};dp.WriteableStreamMessageWriter=CV});var I2e=ar(qA=>{"use strict";Object.defineProperty(qA,"__esModule",{value:!0});qA.AbstractMessageBuffer=void 0;var qst=13,Wst=10,Ust=`\r +`,wV=class{static{o(this,"AbstractMessageBuffer")}constructor(e="utf-8"){this._encoding=e,this._chunks=[],this._totalLength=0}get encoding(){return this._encoding}append(e){let r=typeof e=="string"?this.fromString(e,this._encoding):e;this._chunks.push(r),this._totalLength+=r.byteLength}tryReadHeaders(e=!1){if(this._chunks.length===0)return;let r=0,i=0,n=0,a=0;e:for(;ithis._totalLength)throw new Error("Cannot read so many bytes!");if(this._chunks[0].byteLength===e){let a=this._chunks[0];return this._chunks.shift(),this._totalLength-=e,this.asNative(a)}if(this._chunks[0].byteLength>e){let a=this._chunks[0],s=this.asNative(a,e);return this._chunks[0]=a.slice(e),this._totalLength-=e,s}let r=this.allocNative(e),i=0,n=0;for(;e>0;){let a=this._chunks[n];if(a.byteLength>e){let s=a.slice(0,e);r.set(s,i),i+=e,this._chunks[n]=a.slice(e),this._totalLength-=e,e-=e}else r.set(a,i),i+=a.byteLength,this._chunks.shift(),this._totalLength-=a.byteLength,e-=a.byteLength}return r}};qA.AbstractMessageBuffer=wV});var F2e=ar(Fr=>{"use strict";Object.defineProperty(Fr,"__esModule",{value:!0});Fr.createMessageConnection=Fr.ConnectionOptions=Fr.MessageStrategy=Fr.CancellationStrategy=Fr.CancellationSenderStrategy=Fr.CancellationReceiverStrategy=Fr.RequestCancellationReceiverStrategy=Fr.IdCancellationReceiverStrategy=Fr.ConnectionStrategy=Fr.ConnectionError=Fr.ConnectionErrors=Fr.LogTraceNotification=Fr.SetTraceNotification=Fr.TraceFormat=Fr.TraceValues=Fr.Trace=Fr.NullLogger=Fr.ProgressType=Fr.ProgressToken=void 0;var M2e=cp(),Ln=yv(),kr=cV(),O2e=hV(),Jk=$m(),EV=Ik(),rC;(function(t){t.type=new kr.NotificationType("$/cancelRequest")})(rC||(rC={}));var SV;(function(t){function e(r){return typeof r=="string"||typeof r=="number"}o(e,"is"),t.is=e})(SV||(Fr.ProgressToken=SV={}));var eC;(function(t){t.type=new kr.NotificationType("$/progress")})(eC||(eC={}));var AV=class{static{o(this,"ProgressType")}constructor(){}};Fr.ProgressType=AV;var _V;(function(t){function e(r){return Ln.func(r)}o(e,"is"),t.is=e})(_V||(_V={}));Fr.NullLogger=Object.freeze({error:o(()=>{},"error"),warn:o(()=>{},"warn"),info:o(()=>{},"info"),log:o(()=>{},"log")});var Ti;(function(t){t[t.Off=0]="Off",t[t.Messages=1]="Messages",t[t.Compact=2]="Compact",t[t.Verbose=3]="Verbose"})(Ti||(Fr.Trace=Ti={}));var P2e;(function(t){t.Off="off",t.Messages="messages",t.Compact="compact",t.Verbose="verbose"})(P2e||(Fr.TraceValues=P2e={}));(function(t){function e(i){if(!Ln.string(i))return t.Off;switch(i=i.toLowerCase(),i){case"off":return t.Off;case"messages":return t.Messages;case"compact":return t.Compact;case"verbose":return t.Verbose;default:return t.Off}}o(e,"fromString"),t.fromString=e;function r(i){switch(i){case t.Off:return"off";case t.Messages:return"messages";case t.Compact:return"compact";case t.Verbose:return"verbose";default:return"off"}}o(r,"toString"),t.toString=r})(Ti||(Fr.Trace=Ti={}));var ul;(function(t){t.Text="text",t.JSON="json"})(ul||(Fr.TraceFormat=ul={}));(function(t){function e(r){return Ln.string(r)?(r=r.toLowerCase(),r==="json"?t.JSON:t.Text):t.Text}o(e,"fromString"),t.fromString=e})(ul||(Fr.TraceFormat=ul={}));var DV;(function(t){t.type=new kr.NotificationType("$/setTrace")})(DV||(Fr.SetTraceNotification=DV={}));var WA;(function(t){t.type=new kr.NotificationType("$/logTrace")})(WA||(Fr.LogTraceNotification=WA={}));var tC;(function(t){t[t.Closed=1]="Closed",t[t.Disposed=2]="Disposed",t[t.AlreadyListening=3]="AlreadyListening"})(tC||(Fr.ConnectionErrors=tC={}));var Dv=class t extends Error{static{o(this,"ConnectionError")}constructor(e,r){super(r),this.code=e,Object.setPrototypeOf(this,t.prototype)}};Fr.ConnectionError=Dv;var LV;(function(t){function e(r){let i=r;return i&&Ln.func(i.cancelUndispatched)}o(e,"is"),t.is=e})(LV||(Fr.ConnectionStrategy=LV={}));var UA;(function(t){function e(r){let i=r;return i&&(i.kind===void 0||i.kind==="id")&&Ln.func(i.createCancellationTokenSource)&&(i.dispose===void 0||Ln.func(i.dispose))}o(e,"is"),t.is=e})(UA||(Fr.IdCancellationReceiverStrategy=UA={}));var RV;(function(t){function e(r){let i=r;return i&&i.kind==="request"&&Ln.func(i.createCancellationTokenSource)&&(i.dispose===void 0||Ln.func(i.dispose))}o(e,"is"),t.is=e})(RV||(Fr.RequestCancellationReceiverStrategy=RV={}));var HA;(function(t){t.Message=Object.freeze({createCancellationTokenSource(r){return new EV.CancellationTokenSource}});function e(r){return UA.is(r)||RV.is(r)}o(e,"is"),t.is=e})(HA||(Fr.CancellationReceiverStrategy=HA={}));var YA;(function(t){t.Message=Object.freeze({sendCancellation(r,i){return r.sendNotification(rC.type,{id:i})},cleanup(r){}});function e(r){let i=r;return i&&Ln.func(i.sendCancellation)&&Ln.func(i.cleanup)}o(e,"is"),t.is=e})(YA||(Fr.CancellationSenderStrategy=YA={}));var jA;(function(t){t.Message=Object.freeze({receiver:HA.Message,sender:YA.Message});function e(r){let i=r;return i&&HA.is(i.receiver)&&YA.is(i.sender)}o(e,"is"),t.is=e})(jA||(Fr.CancellationStrategy=jA={}));var XA;(function(t){function e(r){let i=r;return i&&Ln.func(i.handleMessage)}o(e,"is"),t.is=e})(XA||(Fr.MessageStrategy=XA={}));var B2e;(function(t){function e(r){let i=r;return i&&(jA.is(i.cancellationStrategy)||LV.is(i.connectionStrategy)||XA.is(i.messageStrategy))}o(e,"is"),t.is=e})(B2e||(Fr.ConnectionOptions=B2e={}));var Uc;(function(t){t[t.New=1]="New",t[t.Listening=2]="Listening",t[t.Closed=3]="Closed",t[t.Disposed=4]="Disposed"})(Uc||(Uc={}));function Hst(t,e,r,i){let n=r!==void 0?r:Fr.NullLogger,a=0,s=0,l=0,u="2.0",h,f=new Map,d,p=new Map,m=new Map,g,y=new O2e.LinkedMap,v=new Map,x=new Set,b=new Map,T=Ti.Off,w=ul.Text,k,C=Uc.New,E=new Jk.Emitter,S=new Jk.Emitter,L=new Jk.Emitter,M=new Jk.Emitter,I=new Jk.Emitter,A=i&&i.cancellationStrategy?i.cancellationStrategy:jA.Message;function _(K){if(K===null)throw new Error("Can't send requests with id null since the response can't be correlated.");return"req-"+K.toString()}o(_,"createRequestQueueKey");function D(K){return K===null?"res-unknown-"+(++l).toString():"res-"+K.toString()}o(D,"createResponseQueueKey");function N(){return"not-"+(++s).toString()}o(N,"createNotificationQueueKey");function R(K,oe){kr.Message.isRequest(oe)?K.set(_(oe.id),oe):kr.Message.isResponse(oe)?K.set(D(oe.id),oe):K.set(N(),oe)}o(R,"addMessageToQueue");function B(K){}o(B,"cancelUndispatched");function O(){return C===Uc.Listening}o(O,"isListening");function $(){return C===Uc.Closed}o($,"isClosed");function z(){return C===Uc.Disposed}o(z,"isDisposed");function F(){(C===Uc.New||C===Uc.Listening)&&(C=Uc.Closed,S.fire(void 0))}o(F,"closeHandler");function V(K){E.fire([K,void 0,void 0])}o(V,"readErrorHandler");function H(K){E.fire(K)}o(H,"writeErrorHandler"),t.onClose(F),t.onError(V),e.onClose(F),e.onError(H);function X(){g||y.size===0||(g=(0,M2e.default)().timer.setImmediate(()=>{g=void 0,Z()}))}o(X,"triggerMessageQueue");function W(K){kr.Message.isRequest(K)?ae(K):kr.Message.isNotification(K)?ee(K):kr.Message.isResponse(K)?J(K):re(K)}o(W,"handleMessage");function Z(){if(y.size===0)return;let K=y.shift();try{let oe=i?.messageStrategy;XA.is(oe)?oe.handleMessage(K,W):W(K)}finally{X()}}o(Z,"processMessageQueue");let Y=o(K=>{try{if(kr.Message.isNotification(K)&&K.method===rC.type.method){let oe=K.params.id,U=_(oe),ue=y.get(U);if(kr.Message.isRequest(ue)){let se=i?.connectionStrategy,le=se&&se.cancelUndispatched?se.cancelUndispatched(ue,B):void 0;if(le&&(le.error!==void 0||le.result!==void 0)){y.delete(U),b.delete(oe),le.id=ue.id,Ee(le,K.method,Date.now()),e.write(le).catch(()=>n.error("Sending response for canceled message failed."));return}}let G=b.get(oe);if(G!==void 0){G.cancel(),we(K);return}else x.add(oe)}R(y,K)}finally{X()}},"callback");function ae(K){if(z())return;function oe(me,ye,Re){let ve={jsonrpc:u,id:K.id};me instanceof kr.ResponseError?ve.error=me.toJson():ve.result=me===void 0?null:me,Ee(ve,ye,Re),e.write(ve).catch(()=>n.error("Sending response failed."))}o(oe,"reply");function U(me,ye,Re){let ve={jsonrpc:u,id:K.id,error:me.toJson()};Ee(ve,ye,Re),e.write(ve).catch(()=>n.error("Sending response failed."))}o(U,"replyError");function ue(me,ye,Re){me===void 0&&(me=null);let ve={jsonrpc:u,id:K.id,result:me};Ee(ve,ye,Re),e.write(ve).catch(()=>n.error("Sending response failed."))}o(ue,"replySuccess"),Ne(K);let G=f.get(K.method),se,le;G&&(se=G.type,le=G.handler);let ke=Date.now();if(le||h){let me=K.id??String(Date.now()),ye=UA.is(A.receiver)?A.receiver.createCancellationTokenSource(me):A.receiver.createCancellationTokenSource(K);K.id!==null&&x.has(K.id)&&ye.cancel(),K.id!==null&&b.set(me,ye);try{let Re;if(le)if(K.params===void 0){if(se!==void 0&&se.numberOfParams!==0){U(new kr.ResponseError(kr.ErrorCodes.InvalidParams,`Request ${K.method} defines ${se.numberOfParams} params but received none.`),K.method,ke);return}Re=le(ye.token)}else if(Array.isArray(K.params)){if(se!==void 0&&se.parameterStructures===kr.ParameterStructures.byName){U(new kr.ResponseError(kr.ErrorCodes.InvalidParams,`Request ${K.method} defines parameters by name but received parameters by position`),K.method,ke);return}Re=le(...K.params,ye.token)}else{if(se!==void 0&&se.parameterStructures===kr.ParameterStructures.byPosition){U(new kr.ResponseError(kr.ErrorCodes.InvalidParams,`Request ${K.method} defines parameters by position but received parameters by name`),K.method,ke);return}Re=le(K.params,ye.token)}else h&&(Re=h(K.method,K.params,ye.token));let ve=Re;Re?ve.then?ve.then(Oe=>{b.delete(me),oe(Oe,K.method,ke)},Oe=>{b.delete(me),Oe instanceof kr.ResponseError?U(Oe,K.method,ke):Oe&&Ln.string(Oe.message)?U(new kr.ResponseError(kr.ErrorCodes.InternalError,`Request ${K.method} failed with message: ${Oe.message}`),K.method,ke):U(new kr.ResponseError(kr.ErrorCodes.InternalError,`Request ${K.method} failed unexpectedly without providing any details.`),K.method,ke)}):(b.delete(me),oe(Re,K.method,ke)):(b.delete(me),ue(Re,K.method,ke))}catch(Re){b.delete(me),Re instanceof kr.ResponseError?oe(Re,K.method,ke):Re&&Ln.string(Re.message)?U(new kr.ResponseError(kr.ErrorCodes.InternalError,`Request ${K.method} failed with message: ${Re.message}`),K.method,ke):U(new kr.ResponseError(kr.ErrorCodes.InternalError,`Request ${K.method} failed unexpectedly without providing any details.`),K.method,ke)}}else U(new kr.ResponseError(kr.ErrorCodes.MethodNotFound,`Unhandled method ${K.method}`),K.method,ke)}o(ae,"handleRequest");function J(K){if(!z())if(K.id===null)K.error?n.error(`Received response message without id: Error is: +${JSON.stringify(K.error,void 0,4)}`):n.error("Received response message without id. No further error information provided.");else{let oe=K.id,U=v.get(oe);if(Te(K,U),U!==void 0){v.delete(oe);try{if(K.error){let ue=K.error;U.reject(new kr.ResponseError(ue.code,ue.message,ue.data))}else if(K.result!==void 0)U.resolve(K.result);else throw new Error("Should never happen.")}catch(ue){ue.message?n.error(`Response handler '${U.method}' failed with message: ${ue.message}`):n.error(`Response handler '${U.method}' failed unexpectedly.`)}}}}o(J,"handleResponse");function ee(K){if(z())return;let oe,U;if(K.method===rC.type.method){let ue=K.params.id;x.delete(ue),we(K);return}else{let ue=p.get(K.method);ue&&(U=ue.handler,oe=ue.type)}if(U||d)try{if(we(K),U)if(K.params===void 0)oe!==void 0&&oe.numberOfParams!==0&&oe.parameterStructures!==kr.ParameterStructures.byName&&n.error(`Notification ${K.method} defines ${oe.numberOfParams} params but received none.`),U();else if(Array.isArray(K.params)){let ue=K.params;K.method===eC.type.method&&ue.length===2&&SV.is(ue[0])?U({token:ue[0],value:ue[1]}):(oe!==void 0&&(oe.parameterStructures===kr.ParameterStructures.byName&&n.error(`Notification ${K.method} defines parameters by name but received parameters by position`),oe.numberOfParams!==K.params.length&&n.error(`Notification ${K.method} defines ${oe.numberOfParams} params but received ${ue.length} arguments`)),U(...ue))}else oe!==void 0&&oe.parameterStructures===kr.ParameterStructures.byPosition&&n.error(`Notification ${K.method} defines parameters by position but received parameters by name`),U(K.params);else d&&d(K.method,K.params)}catch(ue){ue.message?n.error(`Notification handler '${K.method}' failed with message: ${ue.message}`):n.error(`Notification handler '${K.method}' failed unexpectedly.`)}else L.fire(K)}o(ee,"handleNotification");function re(K){if(!K){n.error("Received empty message.");return}n.error(`Received message which is neither a response nor a notification message: +${JSON.stringify(K,null,4)}`);let oe=K;if(Ln.string(oe.id)||Ln.number(oe.id)){let U=oe.id,ue=v.get(U);ue&&ue.reject(new Error("The received response has neither a result nor an error property."))}}o(re,"handleInvalidMessage");function te(K){if(K!=null)switch(T){case Ti.Verbose:return JSON.stringify(K,null,4);case Ti.Compact:return JSON.stringify(K);default:return}}o(te,"stringifyTrace");function be(K){if(!(T===Ti.Off||!k))if(w===ul.Text){let oe;(T===Ti.Verbose||T===Ti.Compact)&&K.params&&(oe=`Params: ${te(K.params)} + +`),k.log(`Sending request '${K.method} - (${K.id})'.`,oe)}else De("send-request",K)}o(be,"traceSendingRequest");function de(K){if(!(T===Ti.Off||!k))if(w===ul.Text){let oe;(T===Ti.Verbose||T===Ti.Compact)&&(K.params?oe=`Params: ${te(K.params)} + +`:oe=`No parameters provided. + +`),k.log(`Sending notification '${K.method}'.`,oe)}else De("send-notification",K)}o(de,"traceSendingNotification");function Ee(K,oe,U){if(!(T===Ti.Off||!k))if(w===ul.Text){let ue;(T===Ti.Verbose||T===Ti.Compact)&&(K.error&&K.error.data?ue=`Error data: ${te(K.error.data)} + +`:K.result?ue=`Result: ${te(K.result)} + +`:K.error===void 0&&(ue=`No result returned. + +`)),k.log(`Sending response '${oe} - (${K.id})'. Processing request took ${Date.now()-U}ms`,ue)}else De("send-response",K)}o(Ee,"traceSendingResponse");function Ne(K){if(!(T===Ti.Off||!k))if(w===ul.Text){let oe;(T===Ti.Verbose||T===Ti.Compact)&&K.params&&(oe=`Params: ${te(K.params)} + +`),k.log(`Received request '${K.method} - (${K.id})'.`,oe)}else De("receive-request",K)}o(Ne,"traceReceivedRequest");function we(K){if(!(T===Ti.Off||!k||K.method===WA.type.method))if(w===ul.Text){let oe;(T===Ti.Verbose||T===Ti.Compact)&&(K.params?oe=`Params: ${te(K.params)} + +`:oe=`No parameters provided. + +`),k.log(`Received notification '${K.method}'.`,oe)}else De("receive-notification",K)}o(we,"traceReceivedNotification");function Te(K,oe){if(!(T===Ti.Off||!k))if(w===ul.Text){let U;if((T===Ti.Verbose||T===Ti.Compact)&&(K.error&&K.error.data?U=`Error data: ${te(K.error.data)} + +`:K.result?U=`Result: ${te(K.result)} + +`:K.error===void 0&&(U=`No result returned. + +`)),oe){let ue=K.error?` Request failed: ${K.error.message} (${K.error.code}).`:"";k.log(`Received response '${oe.method} - (${K.id})' in ${Date.now()-oe.timerStart}ms.${ue}`,U)}else k.log(`Received response ${K.id} without active response promise.`,U)}else De("receive-response",K)}o(Te,"traceReceivedResponse");function De(K,oe){if(!k||T===Ti.Off)return;let U={isLSPMessage:!0,type:K,message:oe,timestamp:Date.now()};k.log(U)}o(De,"logLSPMessage");function $e(){if($())throw new Dv(tC.Closed,"Connection is closed.");if(z())throw new Dv(tC.Disposed,"Connection is disposed.")}o($e,"throwIfClosedOrDisposed");function pe(){if(O())throw new Dv(tC.AlreadyListening,"Connection is already listening")}o(pe,"throwIfListening");function Je(){if(!O())throw new Error("Call listen() first.")}o(Je,"throwIfNotListening");function Ce(K){return K===void 0?null:K}o(Ce,"undefinedToNull");function Fe(K){if(K!==null)return K}o(Fe,"nullToUndefined");function Ue(K){return K!=null&&!Array.isArray(K)&&typeof K=="object"}o(Ue,"isNamedParam");function qe(K,oe){switch(K){case kr.ParameterStructures.auto:return Ue(oe)?Fe(oe):[Ce(oe)];case kr.ParameterStructures.byName:if(!Ue(oe))throw new Error("Received parameters by name but param is not an object literal.");return Fe(oe);case kr.ParameterStructures.byPosition:return[Ce(oe)];default:throw new Error(`Unknown parameter structure ${K.toString()}`)}}o(qe,"computeSingleParam");function Me(K,oe){let U,ue=K.numberOfParams;switch(ue){case 0:U=void 0;break;case 1:U=qe(K.parameterStructures,oe[0]);break;default:U=[];for(let G=0;G{$e();let U,ue;if(Ln.string(K)){U=K;let se=oe[0],le=0,ke=kr.ParameterStructures.auto;kr.ParameterStructures.is(se)&&(le=1,ke=se);let me=oe.length,ye=me-le;switch(ye){case 0:ue=void 0;break;case 1:ue=qe(ke,oe[le]);break;default:if(ke===kr.ParameterStructures.byName)throw new Error(`Received ${ye} parameters for 'by Name' notification parameter structure.`);ue=oe.slice(le,me).map(Re=>Ce(Re));break}}else{let se=oe;U=K.method,ue=Me(K,se)}let G={jsonrpc:u,method:U,params:ue};return de(G),e.write(G).catch(se=>{throw n.error("Sending notification failed."),se})},"sendNotification"),onNotification:o((K,oe)=>{$e();let U;return Ln.func(K)?d=K:oe&&(Ln.string(K)?(U=K,p.set(K,{type:void 0,handler:oe})):(U=K.method,p.set(K.method,{type:K,handler:oe}))),{dispose:o(()=>{U!==void 0?p.delete(U):d=void 0},"dispose")}},"onNotification"),onProgress:o((K,oe,U)=>{if(m.has(oe))throw new Error(`Progress handler for token ${oe} already registered`);return m.set(oe,U),{dispose:o(()=>{m.delete(oe)},"dispose")}},"onProgress"),sendProgress:o((K,oe,U)=>He.sendNotification(eC.type,{token:oe,value:U}),"sendProgress"),onUnhandledProgress:M.event,sendRequest:o((K,...oe)=>{$e(),Je();let U,ue,G;if(Ln.string(K)){U=K;let me=oe[0],ye=oe[oe.length-1],Re=0,ve=kr.ParameterStructures.auto;kr.ParameterStructures.is(me)&&(Re=1,ve=me);let Oe=oe.length;EV.CancellationToken.is(ye)&&(Oe=Oe-1,G=ye);let We=Oe-Re;switch(We){case 0:ue=void 0;break;case 1:ue=qe(ve,oe[Re]);break;default:if(ve===kr.ParameterStructures.byName)throw new Error(`Received ${We} parameters for 'by Name' request parameter structure.`);ue=oe.slice(Re,Oe).map(Be=>Ce(Be));break}}else{let me=oe;U=K.method,ue=Me(K,me);let ye=K.numberOfParams;G=EV.CancellationToken.is(me[ye])?me[ye]:void 0}let se=a++,le;G&&(le=G.onCancellationRequested(()=>{let me=A.sender.sendCancellation(He,se);return me===void 0?(n.log(`Received no promise from cancellation strategy when cancelling id ${se}`),Promise.resolve()):me.catch(()=>{n.log(`Sending cancellation messages for id ${se} failed`)})}));let ke={jsonrpc:u,id:se,method:U,params:ue};return be(ke),typeof A.sender.enableCancellation=="function"&&A.sender.enableCancellation(ke),new Promise(async(me,ye)=>{let Re=o(We=>{me(We),A.sender.cleanup(se),le?.dispose()},"resolveWithCleanup"),ve=o(We=>{ye(We),A.sender.cleanup(se),le?.dispose()},"rejectWithCleanup"),Oe={method:U,timerStart:Date.now(),resolve:Re,reject:ve};try{await e.write(ke),v.set(se,Oe)}catch(We){throw n.error("Sending request failed."),Oe.reject(new kr.ResponseError(kr.ErrorCodes.MessageWriteError,We.message?We.message:"Unknown reason")),We}})},"sendRequest"),onRequest:o((K,oe)=>{$e();let U=null;return _V.is(K)?(U=void 0,h=K):Ln.string(K)?(U=null,oe!==void 0&&(U=K,f.set(K,{handler:oe,type:void 0}))):oe!==void 0&&(U=K.method,f.set(K.method,{type:K,handler:oe})),{dispose:o(()=>{U!==null&&(U!==void 0?f.delete(U):h=void 0)},"dispose")}},"onRequest"),hasPendingResponse:o(()=>v.size>0,"hasPendingResponse"),trace:o(async(K,oe,U)=>{let ue=!1,G=ul.Text;U!==void 0&&(Ln.boolean(U)?ue=U:(ue=U.sendNotification||!1,G=U.traceFormat||ul.Text)),T=K,w=G,T===Ti.Off?k=void 0:k=oe,ue&&!$()&&!z()&&await He.sendNotification(DV.type,{value:Ti.toString(K)})},"trace"),onError:E.event,onClose:S.event,onUnhandledNotification:L.event,onDispose:I.event,end:o(()=>{e.end()},"end"),dispose:o(()=>{if(z())return;C=Uc.Disposed,I.fire(void 0);let K=new kr.ResponseError(kr.ErrorCodes.PendingResponseRejected,"Pending response rejected since connection got disposed");for(let oe of v.values())oe.reject(K);v=new Map,b=new Map,x=new Set,y=new O2e.LinkedMap,Ln.func(e.dispose)&&e.dispose(),Ln.func(t.dispose)&&t.dispose()},"dispose"),listen:o(()=>{$e(),pe(),C=Uc.Listening,t.listen(Y)},"listen"),inspect:o(()=>{(0,M2e.default)().console.log("inspect")},"inspect")};return He.onNotification(WA.type,K=>{if(T===Ti.Off||!k)return;let oe=T===Ti.Verbose||T===Ti.Compact;k.log(K.message,oe?K.verbose:void 0)}),He.onNotification(eC.type,K=>{let oe=m.get(K.token);oe?oe(K.value):M.fire(K)}),He}o(Hst,"createMessageConnection");Fr.createMessageConnection=Hst});var KA=ar(nt=>{"use strict";Object.defineProperty(nt,"__esModule",{value:!0});nt.ProgressType=nt.ProgressToken=nt.createMessageConnection=nt.NullLogger=nt.ConnectionOptions=nt.ConnectionStrategy=nt.AbstractMessageBuffer=nt.WriteableStreamMessageWriter=nt.AbstractMessageWriter=nt.MessageWriter=nt.ReadableStreamMessageReader=nt.AbstractMessageReader=nt.MessageReader=nt.SharedArrayReceiverStrategy=nt.SharedArraySenderStrategy=nt.CancellationToken=nt.CancellationTokenSource=nt.Emitter=nt.Event=nt.Disposable=nt.LRUCache=nt.Touch=nt.LinkedMap=nt.ParameterStructures=nt.NotificationType9=nt.NotificationType8=nt.NotificationType7=nt.NotificationType6=nt.NotificationType5=nt.NotificationType4=nt.NotificationType3=nt.NotificationType2=nt.NotificationType1=nt.NotificationType0=nt.NotificationType=nt.ErrorCodes=nt.ResponseError=nt.RequestType9=nt.RequestType8=nt.RequestType7=nt.RequestType6=nt.RequestType5=nt.RequestType4=nt.RequestType3=nt.RequestType2=nt.RequestType1=nt.RequestType0=nt.RequestType=nt.Message=nt.RAL=void 0;nt.MessageStrategy=nt.CancellationStrategy=nt.CancellationSenderStrategy=nt.CancellationReceiverStrategy=nt.ConnectionError=nt.ConnectionErrors=nt.LogTraceNotification=nt.SetTraceNotification=nt.TraceFormat=nt.TraceValues=nt.Trace=void 0;var nn=cV();Object.defineProperty(nt,"Message",{enumerable:!0,get:o(function(){return nn.Message},"get")});Object.defineProperty(nt,"RequestType",{enumerable:!0,get:o(function(){return nn.RequestType},"get")});Object.defineProperty(nt,"RequestType0",{enumerable:!0,get:o(function(){return nn.RequestType0},"get")});Object.defineProperty(nt,"RequestType1",{enumerable:!0,get:o(function(){return nn.RequestType1},"get")});Object.defineProperty(nt,"RequestType2",{enumerable:!0,get:o(function(){return nn.RequestType2},"get")});Object.defineProperty(nt,"RequestType3",{enumerable:!0,get:o(function(){return nn.RequestType3},"get")});Object.defineProperty(nt,"RequestType4",{enumerable:!0,get:o(function(){return nn.RequestType4},"get")});Object.defineProperty(nt,"RequestType5",{enumerable:!0,get:o(function(){return nn.RequestType5},"get")});Object.defineProperty(nt,"RequestType6",{enumerable:!0,get:o(function(){return nn.RequestType6},"get")});Object.defineProperty(nt,"RequestType7",{enumerable:!0,get:o(function(){return nn.RequestType7},"get")});Object.defineProperty(nt,"RequestType8",{enumerable:!0,get:o(function(){return nn.RequestType8},"get")});Object.defineProperty(nt,"RequestType9",{enumerable:!0,get:o(function(){return nn.RequestType9},"get")});Object.defineProperty(nt,"ResponseError",{enumerable:!0,get:o(function(){return nn.ResponseError},"get")});Object.defineProperty(nt,"ErrorCodes",{enumerable:!0,get:o(function(){return nn.ErrorCodes},"get")});Object.defineProperty(nt,"NotificationType",{enumerable:!0,get:o(function(){return nn.NotificationType},"get")});Object.defineProperty(nt,"NotificationType0",{enumerable:!0,get:o(function(){return nn.NotificationType0},"get")});Object.defineProperty(nt,"NotificationType1",{enumerable:!0,get:o(function(){return nn.NotificationType1},"get")});Object.defineProperty(nt,"NotificationType2",{enumerable:!0,get:o(function(){return nn.NotificationType2},"get")});Object.defineProperty(nt,"NotificationType3",{enumerable:!0,get:o(function(){return nn.NotificationType3},"get")});Object.defineProperty(nt,"NotificationType4",{enumerable:!0,get:o(function(){return nn.NotificationType4},"get")});Object.defineProperty(nt,"NotificationType5",{enumerable:!0,get:o(function(){return nn.NotificationType5},"get")});Object.defineProperty(nt,"NotificationType6",{enumerable:!0,get:o(function(){return nn.NotificationType6},"get")});Object.defineProperty(nt,"NotificationType7",{enumerable:!0,get:o(function(){return nn.NotificationType7},"get")});Object.defineProperty(nt,"NotificationType8",{enumerable:!0,get:o(function(){return nn.NotificationType8},"get")});Object.defineProperty(nt,"NotificationType9",{enumerable:!0,get:o(function(){return nn.NotificationType9},"get")});Object.defineProperty(nt,"ParameterStructures",{enumerable:!0,get:o(function(){return nn.ParameterStructures},"get")});var NV=hV();Object.defineProperty(nt,"LinkedMap",{enumerable:!0,get:o(function(){return NV.LinkedMap},"get")});Object.defineProperty(nt,"LRUCache",{enumerable:!0,get:o(function(){return NV.LRUCache},"get")});Object.defineProperty(nt,"Touch",{enumerable:!0,get:o(function(){return NV.Touch},"get")});var Yst=w2e();Object.defineProperty(nt,"Disposable",{enumerable:!0,get:o(function(){return Yst.Disposable},"get")});var $2e=$m();Object.defineProperty(nt,"Event",{enumerable:!0,get:o(function(){return $2e.Event},"get")});Object.defineProperty(nt,"Emitter",{enumerable:!0,get:o(function(){return $2e.Emitter},"get")});var z2e=Ik();Object.defineProperty(nt,"CancellationTokenSource",{enumerable:!0,get:o(function(){return z2e.CancellationTokenSource},"get")});Object.defineProperty(nt,"CancellationToken",{enumerable:!0,get:o(function(){return z2e.CancellationToken},"get")});var G2e=E2e();Object.defineProperty(nt,"SharedArraySenderStrategy",{enumerable:!0,get:o(function(){return G2e.SharedArraySenderStrategy},"get")});Object.defineProperty(nt,"SharedArrayReceiverStrategy",{enumerable:!0,get:o(function(){return G2e.SharedArrayReceiverStrategy},"get")});var IV=A2e();Object.defineProperty(nt,"MessageReader",{enumerable:!0,get:o(function(){return IV.MessageReader},"get")});Object.defineProperty(nt,"AbstractMessageReader",{enumerable:!0,get:o(function(){return IV.AbstractMessageReader},"get")});Object.defineProperty(nt,"ReadableStreamMessageReader",{enumerable:!0,get:o(function(){return IV.ReadableStreamMessageReader},"get")});var MV=N2e();Object.defineProperty(nt,"MessageWriter",{enumerable:!0,get:o(function(){return MV.MessageWriter},"get")});Object.defineProperty(nt,"AbstractMessageWriter",{enumerable:!0,get:o(function(){return MV.AbstractMessageWriter},"get")});Object.defineProperty(nt,"WriteableStreamMessageWriter",{enumerable:!0,get:o(function(){return MV.WriteableStreamMessageWriter},"get")});var jst=I2e();Object.defineProperty(nt,"AbstractMessageBuffer",{enumerable:!0,get:o(function(){return jst.AbstractMessageBuffer},"get")});var as=F2e();Object.defineProperty(nt,"ConnectionStrategy",{enumerable:!0,get:o(function(){return as.ConnectionStrategy},"get")});Object.defineProperty(nt,"ConnectionOptions",{enumerable:!0,get:o(function(){return as.ConnectionOptions},"get")});Object.defineProperty(nt,"NullLogger",{enumerable:!0,get:o(function(){return as.NullLogger},"get")});Object.defineProperty(nt,"createMessageConnection",{enumerable:!0,get:o(function(){return as.createMessageConnection},"get")});Object.defineProperty(nt,"ProgressToken",{enumerable:!0,get:o(function(){return as.ProgressToken},"get")});Object.defineProperty(nt,"ProgressType",{enumerable:!0,get:o(function(){return as.ProgressType},"get")});Object.defineProperty(nt,"Trace",{enumerable:!0,get:o(function(){return as.Trace},"get")});Object.defineProperty(nt,"TraceValues",{enumerable:!0,get:o(function(){return as.TraceValues},"get")});Object.defineProperty(nt,"TraceFormat",{enumerable:!0,get:o(function(){return as.TraceFormat},"get")});Object.defineProperty(nt,"SetTraceNotification",{enumerable:!0,get:o(function(){return as.SetTraceNotification},"get")});Object.defineProperty(nt,"LogTraceNotification",{enumerable:!0,get:o(function(){return as.LogTraceNotification},"get")});Object.defineProperty(nt,"ConnectionErrors",{enumerable:!0,get:o(function(){return as.ConnectionErrors},"get")});Object.defineProperty(nt,"ConnectionError",{enumerable:!0,get:o(function(){return as.ConnectionError},"get")});Object.defineProperty(nt,"CancellationReceiverStrategy",{enumerable:!0,get:o(function(){return as.CancellationReceiverStrategy},"get")});Object.defineProperty(nt,"CancellationSenderStrategy",{enumerable:!0,get:o(function(){return as.CancellationSenderStrategy},"get")});Object.defineProperty(nt,"CancellationStrategy",{enumerable:!0,get:o(function(){return as.CancellationStrategy},"get")});Object.defineProperty(nt,"MessageStrategy",{enumerable:!0,get:o(function(){return as.MessageStrategy},"get")});var Xst=cp();nt.RAL=Xst.default});var q2e=ar(FV=>{"use strict";Object.defineProperty(FV,"__esModule",{value:!0});var eh=KA(),QA=class t extends eh.AbstractMessageBuffer{static{o(this,"MessageBuffer")}constructor(e="utf-8"){super(e),this.asciiDecoder=new TextDecoder("ascii")}emptyBuffer(){return t.emptyBuffer}fromString(e,r){return new TextEncoder().encode(e)}toString(e,r){return r==="ascii"?this.asciiDecoder.decode(e):new TextDecoder(r).decode(e)}asNative(e,r){return r===void 0?e:e.slice(0,r)}allocNative(e){return new Uint8Array(e)}};QA.emptyBuffer=new Uint8Array(0);var OV=class{static{o(this,"ReadableStreamWrapper")}constructor(e){this.socket=e,this._onData=new eh.Emitter,this._messageListener=r=>{r.data.arrayBuffer().then(n=>{this._onData.fire(new Uint8Array(n))},()=>{(0,eh.RAL)().console.error("Converting blob to array buffer failed.")})},this.socket.addEventListener("message",this._messageListener)}onClose(e){return this.socket.addEventListener("close",e),eh.Disposable.create(()=>this.socket.removeEventListener("close",e))}onError(e){return this.socket.addEventListener("error",e),eh.Disposable.create(()=>this.socket.removeEventListener("error",e))}onEnd(e){return this.socket.addEventListener("end",e),eh.Disposable.create(()=>this.socket.removeEventListener("end",e))}onData(e){return this._onData.event(e)}},PV=class{static{o(this,"WritableStreamWrapper")}constructor(e){this.socket=e}onClose(e){return this.socket.addEventListener("close",e),eh.Disposable.create(()=>this.socket.removeEventListener("close",e))}onError(e){return this.socket.addEventListener("error",e),eh.Disposable.create(()=>this.socket.removeEventListener("error",e))}onEnd(e){return this.socket.addEventListener("end",e),eh.Disposable.create(()=>this.socket.removeEventListener("end",e))}write(e,r){if(typeof e=="string"){if(r!==void 0&&r!=="utf-8")throw new Error(`In a Browser environments only utf-8 text encoding is supported. But got encoding: ${r}`);this.socket.send(e)}else this.socket.send(e);return Promise.resolve()}end(){this.socket.close()}},Kst=new TextEncoder,V2e=Object.freeze({messageBuffer:Object.freeze({create:o(t=>new QA(t),"create")}),applicationJson:Object.freeze({encoder:Object.freeze({name:"application/json",encode:o((t,e)=>{if(e.charset!=="utf-8")throw new Error(`In a Browser environments only utf-8 text encoding is supported. But got encoding: ${e.charset}`);return Promise.resolve(Kst.encode(JSON.stringify(t,void 0,0)))},"encode")}),decoder:Object.freeze({name:"application/json",decode:o((t,e)=>{if(!(t instanceof Uint8Array))throw new Error("In a Browser environments only Uint8Arrays are supported.");return Promise.resolve(JSON.parse(new TextDecoder(e.charset).decode(t)))},"decode")})}),stream:Object.freeze({asReadableStream:o(t=>new OV(t),"asReadableStream"),asWritableStream:o(t=>new PV(t),"asWritableStream")}),console,timer:Object.freeze({setTimeout(t,e,...r){let i=setTimeout(t,e,...r);return{dispose:o(()=>clearTimeout(i),"dispose")}},setImmediate(t,...e){let r=setTimeout(t,0,...e);return{dispose:o(()=>clearTimeout(r),"dispose")}},setInterval(t,e,...r){let i=setInterval(t,e,...r);return{dispose:o(()=>clearInterval(i),"dispose")}}})});function BV(){return V2e}o(BV,"RIL");(function(t){function e(){eh.RAL.install(V2e)}o(e,"install"),t.install=e})(BV||(BV={}));FV.default=BV});var Um=ar(hl=>{"use strict";var Qst=hl&&hl.__createBinding||(Object.create?(function(t,e,r,i){i===void 0&&(i=r);var n=Object.getOwnPropertyDescriptor(e,r);(!n||("get"in n?!e.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:o(function(){return e[r]},"get")}),Object.defineProperty(t,i,n)}):(function(t,e,r,i){i===void 0&&(i=r),t[i]=e[r]})),Zst=hl&&hl.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&Qst(e,t,r)};Object.defineProperty(hl,"__esModule",{value:!0});hl.createMessageConnection=hl.BrowserMessageWriter=hl.BrowserMessageReader=void 0;var Jst=q2e();Jst.default.install();var Lv=KA();Zst(KA(),hl);var $V=class extends Lv.AbstractMessageReader{static{o(this,"BrowserMessageReader")}constructor(e){super(),this._onData=new Lv.Emitter,this._messageListener=r=>{this._onData.fire(r.data)},e.addEventListener("error",r=>this.fireError(r)),e.onmessage=this._messageListener}listen(e){return this._onData.event(e)}};hl.BrowserMessageReader=$V;var zV=class extends Lv.AbstractMessageWriter{static{o(this,"BrowserMessageWriter")}constructor(e){super(),this.port=e,this.errorCount=0,e.addEventListener("error",r=>this.fireError(r))}write(e){try{return this.port.postMessage(e),Promise.resolve()}catch(r){return this.handleError(r,e),Promise.reject(r)}}handleError(e,r){this.errorCount++,this.fireError(e,r,this.errorCount)}end(){}};hl.BrowserMessageWriter=zV;function eot(t,e,r,i){return r===void 0&&(r=Lv.NullLogger),Lv.ConnectionStrategy.is(i)&&(i={connectionStrategy:i}),(0,Lv.createMessageConnection)(t,e,r,i)}o(eot,"createMessageConnection");hl.createMessageConnection=eot});var GV=ar((Rbr,W2e)=>{"use strict";W2e.exports=Um()});var bn=ar(Bo=>{"use strict";Object.defineProperty(Bo,"__esModule",{value:!0});Bo.ProtocolNotificationType=Bo.ProtocolNotificationType0=Bo.ProtocolRequestType=Bo.ProtocolRequestType0=Bo.RegistrationType=Bo.MessageDirection=void 0;var Rv=Um(),U2e;(function(t){t.clientToServer="clientToServer",t.serverToClient="serverToClient",t.both="both"})(U2e||(Bo.MessageDirection=U2e={}));var VV=class{static{o(this,"RegistrationType")}constructor(e){this.method=e}};Bo.RegistrationType=VV;var qV=class extends Rv.RequestType0{static{o(this,"ProtocolRequestType0")}constructor(e){super(e)}};Bo.ProtocolRequestType0=qV;var WV=class extends Rv.RequestType{static{o(this,"ProtocolRequestType")}constructor(e){super(e,Rv.ParameterStructures.byName)}};Bo.ProtocolRequestType=WV;var UV=class extends Rv.NotificationType0{static{o(this,"ProtocolNotificationType0")}constructor(e){super(e)}};Bo.ProtocolNotificationType0=UV;var HV=class extends Rv.NotificationType{static{o(this,"ProtocolNotificationType")}constructor(e){super(e,Rv.ParameterStructures.byName)}};Bo.ProtocolNotificationType=HV});var ZA=ar(ra=>{"use strict";Object.defineProperty(ra,"__esModule",{value:!0});ra.objectLiteral=ra.typedArray=ra.stringArray=ra.array=ra.func=ra.error=ra.number=ra.string=ra.boolean=void 0;function tot(t){return t===!0||t===!1}o(tot,"boolean");ra.boolean=tot;function H2e(t){return typeof t=="string"||t instanceof String}o(H2e,"string");ra.string=H2e;function rot(t){return typeof t=="number"||t instanceof Number}o(rot,"number");ra.number=rot;function iot(t){return t instanceof Error}o(iot,"error");ra.error=iot;function not(t){return typeof t=="function"}o(not,"func");ra.func=not;function Y2e(t){return Array.isArray(t)}o(Y2e,"array");ra.array=Y2e;function aot(t){return Y2e(t)&&t.every(e=>H2e(e))}o(aot,"stringArray");ra.stringArray=aot;function sot(t,e){return Array.isArray(t)&&t.every(e)}o(sot,"typedArray");ra.typedArray=sot;function oot(t){return t!==null&&typeof t=="object"}o(oot,"objectLiteral");ra.objectLiteral=oot});var K2e=ar(JA=>{"use strict";Object.defineProperty(JA,"__esModule",{value:!0});JA.ImplementationRequest=void 0;var j2e=bn(),X2e;(function(t){t.method="textDocument/implementation",t.messageDirection=j2e.MessageDirection.clientToServer,t.type=new j2e.ProtocolRequestType(t.method)})(X2e||(JA.ImplementationRequest=X2e={}))});var J2e=ar(e7=>{"use strict";Object.defineProperty(e7,"__esModule",{value:!0});e7.TypeDefinitionRequest=void 0;var Q2e=bn(),Z2e;(function(t){t.method="textDocument/typeDefinition",t.messageDirection=Q2e.MessageDirection.clientToServer,t.type=new Q2e.ProtocolRequestType(t.method)})(Z2e||(e7.TypeDefinitionRequest=Z2e={}))});var rbe=ar(Nv=>{"use strict";Object.defineProperty(Nv,"__esModule",{value:!0});Nv.DidChangeWorkspaceFoldersNotification=Nv.WorkspaceFoldersRequest=void 0;var t7=bn(),ebe;(function(t){t.method="workspace/workspaceFolders",t.messageDirection=t7.MessageDirection.serverToClient,t.type=new t7.ProtocolRequestType0(t.method)})(ebe||(Nv.WorkspaceFoldersRequest=ebe={}));var tbe;(function(t){t.method="workspace/didChangeWorkspaceFolders",t.messageDirection=t7.MessageDirection.clientToServer,t.type=new t7.ProtocolNotificationType(t.method)})(tbe||(Nv.DidChangeWorkspaceFoldersNotification=tbe={}))});var abe=ar(r7=>{"use strict";Object.defineProperty(r7,"__esModule",{value:!0});r7.ConfigurationRequest=void 0;var ibe=bn(),nbe;(function(t){t.method="workspace/configuration",t.messageDirection=ibe.MessageDirection.serverToClient,t.type=new ibe.ProtocolRequestType(t.method)})(nbe||(r7.ConfigurationRequest=nbe={}))});var lbe=ar(Iv=>{"use strict";Object.defineProperty(Iv,"__esModule",{value:!0});Iv.ColorPresentationRequest=Iv.DocumentColorRequest=void 0;var i7=bn(),sbe;(function(t){t.method="textDocument/documentColor",t.messageDirection=i7.MessageDirection.clientToServer,t.type=new i7.ProtocolRequestType(t.method)})(sbe||(Iv.DocumentColorRequest=sbe={}));var obe;(function(t){t.method="textDocument/colorPresentation",t.messageDirection=i7.MessageDirection.clientToServer,t.type=new i7.ProtocolRequestType(t.method)})(obe||(Iv.ColorPresentationRequest=obe={}))});var hbe=ar(Mv=>{"use strict";Object.defineProperty(Mv,"__esModule",{value:!0});Mv.FoldingRangeRefreshRequest=Mv.FoldingRangeRequest=void 0;var n7=bn(),cbe;(function(t){t.method="textDocument/foldingRange",t.messageDirection=n7.MessageDirection.clientToServer,t.type=new n7.ProtocolRequestType(t.method)})(cbe||(Mv.FoldingRangeRequest=cbe={}));var ube;(function(t){t.method="workspace/foldingRange/refresh",t.messageDirection=n7.MessageDirection.serverToClient,t.type=new n7.ProtocolRequestType0(t.method)})(ube||(Mv.FoldingRangeRefreshRequest=ube={}))});var pbe=ar(a7=>{"use strict";Object.defineProperty(a7,"__esModule",{value:!0});a7.DeclarationRequest=void 0;var fbe=bn(),dbe;(function(t){t.method="textDocument/declaration",t.messageDirection=fbe.MessageDirection.clientToServer,t.type=new fbe.ProtocolRequestType(t.method)})(dbe||(a7.DeclarationRequest=dbe={}))});var ybe=ar(s7=>{"use strict";Object.defineProperty(s7,"__esModule",{value:!0});s7.SelectionRangeRequest=void 0;var mbe=bn(),gbe;(function(t){t.method="textDocument/selectionRange",t.messageDirection=mbe.MessageDirection.clientToServer,t.type=new mbe.ProtocolRequestType(t.method)})(gbe||(s7.SelectionRangeRequest=gbe={}))});var Tbe=ar(pp=>{"use strict";Object.defineProperty(pp,"__esModule",{value:!0});pp.WorkDoneProgressCancelNotification=pp.WorkDoneProgressCreateRequest=pp.WorkDoneProgress=void 0;var lot=Um(),o7=bn(),vbe;(function(t){t.type=new lot.ProgressType;function e(r){return r===t.type}o(e,"is"),t.is=e})(vbe||(pp.WorkDoneProgress=vbe={}));var xbe;(function(t){t.method="window/workDoneProgress/create",t.messageDirection=o7.MessageDirection.serverToClient,t.type=new o7.ProtocolRequestType(t.method)})(xbe||(pp.WorkDoneProgressCreateRequest=xbe={}));var bbe;(function(t){t.method="window/workDoneProgress/cancel",t.messageDirection=o7.MessageDirection.clientToServer,t.type=new o7.ProtocolNotificationType(t.method)})(bbe||(pp.WorkDoneProgressCancelNotification=bbe={}))});var Ebe=ar(mp=>{"use strict";Object.defineProperty(mp,"__esModule",{value:!0});mp.CallHierarchyOutgoingCallsRequest=mp.CallHierarchyIncomingCallsRequest=mp.CallHierarchyPrepareRequest=void 0;var Ov=bn(),kbe;(function(t){t.method="textDocument/prepareCallHierarchy",t.messageDirection=Ov.MessageDirection.clientToServer,t.type=new Ov.ProtocolRequestType(t.method)})(kbe||(mp.CallHierarchyPrepareRequest=kbe={}));var Cbe;(function(t){t.method="callHierarchy/incomingCalls",t.messageDirection=Ov.MessageDirection.clientToServer,t.type=new Ov.ProtocolRequestType(t.method)})(Cbe||(mp.CallHierarchyIncomingCallsRequest=Cbe={}));var wbe;(function(t){t.method="callHierarchy/outgoingCalls",t.messageDirection=Ov.MessageDirection.clientToServer,t.type=new Ov.ProtocolRequestType(t.method)})(wbe||(mp.CallHierarchyOutgoingCallsRequest=wbe={}))});var Rbe=ar(Fo=>{"use strict";Object.defineProperty(Fo,"__esModule",{value:!0});Fo.SemanticTokensRefreshRequest=Fo.SemanticTokensRangeRequest=Fo.SemanticTokensDeltaRequest=Fo.SemanticTokensRequest=Fo.SemanticTokensRegistrationType=Fo.TokenFormat=void 0;var gf=bn(),Sbe;(function(t){t.Relative="relative"})(Sbe||(Fo.TokenFormat=Sbe={}));var iC;(function(t){t.method="textDocument/semanticTokens",t.type=new gf.RegistrationType(t.method)})(iC||(Fo.SemanticTokensRegistrationType=iC={}));var Abe;(function(t){t.method="textDocument/semanticTokens/full",t.messageDirection=gf.MessageDirection.clientToServer,t.type=new gf.ProtocolRequestType(t.method),t.registrationMethod=iC.method})(Abe||(Fo.SemanticTokensRequest=Abe={}));var _be;(function(t){t.method="textDocument/semanticTokens/full/delta",t.messageDirection=gf.MessageDirection.clientToServer,t.type=new gf.ProtocolRequestType(t.method),t.registrationMethod=iC.method})(_be||(Fo.SemanticTokensDeltaRequest=_be={}));var Dbe;(function(t){t.method="textDocument/semanticTokens/range",t.messageDirection=gf.MessageDirection.clientToServer,t.type=new gf.ProtocolRequestType(t.method),t.registrationMethod=iC.method})(Dbe||(Fo.SemanticTokensRangeRequest=Dbe={}));var Lbe;(function(t){t.method="workspace/semanticTokens/refresh",t.messageDirection=gf.MessageDirection.serverToClient,t.type=new gf.ProtocolRequestType0(t.method)})(Lbe||(Fo.SemanticTokensRefreshRequest=Lbe={}))});var Mbe=ar(l7=>{"use strict";Object.defineProperty(l7,"__esModule",{value:!0});l7.ShowDocumentRequest=void 0;var Nbe=bn(),Ibe;(function(t){t.method="window/showDocument",t.messageDirection=Nbe.MessageDirection.serverToClient,t.type=new Nbe.ProtocolRequestType(t.method)})(Ibe||(l7.ShowDocumentRequest=Ibe={}))});var Bbe=ar(c7=>{"use strict";Object.defineProperty(c7,"__esModule",{value:!0});c7.LinkedEditingRangeRequest=void 0;var Obe=bn(),Pbe;(function(t){t.method="textDocument/linkedEditingRange",t.messageDirection=Obe.MessageDirection.clientToServer,t.type=new Obe.ProtocolRequestType(t.method)})(Pbe||(c7.LinkedEditingRangeRequest=Pbe={}))});var Ube=ar(Es=>{"use strict";Object.defineProperty(Es,"__esModule",{value:!0});Es.WillDeleteFilesRequest=Es.DidDeleteFilesNotification=Es.DidRenameFilesNotification=Es.WillRenameFilesRequest=Es.DidCreateFilesNotification=Es.WillCreateFilesRequest=Es.FileOperationPatternKind=void 0;var Ql=bn(),Fbe;(function(t){t.file="file",t.folder="folder"})(Fbe||(Es.FileOperationPatternKind=Fbe={}));var $be;(function(t){t.method="workspace/willCreateFiles",t.messageDirection=Ql.MessageDirection.clientToServer,t.type=new Ql.ProtocolRequestType(t.method)})($be||(Es.WillCreateFilesRequest=$be={}));var zbe;(function(t){t.method="workspace/didCreateFiles",t.messageDirection=Ql.MessageDirection.clientToServer,t.type=new Ql.ProtocolNotificationType(t.method)})(zbe||(Es.DidCreateFilesNotification=zbe={}));var Gbe;(function(t){t.method="workspace/willRenameFiles",t.messageDirection=Ql.MessageDirection.clientToServer,t.type=new Ql.ProtocolRequestType(t.method)})(Gbe||(Es.WillRenameFilesRequest=Gbe={}));var Vbe;(function(t){t.method="workspace/didRenameFiles",t.messageDirection=Ql.MessageDirection.clientToServer,t.type=new Ql.ProtocolNotificationType(t.method)})(Vbe||(Es.DidRenameFilesNotification=Vbe={}));var qbe;(function(t){t.method="workspace/didDeleteFiles",t.messageDirection=Ql.MessageDirection.clientToServer,t.type=new Ql.ProtocolNotificationType(t.method)})(qbe||(Es.DidDeleteFilesNotification=qbe={}));var Wbe;(function(t){t.method="workspace/willDeleteFiles",t.messageDirection=Ql.MessageDirection.clientToServer,t.type=new Ql.ProtocolRequestType(t.method)})(Wbe||(Es.WillDeleteFilesRequest=Wbe={}))});var Kbe=ar(gp=>{"use strict";Object.defineProperty(gp,"__esModule",{value:!0});gp.MonikerRequest=gp.MonikerKind=gp.UniquenessLevel=void 0;var Hbe=bn(),Ybe;(function(t){t.document="document",t.project="project",t.group="group",t.scheme="scheme",t.global="global"})(Ybe||(gp.UniquenessLevel=Ybe={}));var jbe;(function(t){t.$import="import",t.$export="export",t.local="local"})(jbe||(gp.MonikerKind=jbe={}));var Xbe;(function(t){t.method="textDocument/moniker",t.messageDirection=Hbe.MessageDirection.clientToServer,t.type=new Hbe.ProtocolRequestType(t.method)})(Xbe||(gp.MonikerRequest=Xbe={}))});var eTe=ar(yp=>{"use strict";Object.defineProperty(yp,"__esModule",{value:!0});yp.TypeHierarchySubtypesRequest=yp.TypeHierarchySupertypesRequest=yp.TypeHierarchyPrepareRequest=void 0;var Pv=bn(),Qbe;(function(t){t.method="textDocument/prepareTypeHierarchy",t.messageDirection=Pv.MessageDirection.clientToServer,t.type=new Pv.ProtocolRequestType(t.method)})(Qbe||(yp.TypeHierarchyPrepareRequest=Qbe={}));var Zbe;(function(t){t.method="typeHierarchy/supertypes",t.messageDirection=Pv.MessageDirection.clientToServer,t.type=new Pv.ProtocolRequestType(t.method)})(Zbe||(yp.TypeHierarchySupertypesRequest=Zbe={}));var Jbe;(function(t){t.method="typeHierarchy/subtypes",t.messageDirection=Pv.MessageDirection.clientToServer,t.type=new Pv.ProtocolRequestType(t.method)})(Jbe||(yp.TypeHierarchySubtypesRequest=Jbe={}))});var iTe=ar(Bv=>{"use strict";Object.defineProperty(Bv,"__esModule",{value:!0});Bv.InlineValueRefreshRequest=Bv.InlineValueRequest=void 0;var u7=bn(),tTe;(function(t){t.method="textDocument/inlineValue",t.messageDirection=u7.MessageDirection.clientToServer,t.type=new u7.ProtocolRequestType(t.method)})(tTe||(Bv.InlineValueRequest=tTe={}));var rTe;(function(t){t.method="workspace/inlineValue/refresh",t.messageDirection=u7.MessageDirection.serverToClient,t.type=new u7.ProtocolRequestType0(t.method)})(rTe||(Bv.InlineValueRefreshRequest=rTe={}))});var oTe=ar(vp=>{"use strict";Object.defineProperty(vp,"__esModule",{value:!0});vp.InlayHintRefreshRequest=vp.InlayHintResolveRequest=vp.InlayHintRequest=void 0;var Fv=bn(),nTe;(function(t){t.method="textDocument/inlayHint",t.messageDirection=Fv.MessageDirection.clientToServer,t.type=new Fv.ProtocolRequestType(t.method)})(nTe||(vp.InlayHintRequest=nTe={}));var aTe;(function(t){t.method="inlayHint/resolve",t.messageDirection=Fv.MessageDirection.clientToServer,t.type=new Fv.ProtocolRequestType(t.method)})(aTe||(vp.InlayHintResolveRequest=aTe={}));var sTe;(function(t){t.method="workspace/inlayHint/refresh",t.messageDirection=Fv.MessageDirection.serverToClient,t.type=new Fv.ProtocolRequestType0(t.method)})(sTe||(vp.InlayHintRefreshRequest=sTe={}))});var pTe=ar(Zl=>{"use strict";Object.defineProperty(Zl,"__esModule",{value:!0});Zl.DiagnosticRefreshRequest=Zl.WorkspaceDiagnosticRequest=Zl.DocumentDiagnosticRequest=Zl.DocumentDiagnosticReportKind=Zl.DiagnosticServerCancellationData=void 0;var dTe=Um(),cot=ZA(),$v=bn(),lTe;(function(t){function e(r){let i=r;return i&&cot.boolean(i.retriggerRequest)}o(e,"is"),t.is=e})(lTe||(Zl.DiagnosticServerCancellationData=lTe={}));var cTe;(function(t){t.Full="full",t.Unchanged="unchanged"})(cTe||(Zl.DocumentDiagnosticReportKind=cTe={}));var uTe;(function(t){t.method="textDocument/diagnostic",t.messageDirection=$v.MessageDirection.clientToServer,t.type=new $v.ProtocolRequestType(t.method),t.partialResult=new dTe.ProgressType})(uTe||(Zl.DocumentDiagnosticRequest=uTe={}));var hTe;(function(t){t.method="workspace/diagnostic",t.messageDirection=$v.MessageDirection.clientToServer,t.type=new $v.ProtocolRequestType(t.method),t.partialResult=new dTe.ProgressType})(hTe||(Zl.WorkspaceDiagnosticRequest=hTe={}));var fTe;(function(t){t.method="workspace/diagnostic/refresh",t.messageDirection=$v.MessageDirection.serverToClient,t.type=new $v.ProtocolRequestType0(t.method)})(fTe||(Zl.DiagnosticRefreshRequest=fTe={}))});var TTe=ar(Bn=>{"use strict";Object.defineProperty(Bn,"__esModule",{value:!0});Bn.DidCloseNotebookDocumentNotification=Bn.DidSaveNotebookDocumentNotification=Bn.DidChangeNotebookDocumentNotification=Bn.NotebookCellArrayChange=Bn.DidOpenNotebookDocumentNotification=Bn.NotebookDocumentSyncRegistrationType=Bn.NotebookDocument=Bn.NotebookCell=Bn.ExecutionSummary=Bn.NotebookCellKind=void 0;var nC=(pv(),s4(yA)),Hc=ZA(),th=bn(),YV;(function(t){t.Markup=1,t.Code=2;function e(r){return r===1||r===2}o(e,"is"),t.is=e})(YV||(Bn.NotebookCellKind=YV={}));var jV;(function(t){function e(n,a){let s={executionOrder:n};return(a===!0||a===!1)&&(s.success=a),s}o(e,"create"),t.create=e;function r(n){let a=n;return Hc.objectLiteral(a)&&nC.uinteger.is(a.executionOrder)&&(a.success===void 0||Hc.boolean(a.success))}o(r,"is"),t.is=r;function i(n,a){return n===a?!0:n==null||a===null||a===void 0?!1:n.executionOrder===a.executionOrder&&n.success===a.success}o(i,"equals"),t.equals=i})(jV||(Bn.ExecutionSummary=jV={}));var h7;(function(t){function e(a,s){return{kind:a,document:s}}o(e,"create"),t.create=e;function r(a){let s=a;return Hc.objectLiteral(s)&&YV.is(s.kind)&&nC.DocumentUri.is(s.document)&&(s.metadata===void 0||Hc.objectLiteral(s.metadata))}o(r,"is"),t.is=r;function i(a,s){let l=new Set;return a.document!==s.document&&l.add("document"),a.kind!==s.kind&&l.add("kind"),a.executionSummary!==s.executionSummary&&l.add("executionSummary"),(a.metadata!==void 0||s.metadata!==void 0)&&!n(a.metadata,s.metadata)&&l.add("metadata"),(a.executionSummary!==void 0||s.executionSummary!==void 0)&&!jV.equals(a.executionSummary,s.executionSummary)&&l.add("executionSummary"),l}o(i,"diff"),t.diff=i;function n(a,s){if(a===s)return!0;if(a==null||s===null||s===void 0||typeof a!=typeof s||typeof a!="object")return!1;let l=Array.isArray(a),u=Array.isArray(s);if(l!==u)return!1;if(l&&u){if(a.length!==s.length)return!1;for(let h=0;h{"use strict";Object.defineProperty(f7,"__esModule",{value:!0});f7.InlineCompletionRequest=void 0;var kTe=bn(),CTe;(function(t){t.method="textDocument/inlineCompletion",t.messageDirection=kTe.MessageDirection.clientToServer,t.type=new kTe.ProtocolRequestType(t.method)})(CTe||(f7.InlineCompletionRequest=CTe={}))});var Bke=ar(Ae=>{"use strict";Object.defineProperty(Ae,"__esModule",{value:!0});Ae.WorkspaceSymbolRequest=Ae.CodeActionResolveRequest=Ae.CodeActionRequest=Ae.DocumentSymbolRequest=Ae.DocumentHighlightRequest=Ae.ReferencesRequest=Ae.DefinitionRequest=Ae.SignatureHelpRequest=Ae.SignatureHelpTriggerKind=Ae.HoverRequest=Ae.CompletionResolveRequest=Ae.CompletionRequest=Ae.CompletionTriggerKind=Ae.PublishDiagnosticsNotification=Ae.WatchKind=Ae.RelativePattern=Ae.FileChangeType=Ae.DidChangeWatchedFilesNotification=Ae.WillSaveTextDocumentWaitUntilRequest=Ae.WillSaveTextDocumentNotification=Ae.TextDocumentSaveReason=Ae.DidSaveTextDocumentNotification=Ae.DidCloseTextDocumentNotification=Ae.DidChangeTextDocumentNotification=Ae.TextDocumentContentChangeEvent=Ae.DidOpenTextDocumentNotification=Ae.TextDocumentSyncKind=Ae.TelemetryEventNotification=Ae.LogMessageNotification=Ae.ShowMessageRequest=Ae.ShowMessageNotification=Ae.MessageType=Ae.DidChangeConfigurationNotification=Ae.ExitNotification=Ae.ShutdownRequest=Ae.InitializedNotification=Ae.InitializeErrorCodes=Ae.InitializeRequest=Ae.WorkDoneProgressOptions=Ae.TextDocumentRegistrationOptions=Ae.StaticRegistrationOptions=Ae.PositionEncodingKind=Ae.FailureHandlingKind=Ae.ResourceOperationKind=Ae.UnregistrationRequest=Ae.RegistrationRequest=Ae.DocumentSelector=Ae.NotebookCellTextDocumentFilter=Ae.NotebookDocumentFilter=Ae.TextDocumentFilter=void 0;Ae.MonikerRequest=Ae.MonikerKind=Ae.UniquenessLevel=Ae.WillDeleteFilesRequest=Ae.DidDeleteFilesNotification=Ae.WillRenameFilesRequest=Ae.DidRenameFilesNotification=Ae.WillCreateFilesRequest=Ae.DidCreateFilesNotification=Ae.FileOperationPatternKind=Ae.LinkedEditingRangeRequest=Ae.ShowDocumentRequest=Ae.SemanticTokensRegistrationType=Ae.SemanticTokensRefreshRequest=Ae.SemanticTokensRangeRequest=Ae.SemanticTokensDeltaRequest=Ae.SemanticTokensRequest=Ae.TokenFormat=Ae.CallHierarchyPrepareRequest=Ae.CallHierarchyOutgoingCallsRequest=Ae.CallHierarchyIncomingCallsRequest=Ae.WorkDoneProgressCancelNotification=Ae.WorkDoneProgressCreateRequest=Ae.WorkDoneProgress=Ae.SelectionRangeRequest=Ae.DeclarationRequest=Ae.FoldingRangeRefreshRequest=Ae.FoldingRangeRequest=Ae.ColorPresentationRequest=Ae.DocumentColorRequest=Ae.ConfigurationRequest=Ae.DidChangeWorkspaceFoldersNotification=Ae.WorkspaceFoldersRequest=Ae.TypeDefinitionRequest=Ae.ImplementationRequest=Ae.ApplyWorkspaceEditRequest=Ae.ExecuteCommandRequest=Ae.PrepareRenameRequest=Ae.RenameRequest=Ae.PrepareSupportDefaultBehavior=Ae.DocumentOnTypeFormattingRequest=Ae.DocumentRangesFormattingRequest=Ae.DocumentRangeFormattingRequest=Ae.DocumentFormattingRequest=Ae.DocumentLinkResolveRequest=Ae.DocumentLinkRequest=Ae.CodeLensRefreshRequest=Ae.CodeLensResolveRequest=Ae.CodeLensRequest=Ae.WorkspaceSymbolResolveRequest=void 0;Ae.InlineCompletionRequest=Ae.DidCloseNotebookDocumentNotification=Ae.DidSaveNotebookDocumentNotification=Ae.DidChangeNotebookDocumentNotification=Ae.NotebookCellArrayChange=Ae.DidOpenNotebookDocumentNotification=Ae.NotebookDocumentSyncRegistrationType=Ae.NotebookDocument=Ae.NotebookCell=Ae.ExecutionSummary=Ae.NotebookCellKind=Ae.DiagnosticRefreshRequest=Ae.WorkspaceDiagnosticRequest=Ae.DocumentDiagnosticRequest=Ae.DocumentDiagnosticReportKind=Ae.DiagnosticServerCancellationData=Ae.InlayHintRefreshRequest=Ae.InlayHintResolveRequest=Ae.InlayHintRequest=Ae.InlineValueRefreshRequest=Ae.InlineValueRequest=Ae.TypeHierarchySupertypesRequest=Ae.TypeHierarchySubtypesRequest=Ae.TypeHierarchyPrepareRequest=void 0;var At=bn(),ETe=(pv(),s4(yA)),$a=ZA(),uot=K2e();Object.defineProperty(Ae,"ImplementationRequest",{enumerable:!0,get:o(function(){return uot.ImplementationRequest},"get")});var hot=J2e();Object.defineProperty(Ae,"TypeDefinitionRequest",{enumerable:!0,get:o(function(){return hot.TypeDefinitionRequest},"get")});var Ike=rbe();Object.defineProperty(Ae,"WorkspaceFoldersRequest",{enumerable:!0,get:o(function(){return Ike.WorkspaceFoldersRequest},"get")});Object.defineProperty(Ae,"DidChangeWorkspaceFoldersNotification",{enumerable:!0,get:o(function(){return Ike.DidChangeWorkspaceFoldersNotification},"get")});var fot=abe();Object.defineProperty(Ae,"ConfigurationRequest",{enumerable:!0,get:o(function(){return fot.ConfigurationRequest},"get")});var Mke=lbe();Object.defineProperty(Ae,"DocumentColorRequest",{enumerable:!0,get:o(function(){return Mke.DocumentColorRequest},"get")});Object.defineProperty(Ae,"ColorPresentationRequest",{enumerable:!0,get:o(function(){return Mke.ColorPresentationRequest},"get")});var Oke=hbe();Object.defineProperty(Ae,"FoldingRangeRequest",{enumerable:!0,get:o(function(){return Oke.FoldingRangeRequest},"get")});Object.defineProperty(Ae,"FoldingRangeRefreshRequest",{enumerable:!0,get:o(function(){return Oke.FoldingRangeRefreshRequest},"get")});var dot=pbe();Object.defineProperty(Ae,"DeclarationRequest",{enumerable:!0,get:o(function(){return dot.DeclarationRequest},"get")});var pot=ybe();Object.defineProperty(Ae,"SelectionRangeRequest",{enumerable:!0,get:o(function(){return pot.SelectionRangeRequest},"get")});var JV=Tbe();Object.defineProperty(Ae,"WorkDoneProgress",{enumerable:!0,get:o(function(){return JV.WorkDoneProgress},"get")});Object.defineProperty(Ae,"WorkDoneProgressCreateRequest",{enumerable:!0,get:o(function(){return JV.WorkDoneProgressCreateRequest},"get")});Object.defineProperty(Ae,"WorkDoneProgressCancelNotification",{enumerable:!0,get:o(function(){return JV.WorkDoneProgressCancelNotification},"get")});var eq=Ebe();Object.defineProperty(Ae,"CallHierarchyIncomingCallsRequest",{enumerable:!0,get:o(function(){return eq.CallHierarchyIncomingCallsRequest},"get")});Object.defineProperty(Ae,"CallHierarchyOutgoingCallsRequest",{enumerable:!0,get:o(function(){return eq.CallHierarchyOutgoingCallsRequest},"get")});Object.defineProperty(Ae,"CallHierarchyPrepareRequest",{enumerable:!0,get:o(function(){return eq.CallHierarchyPrepareRequest},"get")});var Gv=Rbe();Object.defineProperty(Ae,"TokenFormat",{enumerable:!0,get:o(function(){return Gv.TokenFormat},"get")});Object.defineProperty(Ae,"SemanticTokensRequest",{enumerable:!0,get:o(function(){return Gv.SemanticTokensRequest},"get")});Object.defineProperty(Ae,"SemanticTokensDeltaRequest",{enumerable:!0,get:o(function(){return Gv.SemanticTokensDeltaRequest},"get")});Object.defineProperty(Ae,"SemanticTokensRangeRequest",{enumerable:!0,get:o(function(){return Gv.SemanticTokensRangeRequest},"get")});Object.defineProperty(Ae,"SemanticTokensRefreshRequest",{enumerable:!0,get:o(function(){return Gv.SemanticTokensRefreshRequest},"get")});Object.defineProperty(Ae,"SemanticTokensRegistrationType",{enumerable:!0,get:o(function(){return Gv.SemanticTokensRegistrationType},"get")});var mot=Mbe();Object.defineProperty(Ae,"ShowDocumentRequest",{enumerable:!0,get:o(function(){return mot.ShowDocumentRequest},"get")});var got=Bbe();Object.defineProperty(Ae,"LinkedEditingRangeRequest",{enumerable:!0,get:o(function(){return got.LinkedEditingRangeRequest},"get")});var Hm=Ube();Object.defineProperty(Ae,"FileOperationPatternKind",{enumerable:!0,get:o(function(){return Hm.FileOperationPatternKind},"get")});Object.defineProperty(Ae,"DidCreateFilesNotification",{enumerable:!0,get:o(function(){return Hm.DidCreateFilesNotification},"get")});Object.defineProperty(Ae,"WillCreateFilesRequest",{enumerable:!0,get:o(function(){return Hm.WillCreateFilesRequest},"get")});Object.defineProperty(Ae,"DidRenameFilesNotification",{enumerable:!0,get:o(function(){return Hm.DidRenameFilesNotification},"get")});Object.defineProperty(Ae,"WillRenameFilesRequest",{enumerable:!0,get:o(function(){return Hm.WillRenameFilesRequest},"get")});Object.defineProperty(Ae,"DidDeleteFilesNotification",{enumerable:!0,get:o(function(){return Hm.DidDeleteFilesNotification},"get")});Object.defineProperty(Ae,"WillDeleteFilesRequest",{enumerable:!0,get:o(function(){return Hm.WillDeleteFilesRequest},"get")});var tq=Kbe();Object.defineProperty(Ae,"UniquenessLevel",{enumerable:!0,get:o(function(){return tq.UniquenessLevel},"get")});Object.defineProperty(Ae,"MonikerKind",{enumerable:!0,get:o(function(){return tq.MonikerKind},"get")});Object.defineProperty(Ae,"MonikerRequest",{enumerable:!0,get:o(function(){return tq.MonikerRequest},"get")});var rq=eTe();Object.defineProperty(Ae,"TypeHierarchyPrepareRequest",{enumerable:!0,get:o(function(){return rq.TypeHierarchyPrepareRequest},"get")});Object.defineProperty(Ae,"TypeHierarchySubtypesRequest",{enumerable:!0,get:o(function(){return rq.TypeHierarchySubtypesRequest},"get")});Object.defineProperty(Ae,"TypeHierarchySupertypesRequest",{enumerable:!0,get:o(function(){return rq.TypeHierarchySupertypesRequest},"get")});var Pke=iTe();Object.defineProperty(Ae,"InlineValueRequest",{enumerable:!0,get:o(function(){return Pke.InlineValueRequest},"get")});Object.defineProperty(Ae,"InlineValueRefreshRequest",{enumerable:!0,get:o(function(){return Pke.InlineValueRefreshRequest},"get")});var iq=oTe();Object.defineProperty(Ae,"InlayHintRequest",{enumerable:!0,get:o(function(){return iq.InlayHintRequest},"get")});Object.defineProperty(Ae,"InlayHintResolveRequest",{enumerable:!0,get:o(function(){return iq.InlayHintResolveRequest},"get")});Object.defineProperty(Ae,"InlayHintRefreshRequest",{enumerable:!0,get:o(function(){return iq.InlayHintRefreshRequest},"get")});var aC=pTe();Object.defineProperty(Ae,"DiagnosticServerCancellationData",{enumerable:!0,get:o(function(){return aC.DiagnosticServerCancellationData},"get")});Object.defineProperty(Ae,"DocumentDiagnosticReportKind",{enumerable:!0,get:o(function(){return aC.DocumentDiagnosticReportKind},"get")});Object.defineProperty(Ae,"DocumentDiagnosticRequest",{enumerable:!0,get:o(function(){return aC.DocumentDiagnosticRequest},"get")});Object.defineProperty(Ae,"WorkspaceDiagnosticRequest",{enumerable:!0,get:o(function(){return aC.WorkspaceDiagnosticRequest},"get")});Object.defineProperty(Ae,"DiagnosticRefreshRequest",{enumerable:!0,get:o(function(){return aC.DiagnosticRefreshRequest},"get")});var rh=TTe();Object.defineProperty(Ae,"NotebookCellKind",{enumerable:!0,get:o(function(){return rh.NotebookCellKind},"get")});Object.defineProperty(Ae,"ExecutionSummary",{enumerable:!0,get:o(function(){return rh.ExecutionSummary},"get")});Object.defineProperty(Ae,"NotebookCell",{enumerable:!0,get:o(function(){return rh.NotebookCell},"get")});Object.defineProperty(Ae,"NotebookDocument",{enumerable:!0,get:o(function(){return rh.NotebookDocument},"get")});Object.defineProperty(Ae,"NotebookDocumentSyncRegistrationType",{enumerable:!0,get:o(function(){return rh.NotebookDocumentSyncRegistrationType},"get")});Object.defineProperty(Ae,"DidOpenNotebookDocumentNotification",{enumerable:!0,get:o(function(){return rh.DidOpenNotebookDocumentNotification},"get")});Object.defineProperty(Ae,"NotebookCellArrayChange",{enumerable:!0,get:o(function(){return rh.NotebookCellArrayChange},"get")});Object.defineProperty(Ae,"DidChangeNotebookDocumentNotification",{enumerable:!0,get:o(function(){return rh.DidChangeNotebookDocumentNotification},"get")});Object.defineProperty(Ae,"DidSaveNotebookDocumentNotification",{enumerable:!0,get:o(function(){return rh.DidSaveNotebookDocumentNotification},"get")});Object.defineProperty(Ae,"DidCloseNotebookDocumentNotification",{enumerable:!0,get:o(function(){return rh.DidCloseNotebookDocumentNotification},"get")});var yot=wTe();Object.defineProperty(Ae,"InlineCompletionRequest",{enumerable:!0,get:o(function(){return yot.InlineCompletionRequest},"get")});var XV;(function(t){function e(r){let i=r;return $a.string(i)||$a.string(i.language)||$a.string(i.scheme)||$a.string(i.pattern)}o(e,"is"),t.is=e})(XV||(Ae.TextDocumentFilter=XV={}));var KV;(function(t){function e(r){let i=r;return $a.objectLiteral(i)&&($a.string(i.notebookType)||$a.string(i.scheme)||$a.string(i.pattern))}o(e,"is"),t.is=e})(KV||(Ae.NotebookDocumentFilter=KV={}));var QV;(function(t){function e(r){let i=r;return $a.objectLiteral(i)&&($a.string(i.notebook)||KV.is(i.notebook))&&(i.language===void 0||$a.string(i.language))}o(e,"is"),t.is=e})(QV||(Ae.NotebookCellTextDocumentFilter=QV={}));var ZV;(function(t){function e(r){if(!Array.isArray(r))return!1;for(let i of r)if(!$a.string(i)&&!XV.is(i)&&!QV.is(i))return!1;return!0}o(e,"is"),t.is=e})(ZV||(Ae.DocumentSelector=ZV={}));var STe;(function(t){t.method="client/registerCapability",t.messageDirection=At.MessageDirection.serverToClient,t.type=new At.ProtocolRequestType(t.method)})(STe||(Ae.RegistrationRequest=STe={}));var ATe;(function(t){t.method="client/unregisterCapability",t.messageDirection=At.MessageDirection.serverToClient,t.type=new At.ProtocolRequestType(t.method)})(ATe||(Ae.UnregistrationRequest=ATe={}));var _Te;(function(t){t.Create="create",t.Rename="rename",t.Delete="delete"})(_Te||(Ae.ResourceOperationKind=_Te={}));var DTe;(function(t){t.Abort="abort",t.Transactional="transactional",t.TextOnlyTransactional="textOnlyTransactional",t.Undo="undo"})(DTe||(Ae.FailureHandlingKind=DTe={}));var LTe;(function(t){t.UTF8="utf-8",t.UTF16="utf-16",t.UTF32="utf-32"})(LTe||(Ae.PositionEncodingKind=LTe={}));var RTe;(function(t){function e(r){let i=r;return i&&$a.string(i.id)&&i.id.length>0}o(e,"hasId"),t.hasId=e})(RTe||(Ae.StaticRegistrationOptions=RTe={}));var NTe;(function(t){function e(r){let i=r;return i&&(i.documentSelector===null||ZV.is(i.documentSelector))}o(e,"is"),t.is=e})(NTe||(Ae.TextDocumentRegistrationOptions=NTe={}));var ITe;(function(t){function e(i){let n=i;return $a.objectLiteral(n)&&(n.workDoneProgress===void 0||$a.boolean(n.workDoneProgress))}o(e,"is"),t.is=e;function r(i){let n=i;return n&&$a.boolean(n.workDoneProgress)}o(r,"hasWorkDoneProgress"),t.hasWorkDoneProgress=r})(ITe||(Ae.WorkDoneProgressOptions=ITe={}));var MTe;(function(t){t.method="initialize",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(MTe||(Ae.InitializeRequest=MTe={}));var OTe;(function(t){t.unknownProtocolVersion=1})(OTe||(Ae.InitializeErrorCodes=OTe={}));var PTe;(function(t){t.method="initialized",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolNotificationType(t.method)})(PTe||(Ae.InitializedNotification=PTe={}));var BTe;(function(t){t.method="shutdown",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType0(t.method)})(BTe||(Ae.ShutdownRequest=BTe={}));var FTe;(function(t){t.method="exit",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolNotificationType0(t.method)})(FTe||(Ae.ExitNotification=FTe={}));var $Te;(function(t){t.method="workspace/didChangeConfiguration",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolNotificationType(t.method)})($Te||(Ae.DidChangeConfigurationNotification=$Te={}));var zTe;(function(t){t.Error=1,t.Warning=2,t.Info=3,t.Log=4,t.Debug=5})(zTe||(Ae.MessageType=zTe={}));var GTe;(function(t){t.method="window/showMessage",t.messageDirection=At.MessageDirection.serverToClient,t.type=new At.ProtocolNotificationType(t.method)})(GTe||(Ae.ShowMessageNotification=GTe={}));var VTe;(function(t){t.method="window/showMessageRequest",t.messageDirection=At.MessageDirection.serverToClient,t.type=new At.ProtocolRequestType(t.method)})(VTe||(Ae.ShowMessageRequest=VTe={}));var qTe;(function(t){t.method="window/logMessage",t.messageDirection=At.MessageDirection.serverToClient,t.type=new At.ProtocolNotificationType(t.method)})(qTe||(Ae.LogMessageNotification=qTe={}));var WTe;(function(t){t.method="telemetry/event",t.messageDirection=At.MessageDirection.serverToClient,t.type=new At.ProtocolNotificationType(t.method)})(WTe||(Ae.TelemetryEventNotification=WTe={}));var UTe;(function(t){t.None=0,t.Full=1,t.Incremental=2})(UTe||(Ae.TextDocumentSyncKind=UTe={}));var HTe;(function(t){t.method="textDocument/didOpen",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolNotificationType(t.method)})(HTe||(Ae.DidOpenTextDocumentNotification=HTe={}));var YTe;(function(t){function e(i){let n=i;return n!=null&&typeof n.text=="string"&&n.range!==void 0&&(n.rangeLength===void 0||typeof n.rangeLength=="number")}o(e,"isIncremental"),t.isIncremental=e;function r(i){let n=i;return n!=null&&typeof n.text=="string"&&n.range===void 0&&n.rangeLength===void 0}o(r,"isFull"),t.isFull=r})(YTe||(Ae.TextDocumentContentChangeEvent=YTe={}));var jTe;(function(t){t.method="textDocument/didChange",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolNotificationType(t.method)})(jTe||(Ae.DidChangeTextDocumentNotification=jTe={}));var XTe;(function(t){t.method="textDocument/didClose",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolNotificationType(t.method)})(XTe||(Ae.DidCloseTextDocumentNotification=XTe={}));var KTe;(function(t){t.method="textDocument/didSave",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolNotificationType(t.method)})(KTe||(Ae.DidSaveTextDocumentNotification=KTe={}));var QTe;(function(t){t.Manual=1,t.AfterDelay=2,t.FocusOut=3})(QTe||(Ae.TextDocumentSaveReason=QTe={}));var ZTe;(function(t){t.method="textDocument/willSave",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolNotificationType(t.method)})(ZTe||(Ae.WillSaveTextDocumentNotification=ZTe={}));var JTe;(function(t){t.method="textDocument/willSaveWaitUntil",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(JTe||(Ae.WillSaveTextDocumentWaitUntilRequest=JTe={}));var eke;(function(t){t.method="workspace/didChangeWatchedFiles",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolNotificationType(t.method)})(eke||(Ae.DidChangeWatchedFilesNotification=eke={}));var tke;(function(t){t.Created=1,t.Changed=2,t.Deleted=3})(tke||(Ae.FileChangeType=tke={}));var rke;(function(t){function e(r){let i=r;return $a.objectLiteral(i)&&(ETe.URI.is(i.baseUri)||ETe.WorkspaceFolder.is(i.baseUri))&&$a.string(i.pattern)}o(e,"is"),t.is=e})(rke||(Ae.RelativePattern=rke={}));var ike;(function(t){t.Create=1,t.Change=2,t.Delete=4})(ike||(Ae.WatchKind=ike={}));var nke;(function(t){t.method="textDocument/publishDiagnostics",t.messageDirection=At.MessageDirection.serverToClient,t.type=new At.ProtocolNotificationType(t.method)})(nke||(Ae.PublishDiagnosticsNotification=nke={}));var ake;(function(t){t.Invoked=1,t.TriggerCharacter=2,t.TriggerForIncompleteCompletions=3})(ake||(Ae.CompletionTriggerKind=ake={}));var ske;(function(t){t.method="textDocument/completion",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(ske||(Ae.CompletionRequest=ske={}));var oke;(function(t){t.method="completionItem/resolve",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(oke||(Ae.CompletionResolveRequest=oke={}));var lke;(function(t){t.method="textDocument/hover",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(lke||(Ae.HoverRequest=lke={}));var cke;(function(t){t.Invoked=1,t.TriggerCharacter=2,t.ContentChange=3})(cke||(Ae.SignatureHelpTriggerKind=cke={}));var uke;(function(t){t.method="textDocument/signatureHelp",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(uke||(Ae.SignatureHelpRequest=uke={}));var hke;(function(t){t.method="textDocument/definition",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(hke||(Ae.DefinitionRequest=hke={}));var fke;(function(t){t.method="textDocument/references",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(fke||(Ae.ReferencesRequest=fke={}));var dke;(function(t){t.method="textDocument/documentHighlight",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(dke||(Ae.DocumentHighlightRequest=dke={}));var pke;(function(t){t.method="textDocument/documentSymbol",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(pke||(Ae.DocumentSymbolRequest=pke={}));var mke;(function(t){t.method="textDocument/codeAction",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(mke||(Ae.CodeActionRequest=mke={}));var gke;(function(t){t.method="codeAction/resolve",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(gke||(Ae.CodeActionResolveRequest=gke={}));var yke;(function(t){t.method="workspace/symbol",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(yke||(Ae.WorkspaceSymbolRequest=yke={}));var vke;(function(t){t.method="workspaceSymbol/resolve",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(vke||(Ae.WorkspaceSymbolResolveRequest=vke={}));var xke;(function(t){t.method="textDocument/codeLens",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(xke||(Ae.CodeLensRequest=xke={}));var bke;(function(t){t.method="codeLens/resolve",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(bke||(Ae.CodeLensResolveRequest=bke={}));var Tke;(function(t){t.method="workspace/codeLens/refresh",t.messageDirection=At.MessageDirection.serverToClient,t.type=new At.ProtocolRequestType0(t.method)})(Tke||(Ae.CodeLensRefreshRequest=Tke={}));var kke;(function(t){t.method="textDocument/documentLink",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(kke||(Ae.DocumentLinkRequest=kke={}));var Cke;(function(t){t.method="documentLink/resolve",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(Cke||(Ae.DocumentLinkResolveRequest=Cke={}));var wke;(function(t){t.method="textDocument/formatting",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(wke||(Ae.DocumentFormattingRequest=wke={}));var Eke;(function(t){t.method="textDocument/rangeFormatting",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(Eke||(Ae.DocumentRangeFormattingRequest=Eke={}));var Ske;(function(t){t.method="textDocument/rangesFormatting",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(Ske||(Ae.DocumentRangesFormattingRequest=Ske={}));var Ake;(function(t){t.method="textDocument/onTypeFormatting",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(Ake||(Ae.DocumentOnTypeFormattingRequest=Ake={}));var _ke;(function(t){t.Identifier=1})(_ke||(Ae.PrepareSupportDefaultBehavior=_ke={}));var Dke;(function(t){t.method="textDocument/rename",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(Dke||(Ae.RenameRequest=Dke={}));var Lke;(function(t){t.method="textDocument/prepareRename",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(Lke||(Ae.PrepareRenameRequest=Lke={}));var Rke;(function(t){t.method="workspace/executeCommand",t.messageDirection=At.MessageDirection.clientToServer,t.type=new At.ProtocolRequestType(t.method)})(Rke||(Ae.ExecuteCommandRequest=Rke={}));var Nke;(function(t){t.method="workspace/applyEdit",t.messageDirection=At.MessageDirection.serverToClient,t.type=new At.ProtocolRequestType("workspace/applyEdit")})(Nke||(Ae.ApplyWorkspaceEditRequest=Nke={}))});var $ke=ar(d7=>{"use strict";Object.defineProperty(d7,"__esModule",{value:!0});d7.createProtocolConnection=void 0;var Fke=Um();function vot(t,e,r,i){return Fke.ConnectionStrategy.is(i)&&(i={connectionStrategy:i}),(0,Fke.createMessageConnection)(t,e,r,i)}o(vot,"createProtocolConnection");d7.createProtocolConnection=vot});var Gke=ar($o=>{"use strict";var xot=$o&&$o.__createBinding||(Object.create?(function(t,e,r,i){i===void 0&&(i=r);var n=Object.getOwnPropertyDescriptor(e,r);(!n||("get"in n?!e.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:o(function(){return e[r]},"get")}),Object.defineProperty(t,i,n)}):(function(t,e,r,i){i===void 0&&(i=r),t[i]=e[r]})),p7=$o&&$o.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&xot(e,t,r)};Object.defineProperty($o,"__esModule",{value:!0});$o.LSPErrorCodes=$o.createProtocolConnection=void 0;p7(Um(),$o);p7((pv(),s4(yA)),$o);p7(bn(),$o);p7(Bke(),$o);var bot=$ke();Object.defineProperty($o,"createProtocolConnection",{enumerable:!0,get:o(function(){return bot.createProtocolConnection},"get")});var zke;(function(t){t.lspReservedErrorRangeStart=-32899,t.RequestFailed=-32803,t.ServerCancelled=-32802,t.ContentModified=-32801,t.RequestCancelled=-32800,t.lspReservedErrorRangeEnd=-32800})(zke||($o.LSPErrorCodes=zke={}))});var qke=ar(ih=>{"use strict";var Tot=ih&&ih.__createBinding||(Object.create?(function(t,e,r,i){i===void 0&&(i=r);var n=Object.getOwnPropertyDescriptor(e,r);(!n||("get"in n?!e.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:o(function(){return e[r]},"get")}),Object.defineProperty(t,i,n)}):(function(t,e,r,i){i===void 0&&(i=r),t[i]=e[r]})),Vke=ih&&ih.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&Tot(e,t,r)};Object.defineProperty(ih,"__esModule",{value:!0});ih.createProtocolConnection=void 0;var kot=GV();Vke(GV(),ih);Vke(Gke(),ih);function Cot(t,e,r,i){return(0,kot.createMessageConnection)(t,e,r,i)}o(Cot,"createProtocolConnection");ih.createProtocolConnection=Cot});var xp,nq=P(()=>{"use strict";(function(t){function e(r){return{dispose:o(async()=>await r(),"dispose")}}o(e,"create"),t.create=e})(xp||(xp={}))});var Vv,sC,aq=P(()=>{"use strict";Vv=Wa(qke(),1);Yl();nq();up();Xl();Ys();Wc();Cv();sC=class{static{o(this,"DefaultDocumentBuilder")}constructor(e){this.updateBuildOptions={validation:{categories:["built-in","fast"]}},this.updateListeners=[],this.buildPhaseListeners=new Cs,this.documentPhaseListeners=new Cs,this.buildState=new Map,this.documentBuildWaiters=new Map,this.currentState=Ur.Changed,this.langiumDocuments=e.workspace.LangiumDocuments,this.langiumDocumentFactory=e.workspace.LangiumDocumentFactory,this.textDocuments=e.workspace.TextDocuments,this.indexManager=e.workspace.IndexManager,this.fileSystemProvider=e.workspace.FileSystemProvider,this.workspaceManager=()=>e.workspace.WorkspaceManager,this.serviceRegistry=e.ServiceRegistry}async build(e,r={},i=$r.CancellationToken.None){for(let n of e){let a=n.uri.toString();if(n.state===Ur.Validated){if(typeof r.validation=="boolean"&&r.validation)this.resetToState(n,Ur.IndexedReferences);else if(typeof r.validation=="object"){let s=this.findMissingValidationCategories(n,r);s.length>0&&(this.buildState.set(a,{completed:!1,options:{validation:{categories:s}},result:this.buildState.get(a)?.result}),n.state=Ur.IndexedReferences)}}else this.buildState.delete(a)}this.currentState=Ur.Changed,await this.emitUpdate(e.map(n=>n.uri),[]),await this.buildDocuments(e,r,i)}async update(e,r,i=$r.CancellationToken.None){this.currentState=Ur.Changed;let n=[];for(let u of r){let h=this.langiumDocuments.deleteDocuments(u);for(let f of h)n.push(f.uri),this.cleanUpDeleted(f)}let a=(await Promise.all(e.map(u=>this.findChangedUris(u)))).flat();for(let u of a){let h=this.langiumDocuments.getDocument(u);h===void 0&&(h=this.langiumDocumentFactory.fromModel({$type:"INVALID"},u),h.state=Ur.Changed,this.langiumDocuments.addDocument(h)),this.resetToState(h,Ur.Changed)}let s=jr(a).concat(n).map(u=>u.toString()).toSet();this.langiumDocuments.all.filter(u=>!s.has(u.uri.toString())&&this.shouldRelink(u,s)).forEach(u=>this.resetToState(u,Ur.ComputedScopes)),await this.emitUpdate(a,n),await Dn(i);let l=this.sortDocuments(this.langiumDocuments.all.filter(u=>u.state=1}findMissingValidationCategories(e,r){let i=this.buildState.get(e.uri.toString()),n=this.serviceRegistry.getServices(e.uri).validation.ValidationRegistry.getAllValidationCategories(e),a=i?.result?.validationChecks?new Set(i?.result?.validationChecks):i?.completed?n:new Set,s=r===void 0||r.validation===!0?n:typeof r.validation=="object"?r.validation.categories??n:[];return jr(s).filter(l=>!a.has(l)).toArray()}async findChangedUris(e){if(this.langiumDocuments.getDocument(e)??this.textDocuments?.get(e))return[e];try{let i=await this.fileSystemProvider.stat(e);if(i.isDirectory)return await this.workspaceManager().searchFolder(e);if(this.workspaceManager().shouldIncludeEntry(i))return[e]}catch{}return[]}async emitUpdate(e,r){await Promise.all(this.updateListeners.map(i=>i(e,r)))}sortDocuments(e){let r=0,i=e.length-1;for(;r=0&&!this.hasTextDocument(e[i]);)i--;ri.error!==void 0)?!0:this.indexManager.isAffected(e,r)}onUpdate(e){return this.updateListeners.push(e),xp.create(()=>{let r=this.updateListeners.indexOf(e);r>=0&&this.updateListeners.splice(r,1)})}resetToState(e,r){switch(r){case Ur.Changed:case Ur.Parsed:this.indexManager.removeContent(e.uri);case Ur.IndexedContent:e.localSymbols=void 0;case Ur.ComputedScopes:this.serviceRegistry.getServices(e.uri).references.Linker.unlink(e);case Ur.Linked:this.indexManager.removeReferences(e.uri);case Ur.IndexedReferences:e.diagnostics=void 0,this.buildState.delete(e.uri.toString());case Ur.Validated:}e.state>r&&(e.state=r)}cleanUpDeleted(e){this.buildState.delete(e.uri.toString()),this.indexManager.remove(e.uri),e.state=Ur.Changed}async buildDocuments(e,r,i){this.prepareBuild(e,r),await this.runCancelable(e,Ur.Parsed,i,s=>this.langiumDocumentFactory.update(s,i)),await this.runCancelable(e,Ur.IndexedContent,i,s=>this.indexManager.updateContent(s,i)),await this.runCancelable(e,Ur.ComputedScopes,i,async s=>{let l=this.serviceRegistry.getServices(s.uri).references.ScopeComputation;s.localSymbols=await l.collectLocalSymbols(s,i)});let n=e.filter(s=>this.shouldLink(s));await this.runCancelable(n,Ur.Linked,i,s=>this.serviceRegistry.getServices(s.uri).references.Linker.link(s,i)),await this.runCancelable(n,Ur.IndexedReferences,i,s=>this.indexManager.updateReferences(s,i));let a=e.filter(s=>this.shouldValidate(s)?!0:(this.markAsCompleted(s),!1));await this.runCancelable(a,Ur.Validated,i,async s=>{await this.validate(s,i),this.markAsCompleted(s)})}markAsCompleted(e){let r=this.buildState.get(e.uri.toString());r&&(r.completed=!0)}prepareBuild(e,r){for(let i of e){let n=i.uri.toString(),a=this.buildState.get(n);(!a||a.completed)&&this.buildState.set(n,{completed:!1,options:r,result:a?.result})}}async runCancelable(e,r,i,n){for(let s of e)s.states.state===r);await this.notifyBuildPhase(a,r,i),this.currentState=r}onBuildPhase(e,r){return this.buildPhaseListeners.add(e,r),xp.create(()=>{this.buildPhaseListeners.delete(e,r)})}onDocumentPhase(e,r){return this.documentPhaseListeners.add(e,r),xp.create(()=>{this.documentPhaseListeners.delete(e,r)})}waitUntil(e,r,i){let n;return r&&"path"in r?n=r:i=r,i??(i=$r.CancellationToken.None),n?this.awaitDocumentState(e,n,i):this.awaitBuilderState(e,i)}awaitDocumentState(e,r,i){let n=this.langiumDocuments.getDocument(r);if(n){if(n.state>=e)return Promise.resolve(r);if(i.isCancellationRequested)return Promise.reject(jl);if(this.currentState>=e&&e>n.state)return Promise.reject(new Vv.ResponseError(Vv.LSPErrorCodes.RequestFailed,`Document state of ${r.toString()} is ${Ur[n.state]}, requiring ${Ur[e]}, but workspace state is already ${Ur[this.currentState]}. Returning undefined.`))}else return Promise.reject(new Vv.ResponseError(Vv.LSPErrorCodes.ServerCancelled,`No document found for URI: ${r.toString()}`));return new Promise((a,s)=>{let l=this.onDocumentPhase(e,h=>{Vn.equals(h.uri,r)&&(l.dispose(),u.dispose(),a(h.uri))}),u=i.onCancellationRequested(()=>{l.dispose(),u.dispose(),s(jl)})})}awaitBuilderState(e,r){return this.currentState>=e?Promise.resolve():r.isCancellationRequested?Promise.reject(jl):new Promise((i,n)=>{let a=this.onBuildPhase(e,()=>{a.dispose(),s.dispose(),i()}),s=r.onCancellationRequested(()=>{a.dispose(),s.dispose(),n(jl)})})}async notifyDocumentPhase(e,r,i){let a=this.documentPhaseListeners.get(r).slice();for(let s of a)try{await Dn(i),await s(e,i)}catch(l){if(!Ju(l))throw l}}async notifyBuildPhase(e,r,i){if(e.length===0)return;let a=this.buildPhaseListeners.get(r).slice();for(let s of a)await Dn(i),await s(e,i)}shouldLink(e){return this.getBuildOptions(e).eagerLinking??!0}shouldValidate(e){return!!this.getBuildOptions(e).validation}async validate(e,r){let i=this.serviceRegistry.getServices(e.uri).validation.DocumentValidator,n=this.getBuildOptions(e),a=typeof n.validation=="object"?{...n.validation}:{};a.categories=this.findMissingValidationCategories(e,n);let s=await i.validateDocument(e,a,r);e.diagnostics?e.diagnostics.push(...s):e.diagnostics=s;let l=this.buildState.get(e.uri.toString());l&&(l.result??(l.result={}),l.result.validationChecks?l.result.validationChecks=jr(l.result.validationChecks).concat(a.categories).distinct().toArray():l.result.validationChecks=[...a.categories])}getBuildOptions(e){return this.buildState.get(e.uri.toString())?.options??{}}}});var oC,sq=P(()=>{"use strict";Ts();NA();Yl();Ys();Wc();oC=class{static{o(this,"DefaultIndexManager")}constructor(e){this.symbolIndex=new Map,this.symbolByTypeIndex=new Vm,this.referenceIndex=new Map,this.documents=e.workspace.LangiumDocuments,this.serviceRegistry=e.ServiceRegistry,this.astReflection=e.AstReflection}findAllReferences(e,r){let i=bs(e).uri,n=[];return this.referenceIndex.forEach(a=>{a.forEach(s=>{Vn.equals(s.targetUri,i)&&s.targetPath===r&&n.push(s)})}),jr(n)}allElements(e,r){let i=jr(this.symbolIndex.keys());return r&&(i=i.filter(n=>!r||r.has(n))),i.map(n=>this.getFileDescriptions(n,e)).flat()}getFileDescriptions(e,r){return r?this.symbolByTypeIndex.get(e,r,()=>(this.symbolIndex.get(e)??[]).filter(a=>this.astReflection.isSubtype(a.type,r))):this.symbolIndex.get(e)??[]}remove(e){this.removeContent(e),this.removeReferences(e)}removeContent(e){let r=e.toString();this.symbolIndex.delete(r),this.symbolByTypeIndex.clear(r)}removeReferences(e){let r=e.toString();this.referenceIndex.delete(r)}async updateContent(e,r=$r.CancellationToken.None){let n=await this.serviceRegistry.getServices(e.uri).references.ScopeComputation.collectExportedSymbols(e,r),a=e.uri.toString();this.symbolIndex.set(a,n),this.symbolByTypeIndex.clear(a)}async updateReferences(e,r=$r.CancellationToken.None){let n=await this.serviceRegistry.getServices(e.uri).workspace.ReferenceDescriptionProvider.createDescriptions(e,r);this.referenceIndex.set(e.uri.toString(),n)}isAffected(e,r){let i=this.referenceIndex.get(e.uri.toString());return i?i.some(n=>!n.local&&r.has(n.targetUri.toString())):!1}}});var lC,oq=P(()=>{"use strict";Yl();Xl();Wc();Ys();lC=class{static{o(this,"DefaultWorkspaceManager")}constructor(e){this.initialBuildOptions={},this._ready=new eo,this.serviceRegistry=e.ServiceRegistry,this.langiumDocuments=e.workspace.LangiumDocuments,this.documentBuilder=e.workspace.DocumentBuilder,this.fileSystemProvider=e.workspace.FileSystemProvider,this.mutex=e.workspace.WorkspaceLock}get ready(){return this._ready.promise}get workspaceFolders(){return this.folders}initialize(e){this.folders=e.workspaceFolders??void 0}initialized(e){return this.mutex.write(r=>this.initializeWorkspace(this.folders??[],r))}async initializeWorkspace(e,r=$r.CancellationToken.None){let i=await this.performStartup(e);await Dn(r),await this.documentBuilder.build(i,this.initialBuildOptions,r)}async performStartup(e){let r=[],i=o(s=>{r.push(s),this.langiumDocuments.hasDocument(s.uri)||this.langiumDocuments.addDocument(s)},"collector");await this.loadAdditionalDocuments(e,i);let n=[];await Promise.all(e.map(s=>this.getRootFolder(s)).map(async s=>this.traverseFolder(s,n)));let a=jr(n).distinct(s=>s.toString()).filter(s=>!this.langiumDocuments.hasDocument(s));return await this.loadWorkspaceDocuments(a,i),this._ready.resolve(),r}async loadWorkspaceDocuments(e,r){await Promise.all(e.map(async i=>{let n=await this.langiumDocuments.getOrCreateDocument(i);r(n)}))}loadAdditionalDocuments(e,r){return Promise.resolve()}getRootFolder(e){return va.parse(e.uri)}async traverseFolder(e,r){try{let i=await this.fileSystemProvider.readDirectory(e);await Promise.all(i.map(async n=>{this.shouldIncludeEntry(n)&&(n.isDirectory?await this.traverseFolder(n.uri,r):n.isFile&&r.push(n.uri))}))}catch(i){console.error("Failure to read directory content of "+e.toString(!0),i)}}async searchFolder(e){let r=[];return await this.traverseFolder(e,r),r}shouldIncludeEntry(e){let r=Vn.basename(e.uri);return r.startsWith(".")?!1:e.isDirectory?r!=="node_modules"&&r!=="out":e.isFile?this.serviceRegistry.hasServices(e.uri):!1}}});function g7(t){return Array.isArray(t)&&(t.length===0||"name"in t[0])}function cq(t){return t&&"modes"in t&&"defaultMode"in t}function lq(t){return!g7(t)&&!cq(t)}var cC,m7,Ym,y7=P(()=>{"use strict";sp();cC=class{static{o(this,"DefaultLexerErrorMessageProvider")}buildUnexpectedCharactersMessage(e,r,i,n,a){return jy.buildUnexpectedCharactersMessage(e,r,i,n,a)}buildUnableToPopLexerModeMessage(e){return jy.buildUnableToPopLexerModeMessage(e)}},m7={mode:"full"},Ym=class{static{o(this,"DefaultLexer")}constructor(e){this.errorMessageProvider=e.parser.LexerErrorMessageProvider,this.tokenBuilder=e.parser.TokenBuilder;let r=this.tokenBuilder.buildTokens(e.Grammar,{caseInsensitive:e.LanguageMetaData.caseInsensitive});this.tokenTypes=this.toTokenTypeDictionary(r);let i=lq(r)?Object.values(r):r,n=e.LanguageMetaData.mode==="production";this.chevrotainLexer=new yn(i,{positionTracking:"full",skipValidations:n,errorMessageProvider:this.errorMessageProvider})}get definition(){return this.tokenTypes}tokenize(e,r=m7){let i=this.chevrotainLexer.tokenize(e);return{tokens:i.tokens,errors:i.errors,hidden:i.groups.hidden??[],report:this.tokenBuilder.flushLexingReport?.(e)}}toTokenTypeDictionary(e){if(lq(e))return e;let r=cq(e)?Object.values(e.modes).flat():e,i={};return r.forEach(n=>i[n.name]=n),i}};o(g7,"isTokenTypeArray");o(cq,"isIMultiModeLexerDefinition");o(lq,"isTokenTypeDictionary")});function fq(t,e,r){let i,n;typeof t=="string"?(n=e,i=r):(n=t.range.start,i=e),n||(n=oi.create(0,0));let a=Hke(t),s=pq(i),l=Eot({lines:a,position:n,options:s});return Lot({index:0,tokens:l,position:n})}function dq(t,e){let r=pq(e),i=Hke(t);if(i.length===0)return!1;let n=i[0],a=i[i.length-1],s=r.start,l=r.end;return!!s?.exec(n)&&!!l?.exec(a)}function Hke(t){let e="";return typeof t=="string"?e=t:e=t.text,e.split(n$)}function Eot(t){let e=[],r=t.position.line,i=t.position.character;for(let n=0;n=l.length){if(e.length>0){let f=oi.create(r,i);e.push({type:"break",content:"",range:Jr.create(f,f)})}}else{Wke.lastIndex=u;let f=Wke.exec(l);if(f){let d=f[0],p=f[1],m=oi.create(r,i+u),g=oi.create(r,i+u+d.length);e.push({type:"tag",content:p,range:Jr.create(m,g)}),u+=d.length,u=hq(l,u)}if(u0&&e[e.length-1].type==="break"?e.slice(0,-1):e}function Sot(t,e,r,i){let n=[];if(t.length===0){let a=oi.create(r,i),s=oi.create(r,i+e.length);n.push({type:"text",content:e,range:Jr.create(a,s)})}else{let a=0;for(let l of t){let u=l.index,h=e.substring(a,u);h.length>0&&n.push({type:"text",content:e.substring(a,u),range:Jr.create(oi.create(r,a+i),oi.create(r,u+i))});let f=h.length+1,d=l[1];if(n.push({type:"inline-tag",content:d,range:Jr.create(oi.create(r,a+f+i),oi.create(r,a+f+d.length+i))}),f+=d.length,l.length===4){f+=l[2].length;let p=l[3];n.push({type:"text",content:p,range:Jr.create(oi.create(r,a+f+i),oi.create(r,a+f+p.length+i))})}else n.push({type:"text",content:"",range:Jr.create(oi.create(r,a+f+i),oi.create(r,a+f+i))});a=u+l[0].length}let s=e.substring(a);s.length>0&&n.push({type:"text",content:s,range:Jr.create(oi.create(r,a+i),oi.create(r,a+i+s.length))})}return n}function hq(t,e){let r=t.substring(e).match(Aot);return r?e+r.index:t.length}function Dot(t){let e=t.match(_ot);if(e&&typeof e.index=="number")return e.index}function Lot(t){let e=oi.create(t.position.line,t.position.character);if(t.tokens.length===0)return new v7([],Jr.create(e,e));let r=[];for(;t.index0){let s=hq(e,i);n=e.substring(s),e=e.substring(0,i)}return(t==="linkcode"||t==="link"&&r.link==="code")&&(n=`\`${n}\``),r.renderLink?.(e,n)??Oot(e,n)}}function Oot(t,e){try{return va.parse(t,!0),`[${e}](${t})`}catch{return t}}function Uke(t){return t.endsWith(` +`)?` +`:` + +`}var Wke,wot,Aot,_ot,v7,uC,hC,x7,mq=P(()=>{"use strict";pv();Fy();Wc();o(fq,"parseJSDoc");o(dq,"isJSDoc");o(Hke,"getLines");Wke=/\s*(@([\p{L}][\p{L}\p{N}]*)?)/uy,wot=/\{(@[\p{L}][\p{L}\p{N}]*)(\s*)([^\r\n}]+)?\}/gu;o(Eot,"tokenize");o(Sot,"buildInlineTokens");Aot=/\S/,_ot=/\s*$/;o(hq,"skipWhitespace");o(Dot,"lastCharacter");o(Lot,"parseJSDocComment");o(Rot,"parseJSDocElement");o(Not,"appendEmptyLine");o(Yke,"parseJSDocText");o(Iot,"parseJSDocInline");o(jke,"parseJSDocTag");o(Xke,"parseJSDocLine");o(pq,"normalizeOptions");o(uq,"normalizeOption");v7=class{static{o(this,"JSDocCommentImpl")}constructor(e,r){this.elements=e,this.range=r}getTag(e){return this.getAllTags().find(r=>r.name===e)}getTags(e){return this.getAllTags().filter(r=>r.name===e)}getAllTags(){return this.elements.filter(e=>"name"in e)}toString(){let e="";for(let r of this.elements)if(e.length===0)e=r.toString();else{let i=r.toString();e+=Uke(e)+i}return e.trim()}toMarkdown(e){let r="";for(let i of this.elements)if(r.length===0)r=i.toMarkdown(e);else{let n=i.toMarkdown(e);r+=Uke(r)+n}return r.trim()}},uC=class{static{o(this,"JSDocTagImpl")}constructor(e,r,i,n){this.name=e,this.content=r,this.inline=i,this.range=n}toString(){let e=`@${this.name}`,r=this.content.toString();return this.content.inlines.length===1?e=`${e} ${r}`:this.content.inlines.length>1&&(e=`${e} +${r}`),this.inline?`{${e}}`:e}toMarkdown(e){return e?.renderTag?.(this)??this.toMarkdownDefault(e)}toMarkdownDefault(e){let r=this.content.toMarkdown(e);if(this.inline){let a=Mot(this.name,r,e??{});if(typeof a=="string")return a}let i="";e?.tag==="italic"||e?.tag===void 0?i="*":e?.tag==="bold"?i="**":e?.tag==="bold-italic"&&(i="***");let n=`${i}@${this.name}${i}`;return this.content.inlines.length===1?n=`${n} \u2014 ${r}`:this.content.inlines.length>1&&(n=`${n} +${r}`),this.inline?`{${n}}`:n}};o(Mot,"renderInlineTag");o(Oot,"renderLinkDefault");hC=class{static{o(this,"JSDocTextImpl")}constructor(e,r){this.inlines=e,this.range=r}toString(){let e="";for(let r=0;ri.range.start.line&&(e+=` +`)}return e}toMarkdown(e){let r="";for(let i=0;in.range.start.line&&(r+=` +`)}return r}},x7=class{static{o(this,"JSDocLineImpl")}constructor(e,r){this.text=e,this.range=r}toString(){return this.text}toMarkdown(){return this.text}};o(Uke,"fillNewlines")});var fC,gq=P(()=>{"use strict";Ts();mq();fC=class{static{o(this,"JSDocDocumentationProvider")}constructor(e){this.indexManager=e.shared.workspace.IndexManager,this.commentProvider=e.documentation.CommentProvider}getDocumentation(e){let r=this.commentProvider.getComment(e);if(r&&dq(r))return fq(r).toMarkdown({renderLink:o((n,a)=>this.documentationLinkRenderer(e,n,a),"renderLink"),renderTag:o(n=>this.documentationTagRenderer(e,n),"renderTag")})}documentationLinkRenderer(e,r,i){let n=this.findNameInLocalSymbols(e,r)??this.findNameInGlobalScope(e,r);if(n&&n.nameSegment){let a=n.nameSegment.range.start.line+1,s=n.nameSegment.range.start.character+1,l=n.documentUri.with({fragment:`L${a},${s}`});return`[${i}](${l.toString()})`}else return}documentationTagRenderer(e,r){}findNameInLocalSymbols(e,r){let n=bs(e).localSymbols;if(!n)return;let a=e;do{let l=n.getStream(a).find(u=>u.name===r);if(l)return l;a=a.$container}while(a)}findNameInGlobalScope(e,r){return this.indexManager.allElements().find(n=>n.name===r)}}});var dC,yq=P(()=>{"use strict";IA();Bc();dC=class{static{o(this,"DefaultCommentProvider")}constructor(e){this.grammarConfig=()=>e.parser.GrammarConfig}getComment(e){return IG(e)?e.$comment:ZF(e.$cstNode,this.grammarConfig().multilineCommentRules)?.text}}});var pC,vq,xq,bq=P(()=>{"use strict";Xl();BA();pC=class{static{o(this,"DefaultAsyncParser")}constructor(e){this.syncParser=e.parser.LangiumParser}parse(e,r){return Promise.resolve(this.syncParser.parse(e))}},vq=class{static{o(this,"AbstractThreadedAsyncParser")}constructor(e){this.threadCount=8,this.terminationDelay=200,this.workerPool=[],this.queue=[],this.hydrator=e.serializer.Hydrator}initializeWorkers(){for(;this.workerPool.length{if(this.queue.length>0){let r=this.queue.shift();r&&(e.lock(),r.resolve(e))}}),this.workerPool.push(e)}}async parse(e,r){let i=await this.acquireParserWorker(r),n=new eo,a,s=r.onCancellationRequested(()=>{a=setTimeout(()=>{this.terminateWorker(i)},this.terminationDelay)});return i.parse(e).then(l=>{let u=this.hydrator.hydrate(l);n.resolve(u)}).catch(l=>{n.reject(l)}).finally(()=>{s.dispose(),clearTimeout(a)}),n.promise}terminateWorker(e){e.terminate();let r=this.workerPool.indexOf(e);r>=0&&this.workerPool.splice(r,1)}async acquireParserWorker(e){this.initializeWorkers();for(let i of this.workerPool)if(i.ready)return i.lock(),i;let r=new eo;return e.onCancellationRequested(()=>{let i=this.queue.indexOf(r);i>=0&&this.queue.splice(i,1),r.reject(jl)}),this.queue.push(r),r.promise}},xq=class{static{o(this,"ParserWorker")}get ready(){return this._ready}get onReady(){return this.onReadyEmitter.event}constructor(e,r,i,n){this.onReadyEmitter=new xn.Emitter,this.deferred=new eo,this._ready=!0,this._parsing=!1,this.sendMessage=e,this._terminate=n,r(a=>{let s=a;this.deferred.resolve(s),this.unlock()}),i(a=>{this.deferred.reject(a),this.unlock()})}terminate(){this.deferred.reject(jl),this._terminate()}lock(){this._ready=!1}unlock(){this._parsing=!1,this._ready=!0,this.onReadyEmitter.fire()}parse(e){if(this._parsing)throw new Error("Parser worker is busy");return this._parsing=!0,this.deferred=new eo,this.sendMessage(e),this.deferred.promise}}});var mC,Tq=P(()=>{"use strict";Yl();Xl();mC=class{static{o(this,"DefaultWorkspaceLock")}constructor(){this.previousTokenSource=new $r.CancellationTokenSource,this.writeQueue=[],this.readQueue=[],this.done=!0}write(e){this.cancelWrite();let r=DA();return this.previousTokenSource=r,this.enqueue(this.writeQueue,e,r.token)}read(e){return this.enqueue(this.readQueue,e)}enqueue(e,r,i=$r.CancellationToken.None){let n=new eo,a={action:r,deferred:n,cancellationToken:i};return e.push(a),this.performNextOperation(),n.promise}async performNextOperation(){if(!this.done)return;let e=[];if(this.writeQueue.length>0)e.push(this.writeQueue.shift());else if(this.readQueue.length>0)e.push(...this.readQueue.splice(0,this.readQueue.length));else return;this.done=!1,await Promise.all(e.map(async({action:r,deferred:i,cancellationToken:n})=>{try{let a=await Promise.resolve().then(()=>r(n));i.resolve(a)}catch(a){Ju(a)?i.resolve(void 0):i.reject(a)}})),this.done=!0,this.performNextOperation()}cancelWrite(){this.previousTokenSource.cancel()}}});var gC,kq=P(()=>{"use strict";vA();ol();Oc();Ts();up();Bc();gC=class{static{o(this,"DefaultHydrator")}constructor(e){this.grammarElementIdMap=new Gm,this.tokenTypeIdMap=new Gm,this.grammar=e.Grammar,this.lexer=e.parser.Lexer,this.linker=e.references.Linker}dehydrate(e){return{lexerErrors:e.lexerErrors,lexerReport:e.lexerReport?this.dehydrateLexerReport(e.lexerReport):void 0,parserErrors:e.parserErrors.map(r=>({...r,message:r.message})),value:this.dehydrateAstNode(e.value,this.createDehyrationContext(e.value))}}dehydrateLexerReport(e){return e}createDehyrationContext(e){let r=new Map,i=new Map;for(let n of js(e))r.set(n,{});if(e.$cstNode)for(let n of xm(e.$cstNode))i.set(n,{});return{astNodes:r,cstNodes:i}}dehydrateAstNode(e,r){let i=r.astNodes.get(e);i.$type=e.$type,i.$containerIndex=e.$containerIndex,i.$containerProperty=e.$containerProperty,e.$cstNode!==void 0&&(i.$cstNode=this.dehydrateCstNode(e.$cstNode,r));for(let[n,a]of Object.entries(e))if(!n.startsWith("$"))if(Array.isArray(a)){let s=[];i[n]=s;for(let l of a)_n(l)?s.push(this.dehydrateAstNode(l,r)):ga(l)?s.push(this.dehydrateReference(l,r)):s.push(l)}else _n(a)?i[n]=this.dehydrateAstNode(a,r):ga(a)?i[n]=this.dehydrateReference(a,r):a!==void 0&&(i[n]=a);return i}dehydrateReference(e,r){let i={};return i.$refText=e.$refText,e.$refNode&&(i.$refNode=r.cstNodes.get(e.$refNode)),i}dehydrateCstNode(e,r){let i=r.cstNodes.get(e);return _T(e)?i.fullText=e.fullText:i.grammarSource=this.getGrammarElementId(e.grammarSource),i.hidden=e.hidden,i.astNode=r.astNodes.get(e.astNode),Mc(e)?i.content=e.content.map(n=>this.dehydrateCstNode(n,r)):Hd(e)&&(i.tokenType=e.tokenType.name,i.offset=e.offset,i.length=e.length,i.startLine=e.range.start.line,i.startColumn=e.range.start.character,i.endLine=e.range.end.line,i.endColumn=e.range.end.character),i}hydrate(e){let r=e.value,i=this.createHydrationContext(r);return"$cstNode"in r&&this.hydrateCstNode(r.$cstNode,i),{lexerErrors:e.lexerErrors,lexerReport:e.lexerReport,parserErrors:e.parserErrors,value:this.hydrateAstNode(r,i)}}createHydrationContext(e){let r=new Map,i=new Map;for(let a of js(e))r.set(a,{});let n;if(e.$cstNode)for(let a of xm(e.$cstNode)){let s;"fullText"in a?(s=new mv(a.fullText),n=s):"content"in a?s=new Pm:"tokenType"in a&&(s=this.hydrateCstLeafNode(a)),s&&(i.set(a,s),s.root=n)}return{astNodes:r,cstNodes:i}}hydrateAstNode(e,r){let i=r.astNodes.get(e);i.$type=e.$type,i.$containerIndex=e.$containerIndex,i.$containerProperty=e.$containerProperty,e.$cstNode&&(i.$cstNode=r.cstNodes.get(e.$cstNode));for(let[n,a]of Object.entries(e))if(!n.startsWith("$"))if(Array.isArray(a)){let s=[];i[n]=s;for(let l of a)_n(l)?s.push(this.setParent(this.hydrateAstNode(l,r),i)):ga(l)?s.push(this.hydrateReference(l,i,n,r)):s.push(l)}else _n(a)?i[n]=this.setParent(this.hydrateAstNode(a,r),i):ga(a)?i[n]=this.hydrateReference(a,i,n,r):a!==void 0&&(i[n]=a);return i}setParent(e,r){return e.$container=r,e}hydrateReference(e,r,i,n){return this.linker.buildReference(r,i,n.cstNodes.get(e.$refNode),e.$refText)}hydrateCstNode(e,r,i=0){let n=r.cstNodes.get(e);if(typeof e.grammarSource=="number"&&(n.grammarSource=this.getGrammarElement(e.grammarSource)),n.astNode=r.astNodes.get(e.astNode),Mc(n))for(let a of e.content){let s=this.hydrateCstNode(a,r,i++);n.content.push(s)}return n}hydrateCstLeafNode(e){let r=this.getTokenType(e.tokenType),i=e.offset,n=e.length,a=e.startLine,s=e.startColumn,l=e.endLine,u=e.endColumn,h=e.hidden;return new Om(i,n,{start:{line:a,character:s},end:{line:l,character:u}},r,h)}getTokenType(e){return this.lexer.definition[e]}getGrammarElementId(e){if(e)return this.grammarElementIdMap.size===0&&this.createGrammarElementIdMap(),this.grammarElementIdMap.get(e)}getGrammarElement(e){return this.grammarElementIdMap.size===0&&this.createGrammarElementIdMap(),this.grammarElementIdMap.getKey(e)}createGrammarElementIdMap(){let e=0;for(let r of js(this.grammar))FT(r)&&this.grammarElementIdMap.set(r,e++)}}});function qn(t){return{documentation:{CommentProvider:o(e=>new dC(e),"CommentProvider"),DocumentationProvider:o(e=>new fC(e),"DocumentationProvider")},parser:{AsyncParser:o(e=>new pC(e),"AsyncParser"),GrammarConfig:o(e=>v$(e),"GrammarConfig"),LangiumParser:o(e=>pG(e),"LangiumParser"),CompletionParser:o(e=>fG(e),"CompletionParser"),ValueConverter:o(()=>new Fm,"ValueConverter"),TokenBuilder:o(()=>new mf,"TokenBuilder"),Lexer:o(e=>new Ym(e),"Lexer"),ParserErrorMessageProvider:o(()=>new gv,"ParserErrorMessageProvider"),LexerErrorMessageProvider:o(()=>new cC,"LexerErrorMessageProvider")},workspace:{AstNodeLocator:o(()=>new Xk,"AstNodeLocator"),AstNodeDescriptionProvider:o(e=>new Yk(e),"AstNodeDescriptionProvider"),ReferenceDescriptionProvider:o(e=>new jk(e),"ReferenceDescriptionProvider")},references:{Linker:o(e=>new Pk(e),"Linker"),NameProvider:o(()=>new Bk,"NameProvider"),ScopeProvider:o(e=>new Vk(e),"ScopeProvider"),ScopeComputation:o(e=>new $k(e),"ScopeComputation"),References:o(e=>new Fk(e),"References")},serializer:{Hydrator:o(e=>new gC(e),"Hydrator"),JsonSerializer:o(e=>new qk(e),"JsonSerializer")},validation:{DocumentValidator:o(e=>new Hk(e),"DocumentValidator"),ValidationRegistry:o(e=>new Uk(e),"ValidationRegistry")},shared:o(()=>t.shared,"shared")}}function Wn(t){return{ServiceRegistry:o(e=>new Wk(e),"ServiceRegistry"),workspace:{LangiumDocuments:o(e=>new Ok(e),"LangiumDocuments"),LangiumDocumentFactory:o(e=>new Mk(e),"LangiumDocumentFactory"),DocumentBuilder:o(e=>new sC(e),"DocumentBuilder"),IndexManager:o(e=>new oC(e),"IndexManager"),WorkspaceManager:o(e=>new lC(e),"WorkspaceManager"),FileSystemProvider:o(e=>t.fileSystemProvider(e),"FileSystemProvider"),WorkspaceLock:o(()=>new mC,"WorkspaceLock"),ConfigurationProvider:o(e=>new Kk(e),"ConfigurationProvider")},profilers:{}}}var Cq=P(()=>{"use strict";x$();dG();mG();wA();gG();SG();AG();_G();DG();NG();IA();MG();OG();OA();PG();BG();FG();aq();Cv();sq();oq();y7();gq();yq();Rk();bq();Tq();kq();o(qn,"createDefaultCoreModule");o(Wn,"createDefaultSharedCoreModule")});function ki(t,e,r,i,n,a,s,l,u){let h=[t,e,r,i,n,a,s,l,u].reduce(yC,{});return eCe(h)}function Jke(t){if(t&&t[Zke])for(let e of Object.values(t))Jke(e);return t}function eCe(t,e){let r=new Proxy({},{deleteProperty:o(()=>!1,"deleteProperty"),set:o(()=>{throw new Error("Cannot set property on injected service container")},"set"),get:o((i,n)=>n===Zke?!0:Qke(i,n,t,e||r),"get"),getOwnPropertyDescriptor:o((i,n)=>(Qke(i,n,t,e||r),Object.getOwnPropertyDescriptor(i,n)),"getOwnPropertyDescriptor"),has:o((i,n)=>n in t,"has"),ownKeys:o(()=>[...Object.getOwnPropertyNames(t)],"ownKeys")});return r}function Qke(t,e,r,i){if(e in t){if(t[e]instanceof Error)throw new Error("Construction failure. Please make sure that your dependencies are constructable. Cause: "+t[e]);if(t[e]===Kke)throw new Error('Cycle detected. Please make "'+String(e)+'" lazy. Visit https://langium.org/docs/reference/configuration-services/#resolving-cyclic-dependencies');return t[e]}else if(e in r){let n=r[e];t[e]=Kke;try{t[e]=typeof n=="function"?n(i):eCe(n,i)}catch(a){throw t[e]=a instanceof Error?a:void 0,a}return t[e]}else return}function yC(t,e){if(e){for(let[r,i]of Object.entries(e))if(i!=null)if(typeof i=="object"){let n=t[r];typeof n=="object"&&n!==null?t[r]=yC(n,i):t[r]=yC({},i)}else t[r]=i}return t}var wq,Zke,Kke,Eq=P(()=>{"use strict";(function(t){t.merge=(e,r)=>yC(yC({},e),r)})(wq||(wq={}));o(ki,"inject");Zke=Symbol("isProxy");o(Jke,"eagerLoad");o(eCe,"_inject");Kke=Symbol();o(Qke,"_resolve");o(yC,"_merge")});var tCe=P(()=>{"use strict"});var rCe=P(()=>{"use strict";yq();gq();mq()});var iCe=P(()=>{"use strict"});var nCe=P(()=>{"use strict";x$();iCe()});var Sq,jm,b7,Aq,aCe=P(()=>{"use strict";sp();wA();y7();Sq={indentTokenName:"INDENT",dedentTokenName:"DEDENT",whitespaceTokenName:"WS",ignoreIndentationDelimiters:[]};(function(t){t.REGULAR="indentation-sensitive",t.IGNORE_INDENTATION="ignore-indentation"})(jm||(jm={}));b7=class extends mf{static{o(this,"IndentationAwareTokenBuilder")}constructor(e=Sq){super(),this.indentationStack=[0],this.whitespaceRegExp=/[ \t]+/y,this.options={...Sq,...e},this.indentTokenType=np({name:this.options.indentTokenName,pattern:this.indentMatcher.bind(this),line_breaks:!1}),this.dedentTokenType=np({name:this.options.dedentTokenName,pattern:this.dedentMatcher.bind(this),line_breaks:!1})}buildTokens(e,r){let i=super.buildTokens(e,r);if(!g7(i))throw new Error("Invalid tokens built by default builder");let{indentTokenName:n,dedentTokenName:a,whitespaceTokenName:s,ignoreIndentationDelimiters:l}=this.options,u,h,f,d=[];for(let p of i){for(let[m,g]of l)p.name===m?p.PUSH_MODE=jm.IGNORE_INDENTATION:p.name===g&&(p.POP_MODE=!0);p.name===a?u=p:p.name===n?h=p:p.name===s?f=p:d.push(p)}if(!u||!h||!f)throw new Error("Some indentation/whitespace tokens not found!");return l.length>0?{modes:{[jm.REGULAR]:[u,h,...d,f],[jm.IGNORE_INDENTATION]:[...d,f]},defaultMode:jm.REGULAR}:[u,h,f,...d]}flushLexingReport(e){return{...super.flushLexingReport(e),remainingDedents:this.flushRemainingDedents(e)}}isStartOfLine(e,r){return r===0||`\r +`.includes(e[r-1])}matchWhitespace(e,r,i,n){this.whitespaceRegExp.lastIndex=r;let a=this.whitespaceRegExp.exec(e);return{currIndentLevel:a?.[0].length??0,prevIndentLevel:this.indentationStack.at(-1),match:a}}createIndentationTokenInstance(e,r,i,n){let a=this.getLineNumber(r,n);return hf(e,i,n,n+i.length,a,a,1,i.length)}getLineNumber(e,r){return e.substring(0,r).split(/\r\n|\r|\n/).length}indentMatcher(e,r,i,n){if(!this.isStartOfLine(e,r))return null;let{currIndentLevel:a,prevIndentLevel:s,match:l}=this.matchWhitespace(e,r,i,n);return a<=s?null:(this.indentationStack.push(a),l)}dedentMatcher(e,r,i,n){if(!this.isStartOfLine(e,r))return null;let{currIndentLevel:a,prevIndentLevel:s,match:l}=this.matchWhitespace(e,r,i,n);if(a>=s)return null;let u=this.indentationStack.lastIndexOf(a);if(u===-1)return this.diagnostics.push({severity:"error",message:`Invalid dedent level ${a} at offset: ${r}. Current indentation stack: ${this.indentationStack}`,offset:r,length:l?.[0]?.length??0,line:this.getLineNumber(e,r),column:1}),null;let h=this.indentationStack.length-u-1,f=e.substring(0,r).match(/[\r\n]+$/)?.[0].length??1;for(let d=0;d1;)r.push(this.createIndentationTokenInstance(this.dedentTokenType,e,"",e.length)),this.indentationStack.pop();return this.indentationStack=[0],r}},Aq=class extends Ym{static{o(this,"IndentationAwareLexer")}constructor(e){if(super(e),e.parser.TokenBuilder instanceof b7)this.indentationTokenBuilder=e.parser.TokenBuilder;else throw new Error("IndentationAwareLexer requires an accompanying IndentationAwareTokenBuilder")}tokenize(e,r=m7){let i=super.tokenize(e),n=i.report;r?.mode==="full"&&i.tokens.push(...n.remainingDedents),n.remainingDedents=[];let{indentTokenType:a,dedentTokenType:s}=this.indentationTokenBuilder,l=a.tokenTypeIdx,u=s.tokenTypeIdx,h=[],f=i.tokens.length-1;for(let d=0;d=0&&h.push(i.tokens[f]),i.tokens=h,i}}});var sCe=P(()=>{"use strict"});var oCe=P(()=>{"use strict";bq();dG();vA();aCe();mG();Rk();y7();CA();sCe();wA();gG()});var lCe=P(()=>{"use strict";SG();AG();_G();RG();DG();NG()});var cCe=P(()=>{"use strict";kq();IA()});var T7,Un,_q=P(()=>{"use strict";T7=class{static{o(this,"EmptyFileSystemProvider")}stat(e){throw new Error("No file system is available.")}statSync(e){throw new Error("No file system is available.")}async exists(){return!1}existsSync(){return!1}readBinary(){throw new Error("No file system is available.")}readBinarySync(){throw new Error("No file system is available.")}readFile(){throw new Error("No file system is available.")}readFileSync(){throw new Error("No file system is available.")}async readDirectory(){return[]}readDirectorySync(){return[]}},Un={fileSystemProvider:o(()=>new T7,"fileSystemProvider")}});function Fot(){let t=ki(Wn(Un),Bot),e=ki(qn({shared:t}),Pot);return t.ServiceRegistry.register(e),e}function Jl(t){let e=Fot(),r=e.serializer.JsonSerializer.deserialize(t);return e.shared.workspace.LangiumDocumentFactory.fromModel(r,va.parse(`memory:/${r.name??"grammar"}.langium`)),r}var Pot,Bot,uCe=P(()=>{"use strict";Cq();Eq();ol();_q();Wc();Pot={Grammar:o(()=>{},"Grammar"),LanguageMetaData:o(()=>({caseInsensitive:!1,fileExtensions:[".langium"],languageId:"langium"}),"LanguageMetaData")},Bot={AstReflection:o(()=>new Oy,"AstReflection")};o(Fot,"createMinimalGrammarServices");o(Jl,"loadGrammarFromJson")});var li={};ur(li,{AstUtils:()=>XS,BiMap:()=>Gm,Cancellation:()=>$r,ContextCache:()=>Vm,CstUtils:()=>m6,DONE_RESULT:()=>xs,Deferred:()=>eo,Disposable:()=>xp,DisposableCache:()=>Ev,DocumentCache:()=>RA,EMPTY_STREAM:()=>Yd,ErrorWithLocation:()=>Tm,GrammarUtils:()=>k6,MultiMap:()=>Cs,OperationCancelled:()=>jl,Reduction:()=>Ey,RegExpUtils:()=>x6,SimpleCache:()=>Gk,StreamImpl:()=>al,TreeStreamImpl:()=>Wu,URI:()=>va,UriTrie:()=>kv,UriUtils:()=>Vn,WorkspaceCache:()=>Sv,assertCondition:()=>qye,assertUnreachable:()=>Yu,delayNextTick:()=>CG,interruptAndCheck:()=>Dn,isOperationCancelled:()=>Ju,loadGrammarFromJson:()=>Jl,setInterruptionPeriod:()=>u2e,startCancelableOperation:()=>DA,stream:()=>jr});var hCe=P(()=>{"use strict";NA();BA();Kr(li,xn);up();nq();g6();uCe();Xl();Ys();Wc();Ts();Yl();Bc();Vc();Fy()});var fCe=P(()=>{"use strict";OG();OA()});var Dq,k7,dCe=P(()=>{"use strict";up();Dq=class{static{o(this,"DefaultLangiumProfiler")}constructor(e){this.activeCategories=new Set,this.allCategories=new Set(["validating","parsing","linking"]),this.activeCategories=e??new Set(this.allCategories),this.records=new Cs}isActive(e){return this.activeCategories.has(e)}start(...e){e?e.forEach(r=>this.activeCategories.add(r)):this.activeCategories=new Set(this.allCategories)}stop(...e){e?e.forEach(r=>this.activeCategories.delete(r)):this.activeCategories.clear()}createTask(e,r){if(!this.isActive(e))throw new Error(`Category "${e}" is not active.`);return console.log(`Creating profiling task for '${e}.${r}'.`),new k7(i=>this.records.add(e,this.dumpRecord(e,i)),r)}dumpRecord(e,r){console.info(`Task ${e}.${r.identifier} executed in ${r.duration.toFixed(2)}ms and ended at ${r.date.toISOString()}`);let i=[];for(let s of r.entries.keys()){let l=r.entries.get(s),u=l.reduce((h,f)=>h+f);i.push({name:`${r.identifier}.${s}`,count:l.length,duration:u})}let n=r.duration-i.map(s=>s.duration).reduce((s,l)=>s+l,0);i.push({name:r.identifier,count:1,duration:n}),i.sort((s,l)=>l.duration-s.duration);function a(s){return Math.round(100*s)/100}return o(a,"Round"),console.table(i.map(s=>({Element:s.name,Count:s.count,"Self %":a(100*s.duration/r.duration),"Time (ms)":a(s.duration)}))),r}getRecords(...e){return e.length===0?this.records.values():this.records.entries().filter(r=>e.some(i=>i===r[0])).flatMap(r=>r[1])}},k7=class{static{o(this,"ProfilingTask")}constructor(e,r){this.stack=[],this.entries=new Cs,this.addRecord=e,this.identifier=r}start(){if(this.startTime!==void 0)throw new Error(`Task "${this.identifier}" is already started.`);this.startTime=performance.now()}stop(){if(this.startTime===void 0)throw new Error(`Task "${this.identifier}" was not started.`);if(this.stack.length!==0)throw new Error(`Task "${this.identifier}" cannot be stopped before sub-task(s): ${this.stack.map(r=>r.id).join(", ")}.`);let e={identifier:this.identifier,date:new Date,duration:performance.now()-this.startTime,entries:this.entries};this.addRecord(e),this.startTime=void 0,this.entries.clear()}startSubTask(e){this.stack.push({id:e,start:performance.now(),content:0})}stopSubTask(e){let r=this.stack.pop();if(!r)throw new Error(`Task "${this.identifier}.${e}" was not started.`);if(r.id!==e)throw new Error(`Sub-Task "${r.id}" is not already stopped.`);let i=performance.now()-r.start;this.stack.at(-1)!==void 0&&(this.stack[this.stack.length-1].content+=i);let n=i-r.content;this.entries.add(e,n)}}});var pCe=P(()=>{"use strict";PG();BG();FG();aq();Cv();_q();sq();Tq();oq();dCe()});var za={};ur(za,{AbstractAstReflection:()=>sm,AbstractCstNode:()=>Ak,AbstractLangiumParser:()=>_k,AbstractParserErrorMessageProvider:()=>bA,AbstractThreadedAsyncParser:()=>vq,AstUtils:()=>XS,BiMap:()=>Gm,Cancellation:()=>$r,CompositeCstNodeImpl:()=>Pm,ContextCache:()=>Vm,CstNodeBuilder:()=>Sk,CstUtils:()=>m6,DEFAULT_TOKENIZE_OPTIONS:()=>m7,DONE_RESULT:()=>xs,DatatypeSymbol:()=>xA,DefaultAstNodeDescriptionProvider:()=>Yk,DefaultAstNodeLocator:()=>Xk,DefaultAsyncParser:()=>pC,DefaultCommentProvider:()=>dC,DefaultConfigurationProvider:()=>Kk,DefaultDocumentBuilder:()=>sC,DefaultDocumentValidator:()=>Hk,DefaultHydrator:()=>gC,DefaultIndexManager:()=>oC,DefaultJsonSerializer:()=>qk,DefaultLangiumDocumentFactory:()=>Mk,DefaultLangiumDocuments:()=>Ok,DefaultLangiumProfiler:()=>Dq,DefaultLexer:()=>Ym,DefaultLexerErrorMessageProvider:()=>cC,DefaultLinker:()=>Pk,DefaultNameProvider:()=>Bk,DefaultReferenceDescriptionProvider:()=>jk,DefaultReferences:()=>Fk,DefaultScopeComputation:()=>$k,DefaultScopeProvider:()=>Vk,DefaultServiceRegistry:()=>Wk,DefaultTokenBuilder:()=>mf,DefaultValueConverter:()=>Fm,DefaultWorkspaceLock:()=>mC,DefaultWorkspaceManager:()=>lC,Deferred:()=>eo,Disposable:()=>xp,DisposableCache:()=>Ev,DocumentCache:()=>RA,DocumentState:()=>Ur,DocumentValidator:()=>Kl,EMPTY_SCOPE:()=>Bst,EMPTY_STREAM:()=>Yd,EmptyFileSystem:()=>Un,EmptyFileSystemProvider:()=>T7,ErrorWithLocation:()=>Tm,GrammarAST:()=>zT,GrammarUtils:()=>k6,IndentationAwareLexer:()=>Aq,IndentationAwareTokenBuilder:()=>b7,JSDocDocumentationProvider:()=>fC,LangiumCompletionParser:()=>Lk,LangiumParser:()=>Dk,LangiumParserErrorMessageProvider:()=>gv,LeafCstNodeImpl:()=>Om,LexingMode:()=>jm,MapScope:()=>LG,Module:()=>wq,MultiMap:()=>Cs,MultiMapScope:()=>zk,OperationCancelled:()=>jl,ParserWorker:()=>xq,ProfilingTask:()=>k7,Reduction:()=>Ey,RefResolving:()=>zm,RegExpUtils:()=>x6,RootCstNodeImpl:()=>mv,SimpleCache:()=>Gk,StreamImpl:()=>al,StreamScope:()=>wv,TextDocument:()=>bv,TreeStreamImpl:()=>Wu,URI:()=>va,UriTrie:()=>kv,UriUtils:()=>Vn,VALIDATE_EACH_NODE:()=>v2e,ValidationCategory:()=>MA,ValidationRegistry:()=>Uk,ValueConverter:()=>Zu,WorkspaceCache:()=>Sv,assertCondition:()=>qye,assertUnreachable:()=>Yu,createCompletionParser:()=>fG,createDefaultCoreModule:()=>qn,createDefaultSharedCoreModule:()=>Wn,createGrammarConfig:()=>v$,createLangiumParser:()=>pG,createParser:()=>Nk,delayNextTick:()=>CG,diagnosticData:()=>qm,eagerLoad:()=>Jke,getDiagnosticRange:()=>x2e,indentationBuilderDefaultOptions:()=>Sq,inject:()=>ki,interruptAndCheck:()=>Dn,isAstNode:()=>_n,isAstNodeDescription:()=>AF,isAstNodeWithComment:()=>IG,isCompositeCstNode:()=>Mc,isIMultiModeLexerDefinition:()=>cq,isJSDoc:()=>dq,isLeafCstNode:()=>Hd,isLinkingError:()=>om,isMultiReference:()=>nl,isNamed:()=>g2e,isOperationCancelled:()=>Ju,isReference:()=>ga,isRootCstNode:()=>_T,isTokenTypeArray:()=>g7,isTokenTypeDictionary:()=>lq,loadGrammarFromJson:()=>Jl,parseJSDoc:()=>fq,prepareLangiumParser:()=>a2e,setInterruptionPeriod:()=>u2e,startCancelableOperation:()=>DA,stream:()=>jr,toDiagnosticData:()=>b2e,toDiagnosticSeverity:()=>PA});var to=P(()=>{"use strict";Cq();Eq();MG();tCe();Oc();rCe();nCe();oCe();lCe();cCe();hCe();Kr(za,li);fCe();pCe();ol()});function ACe(t){return ec.isInstance(t,ah.$type)}function _Ce(t){return ec.isInstance(t,kC.$type)}function DCe(t){return ec.isInstance(t,Zm.$type)}function LCe(t){return ec.isInstance(t,Tp.$type)}function RCe(t){return ec.isInstance(t,Hv.$type)}function NCe(t){return ec.isInstance(t,Jm.$type)}function ICe(t){return ec.isInstance(t,eg.$type)}function MCe(t){return ec.isInstance(t,tg.$type)}function OCe(t){return ec.isInstance(t,kp.$type)}function PCe(t){return ec.isInstance(t,CC.$type)}function BCe(t){return ec.isInstance(t,rg.$type)}function FCe(t){return ec.isInstance(t,Ga.$type)}var $ot,dt,zq,Gq,Vq,qq,Wq,Uq,Hq,Yq,jq,T4r,C7,w7,vC,Lq,ah,E7,kC,mCe,S7,Rq,Zm,Xm,A7,_7,gCe,qv,nh,Nq,yCe,D7,Iq,Tp,xC,Hv,bC,Mq,TC,L7,Km,Jm,R7,Oq,eg,tg,kp,CC,Pq,N7,bp,Bq,Wv,Fq,Qm,rg,$q,I7,Uv,Ga,$Ce,ec,vCe,zot,xCe,Got,bCe,Vot,TCe,qot,kCe,Wot,CCe,Uot,wCe,Hot,ECe,Yot,SCe,jot,Xot,Kot,Qot,Zot,Jot,elt,tlt,rlt,ilt,xa,Xq,Kq,Qq,Zq,Jq,eW,tW,rW,iW,nlt,alt,slt,olt,tc,yf,Va,llt,ia=P(()=>{"use strict";to();to();to();to();$ot=Object.defineProperty,dt=o((t,e)=>$ot(t,"name",{value:e,configurable:!0}),"__name");(t=>{t.Terminals={ARROW_DIRECTION:/L|R|T|B/,ARROW_GROUP:/\{group\}/,ARROW_INTO:/<|>/,ACC_DESCR:/[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,ACC_TITLE:/[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,TITLE:/[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,STRING:/"([^"\\]|\\.)*"|'([^'\\]|\\.)*'/,ID:/[\w]([-\w]*\w)?/,NEWLINE:/\r?\n/,WHITESPACE:/[\t ]+/,YAML:/---[\t ]*\r?\n(?:[\S\s]*?\r?\n)?---(?:\r?\n|(?!\S))/,DIRECTIVE:/[\t ]*%%{[\S\s]*?}%%(?:\r?\n|(?!\S))/,SINGLE_LINE_COMMENT:/[\t ]*%%[^\n\r]*/,ARCH_ICON:/\([\w-:]+\)/,ARCH_TITLE:/\[(?:"([^"\\]|\\.)*"|'([^'\\]|\\.)*'|[\w ]+)\]/}})(zq||(zq={}));(t=>{t.Terminals={ACC_DESCR:/[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,ACC_TITLE:/[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,TITLE:/[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,INT:/0|[1-9][0-9]*(?!\.)/,STRING:/"([^"\\]|\\.)*"|'([^'\\]|\\.)*'/,NEWLINE:/\r?\n/,WHITESPACE:/[\t ]+/,YAML:/---[\t ]*\r?\n(?:[\S\s]*?\r?\n)?---(?:\r?\n|(?!\S))/,DIRECTIVE:/[\t ]*%%{[\S\s]*?}%%(?:\r?\n|(?!\S))/,SINGLE_LINE_COMMENT:/[\t ]*%%[^\n\r]*/,REFERENCE:/\w([-\./\w]*[-\w])?/}})(Gq||(Gq={}));(t=>{t.Terminals={ACC_DESCR:/[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,ACC_TITLE:/[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,TITLE:/[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,NEWLINE:/\r?\n/,WHITESPACE:/[\t ]+/,YAML:/---[\t ]*\r?\n(?:[\S\s]*?\r?\n)?---(?:\r?\n|(?!\S))/,DIRECTIVE:/[\t ]*%%{[\S\s]*?}%%(?:\r?\n|(?!\S))/,SINGLE_LINE_COMMENT:/[\t ]*%%[^\n\r]*/}})(Vq||(Vq={}));(t=>{t.Terminals={ACC_DESCR:/[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,ACC_TITLE:/[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,TITLE:/[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,INT:/0|[1-9][0-9]*(?!\.)/,STRING:/"([^"\\]|\\.)*"|'([^'\\]|\\.)*'/,NEWLINE:/\r?\n/,WHITESPACE:/[\t ]+/,YAML:/---[\t ]*\r?\n(?:[\S\s]*?\r?\n)?---(?:\r?\n|(?!\S))/,DIRECTIVE:/[\t ]*%%{[\S\s]*?}%%(?:\r?\n|(?!\S))/,SINGLE_LINE_COMMENT:/[\t ]*%%[^\n\r]*/}})(qq||(qq={}));(t=>{t.Terminals={NUMBER_PIE:/(?:-?[0-9]+\.[0-9]+(?!\.))|(?:-?(0|[1-9][0-9]*)(?!\.))/,ACC_DESCR:/[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,ACC_TITLE:/[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,TITLE:/[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,STRING:/"([^"\\]|\\.)*"|'([^'\\]|\\.)*'/,NEWLINE:/\r?\n/,WHITESPACE:/[\t ]+/,YAML:/---[\t ]*\r?\n(?:[\S\s]*?\r?\n)?---(?:\r?\n|(?!\S))/,DIRECTIVE:/[\t ]*%%{[\S\s]*?}%%(?:\r?\n|(?!\S))/,SINGLE_LINE_COMMENT:/[\t ]*%%[^\n\r]*/}})(Wq||(Wq={}));(t=>{t.Terminals={GRATICULE:/circle|polygon/,BOOLEAN:/true|false/,ACC_DESCR:/[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,ACC_TITLE:/[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,TITLE:/[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,NUMBER:/(?:[0-9]+\.[0-9]+(?!\.))|(?:0|[1-9][0-9]*(?!\.))/,STRING:/"([^"\\]|\\.)*"|'([^'\\]|\\.)*'/,ID:/[\w]([-\w]*\w)?/,NEWLINE:/\r?\n/,WHITESPACE:/[\t ]+/,YAML:/---[\t ]*\r?\n(?:[\S\s]*?\r?\n)?---(?:\r?\n|(?!\S))/,DIRECTIVE:/[\t ]*%%{[\S\s]*?}%%(?:\r?\n|(?!\S))/,SINGLE_LINE_COMMENT:/[\t ]*%%[^\n\r]*/}})(Uq||(Uq={}));(t=>{t.Terminals={ACC_DESCR:/[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,ACC_TITLE:/[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,TITLE:/[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,TREEMAP_KEYWORD:/treemap-beta|treemap/,CLASS_DEF:/classDef\s+([a-zA-Z_][a-zA-Z0-9_]+)(?:\s+([^;\r\n]*))?(?:;)?/,STYLE_SEPARATOR:/:::/,SEPARATOR:/:/,COMMA:/,/,INDENTATION:/[ \t]{1,}/,WS:/[ \t]+/,ML_COMMENT:/\%\%[^\n]*/,NL:/\r?\n/,ID2:/[a-zA-Z_][a-zA-Z0-9_]*/,NUMBER2:/[0-9_\.\,]+/,STRING2:/"[^"]*"|'[^']*'/}})(Hq||(Hq={}));(t=>{t.Terminals={ACC_DESCR:/[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,ACC_TITLE:/[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,TITLE:/[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,INDENTATION:/[ \t]{1,}/,WS:/[ \t]+/,ML_COMMENT:/\%\%[^\n]*/,NL:/\r?\n/,STRING2:/"[^"]*"|'[^']*'/}})(Yq||(Yq={}));(t=>{t.Terminals={WARDLEY_NUMBER:/[0-9]+\.[0-9]+/,ARROW:/->/,LINK_PORT:/\+<>|\+>|\+|-\.->|>|\+'[^']*'<>|\+'[^']*'<|\+'[^']*'>/,LINK_LABEL:/;[^\n\r]+/,STRATEGY:/build|buy|outsource|market/,KW_WARDLEY:/wardley-beta/,KW_SIZE:/size/,KW_EVOLUTION:/evolution/,KW_ANCHOR:/anchor/,KW_COMPONENT:/component/,KW_LABEL:/label/,KW_INERTIA:/inertia/,KW_EVOLVE:/evolve/,KW_PIPELINE:/pipeline/,KW_NOTE:/note/,KW_ANNOTATIONS:/annotations/,KW_ANNOTATION:/annotation/,KW_ACCELERATOR:/accelerator/,KW_DEACCELERATOR:/deaccelerator/,NAME_WITH_SPACES:/(?!title\s|accTitle|accDescr)[A-Za-z][A-Za-z0-9_()&]*(?:[ \t]+[A-Za-z(][A-Za-z0-9_()&]*)*/,WS:/[ \t]+/,ACC_DESCR:/[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/,ACC_TITLE:/[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/,TITLE:/[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/,INT:/0|[1-9][0-9]*(?!\.)/,STRING:/"([^"\\]|\\.)*"|'([^'\\]|\\.)*'/,ID:/[\w]([-\w]*\w)?/,NEWLINE:/\r?\n/,WHITESPACE:/[\t ]+/,YAML:/---[\t ]*\r?\n(?:[\S\s]*?\r?\n)?---(?:\r?\n|(?!\S))/,DIRECTIVE:/[\t ]*%%{[\S\s]*?}%%(?:\r?\n|(?!\S))/,SINGLE_LINE_COMMENT:/[\t ]*%%[^\n\r]*/}})(jq||(jq={}));T4r={...zq.Terminals,...Gq.Terminals,...Vq.Terminals,...qq.Terminals,...Wq.Terminals,...Uq.Terminals,...Yq.Terminals,...Hq.Terminals,...jq.Terminals},C7={$type:"Accelerator",name:"name",x:"x",y:"y"},w7={$type:"Anchor",evolution:"evolution",name:"name",visibility:"visibility"},vC={$type:"Annotation",number:"number",text:"text",x:"x",y:"y"},Lq={$type:"Annotations",x:"x",y:"y"},ah={$type:"Architecture",accDescr:"accDescr",accTitle:"accTitle",edges:"edges",groups:"groups",junctions:"junctions",services:"services",title:"title"};o(ACe,"isArchitecture");dt(ACe,"isArchitecture");E7={$type:"Axis",label:"label",name:"name"},kC={$type:"Branch",name:"name",order:"order"};o(_Ce,"isBranch");dt(_Ce,"isBranch");mCe={$type:"Checkout",branch:"branch"},S7={$type:"CherryPicking",id:"id",parent:"parent",tags:"tags"},Rq={$type:"ClassDefStatement",className:"className",styleText:"styleText"},Zm={$type:"Commit",id:"id",message:"message",tags:"tags",type:"type"};o(DCe,"isCommit");dt(DCe,"isCommit");Xm={$type:"Component",decorator:"decorator",evolution:"evolution",inertia:"inertia",label:"label",name:"name",visibility:"visibility"},A7={$type:"Curve",entries:"entries",label:"label",name:"name"},_7={$type:"Deaccelerator",name:"name",x:"x",y:"y"},gCe={$type:"Decorator",strategy:"strategy"},qv={$type:"Direction",accDescr:"accDescr",accTitle:"accTitle",dir:"dir",statements:"statements",title:"title"},nh={$type:"Edge",lhsDir:"lhsDir",lhsGroup:"lhsGroup",lhsId:"lhsId",lhsInto:"lhsInto",rhsDir:"rhsDir",rhsGroup:"rhsGroup",rhsId:"rhsId",rhsInto:"rhsInto",title:"title"},Nq={$type:"Entry",axis:"axis",value:"value"},yCe={$type:"Evolution",stages:"stages"},D7={$type:"EvolutionStage",boundary:"boundary",name:"name",secondName:"secondName"},Iq={$type:"Evolve",component:"component",target:"target"},Tp={$type:"GitGraph",accDescr:"accDescr",accTitle:"accTitle",statements:"statements",title:"title"};o(LCe,"isGitGraph");dt(LCe,"isGitGraph");xC={$type:"Group",icon:"icon",id:"id",in:"in",title:"title"},Hv={$type:"Info",accDescr:"accDescr",accTitle:"accTitle",title:"title"};o(RCe,"isInfo");dt(RCe,"isInfo");bC={$type:"Item",classSelector:"classSelector",name:"name"},Mq={$type:"Junction",id:"id",in:"in"},TC={$type:"Label",negX:"negX",negY:"negY",offsetX:"offsetX",offsetY:"offsetY"},L7={$type:"Leaf",classSelector:"classSelector",name:"name",value:"value"},Km={$type:"Link",arrow:"arrow",from:"from",fromPort:"fromPort",linkLabel:"linkLabel",to:"to",toPort:"toPort"},Jm={$type:"Merge",branch:"branch",id:"id",tags:"tags",type:"type"};o(NCe,"isMerge");dt(NCe,"isMerge");R7={$type:"Note",evolution:"evolution",text:"text",visibility:"visibility"},Oq={$type:"Option",name:"name",value:"value"},eg={$type:"Packet",accDescr:"accDescr",accTitle:"accTitle",blocks:"blocks",title:"title"};o(ICe,"isPacket");dt(ICe,"isPacket");tg={$type:"PacketBlock",bits:"bits",end:"end",label:"label",start:"start"};o(MCe,"isPacketBlock");dt(MCe,"isPacketBlock");kp={$type:"Pie",accDescr:"accDescr",accTitle:"accTitle",sections:"sections",showData:"showData",title:"title"};o(OCe,"isPie");dt(OCe,"isPie");CC={$type:"PieSection",label:"label",value:"value"};o(PCe,"isPieSection");dt(PCe,"isPieSection");Pq={$type:"Pipeline",components:"components",parent:"parent"},N7={$type:"PipelineComponent",evolution:"evolution",label:"label",name:"name"},bp={$type:"Radar",accDescr:"accDescr",accTitle:"accTitle",axes:"axes",curves:"curves",options:"options",title:"title"},Bq={$type:"Section",classSelector:"classSelector",name:"name"},Wv={$type:"Service",icon:"icon",iconText:"iconText",id:"id",in:"in",title:"title"},Fq={$type:"Size",height:"height",width:"width"},Qm={$type:"Statement"},rg={$type:"Treemap",accDescr:"accDescr",accTitle:"accTitle",title:"title",TreemapRows:"TreemapRows"};o(BCe,"isTreemap");dt(BCe,"isTreemap");$q={$type:"TreemapRow",indent:"indent",item:"item"},I7={$type:"TreeNode",indent:"indent",name:"name"},Uv={$type:"TreeView",accDescr:"accDescr",accTitle:"accTitle",nodes:"nodes",title:"title"},Ga={$type:"Wardley",accDescr:"accDescr",accelerators:"accelerators",accTitle:"accTitle",anchors:"anchors",annotation:"annotation",annotations:"annotations",components:"components",deaccelerators:"deaccelerators",evolution:"evolution",evolves:"evolves",links:"links",notes:"notes",pipelines:"pipelines",size:"size",title:"title"};o(FCe,"isWardley");dt(FCe,"isWardley");$Ce=class extends sm{static{o(this,"MermaidAstReflection")}constructor(){super(...arguments),this.types={Accelerator:{name:C7.$type,properties:{name:{name:C7.name},x:{name:C7.x},y:{name:C7.y}},superTypes:[]},Anchor:{name:w7.$type,properties:{evolution:{name:w7.evolution},name:{name:w7.name},visibility:{name:w7.visibility}},superTypes:[]},Annotation:{name:vC.$type,properties:{number:{name:vC.number},text:{name:vC.text},x:{name:vC.x},y:{name:vC.y}},superTypes:[]},Annotations:{name:Lq.$type,properties:{x:{name:Lq.x},y:{name:Lq.y}},superTypes:[]},Architecture:{name:ah.$type,properties:{accDescr:{name:ah.accDescr},accTitle:{name:ah.accTitle},edges:{name:ah.edges,defaultValue:[]},groups:{name:ah.groups,defaultValue:[]},junctions:{name:ah.junctions,defaultValue:[]},services:{name:ah.services,defaultValue:[]},title:{name:ah.title}},superTypes:[]},Axis:{name:E7.$type,properties:{label:{name:E7.label},name:{name:E7.name}},superTypes:[]},Branch:{name:kC.$type,properties:{name:{name:kC.name},order:{name:kC.order}},superTypes:[Qm.$type]},Checkout:{name:mCe.$type,properties:{branch:{name:mCe.branch}},superTypes:[Qm.$type]},CherryPicking:{name:S7.$type,properties:{id:{name:S7.id},parent:{name:S7.parent},tags:{name:S7.tags,defaultValue:[]}},superTypes:[Qm.$type]},ClassDefStatement:{name:Rq.$type,properties:{className:{name:Rq.className},styleText:{name:Rq.styleText}},superTypes:[]},Commit:{name:Zm.$type,properties:{id:{name:Zm.id},message:{name:Zm.message},tags:{name:Zm.tags,defaultValue:[]},type:{name:Zm.type}},superTypes:[Qm.$type]},Component:{name:Xm.$type,properties:{decorator:{name:Xm.decorator},evolution:{name:Xm.evolution},inertia:{name:Xm.inertia,defaultValue:!1},label:{name:Xm.label},name:{name:Xm.name},visibility:{name:Xm.visibility}},superTypes:[]},Curve:{name:A7.$type,properties:{entries:{name:A7.entries,defaultValue:[]},label:{name:A7.label},name:{name:A7.name}},superTypes:[]},Deaccelerator:{name:_7.$type,properties:{name:{name:_7.name},x:{name:_7.x},y:{name:_7.y}},superTypes:[]},Decorator:{name:gCe.$type,properties:{strategy:{name:gCe.strategy}},superTypes:[]},Direction:{name:qv.$type,properties:{accDescr:{name:qv.accDescr},accTitle:{name:qv.accTitle},dir:{name:qv.dir},statements:{name:qv.statements,defaultValue:[]},title:{name:qv.title}},superTypes:[Tp.$type]},Edge:{name:nh.$type,properties:{lhsDir:{name:nh.lhsDir},lhsGroup:{name:nh.lhsGroup,defaultValue:!1},lhsId:{name:nh.lhsId},lhsInto:{name:nh.lhsInto,defaultValue:!1},rhsDir:{name:nh.rhsDir},rhsGroup:{name:nh.rhsGroup,defaultValue:!1},rhsId:{name:nh.rhsId},rhsInto:{name:nh.rhsInto,defaultValue:!1},title:{name:nh.title}},superTypes:[]},Entry:{name:Nq.$type,properties:{axis:{name:Nq.axis,referenceType:E7.$type},value:{name:Nq.value}},superTypes:[]},Evolution:{name:yCe.$type,properties:{stages:{name:yCe.stages,defaultValue:[]}},superTypes:[]},EvolutionStage:{name:D7.$type,properties:{boundary:{name:D7.boundary},name:{name:D7.name},secondName:{name:D7.secondName}},superTypes:[]},Evolve:{name:Iq.$type,properties:{component:{name:Iq.component},target:{name:Iq.target}},superTypes:[]},GitGraph:{name:Tp.$type,properties:{accDescr:{name:Tp.accDescr},accTitle:{name:Tp.accTitle},statements:{name:Tp.statements,defaultValue:[]},title:{name:Tp.title}},superTypes:[]},Group:{name:xC.$type,properties:{icon:{name:xC.icon},id:{name:xC.id},in:{name:xC.in},title:{name:xC.title}},superTypes:[]},Info:{name:Hv.$type,properties:{accDescr:{name:Hv.accDescr},accTitle:{name:Hv.accTitle},title:{name:Hv.title}},superTypes:[]},Item:{name:bC.$type,properties:{classSelector:{name:bC.classSelector},name:{name:bC.name}},superTypes:[]},Junction:{name:Mq.$type,properties:{id:{name:Mq.id},in:{name:Mq.in}},superTypes:[]},Label:{name:TC.$type,properties:{negX:{name:TC.negX,defaultValue:!1},negY:{name:TC.negY,defaultValue:!1},offsetX:{name:TC.offsetX},offsetY:{name:TC.offsetY}},superTypes:[]},Leaf:{name:L7.$type,properties:{classSelector:{name:L7.classSelector},name:{name:L7.name},value:{name:L7.value}},superTypes:[bC.$type]},Link:{name:Km.$type,properties:{arrow:{name:Km.arrow},from:{name:Km.from},fromPort:{name:Km.fromPort},linkLabel:{name:Km.linkLabel},to:{name:Km.to},toPort:{name:Km.toPort}},superTypes:[]},Merge:{name:Jm.$type,properties:{branch:{name:Jm.branch},id:{name:Jm.id},tags:{name:Jm.tags,defaultValue:[]},type:{name:Jm.type}},superTypes:[Qm.$type]},Note:{name:R7.$type,properties:{evolution:{name:R7.evolution},text:{name:R7.text},visibility:{name:R7.visibility}},superTypes:[]},Option:{name:Oq.$type,properties:{name:{name:Oq.name},value:{name:Oq.value,defaultValue:!1}},superTypes:[]},Packet:{name:eg.$type,properties:{accDescr:{name:eg.accDescr},accTitle:{name:eg.accTitle},blocks:{name:eg.blocks,defaultValue:[]},title:{name:eg.title}},superTypes:[]},PacketBlock:{name:tg.$type,properties:{bits:{name:tg.bits},end:{name:tg.end},label:{name:tg.label},start:{name:tg.start}},superTypes:[]},Pie:{name:kp.$type,properties:{accDescr:{name:kp.accDescr},accTitle:{name:kp.accTitle},sections:{name:kp.sections,defaultValue:[]},showData:{name:kp.showData,defaultValue:!1},title:{name:kp.title}},superTypes:[]},PieSection:{name:CC.$type,properties:{label:{name:CC.label},value:{name:CC.value}},superTypes:[]},Pipeline:{name:Pq.$type,properties:{components:{name:Pq.components,defaultValue:[]},parent:{name:Pq.parent}},superTypes:[]},PipelineComponent:{name:N7.$type,properties:{evolution:{name:N7.evolution},label:{name:N7.label},name:{name:N7.name}},superTypes:[]},Radar:{name:bp.$type,properties:{accDescr:{name:bp.accDescr},accTitle:{name:bp.accTitle},axes:{name:bp.axes,defaultValue:[]},curves:{name:bp.curves,defaultValue:[]},options:{name:bp.options,defaultValue:[]},title:{name:bp.title}},superTypes:[]},Section:{name:Bq.$type,properties:{classSelector:{name:Bq.classSelector},name:{name:Bq.name}},superTypes:[bC.$type]},Service:{name:Wv.$type,properties:{icon:{name:Wv.icon},iconText:{name:Wv.iconText},id:{name:Wv.id},in:{name:Wv.in},title:{name:Wv.title}},superTypes:[]},Size:{name:Fq.$type,properties:{height:{name:Fq.height},width:{name:Fq.width}},superTypes:[]},Statement:{name:Qm.$type,properties:{},superTypes:[]},TreeNode:{name:I7.$type,properties:{indent:{name:I7.indent},name:{name:I7.name}},superTypes:[]},TreeView:{name:Uv.$type,properties:{accDescr:{name:Uv.accDescr},accTitle:{name:Uv.accTitle},nodes:{name:Uv.nodes,defaultValue:[]},title:{name:Uv.title}},superTypes:[]},Treemap:{name:rg.$type,properties:{accDescr:{name:rg.accDescr},accTitle:{name:rg.accTitle},title:{name:rg.title},TreemapRows:{name:rg.TreemapRows,defaultValue:[]}},superTypes:[]},TreemapRow:{name:$q.$type,properties:{indent:{name:$q.indent},item:{name:$q.item}},superTypes:[]},Wardley:{name:Ga.$type,properties:{accDescr:{name:Ga.accDescr},accelerators:{name:Ga.accelerators,defaultValue:[]},accTitle:{name:Ga.accTitle},anchors:{name:Ga.anchors,defaultValue:[]},annotation:{name:Ga.annotation,defaultValue:[]},annotations:{name:Ga.annotations,defaultValue:[]},components:{name:Ga.components,defaultValue:[]},deaccelerators:{name:Ga.deaccelerators,defaultValue:[]},evolution:{name:Ga.evolution},evolves:{name:Ga.evolves,defaultValue:[]},links:{name:Ga.links,defaultValue:[]},notes:{name:Ga.notes,defaultValue:[]},pipelines:{name:Ga.pipelines,defaultValue:[]},size:{name:Ga.size},title:{name:Ga.title}},superTypes:[]}}}static{dt(this,"MermaidAstReflection")}},ec=new $Ce,zot=dt(()=>vCe??(vCe=Jl(`{"$type":"Grammar","isDeclared":true,"name":"ArchitectureGrammar","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Architecture","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"architecture-beta"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}],"cardinality":"*"}]},"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"Statement","definition":{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"groups","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"services","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}},{"$type":"Assignment","feature":"junctions","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Assignment","feature":"edges","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}}]},"entry":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"LeftPort","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"lhsDir","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]},"entry":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"RightPort","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"rhsDir","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}},{"$type":"Keyword","value":":"}]},"entry":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"Arrow","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]},{"$type":"Assignment","feature":"lhsInto","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"--"},{"$type":"Group","elements":[{"$type":"Keyword","value":"-"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@29"},"arguments":[]}},{"$type":"Keyword","value":"-"}]}]},{"$type":"Assignment","feature":"rhsInto","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}]},"entry":false,"parameters":[]},{"$type":"ParserRule","name":"Group","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"group"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Assignment","feature":"icon","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@28"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@29"},"arguments":[]},"cardinality":"?"},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Service","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"service"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"iconText","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]}},{"$type":"Assignment","feature":"icon","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@28"},"arguments":[]}}],"cardinality":"?"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@29"},"arguments":[]},"cardinality":"?"},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Junction","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"junction"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Edge","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"lhsId","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Assignment","feature":"lhsGroup","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Assignment","feature":"rhsId","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Assignment","feature":"rhsGroup","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"TerminalRule","name":"ARROW_DIRECTION","definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"L"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"R"},"parenthesized":false}],"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"T"},"parenthesized":false}],"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"B"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARROW_GROUP","definition":{"$type":"RegexToken","regex":"/\\\\{group\\\\}/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARROW_INTO","definition":{"$type":"RegexToken","regex":"/<|>/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"ParserRule","name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}],"cardinality":"+"},"entry":false,"parameters":[]},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@18"},"parenthesized":false},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@19"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","name":"ARCH_ICON","definition":{"$type":"RegexToken","regex":"/\\\\([\\\\w-:]+\\\\)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_TITLE","definition":{"$type":"RegexToken","regex":"/\\\\[(?:\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'|[\\\\w ]+)\\\\]/","parenthesized":false},"fragment":false,"hidden":false}],"interfaces":[],"types":[]}`)),"ArchitectureGrammarGrammar"),Got=dt(()=>xCe??(xCe=Jl(`{"$type":"Grammar","isDeclared":true,"name":"GitGraphGrammar","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"GitGraph","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"Group","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"Keyword","value":":"}]},{"$type":"Keyword","value":"gitGraph:"},{"$type":"Group","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]},{"$type":"Keyword","value":":"}]}]},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]},{"$type":"Assignment","feature":"statements","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}}],"cardinality":"*"}]},"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Statement","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Direction","definition":{"$type":"Assignment","feature":"dir","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"LR"},{"$type":"Keyword","value":"TB"},{"$type":"Keyword","value":"BT"}]}},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Commit","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"commit"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"msg:","cardinality":"?"},{"$type":"Assignment","feature":"message","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"type:"},{"$type":"Assignment","feature":"type","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"NORMAL"},{"$type":"Keyword","value":"REVERSE"},{"$type":"Keyword","value":"HIGHLIGHT"}]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Branch","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"branch"},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@24"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"order:"},{"$type":"Assignment","feature":"order","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Merge","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"merge"},{"$type":"Assignment","feature":"branch","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@24"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]}},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"type:"},{"$type":"Assignment","feature":"type","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"NORMAL"},{"$type":"Keyword","value":"REVERSE"},{"$type":"Keyword","value":"HIGHLIGHT"}]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Checkout","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"checkout"},{"$type":"Keyword","value":"switch"}]},{"$type":"Assignment","feature":"branch","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@24"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"CherryPicking","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"cherry-pick"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"parent:"},{"$type":"Assignment","feature":"parent","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}],"cardinality":"+"},"entry":false,"parameters":[]},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@14"},"parenthesized":false},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@15"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","name":"REFERENCE","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\\\w([-\\\\./\\\\w]*[-\\\\w])?/","parenthesized":false},"fragment":false,"hidden":false}],"interfaces":[],"types":[]}`)),"GitGraphGrammarGrammar"),Vot=dt(()=>bCe??(bCe=Jl(`{"$type":"Grammar","isDeclared":true,"name":"InfoGrammar","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Info","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"info"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[],"cardinality":"*"},{"$type":"Group","elements":[{"$type":"Keyword","value":"showInfo"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[],"cardinality":"*"}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"?"}]},"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}],"cardinality":"+"},"entry":false,"parameters":[]},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@7"},"parenthesized":false},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@8"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/","parenthesized":false},"fragment":false}],"interfaces":[],"types":[]}`)),"InfoGrammarGrammar"),qot=dt(()=>TCe??(TCe=Jl(`{"$type":"Grammar","isDeclared":true,"name":"PacketGrammar","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Packet","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"packet"},{"$type":"Keyword","value":"packet-beta"}]},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]},{"$type":"Assignment","feature":"blocks","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}],"cardinality":"*"}]},"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"PacketBlock","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Assignment","feature":"start","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"-"},{"$type":"Assignment","feature":"end","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}],"cardinality":"?"}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"+"},{"$type":"Assignment","feature":"bits","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]}]},{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}],"cardinality":"+"},"entry":false,"parameters":[]},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@8"},"parenthesized":false},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@9"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/","parenthesized":false},"fragment":false}],"interfaces":[],"types":[]}`)),"PacketGrammarGrammar"),Wot=dt(()=>kCe??(kCe=Jl(`{"$type":"Grammar","isDeclared":true,"name":"PieGrammar","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Pie","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"pie"},{"$type":"Assignment","feature":"showData","operator":"?=","terminal":{"$type":"Keyword","value":"showData"},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]},{"$type":"Assignment","feature":"sections","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}],"cardinality":"*"}]},"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"PieSection","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]}},{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"TerminalRule","name":"FLOAT_PIE","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/-?[0-9]+\\\\.[0-9]+(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT_PIE","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/-?(0|[1-9][0-9]*)(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER_PIE","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@2"},"parenthesized":false},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@3"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"ParserRule","name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}],"cardinality":"+"},"entry":false,"parameters":[]},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@11"},"parenthesized":false},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@12"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/","parenthesized":false},"fragment":false}],"interfaces":[],"types":[]}`)),"PieGrammarGrammar"),Uot=dt(()=>CCe??(CCe=Jl(`{"$type":"Grammar","isDeclared":true,"name":"RadarGrammar","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Radar","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"radar-beta"},{"$type":"Keyword","value":"radar-beta:"},{"$type":"Group","elements":[{"$type":"Keyword","value":"radar-beta"},{"$type":"Keyword","value":":"}]}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]},{"$type":"Group","elements":[{"$type":"Keyword","value":"axis"},{"$type":"Assignment","feature":"axes","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"axes","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}}],"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"curve"},{"$type":"Assignment","feature":"curves","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"curves","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}}],"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"options","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"options","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}}],"cardinality":"*"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}],"cardinality":"*"}]},"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"Label","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}},{"$type":"Keyword","value":"]"}]},"entry":false,"parameters":[]},{"$type":"ParserRule","name":"Axis","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[],"cardinality":"?"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Curve","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[],"cardinality":"?"},{"$type":"Keyword","value":"{"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Keyword","value":"}"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"Entries","definition":{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"}]}]},"entry":false,"parameters":[]},{"$type":"ParserRule","name":"DetailedEntry","returnType":{"$ref":"#/interfaces@0"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"axis","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@2"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},"deprecatedSyntax":false,"isMulti":false}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"NumberEntry","returnType":{"$ref":"#/interfaces@0"},"definition":{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Option","definition":{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"showLegend"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"ticks"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"max"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"min"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"graticule"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}}]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"TerminalRule","name":"GRATICULE","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"circle"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"polygon"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"ParserRule","name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}],"cardinality":"+"},"entry":false,"parameters":[]},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@15"},"parenthesized":false},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@16"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/","parenthesized":false},"fragment":false}],"interfaces":[{"$type":"Interface","name":"Entry","attributes":[{"$type":"TypeAttribute","name":"axis","isOptional":true,"type":{"$type":"ReferenceType","referenceType":{"$type":"SimpleType","typeRef":{"$ref":"#/rules@2"}},"isMulti":false}},{"$type":"TypeAttribute","name":"value","type":{"$type":"SimpleType","primitiveType":"number"},"isOptional":false}],"superTypes":[]}],"types":[]}`)),"RadarGrammarGrammar"),Hot=dt(()=>wCe??(wCe=Jl(`{"$type":"Grammar","isDeclared":true,"name":"TreemapGrammar","rules":[{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}}],"cardinality":"+"},"entry":false,"parameters":[]},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"ParserRule","entry":true,"name":"Treemap","returnType":{"$ref":"#/interfaces@4"},"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@0"},"arguments":[]},{"$type":"Assignment","feature":"TreemapRows","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]}}],"cardinality":"*"}]},"fragment":false,"parameters":[]},{"$type":"TerminalRule","name":"TREEMAP_KEYWORD","definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"treemap-beta"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"treemap"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"CLASS_DEF","definition":{"$type":"RegexToken","regex":"/classDef\\\\s+([a-zA-Z_][a-zA-Z0-9_]+)(?:\\\\s+([^;\\\\r\\\\n]*))?(?:;)?/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STYLE_SEPARATOR","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":":::"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"SEPARATOR","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":":"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"COMMA","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":","},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INDENTATION","definition":{"$type":"RegexToken","regex":"/[ \\\\t]{1,}/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WS","definition":{"$type":"RegexToken","regex":"/[ \\\\t]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"ML_COMMENT","definition":{"$type":"RegexToken","regex":"/\\\\%\\\\%[^\\\\n]*/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"NL","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/","parenthesized":false},"fragment":false},{"$type":"ParserRule","name":"TreemapRow","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"indent","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"item","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"ClassDef","dataType":"string","definition":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Item","returnType":{"$ref":"#/interfaces@0"},"definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Section","returnType":{"$ref":"#/interfaces@1"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]},{"$type":"Assignment","feature":"classSelector","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}],"cardinality":"?"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Leaf","returnType":{"$ref":"#/interfaces@2"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[],"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[],"cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]},{"$type":"Assignment","feature":"classSelector","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}],"cardinality":"?"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"TerminalRule","name":"ID2","definition":{"$type":"RegexToken","regex":"/[a-zA-Z_][a-zA-Z0-9_]*/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER2","definition":{"$type":"RegexToken","regex":"/[0-9_\\\\.\\\\,]+/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"ParserRule","name":"MyNumber","dataType":"number","definition":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]},"entry":false,"fragment":false,"parameters":[]},{"$type":"TerminalRule","name":"STRING2","definition":{"$type":"RegexToken","regex":"/\\"[^\\"]*\\"|'[^']*'/","parenthesized":false},"fragment":false,"hidden":false}],"interfaces":[{"$type":"Interface","name":"Item","attributes":[{"$type":"TypeAttribute","name":"name","type":{"$type":"SimpleType","primitiveType":"string"},"isOptional":false},{"$type":"TypeAttribute","name":"classSelector","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]},{"$type":"Interface","name":"Section","superTypes":[{"$ref":"#/interfaces@0"}],"attributes":[]},{"$type":"Interface","name":"Leaf","superTypes":[{"$ref":"#/interfaces@0"}],"attributes":[{"$type":"TypeAttribute","name":"value","type":{"$type":"SimpleType","primitiveType":"number"},"isOptional":false}]},{"$type":"Interface","name":"ClassDefStatement","attributes":[{"$type":"TypeAttribute","name":"className","type":{"$type":"SimpleType","primitiveType":"string"},"isOptional":false},{"$type":"TypeAttribute","name":"styleText","type":{"$type":"SimpleType","primitiveType":"string"},"isOptional":false}],"superTypes":[]},{"$type":"Interface","name":"Treemap","attributes":[{"$type":"TypeAttribute","name":"TreemapRows","type":{"$type":"ArrayType","elementType":{"$type":"SimpleType","typeRef":{"$ref":"#/rules@15"}}},"isOptional":false},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"imports":[],"types":[],"$comment":"/**\\n * Treemap grammar for Langium\\n * Converted from mindmap grammar\\n *\\n * The ML_COMMENT and NL hidden terminals handle whitespace, comments, and newlines\\n * before the treemap keyword, allowing for empty lines and comments before the\\n * treemap declaration.\\n */"}`)),"TreemapGrammarGrammar"),Yot=dt(()=>ECe??(ECe=Jl(`{"$type":"Grammar","isDeclared":true,"name":"TreeViewGrammar","rules":[{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"ParserRule","entry":true,"name":"TreeView","returnType":{"$ref":"#/interfaces@0"},"definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"treeView-beta"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[],"cardinality":"?"},{"$type":"Assignment","feature":"nodes","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]},"cardinality":"*"}]},"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@0"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}}],"cardinality":"+"},"entry":false,"parameters":[]},{"$type":"TerminalRule","name":"INDENTATION","definition":{"$type":"RegexToken","regex":"/[ \\\\t]{1,}/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WS","definition":{"$type":"RegexToken","regex":"/[ \\\\t]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"ML_COMMENT","definition":{"$type":"RegexToken","regex":"/\\\\%\\\\%[^\\\\n]*/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"NL","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/","parenthesized":false},"fragment":false},{"$type":"ParserRule","name":"TreeNode","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"indent","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"TerminalRule","name":"STRING2","definition":{"$type":"RegexToken","regex":"/\\"[^\\"]*\\"|'[^']*'/","parenthesized":false},"fragment":false,"hidden":false}],"interfaces":[{"$type":"Interface","name":"TreeView","attributes":[{"$type":"TypeAttribute","name":"nodes","type":{"$type":"ArrayType","elementType":{"$type":"SimpleType","typeRef":{"$ref":"#/rules@9"}}},"isOptional":false},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"imports":[],"types":[],"$comment":"/**\\n * TreeView grammar for Langium\\n * Converted from treemap grammar\\n *\\n * The ML_COMMENT and NL hidden terminals handle whitespace, comments, and newlines\\n * before the treemap keyword, allowing for empty lines and comments before the\\n * treeView declaration.\\n */"}`)),"TreeViewGrammarGrammar"),jot=dt(()=>SCe??(SCe=Jl(`{"$type":"Grammar","isDeclared":true,"name":"WardleyGrammar","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Wardley","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@52"},"arguments":[],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@25"},"arguments":[]},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@52"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@42"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}],"cardinality":"*"}]},"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"Statement","definition":{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"size","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}},{"$type":"Assignment","feature":"evolution","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"Assignment","feature":"anchors","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"components","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}},{"$type":"Assignment","feature":"links","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}},{"$type":"Assignment","feature":"evolves","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Assignment","feature":"pipelines","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}},{"$type":"Assignment","feature":"notes","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}},{"$type":"Assignment","feature":"annotations","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]}},{"$type":"Assignment","feature":"annotation","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]}},{"$type":"Assignment","feature":"accelerators","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}},{"$type":"Assignment","feature":"deaccelerators","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}}]},"entry":false,"parameters":[]},{"$type":"ParserRule","name":"Size","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@26"},"arguments":[]},{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"width","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@48"},"arguments":[]}},{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"height","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@48"},"arguments":[]}},{"$type":"Keyword","value":"]"},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Evolution","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@27"},"arguments":[]},{"$type":"Assignment","feature":"stages","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]},{"$type":"Assignment","feature":"stages","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}}],"cardinality":"+"},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"EvolutionStage","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@51"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"@"},{"$type":"Assignment","feature":"boundary","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}}],"cardinality":"?"},{"$type":"Group","elements":[{"$type":"Keyword","value":"/"},{"$type":"Assignment","feature":"secondName","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@51"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]}}],"cardinality":"?"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Anchor","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@28"},"arguments":[]},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@51"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]}},{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"visibility","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"evolution","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Keyword","value":"]"},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Component","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@29"},"arguments":[]},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@51"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]}},{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"visibility","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"evolution","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Keyword","value":"]"},{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"decorator","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"inertia","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@31"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"("},{"$type":"Assignment","feature":"inertia","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@31"},"arguments":[]}},{"$type":"Keyword","value":")"}]}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Label","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@30"},"arguments":[]},{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"negX","operator":"?=","terminal":{"$type":"Keyword","value":"-"},"cardinality":"?"},{"$type":"Assignment","feature":"offsetX","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@48"},"arguments":[]}},{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"negY","operator":"?=","terminal":{"$type":"Keyword","value":"-"},"cardinality":"?"},{"$type":"Assignment","feature":"offsetY","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@48"},"arguments":[]}},{"$type":"Keyword","value":"]"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Decorator","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"("},{"$type":"Assignment","feature":"strategy","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@24"},"arguments":[]}},{"$type":"Keyword","value":")"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Link","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"from","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@51"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]}},{"$type":"Assignment","feature":"fromPort","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"arrow","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}]},"cardinality":"?"},{"$type":"Assignment","feature":"to","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@51"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]}},{"$type":"Assignment","feature":"toPort","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"linkLabel","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Evolve","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@32"},"arguments":[]},{"$type":"Assignment","feature":"component","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@51"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]}},{"$type":"Assignment","feature":"target","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Pipeline","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@33"},"arguments":[]},{"$type":"Assignment","feature":"parent","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@51"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]}},{"$type":"Keyword","value":"{"},{"$type":"RuleCall","rule":{"$ref":"#/rules@52"},"arguments":[],"cardinality":"+"},{"$type":"Assignment","feature":"components","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]},"cardinality":"+"},{"$type":"Keyword","value":"}"},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"PipelineComponent","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@29"},"arguments":[]},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@51"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]}},{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"evolution","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Keyword","value":"]"},{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Note","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@34"},"arguments":[]},{"$type":"Assignment","feature":"text","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]}},{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"visibility","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"evolution","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Keyword","value":"]"},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Annotations","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@35"},"arguments":[]},{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"x","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}},{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"y","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}},{"$type":"Keyword","value":"]"},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Annotation","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@36"},"arguments":[]},{"$type":"Assignment","feature":"number","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@48"},"arguments":[]}},{"$type":"Keyword","value":","},{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"x","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}},{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"y","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}},{"$type":"Keyword","value":"]"},{"$type":"Assignment","feature":"text","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"CoordinateValue","dataType":"number","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@48"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Accelerator","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@37"},"arguments":[]},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@51"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]}},{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"x","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"y","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Keyword","value":"]"},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","name":"Deaccelerator","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@38"},"arguments":[]},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@51"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]}},{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"x","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"y","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Keyword","value":"]"},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"TerminalRule","name":"WARDLEY_NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARROW","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"->"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"LINK_PORT","definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"+<>"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"+>"},"parenthesized":false}],"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"+<"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"LINK_ARROW","definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"-->"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"-.->"},"parenthesized":false}],"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":">"},"parenthesized":false}],"parenthesized":false},{"$type":"RegexToken","regex":"/\\\\+'[^']*'<>/","parenthesized":false}],"parenthesized":false},{"$type":"RegexToken","regex":"/\\\\+'[^']*'/","parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"LINK_LABEL","definition":{"$type":"RegexToken","regex":"/;[^\\\\n\\\\r]+/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRATEGY","definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"build"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"buy"},"parenthesized":false}],"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"outsource"},"parenthesized":false}],"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"market"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_WARDLEY","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"wardley-beta"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_SIZE","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"size"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_EVOLUTION","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"evolution"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_ANCHOR","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"anchor"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_COMPONENT","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"component"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_LABEL","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"label"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_INERTIA","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"inertia"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_EVOLVE","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"evolve"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_PIPELINE","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"pipeline"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_NOTE","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"note"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_ANNOTATIONS","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"annotations"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_ANNOTATION","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"annotation"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_ACCELERATOR","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"accelerator"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"KW_DEACCELERATOR","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"deaccelerator"},"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NAME_WITH_SPACES","definition":{"$type":"RegexToken","regex":"/(?!title\\\\s|accTitle|accDescr)[A-Za-z][A-Za-z0-9_()&]*(?:[ \\\\t]+[A-Za-z(][A-Za-z0-9_()&]*)*/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WS","definition":{"$type":"RegexToken","regex":"/[ \\\\t]+/","parenthesized":false},"fragment":false},{"$type":"ParserRule","name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@52"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"entry":false,"fragment":false,"parameters":[]},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@44"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@45"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@46"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]}],"cardinality":"+"},"entry":false,"parameters":[]},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"},"parenthesized":false},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@47"},"parenthesized":false},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@48"},"parenthesized":false}],"parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/","parenthesized":false},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/","parenthesized":false},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/","parenthesized":false},"fragment":false}],"interfaces":[],"types":[]}`)),"WardleyGrammarGrammar"),Xot={languageId:"architecture",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},Kot={languageId:"gitGraph",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},Qot={languageId:"info",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},Zot={languageId:"packet",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},Jot={languageId:"pie",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},elt={languageId:"radar",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},tlt={languageId:"treemap",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},rlt={languageId:"treeView",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},ilt={languageId:"wardley",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},xa={AstReflection:dt(()=>new $Ce,"AstReflection")},Xq={Grammar:dt(()=>zot(),"Grammar"),LanguageMetaData:dt(()=>Xot,"LanguageMetaData"),parser:{}},Kq={Grammar:dt(()=>Got(),"Grammar"),LanguageMetaData:dt(()=>Kot,"LanguageMetaData"),parser:{}},Qq={Grammar:dt(()=>Vot(),"Grammar"),LanguageMetaData:dt(()=>Qot,"LanguageMetaData"),parser:{}},Zq={Grammar:dt(()=>qot(),"Grammar"),LanguageMetaData:dt(()=>Zot,"LanguageMetaData"),parser:{}},Jq={Grammar:dt(()=>Wot(),"Grammar"),LanguageMetaData:dt(()=>Jot,"LanguageMetaData"),parser:{}},eW={Grammar:dt(()=>Uot(),"Grammar"),LanguageMetaData:dt(()=>elt,"LanguageMetaData"),parser:{}},tW={Grammar:dt(()=>Hot(),"Grammar"),LanguageMetaData:dt(()=>tlt,"LanguageMetaData"),parser:{}},rW={Grammar:dt(()=>Yot(),"Grammar"),LanguageMetaData:dt(()=>rlt,"LanguageMetaData"),parser:{}},iW={Grammar:dt(()=>jot(),"Grammar"),LanguageMetaData:dt(()=>ilt,"LanguageMetaData"),parser:{}},nlt=/accDescr(?:[\t ]*:([^\n\r]*)|\s*{([^}]*)})/,alt=/accTitle[\t ]*:([^\n\r]*)/,slt=/title([\t ][^\n\r]*|)/,olt={ACC_DESCR:nlt,ACC_TITLE:alt,TITLE:slt},tc=class extends Fm{static{o(this,"AbstractMermaidValueConverter")}static{dt(this,"AbstractMermaidValueConverter")}runConverter(t,e,r){let i=this.runCommonConverter(t,e,r);return i===void 0&&(i=this.runCustomConverter(t,e,r)),i===void 0?super.runConverter(t,e,r):i}runCommonConverter(t,e,r){let i=olt[t.name];if(i===void 0)return;let n=i.exec(e);if(n!==null){if(n[1]!==void 0)return n[1].trim().replace(/[\t ]{2,}/gm," ");if(n[2]!==void 0)return n[2].replace(/^\s*/gm,"").replace(/\s+$/gm,"").replace(/[\t ]{2,}/gm," ").replace(/[\n\r]{2,}/gm,` +`)}}},yf=class extends tc{static{o(this,"CommonValueConverter")}static{dt(this,"CommonValueConverter")}runCustomConverter(t,e,r){}},Va=class extends mf{static{o(this,"AbstractMermaidTokenBuilder")}static{dt(this,"AbstractMermaidTokenBuilder")}constructor(t){super(),this.keywords=new Set(t)}buildKeywordTokens(t,e,r){let i=super.buildKeywordTokens(t,e,r);return i.forEach(n=>{this.keywords.has(n.name)&&n.PATTERN!==void 0&&(n.PATTERN=new RegExp(n.PATTERN.toString()+"(?:(?=%%)|(?!\\S))"))}),i}},llt=class extends Va{static{o(this,"CommonTokenBuilder")}static{dt(this,"CommonTokenBuilder")}}});function zCe(t){let e=t.validation.TreemapValidator,r=t.validation.ValidationRegistry;if(r){let i={Treemap:e.checkSingleRoot.bind(e)};r.register(i,e)}}function O7(t=Un){let e=ki(Wn(t),xa),r=ki(qn({shared:e}),tW,M7);return e.ServiceRegistry.register(r),zCe(r),{shared:e,Treemap:r}}var clt,ult,hlt,flt,M7,nW=P(()=>{"use strict";ia();to();clt=class extends Va{static{o(this,"TreemapTokenBuilder")}static{dt(this,"TreemapTokenBuilder")}constructor(){super(["treemap"])}},ult=/classDef\s+([A-Z_a-z]\w+)(?:\s+([^\n\r;]*))?;?/,hlt=class extends tc{static{o(this,"TreemapValueConverter")}static{dt(this,"TreemapValueConverter")}runCustomConverter(t,e,r){if(t.name==="NUMBER2")return parseFloat(e.replace(/,/g,""));if(t.name==="SEPARATOR")return e.substring(1,e.length-1);if(t.name==="STRING2")return e.substring(1,e.length-1);if(t.name==="INDENTATION")return e.length;if(t.name==="ClassDef"){if(typeof e!="string")return e;let i=ult.exec(e);if(i)return{$type:"ClassDefStatement",className:i[1],styleText:i[2]||void 0}}}};o(zCe,"registerValidationChecks");dt(zCe,"registerValidationChecks");flt=class{static{o(this,"TreemapValidator")}static{dt(this,"TreemapValidator")}checkSingleRoot(t,e){let r;for(let i of t.TreemapRows)i.item&&(r===void 0&&i.indent===void 0?r=0:i.indent===void 0?e("error","Multiple root nodes are not allowed in a treemap.",{node:i,property:"item"}):r!==void 0&&r>=parseInt(i.indent,10)&&e("error","Multiple root nodes are not allowed in a treemap.",{node:i,property:"item"}))}},M7={parser:{TokenBuilder:dt(()=>new clt,"TokenBuilder"),ValueConverter:dt(()=>new hlt,"ValueConverter")},validation:{TreemapValidator:dt(()=>new flt,"TreemapValidator")}};o(O7,"createTreemapServices");dt(O7,"createTreemapServices")});function B7(t=Un){let e=ki(Wn(t),xa),r=ki(qn({shared:e}),iW,P7);return e.ServiceRegistry.register(r),{shared:e,Wardley:r}}var dlt,P7,aW=P(()=>{"use strict";ia();to();dlt=class extends tc{static{o(this,"WardleyValueConverter")}static{dt(this,"WardleyValueConverter")}runCustomConverter(t,e,r){switch(t.name.toUpperCase()){case"LINK_LABEL":return e.substring(1).trim();default:return}}},P7={parser:{ValueConverter:dt(()=>new dlt,"ValueConverter")}};o(B7,"createWardleyServices");dt(B7,"createWardleyServices")});function $7(t=Un){let e=ki(Wn(t),xa),r=ki(qn({shared:e}),Kq,F7);return e.ServiceRegistry.register(r),{shared:e,GitGraph:r}}var plt,F7,sW=P(()=>{"use strict";ia();to();plt=class extends Va{static{o(this,"GitGraphTokenBuilder")}static{dt(this,"GitGraphTokenBuilder")}constructor(){super(["gitGraph"])}},F7={parser:{TokenBuilder:dt(()=>new plt,"TokenBuilder"),ValueConverter:dt(()=>new yf,"ValueConverter")}};o($7,"createGitGraphServices");dt($7,"createGitGraphServices")});function G7(t=Un){let e=ki(Wn(t),xa),r=ki(qn({shared:e}),Qq,z7);return e.ServiceRegistry.register(r),{shared:e,Info:r}}var mlt,z7,oW=P(()=>{"use strict";ia();to();mlt=class extends Va{static{o(this,"InfoTokenBuilder")}static{dt(this,"InfoTokenBuilder")}constructor(){super(["info","showInfo"])}},z7={parser:{TokenBuilder:dt(()=>new mlt,"TokenBuilder"),ValueConverter:dt(()=>new yf,"ValueConverter")}};o(G7,"createInfoServices");dt(G7,"createInfoServices")});function q7(t=Un){let e=ki(Wn(t),xa),r=ki(qn({shared:e}),Zq,V7);return e.ServiceRegistry.register(r),{shared:e,Packet:r}}var glt,V7,lW=P(()=>{"use strict";ia();to();glt=class extends Va{static{o(this,"PacketTokenBuilder")}static{dt(this,"PacketTokenBuilder")}constructor(){super(["packet"])}},V7={parser:{TokenBuilder:dt(()=>new glt,"TokenBuilder"),ValueConverter:dt(()=>new yf,"ValueConverter")}};o(q7,"createPacketServices");dt(q7,"createPacketServices")});function U7(t=Un){let e=ki(Wn(t),xa),r=ki(qn({shared:e}),Jq,W7);return e.ServiceRegistry.register(r),{shared:e,Pie:r}}var ylt,vlt,W7,cW=P(()=>{"use strict";ia();to();ylt=class extends Va{static{o(this,"PieTokenBuilder")}static{dt(this,"PieTokenBuilder")}constructor(){super(["pie","showData"])}},vlt=class extends tc{static{o(this,"PieValueConverter")}static{dt(this,"PieValueConverter")}runCustomConverter(t,e,r){if(t.name==="PIE_SECTION_LABEL")return e.replace(/"/g,"").trim()}},W7={parser:{TokenBuilder:dt(()=>new ylt,"TokenBuilder"),ValueConverter:dt(()=>new vlt,"ValueConverter")}};o(U7,"createPieServices");dt(U7,"createPieServices")});function Y7(t=Un){let e=ki(Wn(t),xa),r=ki(qn({shared:e}),rW,H7);return e.ServiceRegistry.register(r),{shared:e,TreeView:r}}var xlt,blt,H7,uW=P(()=>{"use strict";ia();to();xlt=class extends tc{static{o(this,"TreeViewValueConverter")}static{dt(this,"TreeViewValueConverter")}runCustomConverter(t,e,r){if(t.name==="INDENTATION")return e?.length||0;if(t.name==="STRING2")return e.substring(1,e.length-1)}},blt=class extends Va{static{o(this,"TreeViewTokenBuilder")}static{dt(this,"TreeViewTokenBuilder")}constructor(){super(["treeView-beta"])}},H7={parser:{TokenBuilder:dt(()=>new blt,"TokenBuilder"),ValueConverter:dt(()=>new xlt,"ValueConverter")}};o(Y7,"createTreeViewServices");dt(Y7,"createTreeViewServices")});function X7(t=Un){let e=ki(Wn(t),xa),r=ki(qn({shared:e}),Xq,j7);return e.ServiceRegistry.register(r),{shared:e,Architecture:r}}var Tlt,klt,j7,hW=P(()=>{"use strict";ia();to();Tlt=class extends Va{static{o(this,"ArchitectureTokenBuilder")}static{dt(this,"ArchitectureTokenBuilder")}constructor(){super(["architecture"])}},klt=class extends tc{static{o(this,"ArchitectureValueConverter")}static{dt(this,"ArchitectureValueConverter")}runCustomConverter(t,e,r){if(t.name==="ARCH_ICON")return e.replace(/[()]/g,"").trim();if(t.name==="ARCH_TEXT_ICON")return e.replace(/["()]/g,"");if(t.name==="ARCH_TITLE"){let i=e.replace(/^\[|]$/g,"").trim();return(i.startsWith('"')&&i.endsWith('"')||i.startsWith("'")&&i.endsWith("'"))&&(i=i.slice(1,-1),i=i.replace(/\\"/g,'"').replace(/\\'/g,"'")),i.trim()}}},j7={parser:{TokenBuilder:dt(()=>new Tlt,"TokenBuilder"),ValueConverter:dt(()=>new klt,"ValueConverter")}};o(X7,"createArchitectureServices");dt(X7,"createArchitectureServices")});function Q7(t=Un){let e=ki(Wn(t),xa),r=ki(qn({shared:e}),eW,K7);return e.ServiceRegistry.register(r),{shared:e,Radar:r}}var Clt,K7,fW=P(()=>{"use strict";ia();to();Clt=class extends Va{static{o(this,"RadarTokenBuilder")}static{dt(this,"RadarTokenBuilder")}constructor(){super(["radar-beta"])}},K7={parser:{TokenBuilder:dt(()=>new Clt,"TokenBuilder"),ValueConverter:dt(()=>new yf,"ValueConverter")}};o(Q7,"createRadarServices");dt(Q7,"createRadarServices")});var GCe={};ur(GCe,{InfoModule:()=>z7,createInfoServices:()=>G7});var VCe=P(()=>{"use strict";oW();ia()});var qCe={};ur(qCe,{PacketModule:()=>V7,createPacketServices:()=>q7});var WCe=P(()=>{"use strict";lW();ia()});var UCe={};ur(UCe,{PieModule:()=>W7,createPieServices:()=>U7});var HCe=P(()=>{"use strict";cW();ia()});var YCe={};ur(YCe,{TreeViewModule:()=>H7,createTreeViewServices:()=>Y7});var jCe=P(()=>{"use strict";uW();ia()});var XCe={};ur(XCe,{ArchitectureModule:()=>j7,createArchitectureServices:()=>X7});var KCe=P(()=>{"use strict";hW();ia()});var QCe={};ur(QCe,{GitGraphModule:()=>F7,createGitGraphServices:()=>$7});var ZCe=P(()=>{"use strict";sW();ia()});var JCe={};ur(JCe,{RadarModule:()=>K7,createRadarServices:()=>Q7});var e4e=P(()=>{"use strict";fW();ia()});var t4e={};ur(t4e,{TreemapModule:()=>M7,createTreemapServices:()=>O7});var r4e=P(()=>{"use strict";nW();ia()});var i4e={};ur(i4e,{WardleyModule:()=>P7,createWardleyServices:()=>B7});var n4e=P(()=>{"use strict";aW();ia()});async function ba(t,e){let r=wlt[t];if(!r)throw new Error(`Unknown diagram type: ${t}`);Yc[t]||await r();let n=Yc[t].parse(e);if(n.lexerErrors.length>0||n.parserErrors.length>0)throw new Elt(n);return n.value}var Yc,wlt,Elt,sh=P(()=>{"use strict";nW();aW();sW();oW();lW();cW();uW();hW();fW();ia();Yc={},wlt={info:dt(async()=>{let{createInfoServices:t}=await Promise.resolve().then(()=>(VCe(),GCe)),e=t().Info.parser.LangiumParser;Yc.info=e},"info"),packet:dt(async()=>{let{createPacketServices:t}=await Promise.resolve().then(()=>(WCe(),qCe)),e=t().Packet.parser.LangiumParser;Yc.packet=e},"packet"),pie:dt(async()=>{let{createPieServices:t}=await Promise.resolve().then(()=>(HCe(),UCe)),e=t().Pie.parser.LangiumParser;Yc.pie=e},"pie"),treeView:dt(async()=>{let{createTreeViewServices:t}=await Promise.resolve().then(()=>(jCe(),YCe)),e=t().TreeView.parser.LangiumParser;Yc.treeView=e},"treeView"),architecture:dt(async()=>{let{createArchitectureServices:t}=await Promise.resolve().then(()=>(KCe(),XCe)),e=t().Architecture.parser.LangiumParser;Yc.architecture=e},"architecture"),gitGraph:dt(async()=>{let{createGitGraphServices:t}=await Promise.resolve().then(()=>(ZCe(),QCe)),e=t().GitGraph.parser.LangiumParser;Yc.gitGraph=e},"gitGraph"),radar:dt(async()=>{let{createRadarServices:t}=await Promise.resolve().then(()=>(e4e(),JCe)),e=t().Radar.parser.LangiumParser;Yc.radar=e},"radar"),treemap:dt(async()=>{let{createTreemapServices:t}=await Promise.resolve().then(()=>(r4e(),t4e)),e=t().Treemap.parser.LangiumParser;Yc.treemap=e},"treemap"),wardley:dt(async()=>{let{createWardleyServices:t}=await Promise.resolve().then(()=>(n4e(),i4e)),e=t().Wardley.parser.LangiumParser;Yc.wardley=e},"wardley")};o(ba,"parse");dt(ba,"parse");Elt=class extends Error{static{o(this,"MermaidParseError")}constructor(t){let e=t.lexerErrors.map(i=>{let n=i.line!==void 0&&!isNaN(i.line)?i.line:"?",a=i.column!==void 0&&!isNaN(i.column)?i.column:"?";return`Lexer error on line ${n}, column ${a}: ${i.message}`}).join(` +`),r=t.parserErrors.map(i=>{let n=i.token.startLine!==void 0&&!isNaN(i.token.startLine)?i.token.startLine:"?",a=i.token.startColumn!==void 0&&!isNaN(i.token.startColumn)?i.token.startColumn:"?";return`Parse error on line ${n}, column ${a}: ${i.message}`}).join(` +`);super(`Parsing failed: ${e} ${r}`),this.result=t}static{dt(this,"MermaidParseError")}}});function Ss(t,e){t.accDescr&&e.setAccDescription?.(t.accDescr),t.accTitle&&e.setAccTitle?.(t.accTitle),t.title&&e.setDiagramTitle?.(t.title)}var vf=P(()=>{"use strict";o(Ss,"populateCommonDb")});var Ci,Z7=P(()=>{"use strict";Ci={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4}});var Cp,J7=P(()=>{"use strict";Cp=class{constructor(e){this.init=e;this.records=this.init()}static{o(this,"ImperativeState")}reset(){this.records=this.init()}}});function dW(){return TI({length:7})}function Alt(t,e){let r=Object.create(null);return t.reduce((i,n)=>{let a=e(n);return r[a]||(r[a]=!0,i.push(n)),i},[])}function a4e(t,e,r){let i=t.indexOf(e);i===-1?t.push(r):t.splice(i,1,r)}function o4e(t){let e=t.reduce((n,a)=>n.seq>a.seq?n:a,t[0]),r="";t.forEach(function(n){n===e?r+=" *":r+=" |"});let i=[r,e.id,e.seq];for(let n in Ot.records.branches)Ot.records.branches.get(n)===e.id&&i.push(n);if(Q.debug(i.join(" ")),e.parents&&e.parents.length==2&&e.parents[0]&&e.parents[1]){let n=Ot.records.commits.get(e.parents[0]);a4e(t,e,n),e.parents[1]&&t.push(Ot.records.commits.get(e.parents[1]))}else{if(e.parents.length==0)return;if(e.parents[0]){let n=Ot.records.commits.get(e.parents[0]);a4e(t,e,n)}}t=Alt(t,n=>n.id),o4e(t)}var Slt,ig,Ot,_lt,Dlt,Llt,Rlt,Nlt,Ilt,Mlt,s4e,Olt,Plt,Blt,Flt,$lt,l4e,zlt,Glt,Vlt,e_,pW=P(()=>{"use strict";bt();er();Sr();Vr();Ki();Z7();J7();wa();Slt=fr.gitGraph,ig=o(()=>fi({...Slt,...Lt().gitGraph}),"getConfig"),Ot=new Cp(()=>{let t=ig(),e=t.mainBranchName,r=t.mainBranchOrder;return{mainBranchName:e,commits:new Map,head:null,branchConfig:new Map([[e,{name:e,order:r}]]),branches:new Map([[e,null]]),currBranch:e,direction:"LR",seq:0,options:{}}});o(dW,"getID");o(Alt,"uniqBy");_lt=o(function(t){Ot.records.direction=t},"setDirection"),Dlt=o(function(t){Q.debug("options str",t),t=t?.trim(),t=t||"{}";try{Ot.records.options=JSON.parse(t)}catch(e){Q.error("error while parsing gitGraph options",e.message)}},"setOptions"),Llt=o(function(){return Ot.records.options},"getOptions"),Rlt=o(function(t){let e=t.msg,r=t.id,i=t.type,n=t.tags;Q.info("commit",e,r,i,n),Q.debug("Entering commit:",e,r,i,n);let a=ig();r=lt.sanitizeText(r,a),e=lt.sanitizeText(e,a),n=n?.map(l=>lt.sanitizeText(l,a));let s={id:r||Ot.records.seq+"-"+dW(),message:e,seq:Ot.records.seq++,type:i??Ci.NORMAL,tags:n??[],parents:Ot.records.head==null?[]:[Ot.records.head.id],branch:Ot.records.currBranch};Ot.records.head=s,Q.info("main branch",a.mainBranchName),Ot.records.commits.has(s.id)&&Q.warn(`Commit ID ${s.id} already exists`),Ot.records.commits.set(s.id,s),Ot.records.branches.set(Ot.records.currBranch,s.id),Q.debug("in pushCommit "+s.id)},"commit"),Nlt=o(function(t){let e=t.name,r=t.order;if(e=lt.sanitizeText(e,ig()),Ot.records.branches.has(e))throw new Error(`Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using "checkout ${e}")`);Ot.records.branches.set(e,Ot.records.head!=null?Ot.records.head.id:null),Ot.records.branchConfig.set(e,{name:e,order:r}),s4e(e),Q.debug("in createBranch")},"branch"),Ilt=o(t=>{let e=t.branch,r=t.id,i=t.type,n=t.tags,a=ig();e=lt.sanitizeText(e,a),r&&(r=lt.sanitizeText(r,a));let s=Ot.records.branches.get(Ot.records.currBranch),l=Ot.records.branches.get(e),u=s?Ot.records.commits.get(s):void 0,h=l?Ot.records.commits.get(l):void 0;if(u&&h&&u.branch===e)throw new Error(`Cannot merge branch '${e}' into itself.`);if(Ot.records.currBranch===e){let p=new Error('Incorrect usage of "merge". Cannot merge a branch to itself');throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:["branch abc"]},p}if(u===void 0||!u){let p=new Error(`Incorrect usage of "merge". Current branch (${Ot.records.currBranch})has no commits`);throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:["commit"]},p}if(!Ot.records.branches.has(e)){let p=new Error('Incorrect usage of "merge". Branch to be merged ('+e+") does not exist");throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:[`branch ${e}`]},p}if(h===void 0||!h){let p=new Error('Incorrect usage of "merge". Branch to be merged ('+e+") has no commits");throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:['"commit"']},p}if(u===h){let p=new Error('Incorrect usage of "merge". Both branches have same head');throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:["branch abc"]},p}if(r&&Ot.records.commits.has(r)){let p=new Error('Incorrect usage of "merge". Commit with id:'+r+" already exists, use different custom id");throw p.hash={text:`merge ${e} ${r} ${i} ${n?.join(" ")}`,token:`merge ${e} ${r} ${i} ${n?.join(" ")}`,expected:[`merge ${e} ${r}_UNIQUE ${i} ${n?.join(" ")}`]},p}let f=l||"",d={id:r||`${Ot.records.seq}-${dW()}`,message:`merged branch ${e} into ${Ot.records.currBranch}`,seq:Ot.records.seq++,parents:Ot.records.head==null?[]:[Ot.records.head.id,f],branch:Ot.records.currBranch,type:Ci.MERGE,customType:i,customId:!!r,tags:n??[]};Ot.records.head=d,Ot.records.commits.set(d.id,d),Ot.records.branches.set(Ot.records.currBranch,d.id),Q.debug(Ot.records.branches),Q.debug("in mergeBranch")},"merge"),Mlt=o(function(t){let e=t.id,r=t.targetId,i=t.tags,n=t.parent;Q.debug("Entering cherryPick:",e,r,i);let a=ig();if(e=lt.sanitizeText(e,a),r=lt.sanitizeText(r,a),i=i?.map(u=>lt.sanitizeText(u,a)),n=lt.sanitizeText(n,a),!e||!Ot.records.commits.has(e)){let u=new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');throw u.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},u}let s=Ot.records.commits.get(e);if(s===void 0||!s)throw new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');if(n&&!(Array.isArray(s.parents)&&s.parents.includes(n)))throw new Error("Invalid operation: The specified parent commit is not an immediate parent of the cherry-picked commit.");let l=s.branch;if(s.type===Ci.MERGE&&!n)throw new Error("Incorrect usage of cherry-pick: If the source commit is a merge commit, an immediate parent commit must be specified.");if(!r||!Ot.records.commits.has(r)){if(l===Ot.records.currBranch){let d=new Error('Incorrect usage of "cherryPick". Source commit is already on current branch');throw d.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},d}let u=Ot.records.branches.get(Ot.records.currBranch);if(u===void 0||!u){let d=new Error(`Incorrect usage of "cherry-pick". Current branch (${Ot.records.currBranch})has no commits`);throw d.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},d}let h=Ot.records.commits.get(u);if(h===void 0||!h){let d=new Error(`Incorrect usage of "cherry-pick". Current branch (${Ot.records.currBranch})has no commits`);throw d.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},d}let f={id:Ot.records.seq+"-"+dW(),message:`cherry-picked ${s?.message} into ${Ot.records.currBranch}`,seq:Ot.records.seq++,parents:Ot.records.head==null?[]:[Ot.records.head.id,s.id],branch:Ot.records.currBranch,type:Ci.CHERRY_PICK,tags:i?i.filter(Boolean):[`cherry-pick:${s.id}${s.type===Ci.MERGE?`|parent:${n}`:""}`]};Ot.records.head=f,Ot.records.commits.set(f.id,f),Ot.records.branches.set(Ot.records.currBranch,f.id),Q.debug(Ot.records.branches),Q.debug("in cherryPick")}},"cherryPick"),s4e=o(function(t){if(t=lt.sanitizeText(t,ig()),Ot.records.branches.has(t)){Ot.records.currBranch=t;let e=Ot.records.branches.get(Ot.records.currBranch);e===void 0||!e?Ot.records.head=null:Ot.records.head=Ot.records.commits.get(e)??null}else{let e=new Error(`Trying to checkout branch which is not yet created. (Help try using "branch ${t}")`);throw e.hash={text:`checkout ${t}`,token:`checkout ${t}`,expected:[`branch ${t}`]},e}},"checkout");o(a4e,"upsert");o(o4e,"prettyPrintCommitHistory");Olt=o(function(){Q.debug(Ot.records.commits);let t=l4e()[0];o4e([t])},"prettyPrint"),Plt=o(function(){Ot.reset(),wr()},"clear"),Blt=o(function(){return[...Ot.records.branchConfig.values()].map((e,r)=>e.order!==null&&e.order!==void 0?e:{...e,order:parseFloat(`0.${r}`)}).sort((e,r)=>(e.order??0)-(r.order??0)).map(({name:e})=>({name:e}))},"getBranchesAsObjArray"),Flt=o(function(){return Ot.records.branches},"getBranches"),$lt=o(function(){return Ot.records.commits},"getCommits"),l4e=o(function(){let t=[...Ot.records.commits.values()];return t.forEach(function(e){Q.debug(e.id)}),t.sort((e,r)=>e.seq-r.seq),t},"getCommitsArray"),zlt=o(function(){return Ot.records.currBranch},"getCurrentBranch"),Glt=o(function(){return Ot.records.direction},"getDirection"),Vlt=o(function(){return Ot.records.head},"getHead"),e_={commitType:Ci,getConfig:ig,setDirection:_lt,setOptions:Dlt,getOptions:Llt,commit:Rlt,branch:Nlt,merge:Ilt,cherryPick:Mlt,checkout:s4e,prettyPrint:Olt,clear:Plt,getBranchesAsObjArray:Blt,getBranches:Flt,getCommits:$lt,getCommitsArray:l4e,getCurrentBranch:zlt,getDirection:Glt,getHead:Vlt,setAccTitle:Ar,getAccTitle:Dr,getAccDescription:Rr,setAccDescription:Lr,setDiagramTitle:Mr,getDiagramTitle:Nr}});var qlt,Wlt,Ult,Hlt,Ylt,jlt,Xlt,c4e,u4e=P(()=>{"use strict";sh();bt();vf();pW();Z7();qlt=o((t,e)=>{Ss(t,e),t.dir&&e.setDirection(t.dir);for(let r of t.statements)Wlt(r,e)},"populate"),Wlt=o((t,e)=>{let i={Commit:o(n=>e.commit(Ult(n)),"Commit"),Branch:o(n=>e.branch(Hlt(n)),"Branch"),Merge:o(n=>e.merge(Ylt(n)),"Merge"),Checkout:o(n=>e.checkout(jlt(n)),"Checkout"),CherryPicking:o(n=>e.cherryPick(Xlt(n)),"CherryPicking")}[t.$type];i?i(t):Q.error(`Unknown statement type: ${t.$type}`)},"parseStatement"),Ult=o(t=>({id:t.id,msg:t.message??"",type:t.type!==void 0?Ci[t.type]:Ci.NORMAL,tags:t.tags??void 0}),"parseCommit"),Hlt=o(t=>({name:t.name,order:t.order??0}),"parseBranch"),Ylt=o(t=>({branch:t.branch,id:t.id??"",type:t.type!==void 0?Ci[t.type]:void 0,tags:t.tags??void 0}),"parseMerge"),jlt=o(t=>t.branch,"parseCheckout"),Xlt=o(t=>({id:t.id,targetId:"",tags:t.tags?.length===0?void 0:t.tags,parent:t.parent}),"parseCherryPicking"),c4e={parse:o(async t=>{let e=await ba("gitGraph",t);Q.debug(e),qlt(e,e_)},"parse")}});var wp,Ep,oh,xf,ng,i_,mW,gW,Klt,ag,zo,Go,t_,wC,r_,bf,Zr,Qlt,f4e,d4e,Zlt,Jlt,ect,tct,rct,ict,nct,act,sct,oct,lct,cct,h4e,uct,EC,hct,fct,dct,pct,mct,p4e,m4e=P(()=>{"use strict";Pr();Ut();bt();er();Z7();wp=10,Ep=40,oh=4,xf=2,ng=8,i_=new Set(["redux","redux-dark","redux-color","redux-dark-color"]),mW=12,gW=new Set(["redux-color","redux-dark-color"]),Klt=new Set(["dark","redux-dark","redux-dark-color","neo-dark"]),ag=o((t,e,r=!1)=>r&&t>0?(t-1)%(e-1)+1:t%e,"calcColorIndex"),zo=new Map,Go=new Map,t_=30,wC=new Map,r_=[],bf=0,Zr="LR",Qlt=o(()=>{zo.clear(),Go.clear(),wC.clear(),bf=0,r_=[],Zr="LR"},"clear"),f4e=o(t=>{let e=document.createElementNS("http://www.w3.org/2000/svg","text");return(typeof t=="string"?t.split(/\\n|\n|/gi):t).forEach(i=>{let n=document.createElementNS("http://www.w3.org/2000/svg","tspan");n.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),n.setAttribute("dy","1em"),n.setAttribute("x","0"),n.setAttribute("class","row"),n.textContent=i.trim(),e.appendChild(n)}),e},"drawText"),d4e=o(t=>{let e,r,i;return Zr==="BT"?(r=o((n,a)=>n<=a,"comparisonFunc"),i=1/0):(r=o((n,a)=>n>=a,"comparisonFunc"),i=0),t.forEach(n=>{let a=Zr==="TB"||Zr=="BT"?Go.get(n)?.y:Go.get(n)?.x;a!==void 0&&r(a,i)&&(e=n,i=a)}),e},"findClosestParent"),Zlt=o(t=>{let e="",r=1/0;return t.forEach(i=>{let n=Go.get(i).y;n<=r&&(e=i,r=n)}),e||void 0},"findClosestParentBT"),Jlt=o((t,e,r)=>{let i=r,n=r,a=[];t.forEach(s=>{let l=e.get(s);if(!l)throw new Error(`Commit not found for key ${s}`);l.parents.length?(i=tct(l),n=Math.max(i,n)):a.push(l),rct(l,i)}),i=n,a.forEach(s=>{ict(s,i,r)}),t.forEach(s=>{let l=e.get(s);if(l?.parents.length){let u=Zlt(l.parents);i=Go.get(u).y-Ep,i<=n&&(n=i);let h=zo.get(l.branch).pos,f=i-wp;Go.set(l.id,{x:h,y:f})}})},"setParallelBTPos"),ect=o(t=>{let e=d4e(t.parents.filter(i=>i!==null));if(!e)throw new Error(`Closest parent not found for commit ${t.id}`);let r=Go.get(e)?.y;if(r===void 0)throw new Error(`Closest parent position not found for commit ${t.id}`);return r},"findClosestParentPos"),tct=o(t=>ect(t)+Ep,"calculateCommitPosition"),rct=o((t,e)=>{let r=zo.get(t.branch);if(!r)throw new Error(`Branch not found for commit ${t.id}`);let i=r.pos,n=e+wp;return Go.set(t.id,{x:i,y:n}),{x:i,y:n}},"setCommitPosition"),ict=o((t,e,r)=>{let i=zo.get(t.branch);if(!i)throw new Error(`Branch not found for commit ${t.id}`);let n=e+r,a=i.pos;Go.set(t.id,{x:a,y:n})},"setRootPosition"),nct=o((t,e,r,i,n,a)=>{let{theme:s}=ge(),l=i_.has(s??""),u=gW.has(s??""),h=Klt.has(s??"");if(a===Ci.HIGHLIGHT)t.append("rect").attr("x",r.x-10+(l?3:0)).attr("y",r.y-10+(l?3:0)).attr("width",l?14:20).attr("height",l?14:20).attr("class",`commit ${e.id} commit-highlight${ag(n,ng,u)} ${i}-outer`),t.append("rect").attr("x",r.x-6+(l?2:0)).attr("y",r.y-6+(l?2:0)).attr("width",l?8:12).attr("height",l?8:12).attr("class",`commit ${e.id} commit${ag(n,ng,u)} ${i}-inner`);else if(a===Ci.CHERRY_PICK)t.append("circle").attr("cx",r.x).attr("cy",r.y).attr("r",l?7:10).attr("class",`commit ${e.id} ${i}`),t.append("circle").attr("cx",r.x-3).attr("cy",r.y+2).attr("r",l?2.5:2.75).attr("fill",h?"#000000":"#fff").attr("class",`commit ${e.id} ${i}`),t.append("circle").attr("cx",r.x+3).attr("cy",r.y+2).attr("r",l?2.5:2.75).attr("fill",h?"#000000":"#fff").attr("class",`commit ${e.id} ${i}`),t.append("line").attr("x1",r.x+3).attr("y1",r.y+1).attr("x2",r.x).attr("y2",r.y-5).attr("stroke",h?"#000000":"#fff").attr("class",`commit ${e.id} ${i}`),t.append("line").attr("x1",r.x-3).attr("y1",r.y+1).attr("x2",r.x).attr("y2",r.y-5).attr("stroke",h?"#000000":"#fff").attr("class",`commit ${e.id} ${i}`);else{let f=t.append("circle");if(f.attr("cx",r.x),f.attr("cy",r.y),f.attr("r",l?7:10),f.attr("class",`commit ${e.id} commit${ag(n,ng,u)}`),a===Ci.MERGE){let d=t.append("circle");d.attr("cx",r.x),d.attr("cy",r.y),d.attr("r",l?5:6),d.attr("class",`commit ${i} ${e.id} commit${ag(n,ng,u)}`)}if(a===Ci.REVERSE){let d=t.append("path"),p=l?4:5;d.attr("d",`M ${r.x-p},${r.y-p}L${r.x+p},${r.y+p}M${r.x-p},${r.y+p}L${r.x+p},${r.y-p}`).attr("class",`commit ${i} ${e.id} commit${ag(n,ng,u)}`)}}},"drawCommitBullet"),act=o((t,e,r,i,n)=>{if(e.type!==Ci.CHERRY_PICK&&(e.customId&&e.type===Ci.MERGE||e.type!==Ci.MERGE)&&n.showCommitLabel){let a=t.append("g"),s=a.insert("rect").attr("class","commit-label-bkg"),l=a.append("text").attr("x",i).attr("y",r.y+25).attr("class","commit-label").text(e.id),u=l.node()?.getBBox();if(u&&(s.attr("x",r.posWithOffset-u.width/2-xf).attr("y",r.y+13.5).attr("width",u.width+2*xf).attr("height",u.height+2*xf),Zr==="TB"||Zr==="BT"?(s.attr("x",r.x-(u.width+4*oh+5)).attr("y",r.y-12),l.attr("x",r.x-(u.width+4*oh)).attr("y",r.y+u.height-12)):l.attr("x",r.posWithOffset-u.width/2),n.rotateCommitLabel))if(Zr==="TB"||Zr==="BT")l.attr("transform","rotate(-45, "+r.x+", "+r.y+")"),s.attr("transform","rotate(-45, "+r.x+", "+r.y+")");else{let h=-7.5-(u.width+10)/25*9.5,f=10+u.width/25*8.5;a.attr("transform","translate("+h+", "+f+") rotate(-45, "+i+", "+r.y+")")}}},"drawCommitLabel"),sct=o((t,e,r,i)=>{if(e.tags.length>0){let n=0,a=0,s=0,l=[];for(let u of e.tags.reverse()){let h=t.insert("polygon"),f=t.append("circle"),d=t.append("text").attr("y",r.y-16-n).attr("class","tag-label").text(u),p=d.node()?.getBBox();if(!p)throw new Error("Tag bbox not found");a=Math.max(a,p.width),s=Math.max(s,p.height),d.attr("x",r.posWithOffset-p.width/2),l.push({tag:d,hole:f,rect:h,yOffset:n}),n+=20}for(let{tag:u,hole:h,rect:f,yOffset:d}of l){let p=s/2,m=r.y-19.2-d;if(f.attr("class","tag-label-bkg").attr("points",` + ${i-a/2-oh/2},${m+xf} + ${i-a/2-oh/2},${m-xf} + ${r.posWithOffset-a/2-oh},${m-p-xf} + ${r.posWithOffset+a/2+oh},${m-p-xf} + ${r.posWithOffset+a/2+oh},${m+p+xf} + ${r.posWithOffset-a/2-oh},${m+p+xf}`),h.attr("cy",m).attr("cx",i-a/2+oh/2).attr("r",1.5).attr("class","tag-hole"),Zr==="TB"||Zr==="BT"){let g=i+d;f.attr("class","tag-label-bkg").attr("points",` + ${r.x},${g+2} + ${r.x},${g-2} + ${r.x+wp},${g-p-2} + ${r.x+wp+a+4},${g-p-2} + ${r.x+wp+a+4},${g+p+2} + ${r.x+wp},${g+p+2}`).attr("transform","translate(12,12) rotate(45, "+r.x+","+i+")"),h.attr("cx",r.x+oh/2).attr("cy",g).attr("transform","translate(12,12) rotate(45, "+r.x+","+i+")"),u.attr("x",r.x+5).attr("y",g+3).attr("transform","translate(14,14) rotate(45, "+r.x+","+i+")")}}}},"drawCommitTags"),oct=o(t=>{switch(t.customType??t.type){case Ci.NORMAL:return"commit-normal";case Ci.REVERSE:return"commit-reverse";case Ci.HIGHLIGHT:return"commit-highlight";case Ci.MERGE:return"commit-merge";case Ci.CHERRY_PICK:return"commit-cherry-pick";default:return"commit-normal"}},"getCommitClassType"),lct=o((t,e,r,i)=>{let n={x:0,y:0};if(t.parents.length>0){let a=d4e(t.parents);if(a){let s=i.get(a)??n;return e==="TB"?s.y+Ep:e==="BT"?(i.get(t.id)??n).y-Ep:s.x+Ep}}else return e==="TB"?t_:e==="BT"?(i.get(t.id)??n).y-Ep:0;return 0},"calculatePosition"),cct=o((t,e,r)=>{let i=Zr==="BT"&&r?e:e+wp,n=zo.get(t.branch)?.pos,a=Zr==="TB"||Zr==="BT"?zo.get(t.branch)?.pos:i;if(a===void 0||n===void 0)throw new Error(`Position were undefined for commit ${t.id}`);let s=i_.has(ge().theme??""),l=Zr==="TB"||Zr==="BT"?i:n+(s?mW/2+1:-2);return{x:a,y:l,posWithOffset:i}},"getCommitPosition"),h4e=o((t,e,r,i)=>{let n=t.append("g").attr("class","commit-bullets"),a=t.append("g").attr("class","commit-labels"),s=Zr==="TB"||Zr==="BT"?t_:0,l=[...e.keys()],u=i.parallelCommits??!1,h=o((d,p)=>{let m=e.get(d)?.seq,g=e.get(p)?.seq;return m!==void 0&&g!==void 0?m-g:0},"sortKeys"),f=l.sort(h);Zr==="BT"&&(u&&Jlt(f,e,s),f=f.reverse()),f.forEach(d=>{let p=e.get(d);if(!p)throw new Error(`Commit not found for key ${d}`);u&&(s=lct(p,Zr,s,Go));let m=cct(p,s,u);if(r){let g=oct(p),y=p.customType??p.type,v=zo.get(p.branch)?.index??0;nct(n,p,m,g,v,y),act(a,p,m,s,i),sct(a,p,m,s)}Zr==="TB"||Zr==="BT"?Go.set(p.id,{x:m.x,y:m.posWithOffset}):Go.set(p.id,{x:m.posWithOffset,y:m.y}),s=Zr==="BT"&&u?s+Ep:s+Ep+wp,s>bf&&(bf=s)})},"drawCommits"),uct=o((t,e,r,i,n)=>{let s=(Zr==="TB"||Zr==="BT"?r.xh.branch===s,"isOnBranchToGetCurve"),u=o(h=>h.seq>t.seq&&h.sequ(h)&&l(h))},"shouldRerouteArrow"),EC=o((t,e,r=0)=>{let i=t+Math.abs(t-e)/2;if(r>5)return i;if(r_.every(s=>Math.abs(s-i)>=10))return r_.push(i),i;let a=Math.abs(t-e);return EC(t,e-a/5,r+1)},"findLane"),hct=o((t,e,r,i)=>{let{theme:n}=ge(),a=gW.has(n??""),s=Go.get(e.id),l=Go.get(r.id);if(s===void 0||l===void 0)throw new Error(`Commit positions not found for commits ${e.id} and ${r.id}`);let u=uct(e,r,s,l,i),h="",f="",d=0,p=0,m=zo.get(r.branch)?.index;r.type===Ci.MERGE&&e.id!==r.parents[0]&&(m=zo.get(e.branch)?.index);let g;if(u){h="A 10 10, 0, 0, 0,",f="A 10 10, 0, 0, 1,",d=10,p=10;let y=s.yl.x&&(h="A 20 20, 0, 0, 0,",f="A 20 20, 0, 0, 1,",d=20,p=20,r.type===Ci.MERGE&&e.id!==r.parents[0]?g=`M ${s.x} ${s.y} L ${s.x} ${l.y-d} ${f} ${s.x-p} ${l.y} L ${l.x} ${l.y}`:g=`M ${s.x} ${s.y} L ${l.x+d} ${s.y} ${h} ${l.x} ${s.y+p} L ${l.x} ${l.y}`),s.x===l.x&&(g=`M ${s.x} ${s.y} L ${l.x} ${l.y}`)):Zr==="BT"?(s.xl.x&&(h="A 20 20, 0, 0, 0,",f="A 20 20, 0, 0, 1,",d=20,p=20,r.type===Ci.MERGE&&e.id!==r.parents[0]?g=`M ${s.x} ${s.y} L ${s.x} ${l.y+d} ${h} ${s.x-p} ${l.y} L ${l.x} ${l.y}`:g=`M ${s.x} ${s.y} L ${l.x+d} ${s.y} ${f} ${l.x} ${s.y-p} L ${l.x} ${l.y}`),s.x===l.x&&(g=`M ${s.x} ${s.y} L ${l.x} ${l.y}`)):(s.yl.y&&(r.type===Ci.MERGE&&e.id!==r.parents[0]?g=`M ${s.x} ${s.y} L ${l.x-d} ${s.y} ${h} ${l.x} ${s.y-p} L ${l.x} ${l.y}`:g=`M ${s.x} ${s.y} L ${s.x} ${l.y+d} ${f} ${s.x+p} ${l.y} L ${l.x} ${l.y}`),s.y===l.y&&(g=`M ${s.x} ${s.y} L ${l.x} ${l.y}`));if(g===void 0)throw new Error("Line definition not found");t.append("path").attr("d",g).attr("class","arrow arrow"+ag(m,ng,a))},"drawArrow"),fct=o((t,e)=>{let r=t.append("g").attr("class","commit-arrows");[...e.keys()].forEach(i=>{let n=e.get(i);n.parents&&n.parents.length>0&&n.parents.forEach(a=>{hct(r,e.get(a),n,e)})})},"drawArrows"),dct=o((t,e,r,i)=>{let{look:n,theme:a,themeVariables:s}=ge(),{dropShadow:l,THEME_COLOR_LIMIT:u}=s,h=i_.has(a??""),f=gW.has(a??""),d=t.append("g");e.forEach((p,m)=>{let g=ag(m,h?u:ng,f),y=zo.get(p.name)?.pos;if(y===void 0)throw new Error(`Position not found for branch ${p.name}`);let v=Zr==="TB"||Zr==="BT"?y:h?y+mW/2+1:y-2,x=d.append("line");x.attr("x1",0),x.attr("y1",v),x.attr("x2",bf),x.attr("y2",v),x.attr("class","branch branch"+g),Zr==="TB"?(x.attr("y1",t_),x.attr("x1",y),x.attr("y2",bf),x.attr("x2",y)):Zr==="BT"&&(x.attr("y1",bf),x.attr("x1",y),x.attr("y2",t_),x.attr("x2",y)),r_.push(v);let b=p.name,T=f4e(b),w=d.insert("rect"),C=d.insert("g").attr("class","branchLabel").insert("g").attr("class","label branch-label"+g);C.node().appendChild(T);let E=T.getBBox(),S=h?0:4,L=h?16:0,M=h?mW:0;n==="neo"&&w.attr("data-look","neo"),w.attr("class","branchLabelBkg label"+g).attr("style",n==="neo"?`filter:${h?`url(#${i}-drop-shadow)`:l}`:"").attr("rx",S).attr("ry",S).attr("x",-E.width-4-(r.rotateCommitLabel===!0?30:0)).attr("y",-E.height/2+10).attr("width",E.width+18+L).attr("height",E.height+4+M),C.attr("transform","translate("+(-E.width-14-(r.rotateCommitLabel===!0?30:0)+L/2)+", "+(v-E.height/2-2)+")"),Zr==="TB"?(w.attr("x",y-E.width/2-10).attr("y",0),C.attr("transform","translate("+(y-E.width/2-5)+", 0)"),h&&(w.attr("transform",`translate(${-L/2-3}, ${-M-10})`),C.attr("transform","translate("+(y-E.width/2-5)+", "+(-M*2+7)+")"))):Zr==="BT"?(w.attr("x",y-E.width/2-10).attr("y",bf),C.attr("transform","translate("+(y-E.width/2-5)+", "+bf+")"),h&&(w.attr("transform",`translate(${-L/2-3}, ${M+10})`),C.attr("transform","translate("+(y-E.width/2-5)+", "+(bf+M*2+4)+")"))):w.attr("transform","translate(-19, "+(v-12-M/2)+")")})},"drawBranches"),pct=o(function(t,e,r,i,n){return zo.set(t,{pos:e,index:r}),e+=50+(n?40:0)+(Zr==="TB"||Zr==="BT"?i.width/2:0),e},"setBranchPosition"),mct=o(function(t,e,r,i){Qlt(),Q.debug("in gitgraph renderer",t+` +`,"id:",e,r);let n=i.db;if(!n.getConfig){Q.error("getConfig method is not available on db");return}let a=n.getConfig(),s=a.rotateCommitLabel??!1;wC=n.getCommits();let l=n.getBranchesAsObjArray();Zr=n.getDirection();let u=Ze(`[id="${e}"]`),{look:h,theme:f,themeVariables:d}=ge(),{useGradient:p,gradientStart:m,gradientStop:g,filterColor:y}=d;if(p){let x=u.append("defs").append("linearGradient").attr("id",e+"-gradient").attr("gradientUnits","objectBoundingBox").attr("x1","0%").attr("y1","0%").attr("x2","100%").attr("y2","0%");x.append("stop").attr("offset","0%").attr("stop-color",m).attr("stop-opacity",1),x.append("stop").attr("offset","100%").attr("stop-color",g).attr("stop-opacity",1)}h==="neo"&&i_.has(f??"")&&u.append("defs").append("filter").attr("id",e+"-drop-shadow").attr("height","130%").attr("width","130%").append("feDropShadow").attr("dx","4").attr("dy","4").attr("stdDeviation",0).attr("flood-opacity","0.06").attr("flood-color",y);let v=0;l.forEach((x,b)=>{let T=f4e(x.name),w=u.append("g"),k=w.insert("g").attr("class","branchLabel"),C=k.insert("g").attr("class","label branch-label");C.node()?.appendChild(T);let E=T.getBBox();v=pct(x.name,v,b,E,s),C.remove(),k.remove(),w.remove()}),h4e(u,wC,!1,a),a.showBranches&&dct(u,l,a,e),fct(u,wC),h4e(u,wC,!0,a),Kt.insertTitle(u,"gitTitleText",a.titleTopMargin??0,n.getDiagramTitle()),yL(void 0,u,a.diagramPadding,a.useMaxWidth)},"draw"),p4e={draw:mct}});var g4e,y4e,gct,yct,vct,xct,bct,Tct,kct,Cct,v4e,x4e=P(()=>{"use strict";Sr();g4e=8,y4e=new Set(["redux","redux-dark","redux-color","redux-dark-color"]),gct=new Set(["redux-color","redux-dark-color"]),yct=new Set(["neo","neo-dark"]),vct=new Set(["dark","redux-dark","redux-dark-color","neo-dark"]),xct=new Set(["redux","redux-dark","redux-color","redux-dark-color","neo","neo-dark"]),bct=o(t=>{let{svgId:e}=t,r="";if(t.useGradient&&e)for(let i=0;i{let e=Lt(),{theme:r,themeVariables:i}=e,{borderColorArray:n}=i,a=y4e.has(r);if(yct.has(r)){let s="";for(let l=0;l`${Array.from({length:t.THEME_COLOR_LIMIT},(e,r)=>r).map(e=>{let r=e%g4e;return` + .branch-label${e} { fill: ${t["gitBranchLabel"+r]}; } + .commit${e} { stroke: ${t["git"+r]}; fill: ${t["git"+r]}; } + .commit-highlight${e} { stroke: ${t["gitInv"+r]}; fill: ${t["gitInv"+r]}; } + .label${e} { fill: ${t["git"+r]}; } + .arrow${e} { stroke: ${t["git"+r]}; } + `}).join(` +`)}`,"normalTheme"),Cct=o(t=>{let e=Lt(),{theme:r}=e,i=xct.has(r);return` + .commit-id, + .commit-msg, + .branch-label { + fill: lightgrey; + color: lightgrey; + font-family: 'trebuchet ms', verdana, arial, sans-serif; + font-family: var(--mermaid-font-family); + } + + ${i?Tct(t):kct(t)} + + .branch { + stroke-width: ${t.strokeWidth}; + stroke: ${t.commitLineColor??t.lineColor}; + stroke-dasharray: ${i?"4 2":"2"}; + } + .commit-label { font-size: ${t.commitLabelFontSize}; fill: ${i?t.nodeBorder:t.commitLabelColor}; ${i?`font-weight:${t.noteFontWeight};`:""}} + .commit-label-bkg { font-size: ${t.commitLabelFontSize}; fill: ${i?"transparent":t.commitLabelBackground}; opacity: ${i?"":.5}; } + .tag-label { font-size: ${t.tagLabelFontSize}; fill: ${t.tagLabelColor};} + .tag-label-bkg { fill: ${i?t.mainBkg:t.tagLabelBackground}; stroke: ${i?t.nodeBorder:t.tagLabelBorder}; ${i?`filter:${t.dropShadow}`:""} } + .tag-hole { fill: ${t.textColor}; } + + .commit-merge { + stroke: ${i?t.mainBkg:t.primaryColor}; + fill: ${i?t.mainBkg:t.primaryColor}; + } + .commit-reverse { + stroke: ${i?t.mainBkg:t.primaryColor}; + fill: ${i?t.mainBkg:t.primaryColor}; + stroke-width: ${i?t.strokeWidth:3}; + } + .commit-highlight-outer { + } + .commit-highlight-inner { + stroke: ${i?t.mainBkg:t.primaryColor}; + fill: ${i?t.mainBkg:t.primaryColor}; + } + + .arrow { + /* Intentional: neo themes keep the bold 8px arrow (like classic themes); only redux-geometry themes use the thinner options.strokeWidth. */ + stroke-width: ${y4e.has(r)?t.strokeWidth:8}; + stroke-linecap: round; + fill: none + } + .gitTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${t.textColor}; + } +`},"getStyles"),v4e=Cct});var b4e={};ur(b4e,{diagram:()=>wct});var wct,T4e=P(()=>{"use strict";u4e();pW();m4e();x4e();wct={parser:c4e,db:e_,renderer:p4e,styles:v4e}});var yW,w4e,E4e=P(()=>{"use strict";yW=(function(){var t=o(function(_,D,N,R){for(N=N||{},R=_.length;R--;N[_[R]]=D);return N},"o"),e=[6,8,10,12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30,31,33,35,36,38,40],r=[1,26],i=[1,27],n=[1,28],a=[1,29],s=[1,30],l=[1,31],u=[1,32],h=[1,33],f=[1,34],d=[1,9],p=[1,10],m=[1,11],g=[1,12],y=[1,13],v=[1,14],x=[1,15],b=[1,16],T=[1,19],w=[1,20],k=[1,21],C=[1,22],E=[1,23],S=[1,25],L=[1,35],M={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,gantt:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NL:10,weekday:11,weekday_monday:12,weekday_tuesday:13,weekday_wednesday:14,weekday_thursday:15,weekday_friday:16,weekday_saturday:17,weekday_sunday:18,weekend:19,weekend_friday:20,weekend_saturday:21,dateFormat:22,inclusiveEndDates:23,topAxis:24,axisFormat:25,tickInterval:26,excludes:27,includes:28,todayMarker:29,title:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,section:36,clickStatement:37,taskTxt:38,taskData:39,click:40,callbackname:41,callbackargs:42,href:43,clickStatementDebug:44,$accept:0,$end:1},terminals_:{2:"error",4:"gantt",6:"EOF",8:"SPACE",10:"NL",12:"weekday_monday",13:"weekday_tuesday",14:"weekday_wednesday",15:"weekday_thursday",16:"weekday_friday",17:"weekday_saturday",18:"weekday_sunday",20:"weekend_friday",21:"weekend_saturday",22:"dateFormat",23:"inclusiveEndDates",24:"topAxis",25:"axisFormat",26:"tickInterval",27:"excludes",28:"includes",29:"todayMarker",30:"title",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",36:"section",38:"taskTxt",39:"taskData",40:"click",41:"callbackname",42:"callbackargs",43:"href"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[19,1],[19,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,2],[37,2],[37,3],[37,3],[37,4],[37,3],[37,4],[37,2],[44,2],[44,3],[44,3],[44,4],[44,3],[44,4],[44,2]],performAction:o(function(D,N,R,B,O,$,z){var F=$.length-1;switch(O){case 1:return $[F-1];case 2:this.$=[];break;case 3:$[F-1].push($[F]),this.$=$[F-1];break;case 4:case 5:this.$=$[F];break;case 6:case 7:this.$=[];break;case 8:B.setWeekday("monday");break;case 9:B.setWeekday("tuesday");break;case 10:B.setWeekday("wednesday");break;case 11:B.setWeekday("thursday");break;case 12:B.setWeekday("friday");break;case 13:B.setWeekday("saturday");break;case 14:B.setWeekday("sunday");break;case 15:B.setWeekend("friday");break;case 16:B.setWeekend("saturday");break;case 17:B.setDateFormat($[F].substr(11)),this.$=$[F].substr(11);break;case 18:B.enableInclusiveEndDates(),this.$=$[F].substr(18);break;case 19:B.TopAxis(),this.$=$[F].substr(8);break;case 20:B.setAxisFormat($[F].substr(11)),this.$=$[F].substr(11);break;case 21:B.setTickInterval($[F].substr(13)),this.$=$[F].substr(13);break;case 22:B.setExcludes($[F].substr(9)),this.$=$[F].substr(9);break;case 23:B.setIncludes($[F].substr(9)),this.$=$[F].substr(9);break;case 24:B.setTodayMarker($[F].substr(12)),this.$=$[F].substr(12);break;case 27:B.setDiagramTitle($[F].substr(6)),this.$=$[F].substr(6);break;case 28:this.$=$[F].trim(),B.setAccTitle(this.$);break;case 29:case 30:this.$=$[F].trim(),B.setAccDescription(this.$);break;case 31:B.addSection($[F].substr(8)),this.$=$[F].substr(8);break;case 33:B.addTask($[F-1],$[F]),this.$="task";break;case 34:this.$=$[F-1],B.setClickEvent($[F-1],$[F],null);break;case 35:this.$=$[F-2],B.setClickEvent($[F-2],$[F-1],$[F]);break;case 36:this.$=$[F-2],B.setClickEvent($[F-2],$[F-1],null),B.setLink($[F-2],$[F]);break;case 37:this.$=$[F-3],B.setClickEvent($[F-3],$[F-2],$[F-1]),B.setLink($[F-3],$[F]);break;case 38:this.$=$[F-2],B.setClickEvent($[F-2],$[F],null),B.setLink($[F-2],$[F-1]);break;case 39:this.$=$[F-3],B.setClickEvent($[F-3],$[F-1],$[F]),B.setLink($[F-3],$[F-2]);break;case 40:this.$=$[F-1],B.setLink($[F-1],$[F]);break;case 41:case 47:this.$=$[F-1]+" "+$[F];break;case 42:case 43:case 45:this.$=$[F-2]+" "+$[F-1]+" "+$[F];break;case 44:case 46:this.$=$[F-3]+" "+$[F-2]+" "+$[F-1]+" "+$[F];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:17,12:r,13:i,14:n,15:a,16:s,17:l,18:u,19:18,20:h,21:f,22:d,23:p,24:m,25:g,26:y,27:v,28:x,29:b,30:T,31:w,33:k,35:C,36:E,37:24,38:S,40:L},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:36,11:17,12:r,13:i,14:n,15:a,16:s,17:l,18:u,19:18,20:h,21:f,22:d,23:p,24:m,25:g,26:y,27:v,28:x,29:b,30:T,31:w,33:k,35:C,36:E,37:24,38:S,40:L},t(e,[2,5]),t(e,[2,6]),t(e,[2,17]),t(e,[2,18]),t(e,[2,19]),t(e,[2,20]),t(e,[2,21]),t(e,[2,22]),t(e,[2,23]),t(e,[2,24]),t(e,[2,25]),t(e,[2,26]),t(e,[2,27]),{32:[1,37]},{34:[1,38]},t(e,[2,30]),t(e,[2,31]),t(e,[2,32]),{39:[1,39]},t(e,[2,8]),t(e,[2,9]),t(e,[2,10]),t(e,[2,11]),t(e,[2,12]),t(e,[2,13]),t(e,[2,14]),t(e,[2,15]),t(e,[2,16]),{41:[1,40],43:[1,41]},t(e,[2,4]),t(e,[2,28]),t(e,[2,29]),t(e,[2,33]),t(e,[2,34],{42:[1,42],43:[1,43]}),t(e,[2,40],{41:[1,44]}),t(e,[2,35],{43:[1,45]}),t(e,[2,36]),t(e,[2,38],{42:[1,46]}),t(e,[2,37]),t(e,[2,39])],defaultActions:{},parseError:o(function(D,N){if(N.recoverable)this.trace(D);else{var R=new Error(D);throw R.hash=N,R}},"parseError"),parse:o(function(D){var N=this,R=[0],B=[],O=[null],$=[],z=this.table,F="",V=0,H=0,X=0,W=2,Z=1,Y=$.slice.call(arguments,1),ae=Object.create(this.lexer),J={yy:{}};for(var ee in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ee)&&(J.yy[ee]=this.yy[ee]);ae.setInput(D,J.yy),J.yy.lexer=ae,J.yy.parser=this,typeof ae.yylloc>"u"&&(ae.yylloc={});var re=ae.yylloc;$.push(re);var te=ae.options&&ae.options.ranges;typeof J.yy.parseError=="function"?this.parseError=J.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function be(Me){R.length=R.length-2*Me,O.length=O.length-Me,$.length=$.length-Me}o(be,"popStack");function de(){var Me;return Me=B.pop()||ae.lex()||Z,typeof Me!="number"&&(Me instanceof Array&&(B=Me,Me=B.pop()),Me=N.symbols_[Me]||Me),Me}o(de,"lex");for(var Ee,Ne,we,Te,De,$e,pe={},Je,Ce,Fe,Ue;;){if(we=R[R.length-1],this.defaultActions[we]?Te=this.defaultActions[we]:((Ee===null||typeof Ee>"u")&&(Ee=de()),Te=z[we]&&z[we][Ee]),typeof Te>"u"||!Te.length||!Te[0]){var qe="";Ue=[];for(Je in z[we])this.terminals_[Je]&&Je>W&&Ue.push("'"+this.terminals_[Je]+"'");ae.showPosition?qe="Parse error on line "+(V+1)+`: +`+ae.showPosition()+` +Expecting `+Ue.join(", ")+", got '"+(this.terminals_[Ee]||Ee)+"'":qe="Parse error on line "+(V+1)+": Unexpected "+(Ee==Z?"end of input":"'"+(this.terminals_[Ee]||Ee)+"'"),this.parseError(qe,{text:ae.match,token:this.terminals_[Ee]||Ee,line:ae.yylineno,loc:re,expected:Ue})}if(Te[0]instanceof Array&&Te.length>1)throw new Error("Parse Error: multiple actions possible at state: "+we+", token: "+Ee);switch(Te[0]){case 1:R.push(Ee),O.push(ae.yytext),$.push(ae.yylloc),R.push(Te[1]),Ee=null,Ne?(Ee=Ne,Ne=null):(H=ae.yyleng,F=ae.yytext,V=ae.yylineno,re=ae.yylloc,X>0&&X--);break;case 2:if(Ce=this.productions_[Te[1]][1],pe.$=O[O.length-Ce],pe._$={first_line:$[$.length-(Ce||1)].first_line,last_line:$[$.length-1].last_line,first_column:$[$.length-(Ce||1)].first_column,last_column:$[$.length-1].last_column},te&&(pe._$.range=[$[$.length-(Ce||1)].range[0],$[$.length-1].range[1]]),$e=this.performAction.apply(pe,[F,H,V,J.yy,Te[1],O,$].concat(Y)),typeof $e<"u")return $e;Ce&&(R=R.slice(0,-1*Ce*2),O=O.slice(0,-1*Ce),$=$.slice(0,-1*Ce)),R.push(this.productions_[Te[1]][0]),O.push(pe.$),$.push(pe._$),Fe=z[R[R.length-2]][R[R.length-1]],R.push(Fe);break;case 3:return!0}}return!0},"parse")},I=(function(){var _={EOF:1,parseError:o(function(N,R){if(this.yy.parser)this.yy.parser.parseError(N,R);else throw new Error(N)},"parseError"),setInput:o(function(D,N){return this.yy=N||this.yy||{},this._input=D,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var D=this._input[0];this.yytext+=D,this.yyleng++,this.offset++,this.match+=D,this.matched+=D;var N=D.match(/(?:\r\n?|\n).*/g);return N?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),D},"input"),unput:o(function(D){var N=D.length,R=D.split(/(?:\r\n?|\n)/g);this._input=D+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-N),this.offset-=N;var B=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),R.length-1&&(this.yylineno-=R.length-1);var O=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:R?(R.length===B.length?this.yylloc.first_column:0)+B[B.length-R.length].length-R[0].length:this.yylloc.first_column-N},this.options.ranges&&(this.yylloc.range=[O[0],O[0]+this.yyleng-N]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(D){this.unput(this.match.slice(D))},"less"),pastInput:o(function(){var D=this.matched.substr(0,this.matched.length-this.match.length);return(D.length>20?"...":"")+D.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var D=this.match;return D.length<20&&(D+=this._input.substr(0,20-D.length)),(D.substr(0,20)+(D.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var D=this.pastInput(),N=new Array(D.length+1).join("-");return D+this.upcomingInput()+` +`+N+"^"},"showPosition"),test_match:o(function(D,N){var R,B,O;if(this.options.backtrack_lexer&&(O={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(O.yylloc.range=this.yylloc.range.slice(0))),B=D[0].match(/(?:\r\n?|\n).*/g),B&&(this.yylineno+=B.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:B?B[B.length-1].length-B[B.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+D[0].length},this.yytext+=D[0],this.match+=D[0],this.matches=D,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(D[0].length),this.matched+=D[0],R=this.performAction.call(this,this.yy,this,N,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),R)return R;if(this._backtrack){for(var $ in O)this[$]=O[$];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var D,N,R,B;this._more||(this.yytext="",this.match="");for(var O=this._currentRules(),$=0;$N[0].length)){if(N=R,B=$,this.options.backtrack_lexer){if(D=this.test_match(R,O[$]),D!==!1)return D;if(this._backtrack){N=!1;continue}else return!1}else if(!this.options.flex)break}return N?(D=this.test_match(N,O[B]),D!==!1?D:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var N=this.next();return N||this.lex()},"lex"),begin:o(function(N){this.conditionStack.push(N)},"begin"),popState:o(function(){var N=this.conditionStack.length-1;return N>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(N){return N=this.conditionStack.length-1-Math.abs(N||0),N>=0?this.conditionStack[N]:"INITIAL"},"topState"),pushState:o(function(N){this.begin(N)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(N,R,B,O){var $=O;switch(B){case 0:return this.begin("open_directive"),"open_directive";break;case 1:return this.begin("acc_title"),31;break;case 2:return this.popState(),"acc_title_value";break;case 3:return this.begin("acc_descr"),33;break;case 4:return this.popState(),"acc_descr_value";break;case 5:this.begin("acc_descr_multiline");break;case 6:this.popState();break;case 7:return"acc_descr_multiline_value";case 8:break;case 9:break;case 10:break;case 11:return 10;case 12:break;case 13:break;case 14:this.begin("href");break;case 15:this.popState();break;case 16:return 43;case 17:this.begin("callbackname");break;case 18:this.popState();break;case 19:this.popState(),this.begin("callbackargs");break;case 20:return 41;case 21:this.popState();break;case 22:return 42;case 23:this.begin("click");break;case 24:this.popState();break;case 25:return 40;case 26:return 4;case 27:return 22;case 28:return 23;case 29:return 24;case 30:return 25;case 31:return 26;case 32:return 28;case 33:return 27;case 34:return 29;case 35:return 12;case 36:return 13;case 37:return 14;case 38:return 15;case 39:return 16;case 40:return 17;case 41:return 18;case 42:return 20;case 43:return 21;case 44:return"date";case 45:return 30;case 46:return"accDescription";case 47:return 36;case 48:return 38;case 49:return 39;case 50:return":";case 51:return 6;case 52:return"INVALID"}},"anonymous"),rules:[/^(?:%%\{)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:%%(?!\{)*[^\n]*)/i,/^(?:[^\}]%%*[^\n]*)/i,/^(?:%%*[^\n]*[\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:%[^\n]*)/i,/^(?:href[\s]+["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:call[\s]+)/i,/^(?:\([\s]*\))/i,/^(?:\()/i,/^(?:[^(]*)/i,/^(?:\))/i,/^(?:[^)]*)/i,/^(?:click[\s]+)/i,/^(?:[\s\n])/i,/^(?:[^\s\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:inclusiveEndDates\b)/i,/^(?:topAxis\b)/i,/^(?:axisFormat\s[^#\n;]+)/i,/^(?:tickInterval\s[^#\n;]+)/i,/^(?:includes\s[^#\n;]+)/i,/^(?:excludes\s[^#\n;]+)/i,/^(?:todayMarker\s[^\n;]+)/i,/^(?:weekday\s+monday\b)/i,/^(?:weekday\s+tuesday\b)/i,/^(?:weekday\s+wednesday\b)/i,/^(?:weekday\s+thursday\b)/i,/^(?:weekday\s+friday\b)/i,/^(?:weekday\s+saturday\b)/i,/^(?:weekday\s+sunday\b)/i,/^(?:weekend\s+friday\b)/i,/^(?:weekend\s+saturday\b)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^\n]+)/i,/^(?:accDescription\s[^#\n;]+)/i,/^(?:section\s[^\n]+)/i,/^(?:[^:\n]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[6,7],inclusive:!1},acc_descr:{rules:[4],inclusive:!1},acc_title:{rules:[2],inclusive:!1},callbackargs:{rules:[21,22],inclusive:!1},callbackname:{rules:[18,19,20],inclusive:!1},href:{rules:[15,16],inclusive:!1},click:{rules:[24,25],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,17,23,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],inclusive:!0}}};return _})();M.lexer=I;function A(){this.yy={}}return o(A,"Parser"),A.prototype=M,M.Parser=A,new A})();yW.parser=yW;w4e=yW});var S4e=ar((vW,xW)=>{"use strict";(function(t,e){typeof vW=="object"&&typeof xW<"u"?xW.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs_plugin_isoWeek=e()})(vW,(function(){"use strict";var t="day";return function(e,r,i){var n=o(function(l){return l.add(4-l.isoWeekday(),t)},"a"),a=r.prototype;a.isoWeekYear=function(){return n(this).year()},a.isoWeek=function(l){if(!this.$utils().u(l))return this.add(7*(l-this.isoWeek()),t);var u,h,f,d,p=n(this),m=(u=this.isoWeekYear(),h=this.$u,f=(h?i.utc:i)().year(u).startOf("year"),d=4-f.isoWeekday(),f.isoWeekday()>4&&(d+=7),f.add(d,t));return p.diff(m,"week")+1},a.isoWeekday=function(l){return this.$utils().u(l)?this.day()||7:this.day(this.day()%7?l:l-7)};var s=a.startOf;a.startOf=function(l,u){var h=this.$utils(),f=!!h.u(u)||u;return h.p(l)==="isoweek"?f?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):s.bind(this)(l,u)}}}))});var A4e=ar((bW,TW)=>{"use strict";(function(t,e){typeof bW=="object"&&typeof TW<"u"?TW.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs_plugin_customParseFormat=e()})(bW,(function(){"use strict";var t={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},e=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,r=/\d/,i=/\d\d/,n=/\d\d?/,a=/\d*[^-_:/,()\s\d]+/,s={},l=o(function(g){return(g=+g)+(g>68?1900:2e3)},"a"),u=o(function(g){return function(y){this[g]=+y}},"f"),h=[/[+-]\d\d:?(\d\d)?|Z/,function(g){(this.zone||(this.zone={})).offset=(function(y){if(!y||y==="Z")return 0;var v=y.match(/([+-]|\d\d)/g),x=60*v[1]+(+v[2]||0);return x===0?0:v[0]==="+"?-x:x})(g)}],f=o(function(g){var y=s[g];return y&&(y.indexOf?y:y.s.concat(y.f))},"u"),d=o(function(g,y){var v,x=s.meridiem;if(x){for(var b=1;b<=24;b+=1)if(g.indexOf(x(b,0,y))>-1){v=b>12;break}}else v=g===(y?"pm":"PM");return v},"d"),p={A:[a,function(g){this.afternoon=d(g,!1)}],a:[a,function(g){this.afternoon=d(g,!0)}],Q:[r,function(g){this.month=3*(g-1)+1}],S:[r,function(g){this.milliseconds=100*+g}],SS:[i,function(g){this.milliseconds=10*+g}],SSS:[/\d{3}/,function(g){this.milliseconds=+g}],s:[n,u("seconds")],ss:[n,u("seconds")],m:[n,u("minutes")],mm:[n,u("minutes")],H:[n,u("hours")],h:[n,u("hours")],HH:[n,u("hours")],hh:[n,u("hours")],D:[n,u("day")],DD:[i,u("day")],Do:[a,function(g){var y=s.ordinal,v=g.match(/\d+/);if(this.day=v[0],y)for(var x=1;x<=31;x+=1)y(x).replace(/\[|\]/g,"")===g&&(this.day=x)}],w:[n,u("week")],ww:[i,u("week")],M:[n,u("month")],MM:[i,u("month")],MMM:[a,function(g){var y=f("months"),v=(f("monthsShort")||y.map((function(x){return x.slice(0,3)}))).indexOf(g)+1;if(v<1)throw new Error;this.month=v%12||v}],MMMM:[a,function(g){var y=f("months").indexOf(g)+1;if(y<1)throw new Error;this.month=y%12||y}],Y:[/[+-]?\d+/,u("year")],YY:[i,function(g){this.year=l(g)}],YYYY:[/\d{4}/,u("year")],Z:h,ZZ:h};function m(g){var y,v;y=g,v=s&&s.formats;for(var x=(g=y.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(S,L,M){var I=M&&M.toUpperCase();return L||v[M]||t[M]||v[I].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,(function(A,_,D){return _||D.slice(1)}))}))).match(e),b=x.length,T=0;T-1)return new Date((R==="X"?1e3:1)*N);var $=m(R)(N),z=$.year,F=$.month,V=$.day,H=$.hours,X=$.minutes,W=$.seconds,Z=$.milliseconds,Y=$.zone,ae=$.week,J=new Date,ee=V||(z||F?1:J.getDate()),re=z||J.getFullYear(),te=0;z&&!F||(te=F>0?F-1:J.getMonth());var be,de=H||0,Ee=X||0,Ne=W||0,we=Z||0;return Y?new Date(Date.UTC(re,te,ee,de,Ee,Ne,we+60*Y.offset*1e3)):B?new Date(Date.UTC(re,te,ee,de,Ee,Ne,we)):(be=new Date(re,te,ee,de,Ee,Ne,we),ae&&(be=O(be).week(ae).toDate()),be)}catch{return new Date("")}})(w,E,k,v),this.init(),I&&I!==!0&&(this.$L=this.locale(I).$L),M&&w!=this.format(E)&&(this.$d=new Date("")),s={}}else if(E instanceof Array)for(var A=E.length,_=1;_<=A;_+=1){C[1]=E[_-1];var D=v.apply(this,C);if(D.isValid()){this.$d=D.$d,this.$L=D.$L,this.init();break}_===A&&(this.$d=new Date(""))}else b.call(this,T)}}}))});var _4e=ar((kW,CW)=>{"use strict";(function(t,e){typeof kW=="object"&&typeof CW<"u"?CW.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs_plugin_advancedFormat=e()})(kW,(function(){"use strict";return function(t,e){var r=e.prototype,i=r.format;r.format=function(n){var a=this,s=this.$locale();if(!this.isValid())return i.bind(this)(n);var l=this.$utils(),u=(n||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,(function(h){switch(h){case"Q":return Math.ceil((a.$M+1)/3);case"Do":return s.ordinal(a.$D);case"gggg":return a.weekYear();case"GGGG":return a.isoWeekYear();case"wo":return s.ordinal(a.week(),"W");case"w":case"ww":return l.s(a.week(),h==="w"?1:2,"0");case"W":case"WW":return l.s(a.isoWeek(),h==="W"?1:2,"0");case"k":case"kk":return l.s(String(a.$H===0?24:a.$H),h==="k"?1:2,"0");case"X":return Math.floor(a.$d.getTime()/1e3);case"x":return a.$d.getTime();case"z":return"["+a.offsetName()+"]";case"zzz":return"["+a.offsetName("long")+"]";default:return h}}));return i.bind(this)(u)}}}))});function W4e(t,e,r){let i=!0;for(;i;)i=!1,r.forEach(function(n){let a="^\\s*"+n+"\\s*$",s=new RegExp(a);t[0].match(s)&&(e[n]=!0,t.shift(1),i=!0)})}var R4e,fl,N4e,I4e,M4e,D4e,lh,AW,_W,DW,SC,AC,LW,RW,s_,Xv,NW,O4e,IW,Yv,_C,MW,OW,o_,wW,_ct,Dct,Lct,Rct,Nct,Ict,Mct,Oct,Pct,Bct,Fct,$ct,zct,Gct,Vct,qct,Wct,Uct,Hct,Yct,jct,Xct,Kct,Qct,P4e,Zct,Jct,eut,B4e,tut,EW,F4e,$4e,n_,jv,rut,iut,SW,a_,Ta,z4e,nut,sg,aut,L4e,sut,G4e,out,V4e,lut,cut,q4e,U4e=P(()=>{"use strict";R4e=Wa(s1(),1),fl=Wa(c4(),1),N4e=Wa(S4e(),1),I4e=Wa(A4e(),1),M4e=Wa(_4e(),1);bt();Ut();er();Ki();fl.default.extend(N4e.default);fl.default.extend(I4e.default);fl.default.extend(M4e.default);D4e={friday:5,saturday:6},lh="",AW="",DW="",SC=[],AC=[],LW=new Map,RW=[],s_=[],Xv="",NW="",O4e=["active","done","crit","milestone","vert"],IW=[],Yv="",_C=!1,MW=!1,OW="sunday",o_="saturday",wW=0,_ct=o(function(){RW=[],s_=[],Xv="",IW=[],n_=0,SW=void 0,a_=void 0,Ta=[],lh="",AW="",NW="",_W=void 0,DW="",SC=[],AC=[],_C=!1,MW=!1,wW=0,LW=new Map,Yv="",wr(),OW="sunday",o_="saturday"},"clear"),Dct=o(function(t){Yv=t},"setDiagramId"),Lct=o(function(t){AW=t},"setAxisFormat"),Rct=o(function(){return AW},"getAxisFormat"),Nct=o(function(t){_W=t},"setTickInterval"),Ict=o(function(){return _W},"getTickInterval"),Mct=o(function(t){DW=t},"setTodayMarker"),Oct=o(function(){return DW},"getTodayMarker"),Pct=o(function(t){lh=t},"setDateFormat"),Bct=o(function(){_C=!0},"enableInclusiveEndDates"),Fct=o(function(){return _C},"endDatesAreInclusive"),$ct=o(function(){MW=!0},"enableTopAxis"),zct=o(function(){return MW},"topAxisEnabled"),Gct=o(function(t){NW=t},"setDisplayMode"),Vct=o(function(){return NW},"getDisplayMode"),qct=o(function(){return lh},"getDateFormat"),Wct=o(function(t){SC=t.toLowerCase().split(/[\s,]+/)},"setIncludes"),Uct=o(function(){return SC},"getIncludes"),Hct=o(function(t){AC=t.toLowerCase().split(/[\s,]+/)},"setExcludes"),Yct=o(function(){return AC},"getExcludes"),jct=o(function(){return LW},"getLinks"),Xct=o(function(t){Xv=t,RW.push(t)},"addSection"),Kct=o(function(){return RW},"getSections"),Qct=o(function(){let t=L4e(),e=10,r=0;for(;!t&&r{let u=l.trim();return u==="x"||u==="X"},"isTimestampFormat")(e)&&/^\d+$/.test(r))return new Date(Number(r));let a=/^after\s+(?[\d\w- ]+)/.exec(r);if(a!==null){let l=null;for(let h of a.groups.ids.split(" ")){let f=sg(h);f!==void 0&&(!l||f.endTime>l.endTime)&&(l=f)}if(l)return l.endTime;let u=new Date;return u.setHours(0,0,0,0),u}let s=(0,fl.default)(r,e.trim(),!0);if(s.isValid())return s.toDate();{Q.debug("Invalid date:"+r),Q.debug("With date format:"+e.trim());let l=new Date(r);if(l===void 0||isNaN(l.getTime())||l.getFullYear()<-1e4||l.getFullYear()>1e4)throw new Error("Invalid date:"+r);return l}},"getStartDate"),F4e=o(function(t){let e=/^(\d+(?:\.\d+)?)([Mdhmswy]|ms)$/.exec(t.trim());return e!==null?[Number.parseFloat(e[1]),e[2]]:[NaN,"ms"]},"parseDuration"),$4e=o(function(t,e,r,i=!1){r=r.trim();let a=/^until\s+(?[\d\w- ]+)/.exec(r);if(a!==null){let f=null;for(let p of a.groups.ids.split(" ")){let m=sg(p);m!==void 0&&(!f||m.startTime{window.open(r,"_self")}),LW.set(i,r))}),G4e(t,"clickable")},"setLink"),G4e=o(function(t,e){t.split(",").forEach(function(r){let i=sg(r);i!==void 0&&i.classes.push(e)})},"setClass"),out=o(function(t,e,r){if(ge().securityLevel!=="loose"||e===void 0)return;let i=[];if(typeof r=="string"){i=r.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let a=0;a{Kt.runFunc(e,...i)})},"setClickFun"),V4e=o(function(t,e){IW.push(function(){let r=Yv?`${Yv}-${t}`:t,i=document.querySelector(`[id="${r}"]`);i!==null&&i.addEventListener("click",function(){e()})},function(){let r=Yv?`${Yv}-${t}`:t,i=document.querySelector(`[id="${r}-text"]`);i!==null&&i.addEventListener("click",function(){e()})})},"pushFun"),lut=o(function(t,e,r){t.split(",").forEach(function(i){out(i,e,r)}),G4e(t,"clickable")},"setClickEvent"),cut=o(function(t){IW.forEach(function(e){e(t)})},"bindFunctions"),q4e={getConfig:o(()=>ge().gantt,"getConfig"),clear:_ct,setDateFormat:Pct,getDateFormat:qct,enableInclusiveEndDates:Bct,endDatesAreInclusive:Fct,enableTopAxis:$ct,topAxisEnabled:zct,setAxisFormat:Lct,getAxisFormat:Rct,setTickInterval:Nct,getTickInterval:Ict,setTodayMarker:Mct,getTodayMarker:Oct,setAccTitle:Ar,getAccTitle:Dr,setDiagramTitle:Mr,getDiagramTitle:Nr,setDiagramId:Dct,setDisplayMode:Gct,getDisplayMode:Vct,setAccDescription:Lr,getAccDescription:Rr,addSection:Xct,getSections:Kct,getTasks:Qct,addTask:nut,findTaskById:sg,addTaskOrg:aut,setIncludes:Wct,getIncludes:Uct,setExcludes:Hct,getExcludes:Yct,setClickEvent:lut,setLink:sut,getLinks:jct,bindFunctions:cut,parseDuration:F4e,isInvalidDate:P4e,setWeekday:Zct,getWeekday:Jct,setWeekend:eut};o(W4e,"getTaskTags")});var H4e=ar((PW,BW)=>{"use strict";(function(t,e){typeof PW=="object"&&typeof BW<"u"?BW.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs_plugin_duration=e()})(PW,(function(){"use strict";var t,e,r=1e3,i=6e4,n=36e5,a=864e5,s=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,l=31536e6,u=2628e6,h=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/,f={years:l,months:u,days:a,hours:n,minutes:i,seconds:r,milliseconds:1,weeks:6048e5},d=o(function(w){return w instanceof b},"c"),p=o(function(w,k,C){return new b(w,C,k.$l)},"f"),m=o(function(w){return e.p(w)+"s"},"m"),g=o(function(w){return w<0},"l"),y=o(function(w){return g(w)?Math.ceil(w):Math.floor(w)},"$"),v=o(function(w){return Math.abs(w)},"y"),x=o(function(w,k){return w?g(w)?{negative:!0,format:""+v(w)+k}:{negative:!1,format:""+w+k}:{negative:!1,format:""}},"v"),b=(function(){function w(C,E,S){var L=this;if(this.$d={},this.$l=S,C===void 0&&(this.$ms=0,this.parseFromMilliseconds()),E)return p(C*f[m(E)],this);if(typeof C=="number")return this.$ms=C,this.parseFromMilliseconds(),this;if(typeof C=="object")return Object.keys(C).forEach((function(A){L.$d[m(A)]=C[A]})),this.calMilliseconds(),this;if(typeof C=="string"){var M=C.match(h);if(M){var I=M.slice(2).map((function(A){return A!=null?Number(A):0}));return this.$d.years=I[0],this.$d.months=I[1],this.$d.weeks=I[2],this.$d.days=I[3],this.$d.hours=I[4],this.$d.minutes=I[5],this.$d.seconds=I[6],this.calMilliseconds(),this}}return this}o(w,"l");var k=w.prototype;return k.calMilliseconds=function(){var C=this;this.$ms=Object.keys(this.$d).reduce((function(E,S){return E+(C.$d[S]||0)*f[S]}),0)},k.parseFromMilliseconds=function(){var C=this.$ms;this.$d.years=y(C/l),C%=l,this.$d.months=y(C/u),C%=u,this.$d.days=y(C/a),C%=a,this.$d.hours=y(C/n),C%=n,this.$d.minutes=y(C/i),C%=i,this.$d.seconds=y(C/r),C%=r,this.$d.milliseconds=C},k.toISOString=function(){var C=x(this.$d.years,"Y"),E=x(this.$d.months,"M"),S=+this.$d.days||0;this.$d.weeks&&(S+=7*this.$d.weeks);var L=x(S,"D"),M=x(this.$d.hours,"H"),I=x(this.$d.minutes,"M"),A=this.$d.seconds||0;this.$d.milliseconds&&(A+=this.$d.milliseconds/1e3,A=Math.round(1e3*A)/1e3);var _=x(A,"S"),D=C.negative||E.negative||L.negative||M.negative||I.negative||_.negative,N=M.format||I.format||_.format?"T":"",R=(D?"-":"")+"P"+C.format+E.format+L.format+N+M.format+I.format+_.format;return R==="P"||R==="-P"?"P0D":R},k.toJSON=function(){return this.toISOString()},k.format=function(C){var E=C||"YYYY-MM-DDTHH:mm:ss",S={Y:this.$d.years,YY:e.s(this.$d.years,2,"0"),YYYY:e.s(this.$d.years,4,"0"),M:this.$d.months,MM:e.s(this.$d.months,2,"0"),D:this.$d.days,DD:e.s(this.$d.days,2,"0"),H:this.$d.hours,HH:e.s(this.$d.hours,2,"0"),m:this.$d.minutes,mm:e.s(this.$d.minutes,2,"0"),s:this.$d.seconds,ss:e.s(this.$d.seconds,2,"0"),SSS:e.s(this.$d.milliseconds,3,"0")};return E.replace(s,(function(L,M){return M||String(S[L])}))},k.as=function(C){return this.$ms/f[m(C)]},k.get=function(C){var E=this.$ms,S=m(C);return S==="milliseconds"?E%=1e3:E=S==="weeks"?y(E/f[S]):this.$d[S],E||0},k.add=function(C,E,S){var L;return L=E?C*f[m(E)]:d(C)?C.$ms:p(C,this).$ms,p(this.$ms+L*(S?-1:1),this)},k.subtract=function(C,E){return this.add(C,E,!0)},k.locale=function(C){var E=this.clone();return E.$l=C,E},k.clone=function(){return p(this.$ms,this)},k.humanize=function(C){return t().add(this.$ms,"ms").locale(this.$l).fromNow(!C)},k.valueOf=function(){return this.asMilliseconds()},k.milliseconds=function(){return this.get("milliseconds")},k.asMilliseconds=function(){return this.as("milliseconds")},k.seconds=function(){return this.get("seconds")},k.asSeconds=function(){return this.as("seconds")},k.minutes=function(){return this.get("minutes")},k.asMinutes=function(){return this.as("minutes")},k.hours=function(){return this.get("hours")},k.asHours=function(){return this.as("hours")},k.days=function(){return this.get("days")},k.asDays=function(){return this.as("days")},k.weeks=function(){return this.get("weeks")},k.asWeeks=function(){return this.as("weeks")},k.months=function(){return this.get("months")},k.asMonths=function(){return this.as("months")},k.years=function(){return this.get("years")},k.asYears=function(){return this.as("years")},w})(),T=o(function(w,k,C){return w.add(k.years()*C,"y").add(k.months()*C,"M").add(k.days()*C,"d").add(k.hours()*C,"h").add(k.minutes()*C,"m").add(k.seconds()*C,"s").add(k.milliseconds()*C,"ms")},"p");return function(w,k,C){t=C,e=C().$utils(),C.duration=function(L,M){var I=C.locale();return p(L,{$l:I},M)},C.isDuration=d;var E=k.prototype.add,S=k.prototype.subtract;k.prototype.add=function(L,M){return d(L)?T(this,L,1):E.bind(this)(L,M)},k.prototype.subtract=function(L,M){return d(L)?T(this,L,-1):S.bind(this)(L,M)}}}))});var Kv,j4e,uut,Y4e,hut,Tf,FW,fut,X4e,K4e=P(()=>{"use strict";Kv=Wa(c4(),1),j4e=Wa(H4e(),1);bt();Pr();Vr();Ut();Xi();Kv.default.extend(j4e.default);uut=o(function(){Q.debug("Something is calling, setConf, remove the call")},"setConf"),Y4e={monday:jf,tuesday:Zw,wednesday:Jw,thursday:gu,friday:e3,saturday:t3,sunday:xc},hut=o((t,e)=>{let r=[...t].map(()=>-1/0),i=[...t].sort((a,s)=>a.startTime-s.startTime||a.order-s.order),n=0;for(let a of i)for(let s=0;s=r[s]){r[s]=a.endTime,a.order=s+e,s>n&&(n=s);break}return n},"getMaxIntersections"),FW=1e4,fut=o(function(t,e,r,i){let n=ge().gantt;i.db.setDiagramId(e);let a=ge().securityLevel,s;a==="sandbox"&&(s=Ze("#i"+e));let l=a==="sandbox"?Ze(s.nodes()[0].contentDocument.body):Ze("body"),u=a==="sandbox"?s.nodes()[0].contentDocument:document,h=u.getElementById(e);Tf=h.parentElement.offsetWidth,Tf===void 0&&(Tf=1200),n.useWidth!==void 0&&(Tf=n.useWidth);let f=i.db.getTasks(),d=[];for(let L of f)d.push(L.type);d=S(d);let p={},m=2*n.topPadding;if(i.db.getDisplayMode()==="compact"||n.displayMode==="compact"){let L={};for(let I of f)L[I.section]===void 0?L[I.section]=[I]:L[I.section].push(I);let M=0;for(let I of Object.keys(L)){let A=hut(L[I],M)+1;M+=A,m+=A*(n.barHeight+n.barGap),p[I]=A}}else{m+=f.length*(n.barHeight+n.barGap);for(let L of d)p[L]=f.filter(M=>M.type===L).length}h.setAttribute("viewBox","0 0 "+Tf+" "+m);let g=l.select(`[id="${e}"]`),y=n3().domain([cw(f,function(L){return L.startTime}),lw(f,function(L){return L.endTime})]).rangeRound([0,Tf-n.leftPadding-n.rightPadding]);function v(L,M){let I=L.startTime,A=M.startTime,_=0;return I>A?_=1:IF.vert===V.vert?0:F.vert?1:-1);let B=[...new Set(L.map(F=>F.order))].map(F=>L.find(V=>V.order===F));g.append("g").selectAll("rect").data(B).enter().append("rect").attr("x",0).attr("y",function(F,V){return V=F.order,V*M+I-2}).attr("width",function(){return N-n.rightPadding/2}).attr("height",M).attr("class",function(F){for(let[V,H]of d.entries())if(F.type===H)return"section section"+V%n.numberSectionStyles;return"section section0"}).enter();let O=g.append("g").selectAll("rect").data(L).enter(),$=i.db.getLinks();if(O.append("rect").attr("id",function(F){return e+"-"+F.id}).attr("rx",3).attr("ry",3).attr("x",function(F){return F.milestone?y(F.startTime)+A+.5*(y(F.endTime)-y(F.startTime))-.5*_:y(F.startTime)+A}).attr("y",function(F,V){return V=F.order,F.vert?n.gridLineStartPadding:V*M+I}).attr("width",function(F){return F.milestone?_:F.vert?.08*_:y(F.renderEndTime||F.endTime)-y(F.startTime)}).attr("height",function(F){return F.vert?f.length*(n.barHeight+n.barGap)+n.barHeight*2:_}).attr("transform-origin",function(F,V){return V=F.order,(y(F.startTime)+A+.5*(y(F.endTime)-y(F.startTime))).toString()+"px "+(V*M+I+.5*_).toString()+"px"}).attr("class",function(F){let V="task",H="";F.classes.length>0&&(H=F.classes.join(" "));let X=0;for(let[Z,Y]of d.entries())F.type===Y&&(X=Z%n.numberSectionStyles);let W="";return F.active?F.crit?W+=" activeCrit":W=" active":F.done?F.crit?W=" doneCrit":W=" done":F.crit&&(W+=" crit"),W.length===0&&(W=" task"),F.milestone&&(W=" milestone "+W),F.vert&&(W=" vert "+W),W+=X,W+=" "+H,V+W}),O.append("text").attr("id",function(F){return e+"-"+F.id+"-text"}).text(function(F){return F.task}).attr("font-size",n.fontSize).attr("x",function(F){let V=y(F.startTime),H=y(F.renderEndTime||F.endTime);if(F.milestone&&(V+=.5*(y(F.endTime)-y(F.startTime))-.5*_,H=V+_),F.vert)return y(F.startTime)+A;let X=this.getBBox().width;return X>H-V?H+X+1.5*n.leftPadding>N?V+A-5:H+A+5:(H-V)/2+V+A}).attr("y",function(F,V){return F.vert?n.gridLineStartPadding+f.length*(n.barHeight+n.barGap)+60:(V=F.order,V*M+n.barHeight/2+(n.fontSize/2-2)+I)}).attr("text-height",_).attr("class",function(F){let V=y(F.startTime),H=y(F.endTime);F.milestone&&(H=V+_);let X=this.getBBox().width,W="";F.classes.length>0&&(W=F.classes.join(" "));let Z=0;for(let[ae,J]of d.entries())F.type===J&&(Z=ae%n.numberSectionStyles);let Y="";return F.active&&(F.crit?Y="activeCritText"+Z:Y="activeText"+Z),F.done?F.crit?Y=Y+" doneCritText"+Z:Y=Y+" doneText"+Z:F.crit&&(Y=Y+" critText"+Z),F.milestone&&(Y+=" milestoneText"),F.vert&&(Y+=" vertText"),X>H-V?H+X+1.5*n.leftPadding>N?W+" taskTextOutsideLeft taskTextOutside"+Z+" "+Y:W+" taskTextOutsideRight taskTextOutside"+Z+" "+Y+" width-"+X:W+" taskText taskText"+Z+" "+Y+" width-"+X}),ge().securityLevel==="sandbox"){let F;F=Ze("#i"+e);let V=F.nodes()[0].contentDocument;O.filter(function(H){return $.has(H.id)}).each(function(H){var X=V.querySelector("#"+CSS.escape(e+"-"+H.id)),W=V.querySelector("#"+CSS.escape(e+"-"+H.id+"-text"));let Z=X.parentNode;var Y=V.createElement("a");Y.setAttribute("xlink:href",$.get(H.id)),Y.setAttribute("target","_top"),Z.appendChild(Y),Y.appendChild(X),Y.appendChild(W)})}}o(b,"drawRects");function T(L,M,I,A,_,D,N,R){if(N.length===0&&R.length===0)return;let B,O;for(let{startTime:X,endTime:W}of D)(B===void 0||XO)&&(O=W);if(!B||!O)return;if((0,Kv.default)(O).diff((0,Kv.default)(B),"year")>5){Q.warn("The difference between the min and max time is more than 5 years. This will cause performance issues. Skipping drawing exclude days.");return}let $=i.db.getDateFormat(),z=[],F=null,V=(0,Kv.default)(B);for(;V.valueOf()<=O;)i.db.isInvalidDate(V,$,N,R)?F?F.end=V:F={start:V,end:V}:F&&(z.push(F),F=null),V=V.add(1,"d");g.append("g").selectAll("rect").data(z).enter().append("rect").attr("id",X=>e+"-exclude-"+X.start.format("YYYY-MM-DD")).attr("x",X=>y(X.start.startOf("day"))+I).attr("y",n.gridLineStartPadding).attr("width",X=>y(X.end.endOf("day"))-y(X.start.startOf("day"))).attr("height",_-M-n.gridLineStartPadding).attr("transform-origin",function(X,W){return(y(X.start)+I+.5*(y(X.end)-y(X.start))).toString()+"px "+(W*L+.5*_).toString()+"px"}).attr("class","exclude-range")}o(T,"drawExcludeDays");function w(L,M,I,A){if(I<=0||L>M)return 1/0;let _=M-L,D=Kv.default.duration({[A??"day"]:I}).asMilliseconds();return D<=0?1/0:Math.ceil(_/D)}o(w,"getEstimatedTickCount");function k(L,M,I,A){let _=i.db.getDateFormat(),D=i.db.getAxisFormat(),N;D?N=D:_==="D"?N="%d":N=n.axisFormat??"%Y-%m-%d";let R=LL(y).tickSize(-A+M+n.gridLineStartPadding).tickFormat(p0(N)),O=/^([1-9]\d*)(millisecond|second|minute|hour|day|week|month)$/.exec(i.db.getTickInterval()||n.tickInterval);if(O!==null){let $=parseInt(O[1],10);if(isNaN($)||$<=0)Q.warn(`Invalid tick interval value: "${O[1]}". Skipping custom tick interval.`);else{let z=O[2],F=i.db.getWeekday()||n.weekday,V=y.domain(),H=V[0],X=V[1],W=w(H,X,$,z);if(W>FW)Q.warn(`The tick interval "${$}${z}" would generate ${W} ticks, which exceeds the maximum allowed (${FW}). This may indicate an invalid date or time range. Skipping custom tick interval.`);else switch(z){case"millisecond":R.ticks(pu.every($));break;case"second":R.ticks(Xo.every($));break;case"minute":R.ticks(Rh.every($));break;case"hour":R.ticks(Nh.every($));break;case"day":R.ticks(Sl.every($));break;case"week":R.ticks(Y4e[F].every($));break;case"month":R.ticks(Ih.every($));break}}}if(g.append("g").attr("class","grid").attr("transform","translate("+L+", "+(A-50)+")").call(R).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10).attr("dy","1em"),i.db.topAxisEnabled()||n.topAxis){let $=DL(y).tickSize(-A+M+n.gridLineStartPadding).tickFormat(p0(N));if(O!==null){let z=parseInt(O[1],10);if(isNaN(z)||z<=0)Q.warn(`Invalid tick interval value: "${O[1]}". Skipping custom tick interval.`);else{let F=O[2],V=i.db.getWeekday()||n.weekday,H=y.domain(),X=H[0],W=H[1];if(w(X,W,z,F)<=FW)switch(F){case"millisecond":$.ticks(pu.every(z));break;case"second":$.ticks(Xo.every(z));break;case"minute":$.ticks(Rh.every(z));break;case"hour":$.ticks(Nh.every(z));break;case"day":$.ticks(Sl.every(z));break;case"week":$.ticks(Y4e[V].every(z));break;case"month":$.ticks(Ih.every(z));break}}}g.append("g").attr("class","grid").attr("transform","translate("+L+", "+M+")").call($).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10)}}o(k,"makeGrid");function C(L,M){let I=0,A=Object.keys(p).map(_=>[_,p[_]]);g.append("g").selectAll("text").data(A).enter().append(function(_){let D=_[0].split(lt.lineBreakRegex),N=-(D.length-1)/2,R=u.createElementNS("http://www.w3.org/2000/svg","text");R.setAttribute("dy",N+"em");for(let[B,O]of D.entries()){let $=u.createElementNS("http://www.w3.org/2000/svg","tspan");$.setAttribute("alignment-baseline","central"),$.setAttribute("x","10"),B>0&&$.setAttribute("dy","1em"),$.textContent=O,R.appendChild($)}return R}).attr("x",10).attr("y",function(_,D){if(D>0)for(let N=0;N{"use strict";dut=o(t=>` + .mermaid-main-font { + font-family: ${t.fontFamily}; + } + + .exclude-range { + fill: ${t.excludeBkgColor}; + } + + .section { + stroke: none; + opacity: 0.2; + } + + .section0 { + fill: ${t.sectionBkgColor}; + } + + .section2 { + fill: ${t.sectionBkgColor2}; + } + + .section1, + .section3 { + fill: ${t.altSectionBkgColor}; + opacity: 0.2; + } + + .sectionTitle0 { + fill: ${t.titleColor}; + } + + .sectionTitle1 { + fill: ${t.titleColor}; + } + + .sectionTitle2 { + fill: ${t.titleColor}; + } + + .sectionTitle3 { + fill: ${t.titleColor}; + } + + .sectionTitle { + text-anchor: start; + font-family: ${t.fontFamily}; + } + + + /* Grid and axis */ + + .grid .tick { + stroke: ${t.gridColor}; + opacity: 0.8; + shape-rendering: crispEdges; + } + + .grid .tick text { + font-family: ${t.fontFamily}; + fill: ${t.textColor}; + } + + .grid path { + stroke-width: 0; + } + + + /* Today line */ + + .today { + fill: none; + stroke: ${t.todayLineColor}; + stroke-width: 2px; + } + + + /* Task styling */ + + /* Default task */ + + .task { + stroke-width: 2; + } + + .taskText { + text-anchor: middle; + font-family: ${t.fontFamily}; + } + + .taskTextOutsideRight { + fill: ${t.taskTextDarkColor}; + text-anchor: start; + font-family: ${t.fontFamily}; + } + + .taskTextOutsideLeft { + fill: ${t.taskTextDarkColor}; + text-anchor: end; + } + + + /* Special case clickable */ + + .task.clickable { + cursor: pointer; + } + + .taskText.clickable { + cursor: pointer; + fill: ${t.taskTextClickableColor} !important; + font-weight: bold; + } + + .taskTextOutsideLeft.clickable { + cursor: pointer; + fill: ${t.taskTextClickableColor} !important; + font-weight: bold; + } + + .taskTextOutsideRight.clickable { + cursor: pointer; + fill: ${t.taskTextClickableColor} !important; + font-weight: bold; + } + + + /* Specific task settings for the sections*/ + + .taskText0, + .taskText1, + .taskText2, + .taskText3 { + fill: ${t.taskTextColor}; + } + + .task0, + .task1, + .task2, + .task3 { + fill: ${t.taskBkgColor}; + stroke: ${t.taskBorderColor}; + } + + .taskTextOutside0, + .taskTextOutside2 + { + fill: ${t.taskTextOutsideColor}; + } + + .taskTextOutside1, + .taskTextOutside3 { + fill: ${t.taskTextOutsideColor}; + } + + + /* Active task */ + + .active0, + .active1, + .active2, + .active3 { + fill: ${t.activeTaskBkgColor}; + stroke: ${t.activeTaskBorderColor}; + } + + .activeText0, + .activeText1, + .activeText2, + .activeText3 { + fill: ${t.taskTextDarkColor} !important; + } + + + /* Completed task */ + + .done0, + .done1, + .done2, + .done3 { + stroke: ${t.doneTaskBorderColor}; + fill: ${t.doneTaskBkgColor}; + stroke-width: 2; + } + + .doneText0, + .doneText1, + .doneText2, + .doneText3 { + fill: ${t.taskTextDarkColor} !important; + } + + /* Done task text displayed outside the bar sits against the diagram background, + not against the done-task bar, so it must use the outside/contrast color. */ + .doneText0.taskTextOutsideLeft, + .doneText0.taskTextOutsideRight, + .doneText1.taskTextOutsideLeft, + .doneText1.taskTextOutsideRight, + .doneText2.taskTextOutsideLeft, + .doneText2.taskTextOutsideRight, + .doneText3.taskTextOutsideLeft, + .doneText3.taskTextOutsideRight { + fill: ${t.taskTextOutsideColor} !important; + } + + + /* Tasks on the critical line */ + + .crit0, + .crit1, + .crit2, + .crit3 { + stroke: ${t.critBorderColor}; + fill: ${t.critBkgColor}; + stroke-width: 2; + } + + .activeCrit0, + .activeCrit1, + .activeCrit2, + .activeCrit3 { + stroke: ${t.critBorderColor}; + fill: ${t.activeTaskBkgColor}; + stroke-width: 2; + } + + .doneCrit0, + .doneCrit1, + .doneCrit2, + .doneCrit3 { + stroke: ${t.critBorderColor}; + fill: ${t.doneTaskBkgColor}; + stroke-width: 2; + cursor: pointer; + shape-rendering: crispEdges; + } + + .milestone { + transform: rotate(45deg) scale(0.8,0.8); + } + + .milestoneText { + font-style: italic; + } + .doneCritText0, + .doneCritText1, + .doneCritText2, + .doneCritText3 { + fill: ${t.taskTextDarkColor} !important; + } + + /* Done-crit task text outside the bar \u2014 same reasoning as doneText above. */ + .doneCritText0.taskTextOutsideLeft, + .doneCritText0.taskTextOutsideRight, + .doneCritText1.taskTextOutsideLeft, + .doneCritText1.taskTextOutsideRight, + .doneCritText2.taskTextOutsideLeft, + .doneCritText2.taskTextOutsideRight, + .doneCritText3.taskTextOutsideLeft, + .doneCritText3.taskTextOutsideRight { + fill: ${t.taskTextOutsideColor} !important; + } + + .vert { + stroke: ${t.vertLineColor}; + } + + .vertText { + font-size: 15px; + text-anchor: middle; + fill: ${t.vertLineColor} !important; + } + + .activeCritText0, + .activeCritText1, + .activeCritText2, + .activeCritText3 { + fill: ${t.taskTextDarkColor} !important; + } + + .titleText { + text-anchor: middle; + font-size: 18px; + fill: ${t.titleColor||t.textColor}; + font-family: ${t.fontFamily}; + } +`,"getStyles"),Q4e=dut});var J4e={};ur(J4e,{diagram:()=>put});var put,ewe=P(()=>{"use strict";E4e();U4e();K4e();Z4e();put={parser:w4e,db:q4e,renderer:X4e,styles:Q4e}});var iwe,nwe=P(()=>{"use strict";sh();bt();iwe={parse:o(async t=>{let e=await ba("info",t);Q.debug(e)},"parse")}});var vut,xut,awe,swe=P(()=>{"use strict";vut={version:"11.14.0"},xut=o(()=>vut.version,"getVersion"),awe={getVersion:xut}});var Fi,ro=P(()=>{"use strict";Pr();Ut();Fi=o(t=>{let{securityLevel:e}=ge(),r=Ze("body");if(e==="sandbox"){let a=Ze(`#i${t}`).node()?.contentDocument??document;r=Ze(a.body)}return r.select(`#${t}`)},"selectSvgElement")});var but,owe,lwe=P(()=>{"use strict";bt();ro();Xi();but=o((t,e,r)=>{Q.debug(`rendering info diagram +`+t);let i=Fi(e);Hr(i,100,400,!0),i.append("g").append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size",32).style("text-anchor","middle").text(`v${r}`)},"draw"),owe={draw:but}});var cwe={};ur(cwe,{diagram:()=>Tut});var Tut,uwe=P(()=>{"use strict";nwe();swe();lwe();Tut={parser:iwe,db:awe,renderer:owe}});var dwe,$W,l_,zW,wut,Eut,Sut,Aut,_ut,Dut,Lut,c_,GW=P(()=>{"use strict";bt();Ki();wa();dwe=fr.pie,$W={sections:new Map,showData:!1,config:dwe},l_=$W.sections,zW=$W.showData,wut=structuredClone(dwe),Eut=o(()=>structuredClone(wut),"getConfig"),Sut=o(()=>{l_=new Map,zW=$W.showData,wr()},"clear"),Aut=o(({label:t,value:e})=>{if(e<0)throw new Error(`"${t}" has invalid value: ${e}. Negative values are not allowed in pie charts. All slice values must be >= 0.`);l_.has(t)||(l_.set(t,e),Q.debug(`added new section: ${t}, with value: ${e}`))},"addSection"),_ut=o(()=>l_,"getSections"),Dut=o(t=>{zW=t},"setShowData"),Lut=o(()=>zW,"getShowData"),c_={getConfig:Eut,clear:Sut,setDiagramTitle:Mr,getDiagramTitle:Nr,setAccTitle:Ar,getAccTitle:Dr,setAccDescription:Lr,getAccDescription:Rr,addSection:Aut,getSections:_ut,setShowData:Dut,getShowData:Lut}});var Rut,pwe,mwe=P(()=>{"use strict";sh();bt();vf();GW();Rut=o((t,e)=>{Ss(t,e),e.setShowData(t.showData),t.sections.map(e.addSection)},"populateDb"),pwe={parse:o(async t=>{let e=await ba("pie",t);Q.debug(e),Rut(e,c_)},"parse")}});var Nut,gwe,ywe=P(()=>{"use strict";Nut=o(t=>` + .pieCircle{ + stroke: ${t.pieStrokeColor}; + stroke-width : ${t.pieStrokeWidth}; + opacity : ${t.pieOpacity}; + } + .pieOuterCircle{ + stroke: ${t.pieOuterStrokeColor}; + stroke-width: ${t.pieOuterStrokeWidth}; + fill: none; + } + .pieTitleText { + text-anchor: middle; + font-size: ${t.pieTitleTextSize}; + fill: ${t.pieTitleTextColor}; + font-family: ${t.fontFamily}; + } + .slice { + font-family: ${t.fontFamily}; + fill: ${t.pieSectionTextColor}; + font-size:${t.pieSectionTextSize}; + // fill: white; + } + .legend text { + fill: ${t.pieLegendTextColor}; + font-family: ${t.fontFamily}; + font-size: ${t.pieLegendTextSize}; + } +`,"getStyles"),gwe=Nut});var Iut,Mut,vwe,xwe=P(()=>{"use strict";Pr();Ut();bt();ro();Xi();er();Iut=o(t=>{let e=[...t.values()].reduce((n,a)=>n+a,0),r=[...t.entries()].map(([n,a])=>({label:n,value:a})).filter(n=>n.value/e*100>=1);return u3().value(n=>n.value).sort(null)(r)},"createPieArcs"),Mut=o((t,e,r,i)=>{Q.debug(`rendering pie chart +`+t);let n=i.db,a=ge(),s=fi(n.getConfig(),a.pie),l=40,u=18,h=4,f=450,d=f,p=Fi(e),m=p.append("g");m.attr("transform","translate("+d/2+","+f/2+")");let{themeVariables:g}=a,[y]=$s(g.pieOuterStrokeWidth);y??=2;let v=s.textPosition,x=Math.min(d,f)/2-l,b=kc().innerRadius(0).outerRadius(x),T=kc().innerRadius(x*v).outerRadius(x*v);m.append("circle").attr("cx",0).attr("cy",0).attr("r",x+y/2).attr("class","pieOuterCircle");let w=n.getSections(),k=Iut(w),C=[g.pie1,g.pie2,g.pie3,g.pie4,g.pie5,g.pie6,g.pie7,g.pie8,g.pie9,g.pie10,g.pie11,g.pie12],E=0;w.forEach(F=>{E+=F});let S=k.filter(F=>(F.data.value/E*100).toFixed(0)!=="0"),L=jo(C).domain([...w.keys()]);m.selectAll("mySlices").data(S).enter().append("path").attr("d",b).attr("fill",F=>L(F.data.label)).attr("class","pieCircle"),m.selectAll("mySlices").data(S).enter().append("text").text(F=>(F.data.value/E*100).toFixed(0)+"%").attr("transform",F=>"translate("+T.centroid(F)+")").style("text-anchor","middle").attr("class","slice");let M=m.append("text").text(n.getDiagramTitle()).attr("x",0).attr("y",-(f-50)/2).attr("class","pieTitleText"),I=[...w.entries()].map(([F,V])=>({label:F,value:V})),A=m.selectAll(".legend").data(I).enter().append("g").attr("class","legend").attr("transform",(F,V)=>{let H=u+h,X=H*I.length/2,W=12*u,Z=V*H-X;return"translate("+W+","+Z+")"});A.append("rect").attr("width",u).attr("height",u).style("fill",F=>L(F.label)).style("stroke",F=>L(F.label)),A.append("text").attr("x",u+h).attr("y",u-h).text(F=>n.getShowData()?`${F.label} [${F.value}]`:F.label);let _=Math.max(...A.selectAll("text").nodes().map(F=>F?.getBoundingClientRect().width??0)),D=d+l+u+h+_,N=M.node()?.getBoundingClientRect().width??0,R=d/2-N/2,B=d/2+N/2,O=Math.min(0,R),z=Math.max(D,B)-O;p.attr("viewBox",`${O} 0 ${z} ${f}`),Hr(p,f,z,s.useMaxWidth)},"draw"),vwe={draw:Mut}});var bwe={};ur(bwe,{diagram:()=>Out});var Out,Twe=P(()=>{"use strict";mwe();GW();ywe();xwe();Out={parser:pwe,db:c_,renderer:vwe,styles:gwe}});var VW,Cwe,wwe=P(()=>{"use strict";VW=(function(){var t=o(function(ue,G,se,le){for(se=se||{},le=ue.length;le--;se[ue[le]]=G);return se},"o"),e=[1,3],r=[1,4],i=[1,5],n=[1,6],a=[1,7],s=[1,4,5,10,12,13,14,18,25,35,37,39,41,42,48,50,51,52,53,54,55,56,57,60,61,63,64,65,66,67],l=[1,4,5,10,12,13,14,18,25,28,35,37,39,41,42,48,50,51,52,53,54,55,56,57,60,61,63,64,65,66,67],u=[55,56,57],h=[2,36],f=[1,37],d=[1,36],p=[1,38],m=[1,35],g=[1,43],y=[1,41],v=[1,14],x=[1,23],b=[1,18],T=[1,19],w=[1,20],k=[1,21],C=[1,22],E=[1,24],S=[1,25],L=[1,26],M=[1,27],I=[1,28],A=[1,29],_=[1,32],D=[1,33],N=[1,34],R=[1,39],B=[1,40],O=[1,42],$=[1,44],z=[1,62],F=[1,61],V=[4,5,8,10,12,13,14,18,44,47,49,55,56,57,63,64,65,66,67],H=[1,65],X=[1,66],W=[1,67],Z=[1,68],Y=[1,69],ae=[1,70],J=[1,71],ee=[1,72],re=[1,73],te=[1,74],be=[1,75],de=[1,76],Ee=[4,5,6,7,8,9,10,11,12,13,14,15,18],Ne=[1,90],we=[1,91],Te=[1,92],De=[1,99],$e=[1,93],pe=[1,96],Je=[1,94],Ce=[1,95],Fe=[1,97],Ue=[1,98],qe=[1,102],Me=[10,55,56,57],He=[4,5,6,8,10,11,13,17,18,19,20,55,56,57],K={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,idStringToken:3,ALPHA:4,NUM:5,NODE_STRING:6,DOWN:7,MINUS:8,DEFAULT:9,COMMA:10,COLON:11,AMP:12,BRKT:13,MULT:14,UNICODE_TEXT:15,styleComponent:16,UNIT:17,SPACE:18,STYLE:19,PCT:20,idString:21,style:22,stylesOpt:23,classDefStatement:24,CLASSDEF:25,start:26,eol:27,QUADRANT:28,document:29,line:30,statement:31,axisDetails:32,quadrantDetails:33,points:34,title:35,title_value:36,acc_title:37,acc_title_value:38,acc_descr:39,acc_descr_value:40,acc_descr_multiline_value:41,section:42,text:43,point_start:44,point_x:45,point_y:46,class_name:47,"X-AXIS":48,"AXIS-TEXT-DELIMITER":49,"Y-AXIS":50,QUADRANT_1:51,QUADRANT_2:52,QUADRANT_3:53,QUADRANT_4:54,NEWLINE:55,SEMI:56,EOF:57,alphaNumToken:58,textNoTagsToken:59,STR:60,MD_STR:61,alphaNum:62,PUNCTUATION:63,PLUS:64,EQUALS:65,DOT:66,UNDERSCORE:67,$accept:0,$end:1},terminals_:{2:"error",4:"ALPHA",5:"NUM",6:"NODE_STRING",7:"DOWN",8:"MINUS",9:"DEFAULT",10:"COMMA",11:"COLON",12:"AMP",13:"BRKT",14:"MULT",15:"UNICODE_TEXT",17:"UNIT",18:"SPACE",19:"STYLE",20:"PCT",25:"CLASSDEF",28:"QUADRANT",35:"title",36:"title_value",37:"acc_title",38:"acc_title_value",39:"acc_descr",40:"acc_descr_value",41:"acc_descr_multiline_value",42:"section",44:"point_start",45:"point_x",46:"point_y",47:"class_name",48:"X-AXIS",49:"AXIS-TEXT-DELIMITER",50:"Y-AXIS",51:"QUADRANT_1",52:"QUADRANT_2",53:"QUADRANT_3",54:"QUADRANT_4",55:"NEWLINE",56:"SEMI",57:"EOF",60:"STR",61:"MD_STR",63:"PUNCTUATION",64:"PLUS",65:"EQUALS",66:"DOT",67:"UNDERSCORE"},productions_:[0,[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[21,1],[21,2],[22,1],[22,2],[23,1],[23,3],[24,5],[26,2],[26,2],[26,2],[29,0],[29,2],[30,2],[31,0],[31,1],[31,2],[31,1],[31,1],[31,1],[31,2],[31,2],[31,2],[31,1],[31,1],[34,4],[34,5],[34,5],[34,6],[32,4],[32,3],[32,2],[32,4],[32,3],[32,2],[33,2],[33,2],[33,2],[33,2],[27,1],[27,1],[27,1],[43,1],[43,2],[43,1],[43,1],[62,1],[62,2],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[59,1],[59,1],[59,1]],performAction:o(function(G,se,le,ke,me,ye,Re){var ve=ye.length-1;switch(me){case 23:this.$=ye[ve];break;case 24:this.$=ye[ve-1]+""+ye[ve];break;case 26:this.$=ye[ve-1]+ye[ve];break;case 27:this.$=[ye[ve].trim()];break;case 28:ye[ve-2].push(ye[ve].trim()),this.$=ye[ve-2];break;case 29:this.$=ye[ve-4],ke.addClass(ye[ve-2],ye[ve]);break;case 37:this.$=[];break;case 42:this.$=ye[ve].trim(),ke.setDiagramTitle(this.$);break;case 43:this.$=ye[ve].trim(),ke.setAccTitle(this.$);break;case 44:case 45:this.$=ye[ve].trim(),ke.setAccDescription(this.$);break;case 46:ke.addSection(ye[ve].substr(8)),this.$=ye[ve].substr(8);break;case 47:ke.addPoint(ye[ve-3],"",ye[ve-1],ye[ve],[]);break;case 48:ke.addPoint(ye[ve-4],ye[ve-3],ye[ve-1],ye[ve],[]);break;case 49:ke.addPoint(ye[ve-4],"",ye[ve-2],ye[ve-1],ye[ve]);break;case 50:ke.addPoint(ye[ve-5],ye[ve-4],ye[ve-2],ye[ve-1],ye[ve]);break;case 51:ke.setXAxisLeftText(ye[ve-2]),ke.setXAxisRightText(ye[ve]);break;case 52:ye[ve-1].text+=" \u27F6 ",ke.setXAxisLeftText(ye[ve-1]);break;case 53:ke.setXAxisLeftText(ye[ve]);break;case 54:ke.setYAxisBottomText(ye[ve-2]),ke.setYAxisTopText(ye[ve]);break;case 55:ye[ve-1].text+=" \u27F6 ",ke.setYAxisBottomText(ye[ve-1]);break;case 56:ke.setYAxisBottomText(ye[ve]);break;case 57:ke.setQuadrant1Text(ye[ve]);break;case 58:ke.setQuadrant2Text(ye[ve]);break;case 59:ke.setQuadrant3Text(ye[ve]);break;case 60:ke.setQuadrant4Text(ye[ve]);break;case 64:this.$={text:ye[ve],type:"text"};break;case 65:this.$={text:ye[ve-1].text+""+ye[ve],type:ye[ve-1].type};break;case 66:this.$={text:ye[ve],type:"text"};break;case 67:this.$={text:ye[ve],type:"markdown"};break;case 68:this.$=ye[ve];break;case 69:this.$=ye[ve-1]+""+ye[ve];break}},"anonymous"),table:[{18:e,26:1,27:2,28:r,55:i,56:n,57:a},{1:[3]},{18:e,26:8,27:2,28:r,55:i,56:n,57:a},{18:e,26:9,27:2,28:r,55:i,56:n,57:a},t(s,[2,33],{29:10}),t(l,[2,61]),t(l,[2,62]),t(l,[2,63]),{1:[2,30]},{1:[2,31]},t(u,h,{30:11,31:12,24:13,32:15,33:16,34:17,43:30,58:31,1:[2,32],4:f,5:d,10:p,12:m,13:g,14:y,18:v,25:x,35:b,37:T,39:w,41:k,42:C,48:E,50:S,51:L,52:M,53:I,54:A,60:_,61:D,63:N,64:R,65:B,66:O,67:$}),t(s,[2,34]),{27:45,55:i,56:n,57:a},t(u,[2,37]),t(u,h,{24:13,32:15,33:16,34:17,43:30,58:31,31:46,4:f,5:d,10:p,12:m,13:g,14:y,18:v,25:x,35:b,37:T,39:w,41:k,42:C,48:E,50:S,51:L,52:M,53:I,54:A,60:_,61:D,63:N,64:R,65:B,66:O,67:$}),t(u,[2,39]),t(u,[2,40]),t(u,[2,41]),{36:[1,47]},{38:[1,48]},{40:[1,49]},t(u,[2,45]),t(u,[2,46]),{18:[1,50]},{4:f,5:d,10:p,12:m,13:g,14:y,43:51,58:31,60:_,61:D,63:N,64:R,65:B,66:O,67:$},{4:f,5:d,10:p,12:m,13:g,14:y,43:52,58:31,60:_,61:D,63:N,64:R,65:B,66:O,67:$},{4:f,5:d,10:p,12:m,13:g,14:y,43:53,58:31,60:_,61:D,63:N,64:R,65:B,66:O,67:$},{4:f,5:d,10:p,12:m,13:g,14:y,43:54,58:31,60:_,61:D,63:N,64:R,65:B,66:O,67:$},{4:f,5:d,10:p,12:m,13:g,14:y,43:55,58:31,60:_,61:D,63:N,64:R,65:B,66:O,67:$},{4:f,5:d,10:p,12:m,13:g,14:y,43:56,58:31,60:_,61:D,63:N,64:R,65:B,66:O,67:$},{4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:F,44:[1,57],47:[1,58],58:60,59:59,63:N,64:R,65:B,66:O,67:$},t(V,[2,64]),t(V,[2,66]),t(V,[2,67]),t(V,[2,70]),t(V,[2,71]),t(V,[2,72]),t(V,[2,73]),t(V,[2,74]),t(V,[2,75]),t(V,[2,76]),t(V,[2,77]),t(V,[2,78]),t(V,[2,79]),t(V,[2,80]),t(s,[2,35]),t(u,[2,38]),t(u,[2,42]),t(u,[2,43]),t(u,[2,44]),{3:64,4:H,5:X,6:W,7:Z,8:Y,9:ae,10:J,11:ee,12:re,13:te,14:be,15:de,21:63},t(u,[2,53],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:F,49:[1,77],63:N,64:R,65:B,66:O,67:$}),t(u,[2,56],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:F,49:[1,78],63:N,64:R,65:B,66:O,67:$}),t(u,[2,57],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:F,63:N,64:R,65:B,66:O,67:$}),t(u,[2,58],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:F,63:N,64:R,65:B,66:O,67:$}),t(u,[2,59],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:F,63:N,64:R,65:B,66:O,67:$}),t(u,[2,60],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:F,63:N,64:R,65:B,66:O,67:$}),{45:[1,79]},{44:[1,80]},t(V,[2,65]),t(V,[2,81]),t(V,[2,82]),t(V,[2,83]),{3:82,4:H,5:X,6:W,7:Z,8:Y,9:ae,10:J,11:ee,12:re,13:te,14:be,15:de,18:[1,81]},t(Ee,[2,23]),t(Ee,[2,1]),t(Ee,[2,2]),t(Ee,[2,3]),t(Ee,[2,4]),t(Ee,[2,5]),t(Ee,[2,6]),t(Ee,[2,7]),t(Ee,[2,8]),t(Ee,[2,9]),t(Ee,[2,10]),t(Ee,[2,11]),t(Ee,[2,12]),t(u,[2,52],{58:31,43:83,4:f,5:d,10:p,12:m,13:g,14:y,60:_,61:D,63:N,64:R,65:B,66:O,67:$}),t(u,[2,55],{58:31,43:84,4:f,5:d,10:p,12:m,13:g,14:y,60:_,61:D,63:N,64:R,65:B,66:O,67:$}),{46:[1,85]},{45:[1,86]},{4:Ne,5:we,6:Te,8:De,11:$e,13:pe,16:89,17:Je,18:Ce,19:Fe,20:Ue,22:88,23:87},t(Ee,[2,24]),t(u,[2,51],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:F,63:N,64:R,65:B,66:O,67:$}),t(u,[2,54],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:F,63:N,64:R,65:B,66:O,67:$}),t(u,[2,47],{22:88,16:89,23:100,4:Ne,5:we,6:Te,8:De,11:$e,13:pe,17:Je,18:Ce,19:Fe,20:Ue}),{46:[1,101]},t(u,[2,29],{10:qe}),t(Me,[2,27],{16:103,4:Ne,5:we,6:Te,8:De,11:$e,13:pe,17:Je,18:Ce,19:Fe,20:Ue}),t(He,[2,25]),t(He,[2,13]),t(He,[2,14]),t(He,[2,15]),t(He,[2,16]),t(He,[2,17]),t(He,[2,18]),t(He,[2,19]),t(He,[2,20]),t(He,[2,21]),t(He,[2,22]),t(u,[2,49],{10:qe}),t(u,[2,48],{22:88,16:89,23:104,4:Ne,5:we,6:Te,8:De,11:$e,13:pe,17:Je,18:Ce,19:Fe,20:Ue}),{4:Ne,5:we,6:Te,8:De,11:$e,13:pe,16:89,17:Je,18:Ce,19:Fe,20:Ue,22:105},t(He,[2,26]),t(u,[2,50],{10:qe}),t(Me,[2,28],{16:103,4:Ne,5:we,6:Te,8:De,11:$e,13:pe,17:Je,18:Ce,19:Fe,20:Ue})],defaultActions:{8:[2,30],9:[2,31]},parseError:o(function(G,se){if(se.recoverable)this.trace(G);else{var le=new Error(G);throw le.hash=se,le}},"parseError"),parse:o(function(G){var se=this,le=[0],ke=[],me=[null],ye=[],Re=this.table,ve="",Oe=0,We=0,Be=0,Qe=2,ce=1,it=ye.slice.call(arguments,1),fe=Object.create(this.lexer),ut={yy:{}};for(var Nt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Nt)&&(ut.yy[Nt]=this.yy[Nt]);fe.setInput(G,ut.yy),ut.yy.lexer=fe,ut.yy.parser=this,typeof fe.yylloc>"u"&&(fe.yylloc={});var Pt=fe.yylloc;ye.push(Pt);var St=fe.options&&fe.options.ranges;typeof ut.yy.parseError=="function"?this.parseError=ut.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function It(xt){le.length=le.length-2*xt,me.length=me.length-xt,ye.length=ye.length-xt}o(It,"popStack");function ot(){var xt;return xt=ke.pop()||fe.lex()||ce,typeof xt!="number"&&(xt instanceof Array&&(ke=xt,xt=ke.pop()),xt=se.symbols_[xt]||xt),xt}o(ot,"lex");for(var ct,Dt,kt,yt,jt,hr,Qt={},Er,dr,ir,pr;;){if(kt=le[le.length-1],this.defaultActions[kt]?yt=this.defaultActions[kt]:((ct===null||typeof ct>"u")&&(ct=ot()),yt=Re[kt]&&Re[kt][ct]),typeof yt>"u"||!yt.length||!yt[0]){var Ii="";pr=[];for(Er in Re[kt])this.terminals_[Er]&&Er>Qe&&pr.push("'"+this.terminals_[Er]+"'");fe.showPosition?Ii="Parse error on line "+(Oe+1)+`: +`+fe.showPosition()+` +Expecting `+pr.join(", ")+", got '"+(this.terminals_[ct]||ct)+"'":Ii="Parse error on line "+(Oe+1)+": Unexpected "+(ct==ce?"end of input":"'"+(this.terminals_[ct]||ct)+"'"),this.parseError(Ii,{text:fe.match,token:this.terminals_[ct]||ct,line:fe.yylineno,loc:Pt,expected:pr})}if(yt[0]instanceof Array&&yt.length>1)throw new Error("Parse Error: multiple actions possible at state: "+kt+", token: "+ct);switch(yt[0]){case 1:le.push(ct),me.push(fe.yytext),ye.push(fe.yylloc),le.push(yt[1]),ct=null,Dt?(ct=Dt,Dt=null):(We=fe.yyleng,ve=fe.yytext,Oe=fe.yylineno,Pt=fe.yylloc,Be>0&&Be--);break;case 2:if(dr=this.productions_[yt[1]][1],Qt.$=me[me.length-dr],Qt._$={first_line:ye[ye.length-(dr||1)].first_line,last_line:ye[ye.length-1].last_line,first_column:ye[ye.length-(dr||1)].first_column,last_column:ye[ye.length-1].last_column},St&&(Qt._$.range=[ye[ye.length-(dr||1)].range[0],ye[ye.length-1].range[1]]),hr=this.performAction.apply(Qt,[ve,We,Oe,ut.yy,yt[1],me,ye].concat(it)),typeof hr<"u")return hr;dr&&(le=le.slice(0,-1*dr*2),me=me.slice(0,-1*dr),ye=ye.slice(0,-1*dr)),le.push(this.productions_[yt[1]][0]),me.push(Qt.$),ye.push(Qt._$),ir=Re[le[le.length-2]][le[le.length-1]],le.push(ir);break;case 3:return!0}}return!0},"parse")},oe=(function(){var ue={EOF:1,parseError:o(function(se,le){if(this.yy.parser)this.yy.parser.parseError(se,le);else throw new Error(se)},"parseError"),setInput:o(function(G,se){return this.yy=se||this.yy||{},this._input=G,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var G=this._input[0];this.yytext+=G,this.yyleng++,this.offset++,this.match+=G,this.matched+=G;var se=G.match(/(?:\r\n?|\n).*/g);return se?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),G},"input"),unput:o(function(G){var se=G.length,le=G.split(/(?:\r\n?|\n)/g);this._input=G+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-se),this.offset-=se;var ke=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),le.length-1&&(this.yylineno-=le.length-1);var me=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:le?(le.length===ke.length?this.yylloc.first_column:0)+ke[ke.length-le.length].length-le[0].length:this.yylloc.first_column-se},this.options.ranges&&(this.yylloc.range=[me[0],me[0]+this.yyleng-se]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(G){this.unput(this.match.slice(G))},"less"),pastInput:o(function(){var G=this.matched.substr(0,this.matched.length-this.match.length);return(G.length>20?"...":"")+G.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var G=this.match;return G.length<20&&(G+=this._input.substr(0,20-G.length)),(G.substr(0,20)+(G.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var G=this.pastInput(),se=new Array(G.length+1).join("-");return G+this.upcomingInput()+` +`+se+"^"},"showPosition"),test_match:o(function(G,se){var le,ke,me;if(this.options.backtrack_lexer&&(me={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(me.yylloc.range=this.yylloc.range.slice(0))),ke=G[0].match(/(?:\r\n?|\n).*/g),ke&&(this.yylineno+=ke.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:ke?ke[ke.length-1].length-ke[ke.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+G[0].length},this.yytext+=G[0],this.match+=G[0],this.matches=G,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(G[0].length),this.matched+=G[0],le=this.performAction.call(this,this.yy,this,se,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),le)return le;if(this._backtrack){for(var ye in me)this[ye]=me[ye];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var G,se,le,ke;this._more||(this.yytext="",this.match="");for(var me=this._currentRules(),ye=0;yese[0].length)){if(se=le,ke=ye,this.options.backtrack_lexer){if(G=this.test_match(le,me[ye]),G!==!1)return G;if(this._backtrack){se=!1;continue}else return!1}else if(!this.options.flex)break}return se?(G=this.test_match(se,me[ke]),G!==!1?G:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var se=this.next();return se||this.lex()},"lex"),begin:o(function(se){this.conditionStack.push(se)},"begin"),popState:o(function(){var se=this.conditionStack.length-1;return se>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(se){return se=this.conditionStack.length-1-Math.abs(se||0),se>=0?this.conditionStack[se]:"INITIAL"},"topState"),pushState:o(function(se){this.begin(se)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(se,le,ke,me){var ye=me;switch(ke){case 0:break;case 1:break;case 2:return 55;case 3:break;case 4:return this.begin("title"),35;break;case 5:return this.popState(),"title_value";break;case 6:return this.begin("acc_title"),37;break;case 7:return this.popState(),"acc_title_value";break;case 8:return this.begin("acc_descr"),39;break;case 9:return this.popState(),"acc_descr_value";break;case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 48;case 14:return 50;case 15:return 49;case 16:return 51;case 17:return 52;case 18:return 53;case 19:return 54;case 20:return 25;case 21:this.begin("md_string");break;case 22:return"MD_STR";case 23:this.popState();break;case 24:this.begin("string");break;case 25:this.popState();break;case 26:return"STR";case 27:this.begin("class_name");break;case 28:return this.popState(),47;break;case 29:return this.begin("point_start"),44;break;case 30:return this.begin("point_x"),45;break;case 31:this.popState();break;case 32:this.popState(),this.begin("point_y");break;case 33:return this.popState(),46;break;case 34:return 28;case 35:return 4;case 36:return 11;case 37:return 64;case 38:return 10;case 39:return 65;case 40:return 65;case 41:return 14;case 42:return 13;case 43:return 67;case 44:return 66;case 45:return 12;case 46:return 8;case 47:return 5;case 48:return 18;case 49:return 56;case 50:return 63;case 51:return 57}},"anonymous"),rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?: *x-axis *)/i,/^(?: *y-axis *)/i,/^(?: *--+> *)/i,/^(?: *quadrant-1 *)/i,/^(?: *quadrant-2 *)/i,/^(?: *quadrant-3 *)/i,/^(?: *quadrant-4 *)/i,/^(?:classDef\b)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?::::)/i,/^(?:^\w+)/i,/^(?:\s*:\s*\[\s*)/i,/^(?:(1)|(0(.\d+)?))/i,/^(?:\s*\] *)/i,/^(?:\s*,\s*)/i,/^(?:(1)|(0(.\d+)?))/i,/^(?: *quadrantChart *)/i,/^(?:[A-Za-z]+)/i,/^(?::)/i,/^(?:\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:=)/i,/^(?:\*)/i,/^(?:#)/i,/^(?:[\_])/i,/^(?:\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\s)/i,/^(?:;)/i,/^(?:[!"#$%&'*+,-.`?\\_/])/i,/^(?:$)/i],conditions:{class_name:{rules:[28],inclusive:!1},point_y:{rules:[33],inclusive:!1},point_x:{rules:[32],inclusive:!1},point_start:{rules:[30,31],inclusive:!1},acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},title:{rules:[5],inclusive:!1},md_string:{rules:[22,23],inclusive:!1},string:{rules:[25,26],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,6,8,10,13,14,15,16,17,18,19,20,21,24,27,29,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51],inclusive:!0}}};return ue})();K.lexer=oe;function U(){this.yy={}}return o(U,"Parser"),U.prototype=K,K.Parser=U,new U})();VW.parser=VW;Cwe=VW});var io,u_,Ewe=P(()=>{"use strict";Pr();wa();bt();wg();io=Zc(),u_=class{constructor(){this.classes=new Map;this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData()}static{o(this,"QuadrantBuilder")}getDefaultData(){return{titleText:"",quadrant1Text:"",quadrant2Text:"",quadrant3Text:"",quadrant4Text:"",xAxisLeftText:"",xAxisRightText:"",yAxisBottomText:"",yAxisTopText:"",points:[]}}getDefaultConfig(){return{showXAxis:!0,showYAxis:!0,showTitle:!0,chartHeight:fr.quadrantChart?.chartWidth||500,chartWidth:fr.quadrantChart?.chartHeight||500,titlePadding:fr.quadrantChart?.titlePadding||10,titleFontSize:fr.quadrantChart?.titleFontSize||20,quadrantPadding:fr.quadrantChart?.quadrantPadding||5,xAxisLabelPadding:fr.quadrantChart?.xAxisLabelPadding||5,yAxisLabelPadding:fr.quadrantChart?.yAxisLabelPadding||5,xAxisLabelFontSize:fr.quadrantChart?.xAxisLabelFontSize||16,yAxisLabelFontSize:fr.quadrantChart?.yAxisLabelFontSize||16,quadrantLabelFontSize:fr.quadrantChart?.quadrantLabelFontSize||16,quadrantTextTopPadding:fr.quadrantChart?.quadrantTextTopPadding||5,pointTextPadding:fr.quadrantChart?.pointTextPadding||5,pointLabelFontSize:fr.quadrantChart?.pointLabelFontSize||12,pointRadius:fr.quadrantChart?.pointRadius||5,xAxisPosition:fr.quadrantChart?.xAxisPosition||"top",yAxisPosition:fr.quadrantChart?.yAxisPosition||"left",quadrantInternalBorderStrokeWidth:fr.quadrantChart?.quadrantInternalBorderStrokeWidth||1,quadrantExternalBorderStrokeWidth:fr.quadrantChart?.quadrantExternalBorderStrokeWidth||2}}getDefaultThemeConfig(){return{quadrant1Fill:io.quadrant1Fill,quadrant2Fill:io.quadrant2Fill,quadrant3Fill:io.quadrant3Fill,quadrant4Fill:io.quadrant4Fill,quadrant1TextFill:io.quadrant1TextFill,quadrant2TextFill:io.quadrant2TextFill,quadrant3TextFill:io.quadrant3TextFill,quadrant4TextFill:io.quadrant4TextFill,quadrantPointFill:io.quadrantPointFill,quadrantPointTextFill:io.quadrantPointTextFill,quadrantXAxisTextFill:io.quadrantXAxisTextFill,quadrantYAxisTextFill:io.quadrantYAxisTextFill,quadrantTitleFill:io.quadrantTitleFill,quadrantInternalBorderStrokeFill:io.quadrantInternalBorderStrokeFill,quadrantExternalBorderStrokeFill:io.quadrantExternalBorderStrokeFill}}clear(){this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData(),this.classes=new Map,Q.info("clear called")}setData(e){this.data={...this.data,...e}}addPoints(e){this.data.points=[...e,...this.data.points]}addClass(e,r){this.classes.set(e,r)}setConfig(e){Q.trace("setConfig called with: ",e),this.config={...this.config,...e}}setThemeConfig(e){Q.trace("setThemeConfig called with: ",e),this.themeConfig={...this.themeConfig,...e}}calculateSpace(e,r,i,n){let a=this.config.xAxisLabelPadding*2+this.config.xAxisLabelFontSize,s={top:e==="top"&&r?a:0,bottom:e==="bottom"&&r?a:0},l=this.config.yAxisLabelPadding*2+this.config.yAxisLabelFontSize,u={left:this.config.yAxisPosition==="left"&&i?l:0,right:this.config.yAxisPosition==="right"&&i?l:0},h=this.config.titleFontSize+this.config.titlePadding*2,f={top:n?h:0},d=this.config.quadrantPadding+u.left,p=this.config.quadrantPadding+s.top+f.top,m=this.config.chartWidth-this.config.quadrantPadding*2-u.left-u.right,g=this.config.chartHeight-this.config.quadrantPadding*2-s.top-s.bottom-f.top,y=m/2,v=g/2;return{xAxisSpace:s,yAxisSpace:u,titleSpace:f,quadrantSpace:{quadrantLeft:d,quadrantTop:p,quadrantWidth:m,quadrantHalfWidth:y,quadrantHeight:g,quadrantHalfHeight:v}}}getAxisLabels(e,r,i,n){let{quadrantSpace:a,titleSpace:s}=n,{quadrantHalfHeight:l,quadrantHeight:u,quadrantLeft:h,quadrantHalfWidth:f,quadrantTop:d,quadrantWidth:p}=a,m=!!this.data.xAxisRightText,g=!!this.data.yAxisTopText,y=[];return this.data.xAxisLeftText&&r&&y.push({text:this.data.xAxisLeftText,fill:this.themeConfig.quadrantXAxisTextFill,x:h+(m?f/2:0),y:e==="top"?this.config.xAxisLabelPadding+s.top:this.config.xAxisLabelPadding+d+u+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:m?"center":"left",horizontalPos:"top",rotation:0}),this.data.xAxisRightText&&r&&y.push({text:this.data.xAxisRightText,fill:this.themeConfig.quadrantXAxisTextFill,x:h+f+(m?f/2:0),y:e==="top"?this.config.xAxisLabelPadding+s.top:this.config.xAxisLabelPadding+d+u+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:m?"center":"left",horizontalPos:"top",rotation:0}),this.data.yAxisBottomText&&i&&y.push({text:this.data.yAxisBottomText,fill:this.themeConfig.quadrantYAxisTextFill,x:this.config.yAxisPosition==="left"?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+h+p+this.config.quadrantPadding,y:d+u-(g?l/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:g?"center":"left",horizontalPos:"top",rotation:-90}),this.data.yAxisTopText&&i&&y.push({text:this.data.yAxisTopText,fill:this.themeConfig.quadrantYAxisTextFill,x:this.config.yAxisPosition==="left"?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+h+p+this.config.quadrantPadding,y:d+l-(g?l/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:g?"center":"left",horizontalPos:"top",rotation:-90}),y}getQuadrants(e){let{quadrantSpace:r}=e,{quadrantHalfHeight:i,quadrantLeft:n,quadrantHalfWidth:a,quadrantTop:s}=r,l=[{text:{text:this.data.quadrant1Text,fill:this.themeConfig.quadrant1TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:n+a,y:s,width:a,height:i,fill:this.themeConfig.quadrant1Fill},{text:{text:this.data.quadrant2Text,fill:this.themeConfig.quadrant2TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:n,y:s,width:a,height:i,fill:this.themeConfig.quadrant2Fill},{text:{text:this.data.quadrant3Text,fill:this.themeConfig.quadrant3TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:n,y:s+i,width:a,height:i,fill:this.themeConfig.quadrant3Fill},{text:{text:this.data.quadrant4Text,fill:this.themeConfig.quadrant4TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:n+a,y:s+i,width:a,height:i,fill:this.themeConfig.quadrant4Fill}];for(let u of l)u.text.x=u.x+u.width/2,this.data.points.length===0?(u.text.y=u.y+u.height/2,u.text.horizontalPos="middle"):(u.text.y=u.y+this.config.quadrantTextTopPadding,u.text.horizontalPos="top");return l}getQuadrantPoints(e){let{quadrantSpace:r}=e,{quadrantHeight:i,quadrantLeft:n,quadrantTop:a,quadrantWidth:s}=r,l=vc().domain([0,1]).range([n,s+n]),u=vc().domain([0,1]).range([i+a,a]);return this.data.points.map(f=>{let d=this.classes.get(f.className);return d&&(f={...d,...f}),{x:l(f.x),y:u(f.y),fill:f.color??this.themeConfig.quadrantPointFill,radius:f.radius??this.config.pointRadius,text:{text:f.text,fill:this.themeConfig.quadrantPointTextFill,x:l(f.x),y:u(f.y)+this.config.pointTextPadding,verticalPos:"center",horizontalPos:"top",fontSize:this.config.pointLabelFontSize,rotation:0},strokeColor:f.strokeColor??this.themeConfig.quadrantPointFill,strokeWidth:f.strokeWidth??"0px"}})}getBorders(e){let r=this.config.quadrantExternalBorderStrokeWidth/2,{quadrantSpace:i}=e,{quadrantHalfHeight:n,quadrantHeight:a,quadrantLeft:s,quadrantHalfWidth:l,quadrantTop:u,quadrantWidth:h}=i;return[{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s-r,y1:u,x2:s+h+r,y2:u},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s+h,y1:u+r,x2:s+h,y2:u+a-r},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s-r,y1:u+a,x2:s+h+r,y2:u+a},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s,y1:u+r,x2:s,y2:u+a-r},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:s+l,y1:u+r,x2:s+l,y2:u+a-r},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:s+r,y1:u+n,x2:s+h-r,y2:u+n}]}getTitle(e){if(e)return{text:this.data.titleText,fill:this.themeConfig.quadrantTitleFill,fontSize:this.config.titleFontSize,horizontalPos:"top",verticalPos:"center",rotation:0,y:this.config.titlePadding,x:this.config.chartWidth/2}}build(){let e=this.config.showXAxis&&!!(this.data.xAxisLeftText||this.data.xAxisRightText),r=this.config.showYAxis&&!!(this.data.yAxisTopText||this.data.yAxisBottomText),i=this.config.showTitle&&!!this.data.titleText,n=this.data.points.length>0?"bottom":this.config.xAxisPosition,a=this.calculateSpace(n,e,r,i);return{points:this.getQuadrantPoints(a),quadrants:this.getQuadrants(a),axisLabels:this.getAxisLabels(n,e,r,a),borderLines:this.getBorders(a),title:this.getTitle(i)}}}});function qW(t){return!/^#?([\dA-Fa-f]{6}|[\dA-Fa-f]{3})$/.test(t)}function Swe(t){return!/^\d+$/.test(t)}function Awe(t){return!/^\d+px$/.test(t)}var og,_we=P(()=>{"use strict";og=class extends Error{static{o(this,"InvalidStyleError")}constructor(e,r,i){super(`value for ${e} ${r} is invalid, please use a valid ${i}`),this.name="InvalidStyleError"}};o(qW,"validateHexCode");o(Swe,"validateNumber");o(Awe,"validateSizeInPixels")});function kf(t){return Tr(t.trim(),Fut)}function $ut(t){ss.setData({quadrant1Text:kf(t.text)})}function zut(t){ss.setData({quadrant2Text:kf(t.text)})}function Gut(t){ss.setData({quadrant3Text:kf(t.text)})}function Vut(t){ss.setData({quadrant4Text:kf(t.text)})}function qut(t){ss.setData({xAxisLeftText:kf(t.text)})}function Wut(t){ss.setData({xAxisRightText:kf(t.text)})}function Uut(t){ss.setData({yAxisTopText:kf(t.text)})}function Hut(t){ss.setData({yAxisBottomText:kf(t.text)})}function WW(t){let e={};for(let r of t){let[i,n]=r.trim().split(/\s*:\s*/);if(i==="radius"){if(Swe(n))throw new og(i,n,"number");e.radius=parseInt(n)}else if(i==="color"){if(qW(n))throw new og(i,n,"hex code");e.color=n}else if(i==="stroke-color"){if(qW(n))throw new og(i,n,"hex code");e.strokeColor=n}else if(i==="stroke-width"){if(Awe(n))throw new og(i,n,"number of pixels (eg. 10px)");e.strokeWidth=n}else throw new Error(`style named ${i} is not supported.`)}return e}function Yut(t,e,r,i,n){let a=WW(n);ss.addPoints([{x:r,y:i,text:kf(t.text),className:e,...a}])}function jut(t,e){ss.addClass(t,WW(e))}function Xut(t){ss.setConfig({chartWidth:t})}function Kut(t){ss.setConfig({chartHeight:t})}function Qut(){let t=ge(),{themeVariables:e,quadrantChart:r}=t;return r&&ss.setConfig(r),ss.setThemeConfig({quadrant1Fill:e.quadrant1Fill,quadrant2Fill:e.quadrant2Fill,quadrant3Fill:e.quadrant3Fill,quadrant4Fill:e.quadrant4Fill,quadrant1TextFill:e.quadrant1TextFill,quadrant2TextFill:e.quadrant2TextFill,quadrant3TextFill:e.quadrant3TextFill,quadrant4TextFill:e.quadrant4TextFill,quadrantPointFill:e.quadrantPointFill,quadrantPointTextFill:e.quadrantPointTextFill,quadrantXAxisTextFill:e.quadrantXAxisTextFill,quadrantYAxisTextFill:e.quadrantYAxisTextFill,quadrantExternalBorderStrokeFill:e.quadrantExternalBorderStrokeFill,quadrantInternalBorderStrokeFill:e.quadrantInternalBorderStrokeFill,quadrantTitleFill:e.quadrantTitleFill}),ss.setData({titleText:Nr()}),ss.build()}var Fut,ss,Zut,Dwe,Lwe=P(()=>{"use strict";Ut();Vr();Ki();Ewe();_we();Fut=ge();o(kf,"textSanitizer");ss=new u_;o($ut,"setQuadrant1Text");o(zut,"setQuadrant2Text");o(Gut,"setQuadrant3Text");o(Vut,"setQuadrant4Text");o(qut,"setXAxisLeftText");o(Wut,"setXAxisRightText");o(Uut,"setYAxisTopText");o(Hut,"setYAxisBottomText");o(WW,"parseStyles");o(Yut,"addPoint");o(jut,"addClass");o(Xut,"setWidth");o(Kut,"setHeight");o(Qut,"getQuadrantData");Zut=o(function(){ss.clear(),wr()},"clear"),Dwe={setWidth:Xut,setHeight:Kut,setQuadrant1Text:$ut,setQuadrant2Text:zut,setQuadrant3Text:Gut,setQuadrant4Text:Vut,setXAxisLeftText:qut,setXAxisRightText:Wut,setYAxisTopText:Uut,setYAxisBottomText:Hut,parseStyles:WW,addPoint:Yut,addClass:jut,getQuadrantData:Qut,clear:Zut,setAccTitle:Ar,getAccTitle:Dr,setDiagramTitle:Mr,getDiagramTitle:Nr,getAccDescription:Rr,setAccDescription:Lr}});var Jut,Rwe,Nwe=P(()=>{"use strict";Pr();Ut();bt();Xi();Jut=o((t,e,r,i)=>{function n(S){return S==="top"?"hanging":"middle"}o(n,"getDominantBaseLine");function a(S){return S==="left"?"start":"middle"}o(a,"getTextAnchor");function s(S){return`translate(${S.x}, ${S.y}) rotate(${S.rotation||0})`}o(s,"getTransformation");let l=ge();Q.debug(`Rendering quadrant chart +`+t);let u=l.securityLevel,h;u==="sandbox"&&(h=Ze("#i"+e));let d=(u==="sandbox"?Ze(h.nodes()[0].contentDocument.body):Ze("body")).select(`[id="${e}"]`),p=d.append("g").attr("class","main"),m=l.quadrantChart?.chartWidth??500,g=l.quadrantChart?.chartHeight??500;Hr(d,g,m,l.quadrantChart?.useMaxWidth??!0),d.attr("viewBox","0 0 "+m+" "+g),i.db.setHeight(g),i.db.setWidth(m);let y=i.db.getQuadrantData(),v=p.append("g").attr("class","quadrants"),x=p.append("g").attr("class","border"),b=p.append("g").attr("class","data-points"),T=p.append("g").attr("class","labels"),w=p.append("g").attr("class","title");y.title&&w.append("text").attr("x",0).attr("y",0).attr("fill",y.title.fill).attr("font-size",y.title.fontSize).attr("dominant-baseline",n(y.title.horizontalPos)).attr("text-anchor",a(y.title.verticalPos)).attr("transform",s(y.title)).text(y.title.text),y.borderLines&&x.selectAll("line").data(y.borderLines).enter().append("line").attr("x1",S=>S.x1).attr("y1",S=>S.y1).attr("x2",S=>S.x2).attr("y2",S=>S.y2).style("stroke",S=>S.strokeFill).style("stroke-width",S=>S.strokeWidth);let k=v.selectAll("g.quadrant").data(y.quadrants).enter().append("g").attr("class","quadrant");k.append("rect").attr("x",S=>S.x).attr("y",S=>S.y).attr("width",S=>S.width).attr("height",S=>S.height).attr("fill",S=>S.fill),k.append("text").attr("x",0).attr("y",0).attr("fill",S=>S.text.fill).attr("font-size",S=>S.text.fontSize).attr("dominant-baseline",S=>n(S.text.horizontalPos)).attr("text-anchor",S=>a(S.text.verticalPos)).attr("transform",S=>s(S.text)).text(S=>S.text.text),T.selectAll("g.label").data(y.axisLabels).enter().append("g").attr("class","label").append("text").attr("x",0).attr("y",0).text(S=>S.text).attr("fill",S=>S.fill).attr("font-size",S=>S.fontSize).attr("dominant-baseline",S=>n(S.horizontalPos)).attr("text-anchor",S=>a(S.verticalPos)).attr("transform",S=>s(S));let E=b.selectAll("g.data-point").data(y.points).enter().append("g").attr("class","data-point");E.append("circle").attr("cx",S=>S.x).attr("cy",S=>S.y).attr("r",S=>S.radius).attr("fill",S=>S.fill).attr("stroke",S=>S.strokeColor).attr("stroke-width",S=>S.strokeWidth),E.append("text").attr("x",0).attr("y",0).text(S=>S.text.text).attr("fill",S=>S.text.fill).attr("font-size",S=>S.text.fontSize).attr("dominant-baseline",S=>n(S.text.horizontalPos)).attr("text-anchor",S=>a(S.text.verticalPos)).attr("transform",S=>s(S.text))},"draw"),Rwe={draw:Jut}});var Iwe={};ur(Iwe,{diagram:()=>eht});var eht,Mwe=P(()=>{"use strict";wwe();Lwe();Nwe();eht={parser:Cwe,db:Dwe,renderer:Rwe,styles:o(()=>"","styles")}});var UW,Bwe,Fwe=P(()=>{"use strict";UW=(function(){var t=o(function(N,R,B,O){for(B=B||{},O=N.length;O--;B[N[O]]=R);return B},"o"),e=[1,10,12,14,16,18,19,21,23],r=[2,6],i=[1,3],n=[1,5],a=[1,6],s=[1,7],l=[1,5,10,12,14,16,18,19,21,23,34,35,36],u=[1,25],h=[1,26],f=[1,28],d=[1,29],p=[1,30],m=[1,31],g=[1,32],y=[1,33],v=[1,34],x=[1,35],b=[1,36],T=[1,37],w=[1,43],k=[1,42],C=[1,47],E=[1,50],S=[1,10,12,14,16,18,19,21,23,34,35,36],L=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36],M=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36,41,42,43,44,45,46,47,48,49,50],I=[1,64],A={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,eol:4,XYCHART:5,chartConfig:6,document:7,CHART_ORIENTATION:8,statement:9,title:10,text:11,X_AXIS:12,parseXAxis:13,Y_AXIS:14,parseYAxis:15,LINE:16,plotData:17,BAR:18,acc_title:19,acc_title_value:20,acc_descr:21,acc_descr_value:22,acc_descr_multiline_value:23,SQUARE_BRACES_START:24,commaSeparatedNumbers:25,SQUARE_BRACES_END:26,NUMBER_WITH_DECIMAL:27,COMMA:28,xAxisData:29,bandData:30,ARROW_DELIMITER:31,commaSeparatedTexts:32,yAxisData:33,NEWLINE:34,SEMI:35,EOF:36,alphaNum:37,STR:38,MD_STR:39,alphaNumToken:40,AMP:41,NUM:42,ALPHA:43,PLUS:44,EQUALS:45,MULT:46,DOT:47,BRKT:48,MINUS:49,UNDERSCORE:50,$accept:0,$end:1},terminals_:{2:"error",5:"XYCHART",8:"CHART_ORIENTATION",10:"title",12:"X_AXIS",14:"Y_AXIS",16:"LINE",18:"BAR",19:"acc_title",20:"acc_title_value",21:"acc_descr",22:"acc_descr_value",23:"acc_descr_multiline_value",24:"SQUARE_BRACES_START",26:"SQUARE_BRACES_END",27:"NUMBER_WITH_DECIMAL",28:"COMMA",31:"ARROW_DELIMITER",34:"NEWLINE",35:"SEMI",36:"EOF",38:"STR",39:"MD_STR",41:"AMP",42:"NUM",43:"ALPHA",44:"PLUS",45:"EQUALS",46:"MULT",47:"DOT",48:"BRKT",49:"MINUS",50:"UNDERSCORE"},productions_:[0,[3,2],[3,3],[3,2],[3,1],[6,1],[7,0],[7,2],[9,2],[9,2],[9,2],[9,2],[9,2],[9,3],[9,2],[9,3],[9,2],[9,2],[9,1],[17,3],[25,3],[25,1],[13,1],[13,2],[13,1],[29,1],[29,3],[30,3],[32,3],[32,1],[15,1],[15,2],[15,1],[33,3],[4,1],[4,1],[4,1],[11,1],[11,1],[11,1],[37,1],[37,2],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1]],performAction:o(function(R,B,O,$,z,F,V){var H=F.length-1;switch(z){case 5:$.setOrientation(F[H]);break;case 9:$.setDiagramTitle(F[H].text.trim());break;case 12:$.setLineData({text:"",type:"text"},F[H]);break;case 13:$.setLineData(F[H-1],F[H]);break;case 14:$.setBarData({text:"",type:"text"},F[H]);break;case 15:$.setBarData(F[H-1],F[H]);break;case 16:this.$=F[H].trim(),$.setAccTitle(this.$);break;case 17:case 18:this.$=F[H].trim(),$.setAccDescription(this.$);break;case 19:this.$=F[H-1];break;case 20:this.$=[Number(F[H-2]),...F[H]];break;case 21:this.$=[Number(F[H])];break;case 22:$.setXAxisTitle(F[H]);break;case 23:$.setXAxisTitle(F[H-1]);break;case 24:$.setXAxisTitle({type:"text",text:""});break;case 25:$.setXAxisBand(F[H]);break;case 26:$.setXAxisRangeData(Number(F[H-2]),Number(F[H]));break;case 27:this.$=F[H-1];break;case 28:this.$=[F[H-2],...F[H]];break;case 29:this.$=[F[H]];break;case 30:$.setYAxisTitle(F[H]);break;case 31:$.setYAxisTitle(F[H-1]);break;case 32:$.setYAxisTitle({type:"text",text:""});break;case 33:$.setYAxisRangeData(Number(F[H-2]),Number(F[H]));break;case 37:this.$={text:F[H],type:"text"};break;case 38:this.$={text:F[H],type:"text"};break;case 39:this.$={text:F[H],type:"markdown"};break;case 40:this.$=F[H];break;case 41:this.$=F[H-1]+""+F[H];break}},"anonymous"),table:[t(e,r,{3:1,4:2,7:4,5:i,34:n,35:a,36:s}),{1:[3]},t(e,r,{4:2,7:4,3:8,5:i,34:n,35:a,36:s}),t(e,r,{4:2,7:4,6:9,3:10,5:i,8:[1,11],34:n,35:a,36:s}),{1:[2,4],9:12,10:[1,13],12:[1,14],14:[1,15],16:[1,16],18:[1,17],19:[1,18],21:[1,19],23:[1,20]},t(l,[2,34]),t(l,[2,35]),t(l,[2,36]),{1:[2,1]},t(e,r,{4:2,7:4,3:21,5:i,34:n,35:a,36:s}),{1:[2,3]},t(l,[2,5]),t(e,[2,7],{4:22,34:n,35:a,36:s}),{11:23,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T},{11:39,13:38,24:w,27:k,29:40,30:41,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T},{11:45,15:44,27:C,33:46,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T},{11:49,17:48,24:E,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T},{11:52,17:51,24:E,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T},{20:[1,53]},{22:[1,54]},t(S,[2,18]),{1:[2,2]},t(S,[2,8]),t(S,[2,9]),t(L,[2,37],{40:55,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T}),t(L,[2,38]),t(L,[2,39]),t(M,[2,40]),t(M,[2,42]),t(M,[2,43]),t(M,[2,44]),t(M,[2,45]),t(M,[2,46]),t(M,[2,47]),t(M,[2,48]),t(M,[2,49]),t(M,[2,50]),t(M,[2,51]),t(S,[2,10]),t(S,[2,22],{30:41,29:56,24:w,27:k}),t(S,[2,24]),t(S,[2,25]),{31:[1,57]},{11:59,32:58,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T},t(S,[2,11]),t(S,[2,30],{33:60,27:C}),t(S,[2,32]),{31:[1,61]},t(S,[2,12]),{17:62,24:E},{25:63,27:I},t(S,[2,14]),{17:65,24:E},t(S,[2,16]),t(S,[2,17]),t(M,[2,41]),t(S,[2,23]),{27:[1,66]},{26:[1,67]},{26:[2,29],28:[1,68]},t(S,[2,31]),{27:[1,69]},t(S,[2,13]),{26:[1,70]},{26:[2,21],28:[1,71]},t(S,[2,15]),t(S,[2,26]),t(S,[2,27]),{11:59,32:72,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T},t(S,[2,33]),t(S,[2,19]),{25:73,27:I},{26:[2,28]},{26:[2,20]}],defaultActions:{8:[2,1],10:[2,3],21:[2,2],72:[2,28],73:[2,20]},parseError:o(function(R,B){if(B.recoverable)this.trace(R);else{var O=new Error(R);throw O.hash=B,O}},"parseError"),parse:o(function(R){var B=this,O=[0],$=[],z=[null],F=[],V=this.table,H="",X=0,W=0,Z=0,Y=2,ae=1,J=F.slice.call(arguments,1),ee=Object.create(this.lexer),re={yy:{}};for(var te in this.yy)Object.prototype.hasOwnProperty.call(this.yy,te)&&(re.yy[te]=this.yy[te]);ee.setInput(R,re.yy),re.yy.lexer=ee,re.yy.parser=this,typeof ee.yylloc>"u"&&(ee.yylloc={});var be=ee.yylloc;F.push(be);var de=ee.options&&ee.options.ranges;typeof re.yy.parseError=="function"?this.parseError=re.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ee(K){O.length=O.length-2*K,z.length=z.length-K,F.length=F.length-K}o(Ee,"popStack");function Ne(){var K;return K=$.pop()||ee.lex()||ae,typeof K!="number"&&(K instanceof Array&&($=K,K=$.pop()),K=B.symbols_[K]||K),K}o(Ne,"lex");for(var we,Te,De,$e,pe,Je,Ce={},Fe,Ue,qe,Me;;){if(De=O[O.length-1],this.defaultActions[De]?$e=this.defaultActions[De]:((we===null||typeof we>"u")&&(we=Ne()),$e=V[De]&&V[De][we]),typeof $e>"u"||!$e.length||!$e[0]){var He="";Me=[];for(Fe in V[De])this.terminals_[Fe]&&Fe>Y&&Me.push("'"+this.terminals_[Fe]+"'");ee.showPosition?He="Parse error on line "+(X+1)+`: +`+ee.showPosition()+` +Expecting `+Me.join(", ")+", got '"+(this.terminals_[we]||we)+"'":He="Parse error on line "+(X+1)+": Unexpected "+(we==ae?"end of input":"'"+(this.terminals_[we]||we)+"'"),this.parseError(He,{text:ee.match,token:this.terminals_[we]||we,line:ee.yylineno,loc:be,expected:Me})}if($e[0]instanceof Array&&$e.length>1)throw new Error("Parse Error: multiple actions possible at state: "+De+", token: "+we);switch($e[0]){case 1:O.push(we),z.push(ee.yytext),F.push(ee.yylloc),O.push($e[1]),we=null,Te?(we=Te,Te=null):(W=ee.yyleng,H=ee.yytext,X=ee.yylineno,be=ee.yylloc,Z>0&&Z--);break;case 2:if(Ue=this.productions_[$e[1]][1],Ce.$=z[z.length-Ue],Ce._$={first_line:F[F.length-(Ue||1)].first_line,last_line:F[F.length-1].last_line,first_column:F[F.length-(Ue||1)].first_column,last_column:F[F.length-1].last_column},de&&(Ce._$.range=[F[F.length-(Ue||1)].range[0],F[F.length-1].range[1]]),Je=this.performAction.apply(Ce,[H,W,X,re.yy,$e[1],z,F].concat(J)),typeof Je<"u")return Je;Ue&&(O=O.slice(0,-1*Ue*2),z=z.slice(0,-1*Ue),F=F.slice(0,-1*Ue)),O.push(this.productions_[$e[1]][0]),z.push(Ce.$),F.push(Ce._$),qe=V[O[O.length-2]][O[O.length-1]],O.push(qe);break;case 3:return!0}}return!0},"parse")},_=(function(){var N={EOF:1,parseError:o(function(B,O){if(this.yy.parser)this.yy.parser.parseError(B,O);else throw new Error(B)},"parseError"),setInput:o(function(R,B){return this.yy=B||this.yy||{},this._input=R,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var R=this._input[0];this.yytext+=R,this.yyleng++,this.offset++,this.match+=R,this.matched+=R;var B=R.match(/(?:\r\n?|\n).*/g);return B?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),R},"input"),unput:o(function(R){var B=R.length,O=R.split(/(?:\r\n?|\n)/g);this._input=R+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-B),this.offset-=B;var $=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),O.length-1&&(this.yylineno-=O.length-1);var z=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:O?(O.length===$.length?this.yylloc.first_column:0)+$[$.length-O.length].length-O[0].length:this.yylloc.first_column-B},this.options.ranges&&(this.yylloc.range=[z[0],z[0]+this.yyleng-B]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(R){this.unput(this.match.slice(R))},"less"),pastInput:o(function(){var R=this.matched.substr(0,this.matched.length-this.match.length);return(R.length>20?"...":"")+R.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var R=this.match;return R.length<20&&(R+=this._input.substr(0,20-R.length)),(R.substr(0,20)+(R.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var R=this.pastInput(),B=new Array(R.length+1).join("-");return R+this.upcomingInput()+` +`+B+"^"},"showPosition"),test_match:o(function(R,B){var O,$,z;if(this.options.backtrack_lexer&&(z={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(z.yylloc.range=this.yylloc.range.slice(0))),$=R[0].match(/(?:\r\n?|\n).*/g),$&&(this.yylineno+=$.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:$?$[$.length-1].length-$[$.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+R[0].length},this.yytext+=R[0],this.match+=R[0],this.matches=R,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(R[0].length),this.matched+=R[0],O=this.performAction.call(this,this.yy,this,B,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),O)return O;if(this._backtrack){for(var F in z)this[F]=z[F];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var R,B,O,$;this._more||(this.yytext="",this.match="");for(var z=this._currentRules(),F=0;FB[0].length)){if(B=O,$=F,this.options.backtrack_lexer){if(R=this.test_match(O,z[F]),R!==!1)return R;if(this._backtrack){B=!1;continue}else return!1}else if(!this.options.flex)break}return B?(R=this.test_match(B,z[$]),R!==!1?R:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var B=this.next();return B||this.lex()},"lex"),begin:o(function(B){this.conditionStack.push(B)},"begin"),popState:o(function(){var B=this.conditionStack.length-1;return B>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(B){return B=this.conditionStack.length-1-Math.abs(B||0),B>=0?this.conditionStack[B]:"INITIAL"},"topState"),pushState:o(function(B){this.begin(B)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(B,O,$,z){var F=z;switch($){case 0:break;case 1:break;case 2:return this.popState(),34;break;case 3:return this.popState(),34;break;case 4:return 34;case 5:break;case 6:return 10;case 7:return this.pushState("acc_title"),19;break;case 8:return this.popState(),"acc_title_value";break;case 9:return this.pushState("acc_descr"),21;break;case 10:return this.popState(),"acc_descr_value";break;case 11:this.pushState("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 5;case 15:return 5;case 16:return 8;case 17:return this.pushState("axis_data"),"X_AXIS";break;case 18:return this.pushState("axis_data"),"Y_AXIS";break;case 19:return this.pushState("axis_band_data"),24;break;case 20:return 31;case 21:return this.pushState("data"),16;break;case 22:return this.pushState("data"),18;break;case 23:return this.pushState("data_inner"),24;break;case 24:return 27;case 25:return this.popState(),26;break;case 26:this.popState();break;case 27:this.pushState("string");break;case 28:this.popState();break;case 29:return"STR";case 30:return 24;case 31:return 26;case 32:return 43;case 33:return"COLON";case 34:return 44;case 35:return 28;case 36:return 45;case 37:return 46;case 38:return 48;case 39:return 50;case 40:return 47;case 41:return 41;case 42:return 49;case 43:return 42;case 44:break;case 45:return 35;case 46:return 36}},"anonymous"),rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:(\r?\n))/i,/^(?:(\r?\n))/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:title\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:\})/i,/^(?:[^\}]*)/i,/^(?:xychart-beta\b)/i,/^(?:xychart\b)/i,/^(?:(?:vertical|horizontal))/i,/^(?:x-axis\b)/i,/^(?:y-axis\b)/i,/^(?:\[)/i,/^(?:-->)/i,/^(?:line\b)/i,/^(?:bar\b)/i,/^(?:\[)/i,/^(?:[+-]?(?:\d+(?:\.\d+)?|\.\d+))/i,/^(?:\])/i,/^(?:(?:`\) \{ this\.pushState\(md_string\); \}\n\(\?:\(\?!`"\)\.\)\+ \{ return MD_STR; \}\n\(\?:`))/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:[A-Za-z]+)/i,/^(?::)/i,/^(?:\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:\*)/i,/^(?:#)/i,/^(?:[\_])/i,/^(?:\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\s+)/i,/^(?:;)/i,/^(?:$)/i],conditions:{data_inner:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,18,21,22,24,25,26,27,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],inclusive:!0},data:{rules:[0,1,3,4,5,6,7,9,11,14,15,16,17,18,21,22,23,26,27,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],inclusive:!0},axis_band_data:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,18,21,22,25,26,27,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],inclusive:!0},axis_data:{rules:[0,1,2,4,5,6,7,9,11,14,15,16,17,18,19,20,21,22,24,26,27,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],inclusive:!0},acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},title:{rules:[],inclusive:!1},md_string:{rules:[],inclusive:!1},string:{rules:[28,29],inclusive:!1},INITIAL:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,18,21,22,26,27,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],inclusive:!0}}};return N})();A.lexer=_;function D(){this.yy={}}return o(D,"Parser"),D.prototype=A,A.Parser=D,new D})();UW.parser=UW;Bwe=UW});function HW(t){return t.type==="bar"}function h_(t){return t.type==="band"}function Qv(t){return t.type==="linear"}var f_=P(()=>{"use strict";o(HW,"isBarPlot");o(h_,"isBandAxisData");o(Qv,"isLinearAxisData")});var Zv,YW=P(()=>{"use strict";To();Zv=class{constructor(e){this.parentGroup=e}static{o(this,"TextDimensionCalculatorWithFont")}getMaxDimension(e,r){if(!this.parentGroup)return{width:e.reduce((a,s)=>Math.max(s.length,a),0)*r,height:r};let i={width:0,height:0},n=this.parentGroup.append("g").attr("visibility","hidden").attr("font-size",r);for(let a of e){let s=zae(n,1,a),l=s?s.width:a.length*r,u=s?s.height:r;i.width=Math.max(i.width,l),i.height=Math.max(i.height,u)}return n.remove(),i}}});var Jv,jW=P(()=>{"use strict";Jv=class{constructor(e,r,i,n){this.axisConfig=e;this.title=r;this.textDimensionCalculator=i;this.axisThemeConfig=n;this.boundingRect={x:0,y:0,width:0,height:0};this.axisPosition="left";this.showTitle=!1;this.showLabel=!1;this.showTick=!1;this.showAxisLine=!1;this.outerPadding=0;this.titleTextHeight=0;this.labelTextHeight=0;this.range=[0,10],this.boundingRect={x:0,y:0,width:0,height:0},this.axisPosition="left"}static{o(this,"BaseAxis")}setRange(e){this.range=e,this.axisPosition==="left"||this.axisPosition==="right"?this.boundingRect.height=e[1]-e[0]:this.boundingRect.width=e[1]-e[0],this.recalculateScale()}getRange(){return[this.range[0]+this.outerPadding,this.range[1]-this.outerPadding]}setAxisPosition(e){this.axisPosition=e,this.setRange(this.range)}getTickDistance(){let e=this.getRange();return Math.abs(e[0]-e[1])/this.getTickValues().length}getAxisOuterPadding(){return this.outerPadding}getLabelDimension(){return this.textDimensionCalculator.getMaxDimension(this.getTickValues().map(e=>e.toString()),this.axisConfig.labelFontSize)}recalculateOuterPaddingToDrawBar(){.7*this.getTickDistance()>this.outerPadding*2&&(this.outerPadding=Math.floor(.7*this.getTickDistance()/2)),this.recalculateScale()}calculateSpaceIfDrawnHorizontally(e){let r=e.height;if(this.axisConfig.showAxisLine&&r>this.axisConfig.axisLineWidth&&(r-=this.axisConfig.axisLineWidth,this.showAxisLine=!0),this.axisConfig.showLabel){let i=this.getLabelDimension(),n=.2*e.width;this.outerPadding=Math.min(i.width/2,n);let a=i.height+this.axisConfig.labelPadding*2;this.labelTextHeight=i.height,a<=r&&(r-=a,this.showLabel=!0)}if(this.axisConfig.showTick&&r>=this.axisConfig.tickLength&&(this.showTick=!0,r-=this.axisConfig.tickLength),this.axisConfig.showTitle&&this.title){let i=this.textDimensionCalculator.getMaxDimension([this.title],this.axisConfig.titleFontSize),n=i.height+this.axisConfig.titlePadding*2;this.titleTextHeight=i.height,n<=r&&(r-=n,this.showTitle=!0)}this.boundingRect.width=e.width,this.boundingRect.height=e.height-r}calculateSpaceIfDrawnVertical(e){let r=e.width;if(this.axisConfig.showAxisLine&&r>this.axisConfig.axisLineWidth&&(r-=this.axisConfig.axisLineWidth,this.showAxisLine=!0),this.axisConfig.showLabel){let i=this.getLabelDimension(),n=.2*e.height;this.outerPadding=Math.min(i.height/2,n);let a=i.width+this.axisConfig.labelPadding*2;a<=r&&(r-=a,this.showLabel=!0)}if(this.axisConfig.showTick&&r>=this.axisConfig.tickLength&&(this.showTick=!0,r-=this.axisConfig.tickLength),this.axisConfig.showTitle&&this.title){let i=this.textDimensionCalculator.getMaxDimension([this.title],this.axisConfig.titleFontSize),n=i.height+this.axisConfig.titlePadding*2;this.titleTextHeight=i.height,n<=r&&(r-=n,this.showTitle=!0)}this.boundingRect.width=e.width-r,this.boundingRect.height=e.height}calculateSpace(e){return this.axisPosition==="left"||this.axisPosition==="right"?this.calculateSpaceIfDrawnVertical(e):this.calculateSpaceIfDrawnHorizontally(e),this.recalculateScale(),{width:this.boundingRect.width,height:this.boundingRect.height}}setBoundingBoxXY(e){this.boundingRect.x=e.x,this.boundingRect.y=e.y}getDrawableElementsForLeftAxis(){let e=[];if(this.showAxisLine){let r=this.boundingRect.x+this.boundingRect.width-this.axisConfig.axisLineWidth/2;e.push({type:"path",groupTexts:["left-axis","axisl-line"],data:[{path:`M ${r},${this.boundingRect.y} L ${r},${this.boundingRect.y+this.boundingRect.height} `,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&e.push({type:"text",groupTexts:["left-axis","label"],data:this.getTickValues().map(r=>({text:r.toString(),x:this.boundingRect.x+this.boundingRect.width-(this.showLabel?this.axisConfig.labelPadding:0)-(this.showTick?this.axisConfig.tickLength:0)-(this.showAxisLine?this.axisConfig.axisLineWidth:0),y:this.getScaleValue(r),fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"middle",horizontalPos:"right"}))}),this.showTick){let r=this.boundingRect.x+this.boundingRect.width-(this.showAxisLine?this.axisConfig.axisLineWidth:0);e.push({type:"path",groupTexts:["left-axis","ticks"],data:this.getTickValues().map(i=>({path:`M ${r},${this.getScaleValue(i)} L ${r-this.axisConfig.tickLength},${this.getScaleValue(i)}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&e.push({type:"text",groupTexts:["left-axis","title"],data:[{text:this.title,x:this.boundingRect.x+this.axisConfig.titlePadding,y:this.boundingRect.y+this.boundingRect.height/2,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:270,verticalPos:"top",horizontalPos:"center"}]}),e}getDrawableElementsForBottomAxis(){let e=[];if(this.showAxisLine){let r=this.boundingRect.y+this.axisConfig.axisLineWidth/2;e.push({type:"path",groupTexts:["bottom-axis","axis-line"],data:[{path:`M ${this.boundingRect.x},${r} L ${this.boundingRect.x+this.boundingRect.width},${r}`,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&e.push({type:"text",groupTexts:["bottom-axis","label"],data:this.getTickValues().map(r=>({text:r.toString(),x:this.getScaleValue(r),y:this.boundingRect.y+this.axisConfig.labelPadding+(this.showTick?this.axisConfig.tickLength:0)+(this.showAxisLine?this.axisConfig.axisLineWidth:0),fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}))}),this.showTick){let r=this.boundingRect.y+(this.showAxisLine?this.axisConfig.axisLineWidth:0);e.push({type:"path",groupTexts:["bottom-axis","ticks"],data:this.getTickValues().map(i=>({path:`M ${this.getScaleValue(i)},${r} L ${this.getScaleValue(i)},${r+this.axisConfig.tickLength}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&e.push({type:"text",groupTexts:["bottom-axis","title"],data:[{text:this.title,x:this.range[0]+(this.range[1]-this.range[0])/2,y:this.boundingRect.y+this.boundingRect.height-this.axisConfig.titlePadding-this.titleTextHeight,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}]}),e}getDrawableElementsForTopAxis(){let e=[];if(this.showAxisLine){let r=this.boundingRect.y+this.boundingRect.height-this.axisConfig.axisLineWidth/2;e.push({type:"path",groupTexts:["top-axis","axis-line"],data:[{path:`M ${this.boundingRect.x},${r} L ${this.boundingRect.x+this.boundingRect.width},${r}`,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&e.push({type:"text",groupTexts:["top-axis","label"],data:this.getTickValues().map(r=>({text:r.toString(),x:this.getScaleValue(r),y:this.boundingRect.y+(this.showTitle?this.titleTextHeight+this.axisConfig.titlePadding*2:0)+this.axisConfig.labelPadding,fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}))}),this.showTick){let r=this.boundingRect.y;e.push({type:"path",groupTexts:["top-axis","ticks"],data:this.getTickValues().map(i=>({path:`M ${this.getScaleValue(i)},${r+this.boundingRect.height-(this.showAxisLine?this.axisConfig.axisLineWidth:0)} L ${this.getScaleValue(i)},${r+this.boundingRect.height-this.axisConfig.tickLength-(this.showAxisLine?this.axisConfig.axisLineWidth:0)}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&e.push({type:"text",groupTexts:["top-axis","title"],data:[{text:this.title,x:this.boundingRect.x+this.boundingRect.width/2,y:this.boundingRect.y+this.axisConfig.titlePadding,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}]}),e}getDrawableElements(){if(this.axisPosition==="left")return this.getDrawableElementsForLeftAxis();if(this.axisPosition==="right")throw Error("Drawing of right axis is not implemented");return this.axisPosition==="bottom"?this.getDrawableElementsForBottomAxis():this.axisPosition==="top"?this.getDrawableElementsForTopAxis():[]}}});var d_,$we=P(()=>{"use strict";Pr();bt();jW();d_=class extends Jv{static{o(this,"BandAxis")}constructor(e,r,i,n,a){super(e,n,a,r),this.categories=i,this.scale=Kg().domain(this.categories).range(this.getRange())}setRange(e){super.setRange(e)}recalculateScale(){this.scale=Kg().domain(this.categories).range(this.getRange()).paddingInner(1).paddingOuter(0).align(.5),Q.trace("BandAxis axis final categories, range: ",this.categories,this.getRange())}getTickValues(){return this.categories}getScaleValue(e){return this.scale(e)??this.getRange()[0]}}});var p_,zwe=P(()=>{"use strict";Pr();jW();p_=class extends Jv{static{o(this,"LinearAxis")}constructor(e,r,i,n,a){super(e,n,a,r),this.domain=i,this.scale=vc().domain(this.domain).range(this.getRange())}getTickValues(){return this.scale.ticks()}recalculateScale(){let e=[...this.domain];this.axisPosition==="left"&&e.reverse(),this.scale=vc().domain(e).range(this.getRange())}getScaleValue(e){return this.scale(e)}}});function XW(t,e,r,i){let n=new Zv(i);return h_(t)?new d_(e,r,t.categories,t.title,n):new p_(e,r,[t.min,t.max],t.title,n)}var Gwe=P(()=>{"use strict";f_();YW();$we();zwe();o(XW,"getAxis")});function Vwe(t,e,r,i){let n=new Zv(i);return new KW(n,t,e,r)}var KW,qwe=P(()=>{"use strict";YW();KW=class{constructor(e,r,i,n){this.textDimensionCalculator=e;this.chartConfig=r;this.chartData=i;this.chartThemeConfig=n;this.boundingRect={x:0,y:0,width:0,height:0},this.showChartTitle=!1}static{o(this,"ChartTitle")}setBoundingBoxXY(e){this.boundingRect.x=e.x,this.boundingRect.y=e.y}calculateSpace(e){let r=this.textDimensionCalculator.getMaxDimension([this.chartData.title],this.chartConfig.titleFontSize),i=Math.max(r.width,e.width),n=r.height+2*this.chartConfig.titlePadding;return r.width<=i&&r.height<=n&&this.chartConfig.showTitle&&this.chartData.title&&(this.boundingRect.width=i,this.boundingRect.height=n,this.showChartTitle=!0),{width:this.boundingRect.width,height:this.boundingRect.height}}getDrawableElements(){let e=[];return this.showChartTitle&&e.push({groupTexts:["chart-title"],type:"text",data:[{fontSize:this.chartConfig.titleFontSize,text:this.chartData.title,verticalPos:"middle",horizontalPos:"center",x:this.boundingRect.x+this.boundingRect.width/2,y:this.boundingRect.y+this.boundingRect.height/2,fill:this.chartThemeConfig.titleColor,rotation:0}]}),e}};o(Vwe,"getChartTitleComponent")});var m_,Wwe=P(()=>{"use strict";Pr();m_=class{constructor(e,r,i,n,a){this.plotData=e;this.xAxis=r;this.yAxis=i;this.orientation=n;this.plotIndex=a}static{o(this,"LinePlot")}getDrawableElement(){let e=this.plotData.data.map(i=>[this.xAxis.getScaleValue(i[0]),this.yAxis.getScaleValue(i[1])]),r;return this.orientation==="horizontal"?r=Cc().y(i=>i[0]).x(i=>i[1])(e):r=Cc().x(i=>i[0]).y(i=>i[1])(e),r?[{groupTexts:["plot",`line-plot-${this.plotIndex}`],type:"path",data:[{path:r,strokeFill:this.plotData.strokeFill,strokeWidth:this.plotData.strokeWidth}]}]:[]}}});var g_,Uwe=P(()=>{"use strict";g_=class{constructor(e,r,i,n,a,s){this.barData=e;this.boundingRect=r;this.xAxis=i;this.yAxis=n;this.orientation=a;this.plotIndex=s}static{o(this,"BarPlot")}getDrawableElement(){let e=this.barData.data.map(a=>[this.xAxis.getScaleValue(a[0]),this.yAxis.getScaleValue(a[1])]),i=Math.min(this.xAxis.getAxisOuterPadding()*2,this.xAxis.getTickDistance())*(1-.05),n=i/2;return this.orientation==="horizontal"?[{groupTexts:["plot",`bar-plot-${this.plotIndex}`],type:"rect",data:e.map(a=>({x:this.boundingRect.x,y:a[0]-n,height:i,width:a[1]-this.boundingRect.x,fill:this.barData.fill,strokeWidth:0,strokeFill:this.barData.fill}))}]:[{groupTexts:["plot",`bar-plot-${this.plotIndex}`],type:"rect",data:e.map(a=>({x:a[0]-n,y:a[1],width:i,height:this.boundingRect.y+this.boundingRect.height-a[1],fill:this.barData.fill,strokeWidth:0,strokeFill:this.barData.fill}))}]}}});function Hwe(t,e,r){return new QW(t,e,r)}var QW,Ywe=P(()=>{"use strict";Wwe();Uwe();QW=class{constructor(e,r,i){this.chartConfig=e;this.chartData=r;this.chartThemeConfig=i;this.boundingRect={x:0,y:0,width:0,height:0}}static{o(this,"BasePlot")}setAxes(e,r){this.xAxis=e,this.yAxis=r}setBoundingBoxXY(e){this.boundingRect.x=e.x,this.boundingRect.y=e.y}calculateSpace(e){return this.boundingRect.width=e.width,this.boundingRect.height=e.height,{width:this.boundingRect.width,height:this.boundingRect.height}}getDrawableElements(){if(!(this.xAxis&&this.yAxis))throw Error("Axes must be passed to render Plots");let e=[];for(let[r,i]of this.chartData.plots.entries())switch(i.type){case"line":{let n=new m_(i,this.xAxis,this.yAxis,this.chartConfig.chartOrientation,r);e.push(...n.getDrawableElement())}break;case"bar":{let n=new g_(i,this.boundingRect,this.xAxis,this.yAxis,this.chartConfig.chartOrientation,r);e.push(...n.getDrawableElement())}break}return e}};o(Hwe,"getPlotComponent")});var y_,jwe=P(()=>{"use strict";Gwe();qwe();Ywe();f_();y_=class{constructor(e,r,i,n){this.chartConfig=e;this.chartData=r;this.componentStore={title:Vwe(e,r,i,n),plot:Hwe(e,r,i),xAxis:XW(r.xAxis,e.xAxis,{titleColor:i.xAxisTitleColor,labelColor:i.xAxisLabelColor,tickColor:i.xAxisTickColor,axisLineColor:i.xAxisLineColor},n),yAxis:XW(r.yAxis,e.yAxis,{titleColor:i.yAxisTitleColor,labelColor:i.yAxisLabelColor,tickColor:i.yAxisTickColor,axisLineColor:i.yAxisLineColor},n)}}static{o(this,"Orchestrator")}calculateVerticalSpace(){let e=this.chartConfig.width,r=this.chartConfig.height,i=0,n=0,a=Math.floor(e*this.chartConfig.plotReservedSpacePercent/100),s=Math.floor(r*this.chartConfig.plotReservedSpacePercent/100),l=this.componentStore.plot.calculateSpace({width:a,height:s});e-=l.width,r-=l.height,l=this.componentStore.title.calculateSpace({width:this.chartConfig.width,height:r}),n=l.height,r-=l.height,this.componentStore.xAxis.setAxisPosition("bottom"),l=this.componentStore.xAxis.calculateSpace({width:e,height:r}),r-=l.height,this.componentStore.yAxis.setAxisPosition("left"),l=this.componentStore.yAxis.calculateSpace({width:e,height:r}),i=l.width,e-=l.width,e>0&&(a+=e,e=0),r>0&&(s+=r,r=0),this.componentStore.plot.calculateSpace({width:a,height:s}),this.componentStore.plot.setBoundingBoxXY({x:i,y:n}),this.componentStore.xAxis.setRange([i,i+a]),this.componentStore.xAxis.setBoundingBoxXY({x:i,y:n+s}),this.componentStore.yAxis.setRange([n,n+s]),this.componentStore.yAxis.setBoundingBoxXY({x:0,y:n}),this.chartData.plots.some(u=>HW(u))&&this.componentStore.xAxis.recalculateOuterPaddingToDrawBar()}calculateHorizontalSpace(){let e=this.chartConfig.width,r=this.chartConfig.height,i=0,n=0,a=0,s=Math.floor(e*this.chartConfig.plotReservedSpacePercent/100),l=Math.floor(r*this.chartConfig.plotReservedSpacePercent/100),u=this.componentStore.plot.calculateSpace({width:s,height:l});e-=u.width,r-=u.height,u=this.componentStore.title.calculateSpace({width:this.chartConfig.width,height:r}),i=u.height,r-=u.height,this.componentStore.xAxis.setAxisPosition("left"),u=this.componentStore.xAxis.calculateSpace({width:e,height:r}),e-=u.width,n=u.width,this.componentStore.yAxis.setAxisPosition("top"),u=this.componentStore.yAxis.calculateSpace({width:e,height:r}),r-=u.height,a=i+u.height,e>0&&(s+=e,e=0),r>0&&(l+=r,r=0),this.componentStore.plot.calculateSpace({width:s,height:l}),this.componentStore.plot.setBoundingBoxXY({x:n,y:a}),this.componentStore.yAxis.setRange([n,n+s]),this.componentStore.yAxis.setBoundingBoxXY({x:n,y:i}),this.componentStore.xAxis.setRange([a,a+l]),this.componentStore.xAxis.setBoundingBoxXY({x:0,y:a}),this.chartData.plots.some(h=>HW(h))&&this.componentStore.xAxis.recalculateOuterPaddingToDrawBar()}calculateSpace(){this.chartConfig.chartOrientation==="horizontal"?this.calculateHorizontalSpace():this.calculateVerticalSpace()}getDrawableElement(){this.calculateSpace();let e=[];this.componentStore.plot.setAxes(this.componentStore.xAxis,this.componentStore.yAxis);for(let r of Object.values(this.componentStore))e.push(...r.getDrawableElements());return e}}});var v_,Xwe=P(()=>{"use strict";jwe();v_=class{static{o(this,"XYChartBuilder")}static build(e,r,i,n){return new y_(e,r,i,n).getDrawableElement()}}});function Qwe(){let t=Zc(),e=Lt();return fi(t.xyChart,e.themeVariables.xyChart)}function Zwe(){let t=Lt();return fi(fr.xyChart,t.xyChart)}function Jwe(){return{yAxis:{type:"linear",title:"",min:1/0,max:-1/0},xAxis:{type:"band",title:"",categories:[]},title:"",plots:[]}}function eU(t){let e=Lt();return Tr(t.trim(),e)}function nht(t){Kwe=t}function aht(t){t==="horizontal"?LC.chartOrientation="horizontal":LC.chartOrientation="vertical"}function sht(t){Ni.xAxis.title=eU(t.text)}function e3e(t,e){Ni.xAxis={type:"linear",title:Ni.xAxis.title,min:t,max:e},x_=!0}function oht(t){Ni.xAxis={type:"band",title:Ni.xAxis.title,categories:t.map(e=>eU(e.text))},x_=!0}function lht(t){Ni.yAxis.title=eU(t.text)}function cht(t,e){Ni.yAxis={type:"linear",title:Ni.yAxis.title,min:t,max:e},JW=!0}function uht(t){let e=Math.min(...t),r=Math.max(...t),i=Qv(Ni.yAxis)?Ni.yAxis.min:1/0,n=Qv(Ni.yAxis)?Ni.yAxis.max:-1/0;Ni.yAxis={type:"linear",title:Ni.yAxis.title,min:Math.min(i,e),max:Math.max(n,r)}}function t3e(t){let e=[];if(t.length===0)return e;if(!x_){let r=Qv(Ni.xAxis)?Ni.xAxis.min:1/0,i=Qv(Ni.xAxis)?Ni.xAxis.max:-1/0;e3e(Math.min(r,1),Math.max(i,t.length))}if(JW||uht(t),h_(Ni.xAxis)&&(e=Ni.xAxis.categories.map((r,i)=>[r,t[i]])),Qv(Ni.xAxis)){let r=Ni.xAxis.min,i=Ni.xAxis.max,n=(i-r)/(t.length-1),a=[];for(let s=r;s<=i;s+=n)a.push(`${s}`);e=a.map((s,l)=>[s,t[l]])}return e}function r3e(t){return ZW[t===0?0:t%ZW.length]}function hht(t,e){let r=t3e(e);Ni.plots.push({type:"line",strokeFill:r3e(DC),strokeWidth:2,data:r}),DC++}function fht(t,e){let r=t3e(e);Ni.plots.push({type:"bar",fill:r3e(DC),data:r}),DC++}function dht(){if(Ni.plots.length===0)throw Error("No Plot to render, please provide a plot with some data");return Ni.title=Nr(),v_.build(LC,Ni,RC,Kwe)}function pht(){return RC}function mht(){return LC}function ght(){return Ni}var DC,Kwe,LC,RC,Ni,ZW,x_,JW,yht,i3e,n3e=P(()=>{"use strict";Sr();wa();wg();er();Vr();Ki();Xwe();f_();DC=0,LC=Zwe(),RC=Qwe(),Ni=Jwe(),ZW=RC.plotColorPalette.split(",").map(t=>t.trim()),x_=!1,JW=!1;o(Qwe,"getChartDefaultThemeConfig");o(Zwe,"getChartDefaultConfig");o(Jwe,"getChartDefaultData");o(eU,"textSanitizer");o(nht,"setTmpSVGG");o(aht,"setOrientation");o(sht,"setXAxisTitle");o(e3e,"setXAxisRangeData");o(oht,"setXAxisBand");o(lht,"setYAxisTitle");o(cht,"setYAxisRangeData");o(uht,"setYAxisRangeFromPlotData");o(t3e,"transformDataWithoutCategory");o(r3e,"getPlotColorFromPalette");o(hht,"setLineData");o(fht,"setBarData");o(dht,"getDrawableElem");o(pht,"getChartThemeConfig");o(mht,"getChartConfig");o(ght,"getXYChartData");yht=o(function(){wr(),DC=0,LC=Zwe(),Ni=Jwe(),RC=Qwe(),ZW=RC.plotColorPalette.split(",").map(t=>t.trim()),x_=!1,JW=!1},"clear"),i3e={getDrawableElem:dht,clear:yht,setAccTitle:Ar,getAccTitle:Dr,setDiagramTitle:Mr,getDiagramTitle:Nr,getAccDescription:Rr,setAccDescription:Lr,setOrientation:aht,setXAxisTitle:sht,setXAxisRangeData:e3e,setXAxisBand:oht,setYAxisTitle:lht,setYAxisRangeData:cht,setLineData:hht,setBarData:fht,setTmpSVGG:nht,getChartThemeConfig:pht,getChartConfig:mht,getXYChartData:ght}});var vht,a3e,s3e=P(()=>{"use strict";bt();ro();Xi();vht=o((t,e,r,i)=>{let n=i.db,a=n.getChartThemeConfig(),s=n.getChartConfig(),l=n.getXYChartData().plots[0].data.map(T=>T[1]);function u(T){return T==="top"?"text-before-edge":"middle"}o(u,"getDominantBaseLine");function h(T){return T==="left"?"start":T==="right"?"end":"middle"}o(h,"getTextAnchor");function f(T){return`translate(${T.x}, ${T.y}) rotate(${T.rotation||0})`}o(f,"getTextTransformation"),Q.debug(`Rendering xychart chart +`+t);let d=Fi(e),p=d.append("g").attr("class","main"),m=p.append("rect").attr("width",s.width).attr("height",s.height).attr("class","background");Hr(d,s.height,s.width,!0),d.attr("viewBox",`0 0 ${s.width} ${s.height}`),m.attr("fill",a.backgroundColor),n.setTmpSVGG(d.append("g").attr("class","mermaid-tmp-group"));let g=n.getDrawableElem(),y={};function v(T){let w=p,k="";for(let[C]of T.entries()){let E=p;C>0&&y[k]&&(E=y[k]),k+=T[C],w=y[k],w||(w=y[k]=E.append("g").attr("class",T[C]))}return w}o(v,"getGroup");for(let T of g){if(T.data.length===0)continue;let w=v(T.groupTexts);switch(T.type){case"rect":if(w.selectAll("rect").data(T.data).enter().append("rect").attr("x",k=>k.x).attr("y",k=>k.y).attr("width",k=>k.width).attr("height",k=>k.height).attr("fill",k=>k.fill).attr("stroke",k=>k.strokeFill).attr("stroke-width",k=>k.strokeWidth),s.showDataLabel){let k=s.showDataLabelOutsideBar;if(s.chartOrientation==="horizontal"){let L=function(_,D){let{data:N,label:R}=_;return D*R.length*.7<=N.width-10};var x=L;o(L,"fitsHorizontally");let C=.7,E=10,S=T.data.map((_,D)=>({data:_,label:l[D].toString()})).filter(_=>_.data.width>0&&_.data.height>0),M=S.map(_=>{let{data:D}=_,N=D.height*.7;for(;!L(_,N)&&N>0;)N-=1;return N}),I=Math.floor(Math.min(...M)),A=o(_=>k?_.data.x+_.data.width+10:_.data.x+_.data.width-10,"determineLabelXPosition");w.selectAll("text").data(S).enter().append("text").attr("x",A).attr("y",_=>_.data.y+_.data.height/2).attr("text-anchor",k?"start":"end").attr("dominant-baseline","middle").attr("fill",a.dataLabelColor).attr("font-size",`${I}px`).text(_=>_.label)}else{let S=function(A,_,D){let{data:N,label:R}=A,O=_*R.length*.7,$=N.x+N.width/2,z=$-O/2,F=$+O/2,V=z>=N.x&&F<=N.x+N.width,H=N.y+D+_<=N.y+N.height;return V&&H};var b=S;o(S,"fitsInBar");let C=10,E=T.data.map((A,_)=>({data:A,label:l[_].toString()})).filter(A=>A.data.width>0&&A.data.height>0),L=E.map(A=>{let{data:_,label:D}=A,N=_.width/(D.length*.7);for(;!S(A,N,10)&&N>0;)N-=1;return N}),M=Math.floor(Math.min(...L)),I=o(A=>k?A.data.y-10:A.data.y+10,"determineLabelYPosition");w.selectAll("text").data(E).enter().append("text").attr("x",A=>A.data.x+A.data.width/2).attr("y",I).attr("text-anchor","middle").attr("dominant-baseline",k?"auto":"hanging").attr("fill",a.dataLabelColor).attr("font-size",`${M}px`).text(A=>A.label)}}break;case"text":w.selectAll("text").data(T.data).enter().append("text").attr("x",0).attr("y",0).attr("fill",k=>k.fill).attr("font-size",k=>k.fontSize).attr("dominant-baseline",k=>u(k.verticalPos)).attr("text-anchor",k=>h(k.horizontalPos)).attr("transform",k=>f(k)).text(k=>k.text);break;case"path":w.selectAll("path").data(T.data).enter().append("path").attr("d",k=>k.path).attr("fill",k=>k.fill?k.fill:"none").attr("stroke",k=>k.strokeFill).attr("stroke-width",k=>k.strokeWidth);break}}},"draw"),a3e={draw:vht}});var o3e={};ur(o3e,{diagram:()=>xht});var xht,l3e=P(()=>{"use strict";Fwe();n3e();s3e();xht={parser:Bwe,db:i3e,renderer:a3e}});var tU,h3e,f3e=P(()=>{"use strict";tU=(function(){var t=o(function(K,oe,U,ue){for(U=U||{},ue=K.length;ue--;U[K[ue]]=oe);return U},"o"),e=[1,3],r=[1,4],i=[1,5],n=[1,6],a=[5,6,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,77,89,90],s=[1,22],l=[2,7],u=[1,26],h=[1,27],f=[1,28],d=[1,29],p=[1,33],m=[1,34],g=[1,35],y=[1,36],v=[1,37],x=[1,38],b=[1,24],T=[1,31],w=[1,32],k=[1,30],C=[1,39],E=[1,40],S=[5,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,77,89,90],L=[1,61],M=[89,90],I=[5,8,9,11,13,21,22,23,24,27,29,41,42,43,44,45,46,54,61,63,72,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90],A=[27,29],_=[1,70],D=[1,71],N=[1,72],R=[1,73],B=[1,74],O=[1,75],$=[1,76],z=[1,83],F=[1,80],V=[1,84],H=[1,85],X=[1,86],W=[1,87],Z=[1,88],Y=[1,89],ae=[1,90],J=[1,91],ee=[1,92],re=[5,8,9,11,13,21,22,23,24,27,41,42,43,44,45,46,54,72,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90],te=[63,64],be=[1,101],de=[5,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,76,77,89,90],Ee=[5,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90],Ne=[1,110],we=[1,106],Te=[1,107],De=[1,108],$e=[1,109],pe=[1,111],Je=[1,116],Ce=[1,117],Fe=[1,114],Ue=[1,115],qe={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,directive:4,NEWLINE:5,RD:6,diagram:7,EOF:8,acc_title:9,acc_title_value:10,acc_descr:11,acc_descr_value:12,acc_descr_multiline_value:13,requirementDef:14,elementDef:15,relationshipDef:16,direction:17,styleStatement:18,classDefStatement:19,classStatement:20,direction_tb:21,direction_bt:22,direction_rl:23,direction_lr:24,requirementType:25,requirementName:26,STRUCT_START:27,requirementBody:28,STYLE_SEPARATOR:29,idList:30,ID:31,COLONSEP:32,id:33,TEXT:34,text:35,RISK:36,riskLevel:37,VERIFYMTHD:38,verifyType:39,STRUCT_STOP:40,REQUIREMENT:41,FUNCTIONAL_REQUIREMENT:42,INTERFACE_REQUIREMENT:43,PERFORMANCE_REQUIREMENT:44,PHYSICAL_REQUIREMENT:45,DESIGN_CONSTRAINT:46,LOW_RISK:47,MED_RISK:48,HIGH_RISK:49,VERIFY_ANALYSIS:50,VERIFY_DEMONSTRATION:51,VERIFY_INSPECTION:52,VERIFY_TEST:53,ELEMENT:54,elementName:55,elementBody:56,TYPE:57,type:58,DOCREF:59,ref:60,END_ARROW_L:61,relationship:62,LINE:63,END_ARROW_R:64,CONTAINS:65,COPIES:66,DERIVES:67,SATISFIES:68,VERIFIES:69,REFINES:70,TRACES:71,CLASSDEF:72,stylesOpt:73,CLASS:74,ALPHA:75,COMMA:76,STYLE:77,style:78,styleComponent:79,NUM:80,COLON:81,UNIT:82,SPACE:83,BRKT:84,PCT:85,MINUS:86,LABEL:87,SEMICOLON:88,unqString:89,qString:90,$accept:0,$end:1},terminals_:{2:"error",5:"NEWLINE",6:"RD",8:"EOF",9:"acc_title",10:"acc_title_value",11:"acc_descr",12:"acc_descr_value",13:"acc_descr_multiline_value",21:"direction_tb",22:"direction_bt",23:"direction_rl",24:"direction_lr",27:"STRUCT_START",29:"STYLE_SEPARATOR",31:"ID",32:"COLONSEP",34:"TEXT",36:"RISK",38:"VERIFYMTHD",40:"STRUCT_STOP",41:"REQUIREMENT",42:"FUNCTIONAL_REQUIREMENT",43:"INTERFACE_REQUIREMENT",44:"PERFORMANCE_REQUIREMENT",45:"PHYSICAL_REQUIREMENT",46:"DESIGN_CONSTRAINT",47:"LOW_RISK",48:"MED_RISK",49:"HIGH_RISK",50:"VERIFY_ANALYSIS",51:"VERIFY_DEMONSTRATION",52:"VERIFY_INSPECTION",53:"VERIFY_TEST",54:"ELEMENT",57:"TYPE",59:"DOCREF",61:"END_ARROW_L",63:"LINE",64:"END_ARROW_R",65:"CONTAINS",66:"COPIES",67:"DERIVES",68:"SATISFIES",69:"VERIFIES",70:"REFINES",71:"TRACES",72:"CLASSDEF",74:"CLASS",75:"ALPHA",76:"COMMA",77:"STYLE",80:"NUM",81:"COLON",82:"UNIT",83:"SPACE",84:"BRKT",85:"PCT",86:"MINUS",87:"LABEL",88:"SEMICOLON",89:"unqString",90:"qString"},productions_:[0,[3,3],[3,2],[3,4],[4,2],[4,2],[4,1],[7,0],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[17,1],[17,1],[17,1],[17,1],[14,5],[14,7],[28,5],[28,5],[28,5],[28,5],[28,2],[28,1],[25,1],[25,1],[25,1],[25,1],[25,1],[25,1],[37,1],[37,1],[37,1],[39,1],[39,1],[39,1],[39,1],[15,5],[15,7],[56,5],[56,5],[56,2],[56,1],[16,5],[16,5],[62,1],[62,1],[62,1],[62,1],[62,1],[62,1],[62,1],[19,3],[20,3],[20,3],[30,1],[30,3],[30,1],[30,3],[18,3],[73,1],[73,3],[78,1],[78,2],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[26,1],[26,1],[33,1],[33,1],[35,1],[35,1],[55,1],[55,1],[58,1],[58,1],[60,1],[60,1]],performAction:o(function(oe,U,ue,G,se,le,ke){var me=le.length-1;switch(se){case 4:this.$=le[me].trim(),G.setAccTitle(this.$);break;case 5:case 6:this.$=le[me].trim(),G.setAccDescription(this.$);break;case 7:this.$=[];break;case 17:G.setDirection("TB");break;case 18:G.setDirection("BT");break;case 19:G.setDirection("RL");break;case 20:G.setDirection("LR");break;case 21:G.addRequirement(le[me-3],le[me-4]);break;case 22:G.addRequirement(le[me-5],le[me-6]),G.setClass([le[me-5]],le[me-3]);break;case 23:G.setNewReqId(le[me-2]);break;case 24:G.setNewReqText(le[me-2]);break;case 25:G.setNewReqRisk(le[me-2]);break;case 26:G.setNewReqVerifyMethod(le[me-2]);break;case 29:this.$=G.RequirementType.REQUIREMENT;break;case 30:this.$=G.RequirementType.FUNCTIONAL_REQUIREMENT;break;case 31:this.$=G.RequirementType.INTERFACE_REQUIREMENT;break;case 32:this.$=G.RequirementType.PERFORMANCE_REQUIREMENT;break;case 33:this.$=G.RequirementType.PHYSICAL_REQUIREMENT;break;case 34:this.$=G.RequirementType.DESIGN_CONSTRAINT;break;case 35:this.$=G.RiskLevel.LOW_RISK;break;case 36:this.$=G.RiskLevel.MED_RISK;break;case 37:this.$=G.RiskLevel.HIGH_RISK;break;case 38:this.$=G.VerifyType.VERIFY_ANALYSIS;break;case 39:this.$=G.VerifyType.VERIFY_DEMONSTRATION;break;case 40:this.$=G.VerifyType.VERIFY_INSPECTION;break;case 41:this.$=G.VerifyType.VERIFY_TEST;break;case 42:G.addElement(le[me-3]);break;case 43:G.addElement(le[me-5]),G.setClass([le[me-5]],le[me-3]);break;case 44:G.setNewElementType(le[me-2]);break;case 45:G.setNewElementDocRef(le[me-2]);break;case 48:G.addRelationship(le[me-2],le[me],le[me-4]);break;case 49:G.addRelationship(le[me-2],le[me-4],le[me]);break;case 50:this.$=G.Relationships.CONTAINS;break;case 51:this.$=G.Relationships.COPIES;break;case 52:this.$=G.Relationships.DERIVES;break;case 53:this.$=G.Relationships.SATISFIES;break;case 54:this.$=G.Relationships.VERIFIES;break;case 55:this.$=G.Relationships.REFINES;break;case 56:this.$=G.Relationships.TRACES;break;case 57:this.$=le[me-2],G.defineClass(le[me-1],le[me]);break;case 58:G.setClass(le[me-1],le[me]);break;case 59:G.setClass([le[me-2]],le[me]);break;case 60:case 62:this.$=[le[me]];break;case 61:case 63:this.$=le[me-2].concat([le[me]]);break;case 64:this.$=le[me-2],G.setCssStyle(le[me-1],le[me]);break;case 65:this.$=[le[me]];break;case 66:le[me-2].push(le[me]),this.$=le[me-2];break;case 68:this.$=le[me-1]+le[me];break}},"anonymous"),table:[{3:1,4:2,6:e,9:r,11:i,13:n},{1:[3]},{3:8,4:2,5:[1,7],6:e,9:r,11:i,13:n},{5:[1,9]},{10:[1,10]},{12:[1,11]},t(a,[2,6]),{3:12,4:2,6:e,9:r,11:i,13:n},{1:[2,2]},{4:17,5:s,7:13,8:l,9:r,11:i,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:w,77:k,89:C,90:E},t(a,[2,4]),t(a,[2,5]),{1:[2,1]},{8:[1,41]},{4:17,5:s,7:42,8:l,9:r,11:i,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:w,77:k,89:C,90:E},{4:17,5:s,7:43,8:l,9:r,11:i,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:w,77:k,89:C,90:E},{4:17,5:s,7:44,8:l,9:r,11:i,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:w,77:k,89:C,90:E},{4:17,5:s,7:45,8:l,9:r,11:i,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:w,77:k,89:C,90:E},{4:17,5:s,7:46,8:l,9:r,11:i,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:w,77:k,89:C,90:E},{4:17,5:s,7:47,8:l,9:r,11:i,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:w,77:k,89:C,90:E},{4:17,5:s,7:48,8:l,9:r,11:i,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:w,77:k,89:C,90:E},{4:17,5:s,7:49,8:l,9:r,11:i,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:w,77:k,89:C,90:E},{4:17,5:s,7:50,8:l,9:r,11:i,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:w,77:k,89:C,90:E},{26:51,89:[1,52],90:[1,53]},{55:54,89:[1,55],90:[1,56]},{29:[1,59],61:[1,57],63:[1,58]},t(S,[2,17]),t(S,[2,18]),t(S,[2,19]),t(S,[2,20]),{30:60,33:62,75:L,89:C,90:E},{30:63,33:62,75:L,89:C,90:E},{30:64,33:62,75:L,89:C,90:E},t(M,[2,29]),t(M,[2,30]),t(M,[2,31]),t(M,[2,32]),t(M,[2,33]),t(M,[2,34]),t(I,[2,81]),t(I,[2,82]),{1:[2,3]},{8:[2,8]},{8:[2,9]},{8:[2,10]},{8:[2,11]},{8:[2,12]},{8:[2,13]},{8:[2,14]},{8:[2,15]},{8:[2,16]},{27:[1,65],29:[1,66]},t(A,[2,79]),t(A,[2,80]),{27:[1,67],29:[1,68]},t(A,[2,85]),t(A,[2,86]),{62:69,65:_,66:D,67:N,68:R,69:B,70:O,71:$},{62:77,65:_,66:D,67:N,68:R,69:B,70:O,71:$},{30:78,33:62,75:L,89:C,90:E},{73:79,75:z,76:F,78:81,79:82,80:V,81:H,82:X,83:W,84:Z,85:Y,86:ae,87:J,88:ee},t(re,[2,60]),t(re,[2,62]),{73:93,75:z,76:F,78:81,79:82,80:V,81:H,82:X,83:W,84:Z,85:Y,86:ae,87:J,88:ee},{30:94,33:62,75:L,76:F,89:C,90:E},{5:[1,95]},{30:96,33:62,75:L,89:C,90:E},{5:[1,97]},{30:98,33:62,75:L,89:C,90:E},{63:[1,99]},t(te,[2,50]),t(te,[2,51]),t(te,[2,52]),t(te,[2,53]),t(te,[2,54]),t(te,[2,55]),t(te,[2,56]),{64:[1,100]},t(S,[2,59],{76:F}),t(S,[2,64],{76:be}),{33:103,75:[1,102],89:C,90:E},t(de,[2,65],{79:104,75:z,80:V,81:H,82:X,83:W,84:Z,85:Y,86:ae,87:J,88:ee}),t(Ee,[2,67]),t(Ee,[2,69]),t(Ee,[2,70]),t(Ee,[2,71]),t(Ee,[2,72]),t(Ee,[2,73]),t(Ee,[2,74]),t(Ee,[2,75]),t(Ee,[2,76]),t(Ee,[2,77]),t(Ee,[2,78]),t(S,[2,57],{76:be}),t(S,[2,58],{76:F}),{5:Ne,28:105,31:we,34:Te,36:De,38:$e,40:pe},{27:[1,112],76:F},{5:Je,40:Ce,56:113,57:Fe,59:Ue},{27:[1,118],76:F},{33:119,89:C,90:E},{33:120,89:C,90:E},{75:z,78:121,79:82,80:V,81:H,82:X,83:W,84:Z,85:Y,86:ae,87:J,88:ee},t(re,[2,61]),t(re,[2,63]),t(Ee,[2,68]),t(S,[2,21]),{32:[1,122]},{32:[1,123]},{32:[1,124]},{32:[1,125]},{5:Ne,28:126,31:we,34:Te,36:De,38:$e,40:pe},t(S,[2,28]),{5:[1,127]},t(S,[2,42]),{32:[1,128]},{32:[1,129]},{5:Je,40:Ce,56:130,57:Fe,59:Ue},t(S,[2,47]),{5:[1,131]},t(S,[2,48]),t(S,[2,49]),t(de,[2,66],{79:104,75:z,80:V,81:H,82:X,83:W,84:Z,85:Y,86:ae,87:J,88:ee}),{33:132,89:C,90:E},{35:133,89:[1,134],90:[1,135]},{37:136,47:[1,137],48:[1,138],49:[1,139]},{39:140,50:[1,141],51:[1,142],52:[1,143],53:[1,144]},t(S,[2,27]),{5:Ne,28:145,31:we,34:Te,36:De,38:$e,40:pe},{58:146,89:[1,147],90:[1,148]},{60:149,89:[1,150],90:[1,151]},t(S,[2,46]),{5:Je,40:Ce,56:152,57:Fe,59:Ue},{5:[1,153]},{5:[1,154]},{5:[2,83]},{5:[2,84]},{5:[1,155]},{5:[2,35]},{5:[2,36]},{5:[2,37]},{5:[1,156]},{5:[2,38]},{5:[2,39]},{5:[2,40]},{5:[2,41]},t(S,[2,22]),{5:[1,157]},{5:[2,87]},{5:[2,88]},{5:[1,158]},{5:[2,89]},{5:[2,90]},t(S,[2,43]),{5:Ne,28:159,31:we,34:Te,36:De,38:$e,40:pe},{5:Ne,28:160,31:we,34:Te,36:De,38:$e,40:pe},{5:Ne,28:161,31:we,34:Te,36:De,38:$e,40:pe},{5:Ne,28:162,31:we,34:Te,36:De,38:$e,40:pe},{5:Je,40:Ce,56:163,57:Fe,59:Ue},{5:Je,40:Ce,56:164,57:Fe,59:Ue},t(S,[2,23]),t(S,[2,24]),t(S,[2,25]),t(S,[2,26]),t(S,[2,44]),t(S,[2,45])],defaultActions:{8:[2,2],12:[2,1],41:[2,3],42:[2,8],43:[2,9],44:[2,10],45:[2,11],46:[2,12],47:[2,13],48:[2,14],49:[2,15],50:[2,16],134:[2,83],135:[2,84],137:[2,35],138:[2,36],139:[2,37],141:[2,38],142:[2,39],143:[2,40],144:[2,41],147:[2,87],148:[2,88],150:[2,89],151:[2,90]},parseError:o(function(oe,U){if(U.recoverable)this.trace(oe);else{var ue=new Error(oe);throw ue.hash=U,ue}},"parseError"),parse:o(function(oe){var U=this,ue=[0],G=[],se=[null],le=[],ke=this.table,me="",ye=0,Re=0,ve=0,Oe=2,We=1,Be=le.slice.call(arguments,1),Qe=Object.create(this.lexer),ce={yy:{}};for(var it in this.yy)Object.prototype.hasOwnProperty.call(this.yy,it)&&(ce.yy[it]=this.yy[it]);Qe.setInput(oe,ce.yy),ce.yy.lexer=Qe,ce.yy.parser=this,typeof Qe.yylloc>"u"&&(Qe.yylloc={});var fe=Qe.yylloc;le.push(fe);var ut=Qe.options&&Qe.options.ranges;typeof ce.yy.parseError=="function"?this.parseError=ce.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Nt(ir){ue.length=ue.length-2*ir,se.length=se.length-ir,le.length=le.length-ir}o(Nt,"popStack");function Pt(){var ir;return ir=G.pop()||Qe.lex()||We,typeof ir!="number"&&(ir instanceof Array&&(G=ir,ir=G.pop()),ir=U.symbols_[ir]||ir),ir}o(Pt,"lex");for(var St,It,ot,ct,Dt,kt,yt={},jt,hr,Qt,Er;;){if(ot=ue[ue.length-1],this.defaultActions[ot]?ct=this.defaultActions[ot]:((St===null||typeof St>"u")&&(St=Pt()),ct=ke[ot]&&ke[ot][St]),typeof ct>"u"||!ct.length||!ct[0]){var dr="";Er=[];for(jt in ke[ot])this.terminals_[jt]&&jt>Oe&&Er.push("'"+this.terminals_[jt]+"'");Qe.showPosition?dr="Parse error on line "+(ye+1)+`: +`+Qe.showPosition()+` +Expecting `+Er.join(", ")+", got '"+(this.terminals_[St]||St)+"'":dr="Parse error on line "+(ye+1)+": Unexpected "+(St==We?"end of input":"'"+(this.terminals_[St]||St)+"'"),this.parseError(dr,{text:Qe.match,token:this.terminals_[St]||St,line:Qe.yylineno,loc:fe,expected:Er})}if(ct[0]instanceof Array&&ct.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ot+", token: "+St);switch(ct[0]){case 1:ue.push(St),se.push(Qe.yytext),le.push(Qe.yylloc),ue.push(ct[1]),St=null,It?(St=It,It=null):(Re=Qe.yyleng,me=Qe.yytext,ye=Qe.yylineno,fe=Qe.yylloc,ve>0&&ve--);break;case 2:if(hr=this.productions_[ct[1]][1],yt.$=se[se.length-hr],yt._$={first_line:le[le.length-(hr||1)].first_line,last_line:le[le.length-1].last_line,first_column:le[le.length-(hr||1)].first_column,last_column:le[le.length-1].last_column},ut&&(yt._$.range=[le[le.length-(hr||1)].range[0],le[le.length-1].range[1]]),kt=this.performAction.apply(yt,[me,Re,ye,ce.yy,ct[1],se,le].concat(Be)),typeof kt<"u")return kt;hr&&(ue=ue.slice(0,-1*hr*2),se=se.slice(0,-1*hr),le=le.slice(0,-1*hr)),ue.push(this.productions_[ct[1]][0]),se.push(yt.$),le.push(yt._$),Qt=ke[ue[ue.length-2]][ue[ue.length-1]],ue.push(Qt);break;case 3:return!0}}return!0},"parse")},Me=(function(){var K={EOF:1,parseError:o(function(U,ue){if(this.yy.parser)this.yy.parser.parseError(U,ue);else throw new Error(U)},"parseError"),setInput:o(function(oe,U){return this.yy=U||this.yy||{},this._input=oe,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var oe=this._input[0];this.yytext+=oe,this.yyleng++,this.offset++,this.match+=oe,this.matched+=oe;var U=oe.match(/(?:\r\n?|\n).*/g);return U?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),oe},"input"),unput:o(function(oe){var U=oe.length,ue=oe.split(/(?:\r\n?|\n)/g);this._input=oe+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-U),this.offset-=U;var G=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),ue.length-1&&(this.yylineno-=ue.length-1);var se=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:ue?(ue.length===G.length?this.yylloc.first_column:0)+G[G.length-ue.length].length-ue[0].length:this.yylloc.first_column-U},this.options.ranges&&(this.yylloc.range=[se[0],se[0]+this.yyleng-U]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(oe){this.unput(this.match.slice(oe))},"less"),pastInput:o(function(){var oe=this.matched.substr(0,this.matched.length-this.match.length);return(oe.length>20?"...":"")+oe.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var oe=this.match;return oe.length<20&&(oe+=this._input.substr(0,20-oe.length)),(oe.substr(0,20)+(oe.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var oe=this.pastInput(),U=new Array(oe.length+1).join("-");return oe+this.upcomingInput()+` +`+U+"^"},"showPosition"),test_match:o(function(oe,U){var ue,G,se;if(this.options.backtrack_lexer&&(se={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(se.yylloc.range=this.yylloc.range.slice(0))),G=oe[0].match(/(?:\r\n?|\n).*/g),G&&(this.yylineno+=G.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:G?G[G.length-1].length-G[G.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+oe[0].length},this.yytext+=oe[0],this.match+=oe[0],this.matches=oe,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(oe[0].length),this.matched+=oe[0],ue=this.performAction.call(this,this.yy,this,U,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),ue)return ue;if(this._backtrack){for(var le in se)this[le]=se[le];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var oe,U,ue,G;this._more||(this.yytext="",this.match="");for(var se=this._currentRules(),le=0;leU[0].length)){if(U=ue,G=le,this.options.backtrack_lexer){if(oe=this.test_match(ue,se[le]),oe!==!1)return oe;if(this._backtrack){U=!1;continue}else return!1}else if(!this.options.flex)break}return U?(oe=this.test_match(U,se[G]),oe!==!1?oe:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var U=this.next();return U||this.lex()},"lex"),begin:o(function(U){this.conditionStack.push(U)},"begin"),popState:o(function(){var U=this.conditionStack.length-1;return U>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(U){return U=this.conditionStack.length-1-Math.abs(U||0),U>=0?this.conditionStack[U]:"INITIAL"},"topState"),pushState:o(function(U){this.begin(U)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(U,ue,G,se){var le=se;switch(G){case 0:return"title";case 1:return this.begin("acc_title"),9;break;case 2:return this.popState(),"acc_title_value";break;case 3:return this.begin("acc_descr"),11;break;case 4:return this.popState(),"acc_descr_value";break;case 5:this.begin("acc_descr_multiline");break;case 6:this.popState();break;case 7:return"acc_descr_multiline_value";case 8:return 21;case 9:return 22;case 10:return 23;case 11:return 24;case 12:return 5;case 13:break;case 14:break;case 15:break;case 16:return 8;case 17:return 6;case 18:return 27;case 19:return 40;case 20:return 29;case 21:return 32;case 22:return 31;case 23:return 34;case 24:return 36;case 25:return 38;case 26:return 41;case 27:return 42;case 28:return 43;case 29:return 44;case 30:return 45;case 31:return 46;case 32:return 47;case 33:return 48;case 34:return 49;case 35:return 50;case 36:return 51;case 37:return 52;case 38:return 53;case 39:return 54;case 40:return 65;case 41:return 66;case 42:return 67;case 43:return 68;case 44:return 69;case 45:return 70;case 46:return 71;case 47:return 57;case 48:return 59;case 49:return this.begin("style"),77;break;case 50:return 75;case 51:return 81;case 52:return 88;case 53:return"PERCENT";case 54:return 86;case 55:return 84;case 56:break;case 57:this.begin("string");break;case 58:this.popState();break;case 59:return this.begin("style"),72;break;case 60:return this.begin("style"),74;break;case 61:return 61;case 62:return 64;case 63:return 63;case 64:this.begin("string");break;case 65:this.popState();break;case 66:return"qString";case 67:return ue.yytext=ue.yytext.trim(),89;break;case 68:return 75;case 69:return 80;case 70:return 76}},"anonymous"),rules:[/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:$)/i,/^(?:requirementDiagram\b)/i,/^(?:\{)/i,/^(?:\})/i,/^(?::{3})/i,/^(?::)/i,/^(?:id\b)/i,/^(?:text\b)/i,/^(?:risk\b)/i,/^(?:verifyMethod\b)/i,/^(?:requirement\b)/i,/^(?:functionalRequirement\b)/i,/^(?:interfaceRequirement\b)/i,/^(?:performanceRequirement\b)/i,/^(?:physicalRequirement\b)/i,/^(?:designConstraint\b)/i,/^(?:low\b)/i,/^(?:medium\b)/i,/^(?:high\b)/i,/^(?:analysis\b)/i,/^(?:demonstration\b)/i,/^(?:inspection\b)/i,/^(?:test\b)/i,/^(?:element\b)/i,/^(?:contains\b)/i,/^(?:copies\b)/i,/^(?:derives\b)/i,/^(?:satisfies\b)/i,/^(?:verifies\b)/i,/^(?:refines\b)/i,/^(?:traces\b)/i,/^(?:type\b)/i,/^(?:docref\b)/i,/^(?:style\b)/i,/^(?:\w+)/i,/^(?::)/i,/^(?:;)/i,/^(?:%)/i,/^(?:-)/i,/^(?:#)/i,/^(?: )/i,/^(?:["])/i,/^(?:\n)/i,/^(?:classDef\b)/i,/^(?:class\b)/i,/^(?:<-)/i,/^(?:->)/i,/^(?:-)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[\w][^:,\r\n\{\<\>\-\=]*)/i,/^(?:\w+)/i,/^(?:[0-9]+)/i,/^(?:,)/i],conditions:{acc_descr_multiline:{rules:[6,7,68,69,70],inclusive:!1},acc_descr:{rules:[4,68,69,70],inclusive:!1},acc_title:{rules:[2,68,69,70],inclusive:!1},style:{rules:[50,51,52,53,54,55,56,57,58,68,69,70],inclusive:!1},unqString:{rules:[68,69,70],inclusive:!1},token:{rules:[68,69,70],inclusive:!1},string:{rules:[65,66,68,69,70],inclusive:!1},INITIAL:{rules:[0,1,3,5,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,59,60,61,62,63,64,67,68,69,70],inclusive:!0}}};return K})();qe.lexer=Me;function He(){this.yy={}}return o(He,"Parser"),He.prototype=qe,qe.Parser=He,new He})();tU.parser=tU;h3e=tU});var b_,d3e=P(()=>{"use strict";Ut();bt();Ki();b_=class{constructor(){this.relations=[];this.latestRequirement=this.getInitialRequirement();this.requirements=new Map;this.latestElement=this.getInitialElement();this.elements=new Map;this.classes=new Map;this.direction="TB";this.RequirementType={REQUIREMENT:"Requirement",FUNCTIONAL_REQUIREMENT:"Functional Requirement",INTERFACE_REQUIREMENT:"Interface Requirement",PERFORMANCE_REQUIREMENT:"Performance Requirement",PHYSICAL_REQUIREMENT:"Physical Requirement",DESIGN_CONSTRAINT:"Design Constraint"};this.RiskLevel={LOW_RISK:"Low",MED_RISK:"Medium",HIGH_RISK:"High"};this.VerifyType={VERIFY_ANALYSIS:"Analysis",VERIFY_DEMONSTRATION:"Demonstration",VERIFY_INSPECTION:"Inspection",VERIFY_TEST:"Test"};this.Relationships={CONTAINS:"contains",COPIES:"copies",DERIVES:"derives",SATISFIES:"satisfies",VERIFIES:"verifies",REFINES:"refines",TRACES:"traces"};this.setAccTitle=Ar;this.getAccTitle=Dr;this.setAccDescription=Lr;this.getAccDescription=Rr;this.setDiagramTitle=Mr;this.getDiagramTitle=Nr;this.getConfig=o(()=>ge().requirement,"getConfig");this.clear(),this.setDirection=this.setDirection.bind(this),this.addRequirement=this.addRequirement.bind(this),this.setNewReqId=this.setNewReqId.bind(this),this.setNewReqRisk=this.setNewReqRisk.bind(this),this.setNewReqText=this.setNewReqText.bind(this),this.setNewReqVerifyMethod=this.setNewReqVerifyMethod.bind(this),this.addElement=this.addElement.bind(this),this.setNewElementType=this.setNewElementType.bind(this),this.setNewElementDocRef=this.setNewElementDocRef.bind(this),this.addRelationship=this.addRelationship.bind(this),this.setCssStyle=this.setCssStyle.bind(this),this.setClass=this.setClass.bind(this),this.defineClass=this.defineClass.bind(this),this.setAccTitle=this.setAccTitle.bind(this),this.setAccDescription=this.setAccDescription.bind(this)}static{o(this,"RequirementDB")}getDirection(){return this.direction}setDirection(e){this.direction=e}resetLatestRequirement(){this.latestRequirement=this.getInitialRequirement()}resetLatestElement(){this.latestElement=this.getInitialElement()}getInitialRequirement(){return{requirementId:"",text:"",risk:"",verifyMethod:"",name:"",type:"",cssStyles:[],classes:["default"]}}getInitialElement(){return{name:"",type:"",docRef:"",cssStyles:[],classes:["default"]}}addRequirement(e,r){return this.requirements.has(e)||this.requirements.set(e,{name:e,type:r,requirementId:this.latestRequirement.requirementId,text:this.latestRequirement.text,risk:this.latestRequirement.risk,verifyMethod:this.latestRequirement.verifyMethod,cssStyles:[],classes:["default"]}),this.resetLatestRequirement(),this.requirements.get(e)}getRequirements(){return this.requirements}setNewReqId(e){this.latestRequirement!==void 0&&(this.latestRequirement.requirementId=e)}setNewReqText(e){this.latestRequirement!==void 0&&(this.latestRequirement.text=e)}setNewReqRisk(e){this.latestRequirement!==void 0&&(this.latestRequirement.risk=e)}setNewReqVerifyMethod(e){this.latestRequirement!==void 0&&(this.latestRequirement.verifyMethod=e)}addElement(e){return this.elements.has(e)||(this.elements.set(e,{name:e,type:this.latestElement.type,docRef:this.latestElement.docRef,cssStyles:[],classes:["default"]}),Q.info("Added new element: ",e)),this.resetLatestElement(),this.elements.get(e)}getElements(){return this.elements}setNewElementType(e){this.latestElement!==void 0&&(this.latestElement.type=e)}setNewElementDocRef(e){this.latestElement!==void 0&&(this.latestElement.docRef=e)}addRelationship(e,r,i){this.relations.push({type:e,src:r,dst:i})}getRelationships(){return this.relations}clear(){this.relations=[],this.resetLatestRequirement(),this.requirements=new Map,this.resetLatestElement(),this.elements=new Map,this.classes=new Map,wr()}setCssStyle(e,r){for(let i of e){let n=this.requirements.get(i)??this.elements.get(i);if(!r||!n)return;for(let a of r)a.includes(",")?n.cssStyles.push(...a.split(",")):n.cssStyles.push(a)}}setClass(e,r){for(let i of e){let n=this.requirements.get(i)??this.elements.get(i);if(n)for(let a of r){n.classes.push(a);let s=this.classes.get(a)?.styles;s&&n.cssStyles.push(...s)}}}defineClass(e,r){for(let i of e){let n=this.classes.get(i);n===void 0&&(n={id:i,styles:[],textStyles:[]},this.classes.set(i,n)),r&&r.forEach(function(a){if(/color/.exec(a)){let s=a.replace("fill","bgFill");n.textStyles.push(s)}n.styles.push(a)}),this.requirements.forEach(a=>{a.classes.includes(i)&&a.cssStyles.push(...r.flatMap(s=>s.split(",")))}),this.elements.forEach(a=>{a.classes.includes(i)&&a.cssStyles.push(...r.flatMap(s=>s.split(",")))})}}getClasses(){return this.classes}getData(){let e=ge(),r=[],i=[];for(let n of this.requirements.values()){let a=n;a.id=n.name,a.cssStyles=n.cssStyles,a.cssClasses=n.classes.join(" "),a.shape="requirementBox",a.look=e.look,a.colorIndex=r.length,r.push(a)}for(let n of this.elements.values()){let a=n;a.shape="requirementBox",a.look=e.look,a.id=n.name,a.cssStyles=n.cssStyles,a.cssClasses=n.classes.join(" "),a.colorIndex=r.length,r.push(a)}for(let n of this.relations){let a=0,s=n.type===this.Relationships.CONTAINS,l={id:`${n.src}-${n.dst}-${a}`,start:this.requirements.get(n.src)?.name??this.elements.get(n.src)?.name,end:this.requirements.get(n.dst)?.name??this.elements.get(n.dst)?.name,label:`<<${n.type}>>`,classes:"relationshipLine",style:["fill:none",s?"":"stroke-dasharray: 10,7"],labelpos:"c",thickness:"normal",type:"normal",pattern:s?"normal":"dashed",arrowTypeStart:s?"requirement_contains":"",arrowTypeEnd:s?"":"requirement_arrow",look:e.look,labelType:"markdown"};i.push(l),a++}return{nodes:r,edges:i,other:{},config:e,direction:this.getDirection()}}}});var Cht,wht,p3e,m3e=P(()=>{"use strict";Sr();Cht=o(t=>{let e=Lt(),{themeVariables:r,look:i}=e,{bkgColorArray:n,borderColorArray:a}=r;if(!a?.length)return"";let s="";for(let l=0;l{let e=Lt(),{look:r,themeVariables:i}=e,{requirementEdgeLabelBackground:n}=i;return` + ${Cht(t)} + marker { + fill: ${t.relationColor}; + stroke: ${t.relationColor}; + } + + marker.cross { + stroke: ${t.lineColor}; + } + + svg { + font-family: ${t.fontFamily}; + font-size: ${t.fontSize}; + } + + .reqBox { + fill: ${t.requirementBackground}; + fill-opacity: 1.0; + stroke: ${t.requirementBorderColor}; + stroke-width: ${t.requirementBorderSize}; + } + + .reqTitle, .reqLabel{ + fill: ${t.requirementTextColor}; + } + .reqLabelBox { + fill: ${t.relationLabelBackground}; + fill-opacity: 1.0; + } + + .req-title-line { + stroke: ${t.requirementBorderColor}; + stroke-width: ${t.requirementBorderSize}; + } + .relationshipLine { + stroke: ${t.relationColor}; + stroke-width: ${r==="neo"?t.strokeWidth:"1px"}; + } + .relationshipLabel { + fill: ${t.relationLabelColor}; + } + .edgeLabel { + background-color: ${t.edgeLabelBackground}; + } + .edgeLabel .label rect { + fill: ${t.edgeLabelBackground}; + } + .edgeLabel .label text { + fill: ${t.relationLabelColor}; + } + .divider { + stroke: ${t.nodeBorder}; + stroke-width: 1; + } + .label { + font-family: ${t.fontFamily}; + color: ${t.nodeTextColor||t.textColor}; + } + .label text,span { + fill: ${t.nodeTextColor||t.textColor}; + color: ${t.nodeTextColor||t.textColor}; + } + .labelBkg { + background-color: ${n??t.edgeLabelBackground}; + } + +`},"getStyles"),p3e=wht});var rU={};ur(rU,{draw:()=>Eht});var Eht,g3e=P(()=>{"use strict";Ut();bt();I0();Wd();Ud();er();Eht=o(async function(t,e,r,i){Q.info("REF0:"),Q.info("Drawing requirement diagram (unified)",e);let{securityLevel:n,state:a,layout:s,look:l}=ge(),u=i.db.getData(),h=Ol(e,n);u.type=i.type,u.layoutAlgorithm=Vu(s),u.nodeSpacing=a?.nodeSpacing??50,u.rankSpacing=a?.rankSpacing??50,u.markers=l==="neo"?["requirement_contains_neo","requirement_arrow_neo"]:["requirement_contains","requirement_arrow"],u.diagramId=e,await Ul(u,h);let f=8;Kt.insertTitle(h,"requirementDiagramTitleText",a?.titleTopMargin??25,i.db.getDiagramTitle()),Ro(h,f,"requirementDiagram",a?.useMaxWidth??!0)},"draw")});var y3e={};ur(y3e,{diagram:()=>Sht});var Sht,v3e=P(()=>{"use strict";f3e();d3e();m3e();g3e();Sht={parser:h3e,get db(){return new b_},renderer:rU,styles:p3e}});var iU,T3e,k3e=P(()=>{"use strict";iU=(function(){var t=o(function(Re,ve,Oe,We){for(Oe=Oe||{},We=Re.length;We--;Oe[Re[We]]=ve);return Oe},"o"),e=[1,2],r=[1,3],i=[1,4],n=[2,4],a=[1,9],s=[1,11],l=[1,12],u=[1,14],h=[1,15],f=[1,17],d=[1,18],p=[1,19],m=[1,25],g=[1,26],y=[1,27],v=[1,28],x=[1,29],b=[1,30],T=[1,31],w=[1,32],k=[1,33],C=[1,34],E=[1,35],S=[1,36],L=[1,37],M=[1,38],I=[1,39],A=[1,40],_=[1,42],D=[1,43],N=[1,44],R=[1,45],B=[1,46],O=[1,47],$=[1,4,5,10,14,15,17,19,22,24,30,31,32,34,36,37,38,39,40,42,44,45,47,48,49,50,51,53,54,56,61,62,63,64,73],z=[1,74],F=[1,80],V=[1,81],H=[1,82],X=[1,83],W=[1,84],Z=[1,85],Y=[1,86],ae=[1,87],J=[1,88],ee=[1,89],re=[1,90],te=[1,91],be=[1,92],de=[1,93],Ee=[1,94],Ne=[1,95],we=[1,96],Te=[1,97],De=[1,98],$e=[1,99],pe=[1,100],Je=[1,101],Ce=[1,102],Fe=[1,103],Ue=[1,104],qe=[1,105],Me=[2,78],He=[4,5,17,51,53,54],K=[4,5,10,14,15,17,19,22,24,30,31,32,34,36,37,38,39,40,42,44,45,47,51,53,54,56,61,62,63,64,73],oe=[4,5,10,14,15,17,19,22,24,30,31,32,34,36,37,38,39,40,42,44,45,47,50,51,53,54,56,61,62,63,64,73],U=[4,5,10,14,15,17,19,22,24,30,31,32,34,36,37,38,39,40,42,44,45,47,49,51,53,54,56,61,62,63,64,73],ue=[4,5,10,14,15,17,19,22,24,30,31,32,34,36,37,38,39,40,42,44,45,47,48,51,53,54,56,61,62,63,64,73],G=[5,52],se=[70,71,72,73],le=[1,151],ke={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SPACE:4,NEWLINE:5,SD:6,document:7,line:8,statement:9,INVALID:10,box_section:11,box_line:12,participant_statement:13,create:14,box:15,restOfLine:16,end:17,signal:18,autonumber:19,NUM:20,off:21,activate:22,actor:23,deactivate:24,note_statement:25,links_statement:26,link_statement:27,properties_statement:28,details_statement:29,title:30,legacy_title:31,acc_title:32,acc_title_value:33,acc_descr:34,acc_descr_value:35,acc_descr_multiline_value:36,loop:37,rect:38,opt:39,alt:40,else_sections:41,par:42,par_sections:43,par_over:44,critical:45,option_sections:46,break:47,option:48,and:49,else:50,participant:51,AS:52,participant_actor:53,destroy:54,actor_with_config:55,note:56,placement:57,text2:58,over:59,actor_pair:60,links:61,link:62,properties:63,details:64,spaceList:65,",":66,left_of:67,right_of:68,signaltype:69,"+":70,"-":71,"()":72,ACTOR:73,config_object:74,CONFIG_START:75,CONFIG_CONTENT:76,CONFIG_END:77,SOLID_OPEN_ARROW:78,DOTTED_OPEN_ARROW:79,SOLID_ARROW:80,SOLID_ARROW_TOP:81,SOLID_ARROW_BOTTOM:82,STICK_ARROW_TOP:83,STICK_ARROW_BOTTOM:84,SOLID_ARROW_TOP_DOTTED:85,SOLID_ARROW_BOTTOM_DOTTED:86,STICK_ARROW_TOP_DOTTED:87,STICK_ARROW_BOTTOM_DOTTED:88,SOLID_ARROW_TOP_REVERSE:89,SOLID_ARROW_BOTTOM_REVERSE:90,STICK_ARROW_TOP_REVERSE:91,STICK_ARROW_BOTTOM_REVERSE:92,SOLID_ARROW_TOP_REVERSE_DOTTED:93,SOLID_ARROW_BOTTOM_REVERSE_DOTTED:94,STICK_ARROW_TOP_REVERSE_DOTTED:95,STICK_ARROW_BOTTOM_REVERSE_DOTTED:96,BIDIRECTIONAL_SOLID_ARROW:97,DOTTED_ARROW:98,BIDIRECTIONAL_DOTTED_ARROW:99,SOLID_CROSS:100,DOTTED_CROSS:101,SOLID_POINT:102,DOTTED_POINT:103,TXT:104,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NEWLINE",6:"SD",10:"INVALID",14:"create",15:"box",16:"restOfLine",17:"end",19:"autonumber",20:"NUM",21:"off",22:"activate",24:"deactivate",30:"title",31:"legacy_title",32:"acc_title",33:"acc_title_value",34:"acc_descr",35:"acc_descr_value",36:"acc_descr_multiline_value",37:"loop",38:"rect",39:"opt",40:"alt",42:"par",44:"par_over",45:"critical",47:"break",48:"option",49:"and",50:"else",51:"participant",52:"AS",53:"participant_actor",54:"destroy",56:"note",59:"over",61:"links",62:"link",63:"properties",64:"details",66:",",67:"left_of",68:"right_of",70:"+",71:"-",72:"()",73:"ACTOR",75:"CONFIG_START",76:"CONFIG_CONTENT",77:"CONFIG_END",78:"SOLID_OPEN_ARROW",79:"DOTTED_OPEN_ARROW",80:"SOLID_ARROW",81:"SOLID_ARROW_TOP",82:"SOLID_ARROW_BOTTOM",83:"STICK_ARROW_TOP",84:"STICK_ARROW_BOTTOM",85:"SOLID_ARROW_TOP_DOTTED",86:"SOLID_ARROW_BOTTOM_DOTTED",87:"STICK_ARROW_TOP_DOTTED",88:"STICK_ARROW_BOTTOM_DOTTED",89:"SOLID_ARROW_TOP_REVERSE",90:"SOLID_ARROW_BOTTOM_REVERSE",91:"STICK_ARROW_TOP_REVERSE",92:"STICK_ARROW_BOTTOM_REVERSE",93:"SOLID_ARROW_TOP_REVERSE_DOTTED",94:"SOLID_ARROW_BOTTOM_REVERSE_DOTTED",95:"STICK_ARROW_TOP_REVERSE_DOTTED",96:"STICK_ARROW_BOTTOM_REVERSE_DOTTED",97:"BIDIRECTIONAL_SOLID_ARROW",98:"DOTTED_ARROW",99:"BIDIRECTIONAL_DOTTED_ARROW",100:"SOLID_CROSS",101:"DOTTED_CROSS",102:"SOLID_POINT",103:"DOTTED_POINT",104:"TXT"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[8,1],[11,0],[11,2],[12,2],[12,1],[12,1],[9,1],[9,2],[9,4],[9,2],[9,4],[9,3],[9,3],[9,2],[9,3],[9,3],[9,2],[9,2],[9,2],[9,2],[9,2],[9,1],[9,1],[9,2],[9,2],[9,1],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[46,1],[46,4],[43,1],[43,4],[41,1],[41,4],[13,5],[13,3],[13,5],[13,3],[13,3],[13,5],[13,3],[13,5],[13,3],[25,4],[25,4],[26,3],[27,3],[28,3],[29,3],[65,2],[65,1],[60,3],[60,1],[57,1],[57,1],[18,5],[18,5],[18,5],[18,5],[18,6],[18,4],[55,2],[74,3],[23,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[58,1]],performAction:o(function(ve,Oe,We,Be,Qe,ce,it){var fe=ce.length-1;switch(Qe){case 3:return Be.apply(ce[fe]),ce[fe];break;case 4:case 10:this.$=[];break;case 5:case 11:ce[fe-1].push(ce[fe]),this.$=ce[fe-1];break;case 6:case 7:case 12:case 13:this.$=ce[fe];break;case 8:case 9:case 14:this.$=[];break;case 16:ce[fe].type="createParticipant",this.$=ce[fe];break;case 17:ce[fe-1].unshift({type:"boxStart",boxData:Be.parseBoxData(ce[fe-2])}),ce[fe-1].push({type:"boxEnd",boxText:ce[fe-2]}),this.$=ce[fe-1];break;case 19:this.$={type:"sequenceIndex",sequenceIndex:Number(ce[fe-2]),sequenceIndexStep:Number(ce[fe-1]),sequenceVisible:!0,signalType:Be.LINETYPE.AUTONUMBER};break;case 20:this.$={type:"sequenceIndex",sequenceIndex:Number(ce[fe-1]),sequenceIndexStep:1,sequenceVisible:!0,signalType:Be.LINETYPE.AUTONUMBER};break;case 21:this.$={type:"sequenceIndex",sequenceVisible:!1,signalType:Be.LINETYPE.AUTONUMBER};break;case 22:this.$={type:"sequenceIndex",sequenceVisible:!0,signalType:Be.LINETYPE.AUTONUMBER};break;case 23:this.$={type:"activeStart",signalType:Be.LINETYPE.ACTIVE_START,actor:ce[fe-1].actor};break;case 24:this.$={type:"activeEnd",signalType:Be.LINETYPE.ACTIVE_END,actor:ce[fe-1].actor};break;case 30:Be.setDiagramTitle(ce[fe].substring(6)),this.$=ce[fe].substring(6);break;case 31:Be.setDiagramTitle(ce[fe].substring(7)),this.$=ce[fe].substring(7);break;case 32:this.$=ce[fe].trim(),Be.setAccTitle(this.$);break;case 33:case 34:this.$=ce[fe].trim(),Be.setAccDescription(this.$);break;case 35:ce[fe-1].unshift({type:"loopStart",loopText:Be.parseMessage(ce[fe-2]),signalType:Be.LINETYPE.LOOP_START}),ce[fe-1].push({type:"loopEnd",loopText:ce[fe-2],signalType:Be.LINETYPE.LOOP_END}),this.$=ce[fe-1];break;case 36:ce[fe-1].unshift({type:"rectStart",color:Be.parseMessage(ce[fe-2]),signalType:Be.LINETYPE.RECT_START}),ce[fe-1].push({type:"rectEnd",color:Be.parseMessage(ce[fe-2]),signalType:Be.LINETYPE.RECT_END}),this.$=ce[fe-1];break;case 37:ce[fe-1].unshift({type:"optStart",optText:Be.parseMessage(ce[fe-2]),signalType:Be.LINETYPE.OPT_START}),ce[fe-1].push({type:"optEnd",optText:Be.parseMessage(ce[fe-2]),signalType:Be.LINETYPE.OPT_END}),this.$=ce[fe-1];break;case 38:ce[fe-1].unshift({type:"altStart",altText:Be.parseMessage(ce[fe-2]),signalType:Be.LINETYPE.ALT_START}),ce[fe-1].push({type:"altEnd",signalType:Be.LINETYPE.ALT_END}),this.$=ce[fe-1];break;case 39:ce[fe-1].unshift({type:"parStart",parText:Be.parseMessage(ce[fe-2]),signalType:Be.LINETYPE.PAR_START}),ce[fe-1].push({type:"parEnd",signalType:Be.LINETYPE.PAR_END}),this.$=ce[fe-1];break;case 40:ce[fe-1].unshift({type:"parStart",parText:Be.parseMessage(ce[fe-2]),signalType:Be.LINETYPE.PAR_OVER_START}),ce[fe-1].push({type:"parEnd",signalType:Be.LINETYPE.PAR_END}),this.$=ce[fe-1];break;case 41:ce[fe-1].unshift({type:"criticalStart",criticalText:Be.parseMessage(ce[fe-2]),signalType:Be.LINETYPE.CRITICAL_START}),ce[fe-1].push({type:"criticalEnd",signalType:Be.LINETYPE.CRITICAL_END}),this.$=ce[fe-1];break;case 42:ce[fe-1].unshift({type:"breakStart",breakText:Be.parseMessage(ce[fe-2]),signalType:Be.LINETYPE.BREAK_START}),ce[fe-1].push({type:"breakEnd",optText:Be.parseMessage(ce[fe-2]),signalType:Be.LINETYPE.BREAK_END}),this.$=ce[fe-1];break;case 44:this.$=ce[fe-3].concat([{type:"option",optionText:Be.parseMessage(ce[fe-1]),signalType:Be.LINETYPE.CRITICAL_OPTION},ce[fe]]);break;case 46:this.$=ce[fe-3].concat([{type:"and",parText:Be.parseMessage(ce[fe-1]),signalType:Be.LINETYPE.PAR_AND},ce[fe]]);break;case 48:this.$=ce[fe-3].concat([{type:"else",altText:Be.parseMessage(ce[fe-1]),signalType:Be.LINETYPE.ALT_ELSE},ce[fe]]);break;case 49:ce[fe-3].draw="participant",ce[fe-3].type="addParticipant",ce[fe-3].description=Be.parseMessage(ce[fe-1]),this.$=ce[fe-3];break;case 50:ce[fe-1].draw="participant",ce[fe-1].type="addParticipant",this.$=ce[fe-1];break;case 51:ce[fe-3].draw="actor",ce[fe-3].type="addParticipant",ce[fe-3].description=Be.parseMessage(ce[fe-1]),this.$=ce[fe-3];break;case 52:case 57:ce[fe-1].draw="actor",ce[fe-1].type="addParticipant",this.$=ce[fe-1];break;case 53:ce[fe-1].type="destroyParticipant",this.$=ce[fe-1];break;case 54:ce[fe-3].draw="participant",ce[fe-3].type="addParticipant",ce[fe-3].description=Be.parseMessage(ce[fe-1]),this.$=ce[fe-3];break;case 55:ce[fe-1].draw="participant",ce[fe-1].type="addParticipant",this.$=ce[fe-1];break;case 56:ce[fe-3].draw="actor",ce[fe-3].type="addParticipant",ce[fe-3].description=Be.parseMessage(ce[fe-1]),this.$=ce[fe-3];break;case 58:this.$=[ce[fe-1],{type:"addNote",placement:ce[fe-2],actor:ce[fe-1].actor,text:ce[fe]}];break;case 59:ce[fe-2]=[].concat(ce[fe-1],ce[fe-1]).slice(0,2),ce[fe-2][0]=ce[fe-2][0].actor,ce[fe-2][1]=ce[fe-2][1].actor,this.$=[ce[fe-1],{type:"addNote",placement:Be.PLACEMENT.OVER,actor:ce[fe-2].slice(0,2),text:ce[fe]}];break;case 60:this.$=[ce[fe-1],{type:"addLinks",actor:ce[fe-1].actor,text:ce[fe]}];break;case 61:this.$=[ce[fe-1],{type:"addALink",actor:ce[fe-1].actor,text:ce[fe]}];break;case 62:this.$=[ce[fe-1],{type:"addProperties",actor:ce[fe-1].actor,text:ce[fe]}];break;case 63:this.$=[ce[fe-1],{type:"addDetails",actor:ce[fe-1].actor,text:ce[fe]}];break;case 66:this.$=[ce[fe-2],ce[fe]];break;case 67:this.$=ce[fe];break;case 68:this.$=Be.PLACEMENT.LEFTOF;break;case 69:this.$=Be.PLACEMENT.RIGHTOF;break;case 70:this.$=[ce[fe-4],ce[fe-1],{type:"addMessage",from:ce[fe-4].actor,to:ce[fe-1].actor,signalType:ce[fe-3],msg:ce[fe],activate:!0},{type:"activeStart",signalType:Be.LINETYPE.ACTIVE_START,actor:ce[fe-1].actor}];break;case 71:this.$=[ce[fe-4],ce[fe-1],{type:"addMessage",from:ce[fe-4].actor,to:ce[fe-1].actor,signalType:ce[fe-3],msg:ce[fe]},{type:"activeEnd",signalType:Be.LINETYPE.ACTIVE_END,actor:ce[fe-4].actor}];break;case 72:this.$=[ce[fe-4],ce[fe-1],{type:"addMessage",from:ce[fe-4].actor,to:ce[fe-1].actor,signalType:ce[fe-3],msg:ce[fe],activate:!0,centralConnection:Be.LINETYPE.CENTRAL_CONNECTION},{type:"centralConnection",signalType:Be.LINETYPE.CENTRAL_CONNECTION,actor:ce[fe-1].actor}];break;case 73:this.$=[ce[fe-4],ce[fe-1],{type:"addMessage",from:ce[fe-4].actor,to:ce[fe-1].actor,signalType:ce[fe-2],msg:ce[fe],activate:!1,centralConnection:Be.LINETYPE.CENTRAL_CONNECTION_REVERSE},{type:"centralConnectionReverse",signalType:Be.LINETYPE.CENTRAL_CONNECTION_REVERSE,actor:ce[fe-4].actor}];break;case 74:this.$=[ce[fe-5],ce[fe-1],{type:"addMessage",from:ce[fe-5].actor,to:ce[fe-1].actor,signalType:ce[fe-3],msg:ce[fe],activate:!0,centralConnection:Be.LINETYPE.CENTRAL_CONNECTION_DUAL},{type:"centralConnection",signalType:Be.LINETYPE.CENTRAL_CONNECTION,actor:ce[fe-1].actor},{type:"centralConnectionReverse",signalType:Be.LINETYPE.CENTRAL_CONNECTION_REVERSE,actor:ce[fe-5].actor}];break;case 75:this.$=[ce[fe-3],ce[fe-1],{type:"addMessage",from:ce[fe-3].actor,to:ce[fe-1].actor,signalType:ce[fe-2],msg:ce[fe]}];break;case 76:this.$={type:"addParticipant",actor:ce[fe-1],config:ce[fe]};break;case 77:this.$=ce[fe-1].trim();break;case 78:this.$={type:"addParticipant",actor:ce[fe]};break;case 79:this.$=Be.LINETYPE.SOLID_OPEN;break;case 80:this.$=Be.LINETYPE.DOTTED_OPEN;break;case 81:this.$=Be.LINETYPE.SOLID;break;case 82:this.$=Be.LINETYPE.SOLID_TOP;break;case 83:this.$=Be.LINETYPE.SOLID_BOTTOM;break;case 84:this.$=Be.LINETYPE.STICK_TOP;break;case 85:this.$=Be.LINETYPE.STICK_BOTTOM;break;case 86:this.$=Be.LINETYPE.SOLID_TOP_DOTTED;break;case 87:this.$=Be.LINETYPE.SOLID_BOTTOM_DOTTED;break;case 88:this.$=Be.LINETYPE.STICK_TOP_DOTTED;break;case 89:this.$=Be.LINETYPE.STICK_BOTTOM_DOTTED;break;case 90:this.$=Be.LINETYPE.SOLID_ARROW_TOP_REVERSE;break;case 91:this.$=Be.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE;break;case 92:this.$=Be.LINETYPE.STICK_ARROW_TOP_REVERSE;break;case 93:this.$=Be.LINETYPE.STICK_ARROW_BOTTOM_REVERSE;break;case 94:this.$=Be.LINETYPE.SOLID_ARROW_TOP_REVERSE_DOTTED;break;case 95:this.$=Be.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE_DOTTED;break;case 96:this.$=Be.LINETYPE.STICK_ARROW_TOP_REVERSE_DOTTED;break;case 97:this.$=Be.LINETYPE.STICK_ARROW_BOTTOM_REVERSE_DOTTED;break;case 98:this.$=Be.LINETYPE.BIDIRECTIONAL_SOLID;break;case 99:this.$=Be.LINETYPE.DOTTED;break;case 100:this.$=Be.LINETYPE.BIDIRECTIONAL_DOTTED;break;case 101:this.$=Be.LINETYPE.SOLID_CROSS;break;case 102:this.$=Be.LINETYPE.DOTTED_CROSS;break;case 103:this.$=Be.LINETYPE.SOLID_POINT;break;case 104:this.$=Be.LINETYPE.DOTTED_POINT;break;case 105:this.$=Be.parseMessage(ce[fe].trim().substring(1));break}},"anonymous"),table:[{3:1,4:e,5:r,6:i},{1:[3]},{3:5,4:e,5:r,6:i},{3:6,4:e,5:r,6:i},t([1,4,5,10,14,15,19,22,24,30,31,32,34,36,37,38,39,40,42,44,45,47,51,53,54,56,61,62,63,64,73],n,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:a,5:s,8:8,9:10,10:l,13:13,14:u,15:h,18:16,19:f,22:d,23:41,24:p,25:20,26:21,27:22,28:23,29:24,30:m,31:g,32:y,34:v,36:x,37:b,38:T,39:w,40:k,42:C,44:E,45:S,47:L,51:M,53:I,54:A,56:_,61:D,62:N,63:R,64:B,73:O},t($,[2,5]),{9:48,13:13,14:u,15:h,18:16,19:f,22:d,23:41,24:p,25:20,26:21,27:22,28:23,29:24,30:m,31:g,32:y,34:v,36:x,37:b,38:T,39:w,40:k,42:C,44:E,45:S,47:L,51:M,53:I,54:A,56:_,61:D,62:N,63:R,64:B,73:O},t($,[2,7]),t($,[2,8]),t($,[2,9]),t($,[2,15]),{13:49,51:M,53:I,54:A},{16:[1,50]},{5:[1,51]},{5:[1,54],20:[1,52],21:[1,53]},{23:55,73:O},{23:56,73:O},{5:[1,57]},{5:[1,58]},{5:[1,59]},{5:[1,60]},{5:[1,61]},t($,[2,30]),t($,[2,31]),{33:[1,62]},{35:[1,63]},t($,[2,34]),{16:[1,64]},{16:[1,65]},{16:[1,66]},{16:[1,67]},{16:[1,68]},{16:[1,69]},{16:[1,70]},{16:[1,71]},{23:72,55:73,73:z},{23:75,55:76,73:z},{23:77,73:O},{69:78,72:[1,79],78:F,79:V,80:H,81:X,82:W,83:Z,84:Y,85:ae,86:J,87:ee,88:re,89:te,90:be,91:de,92:Ee,93:Ne,94:we,95:Te,96:De,97:$e,98:pe,99:Je,100:Ce,101:Fe,102:Ue,103:qe},{57:106,59:[1,107],67:[1,108],68:[1,109]},{23:110,73:O},{23:111,73:O},{23:112,73:O},{23:113,73:O},t([5,66,72,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104],Me),t($,[2,6]),t($,[2,16]),t(He,[2,10],{11:114}),t($,[2,18]),{5:[1,116],20:[1,115]},{5:[1,117]},t($,[2,22]),{5:[1,118]},{5:[1,119]},t($,[2,25]),t($,[2,26]),t($,[2,27]),t($,[2,28]),t($,[2,29]),t($,[2,32]),t($,[2,33]),t(K,n,{7:120}),t(K,n,{7:121}),t(K,n,{7:122}),t(oe,n,{41:123,7:124}),t(U,n,{43:125,7:126}),t(U,n,{7:126,43:127}),t(ue,n,{46:128,7:129}),t(K,n,{7:130}),{5:[1,132],52:[1,131]},{5:[1,134],52:[1,133]},t(G,Me,{74:135,75:[1,136]}),{5:[1,138],52:[1,137]},{5:[1,140],52:[1,139]},{5:[1,141]},{23:145,70:[1,142],71:[1,143],72:[1,144],73:O},{69:146,78:F,79:V,80:H,81:X,82:W,83:Z,84:Y,85:ae,86:J,87:ee,88:re,89:te,90:be,91:de,92:Ee,93:Ne,94:we,95:Te,96:De,97:$e,98:pe,99:Je,100:Ce,101:Fe,102:Ue,103:qe},t(se,[2,79]),t(se,[2,80]),t(se,[2,81]),t(se,[2,82]),t(se,[2,83]),t(se,[2,84]),t(se,[2,85]),t(se,[2,86]),t(se,[2,87]),t(se,[2,88]),t(se,[2,89]),t(se,[2,90]),t(se,[2,91]),t(se,[2,92]),t(se,[2,93]),t(se,[2,94]),t(se,[2,95]),t(se,[2,96]),t(se,[2,97]),t(se,[2,98]),t(se,[2,99]),t(se,[2,100]),t(se,[2,101]),t(se,[2,102]),t(se,[2,103]),t(se,[2,104]),{23:147,73:O},{23:149,60:148,73:O},{73:[2,68]},{73:[2,69]},{58:150,104:le},{58:152,104:le},{58:153,104:le},{58:154,104:le},{4:[1,157],5:[1,159],12:156,13:158,17:[1,155],51:M,53:I,54:A},{5:[1,160]},t($,[2,20]),t($,[2,21]),t($,[2,23]),t($,[2,24]),{4:a,5:s,8:8,9:10,10:l,13:13,14:u,15:h,17:[1,161],18:16,19:f,22:d,23:41,24:p,25:20,26:21,27:22,28:23,29:24,30:m,31:g,32:y,34:v,36:x,37:b,38:T,39:w,40:k,42:C,44:E,45:S,47:L,51:M,53:I,54:A,56:_,61:D,62:N,63:R,64:B,73:O},{4:a,5:s,8:8,9:10,10:l,13:13,14:u,15:h,17:[1,162],18:16,19:f,22:d,23:41,24:p,25:20,26:21,27:22,28:23,29:24,30:m,31:g,32:y,34:v,36:x,37:b,38:T,39:w,40:k,42:C,44:E,45:S,47:L,51:M,53:I,54:A,56:_,61:D,62:N,63:R,64:B,73:O},{4:a,5:s,8:8,9:10,10:l,13:13,14:u,15:h,17:[1,163],18:16,19:f,22:d,23:41,24:p,25:20,26:21,27:22,28:23,29:24,30:m,31:g,32:y,34:v,36:x,37:b,38:T,39:w,40:k,42:C,44:E,45:S,47:L,51:M,53:I,54:A,56:_,61:D,62:N,63:R,64:B,73:O},{17:[1,164]},{4:a,5:s,8:8,9:10,10:l,13:13,14:u,15:h,17:[2,47],18:16,19:f,22:d,23:41,24:p,25:20,26:21,27:22,28:23,29:24,30:m,31:g,32:y,34:v,36:x,37:b,38:T,39:w,40:k,42:C,44:E,45:S,47:L,50:[1,165],51:M,53:I,54:A,56:_,61:D,62:N,63:R,64:B,73:O},{17:[1,166]},{4:a,5:s,8:8,9:10,10:l,13:13,14:u,15:h,17:[2,45],18:16,19:f,22:d,23:41,24:p,25:20,26:21,27:22,28:23,29:24,30:m,31:g,32:y,34:v,36:x,37:b,38:T,39:w,40:k,42:C,44:E,45:S,47:L,49:[1,167],51:M,53:I,54:A,56:_,61:D,62:N,63:R,64:B,73:O},{17:[1,168]},{17:[1,169]},{4:a,5:s,8:8,9:10,10:l,13:13,14:u,15:h,17:[2,43],18:16,19:f,22:d,23:41,24:p,25:20,26:21,27:22,28:23,29:24,30:m,31:g,32:y,34:v,36:x,37:b,38:T,39:w,40:k,42:C,44:E,45:S,47:L,48:[1,170],51:M,53:I,54:A,56:_,61:D,62:N,63:R,64:B,73:O},{4:a,5:s,8:8,9:10,10:l,13:13,14:u,15:h,17:[1,171],18:16,19:f,22:d,23:41,24:p,25:20,26:21,27:22,28:23,29:24,30:m,31:g,32:y,34:v,36:x,37:b,38:T,39:w,40:k,42:C,44:E,45:S,47:L,51:M,53:I,54:A,56:_,61:D,62:N,63:R,64:B,73:O},{16:[1,172]},t($,[2,50]),{16:[1,173]},t($,[2,55]),t(G,[2,76]),{76:[1,174]},{16:[1,175]},t($,[2,52]),{16:[1,176]},t($,[2,57]),t($,[2,53]),{23:177,73:O},{23:178,73:O},{23:179,73:O},{58:180,104:le},{23:181,72:[1,182],73:O},{58:183,104:le},{58:184,104:le},{66:[1,185],104:[2,67]},{5:[2,60]},{5:[2,105]},{5:[2,61]},{5:[2,62]},{5:[2,63]},t($,[2,17]),t(He,[2,11]),{13:186,51:M,53:I,54:A},t(He,[2,13]),t(He,[2,14]),t($,[2,19]),t($,[2,35]),t($,[2,36]),t($,[2,37]),t($,[2,38]),{16:[1,187]},t($,[2,39]),{16:[1,188]},t($,[2,40]),t($,[2,41]),{16:[1,189]},t($,[2,42]),{5:[1,190]},{5:[1,191]},{77:[1,192]},{5:[1,193]},{5:[1,194]},{58:195,104:le},{58:196,104:le},{58:197,104:le},{5:[2,75]},{58:198,104:le},{23:199,73:O},{5:[2,58]},{5:[2,59]},{23:200,73:O},t(He,[2,12]),t(oe,n,{7:124,41:201}),t(U,n,{7:126,43:202}),t(ue,n,{7:129,46:203}),t($,[2,49]),t($,[2,54]),t(G,[2,77]),t($,[2,51]),t($,[2,56]),{5:[2,70]},{5:[2,71]},{5:[2,72]},{5:[2,73]},{58:204,104:le},{104:[2,66]},{17:[2,48]},{17:[2,46]},{17:[2,44]},{5:[2,74]}],defaultActions:{5:[2,1],6:[2,2],108:[2,68],109:[2,69],150:[2,60],151:[2,105],152:[2,61],153:[2,62],154:[2,63],180:[2,75],183:[2,58],184:[2,59],195:[2,70],196:[2,71],197:[2,72],198:[2,73],200:[2,66],201:[2,48],202:[2,46],203:[2,44],204:[2,74]},parseError:o(function(ve,Oe){if(Oe.recoverable)this.trace(ve);else{var We=new Error(ve);throw We.hash=Oe,We}},"parseError"),parse:o(function(ve){var Oe=this,We=[0],Be=[],Qe=[null],ce=[],it=this.table,fe="",ut=0,Nt=0,Pt=0,St=2,It=1,ot=ce.slice.call(arguments,1),ct=Object.create(this.lexer),Dt={yy:{}};for(var kt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,kt)&&(Dt.yy[kt]=this.yy[kt]);ct.setInput(ve,Dt.yy),Dt.yy.lexer=ct,Dt.yy.parser=this,typeof ct.yylloc>"u"&&(ct.yylloc={});var yt=ct.yylloc;ce.push(yt);var jt=ct.options&&ct.options.ranges;typeof Dt.yy.parseError=="function"?this.parseError=Dt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function hr(Ir){We.length=We.length-2*Ir,Qe.length=Qe.length-Ir,ce.length=ce.length-Ir}o(hr,"popStack");function Qt(){var Ir;return Ir=Be.pop()||ct.lex()||It,typeof Ir!="number"&&(Ir instanceof Array&&(Be=Ir,Ir=Be.pop()),Ir=Oe.symbols_[Ir]||Ir),Ir}o(Qt,"lex");for(var Er,dr,ir,pr,Ii,xt,Ie={},ft,_t,zr,ri;;){if(ir=We[We.length-1],this.defaultActions[ir]?pr=this.defaultActions[ir]:((Er===null||typeof Er>"u")&&(Er=Qt()),pr=it[ir]&&it[ir][Er]),typeof pr>"u"||!pr.length||!pr[0]){var ci="";ri=[];for(ft in it[ir])this.terminals_[ft]&&ft>St&&ri.push("'"+this.terminals_[ft]+"'");ct.showPosition?ci="Parse error on line "+(ut+1)+`: +`+ct.showPosition()+` +Expecting `+ri.join(", ")+", got '"+(this.terminals_[Er]||Er)+"'":ci="Parse error on line "+(ut+1)+": Unexpected "+(Er==It?"end of input":"'"+(this.terminals_[Er]||Er)+"'"),this.parseError(ci,{text:ct.match,token:this.terminals_[Er]||Er,line:ct.yylineno,loc:yt,expected:ri})}if(pr[0]instanceof Array&&pr.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ir+", token: "+Er);switch(pr[0]){case 1:We.push(Er),Qe.push(ct.yytext),ce.push(ct.yylloc),We.push(pr[1]),Er=null,dr?(Er=dr,dr=null):(Nt=ct.yyleng,fe=ct.yytext,ut=ct.yylineno,yt=ct.yylloc,Pt>0&&Pt--);break;case 2:if(_t=this.productions_[pr[1]][1],Ie.$=Qe[Qe.length-_t],Ie._$={first_line:ce[ce.length-(_t||1)].first_line,last_line:ce[ce.length-1].last_line,first_column:ce[ce.length-(_t||1)].first_column,last_column:ce[ce.length-1].last_column},jt&&(Ie._$.range=[ce[ce.length-(_t||1)].range[0],ce[ce.length-1].range[1]]),xt=this.performAction.apply(Ie,[fe,Nt,ut,Dt.yy,pr[1],Qe,ce].concat(ot)),typeof xt<"u")return xt;_t&&(We=We.slice(0,-1*_t*2),Qe=Qe.slice(0,-1*_t),ce=ce.slice(0,-1*_t)),We.push(this.productions_[pr[1]][0]),Qe.push(Ie.$),ce.push(Ie._$),zr=it[We[We.length-2]][We[We.length-1]],We.push(zr);break;case 3:return!0}}return!0},"parse")},me=(function(){var Re={EOF:1,parseError:o(function(Oe,We){if(this.yy.parser)this.yy.parser.parseError(Oe,We);else throw new Error(Oe)},"parseError"),setInput:o(function(ve,Oe){return this.yy=Oe||this.yy||{},this._input=ve,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var ve=this._input[0];this.yytext+=ve,this.yyleng++,this.offset++,this.match+=ve,this.matched+=ve;var Oe=ve.match(/(?:\r\n?|\n).*/g);return Oe?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),ve},"input"),unput:o(function(ve){var Oe=ve.length,We=ve.split(/(?:\r\n?|\n)/g);this._input=ve+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Oe),this.offset-=Oe;var Be=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),We.length-1&&(this.yylineno-=We.length-1);var Qe=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:We?(We.length===Be.length?this.yylloc.first_column:0)+Be[Be.length-We.length].length-We[0].length:this.yylloc.first_column-Oe},this.options.ranges&&(this.yylloc.range=[Qe[0],Qe[0]+this.yyleng-Oe]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(ve){this.unput(this.match.slice(ve))},"less"),pastInput:o(function(){var ve=this.matched.substr(0,this.matched.length-this.match.length);return(ve.length>20?"...":"")+ve.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var ve=this.match;return ve.length<20&&(ve+=this._input.substr(0,20-ve.length)),(ve.substr(0,20)+(ve.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var ve=this.pastInput(),Oe=new Array(ve.length+1).join("-");return ve+this.upcomingInput()+` +`+Oe+"^"},"showPosition"),test_match:o(function(ve,Oe){var We,Be,Qe;if(this.options.backtrack_lexer&&(Qe={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Qe.yylloc.range=this.yylloc.range.slice(0))),Be=ve[0].match(/(?:\r\n?|\n).*/g),Be&&(this.yylineno+=Be.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Be?Be[Be.length-1].length-Be[Be.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+ve[0].length},this.yytext+=ve[0],this.match+=ve[0],this.matches=ve,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(ve[0].length),this.matched+=ve[0],We=this.performAction.call(this,this.yy,this,Oe,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),We)return We;if(this._backtrack){for(var ce in Qe)this[ce]=Qe[ce];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var ve,Oe,We,Be;this._more||(this.yytext="",this.match="");for(var Qe=this._currentRules(),ce=0;ceOe[0].length)){if(Oe=We,Be=ce,this.options.backtrack_lexer){if(ve=this.test_match(We,Qe[ce]),ve!==!1)return ve;if(this._backtrack){Oe=!1;continue}else return!1}else if(!this.options.flex)break}return Oe?(ve=this.test_match(Oe,Qe[Be]),ve!==!1?ve:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var Oe=this.next();return Oe||this.lex()},"lex"),begin:o(function(Oe){this.conditionStack.push(Oe)},"begin"),popState:o(function(){var Oe=this.conditionStack.length-1;return Oe>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(Oe){return Oe=this.conditionStack.length-1-Math.abs(Oe||0),Oe>=0?this.conditionStack[Oe]:"INITIAL"},"topState"),pushState:o(function(Oe){this.begin(Oe)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(Oe,We,Be,Qe){var ce=Qe;switch(Be){case 0:return 5;case 1:break;case 2:break;case 3:break;case 4:break;case 5:break;case 6:return 20;case 7:return this.begin("CONFIG"),75;break;case 8:return 76;case 9:return this.popState(),this.begin("ALIAS"),77;break;case 10:return this.popState(),this.popState(),77;break;case 11:return We.yytext=We.yytext.trim(),73;break;case 12:return We.yytext=We.yytext.trim(),this.begin("ALIAS"),73;break;case 13:return We.yytext=We.yytext.trim(),this.popState(),73;break;case 14:return this.popState(),10;break;case 15:return We.yytext=We.yytext.trim(),this.popState(),10;break;case 16:return this.begin("LINE"),15;break;case 17:return this.begin("ID"),51;break;case 18:return this.begin("ID"),53;break;case 19:return 14;case 20:return this.begin("ID"),54;break;case 21:return this.popState(),this.popState(),this.begin("LINE"),52;break;case 22:return this.popState(),this.popState(),5;break;case 23:return this.begin("LINE"),37;break;case 24:return this.begin("LINE"),38;break;case 25:return this.begin("LINE"),39;break;case 26:return this.begin("LINE"),40;break;case 27:return this.begin("LINE"),50;break;case 28:return this.begin("LINE"),42;break;case 29:return this.begin("LINE"),44;break;case 30:return this.begin("LINE"),49;break;case 31:return this.begin("LINE"),45;break;case 32:return this.begin("LINE"),48;break;case 33:return this.begin("LINE"),47;break;case 34:return this.popState(),16;break;case 35:return 17;case 36:return 67;case 37:return 68;case 38:return 61;case 39:return 62;case 40:return 63;case 41:return 64;case 42:return 59;case 43:return 56;case 44:return this.begin("ID"),22;break;case 45:return this.begin("ID"),24;break;case 46:return 30;case 47:return 31;case 48:return this.begin("acc_title"),32;break;case 49:return this.popState(),"acc_title_value";break;case 50:return this.begin("acc_descr"),34;break;case 51:return this.popState(),"acc_descr_value";break;case 52:this.begin("acc_descr_multiline");break;case 53:this.popState();break;case 54:return"acc_descr_multiline_value";case 55:return 6;case 56:return 19;case 57:return 21;case 58:return 66;case 59:return 5;case 60:return We.yytext=We.yytext.trim(),73;break;case 61:return 80;case 62:return 97;case 63:return 98;case 64:return 99;case 65:return 78;case 66:return 79;case 67:return 100;case 68:return 101;case 69:return 102;case 70:return 103;case 71:return 85;case 72:return 86;case 73:return 87;case 74:return 88;case 75:return 93;case 76:return 94;case 77:return 95;case 78:return 96;case 79:return 81;case 80:return 82;case 81:return 83;case 82:return 84;case 83:return 89;case 84:return 90;case 85:return 91;case 86:return 92;case 87:return 104;case 88:return 104;case 89:return 70;case 90:return 71;case 91:return 72;case 92:return 5;case 93:return 10}},"anonymous"),rules:[/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[0-9]+(?=[ \n]+))/i,/^(?:@\{)/i,/^(?:[^\}]+)/i,/^(?:\}(?=\s+as\s))/i,/^(?:\})/i,/^(?:[^\<->\->:\n,;@\s]+(?=@\{))/i,/^(?:[^<>:\n,;@\s]+(?=\s+as\s))/i,/^(?:[^<>:\n,;@]+(?=\s*[\n;#]|$))/i,/^(?:[^<>:\n,;@]*<[^\n]*)/i,/^(?:[^\n]+)/i,/^(?:box\b)/i,/^(?:participant\b)/i,/^(?:actor\b)/i,/^(?:create\b)/i,/^(?:destroy\b)/i,/^(?:as\b)/i,/^(?:(?:))/i,/^(?:loop\b)/i,/^(?:rect\b)/i,/^(?:opt\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:par\b)/i,/^(?:par_over\b)/i,/^(?:and\b)/i,/^(?:critical\b)/i,/^(?:option\b)/i,/^(?:break\b)/i,/^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i,/^(?:end\b)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:links\b)/i,/^(?:link\b)/i,/^(?:properties\b)/i,/^(?:details\b)/i,/^(?:over\b)/i,/^(?:note\b)/i,/^(?:activate\b)/i,/^(?:deactivate\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:title:\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:sequenceDiagram\b)/i,/^(?:autonumber\b)/i,/^(?:off\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\/\\\+\()\+<\->\->:\n,;]+((?!(-x|--x|-\)|--\)|-\|\\|-\\|-\/|-\/\/|-\|\/|\/\|-|\\\|-|\/\/-|\\\\-|\/\|-|--\|\\|--|\(\)))[\-]*[^\+<\->\->:\n,;]+)*)/i,/^(?:->>)/i,/^(?:<<->>)/i,/^(?:-->>)/i,/^(?:<<-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?:-[\)])/i,/^(?:--[\)])/i,/^(?:--\|\\)/i,/^(?:--\|\/)/i,/^(?:--\\\\)/i,/^(?:--\/\/)/i,/^(?:\/\|--)/i,/^(?:\\\|--)/i,/^(?:\/\/--)/i,/^(?:\\\\--)/i,/^(?:-\|\\)/i,/^(?:-\|\/)/i,/^(?:-\\\\)/i,/^(?:-\/\/)/i,/^(?:\/\|-)/i,/^(?:\\\|-)/i,/^(?:\/\/-)/i,/^(?:\\\\-)/i,/^(?::(?:(?:no)?wrap)?[^#\n;]*)/i,/^(?::)/i,/^(?:\+)/i,/^(?:-)/i,/^(?:\(\))/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[53,54],inclusive:!1},acc_descr:{rules:[51],inclusive:!1},acc_title:{rules:[49],inclusive:!1},ID:{rules:[2,3,7,11,12,13,14,15],inclusive:!1},ALIAS:{rules:[2,3,21,22],inclusive:!1},LINE:{rules:[2,3,34],inclusive:!1},CONFIG:{rules:[8,9,10],inclusive:!1},CONFIG_DATA:{rules:[],inclusive:!1},INITIAL:{rules:[0,1,3,4,5,6,16,17,18,19,20,23,24,25,26,27,28,29,30,31,32,33,35,36,37,38,39,40,41,42,43,44,45,46,47,48,50,52,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93],inclusive:!0}}};return Re})();ke.lexer=me;function ye(){this.yy={}}return o(ye,"Parser"),ye.prototype=ke,ke.Parser=ye,new ye})();iU.parser=iU;T3e=iU});var Lht,Rht,Nht,NC,T_,nU=P(()=>{"use strict";Ut();xb();bt();J7();Vr();Ki();Lht={SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25,AUTONUMBER:26,CRITICAL_START:27,CRITICAL_OPTION:28,CRITICAL_END:29,BREAK_START:30,BREAK_END:31,PAR_OVER_START:32,BIDIRECTIONAL_SOLID:33,BIDIRECTIONAL_DOTTED:34,SOLID_TOP:41,SOLID_BOTTOM:42,STICK_TOP:43,STICK_BOTTOM:44,SOLID_ARROW_TOP_REVERSE:45,SOLID_ARROW_BOTTOM_REVERSE:46,STICK_ARROW_TOP_REVERSE:47,STICK_ARROW_BOTTOM_REVERSE:48,SOLID_TOP_DOTTED:51,SOLID_BOTTOM_DOTTED:52,STICK_TOP_DOTTED:53,STICK_BOTTOM_DOTTED:54,SOLID_ARROW_TOP_REVERSE_DOTTED:55,SOLID_ARROW_BOTTOM_REVERSE_DOTTED:56,STICK_ARROW_TOP_REVERSE_DOTTED:57,STICK_ARROW_BOTTOM_REVERSE_DOTTED:58,CENTRAL_CONNECTION:59,CENTRAL_CONNECTION_REVERSE:60,CENTRAL_CONNECTION_DUAL:61},Rht={FILLED:0,OPEN:1},Nht={LEFTOF:0,RIGHTOF:1,OVER:2},NC={ACTOR:"actor",BOUNDARY:"boundary",COLLECTIONS:"collections",CONTROL:"control",DATABASE:"database",ENTITY:"entity",PARTICIPANT:"participant",QUEUE:"queue"},T_=class{constructor(){this.state=new Cp(()=>({prevActor:void 0,actors:new Map,createdActors:new Map,destroyedActors:new Map,boxes:[],messages:[],notes:[],sequenceNumbersEnabled:!1,wrapEnabled:void 0,currentBox:void 0,lastCreated:void 0,lastDestroyed:void 0}));this.setAccTitle=Ar;this.setAccDescription=Lr;this.setDiagramTitle=Mr;this.getAccTitle=Dr;this.getAccDescription=Rr;this.getDiagramTitle=Nr;this.apply=this.apply.bind(this),this.parseBoxData=this.parseBoxData.bind(this),this.parseMessage=this.parseMessage.bind(this),this.clear(),this.setWrap(ge().wrap),this.LINETYPE=Lht,this.ARROWTYPE=Rht,this.PLACEMENT=Nht}static{o(this,"SequenceDB")}addBox(e){this.state.records.boxes.push({name:e.text,wrap:e.wrap??this.autoWrap(),fill:e.color,actorKeys:[]}),this.state.records.currentBox=this.state.records.boxes.slice(-1)[0]}addActor(e,r,i,n,a){let s=this.state.records.currentBox,l;if(a!==void 0){let h;a.includes(` +`)?h=a+` +`:h=`{ +`+a+` +}`,l=ud(h,{schema:cd})}n=l?.type??n,l?.alias&&(!i||i.text===r)&&(i={text:l.alias,wrap:i?.wrap,type:n});let u=this.state.records.actors.get(e);if(u){if(this.state.records.currentBox&&u.box&&this.state.records.currentBox!==u.box)throw new Error(`A same participant should only be defined in one Box: ${u.name} can't be in '${u.box.name}' and in '${this.state.records.currentBox.name}' at the same time.`);if(s=u.box?u.box:this.state.records.currentBox,u.box=s,u&&r===u.name&&i==null)return}if(i?.text==null&&(i={text:r,type:n}),(n==null||i.text==null)&&(i={text:r,type:n}),this.state.records.actors.set(e,{box:s,name:r,description:i.text,wrap:i.wrap??this.autoWrap(),prevActor:this.state.records.prevActor,links:{},properties:{},actorCnt:null,rectData:null,type:n??"participant"}),this.state.records.prevActor){let h=this.state.records.actors.get(this.state.records.prevActor);h&&(h.nextActor=e)}this.state.records.currentBox&&this.state.records.currentBox.actorKeys.push(e),this.state.records.prevActor=e}activationCount(e){let r,i=0;if(!e)return 0;for(r=0;r>-",token:"->>-",line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["'ACTIVE_PARTICIPANT'"]},u}return this.state.records.messages.push({id:this.state.records.messages.length.toString(),from:e,to:r,message:i?.text??"",wrap:i?.wrap??this.autoWrap(),type:n,activate:a,centralConnection:s??0}),!0}hasAtLeastOneBox(){return this.state.records.boxes.length>0}hasAtLeastOneBoxWithTitle(){return this.state.records.boxes.some(e=>e.name)}getMessages(){return this.state.records.messages}getBoxes(){return this.state.records.boxes}getActors(){return this.state.records.actors}getCreatedActors(){return this.state.records.createdActors}getDestroyedActors(){return this.state.records.destroyedActors}getActor(e){return this.state.records.actors.get(e)}getActorKeys(){return[...this.state.records.actors.keys()]}enableSequenceNumbers(){this.state.records.sequenceNumbersEnabled=!0}disableSequenceNumbers(){this.state.records.sequenceNumbersEnabled=!1}showSequenceNumbers(){return this.state.records.sequenceNumbersEnabled}setWrap(e){this.state.records.wrapEnabled=e}extractWrap(e){if(e===void 0)return{};e=e.trim();let r=/^:?wrap:/.exec(e)!==null?!0:/^:?nowrap:/.exec(e)!==null?!1:void 0;return{cleanedText:(r===void 0?e:e.replace(/^:?(?:no)?wrap:/,"")).trim(),wrap:r}}autoWrap(){return this.state.records.wrapEnabled!==void 0?this.state.records.wrapEnabled:ge().sequence?.wrap??!1}clear(){this.state.reset(),wr()}parseMessage(e){let r=e.trim(),{wrap:i,cleanedText:n}=this.extractWrap(r),a={text:n,wrap:i};return Q.debug(`parseMessage: ${JSON.stringify(a)}`),a}parseBoxData(e){let r=/^((?:rgba?|hsla?)\s*\(.*\)|\w*)(.*)$/.exec(e),i=r?.[1]?r[1].trim():"transparent",n=r?.[2]?r[2].trim():void 0;if(window?.CSS)window.CSS.supports("color",i)||(i="transparent",n=e.trim());else{let l=new Option().style;l.color=i,l.color!==i&&(i="transparent",n=e.trim())}let{wrap:a,cleanedText:s}=this.extractWrap(n);return{text:s?Tr(s,ge()):void 0,color:i,wrap:a}}addNote(e,r,i){let n={actor:e,placement:r,message:i.text,wrap:i.wrap??this.autoWrap()},a=[].concat(e,e);this.state.records.notes.push(n),this.state.records.messages.push({id:this.state.records.messages.length.toString(),from:a[0],to:a[1],message:i.text,wrap:i.wrap??this.autoWrap(),type:this.LINETYPE.NOTE,placement:r})}addLinks(e,r){let i=this.getActor(e);try{let n=Tr(r.text,ge());n=n.replace(/=/g,"="),n=n.replace(/&/g,"&");let a=JSON.parse(n);this.insertLinks(i,a)}catch(n){Q.error("error while parsing actor link text",n)}}addALink(e,r){let i=this.getActor(e);try{let n={},a=Tr(r.text,ge()),s=a.indexOf("@");a=a.replace(/=/g,"="),a=a.replace(/&/g,"&");let l=a.slice(0,s-1).trim(),u=a.slice(s+1).trim();n[l]=u,this.insertLinks(i,n)}catch(n){Q.error("error while parsing actor link text",n)}}insertLinks(e,r){if(e.links==null)e.links=r;else for(let i in r)e.links[i]=r[i]}addProperties(e,r){let i=this.getActor(e);try{let n=Tr(r.text,ge()),a=JSON.parse(n);this.insertProperties(i,a)}catch(n){Q.error("error while parsing actor properties text",n)}}insertProperties(e,r){if(e.properties==null)e.properties=r;else for(let i in r)e.properties[i]=r[i]}boxEnd(){this.state.records.currentBox=void 0}addDetails(e,r){let i=this.getActor(e),n=document.getElementById(r.text);try{let a=n.innerHTML,s=JSON.parse(a);s.properties&&this.insertProperties(i,s.properties),s.links&&this.insertLinks(i,s.links)}catch(a){Q.error("error while parsing actor details text",a)}}getActorProperty(e,r){if(e?.properties!==void 0)return e.properties[r]}apply(e){if(Array.isArray(e))e.forEach(r=>{this.apply(r)});else switch(e.type){case"sequenceIndex":this.state.records.messages.push({id:this.state.records.messages.length.toString(),from:void 0,to:void 0,message:{start:e.sequenceIndex,step:e.sequenceIndexStep,visible:e.sequenceVisible},wrap:!1,type:e.signalType});break;case"addParticipant":this.addActor(e.actor,e.actor,e.description,e.draw,e.config);break;case"createParticipant":if(this.state.records.actors.has(e.actor))throw new Error("It is not possible to have actors with the same id, even if one is destroyed before the next is created. Use 'AS' aliases to simulate the behavior");this.state.records.lastCreated=e.actor,this.addActor(e.actor,e.actor,e.description,e.draw,e.config),this.state.records.createdActors.set(e.actor,this.state.records.messages.length);break;case"destroyParticipant":this.state.records.lastDestroyed=e.actor,this.state.records.destroyedActors.set(e.actor,this.state.records.messages.length);break;case"activeStart":this.addSignal(e.actor,void 0,void 0,e.signalType);break;case"centralConnection":this.addSignal(e.actor,void 0,void 0,e.signalType);break;case"centralConnectionReverse":this.addSignal(e.actor,void 0,void 0,e.signalType);break;case"activeEnd":this.addSignal(e.actor,void 0,void 0,e.signalType);break;case"addNote":this.addNote(e.actor,e.placement,e.text);break;case"addLinks":this.addLinks(e.actor,e.text);break;case"addALink":this.addALink(e.actor,e.text);break;case"addProperties":this.addProperties(e.actor,e.text);break;case"addDetails":this.addDetails(e.actor,e.text);break;case"addMessage":if(this.state.records.lastCreated){if(e.to!==this.state.records.lastCreated)throw new Error("The created participant "+this.state.records.lastCreated.name+" does not have an associated creating message after its declaration. Please check the sequence diagram.");this.state.records.lastCreated=void 0}else if(this.state.records.lastDestroyed){if(e.to!==this.state.records.lastDestroyed&&e.from!==this.state.records.lastDestroyed)throw new Error("The destroyed participant "+this.state.records.lastDestroyed.name+" does not have an associated destroying message after its declaration. Please check the sequence diagram.");this.state.records.lastDestroyed=void 0}this.addSignal(e.from,e.to,e.msg,e.signalType,e.activate,e.centralConnection);break;case"boxStart":this.addBox(e.boxData);break;case"boxEnd":this.boxEnd();break;case"loopStart":this.addSignal(void 0,void 0,e.loopText,e.signalType);break;case"loopEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"rectStart":this.addSignal(void 0,void 0,e.color,e.signalType);break;case"rectEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"optStart":this.addSignal(void 0,void 0,e.optText,e.signalType);break;case"optEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"altStart":this.addSignal(void 0,void 0,e.altText,e.signalType);break;case"else":this.addSignal(void 0,void 0,e.altText,e.signalType);break;case"altEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"setAccTitle":Ar(e.text);break;case"parStart":this.addSignal(void 0,void 0,e.parText,e.signalType);break;case"and":this.addSignal(void 0,void 0,e.parText,e.signalType);break;case"parEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"criticalStart":this.addSignal(void 0,void 0,e.criticalText,e.signalType);break;case"option":this.addSignal(void 0,void 0,e.optionText,e.signalType);break;case"criticalEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"breakStart":this.addSignal(void 0,void 0,e.breakText,e.signalType);break;case"breakEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break}}getConfig(){return ge().sequence}}});var Iht,C3e,w3e=P(()=>{"use strict";Ut();Iht=o(t=>{let e=t.dropShadow??"none",{look:r}=ge();return`.actor { + stroke: ${t.actorBorder}; + fill: ${t.actorBkg}; + stroke-width: ${t.strokeWidth??1}; + } + + rect.actor.outer-path[data-look="neo"] { + filter: ${e}; + } + + rect.note[data-look="neo"] { + stroke:${t.noteBorderColor}; + fill:${t.noteBkgColor}; + filter: ${e}; + } + + text.actor > tspan { + fill: ${t.actorTextColor}; + stroke: none; + } + + .actor-line { + stroke: ${t.actorLineColor}; + } + + .innerArc { + stroke-width: 1.5; + stroke-dasharray: none; + } + + .messageLine0 { + stroke-width: 1.5; + stroke-dasharray: none; + stroke: ${t.signalColor}; + } + + .messageLine1 { + stroke-width: 1.5; + stroke-dasharray: 2, 2; + stroke: ${t.signalColor}; + } + + [id$="-arrowhead"] path { + fill: ${t.signalColor}; + stroke: ${t.signalColor}; + } + + .sequenceNumber { + fill: ${t.sequenceNumberColor}; + } + + [id$="-sequencenumber"] { + fill: ${t.signalColor}; + } + + [id$="-crosshead"] path { + fill: ${t.signalColor}; + stroke: ${t.signalColor}; + } + + .messageText { + fill: ${t.signalTextColor}; + stroke: none; + } + + .labelBox { + stroke: ${t.labelBoxBorderColor}; + fill: ${t.labelBoxBkgColor}; + filter: ${r==="neo"?e:"none"}; + } + + .labelText, .labelText > tspan { + fill: ${t.labelTextColor}; + stroke: none; + } + + .loopText, .loopText > tspan { + fill: ${t.loopTextColor}; + stroke: none; + } + + .loopLine { + stroke-width: 2px; + stroke-dasharray: 2, 2; + stroke: ${t.labelBoxBorderColor}; + fill: ${t.labelBoxBorderColor}; + } + + .note { + //stroke: #decc93; + stroke: ${t.noteBorderColor}; + fill: ${t.noteBkgColor}; + } + + .noteText, .noteText > tspan { + fill: ${t.noteTextColor}; + stroke: none; + ${t.noteFontWeight?`font-weight: ${t.noteFontWeight};`:""} + } + + .activation0 { + fill: ${t.activationBkgColor}; + stroke: ${t.activationBorderColor}; + } + + .activation1 { + fill: ${t.activationBkgColor}; + stroke: ${t.activationBorderColor}; + } + + .activation2 { + fill: ${t.activationBkgColor}; + stroke: ${t.activationBorderColor}; + } + + .actorPopupMenu { + position: absolute; + } + + .actorPopupMenuPanel { + position: absolute; + fill: ${t.actorBkg}; + box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); + filter: drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4)); +} + .actor-man circle, line { + fill: ${t.actorBkg}; + stroke-width: 2px; + } + + g rect.rect { + filter: ${e}; + stroke: ${t.nodeBorder}; + } +`},"getStyles"),C3e=Iht});var aU,Sp,Ap,_p,k_,lg,Cf,IC,Mht,C_,MC,cg,E3e,ei,sU,Oht,Pht,Bht,Fht,$ht,zht,Ght,Vht,qht,Wht,Uht,Hht,Yht,S3e,jht,Xht,Kht,Qht,Zht,Jht,eft,tft,A3e,rft,wf,ift,nft,aft,sft,oft,Hi,_3e=P(()=>{"use strict";aU=Wa(s1(),1);Sr();er();Vr();y0();Sp=36,Ap="actor-top",_p="actor-bottom",k_="actor-box",lg="actor-man",Cf=new Set(["redux-color","redux-dark-color"]),IC=o(function(t,e){let r=g0(t,e);return Lt().look==="neo"&&r.attr("data-look","neo"),r},"drawRect"),Mht=o(function(t,e,r,i,n){if(e.links===void 0||e.links===null||Object.keys(e.links).length===0)return{height:0,width:0};let a=e.links,s=e.actorCnt,l=e.rectData;var u="none";n&&(u="block !important");let h=t.append("g");h.attr("id","actor"+s+"_popup"),h.attr("class","actorPopupMenu"),h.attr("display",u);var f="";l.class!==void 0&&(f=" "+l.class);let d=l.width>r?l.width:r,p=h.append("rect");if(p.attr("class","actorPopupMenuPanel"+f),p.attr("x",l.x),p.attr("y",l.height),p.attr("fill",l.fill),p.attr("stroke",l.stroke),p.attr("width",d),p.attr("height",l.height),p.attr("rx",l.rx),p.attr("ry",l.ry),a!=null){var m=20;for(let v in a){var g=h.append("a"),y=(0,aU.sanitizeUrl)(a[v]);g.attr("xlink:href",y),g.attr("target","_blank"),ift(i)(v,g,l.x+10,l.height+m,d,20,{class:"actor"},i),m+=30}}return p.attr("height",m),{height:l.height+m,width:d}},"drawPopup"),C_=o(function(t){return"var pu = document.getElementById('"+t+"'); if (pu != null) { pu.style.display = pu.style.display == 'block' ? 'none' : 'block'; }"},"popupMenuToggle"),MC=o(async function(t,e,r=null){let i=t.append("foreignObject"),n=await Rg(e.text,Lt()),s=i.append("xhtml:div").attr("style","width: fit-content;").attr("xmlns","http://www.w3.org/1999/xhtml").html(n).node().getBoundingClientRect();if(i.attr("height",Math.round(s.height)).attr("width",Math.round(s.width)),e.class==="noteText"){let l=t.node().firstChild;l.setAttribute("height",s.height+2*e.textMargin);let u=l.getBBox();i.attr("x",Math.round(u.x+u.width/2-s.width/2)).attr("y",Math.round(u.y+u.height/2-s.height/2))}else if(r){let{startx:l,stopx:u,starty:h}=r;if(l>u){let f=l;l=u,u=f}i.attr("x",Math.round(l+Math.abs(l-u)/2-s.width/2)),e.class==="loopText"?i.attr("y",Math.round(h)):i.attr("y",Math.round(h-s.height))}return[i]},"drawKatex"),cg=o(function(t,e){let r=0,i=0,n=e.text.split(lt.lineBreakRegex),[a,s]=$s(e.fontSize),l=[],u=0,h=o(()=>e.y,"yfunc");if(e.valign!==void 0&&e.textMargin!==void 0&&e.textMargin>0)switch(e.valign){case"top":case"start":h=o(()=>Math.round(e.y+e.textMargin),"yfunc");break;case"middle":case"center":h=o(()=>Math.round(e.y+(r+i+e.textMargin)/2),"yfunc");break;case"bottom":case"end":h=o(()=>Math.round(e.y+(r+i+2*e.textMargin)-e.textMargin),"yfunc");break}if(e.anchor!==void 0&&e.textMargin!==void 0&&e.width!==void 0)switch(e.anchor){case"left":case"start":e.x=Math.round(e.x+e.textMargin),e.anchor="start",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"middle":case"center":e.x=Math.round(e.x+e.width/2),e.anchor="middle",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"right":case"end":e.x=Math.round(e.x+e.width-e.textMargin),e.anchor="end",e.dominantBaseline="middle",e.alignmentBaseline="middle";break}for(let[f,d]of n.entries()){e.textMargin!==void 0&&e.textMargin===0&&a!==void 0&&(u=f*a);let p=t.append("text");p.attr("x",e.x),p.attr("y",h()),e.anchor!==void 0&&p.attr("text-anchor",e.anchor).attr("dominant-baseline",e.dominantBaseline).attr("alignment-baseline",e.alignmentBaseline),e.fontFamily!==void 0&&p.style("font-family",e.fontFamily),s!==void 0&&p.style("font-size",s),e.fontWeight!==void 0&&p.style("font-weight",e.fontWeight),e.fill!==void 0&&p.attr("fill",e.fill),e.class!==void 0&&p.attr("class",e.class),e.dy!==void 0?p.attr("dy",e.dy):u!==0&&p.attr("dy",u);let m=d||gI;if(e.tspan){let g=p.append("tspan");g.attr("x",e.x),e.fill!==void 0&&g.attr("fill",e.fill),g.text(m)}else p.text(m);e.valign!==void 0&&e.textMargin!==void 0&&e.textMargin>0&&(i+=(p._groups||p)[0][0].getBBox().height,r=i),l.push(p)}return l},"drawText"),E3e=o(function(t,e){function r(n,a,s,l,u){return n+","+a+" "+(n+s)+","+a+" "+(n+s)+","+(a+l-u)+" "+(n+s-u*1.2)+","+(a+l)+" "+n+","+(a+l)}o(r,"genPoints");let i=t.append("polygon");return i.attr("points",r(e.x,e.y,e.width,e.height,7)),i.attr("class","labelBox"),e.y=e.y+e.height/2,cg(t,e),i},"drawLabel"),ei=-1,sU=o((t,e,r,i)=>{t.select&&r.forEach(n=>{let a=e.get(n),s=t.select("#actor"+a.actorCnt);!i.mirrorActors&&a.stopy?s.attr("y2",a.stopy+a.height/2):i.mirrorActors&&s.attr("y2",a.stopy)})},"fixLifeLineHeights"),Oht=o(function(t,e,r,i,n){let a=i?e.stopy:e.starty,s=e.x+e.width/2,l=a+e.height,{look:u,theme:h,themeVariables:f}=r,{bkgColorArray:d,borderColorArray:p}=f,m=t.append("g").lower();var g=m;i||(ei++,Object.keys(e.links||{}).length&&!r.forceMenus&&g.attr("onclick",C_(`actor${ei}_popup`)).attr("cursor","pointer"),g.append("line").attr("id","actor"+ei).attr("x1",s).attr("y1",l).attr("x2",s).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",e.name).attr("data-et","life-line").attr("data-id",e.name),g=m.append("g"),e.actorCnt=ei,e.links!=null&&g.attr("id","root-"+ei),u==="neo"&&g.attr("data-look","neo"));let y=ja();var v="actor";e.properties?.class?v=e.properties.class:y.fill="#eaeaea",i?v+=` ${_p}`:v+=` ${Ap}`,y.x=e.x,y.y=a,y.width=e.width,y.height=e.height,y.class=v,y.rx=3,y.ry=3,y.name=e.name,u==="neo"&&(y.rx=6,y.ry=6);let x=IC(g,y),b=n.get(e.name)??0;if(Cf.has(h)&&(x.style("stroke",p[b%p.length]),x.style("fill",d[b%p.length])),u==="neo"&&x.attr("filter","url(#drop-shadow)"),e.rectData=y,e.properties?.icon){let w=e.properties.icon.trim();w.charAt(0)==="@"?w3(g,y.x+y.width-20,y.y+10,w.substr(1)):C3(g,y.x+y.width-20,y.y+10,w)}i||(g.attr("data-et","participant"),g.attr("data-type","participant"),g.attr("data-id",e.name)),wf(r,sn(e.description))(e.description,g,y.x,y.y,y.width,y.height,{class:`actor ${k_}`},r);let T=e.height;if(x.node){let w=x.node().getBBox();e.height=w.height,T=w.height}return T},"drawActorTypeParticipant"),Pht=o(function(t,e,r,i,n){let a=i?e.stopy:e.starty,s=e.x+e.width/2,l=a+e.height,{look:u,theme:h,themeVariables:f}=r,{bkgColorArray:d,borderColorArray:p}=f,m=t.append("g").lower();var g=m;i||(ei++,Object.keys(e.links||{}).length&&!r.forceMenus&&g.attr("onclick",C_(`actor${ei}_popup`)).attr("cursor","pointer"),g.append("line").attr("id","actor"+ei).attr("x1",s).attr("y1",l).attr("x2",s).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",e.name).attr("data-et","life-line").attr("data-id",e.name),g=m.append("g"),e.actorCnt=ei,e.links!=null&&g.attr("id","root-"+ei),u==="neo"&&g.attr("data-look","neo"));let y=ja();var v="actor";e.properties?.class?v=e.properties.class:y.fill="#eaeaea",i?v+=` ${_p}`:v+=` ${Ap}`,y.x=e.x,y.y=a,y.width=e.width,y.height=e.height,y.class=v,y.name=e.name;let x=6,b={...y,x:y.x+-x,y:y.y+ +x,class:"actor"},T=IC(g,y),w=IC(g,b);e.rectData=y,u==="neo"&&g.attr("filter","url(#drop-shadow)");let k=n.get(e.name)??0;if(Cf.has(h)&&(T.style("stroke",p[k%p.length]),T.style("fill",d[k%p.length]),w.style("stroke",p[k%p.length]),w.style("fill",d[k%p.length])),e.properties?.icon){let E=e.properties.icon.trim();E.charAt(0)==="@"?w3(g,y.x+y.width-20,y.y+10,E.substr(1)):C3(g,y.x+y.width-20,y.y+10,E)}wf(r,sn(e.description))(e.description,g,y.x-x,y.y+x,y.width,y.height,{class:`actor ${k_}`},r);let C=e.height;if(T.node){let E=T.node().getBBox();e.height=E.height,C=E.height}return i||(g.attr("data-et","participant"),g.attr("data-type","collections"),g.attr("data-id",e.name)),C},"drawActorTypeCollections"),Bht=o(function(t,e,r,i,n){let a=i?e.stopy:e.starty,s=e.x+e.width/2,l=a+e.height,{look:u,theme:h,themeVariables:f}=r,{bkgColorArray:d,borderColorArray:p}=f,m=t.append("g").lower(),g=m;i||(ei++,Object.keys(e.links||{}).length&&!r.forceMenus&&g.attr("onclick",C_(`actor${ei}_popup`)).attr("cursor","pointer"),g.append("line").attr("id","actor"+ei).attr("x1",s).attr("y1",l).attr("x2",s).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",e.name).attr("data-et","life-line").attr("data-id",e.name),g=m.append("g"),e.actorCnt=ei,e.links!=null&&g.attr("id","root-"+ei),u==="neo"&&g.attr("data-look","neo"));let y=ja(),v="actor";e.properties?.class?v=e.properties.class:y.fill="#eaeaea",i?v+=` ${_p}`:v+=` ${Ap}`,g.attr("class",v),y.x=e.x,y.y=a,y.width=e.width,y.height=e.height,y.name=e.name;let x=y.height/2,b=x/(2.5+y.height/50),T=g.append("g"),w=g.append("g"),k=`M ${y.x},${y.y+x} + a ${b},${x} 0 0 0 0,${y.height} + h ${y.width-2*b} + a ${b},${x} 0 0 0 0,-${y.height} + Z + `;T.append("path").attr("d",k),w.append("path").attr("d",`M ${y.x},${y.y+x} + a ${b},${x} 0 0 0 0,${y.height}`),T.attr("transform",`translate(${b}, ${-(y.height/2)})`),w.attr("transform",`translate(${y.width-b}, ${-y.height/2})`),e.rectData=y,u==="neo"&&T.attr("filter","url(#drop-shadow)");let C=n.get(e.name)??0;if(Cf.has(h)&&(T.style("stroke",p[C%p.length]),T.style("fill",d[C%p.length]),w.style("stroke",p[C%p.length]),w.style("fill",d[C%p.length])),e.properties?.icon){let L=e.properties.icon.trim(),M=y.x+y.width-20,I=y.y+10;L.charAt(0)==="@"?w3(g,M,I,L.substr(1)):C3(g,M,I,L)}wf(r,sn(e.description))(e.description,g,y.x,y.y,y.width,y.height,{class:`actor ${k_}`},r);let E=e.height,S=T.select("path:last-child");if(S.node()){let L=S.node().getBBox();e.height=L.height,E=L.height}return i||(g.attr("data-et","participant"),g.attr("data-type","queue"),g.attr("data-id",e.name)),E},"drawActorTypeQueue"),Fht=o(function(t,e,r,i,n,a){let s=i?e.stopy:e.starty,l=e.x+e.width/2,u=s+75,{look:h,theme:f,themeVariables:d}=r,{bkgColorArray:p,borderColorArray:m,actorBorder:g,actorBkg:y}=d,v=t.append("g").lower();i||(ei++,v.append("line").attr("id","actor"+ei).attr("x1",l).attr("y1",u).attr("x2",l).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",e.name).attr("data-et","life-line").attr("data-id",e.name),e.actorCnt=ei);let x=t.append("g"),b=lg;i?b+=` ${_p}`:b+=` ${Ap}`,x.attr("class",b),x.attr("name",e.name);let T=ja();T.x=e.x,T.y=s,T.fill="#eaeaea",T.width=e.width,T.height=e.height,T.class="actor";let w=e.x+e.width/2,k=s+32,C=22;x.append("defs").append("marker").attr("id",n+"-filled-head-control").attr("refX",11).attr("refY",5.8).attr("markerWidth",20).attr("markerHeight",28).attr("orient","172.5").attr("stroke-width",1.2).append("path").attr("d","M 14.4 5.6 L 7.2 10.4 L 8.8 5.6 L 7.2 0.8 Z"),x.append("circle").attr("cx",w).attr("cy",k).attr("r",C).attr("filter",`${h==="neo"?"url(#drop-shadow)":""}`),x.append("line").attr("marker-end","url(#"+n+"-filled-head-control)").attr("transform",`translate(${w}, ${k-C})`);let E=a.get(e.name)??0;Cf.has(f)?(x.style("stroke",m[E%m.length]),x.style("fill",p[E%m.length])):(x.style("stroke",g),x.style("fill",y));let S=x.node().getBBox();return e.height=S.height+2*(r?.sequence?.labelBoxHeight??0),wf(r,sn(e.description))(e.description,x,T.x,T.y+C+(i?5:12),T.width,T.height,{class:`actor ${lg}`},r),i||(x.attr("data-et","participant"),x.attr("data-type","control"),x.attr("data-id",e.name)),e.height},"drawActorTypeControl"),$ht=o(function(t,e,r,i,n){let a=i?e.stopy:e.starty,s=e.x+e.width/2,l=a+75,{look:u,theme:h,themeVariables:f}=r,{bkgColorArray:d,borderColorArray:p}=f,m=t.append("g").lower(),g=t.append("g"),y="actor";i?y+=` ${_p}`:y+=` ${Ap}`,g.attr("class",y),g.attr("name",e.name);let v=ja();v.x=e.x,v.y=a,v.fill="#eaeaea",v.width=e.width,v.height=e.height,v.class="actor";let x=e.x+e.width/2,b=a+(i?10:25),T=22;g.append("circle").attr("cx",x).attr("cy",b).attr("r",T).attr("width",e.width).attr("height",e.height),g.append("line").attr("x1",x-T).attr("x2",x+T).attr("y1",b+T).attr("y2",b+T).attr("stroke-width",2),u==="neo"&&g.attr("filter","url(#drop-shadow)");let w=n.get(e.name)??0;Cf.has(h)&&(g.style("stroke",p[w%p.length]),g.style("fill",d[w%p.length]));let k=g.node().getBBox();return e.height=k.height+(r?.sequence?.labelBoxHeight??0),i||(ei++,m.append("line").attr("id","actor"+ei).attr("x1",s).attr("y1",l).attr("x2",s).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",e.name).attr("data-et","life-line").attr("data-id",e.name),e.actorCnt=ei),wf(r,sn(e.description))(e.description,g,v.x,v.y+(i?15:30),v.width,v.height,{class:`actor ${lg}`},r),i?g.attr("transform",`translate(0, ${T})`):(g.attr("transform",`translate(0, ${T/2-5})`),g.attr("data-et","participant"),g.attr("data-type","entity"),g.attr("data-id",e.name)),e.height},"drawActorTypeEntity"),zht=o(function(t,e,r,i,n){let a=i?e.stopy:e.starty,s=e.x+e.width/2,l=a+e.height+2*r.boxTextMargin,{theme:u,themeVariables:h,look:f}=r,{bkgColorArray:d,borderColorArray:p,actorBorder:m}=h,g=t.append("g").lower(),y=g;i||(ei++,Object.keys(e.links||{}).length&&!r.forceMenus&&y.attr("onclick",C_(`actor${ei}_popup`)).attr("cursor","pointer"),y.append("line").attr("id","actor"+ei).attr("x1",s).attr("y1",l).attr("x2",s).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",e.name).attr("data-et","life-line").attr("data-id",e.name),y=g.append("g"),e.actorCnt=ei,e.links!=null&&y.attr("id","root-"+ei),f==="neo"&&y.attr("data-look","neo"));let v=ja(),x="actor";e.properties?.class?x=e.properties.class:v.fill="#eaeaea",i?x+=` ${_p}`:x+=` ${Ap}`,v.x=e.x,v.y=a,v.width=e.width,v.height=e.height,v.class=x,v.name=e.name,v.x=e.x,v.y=a;let b=v.width/3,T=v.width/3,w=b/2,k=w/(2.5+b/50),C=y.append("g");C.attr("class",x);let E=` + M ${v.x},${v.y+k} + a ${w},${k} 0 0 0 ${b},0 + a ${w},${k} 0 0 0 -${b},0 + l 0,${T-2*k} + a ${w},${k} 0 0 0 ${b},0 + l 0,-${T-2*k} +`;C.append("path").attr("d",E),f==="neo"&&C.attr("filter","url(#drop-shadow)");let S=n.get(e.name)??0;Cf.has(u)?(C.style("stroke",p[S%p.length]),C.style("fill",d[S%p.length])):C.style("stroke",m),C.attr("transform",`translate(${b}, ${k})`),e.rectData=v,wf(r,sn(e.description))(e.description,y,v.x,v.y+35,v.width,v.height,{class:`actor ${k_}`},r);let L=C.select("path:last-child");if(L.node()){let M=L.node().getBBox();e.height=M.height+(r.sequence.labelBoxHeight??0)}return i||(y.attr("data-et","participant"),y.attr("data-type","database"),y.attr("data-id",e.name)),e.height},"drawActorTypeDatabase"),Ght=o(function(t,e,r,i,n){let a=i?e.stopy:e.starty,s=e.x+e.width/2,l=a+80,u=22,h=t.append("g").lower(),{look:f,theme:d,themeVariables:p}=r,{bkgColorArray:m,borderColorArray:g,actorBorder:y}=p;i||(ei++,h.append("line").attr("id","actor"+ei).attr("x1",s).attr("y1",l).attr("x2",s).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",e.name).attr("data-et","life-line").attr("data-id",e.name),e.actorCnt=ei);let v=t.append("g"),x=lg;i?x+=` ${_p}`:x+=` ${Ap}`,v.attr("class",x),v.attr("name",e.name);let b=ja();b.x=e.x,b.y=a,b.fill="#eaeaea",b.width=e.width,b.height=e.height,b.class="actor",v.append("line").attr("id","actor-man-torso"+ei).attr("x1",e.x+e.width/2-u*2.5).attr("y1",a+12).attr("x2",e.x+e.width/2-15).attr("y2",a+12),v.append("line").attr("id","actor-man-arms"+ei).attr("x1",e.x+e.width/2-u*2.5).attr("y1",a+2).attr("x2",e.x+e.width/2-u*2.5).attr("y2",a+22),v.append("circle").attr("cx",e.x+e.width/2).attr("cy",a+12).attr("r",u),f==="neo"&&v.attr("filter","url(#drop-shadow)");let T=n.get(e.name)??0;Cf.has(d)?(v.style("stroke",g[T%g.length]),v.style("fill",m[T%g.length])):v.style("stroke",y);let w=v.node().getBBox();return e.height=w.height+(r.sequence.labelBoxHeight??0),wf(r,sn(e.description))(e.description,v,b.x,b.y+15,b.width,b.height,{class:`actor ${lg}`},r),v.attr("transform",`translate(0,${u/2+10})`),i||(v.attr("data-et","participant"),v.attr("data-type","boundary"),v.attr("data-id",e.name)),e.height},"drawActorTypeBoundary"),Vht=o(function(t,e,r,i,n){let a=i?e.stopy:e.starty,s=e.x+e.width/2,l=a+80,{look:u,theme:h,themeVariables:f}=r,{bkgColorArray:d,borderColorArray:p,actorBorder:m}=f,g=t.append("g").lower();i||(ei++,g.append("line").attr("id","actor"+ei).attr("x1",s).attr("y1",l).attr("x2",s).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",e.name).attr("data-et","life-line").attr("data-id",e.name),e.actorCnt=ei);let y=t.append("g"),v=lg;i?v+=` ${_p}`:v+=` ${Ap}`,y.attr("class",v),y.attr("name",e.name),i||y.attr("data-et","participant").attr("data-type","actor").attr("data-id",e.name);let x=u==="neo"?.5:1,b=u==="neo"?a+(1-x)*30:a;y.append("line").attr("id","actor-man-torso"+ei).attr("x1",s).attr("y1",b+25*x).attr("x2",s).attr("y2",b+45*x),y.append("line").attr("id","actor-man-arms"+ei).attr("x1",s-Sp/2*x).attr("y1",b+33*x).attr("x2",s+Sp/2*x).attr("y2",b+33*x),y.append("line").attr("x1",s-Sp/2*x).attr("y1",b+60*x).attr("x2",s).attr("y2",b+45*x),y.append("line").attr("x1",s).attr("y1",b+45*x).attr("x2",s+(Sp/2-2)*x).attr("y2",b+60*x);let T=y.append("circle");T.attr("cx",e.x+e.width/2),T.attr("cy",b+10*x),T.attr("r",15*x),T.attr("width",e.width*x),T.attr("height",e.height*x);let w=y.node().getBBox();e.height=w.height;let k=ja();k.x=e.x,k.y=b,k.fill="#eaeaea",k.width=e.width,k.height=e.height/x,k.class="actor",k.rx=3,k.ry=3;let C=n.get(e.name)??0;return Cf.has(h)?(y.style("stroke",p[C%p.length]),y.style("fill",d[C%p.length])):y.style("stroke",m),wf(r,sn(e.description))(e.description,y,k.x,b+35*x-(u==="neo"?10:0),k.width,k.height,{class:`actor ${lg}`},r),e.height},"drawActorTypeActor"),qht=o(async function(t,e,r,i,n,a,s){let l=s??new Map([...a.db.getActors().values()].map((u,h)=>[u.name,h]));switch(e.type){case"actor":return await Vht(t,e,r,i,l);case"participant":return await Oht(t,e,r,i,l);case"boundary":return await Ght(t,e,r,i,l);case"control":return await Fht(t,e,r,i,n,l);case"entity":return await $ht(t,e,r,i,l);case"database":return await zht(t,e,r,i,l);case"collections":return await Pht(t,e,r,i,l);case"queue":return await Bht(t,e,r,i,l)}},"drawActor"),Wht=o(function(t,e,r){let n=t.append("g");S3e(n,e),e.name&&wf(r)(e.name,n,e.x,e.y+r.boxTextMargin+(e.textMaxHeight||0)/2,e.width,0,{class:"text"},r),n.lower()},"drawBox"),Uht=o(function(t){return t.append("g")},"anchorElement"),Hht=o(function(t,e,r,i,n,a,s){let{theme:l,themeVariables:u}=i,{bkgColorArray:h,borderColorArray:f,mainBkg:d}=u,p=ja(),m=e.anchored,g=e.actor;p.x=e.startx,p.y=e.starty,p.class="activation"+n%3,p.width=e.stopx-e.startx,p.height=r-e.starty;let y=IC(m,p),x=(s??new Map([...a.db.getActors().values()].map((b,T)=>[b.name,T]))).get(g)??0;Cf.has(l)&&(y.style("stroke",f[x%f.length]),y.style("fill",h[x%f.length]??d))},"drawActivation"),Yht=o(async function(t,e,r,i,n){let{boxMargin:a,boxTextMargin:s,labelBoxHeight:l,labelBoxWidth:u,messageFontFamily:h,messageFontSize:f,messageFontWeight:d}=i,p=t.append("g").attr("data-et","control-structure").attr("data-id","i"+n.id),m=o(function(v,x,b,T){return p.append("line").attr("x1",v).attr("y1",x).attr("x2",b).attr("y2",T).attr("class","loopLine")},"drawLoopLine");m(e.startx,e.starty,e.stopx,e.starty),m(e.stopx,e.starty,e.stopx,e.stopy),m(e.startx,e.stopy,e.stopx,e.stopy),m(e.startx,e.starty,e.startx,e.stopy),e.sections!==void 0&&e.sections.forEach(function(v){m(e.startx,v.y,e.stopx,v.y).style("stroke-dasharray","3, 3")});let g=J2();g.text=r,g.x=e.startx,g.y=e.starty,g.fontFamily=h,g.fontSize=f,g.fontWeight=d,g.anchor="middle",g.valign="middle",g.tspan=!1,g.width=Math.max(u??0,50),g.height=l+(i.look==="neo"?15:0)||20,g.textMargin=s,g.class="labelText",E3e(p,g),g=A3e(),g.text=e.title,g.x=e.startx+u/2+(e.stopx-e.startx)/2,g.y=e.starty+a+s,g.anchor="middle",g.valign="middle",g.textMargin=s,g.class="loopText",g.fontFamily=h,g.fontSize=f,g.fontWeight=d,g.wrap=!0;let y=sn(g.text)?await MC(p,g,e):cg(p,g);if(e.sectionTitles!==void 0){for(let[v,x]of Object.entries(e.sectionTitles))if(x.message){g.text=x.message,g.x=e.startx+(e.stopx-e.startx)/2,g.y=e.sections[v].y+a+s,g.class="loopText",g.anchor="middle",g.valign="middle",g.tspan=!1,g.fontFamily=h,g.fontSize=f,g.fontWeight=d,g.wrap=e.wrap,sn(g.text)?(e.starty=e.sections[v].y,await MC(p,g,e)):cg(p,g);let b=Math.round(y.map(T=>(T._groups||T)[0][0].getBBox().height).reduce((T,w)=>T+w));e.sections[v].height+=b-(a+s)}}return e.height=Math.round(e.stopy-e.starty),p},"drawLoop"),S3e=o(function(t,e){k3(t,e)},"drawBackgroundRect"),jht=o(function(t,e){t.append("defs").append("symbol").attr("id",e+"-database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},"insertDatabaseIcon"),Xht=o(function(t,e){t.append("defs").append("symbol").attr("id",e+"-computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},"insertComputerIcon"),Kht=o(function(t,e){t.append("defs").append("symbol").attr("id",e+"-clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")},"insertClockIcon"),Qht=o(function(t,e){t.append("defs").append("marker").attr("id",e+"-arrowhead").attr("refX",7.9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto-start-reverse").append("path").attr("d","M -1 0 L 10 5 L 0 10 z")},"insertArrowHead"),Zht=o(function(t,e){t.append("defs").append("marker").attr("id",e+"-filled-head").attr("refX",15.5).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"insertArrowFilledHead"),Jht=o(function(t,e){t.append("defs").append("marker").attr("id",e+"-sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},"insertSequenceNumber"),eft=o(function(t,e){t.append("defs").append("marker").attr("id",e+"-crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",4).attr("refY",4.5).append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1pt").attr("d","M 1,2 L 6,7 M 6,2 L 1,7")},"insertArrowCrossHead"),tft=o(function(t,e){let{theme:r}=e;t.append("defs").append("filter").attr("id","drop-shadow").attr("height","130%").attr("width","130%").append("feDropShadow").attr("dx","4").attr("dy","4").attr("stdDeviation",0).attr("flood-opacity","0.06").attr("flood-color",`${r==="redux"||r==="redux-color"?"#000000":"#FFFFFF"}`)},"insertDropShadow"),A3e=o(function(){return{x:0,y:0,fill:void 0,anchor:void 0,style:"#666",width:void 0,height:void 0,textMargin:0,rx:0,ry:0,tspan:!0,valign:void 0}},"getTextObj"),rft=o(function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}},"getNoteRect"),wf=(function(){function t(a,s,l,u,h,f,d){let p=s.append("text").attr("x",l+h/2).attr("y",u+f/2+5).style("text-anchor","middle").text(a);n(p,d)}o(t,"byText");function e(a,s,l,u,h,f,d,p){let{actorFontSize:m,actorFontFamily:g,actorFontWeight:y}=p,[v,x]=$s(m),b=a.split(lt.lineBreakRegex);for(let T=0;T{let s=ug(Ve),l=a.actorKeys.reduce((d,p)=>d+=t.get(p).width+(t.get(p).margin||0),0),u=Ve.boxMargin*8;l+=u,l-=2*Ve.boxTextMargin,a.wrap&&(a.name=Kt.wrapLabel(a.name,l-2*Ve.wrapPadding,s));let h=Kt.calculateTextDimensions(a.name,s);n=lt.getMax(h.height,n);let f=lt.getMax(l,h.width+2*Ve.wrapPadding);if(a.margin=Ve.boxTextMargin,la.textMaxHeight=n),lt.getMax(i,Ve.height)}var Ve,pt,lft,D3e,ug,ex,lU,uft,hft,cU,R3e,N3e,w_,L3e,dft,mft,yft,vft,xft,oU,bft,I3e,Tft,kft,Cft,M3e,O3e=P(()=>{"use strict";Pr();_3e();bt();Vr();Vr();y0();Ut();kg();er();Xi();nU();Ve={},pt={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],activations:[],models:{getHeight:o(function(){return Math.max.apply(null,this.actors.length===0?[0]:this.actors.map(t=>t.height||0))+(this.loops.length===0?0:this.loops.map(t=>t.height||0).reduce((t,e)=>t+e))+(this.messages.length===0?0:this.messages.map(t=>t.height||0).reduce((t,e)=>t+e))+(this.notes.length===0?0:this.notes.map(t=>t.height||0).reduce((t,e)=>t+e))},"getHeight"),clear:o(function(){this.actors=[],this.boxes=[],this.loops=[],this.messages=[],this.notes=[]},"clear"),addBox:o(function(t){this.boxes.push(t)},"addBox"),addActor:o(function(t){this.actors.push(t)},"addActor"),addLoop:o(function(t){this.loops.push(t)},"addLoop"),addMessage:o(function(t){this.messages.push(t)},"addMessage"),addNote:o(function(t){this.notes.push(t)},"addNote"),lastActor:o(function(){return this.actors[this.actors.length-1]},"lastActor"),lastLoop:o(function(){return this.loops[this.loops.length-1]},"lastLoop"),lastMessage:o(function(){return this.messages[this.messages.length-1]},"lastMessage"),lastNote:o(function(){return this.notes[this.notes.length-1]},"lastNote"),actors:[],boxes:[],loops:[],messages:[],notes:[]},init:o(function(){this.sequenceItems=[],this.activations=[],this.models.clear(),this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0,N3e(ge())},"init"),updateVal:o(function(t,e,r,i){t[e]===void 0?t[e]=r:t[e]=i(r,t[e])},"updateVal"),updateBounds:o(function(t,e,r,i){let n=this,a=0;function s(l){return o(function(h){a++;let f=n.sequenceItems.length-a+1;n.updateVal(h,"starty",e-f*Ve.boxMargin,Math.min),n.updateVal(h,"stopy",i+f*Ve.boxMargin,Math.max),n.updateVal(pt.data,"startx",t-f*Ve.boxMargin,Math.min),n.updateVal(pt.data,"stopx",r+f*Ve.boxMargin,Math.max),l!=="activation"&&(n.updateVal(h,"startx",t-f*Ve.boxMargin,Math.min),n.updateVal(h,"stopx",r+f*Ve.boxMargin,Math.max),n.updateVal(pt.data,"starty",e-f*Ve.boxMargin,Math.min),n.updateVal(pt.data,"stopy",i+f*Ve.boxMargin,Math.max))},"updateItemBounds")}o(s,"updateFn"),this.sequenceItems.forEach(s()),this.activations.forEach(s("activation"))},"updateBounds"),insert:o(function(t,e,r,i){let n=lt.getMin(t,r),a=lt.getMax(t,r),s=lt.getMin(e,i),l=lt.getMax(e,i);this.updateVal(pt.data,"startx",n,Math.min),this.updateVal(pt.data,"starty",s,Math.min),this.updateVal(pt.data,"stopx",a,Math.max),this.updateVal(pt.data,"stopy",l,Math.max),this.updateBounds(n,s,a,l)},"insert"),newActivation:o(function(t,e,r){let i=r.get(t.from),n=w_(t.from).length||0,a=i.x+i.width/2+(n-1)*Ve.activationWidth/2;this.activations.push({startx:a,starty:this.verticalPos+2,stopx:a+Ve.activationWidth,stopy:void 0,actor:t.from,anchored:Hi.anchorElement(e)})},"newActivation"),endActivation:o(function(t){let e=this.activations.map(function(r){return r.actor}).lastIndexOf(t.from);return this.activations.splice(e,1)[0]},"endActivation"),createLoop:o(function(t={message:void 0,wrap:!1,width:void 0},e){return{startx:void 0,starty:this.verticalPos,stopx:void 0,stopy:void 0,title:t.message,wrap:t.wrap,width:t.width,height:0,fill:e}},"createLoop"),newLoop:o(function(t={message:void 0,wrap:!1,width:void 0},e){this.sequenceItems.push(this.createLoop(t,e))},"newLoop"),endLoop:o(function(){return this.sequenceItems.pop()},"endLoop"),isLoopOverlap:o(function(){return this.sequenceItems.length?this.sequenceItems[this.sequenceItems.length-1].overlap:!1},"isLoopOverlap"),addSectionToLoop:o(function(t){let e=this.sequenceItems.pop();e.sections=e.sections||[],e.sectionTitles=e.sectionTitles||[],e.sections.push({y:pt.getVerticalPos(),height:0}),e.sectionTitles.push(t),this.sequenceItems.push(e)},"addSectionToLoop"),saveVerticalPos:o(function(){this.isLoopOverlap()&&(this.savedVerticalPos=this.verticalPos)},"saveVerticalPos"),resetVerticalPos:o(function(){this.isLoopOverlap()&&(this.verticalPos=this.savedVerticalPos)},"resetVerticalPos"),bumpVerticalPos:o(function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=lt.getMax(this.data.stopy,this.verticalPos)},"bumpVerticalPos"),getVerticalPos:o(function(){return this.verticalPos},"getVerticalPos"),getBounds:o(function(){return{bounds:this.data,models:this.models}},"getBounds")},lft=o(async function(t,e,r){pt.bumpVerticalPos(Ve.boxMargin),e.height=Ve.boxMargin,e.starty=pt.getVerticalPos();let i=ja();i.x=e.startx,i.y=e.starty,i.width=e.width||Ve.width,i.class="note";let n=t.append("g");n.attr("data-et","note"),n.attr("data-id","i"+r);let a=Hi.drawRect(n,i),s=J2();s.x=e.startx,s.y=e.starty,s.width=i.width,s.dy="1em",s.text=e.message,s.class="noteText",s.fontFamily=Ve.noteFontFamily,s.fontSize=Ve.noteFontSize,s.fontWeight=Ve.noteFontWeight,s.anchor=Ve.noteAlign,s.textMargin=Ve.noteMargin,s.valign="center";let l=sn(s.text)?await MC(n,s):cg(n,s),u=Math.round(l.map(h=>(h._groups||h)[0][0].getBBox().height).reduce((h,f)=>h+f));a.attr("height",u+2*Ve.noteMargin),e.height+=u+2*Ve.noteMargin,pt.bumpVerticalPos(u+2*Ve.noteMargin),e.stopy=e.starty+u+2*Ve.noteMargin,e.stopx=e.startx+i.width,pt.insert(e.startx,e.starty,e.stopx,e.stopy),pt.models.addNote(e)},"drawNote"),D3e=o(function(t,e,r,i,n,a,s){let l=i.db.getActors(),u=l.get(e.from),h=l.get(e.to),f=r.sequenceVisible,d=u.x+u.width/2,p=h.x+h.width/2,m=d<=p,g=I3e(e,i),y=t.append("g"),v=16.5,x=o((C,E)=>{let S=C?v:-v;return E?-S:S},"getCircleOffset"),b=o(C=>{y.append("circle").attr("cx",C).attr("cy",s).attr("r",5).attr("width",10).attr("height",10)},"drawCircle"),{CENTRAL_CONNECTION:T,CENTRAL_CONNECTION_REVERSE:w,CENTRAL_CONNECTION_DUAL:k}=i.db.LINETYPE;if(f)switch(e.centralConnection){case T:g&&(p+=x(m,!0));break;case w:g||(d+=x(m,!1));break;case k:g?p+=x(m,!0):d+=x(m,!1);break}switch(e.centralConnection){case T:b(p);break;case w:b(d);break;case k:b(d),b(p);break}},"drawCentralConnection"),ug=o(t=>({fontFamily:t.messageFontFamily,fontSize:t.messageFontSize,fontWeight:t.messageFontWeight}),"messageFont"),ex=o(t=>({fontFamily:t.noteFontFamily,fontSize:t.noteFontSize,fontWeight:t.noteFontWeight}),"noteFont"),lU=o(t=>({fontFamily:t.actorFontFamily,fontSize:t.actorFontSize,fontWeight:t.actorFontWeight}),"actorFont");o(cft,"boundMessage");uft=o(async function(t,e,r,i,n,a){let{startx:s,stopx:l,starty:u,message:h,type:f,sequenceIndex:d,sequenceVisible:p}=e,m=Kt.calculateTextDimensions(h,ug(Ve)),g=J2();g.x=s,g.y=u+10,g.width=l-s,g.class="messageText",g.dy="1em",g.text=h,g.fontFamily=Ve.messageFontFamily,g.fontSize=Ve.messageFontSize,g.fontWeight=Ve.messageFontWeight,g.anchor=Ve.messageAlign,g.valign="center",g.textMargin=Ve.wrapPadding,g.tspan=!1,sn(g.text)?await MC(t,g,{startx:s,stopx:l,starty:r}):cg(t,g);let y=m.width,v;if(s===l){let b=p||Ve.showSequenceNumbers,T=I3e(n,i),w=Tft(n,i),k=s+(b&&(T||w)?10:0);Ve.rightAngles?v=t.append("path").attr("d",`M ${k},${r} H ${s+lt.getMax(Ve.width/2,y/2)} V ${r+25} H ${s}`):v=t.append("path").attr("d","M "+k+","+r+" C "+(k+60)+","+(r-10)+" "+(s+60)+","+(r+30)+" "+s+","+(r+20)),oU(n,i)&&D3e(t,n,e,i,s,l,r)}else v=t.append("line"),v.attr("x1",s),v.attr("y1",r),v.attr("x2",l),v.attr("y2",r),oU(n,i)&&D3e(t,n,e,i,s,l,r);f===i.db.LINETYPE.DOTTED||f===i.db.LINETYPE.DOTTED_CROSS||f===i.db.LINETYPE.DOTTED_POINT||f===i.db.LINETYPE.DOTTED_OPEN||f===i.db.LINETYPE.BIDIRECTIONAL_DOTTED||f===i.db.LINETYPE.SOLID_TOP_DOTTED||f===i.db.LINETYPE.SOLID_BOTTOM_DOTTED||f===i.db.LINETYPE.STICK_TOP_DOTTED||f===i.db.LINETYPE.STICK_BOTTOM_DOTTED||f===i.db.LINETYPE.SOLID_ARROW_TOP_REVERSE_DOTTED||f===i.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE_DOTTED||f===i.db.LINETYPE.STICK_ARROW_TOP_REVERSE_DOTTED||f===i.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE_DOTTED?(v.style("stroke-dasharray","3, 3"),v.attr("class","messageLine1")):v.attr("class","messageLine0"),v.attr("data-et","message"),v.attr("data-id","i"+e.id),v.attr("data-from",e.from),v.attr("data-to",e.to);let x="";if(Ve.arrowMarkerAbsolute&&(x=Yp(!0)),v.attr("stroke-width",2),v.attr("stroke","none"),v.style("fill","none"),(f===i.db.LINETYPE.SOLID_TOP||f===i.db.LINETYPE.SOLID_TOP_DOTTED)&&v.attr("marker-end","url("+x+"#"+a+"-solidTopArrowHead)"),(f===i.db.LINETYPE.SOLID_BOTTOM||f===i.db.LINETYPE.SOLID_BOTTOM_DOTTED)&&v.attr("marker-end","url("+x+"#"+a+"-solidBottomArrowHead)"),(f===i.db.LINETYPE.STICK_TOP||f===i.db.LINETYPE.STICK_TOP_DOTTED)&&v.attr("marker-end","url("+x+"#"+a+"-stickTopArrowHead)"),(f===i.db.LINETYPE.STICK_BOTTOM||f===i.db.LINETYPE.STICK_BOTTOM_DOTTED)&&v.attr("marker-end","url("+x+"#"+a+"-stickBottomArrowHead)"),(f===i.db.LINETYPE.SOLID_ARROW_TOP_REVERSE||f===i.db.LINETYPE.SOLID_ARROW_TOP_REVERSE_DOTTED)&&v.attr("marker-start","url("+x+"#"+a+"-solidBottomArrowHead)"),(f===i.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE||f===i.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE_DOTTED)&&v.attr("marker-start","url("+x+"#"+a+"-solidTopArrowHead)"),(f===i.db.LINETYPE.STICK_ARROW_TOP_REVERSE||f===i.db.LINETYPE.STICK_ARROW_TOP_REVERSE_DOTTED)&&v.attr("marker-start","url("+x+"#"+a+"-stickBottomArrowHead)"),(f===i.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE||f===i.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE_DOTTED)&&v.attr("marker-start","url("+x+"#"+a+"-stickTopArrowHead)"),(f===i.db.LINETYPE.SOLID||f===i.db.LINETYPE.DOTTED)&&v.attr("marker-end","url("+x+"#"+a+"-arrowhead)"),(f===i.db.LINETYPE.BIDIRECTIONAL_SOLID||f===i.db.LINETYPE.BIDIRECTIONAL_DOTTED)&&(v.attr("marker-start","url("+x+"#"+a+"-arrowhead)"),v.attr("marker-end","url("+x+"#"+a+"-arrowhead)")),(f===i.db.LINETYPE.SOLID_POINT||f===i.db.LINETYPE.DOTTED_POINT)&&v.attr("marker-end","url("+x+"#"+a+"-filled-head)"),(f===i.db.LINETYPE.SOLID_CROSS||f===i.db.LINETYPE.DOTTED_CROSS)&&v.attr("marker-end","url("+x+"#"+a+"-crosshead)"),p||Ve.showSequenceNumbers){let b=f===i.db.LINETYPE.BIDIRECTIONAL_SOLID||f===i.db.LINETYPE.BIDIRECTIONAL_DOTTED,T=f===i.db.LINETYPE.SOLID_ARROW_TOP_REVERSE||f===i.db.LINETYPE.SOLID_ARROW_TOP_REVERSE_DOTTED||f===i.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE||f===i.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE_DOTTED||f===i.db.LINETYPE.STICK_ARROW_TOP_REVERSE||f===i.db.LINETYPE.STICK_ARROW_TOP_REVERSE_DOTTED||f===i.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE||f===i.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE_DOTTED,w=6,k=oU(n,i),C=s,E=l;b?(ss?E=l-2*w:(E=l-w,C+=n?.centralConnection===i.db.LINETYPE.CENTRAL_CONNECTION_DUAL||n?.centralConnection===i.db.LINETYPE.CENTRAL_CONNECTION_REVERSE?-7.5:0),E+=k?15:0,v.attr("x2",E),v.attr("x1",C)):v.attr("x1",s+w);let S=0,L=s===l,M=s<=l;L?S=e.fromBounds+1:T?S=M?e.toBounds-1:e.fromBounds+1:S=M?e.fromBounds+1:e.toBounds-1,t.append("line").attr("x1",S).attr("y1",r).attr("x2",S).attr("y2",r).attr("stroke-width",0).attr("marker-start","url("+x+"#"+a+"-sequencenumber)"),t.append("text").attr("x",S).attr("y",r+4).attr("font-family","sans-serif").attr("font-size","12px").attr("text-anchor","middle").attr("class","sequenceNumber").text(d)}},"drawMessage"),hft=o(function(t,e,r,i,n,a,s){let l=0,u=0,h,f=0;for(let d of i){let p=e.get(d),m=p.box;h&&h!=m&&(s||pt.models.addBox(h),u+=Ve.boxMargin+h.margin),m&&m!=h&&(s||(m.x=l+u,m.y=n),u+=m.margin),p.width=lt.getMax(p.width||Ve.width,Ve.width),p.height=lt.getMax(p.height||Ve.height,Ve.height),p.margin=p.margin||Ve.actorMargin,f=lt.getMax(f,p.height),r.get(p.name)&&(u+=p.width/2),p.x=l+u,p.starty=pt.getVerticalPos(),pt.insert(p.x,n,p.x+p.width,p.height),l+=p.width+u,p.box&&(p.box.width=l+m.margin-p.box.x),u=p.margin,h=p.box,pt.models.addActor(p)}h&&!s&&pt.models.addBox(h),pt.bumpVerticalPos(f)},"addActorRenderingData"),cU=o(async function(t,e,r,i,n,a,s){if(i){let l=0;pt.bumpVerticalPos(Ve.boxMargin*2);for(let u of r){let h=e.get(u);h.stopy||(h.stopy=pt.getVerticalPos());let f=await Hi.drawActor(t,h,Ve,!0,n,a,s);l=lt.getMax(l,f)}pt.bumpVerticalPos(l+Ve.boxMargin)}else for(let l of r){let u=e.get(l);await Hi.drawActor(t,u,Ve,!1,n,a,s)}},"drawActors"),R3e=o(function(t,e,r,i){let n=0,a=0;for(let s of r){let l=e.get(s),u=mft(l),h=Hi.drawPopup(t,l,u,Ve,Ve.forceMenus,i);h.height>n&&(n=h.height),h.width+l.x>a&&(a=h.width+l.x)}return{maxHeight:n,maxWidth:a}},"drawActorsPopup"),N3e=o(function(t){Yi(Ve,t),t.fontFamily&&(Ve.actorFontFamily=Ve.noteFontFamily=Ve.messageFontFamily=t.fontFamily),t.fontSize&&(Ve.actorFontSize=Ve.noteFontSize=Ve.messageFontSize=t.fontSize),t.fontWeight&&(Ve.actorFontWeight=Ve.noteFontWeight=Ve.messageFontWeight=t.fontWeight)},"setConf"),w_=o(function(t){return pt.activations.filter(function(e){return e.actor===t})},"actorActivations"),L3e=o(function(t,e){let r=e.get(t),i=w_(t),n=i.reduce(function(s,l){return lt.getMin(s,l.startx)},r.x+r.width/2-1),a=i.reduce(function(s,l){return lt.getMax(s,l.stopx)},r.x+r.width/2+1);return[n,a]},"activationBounds");o(ch,"adjustLoopHeightForWrap");o(fft,"adjustCreatedDestroyedData");dft=o(async function(t,e,r,i){let{securityLevel:n,sequence:a,look:s}=ge();Ve=a;let l;n==="sandbox"&&(l=Ze("#i"+e));let u=n==="sandbox"?Ze(l.nodes()[0].contentDocument.body):Ze("body"),h=n==="sandbox"?l.nodes()[0].contentDocument:document;pt.init(),Q.debug(i.db);let f=n==="sandbox"?u.select(`[id="${e}"]`):Ze(`[id="${e}"]`),d=i.db.getActors(),p=i.db.getCreatedActors(),m=i.db.getDestroyedActors(),g=i.db.getBoxes(),y=i.db.getActorKeys(),v=i.db.getMessages(),x=i.db.getDiagramTitle(),b=i.db.hasAtLeastOneBox(),T=i.db.hasAtLeastOneBoxWithTitle(),w=await pft(d,v,i);if(Ve.height=await gft(d,w,g),Hi.insertComputerIcon(f,e),Hi.insertDatabaseIcon(f,e),Hi.insertClockIcon(f,e),b&&(pt.bumpVerticalPos(Ve.boxMargin),T&&pt.bumpVerticalPos(g[0].textMaxHeight)),Ve.hideUnusedParticipants===!0){let F=new Set;v.forEach(V=>{F.add(V.from),F.add(V.to)}),y=y.filter(V=>F.has(V))}let k=new Map(y.map((F,V)=>[d.get(F)?.name??F,V]));hft(f,d,p,y,0,v,!1);let C=await Cft(v,d,w,i);Hi.insertArrowHead(f,e),Hi.insertArrowCrossHead(f,e),Hi.insertArrowFilledHead(f,e),Hi.insertSequenceNumber(f,e),Hi.insertSolidTopArrowHead(f,e),Hi.insertSolidBottomArrowHead(f,e),Hi.insertStickTopArrowHead(f,e),Hi.insertStickBottomArrowHead(f,e),s==="neo"&&Hi.insertDropShadow(f,Ve);function E(F,V){let H=pt.endActivation(F);H.starty+18>V&&(H.starty=V-6,V+=12),Hi.drawActivation(f,H,V,Ve,w_(F.from).length,i,k),pt.insert(H.startx,V-10,H.stopx,V)}o(E,"activeEnd");let S=1,L=1,M=[],I=[],A=0;for(let F of v){let V,H,X;switch(F.type){case i.db.LINETYPE.NOTE:pt.resetVerticalPos(),H=F.noteModel,await lft(f,H,F.id);break;case i.db.LINETYPE.ACTIVE_START:pt.newActivation(F,f,d);break;case i.db.LINETYPE.CENTRAL_CONNECTION:pt.newActivation(F,f,d);break;case i.db.LINETYPE.CENTRAL_CONNECTION_REVERSE:pt.newActivation(F,f,d);break;case i.db.LINETYPE.ACTIVE_END:E(F,pt.getVerticalPos());break;case i.db.LINETYPE.LOOP_START:ch(C,F,Ve.boxMargin,Ve.boxMargin+Ve.boxTextMargin,W=>pt.newLoop(W));break;case i.db.LINETYPE.LOOP_END:V=pt.endLoop(),await Hi.drawLoop(f,V,"loop",Ve,F),pt.bumpVerticalPos(V.stopy-pt.getVerticalPos()),pt.models.addLoop(V);break;case i.db.LINETYPE.RECT_START:ch(C,F,Ve.boxMargin,Ve.boxMargin,W=>pt.newLoop(void 0,W.message));break;case i.db.LINETYPE.RECT_END:V=pt.endLoop(),I.push(V),pt.models.addLoop(V),pt.bumpVerticalPos(V.stopy-pt.getVerticalPos());break;case i.db.LINETYPE.OPT_START:ch(C,F,Ve.boxMargin,Ve.boxMargin+Ve.boxTextMargin,W=>pt.newLoop(W));break;case i.db.LINETYPE.OPT_END:V=pt.endLoop(),await Hi.drawLoop(f,V,"opt",Ve,F),pt.bumpVerticalPos(V.stopy-pt.getVerticalPos()),pt.models.addLoop(V);break;case i.db.LINETYPE.ALT_START:ch(C,F,Ve.boxMargin,Ve.boxMargin+Ve.boxTextMargin,W=>pt.newLoop(W));break;case i.db.LINETYPE.ALT_ELSE:ch(C,F,Ve.boxMargin+Ve.boxTextMargin,Ve.boxMargin,W=>pt.addSectionToLoop(W));break;case i.db.LINETYPE.ALT_END:V=pt.endLoop(),await Hi.drawLoop(f,V,"alt",Ve,F),pt.bumpVerticalPos(V.stopy-pt.getVerticalPos()),pt.models.addLoop(V);break;case i.db.LINETYPE.PAR_START:case i.db.LINETYPE.PAR_OVER_START:ch(C,F,Ve.boxMargin,Ve.boxMargin+Ve.boxTextMargin,W=>pt.newLoop(W)),pt.saveVerticalPos();break;case i.db.LINETYPE.PAR_AND:ch(C,F,Ve.boxMargin+Ve.boxTextMargin,Ve.boxMargin,W=>pt.addSectionToLoop(W));break;case i.db.LINETYPE.PAR_END:V=pt.endLoop(),await Hi.drawLoop(f,V,"par",Ve,F),pt.bumpVerticalPos(V.stopy-pt.getVerticalPos()),pt.models.addLoop(V);break;case i.db.LINETYPE.AUTONUMBER:S=F.message.start||S,L=F.message.step||L,F.message.visible?i.db.enableSequenceNumbers():i.db.disableSequenceNumbers();break;case i.db.LINETYPE.CRITICAL_START:ch(C,F,Ve.boxMargin,Ve.boxMargin+Ve.boxTextMargin,W=>pt.newLoop(W));break;case i.db.LINETYPE.CRITICAL_OPTION:ch(C,F,Ve.boxMargin+Ve.boxTextMargin,Ve.boxMargin,W=>pt.addSectionToLoop(W));break;case i.db.LINETYPE.CRITICAL_END:V=pt.endLoop(),await Hi.drawLoop(f,V,"critical",Ve,F),pt.bumpVerticalPos(V.stopy-pt.getVerticalPos()),pt.models.addLoop(V);break;case i.db.LINETYPE.BREAK_START:ch(C,F,Ve.boxMargin,Ve.boxMargin+Ve.boxTextMargin,W=>pt.newLoop(W));break;case i.db.LINETYPE.BREAK_END:V=pt.endLoop(),await Hi.drawLoop(f,V,"break",Ve,F),pt.bumpVerticalPos(V.stopy-pt.getVerticalPos()),pt.models.addLoop(V);break;default:try{X=F.msgModel,X.starty=pt.getVerticalPos(),X.sequenceIndex=S,X.sequenceVisible=i.db.showSequenceNumbers(),X.id=F.id,X.from=F.from,X.to=F.to;let W=await cft(f,X);fft(F,X,W,A,d,p,m),M.push({messageModel:X,lineStartY:W,msg:F}),pt.models.addMessage(X)}catch(W){Q.error("error while drawing message",W)}}[i.db.LINETYPE.SOLID_OPEN,i.db.LINETYPE.DOTTED_OPEN,i.db.LINETYPE.SOLID,i.db.LINETYPE.SOLID_TOP,i.db.LINETYPE.SOLID_BOTTOM,i.db.LINETYPE.STICK_TOP,i.db.LINETYPE.STICK_BOTTOM,i.db.LINETYPE.SOLID_TOP_DOTTED,i.db.LINETYPE.SOLID_BOTTOM_DOTTED,i.db.LINETYPE.STICK_TOP_DOTTED,i.db.LINETYPE.STICK_BOTTOM_DOTTED,i.db.LINETYPE.SOLID_ARROW_TOP_REVERSE,i.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE,i.db.LINETYPE.STICK_ARROW_TOP_REVERSE,i.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE,i.db.LINETYPE.SOLID_ARROW_TOP_REVERSE_DOTTED,i.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE_DOTTED,i.db.LINETYPE.STICK_ARROW_TOP_REVERSE_DOTTED,i.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE_DOTTED,i.db.LINETYPE.DOTTED,i.db.LINETYPE.SOLID_CROSS,i.db.LINETYPE.DOTTED_CROSS,i.db.LINETYPE.SOLID_POINT,i.db.LINETYPE.DOTTED_POINT,i.db.LINETYPE.BIDIRECTIONAL_SOLID,i.db.LINETYPE.BIDIRECTIONAL_DOTTED].includes(F.type)&&(S=S+L),A++}Q.debug("createdActors",p),Q.debug("destroyedActors",m),await cU(f,d,y,!1,e,i,k);for(let F of M)await uft(f,F.messageModel,F.lineStartY,i,F.msg,e);Ve.mirrorActors&&await cU(f,d,y,!0,e,i,k),I.forEach(F=>Hi.drawBackgroundRect(f,F)),sU(f,d,y,Ve);for(let F of pt.models.boxes){F.height=pt.getVerticalPos()-F.y,pt.insert(F.x,F.y,F.x+F.width,F.height);let V=Ve.boxMargin*2;F.startx=F.x-V,F.starty=F.y-V*.25,F.stopx=F.startx+F.width+2*V,F.stopy=F.starty+F.height+V*.75,F.stroke="rgb(0,0,0, 0.5)",Hi.drawBox(f,F,Ve)}b&&pt.bumpVerticalPos(Ve.boxMargin);let _=R3e(f,d,y,h),{bounds:D}=pt.getBounds();D.startx===void 0&&(D.startx=0),D.starty===void 0&&(D.starty=0),D.stopx===void 0&&(D.stopx=0),D.stopy===void 0&&(D.stopy=0);let N=D.stopy-D.starty;N<_.maxHeight&&(N=_.maxHeight);let R=N+2*Ve.diagramMarginY;Ve.mirrorActors&&(R=R-Ve.boxMargin+Ve.bottomMarginAdj);let B=D.stopx-D.startx;B<_.maxWidth&&(B=_.maxWidth);let O=B+2*Ve.diagramMarginX;x&&f.append("text").text(x).attr("x",(D.stopx-D.startx)/2-2*Ve.diagramMarginX).attr("y",-25),Hr(f,R,O,Ve.useMaxWidth);let $=x?40:0,z=d.size&&s==="neo"?30:0;f.attr("viewBox",D.startx-Ve.diagramMarginX+" -"+(Ve.diagramMarginY+$)+" "+O+" "+(R+$+z)),Q.debug("models:",pt.models)},"draw");o(pft,"getMaxMessageWidthPerActor");mft=o(function(t){let e=0,r=lU(Ve);for(let i in t.links){let a=Kt.calculateTextDimensions(i,r).width+2*Ve.wrapPadding+2*Ve.boxMargin;e2,p=o(v=>u?-v:v,"adjustValue");t.from===t.to?f=h:(t.activate&&!d&&(f+=p(Ve.activationWidth/2-1)),[r.db.LINETYPE.SOLID_OPEN,r.db.LINETYPE.DOTTED_OPEN,r.db.LINETYPE.STICK_TOP,r.db.LINETYPE.STICK_BOTTOM,r.db.LINETYPE.STICK_TOP_DOTTED,r.db.LINETYPE.STICK_BOTTOM_DOTTED,r.db.LINETYPE.SOLID_ARROW_TOP_REVERSE_DOTTED,r.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE_DOTTED,r.db.LINETYPE.STICK_ARROW_TOP_REVERSE,r.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE,r.db.LINETYPE.STICK_ARROW_TOP_REVERSE_DOTTED,r.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE_DOTTED,r.db.LINETYPE.SOLID_ARROW_TOP_REVERSE,r.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE].includes(t.type)||(f+=p(3)),[r.db.LINETYPE.BIDIRECTIONAL_SOLID,r.db.LINETYPE.BIDIRECTIONAL_DOTTED,r.db.LINETYPE.SOLID_ARROW_TOP_REVERSE_DOTTED,r.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE_DOTTED,r.db.LINETYPE.SOLID_ARROW_TOP_REVERSE,r.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE].includes(t.type)&&(h-=p(3)));let m=[n,a,s,l],g=Math.abs(h-f);t.wrap&&t.message&&(t.message=Kt.wrapLabel(t.message,lt.getMax(g+2*Ve.wrapPadding,Ve.width),ug(Ve)));let y=Kt.calculateTextDimensions(t.message,ug(Ve));return{width:lt.getMax(t.wrap?0:y.width+2*Ve.wrapPadding,g+2*Ve.wrapPadding,Ve.width),height:0,startx:h,stopx:f,starty:0,stopy:0,message:t.message,type:t.type,wrap:t.wrap,fromBounds:Math.min.apply(null,m),toBounds:Math.max.apply(null,m)}},"buildMessageModel"),Cft=o(async function(t,e,r,i){let n={},a=[],s,l,u;for(let h of t){switch(h.type){case i.db.LINETYPE.LOOP_START:case i.db.LINETYPE.ALT_START:case i.db.LINETYPE.OPT_START:case i.db.LINETYPE.PAR_START:case i.db.LINETYPE.PAR_OVER_START:case i.db.LINETYPE.CRITICAL_START:case i.db.LINETYPE.BREAK_START:a.push({id:h.id,msg:h.message,from:Number.MAX_SAFE_INTEGER,to:Number.MIN_SAFE_INTEGER,width:0});break;case i.db.LINETYPE.ALT_ELSE:case i.db.LINETYPE.PAR_AND:case i.db.LINETYPE.CRITICAL_OPTION:h.message&&(s=a.pop(),n[s.id]=s,n[h.id]=s,a.push(s));break;case i.db.LINETYPE.LOOP_END:case i.db.LINETYPE.ALT_END:case i.db.LINETYPE.OPT_END:case i.db.LINETYPE.PAR_END:case i.db.LINETYPE.CRITICAL_END:case i.db.LINETYPE.BREAK_END:s=a.pop(),n[s.id]=s;break;case i.db.LINETYPE.ACTIVE_START:{let d=e.get(h.from?h.from:h.to.actor),p=w_(h.from?h.from:h.to.actor).length,m=d.x+d.width/2+(p-1)*Ve.activationWidth/2,g={startx:m,stopx:m+Ve.activationWidth,actor:h.from,enabled:!0};pt.activations.push(g)}break;case i.db.LINETYPE.ACTIVE_END:{let d=pt.activations.map(p=>p.actor).lastIndexOf(h.from);pt.activations.splice(d,1).splice(0,1)}break}h.placement!==void 0?(l=await yft(h,e,i),h.noteModel=l,a.forEach(d=>{s=d,s.from=lt.getMin(s.from,l.startx),s.to=lt.getMax(s.to,l.startx+l.width),s.width=lt.getMax(s.width,Math.abs(s.from-s.to))-Ve.labelBoxWidth})):(u=kft(h,e,i),h.msgModel=u,u.startx&&u.stopx&&a.length>0&&a.forEach(d=>{if(s=d,u.startx===u.stopx){let p=e.get(h.from),m=e.get(h.to);s.from=lt.getMin(p.x-u.width/2,p.x-p.width/2,s.from),s.to=lt.getMax(m.x+u.width/2,m.x+p.width/2,s.to),s.width=lt.getMax(s.width,Math.abs(s.to-s.from))-Ve.labelBoxWidth}else s.from=lt.getMin(u.startx,s.from),s.to=lt.getMax(u.stopx,s.to),s.width=lt.getMax(s.width,u.width)-Ve.labelBoxWidth}))}return pt.activations=[],Q.debug("Loop type widths:",n),n},"calculateLoopBounds"),M3e={bounds:pt,drawActors:cU,drawActorsPopup:R3e,setConf:N3e,draw:dft}});var P3e={};ur(P3e,{diagram:()=>wft});var wft,B3e=P(()=>{"use strict";k3e();nU();w3e();Ut();O3e();wft={parser:T3e,get db(){return new T_},renderer:M3e,styles:C3e,init:o(t=>{t.sequence||(t.sequence={}),t.wrap&&(t.sequence.wrap=t.wrap,t2({sequence:{wrap:t.wrap}}))},"init")}});var uU,E_,hU=P(()=>{"use strict";uU=(function(){var t=o(function(Ue,qe,Me,He){for(Me=Me||{},He=Ue.length;He--;Me[Ue[He]]=qe);return Me},"o"),e=[1,18],r=[1,19],i=[1,20],n=[1,41],a=[1,26],s=[1,42],l=[1,24],u=[1,25],h=[1,32],f=[1,33],d=[1,34],p=[1,45],m=[1,35],g=[1,36],y=[1,37],v=[1,38],x=[1,27],b=[1,28],T=[1,29],w=[1,30],k=[1,31],C=[1,44],E=[1,46],S=[1,43],L=[1,47],M=[1,9],I=[1,8,9],A=[1,58],_=[1,59],D=[1,60],N=[1,61],R=[1,62],B=[1,63],O=[1,64],$=[1,8,9,41],z=[1,77],F=[1,8,9,12,13,22,39,41,44,46,68,69,70,71,72,73,74,79,81],V=[1,8,9,12,13,18,20,22,39,41,44,46,47,60,68,69,70,71,72,73,74,79,81,86,100,102,103],H=[13,60,86,100,102,103],X=[13,60,73,74,86,100,102,103],W=[13,60,68,69,70,71,72,86,100,102,103],Z=[1,102],Y=[1,120],ae=[1,116],J=[1,112],ee=[1,118],re=[1,113],te=[1,114],be=[1,115],de=[1,117],Ee=[1,119],Ne=[22,50,60,61,82,86,87,88,89,90],we=[1,8,9,39,41,44,46],Te=[1,8,9,22],De=[1,150],$e=[1,8,9,61],pe=[1,8,9,22,50,60,61,82,86,87,88,89,90],Je={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mermaidDoc:4,statements:5,graphConfig:6,CLASS_DIAGRAM:7,NEWLINE:8,EOF:9,statement:10,classLabel:11,SQS:12,STR:13,SQE:14,namespaceName:15,alphaNumToken:16,classLiteralName:17,DOT:18,className:19,GENERICTYPE:20,relationStatement:21,LABEL:22,namespaceStatement:23,classStatement:24,memberStatement:25,annotationStatement:26,clickStatement:27,styleStatement:28,cssClassStatement:29,noteStatement:30,classDefStatement:31,direction:32,acc_title:33,acc_title_value:34,acc_descr:35,acc_descr_value:36,acc_descr_multiline_value:37,namespaceIdentifier:38,STRUCT_START:39,classStatements:40,STRUCT_STOP:41,NAMESPACE:42,classIdentifier:43,STYLE_SEPARATOR:44,members:45,ANNOTATION_START:46,ANNOTATION_END:47,CLASS:48,emptyBody:49,SPACE:50,MEMBER:51,SEPARATOR:52,relation:53,NOTE_FOR:54,noteText:55,NOTE:56,CLASSDEF:57,classList:58,stylesOpt:59,ALPHA:60,COMMA:61,direction_tb:62,direction_bt:63,direction_rl:64,direction_lr:65,relationType:66,lineType:67,AGGREGATION:68,EXTENSION:69,COMPOSITION:70,DEPENDENCY:71,LOLLIPOP:72,LINE:73,DOTTED_LINE:74,CALLBACK:75,LINK:76,LINK_TARGET:77,CLICK:78,CALLBACK_NAME:79,CALLBACK_ARGS:80,HREF:81,STYLE:82,CSSCLASS:83,style:84,styleComponent:85,NUM:86,COLON:87,UNIT:88,BRKT:89,PCT:90,commentToken:91,textToken:92,graphCodeTokens:93,textNoTagsToken:94,TAGSTART:95,TAGEND:96,"==":97,"--":98,DEFAULT:99,MINUS:100,keywords:101,UNICODE_TEXT:102,BQUOTE_STR:103,$accept:0,$end:1},terminals_:{2:"error",7:"CLASS_DIAGRAM",8:"NEWLINE",9:"EOF",12:"SQS",13:"STR",14:"SQE",18:"DOT",20:"GENERICTYPE",22:"LABEL",33:"acc_title",34:"acc_title_value",35:"acc_descr",36:"acc_descr_value",37:"acc_descr_multiline_value",39:"STRUCT_START",41:"STRUCT_STOP",42:"NAMESPACE",44:"STYLE_SEPARATOR",46:"ANNOTATION_START",47:"ANNOTATION_END",48:"CLASS",50:"SPACE",51:"MEMBER",52:"SEPARATOR",54:"NOTE_FOR",56:"NOTE",57:"CLASSDEF",60:"ALPHA",61:"COMMA",62:"direction_tb",63:"direction_bt",64:"direction_rl",65:"direction_lr",68:"AGGREGATION",69:"EXTENSION",70:"COMPOSITION",71:"DEPENDENCY",72:"LOLLIPOP",73:"LINE",74:"DOTTED_LINE",75:"CALLBACK",76:"LINK",77:"LINK_TARGET",78:"CLICK",79:"CALLBACK_NAME",80:"CALLBACK_ARGS",81:"HREF",82:"STYLE",83:"CSSCLASS",86:"NUM",87:"COLON",88:"UNIT",89:"BRKT",90:"PCT",93:"graphCodeTokens",95:"TAGSTART",96:"TAGEND",97:"==",98:"--",99:"DEFAULT",100:"MINUS",101:"keywords",102:"UNICODE_TEXT",103:"BQUOTE_STR"},productions_:[0,[3,1],[3,1],[4,1],[6,4],[5,1],[5,2],[5,3],[11,3],[15,1],[15,1],[15,3],[15,2],[19,1],[19,3],[19,1],[19,2],[19,2],[19,2],[10,1],[10,2],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,2],[10,1],[23,4],[23,5],[38,2],[40,1],[40,2],[40,3],[40,1],[40,2],[40,3],[24,1],[24,3],[24,4],[24,3],[24,6],[24,4],[24,7],[24,6],[43,2],[43,3],[49,0],[49,2],[49,2],[26,4],[45,1],[45,2],[25,1],[25,2],[25,1],[25,1],[21,3],[21,4],[21,4],[21,5],[30,3],[30,2],[31,3],[58,1],[58,3],[32,1],[32,1],[32,1],[32,1],[53,3],[53,2],[53,2],[53,1],[66,1],[66,1],[66,1],[66,1],[66,1],[67,1],[67,1],[27,3],[27,4],[27,3],[27,4],[27,4],[27,5],[27,3],[27,4],[27,4],[27,5],[27,4],[27,5],[27,5],[27,6],[28,3],[29,3],[59,1],[59,3],[84,1],[84,2],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[91,1],[91,1],[92,1],[92,1],[92,1],[92,1],[92,1],[92,1],[92,1],[94,1],[94,1],[94,1],[94,1],[16,1],[16,1],[16,1],[16,1],[17,1],[55,1]],performAction:o(function(qe,Me,He,K,oe,U,ue){var G=U.length-1;switch(oe){case 8:this.$=U[G-1];break;case 9:case 10:case 13:case 15:this.$=U[G];break;case 11:case 14:this.$=U[G-2]+"."+U[G];break;case 12:case 16:this.$=U[G-1]+U[G];break;case 17:case 18:this.$=U[G-1]+"~"+U[G]+"~";break;case 19:K.addRelation(U[G]);break;case 20:U[G-1].title=K.cleanupLabel(U[G]),K.addRelation(U[G-1]);break;case 31:this.$=U[G].trim(),K.setAccTitle(this.$);break;case 32:case 33:this.$=U[G].trim(),K.setAccDescription(this.$);break;case 34:K.addClassesToNamespace(U[G-3],U[G-1][0],U[G-1][1]);break;case 35:K.addClassesToNamespace(U[G-4],U[G-1][0],U[G-1][1]);break;case 36:this.$=U[G],K.addNamespace(U[G]);break;case 37:this.$=[[U[G]],[]];break;case 38:this.$=[[U[G-1]],[]];break;case 39:U[G][0].unshift(U[G-2]),this.$=U[G];break;case 40:this.$=[[],[U[G]]];break;case 41:this.$=[[],[U[G-1]]];break;case 42:U[G][1].unshift(U[G-2]),this.$=U[G];break;case 44:K.setCssClass(U[G-2],U[G]);break;case 45:K.addMembers(U[G-3],U[G-1]);break;case 47:K.setCssClass(U[G-5],U[G-3]),K.addMembers(U[G-5],U[G-1]);break;case 48:K.addAnnotation(U[G-3],U[G-1]);break;case 49:K.addAnnotation(U[G-6],U[G-4]),K.addMembers(U[G-6],U[G-1]);break;case 50:K.addAnnotation(U[G-5],U[G-3]);break;case 51:this.$=U[G],K.addClass(U[G]);break;case 52:this.$=U[G-1],K.addClass(U[G-1]),K.setClassLabel(U[G-1],U[G]);break;case 56:K.addAnnotation(U[G],U[G-2]);break;case 57:case 70:this.$=[U[G]];break;case 58:U[G].push(U[G-1]),this.$=U[G];break;case 59:break;case 60:K.addMember(U[G-1],K.cleanupLabel(U[G]));break;case 61:break;case 62:break;case 63:this.$={id1:U[G-2],id2:U[G],relation:U[G-1],relationTitle1:"none",relationTitle2:"none"};break;case 64:this.$={id1:U[G-3],id2:U[G],relation:U[G-1],relationTitle1:U[G-2],relationTitle2:"none"};break;case 65:this.$={id1:U[G-3],id2:U[G],relation:U[G-2],relationTitle1:"none",relationTitle2:U[G-1]};break;case 66:this.$={id1:U[G-4],id2:U[G],relation:U[G-2],relationTitle1:U[G-3],relationTitle2:U[G-1]};break;case 67:this.$=K.addNote(U[G],U[G-1]);break;case 68:this.$=K.addNote(U[G]);break;case 69:this.$=U[G-2],K.defineClass(U[G-1],U[G]);break;case 71:this.$=U[G-2].concat([U[G]]);break;case 72:K.setDirection("TB");break;case 73:K.setDirection("BT");break;case 74:K.setDirection("RL");break;case 75:K.setDirection("LR");break;case 76:this.$={type1:U[G-2],type2:U[G],lineType:U[G-1]};break;case 77:this.$={type1:"none",type2:U[G],lineType:U[G-1]};break;case 78:this.$={type1:U[G-1],type2:"none",lineType:U[G]};break;case 79:this.$={type1:"none",type2:"none",lineType:U[G]};break;case 80:this.$=K.relationType.AGGREGATION;break;case 81:this.$=K.relationType.EXTENSION;break;case 82:this.$=K.relationType.COMPOSITION;break;case 83:this.$=K.relationType.DEPENDENCY;break;case 84:this.$=K.relationType.LOLLIPOP;break;case 85:this.$=K.lineType.LINE;break;case 86:this.$=K.lineType.DOTTED_LINE;break;case 87:case 93:this.$=U[G-2],K.setClickEvent(U[G-1],U[G]);break;case 88:case 94:this.$=U[G-3],K.setClickEvent(U[G-2],U[G-1]),K.setTooltip(U[G-2],U[G]);break;case 89:this.$=U[G-2],K.setLink(U[G-1],U[G]);break;case 90:this.$=U[G-3],K.setLink(U[G-2],U[G-1],U[G]);break;case 91:this.$=U[G-3],K.setLink(U[G-2],U[G-1]),K.setTooltip(U[G-2],U[G]);break;case 92:this.$=U[G-4],K.setLink(U[G-3],U[G-2],U[G]),K.setTooltip(U[G-3],U[G-1]);break;case 95:this.$=U[G-3],K.setClickEvent(U[G-2],U[G-1],U[G]);break;case 96:this.$=U[G-4],K.setClickEvent(U[G-3],U[G-2],U[G-1]),K.setTooltip(U[G-3],U[G]);break;case 97:this.$=U[G-3],K.setLink(U[G-2],U[G]);break;case 98:this.$=U[G-4],K.setLink(U[G-3],U[G-1],U[G]);break;case 99:this.$=U[G-4],K.setLink(U[G-3],U[G-1]),K.setTooltip(U[G-3],U[G]);break;case 100:this.$=U[G-5],K.setLink(U[G-4],U[G-2],U[G]),K.setTooltip(U[G-4],U[G-1]);break;case 101:this.$=U[G-2],K.setCssStyle(U[G-1],U[G]);break;case 102:K.setCssClass(U[G-1],U[G]);break;case 103:this.$=[U[G]];break;case 104:U[G-2].push(U[G]),this.$=U[G-2];break;case 106:this.$=U[G-1]+U[G];break}},"anonymous"),table:[{3:1,4:2,5:3,6:4,7:[1,6],10:5,16:39,17:40,19:21,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,33:e,35:r,37:i,38:22,42:n,43:23,46:a,48:s,51:l,52:u,54:h,56:f,57:d,60:p,62:m,63:g,64:y,65:v,75:x,76:b,78:T,82:w,83:k,86:C,100:E,102:S,103:L},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,3]},t(M,[2,5],{8:[1,48]}),{8:[1,49]},t(I,[2,19],{22:[1,50]}),t(I,[2,21]),t(I,[2,22]),t(I,[2,23]),t(I,[2,24]),t(I,[2,25]),t(I,[2,26]),t(I,[2,27]),t(I,[2,28]),t(I,[2,29]),t(I,[2,30]),{34:[1,51]},{36:[1,52]},t(I,[2,33]),t(I,[2,59],{53:53,66:56,67:57,13:[1,54],22:[1,55],68:A,69:_,70:D,71:N,72:R,73:B,74:O}),{39:[1,65]},t($,[2,43],{39:[1,67],44:[1,66],46:[1,68]}),t(I,[2,61]),t(I,[2,62]),{16:69,60:p,86:C,100:E,102:S},{16:39,17:40,19:70,60:p,86:C,100:E,102:S,103:L},{16:39,17:40,19:71,60:p,86:C,100:E,102:S,103:L},{16:39,17:40,19:72,60:p,86:C,100:E,102:S,103:L},{60:[1,73]},{13:[1,74]},{16:39,17:40,19:75,60:p,86:C,100:E,102:S,103:L},{13:z,55:76},{58:78,60:[1,79]},t(I,[2,72]),t(I,[2,73]),t(I,[2,74]),t(I,[2,75]),t(F,[2,13],{16:39,17:40,19:81,18:[1,80],20:[1,82],60:p,86:C,100:E,102:S,103:L}),t(F,[2,15],{20:[1,83]}),{15:84,16:85,17:86,60:p,86:C,100:E,102:S,103:L},{16:39,17:40,19:87,60:p,86:C,100:E,102:S,103:L},t(V,[2,129]),t(V,[2,130]),t(V,[2,131]),t(V,[2,132]),t([1,8,9,12,13,20,22,39,41,44,46,68,69,70,71,72,73,74,79,81],[2,133]),t(M,[2,6],{10:5,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,19:21,38:22,43:23,16:39,17:40,5:88,33:e,35:r,37:i,42:n,46:a,48:s,51:l,52:u,54:h,56:f,57:d,60:p,62:m,63:g,64:y,65:v,75:x,76:b,78:T,82:w,83:k,86:C,100:E,102:S,103:L}),{5:89,10:5,16:39,17:40,19:21,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,33:e,35:r,37:i,38:22,42:n,43:23,46:a,48:s,51:l,52:u,54:h,56:f,57:d,60:p,62:m,63:g,64:y,65:v,75:x,76:b,78:T,82:w,83:k,86:C,100:E,102:S,103:L},t(I,[2,20]),t(I,[2,31]),t(I,[2,32]),{13:[1,91],16:39,17:40,19:90,60:p,86:C,100:E,102:S,103:L},{53:92,66:56,67:57,68:A,69:_,70:D,71:N,72:R,73:B,74:O},t(I,[2,60]),{67:93,73:B,74:O},t(H,[2,79],{66:94,68:A,69:_,70:D,71:N,72:R}),t(X,[2,80]),t(X,[2,81]),t(X,[2,82]),t(X,[2,83]),t(X,[2,84]),t(W,[2,85]),t(W,[2,86]),{8:[1,96],24:97,30:98,40:95,43:23,48:s,54:h,56:f},{16:99,60:p,86:C,100:E,102:S},{41:[1,101],45:100,51:Z},{16:103,60:p,86:C,100:E,102:S},{47:[1,104]},{13:[1,105]},{13:[1,106]},{79:[1,107],81:[1,108]},{22:Y,50:ae,59:109,60:J,82:ee,84:110,85:111,86:re,87:te,88:be,89:de,90:Ee},{60:[1,121]},{13:z,55:122},t($,[2,68]),t($,[2,134]),{22:Y,50:ae,59:123,60:J,61:[1,124],82:ee,84:110,85:111,86:re,87:te,88:be,89:de,90:Ee},t(Ne,[2,70]),{16:39,17:40,19:125,60:p,86:C,100:E,102:S,103:L},t(F,[2,16]),t(F,[2,17]),t(F,[2,18]),{39:[2,36]},{15:127,16:85,17:86,18:[1,126],39:[2,9],60:p,86:C,100:E,102:S,103:L},{39:[2,10]},t(we,[2,51],{11:128,12:[1,129]}),t(M,[2,7]),{9:[1,130]},t(Te,[2,63]),{16:39,17:40,19:131,60:p,86:C,100:E,102:S,103:L},{13:[1,133],16:39,17:40,19:132,60:p,86:C,100:E,102:S,103:L},t(H,[2,78],{66:134,68:A,69:_,70:D,71:N,72:R}),t(H,[2,77]),{41:[1,135]},{24:97,30:98,40:136,43:23,48:s,54:h,56:f},{8:[1,137],41:[2,37]},{8:[1,138],41:[2,40]},t($,[2,44],{39:[1,139]}),{41:[1,140]},t($,[2,46]),{41:[2,57],45:141,51:Z},{47:[1,142]},{16:39,17:40,19:143,60:p,86:C,100:E,102:S,103:L},t(I,[2,87],{13:[1,144]}),t(I,[2,89],{13:[1,146],77:[1,145]}),t(I,[2,93],{13:[1,147],80:[1,148]}),{13:[1,149]},t(I,[2,101],{61:De}),t($e,[2,103],{85:151,22:Y,50:ae,60:J,82:ee,86:re,87:te,88:be,89:de,90:Ee}),t(pe,[2,105]),t(pe,[2,107]),t(pe,[2,108]),t(pe,[2,109]),t(pe,[2,110]),t(pe,[2,111]),t(pe,[2,112]),t(pe,[2,113]),t(pe,[2,114]),t(pe,[2,115]),t(I,[2,102]),t($,[2,67]),t(I,[2,69],{61:De}),{60:[1,152]},t(F,[2,14]),{15:153,16:85,17:86,60:p,86:C,100:E,102:S,103:L},{39:[2,12]},t(we,[2,52]),{13:[1,154]},{1:[2,4]},t(Te,[2,65]),t(Te,[2,64]),{16:39,17:40,19:155,60:p,86:C,100:E,102:S,103:L},t(H,[2,76]),t(I,[2,34]),{41:[1,156]},{24:97,30:98,40:157,41:[2,38],43:23,48:s,54:h,56:f},{24:97,30:98,40:158,41:[2,41],43:23,48:s,54:h,56:f},{45:159,51:Z},t($,[2,45]),{41:[2,58]},t($,[2,48],{39:[1,160]}),t(I,[2,56]),t(I,[2,88]),t(I,[2,90]),t(I,[2,91],{77:[1,161]}),t(I,[2,94]),t(I,[2,95],{13:[1,162]}),t(I,[2,97],{13:[1,164],77:[1,163]}),{22:Y,50:ae,60:J,82:ee,84:165,85:111,86:re,87:te,88:be,89:de,90:Ee},t(pe,[2,106]),t(Ne,[2,71]),{39:[2,11]},{14:[1,166]},t(Te,[2,66]),t(I,[2,35]),{41:[2,39]},{41:[2,42]},{41:[1,167]},{41:[1,169],45:168,51:Z},t(I,[2,92]),t(I,[2,96]),t(I,[2,98]),t(I,[2,99],{77:[1,170]}),t($e,[2,104],{85:151,22:Y,50:ae,60:J,82:ee,86:re,87:te,88:be,89:de,90:Ee}),t(we,[2,8]),t($,[2,47]),{41:[1,171]},t($,[2,50]),t(I,[2,100]),t($,[2,49])],defaultActions:{2:[2,1],3:[2,2],4:[2,3],84:[2,36],86:[2,10],127:[2,12],130:[2,4],141:[2,58],153:[2,11],157:[2,39],158:[2,42]},parseError:o(function(qe,Me){if(Me.recoverable)this.trace(qe);else{var He=new Error(qe);throw He.hash=Me,He}},"parseError"),parse:o(function(qe){var Me=this,He=[0],K=[],oe=[null],U=[],ue=this.table,G="",se=0,le=0,ke=0,me=2,ye=1,Re=U.slice.call(arguments,1),ve=Object.create(this.lexer),Oe={yy:{}};for(var We in this.yy)Object.prototype.hasOwnProperty.call(this.yy,We)&&(Oe.yy[We]=this.yy[We]);ve.setInput(qe,Oe.yy),Oe.yy.lexer=ve,Oe.yy.parser=this,typeof ve.yylloc>"u"&&(ve.yylloc={});var Be=ve.yylloc;U.push(Be);var Qe=ve.options&&ve.options.ranges;typeof Oe.yy.parseError=="function"?this.parseError=Oe.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ce(hr){He.length=He.length-2*hr,oe.length=oe.length-hr,U.length=U.length-hr}o(ce,"popStack");function it(){var hr;return hr=K.pop()||ve.lex()||ye,typeof hr!="number"&&(hr instanceof Array&&(K=hr,hr=K.pop()),hr=Me.symbols_[hr]||hr),hr}o(it,"lex");for(var fe,ut,Nt,Pt,St,It,ot={},ct,Dt,kt,yt;;){if(Nt=He[He.length-1],this.defaultActions[Nt]?Pt=this.defaultActions[Nt]:((fe===null||typeof fe>"u")&&(fe=it()),Pt=ue[Nt]&&ue[Nt][fe]),typeof Pt>"u"||!Pt.length||!Pt[0]){var jt="";yt=[];for(ct in ue[Nt])this.terminals_[ct]&&ct>me&&yt.push("'"+this.terminals_[ct]+"'");ve.showPosition?jt="Parse error on line "+(se+1)+`: +`+ve.showPosition()+` +Expecting `+yt.join(", ")+", got '"+(this.terminals_[fe]||fe)+"'":jt="Parse error on line "+(se+1)+": Unexpected "+(fe==ye?"end of input":"'"+(this.terminals_[fe]||fe)+"'"),this.parseError(jt,{text:ve.match,token:this.terminals_[fe]||fe,line:ve.yylineno,loc:Be,expected:yt})}if(Pt[0]instanceof Array&&Pt.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Nt+", token: "+fe);switch(Pt[0]){case 1:He.push(fe),oe.push(ve.yytext),U.push(ve.yylloc),He.push(Pt[1]),fe=null,ut?(fe=ut,ut=null):(le=ve.yyleng,G=ve.yytext,se=ve.yylineno,Be=ve.yylloc,ke>0&&ke--);break;case 2:if(Dt=this.productions_[Pt[1]][1],ot.$=oe[oe.length-Dt],ot._$={first_line:U[U.length-(Dt||1)].first_line,last_line:U[U.length-1].last_line,first_column:U[U.length-(Dt||1)].first_column,last_column:U[U.length-1].last_column},Qe&&(ot._$.range=[U[U.length-(Dt||1)].range[0],U[U.length-1].range[1]]),It=this.performAction.apply(ot,[G,le,se,Oe.yy,Pt[1],oe,U].concat(Re)),typeof It<"u")return It;Dt&&(He=He.slice(0,-1*Dt*2),oe=oe.slice(0,-1*Dt),U=U.slice(0,-1*Dt)),He.push(this.productions_[Pt[1]][0]),oe.push(ot.$),U.push(ot._$),kt=ue[He[He.length-2]][He[He.length-1]],He.push(kt);break;case 3:return!0}}return!0},"parse")},Ce=(function(){var Ue={EOF:1,parseError:o(function(Me,He){if(this.yy.parser)this.yy.parser.parseError(Me,He);else throw new Error(Me)},"parseError"),setInput:o(function(qe,Me){return this.yy=Me||this.yy||{},this._input=qe,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var qe=this._input[0];this.yytext+=qe,this.yyleng++,this.offset++,this.match+=qe,this.matched+=qe;var Me=qe.match(/(?:\r\n?|\n).*/g);return Me?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),qe},"input"),unput:o(function(qe){var Me=qe.length,He=qe.split(/(?:\r\n?|\n)/g);this._input=qe+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Me),this.offset-=Me;var K=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),He.length-1&&(this.yylineno-=He.length-1);var oe=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:He?(He.length===K.length?this.yylloc.first_column:0)+K[K.length-He.length].length-He[0].length:this.yylloc.first_column-Me},this.options.ranges&&(this.yylloc.range=[oe[0],oe[0]+this.yyleng-Me]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(qe){this.unput(this.match.slice(qe))},"less"),pastInput:o(function(){var qe=this.matched.substr(0,this.matched.length-this.match.length);return(qe.length>20?"...":"")+qe.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var qe=this.match;return qe.length<20&&(qe+=this._input.substr(0,20-qe.length)),(qe.substr(0,20)+(qe.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var qe=this.pastInput(),Me=new Array(qe.length+1).join("-");return qe+this.upcomingInput()+` +`+Me+"^"},"showPosition"),test_match:o(function(qe,Me){var He,K,oe;if(this.options.backtrack_lexer&&(oe={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(oe.yylloc.range=this.yylloc.range.slice(0))),K=qe[0].match(/(?:\r\n?|\n).*/g),K&&(this.yylineno+=K.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:K?K[K.length-1].length-K[K.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+qe[0].length},this.yytext+=qe[0],this.match+=qe[0],this.matches=qe,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(qe[0].length),this.matched+=qe[0],He=this.performAction.call(this,this.yy,this,Me,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),He)return He;if(this._backtrack){for(var U in oe)this[U]=oe[U];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var qe,Me,He,K;this._more||(this.yytext="",this.match="");for(var oe=this._currentRules(),U=0;UMe[0].length)){if(Me=He,K=U,this.options.backtrack_lexer){if(qe=this.test_match(He,oe[U]),qe!==!1)return qe;if(this._backtrack){Me=!1;continue}else return!1}else if(!this.options.flex)break}return Me?(qe=this.test_match(Me,oe[K]),qe!==!1?qe:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var Me=this.next();return Me||this.lex()},"lex"),begin:o(function(Me){this.conditionStack.push(Me)},"begin"),popState:o(function(){var Me=this.conditionStack.length-1;return Me>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(Me){return Me=this.conditionStack.length-1-Math.abs(Me||0),Me>=0?this.conditionStack[Me]:"INITIAL"},"topState"),pushState:o(function(Me){this.begin(Me)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(Me,He,K,oe){var U=oe;switch(K){case 0:return 62;case 1:return 63;case 2:return 64;case 3:return 65;case 4:break;case 5:break;case 6:return this.begin("acc_title"),33;break;case 7:return this.popState(),"acc_title_value";break;case 8:return this.begin("acc_descr"),35;break;case 9:return this.popState(),"acc_descr_value";break;case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 8;case 14:break;case 15:return 7;case 16:return 7;case 17:return"EDGE_STATE";case 18:this.begin("callback_name");break;case 19:this.popState();break;case 20:this.popState(),this.begin("callback_args");break;case 21:return 79;case 22:this.popState();break;case 23:return 80;case 24:this.popState();break;case 25:return"STR";case 26:this.begin("string");break;case 27:return 82;case 28:return 57;case 29:return this.begin("namespace"),42;break;case 30:return this.popState(),8;break;case 31:break;case 32:return this.begin("namespace-body"),39;break;case 33:return this.popState(),41;break;case 34:return"EOF_IN_STRUCT";case 35:return 8;case 36:break;case 37:return"EDGE_STATE";case 38:return this.begin("class"),48;break;case 39:return this.popState(),8;break;case 40:break;case 41:return this.popState(),this.popState(),41;break;case 42:return this.begin("class-body"),39;break;case 43:return this.popState(),41;break;case 44:return"EOF_IN_STRUCT";case 45:return"EDGE_STATE";case 46:return"OPEN_IN_STRUCT";case 47:break;case 48:return"MEMBER";case 49:return 83;case 50:return 75;case 51:return 76;case 52:return 78;case 53:return 54;case 54:return 56;case 55:return 46;case 56:return 47;case 57:return 81;case 58:this.popState();break;case 59:return"GENERICTYPE";case 60:this.begin("generic");break;case 61:this.popState();break;case 62:return"BQUOTE_STR";case 63:this.begin("bqstring");break;case 64:return 77;case 65:return 77;case 66:return 77;case 67:return 77;case 68:return 69;case 69:return 69;case 70:return 71;case 71:return 71;case 72:return 70;case 73:return 68;case 74:return 72;case 75:return 73;case 76:return 74;case 77:return 22;case 78:return 44;case 79:return 100;case 80:return 18;case 81:return"PLUS";case 82:return 87;case 83:return 61;case 84:return 89;case 85:return 89;case 86:return 90;case 87:return"EQUALS";case 88:return"EQUALS";case 89:return 60;case 90:return 12;case 91:return 14;case 92:return"PUNCTUATION";case 93:return 86;case 94:return 102;case 95:return 50;case 96:return 50;case 97:return 9}},"anonymous"),rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:classDiagram-v2\b)/,/^(?:classDiagram\b)/,/^(?:\[\*\])/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:["])/,/^(?:[^"]*)/,/^(?:["])/,/^(?:style\b)/,/^(?:classDef\b)/,/^(?:namespace\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:\[\*\])/,/^(?:class\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[}])/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\[\*\])/,/^(?:[{])/,/^(?:[\n])/,/^(?:[^{}\n]*)/,/^(?:cssClass\b)/,/^(?:callback\b)/,/^(?:link\b)/,/^(?:click\b)/,/^(?:note for\b)/,/^(?:note\b)/,/^(?:<<)/,/^(?:>>)/,/^(?:href\b)/,/^(?:[~])/,/^(?:[^~]*)/,/^(?:~)/,/^(?:[`])/,/^(?:[^`]+)/,/^(?:[`])/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:\s*<\|)/,/^(?:\s*\|>)/,/^(?:\s*>)/,/^(?:\s*<)/,/^(?:\s*\*)/,/^(?:\s*o\b)/,/^(?:\s*\(\))/,/^(?:--)/,/^(?:\.\.)/,/^(?::{1}[^:\n;]+)/,/^(?::{3})/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?::)/,/^(?:,)/,/^(?:#)/,/^(?:#)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:\w+)/,/^(?:\[)/,/^(?:\])/,/^(?:[!"#$%&'*+,-.`?\\/])/,/^(?:[0-9]+)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\s)/,/^(?:\s)/,/^(?:$)/],conditions:{"namespace-body":{rules:[26,33,34,35,36,37,38,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},namespace:{rules:[26,29,30,31,32,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},"class-body":{rules:[26,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},class:{rules:[26,39,40,41,42,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},acc_descr_multiline:{rules:[11,12,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},acc_descr:{rules:[9,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},acc_title:{rules:[7,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},callback_args:{rules:[22,23,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},callback_name:{rules:[19,20,21,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},href:{rules:[26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},struct:{rules:[26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},generic:{rules:[26,49,50,51,52,53,54,55,56,57,58,59,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},bqstring:{rules:[26,49,50,51,52,53,54,55,56,57,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},string:{rules:[24,25,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,26,27,28,29,38,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97],inclusive:!0}}};return Ue})();Je.lexer=Ce;function Fe(){this.yy={}}return o(Fe,"Parser"),Fe.prototype=Je,Je.Parser=Fe,new Fe})();uU.parser=uU;E_=uU});var z3e,OC,G3e=P(()=>{"use strict";Ut();Vr();z3e=["#","+","~","-",""],OC=class{static{o(this,"ClassMember")}constructor(e,r){this.memberType=r,this.visibility="",this.classifier="",this.text="";let i=Tr(e,ge());this.parseMember(i)}getDisplayDetails(){let e=this.visibility+ou(this.id);this.memberType==="method"&&(e+=`(${ou(this.parameters.trim())})`,this.returnType&&(e+=" : "+ou(this.returnType))),e=e.trim();let r=this.parseClassifier();return{displayText:e,cssStyle:r}}parseMember(e){let r="";if(this.memberType==="method"){let a=/([#+~-])?(.+)\((.*)\)([\s$*])?(.*)([$*])?/.exec(e);if(a){let s=a[1]?a[1].trim():"";if(z3e.includes(s)&&(this.visibility=s),this.id=a[2],this.parameters=a[3]?a[3].trim():"",r=a[4]?a[4].trim():"",this.returnType=a[5]?a[5].trim():"",r===""){let l=this.returnType.substring(this.returnType.length-1);/[$*]/.exec(l)&&(r=l,this.returnType=this.returnType.substring(0,this.returnType.length-1))}}}else{let n=e.length,a=e.substring(0,1),s=e.substring(n-1);z3e.includes(a)&&(this.visibility=a),/[$*]/.exec(s)&&(r=s),this.id=e.substring(this.visibility===""?0:1,r===""?n:n-1)}this.classifier=r,this.id=this.id.startsWith(" ")?" "+this.id.trim():this.id.trim();let i=`${this.visibility?"\\"+this.visibility:""}${ou(this.id)}${this.memberType==="method"?`(${ou(this.parameters)})${this.returnType?" : "+ou(this.returnType):""}`:""}`;this.text=i.replaceAll("<","<").replaceAll(">",">"),this.text.startsWith("\\<")&&(this.text=this.text.replace("\\<","~"))}parseClassifier(){switch(this.classifier){case"*":return"font-style:italic;";case"$":return"text-decoration:underline;";default:return""}}}});var S_,V3e,hg,tx,fU=P(()=>{"use strict";Pr();bt();Ut();Vr();er();Ki();y0();G3e();zx();S_="classId-",V3e=0,hg=o(t=>lt.sanitizeText(t,ge()),"sanitizeText"),tx=class{constructor(){this.relations=[];this.classes=new Map;this.styleClasses=new Map;this.notes=new Map;this.interfaces=[];this.namespaces=new Map;this.namespaceCounter=0;this.diagramId="";this.functions=[];this.lineType={LINE:0,DOTTED_LINE:1};this.relationType={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3,LOLLIPOP:4};this.setupToolTips=o(e=>{let r=E3();Ze(e).select("svg").selectAll("g").filter(function(){return Ze(this).attr("title")!==null}).on("mouseover",a=>{let s=Ze(a.currentTarget),l=s.attr("title");if(!l)return;let u=a.currentTarget.getBoundingClientRect();r.transition().duration(200).style("opacity",".9"),r.html(Tl.sanitize(l)).style("left",`${window.scrollX+u.left+u.width/2}px`).style("top",`${window.scrollY+u.bottom+4}px`),s.classed("hover",!0)}).on("mouseout",a=>{r.transition().duration(500).style("opacity",0),Ze(a.currentTarget).classed("hover",!1)})},"setupToolTips");this.direction="TB";this.setAccTitle=Ar;this.getAccTitle=Dr;this.setAccDescription=Lr;this.getAccDescription=Rr;this.setDiagramTitle=Mr;this.getDiagramTitle=Nr;this.getConfig=o(()=>ge().class,"getConfig");this.functions.push(this.setupToolTips.bind(this)),this.clear(),this.addRelation=this.addRelation.bind(this),this.addClassesToNamespace=this.addClassesToNamespace.bind(this),this.addNamespace=this.addNamespace.bind(this),this.setCssClass=this.setCssClass.bind(this),this.addMembers=this.addMembers.bind(this),this.addClass=this.addClass.bind(this),this.setClassLabel=this.setClassLabel.bind(this),this.addAnnotation=this.addAnnotation.bind(this),this.addMember=this.addMember.bind(this),this.cleanupLabel=this.cleanupLabel.bind(this),this.addNote=this.addNote.bind(this),this.defineClass=this.defineClass.bind(this),this.setDirection=this.setDirection.bind(this),this.setLink=this.setLink.bind(this),this.bindFunctions=this.bindFunctions.bind(this),this.clear=this.clear.bind(this),this.setTooltip=this.setTooltip.bind(this),this.setClickEvent=this.setClickEvent.bind(this),this.setCssStyle=this.setCssStyle.bind(this)}static{o(this,"ClassDB")}splitClassNameAndType(e){let r=lt.sanitizeText(e,ge()),i="",n=r;if(r.indexOf("~")>0){let a=r.split("~");n=hg(a[0]),i=hg(a[1])}return{className:n,type:i}}setClassLabel(e,r){let i=lt.sanitizeText(e,ge());r&&(r=hg(r));let{className:n}=this.splitClassNameAndType(i);this.classes.get(n).label=r,this.classes.get(n).text=`${r}${this.classes.get(n).type?`<${this.classes.get(n).type}>`:""}`}addClass(e){let r=lt.sanitizeText(e,ge()),{className:i,type:n}=this.splitClassNameAndType(r);if(this.classes.has(i))return;let a=lt.sanitizeText(i,ge());this.classes.set(a,{id:a,type:n,label:a,text:`${a}${n?`<${n}>`:""}`,shape:"classBox",cssClasses:"default",methods:[],members:[],annotations:[],styles:[],domId:S_+a+"-"+V3e}),V3e++}addInterface(e,r){let i={id:`interface${this.interfaces.length}`,label:e,classId:r};this.interfaces.push(i)}setDiagramId(e){this.diagramId=e}lookUpDomId(e){let r=lt.sanitizeText(e,ge());if(this.classes.has(r)){let i=this.classes.get(r).domId;return this.diagramId?`${this.diagramId}-${i}`:i}throw new Error("Class not found: "+r)}clear(){this.relations=[],this.classes=new Map,this.notes=new Map,this.interfaces=[],this.functions=[],this.functions.push(this.setupToolTips.bind(this)),this.namespaces=new Map,this.namespaceCounter=0,this.diagramId="",this.direction="TB",wr()}getClass(e){return this.classes.get(e)}getClasses(){return this.classes}getRelations(){return this.relations}getNote(e){let r=typeof e=="number"?`note${e}`:e;return this.notes.get(r)}getNotes(){return this.notes}addRelation(e){Q.debug("Adding relation: "+JSON.stringify(e));let r=[this.relationType.LOLLIPOP,this.relationType.AGGREGATION,this.relationType.COMPOSITION,this.relationType.DEPENDENCY,this.relationType.EXTENSION];e.relation.type1===this.relationType.LOLLIPOP&&!r.includes(e.relation.type2)?(this.addClass(e.id2),this.addInterface(e.id1,e.id2),e.id1=`interface${this.interfaces.length-1}`):e.relation.type2===this.relationType.LOLLIPOP&&!r.includes(e.relation.type1)?(this.addClass(e.id1),this.addInterface(e.id2,e.id1),e.id2=`interface${this.interfaces.length-1}`):(this.addClass(e.id1),this.addClass(e.id2)),e.id1=this.splitClassNameAndType(e.id1).className,e.id2=this.splitClassNameAndType(e.id2).className,e.relationTitle1=lt.sanitizeText(e.relationTitle1.trim(),ge()),e.relationTitle2=lt.sanitizeText(e.relationTitle2.trim(),ge()),this.relations.push(e)}addAnnotation(e,r){let i=this.splitClassNameAndType(e).className;this.classes.get(i).annotations.push(r)}addMember(e,r){this.addClass(e);let i=this.splitClassNameAndType(e).className,n=this.classes.get(i);if(typeof r=="string"){let a=r.trim();a.startsWith("<<")&&a.endsWith(">>")?n.annotations.push(hg(a.substring(2,a.length-2))):a.indexOf(")")>0?n.methods.push(new OC(a,"method")):a&&n.members.push(new OC(a,"attribute"))}}addMembers(e,r){Array.isArray(r)&&(r.reverse(),r.forEach(i=>this.addMember(e,i)))}addNote(e,r){let i=this.notes.size,n={id:`note${i}`,class:r,text:e,index:i};return this.notes.set(n.id,n),n.id}cleanupLabel(e){return e.startsWith(":")&&(e=e.substring(1)),hg(e.trim())}setCssClass(e,r){e.split(",").forEach(i=>{let n=i;/\d/.exec(i[0])&&(n=S_+n);let a=this.classes.get(n);a&&(a.cssClasses+=" "+r)})}defineClass(e,r){for(let i of e){let n=this.styleClasses.get(i);n===void 0&&(n={id:i,styles:[],textStyles:[]},this.styleClasses.set(i,n)),r&&r.forEach(a=>{if(/color/.exec(a)){let s=a.replace("fill","bgFill");n.textStyles.push(s)}n.styles.push(a)}),this.classes.forEach(a=>{a.cssClasses.includes(i)&&a.styles.push(...r.flatMap(s=>s.split(",")))})}}setTooltip(e,r){e.split(",").forEach(i=>{r!==void 0&&(this.classes.get(i).tooltip=hg(r))})}getTooltip(e,r){return r&&this.namespaces.has(r)?this.namespaces.get(r).classes.get(e).tooltip:this.classes.get(e).tooltip}setLink(e,r,i){let n=ge();e.split(",").forEach(a=>{let s=a;/\d/.exec(a[0])&&(s=S_+s);let l=this.classes.get(s);l&&(l.link=Kt.formatUrl(r,n),n.securityLevel==="sandbox"?l.linkTarget="_top":typeof i=="string"?l.linkTarget=hg(i):l.linkTarget="_blank")}),this.setCssClass(e,"clickable")}setClickEvent(e,r,i){e.split(",").forEach(n=>{this.setClickFunc(n,r,i),this.classes.get(n).haveCallback=!0}),this.setCssClass(e,"clickable")}setClickFunc(e,r,i){let n=lt.sanitizeText(e,ge());if(ge().securityLevel!=="loose"||r===void 0)return;let s=n;if(this.classes.has(s)){let l=[];if(typeof i=="string"){l=i.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let u=0;u{let u=this.lookUpDomId(s),h=document.querySelector(`[id="${u}"]`);h!==null&&h.addEventListener("click",()=>{Kt.runFunc(r,...l)},!1)})}}bindFunctions(e){this.functions.forEach(r=>{r(e)})}escapeHtml(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}getDirection(){return this.direction}setDirection(e){this.direction=e}addNamespace(e){this.namespaces.has(e)||(this.namespaces.set(e,{id:e,classes:new Map,notes:new Map,children:new Map,domId:S_+e+"-"+this.namespaceCounter}),this.namespaceCounter++)}getNamespace(e){return this.namespaces.get(e)}getNamespaces(){return this.namespaces}addClassesToNamespace(e,r,i){if(this.namespaces.has(e)){for(let n of r){let{className:a}=this.splitClassNameAndType(n),s=this.getClass(a);s.parent=e,this.namespaces.get(e).classes.set(a,s)}for(let n of i){let a=this.getNote(n);a.parent=e,this.namespaces.get(e).notes.set(n,a)}}}setCssStyle(e,r){let i=this.classes.get(e);if(!(!r||!i))for(let n of r)n.includes(",")?i.styles.push(...n.split(",")):i.styles.push(n)}getArrowMarker(e){let r;switch(e){case 0:r="aggregation";break;case 1:r="extension";break;case 2:r="composition";break;case 3:r="dependency";break;case 4:r="lollipop";break;default:r="none"}return r}getData(){let e=[],r=[],i=ge();for(let a of this.namespaces.values()){let s={id:a.id,label:a.id,isGroup:!0,padding:i.class.padding??16,shape:"rect",cssStyles:[],look:i.look};e.push(s)}for(let a of this.classes.values()){let s={...a,type:void 0,isGroup:!1,parentId:a.parent,look:i.look};e.push(s)}for(let a of this.notes.values()){let s={id:a.id,label:a.text,isGroup:!1,shape:"note",padding:i.class.padding??6,cssStyles:["text-align: left","white-space: nowrap",`fill: ${i.themeVariables.noteBkgColor}`,`stroke: ${i.themeVariables.noteBorderColor}`],look:i.look,parentId:a.parent,labelType:"markdown"};e.push(s);let l=this.classes.get(a.class)?.id;if(l){let u={id:`edgeNote${a.index}`,start:a.id,end:l,type:"normal",thickness:"normal",classes:"relation",arrowTypeStart:"none",arrowTypeEnd:"none",arrowheadStyle:"",labelStyle:[""],style:["fill: none"],pattern:"dotted",look:i.look};r.push(u)}}for(let a of this.interfaces){let s={id:a.id,label:a.label,isGroup:!1,shape:"rect",cssStyles:["opacity: 0;"],look:i.look};e.push(s)}let n=0;for(let a of this.relations){n++;let s={id:Cu(a.id1,a.id2,{prefix:"id",counter:n}),start:a.id1,end:a.id2,type:"normal",label:a.title,labelpos:"c",thickness:"normal",classes:"relation",arrowTypeStart:this.getArrowMarker(a.relation.type1),arrowTypeEnd:this.getArrowMarker(a.relation.type2),startLabelRight:a.relationTitle1==="none"?"":a.relationTitle1,endLabelLeft:a.relationTitle2==="none"?"":a.relationTitle2,arrowheadStyle:"",labelStyle:["display: inline-block"],style:a.style||"",pattern:a.relation.lineType==1?"dashed":"solid",look:i.look,labelType:"markdown"};r.push(s)}return{nodes:e,edges:r,other:{},config:i,direction:this.getDirection()}}}});var _ft,A_,dU=P(()=>{"use strict";wy();_ft=o(t=>`g.classGroup text { + fill: ${t.nodeBorder||t.classText}; + stroke: none; + font-family: ${t.fontFamily}; + font-size: 10px; + + .title { + font-weight: bolder; + } + +} + + .cluster-label text { + fill: ${t.titleColor}; + } + .cluster-label span { + color: ${t.titleColor}; + } + .cluster-label span p { + background-color: transparent; + } + + .cluster rect { + fill: ${t.clusterBkg}; + stroke: ${t.clusterBorder}; + stroke-width: 1px; + } + + .cluster text { + fill: ${t.titleColor}; + } + + .cluster span { + color: ${t.titleColor}; + } + +.nodeLabel, .edgeLabel { + color: ${t.classText}; +} + +.noteLabel .nodeLabel, .noteLabel .edgeLabel { + color: ${t.noteTextColor}; +} +.edgeLabel .label rect { + fill: ${t.mainBkg}; +} +.label text { + fill: ${t.classText}; +} + +.labelBkg { + background: ${t.mainBkg}; +} +.edgeLabel .label span { + background: ${t.mainBkg}; +} + +.classTitle { + font-weight: bolder; +} +.node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; + stroke-width: ${t.strokeWidth}; + } + + +.divider { + stroke: ${t.nodeBorder}; + stroke-width: 1; +} + +g.clickable { + cursor: pointer; +} + +g.classGroup rect { + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; +} + +g.classGroup line { + stroke: ${t.nodeBorder}; + stroke-width: 1; +} + +.classLabel .box { + stroke: none; + stroke-width: 0; + fill: ${t.mainBkg}; + opacity: 0.5; +} + +.classLabel .label { + fill: ${t.nodeBorder}; + font-size: 10px; +} + +.relation { + stroke: ${t.lineColor}; + stroke-width: ${t.strokeWidth}; + fill: none; +} + +.dashed-line{ + stroke-dasharray: 3; +} + +.dotted-line{ + stroke-dasharray: 1 2; +} + +[id$="-compositionStart"], .composition { + fill: ${t.lineColor} !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +[id$="-compositionEnd"], .composition { + fill: ${t.lineColor} !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +[id$="-dependencyStart"], .dependency { + fill: ${t.lineColor} !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +[id$="-dependencyEnd"], .dependency { + fill: ${t.lineColor} !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +[id$="-extensionStart"], .extension { + fill: transparent !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +[id$="-extensionEnd"], .extension { + fill: transparent !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +[id$="-aggregationStart"], .aggregation { + fill: transparent !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +[id$="-aggregationEnd"], .aggregation { + fill: transparent !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +[id$="-lollipopStart"], .lollipop { + fill: ${t.mainBkg} !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +[id$="-lollipopEnd"], .lollipop { + fill: ${t.mainBkg} !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +.edgeTerminals { + font-size: 11px; + line-height: initial; +} + +.classTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${t.textColor}; +} + +.edgeLabel[data-look="neo"] { + background-color: ${t.edgeLabelBackground}; + p { + background-color: ${t.edgeLabelBackground}; + } + rect { + opacity: 0.5; + background-color: ${t.edgeLabelBackground}; + fill: ${t.edgeLabelBackground}; + } + text-align: center; +} + ${qu()} +`,"getStyles"),A_=_ft});var Dft,Lft,Rft,__,pU=P(()=>{"use strict";Ut();bt();I0();Wd();Ud();er();Dft=o((t,e="TB")=>{if(!t.doc)return e;let r=e;for(let i of t.doc)i.stmt==="dir"&&(r=i.value);return r},"getDir"),Lft=o(function(t,e){return e.db.getClasses()},"getClasses"),Rft=o(async function(t,e,r,i){Q.info("REF0:"),Q.info("Drawing class diagram (v3)",e);let{securityLevel:n,state:a,layout:s}=ge();i.db.setDiagramId(e);let l=i.db.getData(),u=Ol(e,n);l.type=i.type,l.layoutAlgorithm=Vu(s),l.nodeSpacing=a?.nodeSpacing||50,l.rankSpacing=a?.rankSpacing||50,l.markers=["aggregation","extension","composition","dependency","lollipop"],l.diagramId=e,await Ul(l,u);let h=8;Kt.insertTitle(u,"classDiagramTitleText",a?.titleTopMargin??25,i.db.getDiagramTitle()),Ro(u,h,"classDiagram",a?.useMaxWidth??!0)},"draw"),__={getClasses:Lft,draw:Rft,getDir:Dft}});var q3e={};ur(q3e,{diagram:()=>Nft});var Nft,W3e=P(()=>{"use strict";hU();fU();dU();pU();Nft={parser:E_,get db(){return new tx},renderer:__,styles:A_,init:o(t=>{t.class||(t.class={}),t.class.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")}});var Y3e={};ur(Y3e,{diagram:()=>Pft});var Pft,j3e=P(()=>{"use strict";hU();fU();dU();pU();Pft={parser:E_,get db(){return new tx},renderer:__,styles:A_,init:o(t=>{t.class||(t.class={}),t.class.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")}});var mU,D_,gU=P(()=>{"use strict";mU=(function(){var t=o(function($,z,F,V){for(F=F||{},V=$.length;V--;F[$[V]]=z);return F},"o"),e=[1,2],r=[1,3],i=[1,4],n=[2,4],a=[1,9],s=[1,11],l=[1,16],u=[1,17],h=[1,18],f=[1,19],d=[1,33],p=[1,20],m=[1,21],g=[1,22],y=[1,23],v=[1,24],x=[1,26],b=[1,27],T=[1,28],w=[1,29],k=[1,30],C=[1,31],E=[1,32],S=[1,35],L=[1,36],M=[1,37],I=[1,38],A=[1,34],_=[1,4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,41,45,48,51,52,53,54,57],D=[1,4,5,14,15,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,39,40,41,45,48,51,52,53,54,57],N=[4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,41,45,48,51,52,53,54,57],R={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,SD:6,document:7,line:8,statement:9,classDefStatement:10,styleStatement:11,cssClassStatement:12,idStatement:13,DESCR:14,"-->":15,HIDE_EMPTY:16,scale:17,WIDTH:18,COMPOSIT_STATE:19,STRUCT_START:20,STRUCT_STOP:21,STATE_DESCR:22,AS:23,ID:24,FORK:25,JOIN:26,CHOICE:27,CONCURRENT:28,note:29,notePosition:30,NOTE_TEXT:31,direction:32,acc_title:33,acc_title_value:34,acc_descr:35,acc_descr_value:36,acc_descr_multiline_value:37,CLICK:38,STRING:39,HREF:40,classDef:41,CLASSDEF_ID:42,CLASSDEF_STYLEOPTS:43,DEFAULT:44,style:45,STYLE_IDS:46,STYLEDEF_STYLEOPTS:47,class:48,CLASSENTITY_IDS:49,STYLECLASS:50,direction_tb:51,direction_bt:52,direction_rl:53,direction_lr:54,eol:55,";":56,EDGE_STATE:57,STYLE_SEPARATOR:58,left_of:59,right_of:60,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",6:"SD",14:"DESCR",15:"-->",16:"HIDE_EMPTY",17:"scale",18:"WIDTH",19:"COMPOSIT_STATE",20:"STRUCT_START",21:"STRUCT_STOP",22:"STATE_DESCR",23:"AS",24:"ID",25:"FORK",26:"JOIN",27:"CHOICE",28:"CONCURRENT",29:"note",31:"NOTE_TEXT",33:"acc_title",34:"acc_title_value",35:"acc_descr",36:"acc_descr_value",37:"acc_descr_multiline_value",38:"CLICK",39:"STRING",40:"HREF",41:"classDef",42:"CLASSDEF_ID",43:"CLASSDEF_STYLEOPTS",44:"DEFAULT",45:"style",46:"STYLE_IDS",47:"STYLEDEF_STYLEOPTS",48:"class",49:"CLASSENTITY_IDS",50:"STYLECLASS",51:"direction_tb",52:"direction_bt",53:"direction_rl",54:"direction_lr",56:";",57:"EDGE_STATE",58:"STYLE_SEPARATOR",59:"left_of",60:"right_of"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,3],[9,4],[9,1],[9,2],[9,1],[9,4],[9,3],[9,6],[9,1],[9,1],[9,1],[9,1],[9,4],[9,4],[9,1],[9,2],[9,2],[9,1],[9,5],[9,5],[10,3],[10,3],[11,3],[12,3],[32,1],[32,1],[32,1],[32,1],[55,1],[55,1],[13,1],[13,1],[13,3],[13,3],[30,1],[30,1]],performAction:o(function(z,F,V,H,X,W,Z){var Y=W.length-1;switch(X){case 3:return H.setRootDoc(W[Y]),W[Y];break;case 4:this.$=[];break;case 5:W[Y]!="nl"&&(W[Y-1].push(W[Y]),this.$=W[Y-1]);break;case 6:case 7:this.$=W[Y];break;case 8:this.$="nl";break;case 12:this.$=W[Y];break;case 13:let re=W[Y-1];re.description=H.trimColon(W[Y]),this.$=re;break;case 14:this.$={stmt:"relation",state1:W[Y-2],state2:W[Y]};break;case 15:let te=H.trimColon(W[Y]);this.$={stmt:"relation",state1:W[Y-3],state2:W[Y-1],description:te};break;case 19:this.$={stmt:"state",id:W[Y-3],type:"default",description:"",doc:W[Y-1]};break;case 20:var ae=W[Y],J=W[Y-2].trim();if(W[Y].match(":")){var ee=W[Y].split(":");ae=ee[0],J=[J,ee[1]]}this.$={stmt:"state",id:ae,type:"default",description:J};break;case 21:this.$={stmt:"state",id:W[Y-3],type:"default",description:W[Y-5],doc:W[Y-1]};break;case 22:this.$={stmt:"state",id:W[Y],type:"fork"};break;case 23:this.$={stmt:"state",id:W[Y],type:"join"};break;case 24:this.$={stmt:"state",id:W[Y],type:"choice"};break;case 25:this.$={stmt:"state",id:H.getDividerId(),type:"divider"};break;case 26:this.$={stmt:"state",id:W[Y-1].trim(),note:{position:W[Y-2].trim(),text:W[Y].trim()}};break;case 29:this.$=W[Y].trim(),H.setAccTitle(this.$);break;case 30:case 31:this.$=W[Y].trim(),H.setAccDescription(this.$);break;case 32:this.$={stmt:"click",id:W[Y-3],url:W[Y-2],tooltip:W[Y-1]};break;case 33:this.$={stmt:"click",id:W[Y-3],url:W[Y-1],tooltip:""};break;case 34:case 35:this.$={stmt:"classDef",id:W[Y-1].trim(),classes:W[Y].trim()};break;case 36:this.$={stmt:"style",id:W[Y-1].trim(),styleClass:W[Y].trim()};break;case 37:this.$={stmt:"applyClass",id:W[Y-1].trim(),styleClass:W[Y].trim()};break;case 38:H.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 39:H.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 40:H.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 41:H.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 44:case 45:this.$={stmt:"state",id:W[Y].trim(),type:"default",description:""};break;case 46:this.$={stmt:"state",id:W[Y-2].trim(),classes:[W[Y].trim()],type:"default",description:""};break;case 47:this.$={stmt:"state",id:W[Y-2].trim(),classes:[W[Y].trim()],type:"default",description:""};break}},"anonymous"),table:[{3:1,4:e,5:r,6:i},{1:[3]},{3:5,4:e,5:r,6:i},{3:6,4:e,5:r,6:i},t([1,4,5,16,17,19,22,24,25,26,27,28,29,33,35,37,38,41,45,48,51,52,53,54,57],n,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:a,5:s,8:8,9:10,10:12,11:13,12:14,13:15,16:l,17:u,19:h,22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:T,38:w,41:k,45:C,48:E,51:S,52:L,53:M,54:I,57:A},t(_,[2,5]),{9:39,10:12,11:13,12:14,13:15,16:l,17:u,19:h,22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:T,38:w,41:k,45:C,48:E,51:S,52:L,53:M,54:I,57:A},t(_,[2,7]),t(_,[2,8]),t(_,[2,9]),t(_,[2,10]),t(_,[2,11]),t(_,[2,12],{14:[1,40],15:[1,41]}),t(_,[2,16]),{18:[1,42]},t(_,[2,18],{20:[1,43]}),{23:[1,44]},t(_,[2,22]),t(_,[2,23]),t(_,[2,24]),t(_,[2,25]),{30:45,31:[1,46],59:[1,47],60:[1,48]},t(_,[2,28]),{34:[1,49]},{36:[1,50]},t(_,[2,31]),{13:51,24:d,57:A},{42:[1,52],44:[1,53]},{46:[1,54]},{49:[1,55]},t(D,[2,44],{58:[1,56]}),t(D,[2,45],{58:[1,57]}),t(_,[2,38]),t(_,[2,39]),t(_,[2,40]),t(_,[2,41]),t(_,[2,6]),t(_,[2,13]),{13:58,24:d,57:A},t(_,[2,17]),t(N,n,{7:59}),{24:[1,60]},{24:[1,61]},{23:[1,62]},{24:[2,48]},{24:[2,49]},t(_,[2,29]),t(_,[2,30]),{39:[1,63],40:[1,64]},{43:[1,65]},{43:[1,66]},{47:[1,67]},{50:[1,68]},{24:[1,69]},{24:[1,70]},t(_,[2,14],{14:[1,71]}),{4:a,5:s,8:8,9:10,10:12,11:13,12:14,13:15,16:l,17:u,19:h,21:[1,72],22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:T,38:w,41:k,45:C,48:E,51:S,52:L,53:M,54:I,57:A},t(_,[2,20],{20:[1,73]}),{31:[1,74]},{24:[1,75]},{39:[1,76]},{39:[1,77]},t(_,[2,34]),t(_,[2,35]),t(_,[2,36]),t(_,[2,37]),t(D,[2,46]),t(D,[2,47]),t(_,[2,15]),t(_,[2,19]),t(N,n,{7:78}),t(_,[2,26]),t(_,[2,27]),{5:[1,79]},{5:[1,80]},{4:a,5:s,8:8,9:10,10:12,11:13,12:14,13:15,16:l,17:u,19:h,21:[1,81],22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:T,38:w,41:k,45:C,48:E,51:S,52:L,53:M,54:I,57:A},t(_,[2,32]),t(_,[2,33]),t(_,[2,21])],defaultActions:{5:[2,1],6:[2,2],47:[2,48],48:[2,49]},parseError:o(function(z,F){if(F.recoverable)this.trace(z);else{var V=new Error(z);throw V.hash=F,V}},"parseError"),parse:o(function(z){var F=this,V=[0],H=[],X=[null],W=[],Z=this.table,Y="",ae=0,J=0,ee=0,re=2,te=1,be=W.slice.call(arguments,1),de=Object.create(this.lexer),Ee={yy:{}};for(var Ne in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Ne)&&(Ee.yy[Ne]=this.yy[Ne]);de.setInput(z,Ee.yy),Ee.yy.lexer=de,Ee.yy.parser=this,typeof de.yylloc>"u"&&(de.yylloc={});var we=de.yylloc;W.push(we);var Te=de.options&&de.options.ranges;typeof Ee.yy.parseError=="function"?this.parseError=Ee.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function De(G){V.length=V.length-2*G,X.length=X.length-G,W.length=W.length-G}o(De,"popStack");function $e(){var G;return G=H.pop()||de.lex()||te,typeof G!="number"&&(G instanceof Array&&(H=G,G=H.pop()),G=F.symbols_[G]||G),G}o($e,"lex");for(var pe,Je,Ce,Fe,Ue,qe,Me={},He,K,oe,U;;){if(Ce=V[V.length-1],this.defaultActions[Ce]?Fe=this.defaultActions[Ce]:((pe===null||typeof pe>"u")&&(pe=$e()),Fe=Z[Ce]&&Z[Ce][pe]),typeof Fe>"u"||!Fe.length||!Fe[0]){var ue="";U=[];for(He in Z[Ce])this.terminals_[He]&&He>re&&U.push("'"+this.terminals_[He]+"'");de.showPosition?ue="Parse error on line "+(ae+1)+`: +`+de.showPosition()+` +Expecting `+U.join(", ")+", got '"+(this.terminals_[pe]||pe)+"'":ue="Parse error on line "+(ae+1)+": Unexpected "+(pe==te?"end of input":"'"+(this.terminals_[pe]||pe)+"'"),this.parseError(ue,{text:de.match,token:this.terminals_[pe]||pe,line:de.yylineno,loc:we,expected:U})}if(Fe[0]instanceof Array&&Fe.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Ce+", token: "+pe);switch(Fe[0]){case 1:V.push(pe),X.push(de.yytext),W.push(de.yylloc),V.push(Fe[1]),pe=null,Je?(pe=Je,Je=null):(J=de.yyleng,Y=de.yytext,ae=de.yylineno,we=de.yylloc,ee>0&&ee--);break;case 2:if(K=this.productions_[Fe[1]][1],Me.$=X[X.length-K],Me._$={first_line:W[W.length-(K||1)].first_line,last_line:W[W.length-1].last_line,first_column:W[W.length-(K||1)].first_column,last_column:W[W.length-1].last_column},Te&&(Me._$.range=[W[W.length-(K||1)].range[0],W[W.length-1].range[1]]),qe=this.performAction.apply(Me,[Y,J,ae,Ee.yy,Fe[1],X,W].concat(be)),typeof qe<"u")return qe;K&&(V=V.slice(0,-1*K*2),X=X.slice(0,-1*K),W=W.slice(0,-1*K)),V.push(this.productions_[Fe[1]][0]),X.push(Me.$),W.push(Me._$),oe=Z[V[V.length-2]][V[V.length-1]],V.push(oe);break;case 3:return!0}}return!0},"parse")},B=(function(){var $={EOF:1,parseError:o(function(F,V){if(this.yy.parser)this.yy.parser.parseError(F,V);else throw new Error(F)},"parseError"),setInput:o(function(z,F){return this.yy=F||this.yy||{},this._input=z,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var z=this._input[0];this.yytext+=z,this.yyleng++,this.offset++,this.match+=z,this.matched+=z;var F=z.match(/(?:\r\n?|\n).*/g);return F?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),z},"input"),unput:o(function(z){var F=z.length,V=z.split(/(?:\r\n?|\n)/g);this._input=z+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-F),this.offset-=F;var H=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),V.length-1&&(this.yylineno-=V.length-1);var X=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:V?(V.length===H.length?this.yylloc.first_column:0)+H[H.length-V.length].length-V[0].length:this.yylloc.first_column-F},this.options.ranges&&(this.yylloc.range=[X[0],X[0]+this.yyleng-F]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(z){this.unput(this.match.slice(z))},"less"),pastInput:o(function(){var z=this.matched.substr(0,this.matched.length-this.match.length);return(z.length>20?"...":"")+z.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var z=this.match;return z.length<20&&(z+=this._input.substr(0,20-z.length)),(z.substr(0,20)+(z.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var z=this.pastInput(),F=new Array(z.length+1).join("-");return z+this.upcomingInput()+` +`+F+"^"},"showPosition"),test_match:o(function(z,F){var V,H,X;if(this.options.backtrack_lexer&&(X={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(X.yylloc.range=this.yylloc.range.slice(0))),H=z[0].match(/(?:\r\n?|\n).*/g),H&&(this.yylineno+=H.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:H?H[H.length-1].length-H[H.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+z[0].length},this.yytext+=z[0],this.match+=z[0],this.matches=z,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(z[0].length),this.matched+=z[0],V=this.performAction.call(this,this.yy,this,F,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),V)return V;if(this._backtrack){for(var W in X)this[W]=X[W];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var z,F,V,H;this._more||(this.yytext="",this.match="");for(var X=this._currentRules(),W=0;WF[0].length)){if(F=V,H=W,this.options.backtrack_lexer){if(z=this.test_match(V,X[W]),z!==!1)return z;if(this._backtrack){F=!1;continue}else return!1}else if(!this.options.flex)break}return F?(z=this.test_match(F,X[H]),z!==!1?z:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var F=this.next();return F||this.lex()},"lex"),begin:o(function(F){this.conditionStack.push(F)},"begin"),popState:o(function(){var F=this.conditionStack.length-1;return F>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(F){return F=this.conditionStack.length-1-Math.abs(F||0),F>=0?this.conditionStack[F]:"INITIAL"},"topState"),pushState:o(function(F){this.begin(F)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(F,V,H,X){var W=X;switch(H){case 0:return 38;case 1:return 40;case 2:return 39;case 3:return 44;case 4:return 51;case 5:return 52;case 6:return 53;case 7:return 54;case 8:break;case 9:break;case 10:return 5;case 11:break;case 12:break;case 13:break;case 14:break;case 15:return this.pushState("SCALE"),17;break;case 16:return 18;case 17:this.popState();break;case 18:return this.begin("acc_title"),33;break;case 19:return this.popState(),"acc_title_value";break;case 20:return this.begin("acc_descr"),35;break;case 21:return this.popState(),"acc_descr_value";break;case 22:this.begin("acc_descr_multiline");break;case 23:this.popState();break;case 24:return"acc_descr_multiline_value";case 25:return this.pushState("CLASSDEF"),41;break;case 26:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";break;case 27:return this.popState(),this.pushState("CLASSDEFID"),42;break;case 28:return this.popState(),43;break;case 29:return this.pushState("CLASS"),48;break;case 30:return this.popState(),this.pushState("CLASS_STYLE"),49;break;case 31:return this.popState(),50;break;case 32:return this.pushState("STYLE"),45;break;case 33:return this.popState(),this.pushState("STYLEDEF_STYLES"),46;break;case 34:return this.popState(),47;break;case 35:return this.pushState("SCALE"),17;break;case 36:return 18;case 37:this.popState();break;case 38:this.pushState("STATE");break;case 39:return this.popState(),V.yytext=V.yytext.slice(0,-8).trim(),25;break;case 40:return this.popState(),V.yytext=V.yytext.slice(0,-8).trim(),26;break;case 41:return this.popState(),V.yytext=V.yytext.slice(0,-10).trim(),27;break;case 42:return this.popState(),V.yytext=V.yytext.slice(0,-8).trim(),25;break;case 43:return this.popState(),V.yytext=V.yytext.slice(0,-8).trim(),26;break;case 44:return this.popState(),V.yytext=V.yytext.slice(0,-10).trim(),27;break;case 45:return 51;case 46:return 52;case 47:return 53;case 48:return 54;case 49:this.pushState("STATE_STRING");break;case 50:return this.pushState("STATE_ID"),"AS";break;case 51:return this.popState(),"ID";break;case 52:this.popState();break;case 53:return"STATE_DESCR";case 54:return 19;case 55:this.popState();break;case 56:return this.popState(),this.pushState("struct"),20;break;case 57:break;case 58:return this.popState(),21;break;case 59:break;case 60:return this.begin("NOTE"),29;break;case 61:return this.popState(),this.pushState("NOTE_ID"),59;break;case 62:return this.popState(),this.pushState("NOTE_ID"),60;break;case 63:this.popState(),this.pushState("FLOATING_NOTE");break;case 64:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";break;case 65:break;case 66:return"NOTE_TEXT";case 67:return this.popState(),"ID";break;case 68:return this.popState(),this.pushState("NOTE_TEXT"),24;break;case 69:return this.popState(),V.yytext=V.yytext.substr(2).trim(),31;break;case 70:return this.popState(),V.yytext=V.yytext.slice(0,-8).trim(),31;break;case 71:return 6;case 72:return 6;case 73:return 16;case 74:return 57;case 75:return 24;case 76:return V.yytext=V.yytext.trim(),14;break;case 77:return 15;case 78:return 28;case 79:return 58;case 80:return 5;case 81:return"INVALID"}},"anonymous"),rules:[/^(?:click\b)/i,/^(?:href\b)/i,/^(?:"[^"]*")/i,/^(?:default\b)/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:[\s]+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:classDef\s+)/i,/^(?:DEFAULT\s+)/i,/^(?:\w+\s+)/i,/^(?:[^\n]*)/i,/^(?:class\s+)/i,/^(?:(\w+)+((,\s*\w+)*))/i,/^(?:[^\n]*)/i,/^(?:style\s+)/i,/^(?:[\w,]+\s+)/i,/^(?:[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:state\s+)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*\[\[fork\]\])/i,/^(?:.*\[\[join\]\])/i,/^(?:.*\[\[choice\]\])/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:["])/i,/^(?:\s*as\s+)/i,/^(?:[^\n\{]*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n\s\{]+)/i,/^(?:\n)/i,/^(?:\{)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:\})/i,/^(?:[\n])/i,/^(?:note\s+)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:")/i,/^(?:\s*as\s*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n]*)/i,/^(?:\s*[^:\n\s\-]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:[\s\S]*?end note\b)/i,/^(?:stateDiagram\s+)/i,/^(?:stateDiagram-v2\s+)/i,/^(?:hide empty description\b)/i,/^(?:\[\*\])/i,/^(?:[^:\n\s\-\{]+)/i,/^(?:\s*:(?:[^:\n;]|:[^:\n;])+)/i,/^(?:-->)/i,/^(?:--)/i,/^(?::::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[12,13],inclusive:!1},struct:{rules:[12,13,25,29,32,38,45,46,47,48,57,58,59,60,74,75,76,77,78,79],inclusive:!1},FLOATING_NOTE_ID:{rules:[67],inclusive:!1},FLOATING_NOTE:{rules:[64,65,66],inclusive:!1},NOTE_TEXT:{rules:[69,70],inclusive:!1},NOTE_ID:{rules:[68],inclusive:!1},NOTE:{rules:[61,62,63],inclusive:!1},STYLEDEF_STYLEOPTS:{rules:[],inclusive:!1},STYLEDEF_STYLES:{rules:[34],inclusive:!1},STYLE_IDS:{rules:[],inclusive:!1},STYLE:{rules:[33],inclusive:!1},CLASS_STYLE:{rules:[31],inclusive:!1},CLASS:{rules:[30],inclusive:!1},CLASSDEFID:{rules:[28],inclusive:!1},CLASSDEF:{rules:[26,27],inclusive:!1},acc_descr_multiline:{rules:[23,24],inclusive:!1},acc_descr:{rules:[21],inclusive:!1},acc_title:{rules:[19],inclusive:!1},SCALE:{rules:[16,17,36,37],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[51],inclusive:!1},STATE_STRING:{rules:[52,53],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[12,13,39,40,41,42,43,44,49,50,54,55,56],inclusive:!1},ID:{rules:[12,13],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,15,18,20,22,25,29,32,35,38,56,60,71,72,73,74,75,76,77,79,80,81],inclusive:!0}}};return $})();R.lexer=B;function O(){this.yy={}}return o(O,"Parser"),O.prototype=R,R.Parser=O,new O})();mU.parser=mU;D_=mU});var Dp,fg,PC,Q3e,Z3e,J3e,dg,L_,yU,vU,xU,bU,R_,N_,e5e,t5e,TU,kU,r5e,i5e,rx,zft,n5e,CU,Gft,Vft,a5e,s5e,qft,o5e,Wft,l5e,wU,EU,c5e,I_,u5e,SU,M_=P(()=>{"use strict";Dp="state",fg="root",PC="relation",Q3e="classDef",Z3e="style",J3e="applyClass",dg="default",L_="divider",yU="fill:none",vU="fill: #333",xU="markdown",bU="normal",R_="rect",N_="rectWithTitle",e5e="stateStart",t5e="stateEnd",TU="divider",kU="roundedWithTitle",r5e="note",i5e="noteGroup",rx="statediagram",zft="state",n5e=`${rx}-${zft}`,CU="transition",Gft="note",Vft="note-edge",a5e=`${CU} ${Vft}`,s5e=`${rx}-${Gft}`,qft="cluster",o5e=`${rx}-${qft}`,Wft="cluster-alt",l5e=`${rx}-${Wft}`,wU="parent",EU="note",c5e="state",I_="----",u5e=`${I_}${EU}`,SU=`${I_}${wU}`});function AU(t="",e=0,r="",i=I_){let n=r!==null&&r.length>0?`${i}${r}`:"";return`${c5e}-${t}${n}-${e}`}function O_(t,e,r){if(!e.id||e.id===""||e.id==="")return;e.cssClasses&&(Array.isArray(e.cssCompiledStyles)||(e.cssCompiledStyles=[]),e.cssClasses.split(" ").forEach(n=>{let a=r.get(n);a&&(e.cssCompiledStyles=[...e.cssCompiledStyles??[],...a.styles])}));let i=t.find(n=>n.id===e.id);i?Object.assign(i,e):t.push(e)}function Hft(t){return t?.classes?.join(" ")??""}function Yft(t){return t?.styles??[]}var P_,Lp,Uft,h5e,ix,d5e,p5e=P(()=>{"use strict";Ut();bt();Vr();M_();P_=new Map,Lp=0;o(AU,"stateDomId");Uft=o((t,e,r,i,n,a,s,l)=>{Q.trace("items",e),e.forEach(u=>{switch(u.stmt){case Dp:ix(t,u,r,i,n,a,s,l);break;case dg:ix(t,u,r,i,n,a,s,l);break;case PC:{ix(t,u.state1,r,i,n,a,s,l),ix(t,u.state2,r,i,n,a,s,l);let h=s==="neo",f={id:"edge"+Lp,start:u.state1.id,end:u.state2.id,arrowhead:"normal",arrowTypeEnd:h?"arrow_barb_neo":"arrow_barb",style:yU,labelStyle:"",label:lt.sanitizeText(u.description??"",ge()),arrowheadStyle:vU,labelpos:"c",labelType:xU,thickness:bU,classes:CU,look:s};n.push(f),Lp++}break}})},"setupDoc"),h5e=o((t,e="TB")=>{let r=e;if(t.doc)for(let i of t.doc)i.stmt==="dir"&&(r=i.value);return r},"getDir");o(O_,"insertOrUpdateNode");o(Hft,"getClassesFromDbInfo");o(Yft,"getStylesFromDbInfo");ix=o((t,e,r,i,n,a,s,l)=>{let u=e.id,h=r.get(u),f=Hft(h),d=Yft(h),p=ge();if(Q.info("dataFetcher parsedItem",e,h,d),u!=="root"){let m=R_;e.start===!0?m=e5e:e.start===!1&&(m=t5e),e.type!==dg&&(m=e.type),P_.get(u)||P_.set(u,{id:u,shape:m,description:lt.sanitizeText(u,p),cssClasses:`${f} ${n5e}`,cssStyles:d});let g=P_.get(u);e.description&&(Array.isArray(g.description)?(g.shape=N_,g.description.push(e.description)):g.description?.length&&g.description.length>0?(g.shape=N_,g.description===u?g.description=[e.description]:g.description=[g.description,e.description]):(g.shape=R_,g.description=e.description),g.description=lt.sanitizeTextOrArray(g.description,p)),g.description?.length===1&&g.shape===N_&&(g.type==="group"?g.shape=kU:g.shape=R_),!g.type&&e.doc&&(Q.info("Setting cluster for XCX",u,h5e(e)),g.type="group",g.isGroup=!0,g.dir=h5e(e),g.shape=e.type===L_?TU:kU,g.cssClasses=`${g.cssClasses} ${o5e} ${a?l5e:""}`);let y={labelStyle:"",shape:g.shape,label:g.description,cssClasses:g.cssClasses,cssCompiledStyles:[],cssStyles:g.cssStyles,id:u,dir:g.dir,domId:AU(u,Lp),type:g.type,isGroup:g.type==="group",padding:8,rx:10,ry:10,look:s,labelType:"markdown"};if(y.shape===TU&&(y.label=""),t&&t.id!=="root"&&(Q.trace("Setting node ",u," to be child of its parent ",t.id),y.parentId=t.id),y.centerLabel=!0,e.note){let v={labelStyle:"",shape:r5e,label:e.note.text,labelType:"markdown",cssClasses:s5e,cssStyles:[],cssCompiledStyles:[],id:u+u5e+"-"+Lp,domId:AU(u,Lp,EU),type:g.type,isGroup:g.type==="group",padding:p.flowchart?.padding,look:s,position:e.note.position},x=u+SU,b={labelStyle:"",shape:i5e,label:e.note.text,cssClasses:g.cssClasses,cssStyles:[],id:u+SU,domId:AU(u,Lp,wU),type:"group",isGroup:!0,padding:16,look:s,position:e.note.position};Lp++,b.id=x,v.parentId=x,O_(i,b,l),O_(i,v,l),O_(i,y,l);let T=u,w=v.id;e.note.position==="left of"&&(T=v.id,w=u),n.push({id:T+"-"+w,start:T,end:w,arrowhead:"none",arrowTypeEnd:"",style:yU,labelStyle:"",classes:a5e,arrowheadStyle:vU,labelpos:"c",labelType:xU,thickness:bU,look:s})}else O_(i,y,l)}e.doc&&(Q.trace("Adding nodes children "),Uft(e,e.doc,r,i,n,!a,s,l))},"dataFetcher"),d5e=o(()=>{P_.clear(),Lp=0},"reset")});var DU,jft,Xft,m5e,LU=P(()=>{"use strict";Ut();bt();I0();Wd();Ud();er();M_();DU=o((t,e="TB")=>{if(!t.doc)return e;let r=e;for(let i of t.doc)i.stmt==="dir"&&(r=i.value);return r},"getDir"),jft=o(function(t,e){return e.db.getClasses()},"getClasses"),Xft=o(async function(t,e,r,i){Q.info("REF0:"),Q.info("Drawing state diagram (v2)",e);let{securityLevel:n,state:a,layout:s}=ge();i.db.extract(i.db.getRootDocV2());let l=i.db.getData(),u=Ol(e,n);l.type=i.type,l.layoutAlgorithm=s,l.nodeSpacing=a?.nodeSpacing||50,l.rankSpacing=a?.rankSpacing||50,ge().look==="neo"?l.markers=["barbNeo"]:l.markers=["barb"],l.diagramId=e,await Ul(l,u);let f=8;try{(typeof i.db.getLinks=="function"?i.db.getLinks():new Map).forEach((p,m)=>{let g=typeof m=="string"?m:typeof m?.id=="string"?m.id:"";if(!g){Q.warn("\u26A0\uFE0F Invalid or missing stateId from key:",JSON.stringify(m));return}let y=u.node()?.querySelectorAll("g"),v;if(y?.forEach(w=>{w.textContent?.trim()===g&&(v=w)}),!v){Q.warn("\u26A0\uFE0F Could not find node matching text:",g);return}let x=v.parentNode;if(!x){Q.warn("\u26A0\uFE0F Node has no parent, cannot wrap:",g);return}let b=document.createElementNS("http://www.w3.org/2000/svg","a"),T=p.url.replace(/^"+|"+$/g,"");if(b.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",T),b.setAttribute("target","_blank"),p.tooltip){let w=p.tooltip.replace(/^"+|"+$/g,"");b.setAttribute("title",w)}x.replaceChild(b,v),b.appendChild(v),Q.info("\u{1F517} Wrapped node in
    tag for:",g,p.url)})}catch(d){Q.error("\u274C Error injecting clickable links:",d)}Kt.insertTitle(u,"statediagramTitleText",a?.titleTopMargin??25,i.db.getDiagramTitle()),Ro(u,f,rx,a?.useMaxWidth??!0)},"draw"),m5e={getClasses:jft,draw:Xft,getDir:DU}});var no,y5e,v5e,B_,rc,F_=P(()=>{"use strict";Ut();bt();er();Vr();Ki();p5e();LU();M_();no={START_NODE:"[*]",START_TYPE:"start",END_NODE:"[*]",END_TYPE:"end",COLOR_KEYWORD:"color",FILL_KEYWORD:"fill",BG_FILL:"bgFill",STYLECLASS_SEP:","},y5e=o(()=>new Map,"newClassesList"),v5e=o(()=>({relations:[],states:new Map,documents:{}}),"newDoc"),B_=o(t=>JSON.parse(JSON.stringify(t)),"clone"),rc=class{constructor(e){this.version=e;this.nodes=[];this.edges=[];this.rootDoc=[];this.classes=y5e();this.documents={root:v5e()};this.currentDocument=this.documents.root;this.startEndCount=0;this.dividerCnt=0;this.links=new Map;this.getAccTitle=Dr;this.setAccTitle=Ar;this.getAccDescription=Rr;this.setAccDescription=Lr;this.setDiagramTitle=Mr;this.getDiagramTitle=Nr;this.clear(),this.setRootDoc=this.setRootDoc.bind(this),this.getDividerId=this.getDividerId.bind(this),this.setDirection=this.setDirection.bind(this),this.trimColon=this.trimColon.bind(this)}static{o(this,"StateDB")}static{this.relationType={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3}}extract(e){this.clear(!0);for(let n of Array.isArray(e)?e:e.doc)switch(n.stmt){case Dp:this.addState(n.id.trim(),n.type,n.doc,n.description,n.note);break;case PC:this.addRelation(n.state1,n.state2,n.description);break;case Q3e:this.addStyleClass(n.id.trim(),n.classes);break;case Z3e:this.handleStyleDef(n);break;case J3e:this.setCssClass(n.id.trim(),n.styleClass);break;case"click":this.addLink(n.id,n.url,n.tooltip);break}let r=this.getStates(),i=ge();d5e(),ix(void 0,this.getRootDocV2(),r,this.nodes,this.edges,!0,i.look,this.classes);for(let n of this.nodes)if(Array.isArray(n.label)){if(n.description=n.label.slice(1),n.isGroup&&n.description.length>0)throw new Error(`Group nodes can only have label. Remove the additional description for node [${n.id}]`);n.label=n.label[0]}}handleStyleDef(e){let r=e.id.trim().split(","),i=e.styleClass.split(",");for(let n of r){let a=this.getState(n);if(!a){let s=n.trim();this.addState(s),a=this.getState(s)}a&&(a.styles=i.map(s=>s.replace(/;/g,"")?.trim()))}}setRootDoc(e){Q.info("Setting root doc",e),this.rootDoc=e,this.version===1?this.extract(e):this.extract(this.getRootDocV2())}docTranslator(e,r,i){if(r.stmt===PC){this.docTranslator(e,r.state1,!0),this.docTranslator(e,r.state2,!1);return}if(r.stmt===Dp&&(r.id===no.START_NODE?(r.id=e.id+(i?"_start":"_end"),r.start=i):r.id=r.id.trim()),r.stmt!==fg&&r.stmt!==Dp||!r.doc)return;let n=[],a=[];for(let s of r.doc)if(s.type===L_){let l=B_(s);l.doc=B_(a),n.push(l),a=[]}else a.push(s);if(n.length>0&&a.length>0){let s={stmt:Dp,id:bI(),type:"divider",doc:B_(a)};n.push(B_(s)),r.doc=n}r.doc.forEach(s=>this.docTranslator(r,s,!0))}getRootDocV2(){return this.docTranslator({id:fg,stmt:fg},{id:fg,stmt:fg,doc:this.rootDoc},!0),{id:fg,doc:this.rootDoc}}addState(e,r=dg,i=void 0,n=void 0,a=void 0,s=void 0,l=void 0,u=void 0){let h=e?.trim();if(!this.currentDocument.states.has(h))Q.info("Adding state ",h,n),this.currentDocument.states.set(h,{stmt:Dp,id:h,descriptions:[],type:r,doc:i,note:a,classes:[],styles:[],textStyles:[]});else{let f=this.currentDocument.states.get(h);if(!f)throw new Error(`State not found: ${h}`);f.doc||(f.doc=i),f.type||(f.type=r)}if(n&&(Q.info("Setting state description",h,n),(Array.isArray(n)?n:[n]).forEach(d=>this.addDescription(h,d.trim()))),a){let f=this.currentDocument.states.get(h);if(!f)throw new Error(`State not found: ${h}`);f.note=a,f.note.text=lt.sanitizeText(f.note.text,ge())}s&&(Q.info("Setting state classes",h,s),(Array.isArray(s)?s:[s]).forEach(d=>this.setCssClass(h,d.trim()))),l&&(Q.info("Setting state styles",h,l),(Array.isArray(l)?l:[l]).forEach(d=>this.setStyle(h,d.trim()))),u&&(Q.info("Setting state styles",h,l),(Array.isArray(u)?u:[u]).forEach(d=>this.setTextStyle(h,d.trim())))}clear(e){this.nodes=[],this.edges=[],this.documents={root:v5e()},this.currentDocument=this.documents.root,this.startEndCount=0,this.classes=y5e(),e||(this.links=new Map,wr())}getState(e){return this.currentDocument.states.get(e)}getStates(){return this.currentDocument.states}logDocuments(){Q.info("Documents = ",this.documents)}getRelations(){return this.currentDocument.relations}addLink(e,r,i){this.links.set(e,{url:r,tooltip:i}),Q.warn("Adding link",e,r,i)}getLinks(){return this.links}startIdIfNeeded(e=""){return e===no.START_NODE?(this.startEndCount++,`${no.START_TYPE}${this.startEndCount}`):e}startTypeIfNeeded(e="",r=dg){return e===no.START_NODE?no.START_TYPE:r}endIdIfNeeded(e=""){return e===no.END_NODE?(this.startEndCount++,`${no.END_TYPE}${this.startEndCount}`):e}endTypeIfNeeded(e="",r=dg){return e===no.END_NODE?no.END_TYPE:r}addRelationObjs(e,r,i=""){let n=this.startIdIfNeeded(e.id.trim()),a=this.startTypeIfNeeded(e.id.trim(),e.type),s=this.startIdIfNeeded(r.id.trim()),l=this.startTypeIfNeeded(r.id.trim(),r.type);this.addState(n,a,e.doc,e.description,e.note,e.classes,e.styles,e.textStyles),this.addState(s,l,r.doc,r.description,r.note,r.classes,r.styles,r.textStyles),this.currentDocument.relations.push({id1:n,id2:s,relationTitle:lt.sanitizeText(i,ge())})}addRelation(e,r,i){if(typeof e=="object"&&typeof r=="object")this.addRelationObjs(e,r,i);else if(typeof e=="string"&&typeof r=="string"){let n=this.startIdIfNeeded(e.trim()),a=this.startTypeIfNeeded(e),s=this.endIdIfNeeded(r.trim()),l=this.endTypeIfNeeded(r);this.addState(n,a),this.addState(s,l),this.currentDocument.relations.push({id1:n,id2:s,relationTitle:i?lt.sanitizeText(i,ge()):void 0})}}addDescription(e,r){let i=this.currentDocument.states.get(e),n=r.startsWith(":")?r.replace(":","").trim():r;i?.descriptions?.push(lt.sanitizeText(n,ge()))}cleanupLabel(e){return e.startsWith(":")?e.slice(2).trim():e.trim()}getDividerId(){return this.dividerCnt++,`divider-id-${this.dividerCnt}`}addStyleClass(e,r=""){this.classes.has(e)||this.classes.set(e,{id:e,styles:[],textStyles:[]});let i=this.classes.get(e);r&&i&&r.split(no.STYLECLASS_SEP).forEach(n=>{let a=n.replace(/([^;]*);/,"$1").trim();if(RegExp(no.COLOR_KEYWORD).exec(n)){let l=a.replace(no.FILL_KEYWORD,no.BG_FILL).replace(no.COLOR_KEYWORD,no.FILL_KEYWORD);i.textStyles.push(l)}i.styles.push(a)})}getClasses(){return this.classes}setCssClass(e,r){e.split(",").forEach(i=>{let n=this.getState(i);if(!n){let a=i.trim();this.addState(a),n=this.getState(a)}n?.classes?.push(r)})}setStyle(e,r){this.getState(e)?.styles?.push(r)}setTextStyle(e,r){this.getState(e)?.textStyles?.push(r)}getDirectionStatement(){return this.rootDoc.find(e=>e.stmt==="dir")}getDirection(){return this.getDirectionStatement()?.value??"TB"}setDirection(e){let r=this.getDirectionStatement();r?r.value=e:this.rootDoc.unshift({stmt:"dir",value:e})}trimColon(e){return e.startsWith(":")?e.slice(1).trim():e.trim()}getData(){let e=ge();return{nodes:this.nodes,edges:this.edges,other:{},config:e,direction:DU(this.getRootDocV2())}}getConfig(){return ge().state}}});var Qft,$_,RU=P(()=>{"use strict";Qft=o(t=>` +defs [id$="-barbEnd"] { + fill: ${t.transitionColor}; + stroke: ${t.transitionColor}; + } +g.stateGroup text { + fill: ${t.nodeBorder}; + stroke: none; + font-size: 10px; +} +g.stateGroup text { + fill: ${t.textColor}; + stroke: none; + font-size: 10px; + +} +g.stateGroup .state-title { + font-weight: bolder; + fill: ${t.stateLabelColor}; +} + +g.stateGroup rect { + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; +} + +g.stateGroup line { + stroke: ${t.lineColor}; + stroke-width: ${t.strokeWidth||1}; +} + +.transition { + stroke: ${t.transitionColor}; + stroke-width: ${t.strokeWidth||1}; + fill: none; +} + +.stateGroup .composit { + fill: ${t.background}; + border-bottom: 1px +} + +.stateGroup .alt-composit { + fill: #e0e0e0; + border-bottom: 1px +} + +.state-note { + stroke: ${t.noteBorderColor}; + fill: ${t.noteBkgColor}; + + text { + fill: ${t.noteTextColor}; + stroke: none; + font-size: 10px; + } +} + +.stateLabel .box { + stroke: none; + stroke-width: 0; + fill: ${t.mainBkg}; + opacity: 0.5; +} + +.edgeLabel .label rect { + fill: ${t.labelBackgroundColor}; + opacity: 0.5; +} +.edgeLabel { + background-color: ${t.edgeLabelBackground}; + p { + background-color: ${t.edgeLabelBackground}; + } + rect { + opacity: 0.5; + background-color: ${t.edgeLabelBackground}; + fill: ${t.edgeLabelBackground}; + } + text-align: center; +} +.edgeLabel .label text { + fill: ${t.transitionLabelColor||t.tertiaryTextColor}; +} +.label div .edgeLabel { + color: ${t.transitionLabelColor||t.tertiaryTextColor}; +} + +.stateLabel text { + fill: ${t.stateLabelColor}; + font-size: 10px; + font-weight: bold; +} + +.node circle.state-start { + fill: ${t.specialStateColor}; + stroke: ${t.specialStateColor}; +} + +.node .fork-join { + fill: ${t.specialStateColor}; + stroke: ${t.specialStateColor}; +} + +.node circle.state-end { + fill: ${t.innerEndBackground}; + stroke: ${t.background}; + stroke-width: 1.5 +} +.end-state-inner { + fill: ${t.compositeBackground||t.background}; + // stroke: ${t.background}; + stroke-width: 1.5 +} + +.node rect { + fill: ${t.stateBkg||t.mainBkg}; + stroke: ${t.stateBorder||t.nodeBorder}; + stroke-width: ${t.strokeWidth||1}px; +} +.node polygon { + fill: ${t.mainBkg}; + stroke: ${t.stateBorder||t.nodeBorder};; + stroke-width: ${t.strokeWidth||1}px; +} +[id$="-barbEnd"] { + fill: ${t.lineColor}; +} + +.statediagram-cluster rect { + fill: ${t.compositeTitleBackground}; + stroke: ${t.stateBorder||t.nodeBorder}; + stroke-width: ${t.strokeWidth||1}px; +} + +.cluster-label, .nodeLabel { + color: ${t.stateLabelColor}; + // line-height: 1; +} + +.statediagram-cluster rect.outer { + rx: 5px; + ry: 5px; +} +.statediagram-state .divider { + stroke: ${t.stateBorder||t.nodeBorder}; +} + +.statediagram-state .title-state { + rx: 5px; + ry: 5px; +} +.statediagram-cluster.statediagram-cluster .inner { + fill: ${t.compositeBackground||t.background}; +} +.statediagram-cluster.statediagram-cluster-alt .inner { + fill: ${t.altBackground?t.altBackground:"#efefef"}; +} + +.statediagram-cluster .inner { + rx:0; + ry:0; +} + +.statediagram-state rect.basic { + rx: 5px; + ry: 5px; +} +.statediagram-state rect.divider { + stroke-dasharray: 10,10; + fill: ${t.altBackground?t.altBackground:"#efefef"}; +} + +.note-edge { + stroke-dasharray: 5; +} + +.statediagram-note rect { + fill: ${t.noteBkgColor}; + stroke: ${t.noteBorderColor}; + stroke-width: 1px; + rx: 0; + ry: 0; +} +.statediagram-note rect { + fill: ${t.noteBkgColor}; + stroke: ${t.noteBorderColor}; + stroke-width: 1px; + rx: 0; + ry: 0; +} + +.statediagram-note text { + fill: ${t.noteTextColor}; +} + +.statediagram-note .nodeLabel { + color: ${t.noteTextColor}; +} +.statediagram .edgeLabel { + color: red; // ${t.noteTextColor}; +} + +[id$="-dependencyStart"], [id$="-dependencyEnd"] { + fill: ${t.lineColor}; + stroke: ${t.lineColor}; + stroke-width: ${t.strokeWidth||1}; +} + +.statediagramTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${t.textColor}; +} + +[data-look="neo"].statediagram-cluster rect { + fill: ${t.mainBkg}; + stroke: ${t.useGradient?"url("+t.svgId+"-gradient)":t.stateBorder||t.nodeBorder}; + stroke-width: ${t.strokeWidth??1}; +} +[data-look="neo"].statediagram-cluster rect.outer { + rx: ${t.radius}px; + ry: ${t.radius}px; + filter: ${t.dropShadow?t.dropShadow.replace("url(#drop-shadow)",`url(${t.svgId}-drop-shadow)`):"none"} +} +`,"getStyles"),$_=Qft});var Zft,Jft,edt,tdt,b5e,rdt,idt,ndt,adt,NU,x5e,T5e,k5e=P(()=>{"use strict";Pr();F_();er();Vr();Ut();bt();Zft=o(t=>t.append("circle").attr("class","start-state").attr("r",ge().state.sizeUnit).attr("cx",ge().state.padding+ge().state.sizeUnit).attr("cy",ge().state.padding+ge().state.sizeUnit),"drawStartState"),Jft=o(t=>t.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",ge().state.textHeight).attr("class","divider").attr("x2",ge().state.textHeight*2).attr("y1",0).attr("y2",0),"drawDivider"),edt=o((t,e)=>{let r=t.append("text").attr("x",2*ge().state.padding).attr("y",ge().state.textHeight+2*ge().state.padding).attr("font-size",ge().state.fontSize).attr("class","state-title").text(e.id),i=r.node().getBBox();return t.insert("rect",":first-child").attr("x",ge().state.padding).attr("y",ge().state.padding).attr("width",i.width+2*ge().state.padding).attr("height",i.height+2*ge().state.padding).attr("rx",ge().state.radius),r},"drawSimpleState"),tdt=o((t,e)=>{let r=o(function(p,m,g){let y=p.append("tspan").attr("x",2*ge().state.padding).text(m);g||y.attr("dy",ge().state.textHeight)},"addTspan"),n=t.append("text").attr("x",2*ge().state.padding).attr("y",ge().state.textHeight+1.3*ge().state.padding).attr("font-size",ge().state.fontSize).attr("class","state-title").text(e.descriptions[0]).node().getBBox(),a=n.height,s=t.append("text").attr("x",ge().state.padding).attr("y",a+ge().state.padding*.4+ge().state.dividerMargin+ge().state.textHeight).attr("class","state-description"),l=!0,u=!0;e.descriptions.forEach(function(p){l||(r(s,p,u),u=!1),l=!1});let h=t.append("line").attr("x1",ge().state.padding).attr("y1",ge().state.padding+a+ge().state.dividerMargin/2).attr("y2",ge().state.padding+a+ge().state.dividerMargin/2).attr("class","descr-divider"),f=s.node().getBBox(),d=Math.max(f.width,n.width);return h.attr("x2",d+3*ge().state.padding),t.insert("rect",":first-child").attr("x",ge().state.padding).attr("y",ge().state.padding).attr("width",d+2*ge().state.padding).attr("height",f.height+a+2*ge().state.padding).attr("rx",ge().state.radius),t},"drawDescrState"),b5e=o((t,e,r)=>{let i=ge().state.padding,n=2*ge().state.padding,a=t.node().getBBox(),s=a.width,l=a.x,u=t.append("text").attr("x",0).attr("y",ge().state.titleShift).attr("font-size",ge().state.fontSize).attr("class","state-title").text(e.id),f=u.node().getBBox().width+n,d=Math.max(f,s);d===s&&(d=d+n);let p,m=t.node().getBBox();e.doc,p=l-i,f>s&&(p=(s-d)/2+i),Math.abs(l-m.x)s&&(p=l-(f-s)/2);let g=1-ge().state.textHeight;return t.insert("rect",":first-child").attr("x",p).attr("y",g).attr("class",r?"alt-composit":"composit").attr("width",d).attr("height",m.height+ge().state.textHeight+ge().state.titleShift+1).attr("rx","0"),u.attr("x",p+i),f<=s&&u.attr("x",l+(d-n)/2-f/2+i),t.insert("rect",":first-child").attr("x",p).attr("y",ge().state.titleShift-ge().state.textHeight-ge().state.padding).attr("width",d).attr("height",ge().state.textHeight*3).attr("rx",ge().state.radius),t.insert("rect",":first-child").attr("x",p).attr("y",ge().state.titleShift-ge().state.textHeight-ge().state.padding).attr("width",d).attr("height",m.height+3+2*ge().state.textHeight).attr("rx",ge().state.radius),t},"addTitleAndBox"),rdt=o(t=>(t.append("circle").attr("class","end-state-outer").attr("r",ge().state.sizeUnit+ge().state.miniPadding).attr("cx",ge().state.padding+ge().state.sizeUnit+ge().state.miniPadding).attr("cy",ge().state.padding+ge().state.sizeUnit+ge().state.miniPadding),t.append("circle").attr("class","end-state-inner").attr("r",ge().state.sizeUnit).attr("cx",ge().state.padding+ge().state.sizeUnit+2).attr("cy",ge().state.padding+ge().state.sizeUnit+2)),"drawEndState"),idt=o((t,e)=>{let r=ge().state.forkWidth,i=ge().state.forkHeight;if(e.parentId){let n=r;r=i,i=n}return t.append("rect").style("stroke","black").style("fill","black").attr("width",r).attr("height",i).attr("x",ge().state.padding).attr("y",ge().state.padding)},"drawForkJoinState"),ndt=o((t,e,r,i)=>{let n=0,a=i.append("text");a.style("text-anchor","start"),a.attr("class","noteText");let s=t.replace(/\r\n/g,"
    ");s=s.replace(/\n/g,"
    ");let l=s.split(lt.lineBreakRegex),u=1.25*ge().state.noteMargin;for(let h of l){let f=h.trim();if(f.length>0){let d=a.append("tspan");if(d.text(f),u===0){let p=d.node().getBBox();u+=p.height}n+=u,d.attr("x",e+ge().state.noteMargin),d.attr("y",r+n+1.25*ge().state.noteMargin)}}return{textWidth:a.node().getBBox().width,textHeight:n}},"_drawLongText"),adt=o((t,e)=>{e.attr("class","state-note");let r=e.append("rect").attr("x",0).attr("y",ge().state.padding),i=e.append("g"),{textWidth:n,textHeight:a}=ndt(t,0,0,i);return r.attr("height",a+2*ge().state.noteMargin),r.attr("width",n+ge().state.noteMargin*2),r},"drawNote"),NU=o(function(t,e){let r=e.id,i={id:r,label:e.id,width:0,height:0},n=t.append("g").attr("id",r).attr("class","stateGroup");e.type==="start"&&Zft(n),e.type==="end"&&rdt(n),(e.type==="fork"||e.type==="join")&&idt(n,e),e.type==="note"&&adt(e.note.text,n),e.type==="divider"&&Jft(n),e.type==="default"&&e.descriptions.length===0&&edt(n,e),e.type==="default"&&e.descriptions.length>0&&tdt(n,e);let a=n.node().getBBox();return i.width=a.width+2*ge().state.padding,i.height=a.height+2*ge().state.padding,i},"drawState"),x5e=0,T5e=o(function(t,e,r){let i=o(function(u){switch(u){case rc.relationType.AGGREGATION:return"aggregation";case rc.relationType.EXTENSION:return"extension";case rc.relationType.COMPOSITION:return"composition";case rc.relationType.DEPENDENCY:return"dependency"}},"getRelationType");e.points=e.points.filter(u=>!Number.isNaN(u.y));let n=e.points,a=Cc().x(function(u){return u.x}).y(function(u){return u.y}).curve(wc),s=t.append("path").attr("d",a(n)).attr("id","edge"+x5e).attr("class","transition"),l="";if(ge().state.arrowMarkerAbsolute&&(l=Yp(!0)),s.attr("marker-end","url("+l+"#"+i(rc.relationType.DEPENDENCY)+"End)"),r.title!==void 0){let u=t.append("g").attr("class","stateLabel"),{x:h,y:f}=Kt.calcLabelPosition(e.points),d=lt.getRows(r.title),p=0,m=[],g=0,y=0;for(let b=0;b<=d.length;b++){let T=u.append("text").attr("text-anchor","middle").text(d[b]).attr("x",h).attr("y",f+p),w=T.node().getBBox();g=Math.max(g,w.width),y=Math.min(y,w.x),Q.info(w.x,h,f+p),p===0&&(p=T.node().getBBox().height,Q.info("Title height",p,f)),m.push(T)}let v=p*d.length;if(d.length>1){let b=(d.length-1)*p*.5;m.forEach((T,w)=>T.attr("y",f+w*p-b)),v=p*d.length}let x=u.node().getBBox();u.insert("rect",":first-child").attr("class","box").attr("x",h-g/2-ge().state.padding/2).attr("y",f-v/2-ge().state.padding/2-3.5).attr("width",g+ge().state.padding).attr("height",v+ge().state.padding),Q.info(x)}x5e++},"drawEdge")});var dl,IU,sdt,odt,ldt,cdt,C5e,w5e,E5e=P(()=>{"use strict";Pr();YO();$l();bt();Vr();k5e();Ut();Xi();IU={},sdt=o(function(){},"setConf"),odt=o(function(t){t.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"insertMarkers"),ldt=o(function(t,e,r,i){dl=ge().state;let n=ge().securityLevel,a;n==="sandbox"&&(a=Ze("#i"+e));let s=n==="sandbox"?Ze(a.nodes()[0].contentDocument.body):Ze("body"),l=n==="sandbox"?a.nodes()[0].contentDocument:document;Q.debug("Rendering diagram "+t);let u=s.select(`[id='${e}']`);odt(u);let h=i.db.getRootDoc(),f=u.append("g").attr("id",e+"-root");C5e(h,f,void 0,!1,s,l,i);let d=dl.padding,p=u.node().getBBox(),m=p.width+d*2,g=p.height+d*2,y=m*1.75;Hr(u,g,y,dl.useMaxWidth),u.attr("viewBox",`${p.x-dl.padding} ${p.y-dl.padding} `+m+" "+g)},"draw"),cdt=o(t=>t?t.length*dl.fontSizeFactor:1,"getLabelWidth"),C5e=o((t,e,r,i,n,a,s)=>{let l=new Ai({compound:!0,multigraph:!0}),u,h=!0;for(u=0;u{let k=w.parentElement,C=0,E=0;k&&(k.parentElement&&(C=k.parentElement.getBBox().width),E=parseInt(k.getAttribute("data-x-shift"),10),Number.isNaN(E)&&(E=0)),w.setAttribute("x1",0-E+8),w.setAttribute("x2",C-E-8)})):Q.debug("No Node "+b+": "+JSON.stringify(l.node(b)))});let v=y.getBBox();l.edges().forEach(function(b){b!==void 0&&l.edge(b)!==void 0&&(Q.debug("Edge "+b.v+" -> "+b.w+": "+JSON.stringify(l.edge(b))),T5e(e,l.edge(b),l.edge(b).relation))}),v=y.getBBox();let x={id:r||"root",label:r||"root",width:0,height:0};return x.width=v.width+2*dl.padding,x.height=v.height+2*dl.padding,Q.debug("Doc rendered",x,l),x},"renderDoc"),w5e={setConf:sdt,draw:ldt}});var S5e={};ur(S5e,{diagram:()=>udt});var udt,A5e=P(()=>{"use strict";gU();F_();RU();E5e();udt={parser:D_,get db(){return new rc(1)},renderer:w5e,styles:$_,init:o(t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")}});var L5e={};ur(L5e,{diagram:()=>pdt});var pdt,R5e=P(()=>{"use strict";gU();F_();RU();LU();pdt={parser:D_,get db(){return new rc(2)},renderer:m5e,styles:$_,init:o(t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")}});var MU,M5e,O5e=P(()=>{"use strict";MU=(function(){var t=o(function(d,p,m,g){for(m=m||{},g=d.length;g--;m[d[g]]=p);return m},"o"),e=[6,8,10,11,12,14,16,17,18],r=[1,9],i=[1,10],n=[1,11],a=[1,12],s=[1,13],l=[1,14],u={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,journey:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,taskName:18,taskData:19,$accept:0,$end:1},terminals_:{2:"error",4:"journey",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",18:"taskName",19:"taskData"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,2]],performAction:o(function(p,m,g,y,v,x,b){var T=x.length-1;switch(v){case 1:return x[T-1];case 2:this.$=[];break;case 3:x[T-1].push(x[T]),this.$=x[T-1];break;case 4:case 5:this.$=x[T];break;case 6:case 7:this.$=[];break;case 8:y.setDiagramTitle(x[T].substr(6)),this.$=x[T].substr(6);break;case 9:this.$=x[T].trim(),y.setAccTitle(this.$);break;case 10:case 11:this.$=x[T].trim(),y.setAccDescription(this.$);break;case 12:y.addSection(x[T].substr(8)),this.$=x[T].substr(8);break;case 13:y.addTask(x[T-1],x[T]),this.$="task";break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:r,12:i,14:n,16:a,17:s,18:l},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:15,11:r,12:i,14:n,16:a,17:s,18:l},t(e,[2,5]),t(e,[2,6]),t(e,[2,8]),{13:[1,16]},{15:[1,17]},t(e,[2,11]),t(e,[2,12]),{19:[1,18]},t(e,[2,4]),t(e,[2,9]),t(e,[2,10]),t(e,[2,13])],defaultActions:{},parseError:o(function(p,m){if(m.recoverable)this.trace(p);else{var g=new Error(p);throw g.hash=m,g}},"parseError"),parse:o(function(p){var m=this,g=[0],y=[],v=[null],x=[],b=this.table,T="",w=0,k=0,C=0,E=2,S=1,L=x.slice.call(arguments,1),M=Object.create(this.lexer),I={yy:{}};for(var A in this.yy)Object.prototype.hasOwnProperty.call(this.yy,A)&&(I.yy[A]=this.yy[A]);M.setInput(p,I.yy),I.yy.lexer=M,I.yy.parser=this,typeof M.yylloc>"u"&&(M.yylloc={});var _=M.yylloc;x.push(_);var D=M.options&&M.options.ranges;typeof I.yy.parseError=="function"?this.parseError=I.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function N(J){g.length=g.length-2*J,v.length=v.length-J,x.length=x.length-J}o(N,"popStack");function R(){var J;return J=y.pop()||M.lex()||S,typeof J!="number"&&(J instanceof Array&&(y=J,J=y.pop()),J=m.symbols_[J]||J),J}o(R,"lex");for(var B,O,$,z,F,V,H={},X,W,Z,Y;;){if($=g[g.length-1],this.defaultActions[$]?z=this.defaultActions[$]:((B===null||typeof B>"u")&&(B=R()),z=b[$]&&b[$][B]),typeof z>"u"||!z.length||!z[0]){var ae="";Y=[];for(X in b[$])this.terminals_[X]&&X>E&&Y.push("'"+this.terminals_[X]+"'");M.showPosition?ae="Parse error on line "+(w+1)+`: +`+M.showPosition()+` +Expecting `+Y.join(", ")+", got '"+(this.terminals_[B]||B)+"'":ae="Parse error on line "+(w+1)+": Unexpected "+(B==S?"end of input":"'"+(this.terminals_[B]||B)+"'"),this.parseError(ae,{text:M.match,token:this.terminals_[B]||B,line:M.yylineno,loc:_,expected:Y})}if(z[0]instanceof Array&&z.length>1)throw new Error("Parse Error: multiple actions possible at state: "+$+", token: "+B);switch(z[0]){case 1:g.push(B),v.push(M.yytext),x.push(M.yylloc),g.push(z[1]),B=null,O?(B=O,O=null):(k=M.yyleng,T=M.yytext,w=M.yylineno,_=M.yylloc,C>0&&C--);break;case 2:if(W=this.productions_[z[1]][1],H.$=v[v.length-W],H._$={first_line:x[x.length-(W||1)].first_line,last_line:x[x.length-1].last_line,first_column:x[x.length-(W||1)].first_column,last_column:x[x.length-1].last_column},D&&(H._$.range=[x[x.length-(W||1)].range[0],x[x.length-1].range[1]]),V=this.performAction.apply(H,[T,k,w,I.yy,z[1],v,x].concat(L)),typeof V<"u")return V;W&&(g=g.slice(0,-1*W*2),v=v.slice(0,-1*W),x=x.slice(0,-1*W)),g.push(this.productions_[z[1]][0]),v.push(H.$),x.push(H._$),Z=b[g[g.length-2]][g[g.length-1]],g.push(Z);break;case 3:return!0}}return!0},"parse")},h=(function(){var d={EOF:1,parseError:o(function(m,g){if(this.yy.parser)this.yy.parser.parseError(m,g);else throw new Error(m)},"parseError"),setInput:o(function(p,m){return this.yy=m||this.yy||{},this._input=p,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var p=this._input[0];this.yytext+=p,this.yyleng++,this.offset++,this.match+=p,this.matched+=p;var m=p.match(/(?:\r\n?|\n).*/g);return m?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),p},"input"),unput:o(function(p){var m=p.length,g=p.split(/(?:\r\n?|\n)/g);this._input=p+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-m),this.offset-=m;var y=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),g.length-1&&(this.yylineno-=g.length-1);var v=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:g?(g.length===y.length?this.yylloc.first_column:0)+y[y.length-g.length].length-g[0].length:this.yylloc.first_column-m},this.options.ranges&&(this.yylloc.range=[v[0],v[0]+this.yyleng-m]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(p){this.unput(this.match.slice(p))},"less"),pastInput:o(function(){var p=this.matched.substr(0,this.matched.length-this.match.length);return(p.length>20?"...":"")+p.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var p=this.match;return p.length<20&&(p+=this._input.substr(0,20-p.length)),(p.substr(0,20)+(p.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var p=this.pastInput(),m=new Array(p.length+1).join("-");return p+this.upcomingInput()+` +`+m+"^"},"showPosition"),test_match:o(function(p,m){var g,y,v;if(this.options.backtrack_lexer&&(v={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(v.yylloc.range=this.yylloc.range.slice(0))),y=p[0].match(/(?:\r\n?|\n).*/g),y&&(this.yylineno+=y.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:y?y[y.length-1].length-y[y.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+p[0].length},this.yytext+=p[0],this.match+=p[0],this.matches=p,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(p[0].length),this.matched+=p[0],g=this.performAction.call(this,this.yy,this,m,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),g)return g;if(this._backtrack){for(var x in v)this[x]=v[x];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var p,m,g,y;this._more||(this.yytext="",this.match="");for(var v=this._currentRules(),x=0;xm[0].length)){if(m=g,y=x,this.options.backtrack_lexer){if(p=this.test_match(g,v[x]),p!==!1)return p;if(this._backtrack){m=!1;continue}else return!1}else if(!this.options.flex)break}return m?(p=this.test_match(m,v[y]),p!==!1?p:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var m=this.next();return m||this.lex()},"lex"),begin:o(function(m){this.conditionStack.push(m)},"begin"),popState:o(function(){var m=this.conditionStack.length-1;return m>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(m){return m=this.conditionStack.length-1-Math.abs(m||0),m>=0?this.conditionStack[m]:"INITIAL"},"topState"),pushState:o(function(m){this.begin(m)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(m,g,y,v){var x=v;switch(y){case 0:break;case 1:break;case 2:return 10;case 3:break;case 4:break;case 5:return 4;case 6:return 11;case 7:return this.begin("acc_title"),12;break;case 8:return this.popState(),"acc_title_value";break;case 9:return this.begin("acc_descr"),14;break;case 10:return this.popState(),"acc_descr_value";break;case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 17;case 15:return 18;case 16:return 19;case 17:return":";case 18:return 6;case 19:return"INVALID"}},"anonymous"),rules:[/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:journey\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,9,11,14,15,16,17,18,19],inclusive:!0}}};return d})();u.lexer=h;function f(){this.yy={}}return o(f,"Parser"),f.prototype=u,u.Parser=f,new f})();MU.parser=MU;M5e=MU});var nx,OU,BC,FC,vdt,xdt,bdt,Tdt,kdt,Cdt,wdt,P5e,Edt,PU,B5e=P(()=>{"use strict";Ut();Ki();nx="",OU=[],BC=[],FC=[],vdt=o(function(){OU.length=0,BC.length=0,nx="",FC.length=0,wr()},"clear"),xdt=o(function(t){nx=t,OU.push(t)},"addSection"),bdt=o(function(){return OU},"getSections"),Tdt=o(function(){let t=P5e(),e=100,r=0;for(;!t&&r{r.people&&t.push(...r.people)}),[...new Set(t)].sort()},"updateActors"),Cdt=o(function(t,e){let r=e.substr(1).split(":"),i=0,n=[];r.length===1?(i=Number(r[0]),n=[]):(i=Number(r[0]),n=r[1].split(","));let a=n.map(l=>l.trim()),s={section:nx,type:nx,people:a,task:t,score:i};FC.push(s)},"addTask"),wdt=o(function(t){let e={section:nx,type:nx,description:t,task:t,classes:[]};BC.push(e)},"addTaskOrg"),P5e=o(function(){let t=o(function(r){return FC[r].processed},"compileTask"),e=!0;for(let[r,i]of FC.entries())t(r),e=e&&i.processed;return e},"compileTasks"),Edt=o(function(){return kdt()},"getActors"),PU={getConfig:o(()=>ge().journey,"getConfig"),clear:vdt,setDiagramTitle:Mr,getDiagramTitle:Nr,setAccTitle:Ar,getAccTitle:Dr,setAccDescription:Lr,getAccDescription:Rr,addSection:xdt,getSections:bdt,getTasks:Tdt,addTask:Cdt,addTaskOrg:wdt,getActors:Edt}});var Sdt,F5e,$5e=P(()=>{"use strict";wy();Sdt=o(t=>`.label { + font-family: ${t.fontFamily}; + color: ${t.textColor}; + } + .mouth { + stroke: #666; + } + + line { + stroke: ${t.textColor} + } + + .legend { + fill: ${t.textColor}; + font-family: ${t.fontFamily}; + } + + .label text { + fill: #333; + } + .label { + color: ${t.textColor} + } + + .face { + ${t.faceColor?`fill: ${t.faceColor}`:"fill: #FFF8DC"}; + stroke: #999; + } + + .node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; + stroke-width: 1px; + } + + .node .label { + text-align: center; + } + .node.clickable { + cursor: pointer; + } + + .arrowheadPath { + fill: ${t.arrowheadColor}; + } + + .edgePath .path { + stroke: ${t.lineColor}; + stroke-width: 1.5px; + } + + .flowchart-link { + stroke: ${t.lineColor}; + fill: none; + } + + .edgeLabel { + background-color: ${t.edgeLabelBackground}; + rect { + opacity: 0.5; + } + text-align: center; + } + + .cluster rect { + } + + .cluster text { + fill: ${t.titleColor}; + } + + div.mermaidTooltip { + position: absolute; + text-align: center; + max-width: 200px; + padding: 2px; + font-family: ${t.fontFamily}; + font-size: 12px; + background: ${t.tertiaryColor}; + border: 1px solid ${t.border2}; + border-radius: 2px; + pointer-events: none; + z-index: 100; + } + + .task-type-0, .section-type-0 { + ${t.fillType0?`fill: ${t.fillType0}`:""}; + } + .task-type-1, .section-type-1 { + ${t.fillType0?`fill: ${t.fillType1}`:""}; + } + .task-type-2, .section-type-2 { + ${t.fillType0?`fill: ${t.fillType2}`:""}; + } + .task-type-3, .section-type-3 { + ${t.fillType0?`fill: ${t.fillType3}`:""}; + } + .task-type-4, .section-type-4 { + ${t.fillType0?`fill: ${t.fillType4}`:""}; + } + .task-type-5, .section-type-5 { + ${t.fillType0?`fill: ${t.fillType5}`:""}; + } + .task-type-6, .section-type-6 { + ${t.fillType0?`fill: ${t.fillType6}`:""}; + } + .task-type-7, .section-type-7 { + ${t.fillType0?`fill: ${t.fillType7}`:""}; + } + + .actor-0 { + ${t.actor0?`fill: ${t.actor0}`:""}; + } + .actor-1 { + ${t.actor1?`fill: ${t.actor1}`:""}; + } + .actor-2 { + ${t.actor2?`fill: ${t.actor2}`:""}; + } + .actor-3 { + ${t.actor3?`fill: ${t.actor3}`:""}; + } + .actor-4 { + ${t.actor4?`fill: ${t.actor4}`:""}; + } + .actor-5 { + ${t.actor5?`fill: ${t.actor5}`:""}; + } + ${qu()} +`,"getStyles"),F5e=Sdt});var FU,Adt,z5e,G5e,_dt,Ddt,BU,Ldt,Rdt,V5e,Ndt,ax,q5e=P(()=>{"use strict";Pr();y0();FU=o(function(t,e){return g0(t,e)},"drawRect"),Adt=o(function(t,e){let i=t.append("circle").attr("cx",e.cx).attr("cy",e.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),n=t.append("g");n.append("circle").attr("cx",e.cx-15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),n.append("circle").attr("cx",e.cx+15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function a(u){let h=kc().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+2)+")")}o(a,"smile");function s(u){let h=kc().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+7)+")")}o(s,"sad");function l(u){u.append("line").attr("class","mouth").attr("stroke",2).attr("x1",e.cx-5).attr("y1",e.cy+7).attr("x2",e.cx+5).attr("y2",e.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return o(l,"ambivalent"),e.score>3?a(n):e.score<3?s(n):l(n),i},"drawFace"),z5e=o(function(t,e){let r=t.append("circle");return r.attr("cx",e.cx),r.attr("cy",e.cy),r.attr("class","actor-"+e.pos),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("r",e.r),r.class!==void 0&&r.attr("class",r.class),e.title!==void 0&&r.append("title").text(e.title),r},"drawCircle"),G5e=o(function(t,e){return ure(t,e)},"drawText"),_dt=o(function(t,e){function r(n,a,s,l,u){return n+","+a+" "+(n+s)+","+a+" "+(n+s)+","+(a+l-u)+" "+(n+s-u*1.2)+","+(a+l)+" "+n+","+(a+l)}o(r,"genPoints");let i=t.append("polygon");i.attr("points",r(e.x,e.y,50,20,7)),i.attr("class","labelBox"),e.y=e.y+e.labelMargin,e.x=e.x+.5*e.labelMargin,G5e(t,e)},"drawLabel"),Ddt=o(function(t,e,r){let i=t.append("g"),n=ja();n.x=e.x,n.y=e.y,n.fill=e.fill,n.width=r.width*e.taskCount+r.diagramMarginX*(e.taskCount-1),n.height=r.height,n.class="journey-section section-type-"+e.num,n.rx=3,n.ry=3,FU(i,n),V5e(r)(e.text,i,n.x,n.y,n.width,n.height,{class:"journey-section section-type-"+e.num},r,e.colour)},"drawSection"),BU=-1,Ldt=o(function(t,e,r,i){let n=e.x+r.width/2,a=t.append("g");BU++,a.append("line").attr("id",i+"-task"+BU).attr("x1",n).attr("y1",e.y).attr("x2",n).attr("y2",450).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),Adt(a,{cx:n,cy:300+(5-e.score)*30,score:e.score});let l=ja();l.x=e.x,l.y=e.y,l.fill=e.fill,l.width=r.width,l.height=r.height,l.class="task task-type-"+e.num,l.rx=3,l.ry=3,FU(a,l);let u=e.x+14;e.people.forEach(h=>{let f=e.actors[h].color,d={cx:u,cy:e.y,r:7,fill:f,stroke:"#000",title:h,pos:e.actors[h].position};z5e(a,d),u+=10}),V5e(r)(e.task,a,l.x,l.y,l.width,l.height,{class:"task"},r,e.colour)},"drawTask"),Rdt=o(function(t,e){k3(t,e)},"drawBackgroundRect"),V5e=(function(){function t(n,a,s,l,u,h,f,d){let p=a.append("text").attr("x",s+u/2).attr("y",l+h/2+5).style("font-color",d).style("text-anchor","middle").text(n);i(p,f)}o(t,"byText");function e(n,a,s,l,u,h,f,d,p){let{taskFontSize:m,taskFontFamily:g}=d,y=n.split(//gi);for(let v=0;v{let a=Ef[n].color,s={cx:20,cy:i,r:7,fill:a,stroke:"#000",pos:Ef[n].position};ax.drawCircle(t,s);let l=t.append("text").attr("visibility","hidden").text(n),u=l.node().getBoundingClientRect().width;l.remove();let h=[];if(u<=r)h=[n];else{let f=n.split(" "),d="";l=t.append("text").attr("visibility","hidden"),f.forEach(p=>{let m=d?`${d} ${p}`:p;if(l.text(m),l.node().getBoundingClientRect().width>r){if(d&&h.push(d),d=p,l.text(p),l.node().getBoundingClientRect().width>r){let y="";for(let v of p)y+=v,l.text(y+"-"),l.node().getBoundingClientRect().width>r&&(h.push(y.slice(0,-1)+"-"),y=v);d=y}}else d=m}),d&&h.push(d),l.remove()}h.forEach((f,d)=>{let p={x:40,y:i+7+d*20,fill:"#666",text:f,textMargin:e.boxTextMargin??5},g=ax.drawText(t,p).node().getBoundingClientRect().width;g>z_&&g>e.leftMargin-g&&(z_=g)}),i+=Math.max(20,h.length*20)})}var Idt,Ef,z_,jc,Rp,Odt,ic,$U,W5e,Pdt,zU,U5e=P(()=>{"use strict";Pr();q5e();Ut();Xi();Idt=o(function(t){Object.keys(t).forEach(function(r){jc[r]=t[r]})},"setConf"),Ef={},z_=0;o(Mdt,"drawActorLegend");jc=ge().journey,Rp=0,Odt=o(function(t,e,r,i){let n=ge(),a=n.journey.titleColor,s=n.journey.titleFontSize,l=n.journey.titleFontFamily,u=n.securityLevel,h;u==="sandbox"&&(h=Ze("#i"+e));let f=u==="sandbox"?Ze(h.nodes()[0].contentDocument.body):Ze("body");ic.init();let d=f.select("#"+e);ax.initGraphics(d,e);let p=i.db.getTasks(),m=i.db.getDiagramTitle(),g=i.db.getActors();for(let w in Ef)delete Ef[w];let y=0;g.forEach(w=>{Ef[w]={color:jc.actorColours[y%jc.actorColours.length],position:y},y++}),Mdt(d),Rp=jc.leftMargin+z_,ic.insert(0,0,Rp,Object.keys(Ef).length*50),Pdt(d,p,0,e);let v=ic.getBounds();m&&d.append("text").text(m).attr("x",Rp).attr("font-size",s).attr("font-weight","bold").attr("y",25).attr("fill",a).attr("font-family",l);let x=v.stopy-v.starty+2*jc.diagramMarginY,b=Rp+v.stopx+2*jc.diagramMarginX;Hr(d,x,b,jc.useMaxWidth),d.append("line").attr("x1",Rp).attr("y1",jc.height*4).attr("x2",b-Rp-4).attr("y2",jc.height*4).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#"+e+"-arrowhead)");let T=m?70:0;d.attr("viewBox",`${v.startx} -25 ${b} ${x+T}`),d.attr("preserveAspectRatio","xMinYMin meet"),d.attr("height",x+T+25)},"draw"),ic={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],init:o(function(){this.sequenceItems=[],this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0},"init"),updateVal:o(function(t,e,r,i){t[e]===void 0?t[e]=r:t[e]=i(r,t[e])},"updateVal"),updateBounds:o(function(t,e,r,i){let n=ge().journey,a=this,s=0;function l(u){return o(function(f){s++;let d=a.sequenceItems.length-s+1;a.updateVal(f,"starty",e-d*n.boxMargin,Math.min),a.updateVal(f,"stopy",i+d*n.boxMargin,Math.max),a.updateVal(ic.data,"startx",t-d*n.boxMargin,Math.min),a.updateVal(ic.data,"stopx",r+d*n.boxMargin,Math.max),u!=="activation"&&(a.updateVal(f,"startx",t-d*n.boxMargin,Math.min),a.updateVal(f,"stopx",r+d*n.boxMargin,Math.max),a.updateVal(ic.data,"starty",e-d*n.boxMargin,Math.min),a.updateVal(ic.data,"stopy",i+d*n.boxMargin,Math.max))},"updateItemBounds")}o(l,"updateFn"),this.sequenceItems.forEach(l())},"updateBounds"),insert:o(function(t,e,r,i){let n=Math.min(t,r),a=Math.max(t,r),s=Math.min(e,i),l=Math.max(e,i);this.updateVal(ic.data,"startx",n,Math.min),this.updateVal(ic.data,"starty",s,Math.min),this.updateVal(ic.data,"stopx",a,Math.max),this.updateVal(ic.data,"stopy",l,Math.max),this.updateBounds(n,s,a,l)},"insert"),bumpVerticalPos:o(function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},"bumpVerticalPos"),getVerticalPos:o(function(){return this.verticalPos},"getVerticalPos"),getBounds:o(function(){return this.data},"getBounds")},$U=jc.sectionFills,W5e=jc.sectionColours,Pdt=o(function(t,e,r,i){let n=ge().journey,a="",s=n.height*2+n.diagramMarginY,l=r+s,u=0,h="#CCC",f="black",d=0;for(let[p,m]of e.entries()){if(a!==m.section){h=$U[u%$U.length],d=u%$U.length,f=W5e[u%W5e.length];let y=0,v=m.section;for(let b=p;b(Ef[v]&&(y[v]=Ef[v]),y),{});m.x=p*n.taskMargin+p*n.width+Rp,m.y=l,m.width=n.diagramMarginX,m.height=n.diagramMarginY,m.colour=f,m.fill=h,m.num=d,m.actors=g,ax.drawTask(t,m,n,i),ic.insert(m.x,m.y,m.x+m.width+n.taskMargin,450)}},"drawTasks"),zU={setConf:Idt,draw:Odt}});var H5e={};ur(H5e,{diagram:()=>Bdt});var Bdt,Y5e=P(()=>{"use strict";O5e();B5e();$5e();U5e();Bdt={parser:M5e,db:PU,renderer:zU,styles:F5e,init:o(t=>{zU.setConf(t.journey),PU.clear()},"init")}});var VU,eEe,tEe=P(()=>{"use strict";VU=(function(){var t=o(function(p,m,g,y){for(g=g||{},y=p.length;y--;g[p[y]]=m);return g},"o"),e=[6,11,13,14,15,17,19,20,23,24],r=[1,12],i=[1,13],n=[1,14],a=[1,15],s=[1,16],l=[1,19],u=[1,20],h={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,timeline_header:4,document:5,EOF:6,timeline:7,timeline_lr:8,timeline_td:9,line:10,SPACE:11,statement:12,NEWLINE:13,title:14,acc_title:15,acc_title_value:16,acc_descr:17,acc_descr_value:18,acc_descr_multiline_value:19,section:20,period_statement:21,event_statement:22,period:23,event:24,$accept:0,$end:1},terminals_:{2:"error",6:"EOF",7:"timeline",8:"timeline_lr",9:"timeline_td",11:"SPACE",13:"NEWLINE",14:"title",15:"acc_title",16:"acc_title_value",17:"acc_descr",18:"acc_descr_value",19:"acc_descr_multiline_value",20:"section",23:"period",24:"event"},productions_:[0,[3,3],[4,1],[4,1],[4,1],[5,0],[5,2],[10,2],[10,1],[10,1],[10,1],[12,1],[12,2],[12,2],[12,1],[12,1],[12,1],[12,1],[21,1],[22,1]],performAction:o(function(m,g,y,v,x,b,T){var w=b.length-1;switch(x){case 1:return b[w-1];case 3:v.setDirection("LR");break;case 4:v.setDirection("TD");break;case 5:this.$=[];break;case 6:b[w-1].push(b[w]),this.$=b[w-1];break;case 7:case 8:this.$=b[w];break;case 9:case 10:this.$=[];break;case 11:v.getCommonDb().setDiagramTitle(b[w].substr(6)),this.$=b[w].substr(6);break;case 12:this.$=b[w].trim(),v.getCommonDb().setAccTitle(this.$);break;case 13:case 14:this.$=b[w].trim(),v.getCommonDb().setAccDescription(this.$);break;case 15:v.addSection(b[w].substr(8)),this.$=b[w].substr(8);break;case 18:v.addTask(b[w],0,""),this.$=b[w];break;case 19:v.addEvent(b[w].substr(2)),this.$=b[w];break}},"anonymous"),table:[{3:1,4:2,7:[1,3],8:[1,4],9:[1,5]},{1:[3]},t(e,[2,5],{5:6}),t(e,[2,2]),t(e,[2,3]),t(e,[2,4]),{6:[1,7],10:8,11:[1,9],12:10,13:[1,11],14:r,15:i,17:n,19:a,20:s,21:17,22:18,23:l,24:u},t(e,[2,10],{1:[2,1]}),t(e,[2,6]),{12:21,14:r,15:i,17:n,19:a,20:s,21:17,22:18,23:l,24:u},t(e,[2,8]),t(e,[2,9]),t(e,[2,11]),{16:[1,22]},{18:[1,23]},t(e,[2,14]),t(e,[2,15]),t(e,[2,16]),t(e,[2,17]),t(e,[2,18]),t(e,[2,19]),t(e,[2,7]),t(e,[2,12]),t(e,[2,13])],defaultActions:{},parseError:o(function(m,g){if(g.recoverable)this.trace(m);else{var y=new Error(m);throw y.hash=g,y}},"parseError"),parse:o(function(m){var g=this,y=[0],v=[],x=[null],b=[],T=this.table,w="",k=0,C=0,E=0,S=2,L=1,M=b.slice.call(arguments,1),I=Object.create(this.lexer),A={yy:{}};for(var _ in this.yy)Object.prototype.hasOwnProperty.call(this.yy,_)&&(A.yy[_]=this.yy[_]);I.setInput(m,A.yy),A.yy.lexer=I,A.yy.parser=this,typeof I.yylloc>"u"&&(I.yylloc={});var D=I.yylloc;b.push(D);var N=I.options&&I.options.ranges;typeof A.yy.parseError=="function"?this.parseError=A.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function R(ee){y.length=y.length-2*ee,x.length=x.length-ee,b.length=b.length-ee}o(R,"popStack");function B(){var ee;return ee=v.pop()||I.lex()||L,typeof ee!="number"&&(ee instanceof Array&&(v=ee,ee=v.pop()),ee=g.symbols_[ee]||ee),ee}o(B,"lex");for(var O,$,z,F,V,H,X={},W,Z,Y,ae;;){if(z=y[y.length-1],this.defaultActions[z]?F=this.defaultActions[z]:((O===null||typeof O>"u")&&(O=B()),F=T[z]&&T[z][O]),typeof F>"u"||!F.length||!F[0]){var J="";ae=[];for(W in T[z])this.terminals_[W]&&W>S&&ae.push("'"+this.terminals_[W]+"'");I.showPosition?J="Parse error on line "+(k+1)+`: +`+I.showPosition()+` +Expecting `+ae.join(", ")+", got '"+(this.terminals_[O]||O)+"'":J="Parse error on line "+(k+1)+": Unexpected "+(O==L?"end of input":"'"+(this.terminals_[O]||O)+"'"),this.parseError(J,{text:I.match,token:this.terminals_[O]||O,line:I.yylineno,loc:D,expected:ae})}if(F[0]instanceof Array&&F.length>1)throw new Error("Parse Error: multiple actions possible at state: "+z+", token: "+O);switch(F[0]){case 1:y.push(O),x.push(I.yytext),b.push(I.yylloc),y.push(F[1]),O=null,$?(O=$,$=null):(C=I.yyleng,w=I.yytext,k=I.yylineno,D=I.yylloc,E>0&&E--);break;case 2:if(Z=this.productions_[F[1]][1],X.$=x[x.length-Z],X._$={first_line:b[b.length-(Z||1)].first_line,last_line:b[b.length-1].last_line,first_column:b[b.length-(Z||1)].first_column,last_column:b[b.length-1].last_column},N&&(X._$.range=[b[b.length-(Z||1)].range[0],b[b.length-1].range[1]]),H=this.performAction.apply(X,[w,C,k,A.yy,F[1],x,b].concat(M)),typeof H<"u")return H;Z&&(y=y.slice(0,-1*Z*2),x=x.slice(0,-1*Z),b=b.slice(0,-1*Z)),y.push(this.productions_[F[1]][0]),x.push(X.$),b.push(X._$),Y=T[y[y.length-2]][y[y.length-1]],y.push(Y);break;case 3:return!0}}return!0},"parse")},f=(function(){var p={EOF:1,parseError:o(function(g,y){if(this.yy.parser)this.yy.parser.parseError(g,y);else throw new Error(g)},"parseError"),setInput:o(function(m,g){return this.yy=g||this.yy||{},this._input=m,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var m=this._input[0];this.yytext+=m,this.yyleng++,this.offset++,this.match+=m,this.matched+=m;var g=m.match(/(?:\r\n?|\n).*/g);return g?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),m},"input"),unput:o(function(m){var g=m.length,y=m.split(/(?:\r\n?|\n)/g);this._input=m+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-g),this.offset-=g;var v=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),y.length-1&&(this.yylineno-=y.length-1);var x=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:y?(y.length===v.length?this.yylloc.first_column:0)+v[v.length-y.length].length-y[0].length:this.yylloc.first_column-g},this.options.ranges&&(this.yylloc.range=[x[0],x[0]+this.yyleng-g]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(m){this.unput(this.match.slice(m))},"less"),pastInput:o(function(){var m=this.matched.substr(0,this.matched.length-this.match.length);return(m.length>20?"...":"")+m.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var m=this.match;return m.length<20&&(m+=this._input.substr(0,20-m.length)),(m.substr(0,20)+(m.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var m=this.pastInput(),g=new Array(m.length+1).join("-");return m+this.upcomingInput()+` +`+g+"^"},"showPosition"),test_match:o(function(m,g){var y,v,x;if(this.options.backtrack_lexer&&(x={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(x.yylloc.range=this.yylloc.range.slice(0))),v=m[0].match(/(?:\r\n?|\n).*/g),v&&(this.yylineno+=v.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:v?v[v.length-1].length-v[v.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+m[0].length},this.yytext+=m[0],this.match+=m[0],this.matches=m,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(m[0].length),this.matched+=m[0],y=this.performAction.call(this,this.yy,this,g,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),y)return y;if(this._backtrack){for(var b in x)this[b]=x[b];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var m,g,y,v;this._more||(this.yytext="",this.match="");for(var x=this._currentRules(),b=0;bg[0].length)){if(g=y,v=b,this.options.backtrack_lexer){if(m=this.test_match(y,x[b]),m!==!1)return m;if(this._backtrack){g=!1;continue}else return!1}else if(!this.options.flex)break}return g?(m=this.test_match(g,x[v]),m!==!1?m:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var g=this.next();return g||this.lex()},"lex"),begin:o(function(g){this.conditionStack.push(g)},"begin"),popState:o(function(){var g=this.conditionStack.length-1;return g>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(g){return g=this.conditionStack.length-1-Math.abs(g||0),g>=0?this.conditionStack[g]:"INITIAL"},"topState"),pushState:o(function(g){this.begin(g)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(g,y,v,x){var b=x;switch(v){case 0:break;case 1:break;case 2:return 13;case 3:break;case 4:break;case 5:return 8;case 6:return 9;case 7:return 7;case 8:return 14;case 9:return this.begin("acc_title"),15;break;case 10:return this.popState(),"acc_title_value";break;case 11:return this.begin("acc_descr"),17;break;case 12:return this.popState(),"acc_descr_value";break;case 13:this.begin("acc_descr_multiline");break;case 14:this.popState();break;case 15:return"acc_descr_multiline_value";case 16:return 20;case 17:return 24;case 18:return 23;case 19:return 6;case 20:return"INVALID"}},"anonymous"),rules:[/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:timeline[ \t]+LR\b)/i,/^(?:timeline[ \t]+TD\b)/i,/^(?:timeline\b)/i,/^(?:title\s[^\n]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^:\n]+)/i,/^(?::\s(?:[^:\n]|:(?!\s))+)/i,/^(?:[^#:\n]+)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[14,15],inclusive:!1},acc_descr:{rules:[12],inclusive:!1},acc_title:{rules:[10],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,11,13,16,17,18,19,20],inclusive:!0}}};return p})();h.lexer=f;function d(){this.yy={}}return o(d,"Parser"),d.prototype=h,h.Parser=d,new d})();VU.parser=VU;eEe=VU});var UU={};ur(UU,{addEvent:()=>fEe,addSection:()=>lEe,addTask:()=>hEe,addTaskOrg:()=>dEe,clear:()=>aEe,default:()=>Hdt,getCommonDb:()=>nEe,getDirection:()=>oEe,getSections:()=>cEe,getTasks:()=>uEe,setDirection:()=>sEe});var sx,iEe,qU,WU,G_,ox,nEe,aEe,sEe,oEe,lEe,cEe,uEe,hEe,fEe,dEe,rEe,Hdt,pEe=P(()=>{"use strict";Ki();sx="",iEe=0,qU="LR",WU=[],G_=[],ox=[],nEe=o(()=>e2,"getCommonDb"),aEe=o(function(){WU.length=0,G_.length=0,sx="",ox.length=0,qU="LR",wr()},"clear"),sEe=o(function(t){qU=t},"setDirection"),oEe=o(function(){return qU},"getDirection"),lEe=o(function(t){sx=t,WU.push(t)},"addSection"),cEe=o(function(){return WU},"getSections"),uEe=o(function(){let t=rEe(),e=100,r=0;for(;!t&&rr.id===iEe-1).events.push(t)},"addEvent"),dEe=o(function(t){let e={section:sx,type:sx,description:t,task:t,classes:[]};G_.push(e)},"addTaskOrg"),rEe=o(function(){let t=o(function(r){return ox[r].processed},"compileTask"),e=!0;for(let[r,i]of ox.entries())t(r),e=e&&i.processed;return e},"compileTasks"),Hdt={clear:aEe,getCommonDb:nEe,getDirection:oEe,setDirection:sEe,addSection:lEe,getSections:cEe,getTasks:uEe,addTask:hEe,addTaskOrg:dEe,addEvent:fEe}});function vEe(t,e){t.each(function(){var r=Ze(this),i=r.text().split(/(\s+|
    )/).reverse(),n,a=[],s=1.1,l=r.attr("y"),u=parseFloat(r.attr("dy")),h=r.text(null).append("tspan").attr("x",0).attr("y",l).attr("dy",u+"em");for(let f=0;fe||n==="
    ")&&(a.pop(),h.text(a.join(" ").trim()),n==="
    "?a=[""]:a=[n],h=r.append("tspan").attr("x",0).attr("y",l).attr("dy",s+"em").text(n))})}var mEe,V_,Ydt,jdt,gEe,Xdt,Kdt,HU,Qdt,Zdt,Jdt,YU,yEe,ept,tpt,rpt,ipt,As,jU=P(()=>{"use strict";Pr();mEe=0,V_=o(function(t,e){let r=t.append("rect");return r.attr("x",e.x),r.attr("y",e.y),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("width",e.width),r.attr("height",e.height),r.attr("rx",e.rx),r.attr("ry",e.ry),e.class!==void 0&&r.attr("class",e.class),r},"drawRect"),Ydt=o(function(t,e){let i=t.append("circle").attr("cx",e.cx).attr("cy",e.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),n=t.append("g");n.append("circle").attr("cx",e.cx-15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),n.append("circle").attr("cx",e.cx+15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function a(u){let h=kc().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+2)+")")}o(a,"smile");function s(u){let h=kc().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+7)+")")}o(s,"sad");function l(u){u.append("line").attr("class","mouth").attr("stroke",2).attr("x1",e.cx-5).attr("y1",e.cy+7).attr("x2",e.cx+5).attr("y2",e.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return o(l,"ambivalent"),e.score>3?a(n):e.score<3?s(n):l(n),i},"drawFace"),jdt=o(function(t,e){let r=t.append("circle");return r.attr("cx",e.cx),r.attr("cy",e.cy),r.attr("class","actor-"+e.pos),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("r",e.r),r.class!==void 0&&r.attr("class",r.class),e.title!==void 0&&r.append("title").text(e.title),r},"drawCircle"),gEe=o(function(t,e){let r=e.text.replace(//gi," "),i=t.append("text");i.attr("x",e.x),i.attr("y",e.y),i.attr("class","legend"),i.style("text-anchor",e.anchor),e.class!==void 0&&i.attr("class",e.class);let n=i.append("tspan");return n.attr("x",e.x+e.textMargin*2),n.text(r),i},"drawText"),Xdt=o(function(t,e){function r(n,a,s,l,u){return n+","+a+" "+(n+s)+","+a+" "+(n+s)+","+(a+l-u)+" "+(n+s-u*1.2)+","+(a+l)+" "+n+","+(a+l)}o(r,"genPoints");let i=t.append("polygon");i.attr("points",r(e.x,e.y,50,20,7)),i.attr("class","labelBox"),e.y=e.y+e.labelMargin,e.x=e.x+.5*e.labelMargin,gEe(t,e)},"drawLabel"),Kdt=o(function(t,e,r){let i=t.append("g"),n=YU();n.x=e.x,n.y=e.y,n.fill=e.fill,n.width=r.width,n.height=r.height,n.class="journey-section section-type-"+e.num,n.rx=3,n.ry=3,V_(i,n),yEe(r)(e.text,i,n.x,n.y,n.width,n.height,{class:"journey-section section-type-"+e.num},r,e.colour)},"drawSection"),HU=-1,Qdt=o(function(t,e,r,i){let n=e.x+r.width/2,a=t.append("g");HU++,a.append("line").attr("id",i+"-task"+HU).attr("x1",n).attr("y1",e.y).attr("x2",n).attr("y2",450).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),Ydt(a,{cx:n,cy:300+(5-e.score)*30,score:e.score});let l=YU();l.x=e.x,l.y=e.y,l.fill=e.fill,l.width=r.width,l.height=r.height,l.class="task task-type-"+e.num,l.rx=3,l.ry=3,V_(a,l),yEe(r)(e.task,a,l.x,l.y,l.width,l.height,{class:"task"},r,e.colour)},"drawTask"),Zdt=o(function(t,e){V_(t,{x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,class:"rect"}).lower()},"drawBackgroundRect"),Jdt=o(function(){return{x:0,y:0,fill:void 0,"text-anchor":"start",width:100,height:100,textMargin:0,rx:0,ry:0}},"getTextObj"),YU=o(function(){return{x:0,y:0,width:100,anchor:"start",height:100,rx:0,ry:0}},"getNoteRect"),yEe=(function(){function t(n,a,s,l,u,h,f,d){let p=a.append("text").attr("x",s+u/2).attr("y",l+h/2+5).style("font-color",d).style("text-anchor","middle").text(n);i(p,f)}o(t,"byText");function e(n,a,s,l,u,h,f,d,p){let{taskFontSize:m,taskFontFamily:g}=d,y=n.split(//gi);for(let v=0;v0?`M0 ${e.height-l} v${-e.height+2*l} q0,-${s},${s},-${s} h${e.width-2*l} q${s},0,${s},${s} v${e.height-l} H0 Z`:`M0 ${e.height-l} v${-(e.height-l)} h${e.width} v${e.height} H0 Z`;t.append("path").attr("id",i+"-node-"+mEe++).attr("class","node-bkg node-"+e.type).attr("d",u),a?.includes("redux")||t.append("line").attr("class","node-line-"+r).attr("x1",0).attr("y1",e.height).attr("x2",e.width).attr("y2",e.height)},"defaultBkg"),As={drawRect:V_,drawCircle:jdt,drawSection:Kdt,drawText:gEe,drawLabel:Xdt,drawTask:Qdt,drawBackgroundRect:Zdt,getTextObj:Jdt,getNoteRect:YU,initGraphics:ept,drawNode:tpt,getVirtualNodeHeight:rpt}});var npt,xEe,apt,bEe,TEe=P(()=>{"use strict";Pr();jU();bt();Ut();Xi();npt=o(function(t,e,r,i){let n=ge(),{look:a,theme:s,themeVariables:l}=n,{useGradient:u,gradientStart:h,gradientStop:f}=l,d=n.timeline?.leftMargin??50;Q.debug("timeline",i.db);let p=n.securityLevel,m;p==="sandbox"&&(m=Ze("#i"+e));let y=(p==="sandbox"?Ze(m.nodes()[0].contentDocument.body):Ze("body")).select("#"+e);y.append("g");let v=i.db.getTasks(),x=i.db.getCommonDb().getDiagramTitle();Q.debug("task",v),As.initGraphics(y,e);let b=i.db.getSections();Q.debug("sections",b);let T=0,w=0,k=0,C=0,E=50+d,S=50;C=50;let L=0,M=!0;b.forEach(function(N){let R={number:L,descr:N,section:L,width:150,padding:20,maxHeight:T},B=As.getVirtualNodeHeight(y,R,n);Q.debug("sectionHeight before draw",B),T=Math.max(T,B+20)});let I=0,A=0;Q.debug("tasks.length",v.length);for(let[N,R]of v.entries()){let B={number:N,descr:R,section:R.section,width:150,padding:20,maxHeight:w},O=As.getVirtualNodeHeight(y,B,n);Q.debug("taskHeight before draw",O),w=Math.max(w,O+20),I=Math.max(I,R.events.length);let $=0;for(let z of R.events){let F={descr:z,section:R.section,number:R.section,width:150,padding:20,maxHeight:50};$+=As.getVirtualNodeHeight(y,F,n)}R.events.length>0&&($+=(R.events.length-1)*10),A=Math.max(A,$)}Q.debug("maxSectionHeight before draw",T),Q.debug("maxTaskHeight before draw",w),b&&b.length>0?b.forEach(N=>{let R=v.filter(z=>z.section===N),B={number:L,descr:N,section:L,width:200*Math.max(R.length,1)-50,padding:20,maxHeight:T};Q.debug("sectionNode",B);let O=y.append("g"),$=As.drawNode(O,B,L,n,e);Q.debug("sectionNode output",$),O.attr("transform",`translate(${E}, ${C})`),S+=T+50,R.length>0&&xEe(y,R,L,E,S,w,n,I,A,T,!1,e),E+=200*Math.max(R.length,1),S=C,L++}):(M=!1,xEe(y,v,L,E,S,w,n,I,A,T,!0,e));let _=y.node().getBBox();if(Q.debug("bounds",_),x&&y.append("text").text(x).attr("x",a==="neo"?_.x*2+d:_.width/2-d).attr("font-size","4ex").attr("font-weight","bold").attr("y",20),k=M?T+w+150:w+100,y.append("g").attr("class","lineWrapper").append("line").attr("x1",d).attr("y1",k).attr("x2",_.width+3*d).attr("y2",k).attr("stroke-width",4).attr("stroke","black").attr("marker-end",`url(#${e}-arrowhead)`),a==="neo"&&u&&s!=="neutral"){let N=y.select("defs"),B=(N.empty()?y.append("defs"):N).append("linearGradient").attr("id",y.attr("id")+"-gradient").attr("gradientUnits","objectBoundingBox").attr("x1","0%").attr("y1","0%").attr("x2","100%").attr("y2","0%");B.append("stop").attr("offset","0%").attr("stop-color",h).attr("stop-opacity",1),B.append("stop").attr("offset","100%").attr("stop-color",f).attr("stop-opacity",1)}El(void 0,y,n.timeline?.padding??50,n.timeline?.useMaxWidth??!1)},"draw"),xEe=o(function(t,e,r,i,n,a,s,l,u,h,f,d){for(let p of e){let m={descr:p.task,section:r,number:r,width:150,padding:20,maxHeight:a};Q.debug("taskNode",m);let g=t.append("g").attr("class","taskWrapper"),v=As.drawNode(g,m,r,s,d).height;if(Q.debug("taskHeight after draw",v),g.attr("transform",`translate(${i}, ${n})`),a=Math.max(a,v),p.events){let x=t.append("g").attr("class","lineWrapper"),b=a;n+=100,b=b+apt(t,p.events,r,i,n,s,d),n-=100,x.append("line").attr("x1",i+190/2).attr("y1",n+a).attr("x2",i+190/2).attr("y2",n+a+100+u+100).attr("stroke-width",2).attr("stroke","black").attr("marker-end",`url(#${d}-arrowhead)`).attr("stroke-dasharray","5,5")}i=i+200,f&&!s.timeline?.disableMulticolor&&r++}n=n-10},"drawTasks"),apt=o(function(t,e,r,i,n,a,s){let l=0,u=n;n=n+100;for(let h of e){let f={descr:h,section:r,number:r,width:150,padding:20,maxHeight:50};Q.debug("eventNode",f);let d=t.append("g").attr("class","eventWrapper"),m=As.drawNode(d,f,r,a,s,!0).height;l=l+m,d.attr("transform",`translate(${i}, ${n})`),n=n+10+m}return n=u,l},"drawEvents"),bEe={setConf:o(()=>{},"setConf"),draw:npt}});var q_,Sf,spt,XU,opt,EEe,lpt,kEe,SEe,CEe,AEe,cpt,wEe,upt,_Ee,DEe=P(()=>{"use strict";jU();bt();Ut();Xi();ro();er();q_=200,Sf=5,spt=q_+Sf*2,XU=q_+100,opt=XU+Sf*2,EEe=10,lpt=0,kEe=20,SEe=20,CEe=30,AEe=50,cpt=o(function(t,e,r,i){let n=ge(),a=n.timeline?.leftMargin??50;Q.debug("timeline",i.db);let s=Fi(e);s.append("g");let l=i.db.getTasks(),u=i.db.getCommonDb().getDiagramTitle();Q.debug("task",l),As.initGraphics(s);let h=i.db.getSections();Q.debug("sections",h);let f=0,d=0,p=50+a,m=50,g=m,y=p,v=spt+SEe,x=opt+AEe,b=y+v,T=0,w=h&&h.length>0,k=w?b:p+v,C=Math.max(50,v+x-Sf*2);h.forEach(function(N){let R={number:T,descr:N,section:T,width:C,padding:Sf,maxHeight:f},B=As.getVirtualNodeHeight(s,R,n);Q.debug("sectionHeight before draw",B),f=Math.max(f,B)});let E=0;Q.debug("tasks.length",l.length);for(let[N,R]of l.entries()){let B={number:N,descr:R,section:R.section,width:q_,padding:Sf,maxHeight:d},O=As.getVirtualNodeHeight(s,B,n);Q.debug("taskHeight before draw",O),d=Math.max(d,O);let $=0;for(let z of R.events){let F={descr:z,section:R.section,number:R.section,width:XU,padding:Sf,maxHeight:50};$+=As.getVirtualNodeHeight(s,F,n)}R.events.length>0&&($+=(R.events.length-1)*EEe),E=Math.max(E,$)+lpt}Q.debug("maxSectionHeight before draw",f),Q.debug("maxTaskHeight before draw",d);let L=Math.max(d,E)+CEe;w?h.forEach(N=>{let R=l.filter(X=>X.section===N),B={number:T,descr:N,section:T,width:C,padding:Sf,maxHeight:f};Q.debug("sectionNode",B);let O=s.append("g"),$=As.drawNode(O,B,T,n);Q.debug("sectionNode output",$);let z=k-v;O.attr("transform",`translate(${z}, ${m})`);let F=m+$.height+kEe;R.length>0&&wEe(s,R,T,k,F,d,n,L,!1);let V=R.length,H=$.height+kEe+L*Math.max(V,1)-(V>0?CEe*2:0);m+=H,T++}):wEe(s,l,T,k,m,d,n,L,!0);let M=s.node()?.getBBox();if(!M)throw new Error("bbox not found");if(Q.debug("bounds",M),u){if(s.append("text").text(u).attr("x",M.width/2-a).attr("font-size","4ex").attr("font-weight","bold").attr("y",20),M=s.node()?.getBBox(),!M)throw new Error("bbox not found");Q.debug("bounds after title",M)}let[I]=$s(n.fontSize),A=(I??16)*2,_=(I??16)*.5+20,D=s.append("g").attr("class","lineWrapper");D.append("line").attr("x1",k).attr("y1",g-A).attr("x2",k).attr("y2",M.y+M.height+_).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)"),D.lower(),El(void 0,s,n.timeline?.padding??50,n.timeline?.useMaxWidth??!1)},"draw"),wEe=o(function(t,e,r,i,n,a,s,l,u){for(let h of e){let f={descr:h.task,section:r,number:r,width:q_,padding:Sf,maxHeight:a};Q.debug("taskNode",f);let d=t.append("g").attr("class","taskWrapper"),p=As.drawNode(d,f,r,s),m=p.height;Q.debug("taskHeight after draw",m);let g=i-SEe-p.width;if(d.attr("transform",`translate(${g}, ${n})`),a=Math.max(a,m),h.events&&h.events.length>0){let y=n,v=i+AEe;upt(t,h.events,r,i,v,y,s)}n=n+l,u&&!s.timeline?.disableMulticolor&&r++}},"drawTasks"),upt=o(function(t,e,r,i,n,a,s){let l=a;for(let u of e){let h={descr:u,section:r,number:r,width:XU,padding:Sf,maxHeight:0};Q.debug("eventNode",h);let f=t.append("g").attr("class","eventWrapper"),p=As.drawNode(f,h,r,s).height;f.attr("transform",`translate(${n}, ${l})`);let m=t.append("g").attr("class","lineWrapper"),g=l+p/2;m.append("line").attr("x1",i).attr("y1",g).attr("x2",n).attr("y2",g).attr("stroke-width",2).attr("stroke","black").attr("marker-end","url(#arrowhead)").attr("stroke-dasharray","5,5"),l=l+p+EEe}return l-a},"drawEvents"),_Ee={setConf:o(()=>{},"setConf"),draw:cpt}});var hpt,fpt,dpt,LEe,REe=P(()=>{"use strict";Yn();Sr();hpt=o(t=>{let{theme:e}=Lt(),r=e?.includes("dark"),i=e?.includes("color"),n=t.svgId?.replace(/^#/,"")??"",a=n?`url(#${n}-drop-shadow)`:t.dropShadow??"none",s="";for(let l=0;l{let e="";for(let r=0;r{let{theme:e}=Lt(),r=e?.includes("redux"),i=e==="neutral",n=t.svgId?.replace(/^#/,"")??"",a="";if(t.useGradient&&n&&t.THEME_COLOR_LIMIT&&!i)for(let s=0;smpt});var ppt,mpt,IEe=P(()=>{"use strict";tEe();pEe();TEe();DEe();REe();ppt={setConf:o(()=>{},"setConf"),draw:o((t,e,r,i)=>(i?.db?.getDirection?.()??"LR")==="TD"?_Ee.draw(t,e,r,i):bEe.draw(t,e,r,i),"draw")},mpt={db:UU,renderer:ppt,parser:eEe,styles:LEe}});var KU,PEe,BEe=P(()=>{"use strict";KU=(function(){var t=o(function(w,k,C,E){for(C=C||{},E=w.length;E--;C[w[E]]=k);return C},"o"),e=[1,4],r=[1,13],i=[1,12],n=[1,15],a=[1,16],s=[1,20],l=[1,19],u=[6,7,8],h=[1,26],f=[1,24],d=[1,25],p=[6,7,11],m=[1,6,13,15,16,19,22],g=[1,33],y=[1,34],v=[1,6,7,11,13,15,16,19,22],x={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mindMap:4,spaceLines:5,SPACELINE:6,NL:7,MINDMAP:8,document:9,stop:10,EOF:11,statement:12,SPACELIST:13,node:14,ICON:15,CLASS:16,nodeWithId:17,nodeWithoutId:18,NODE_DSTART:19,NODE_DESCR:20,NODE_DEND:21,NODE_ID:22,$accept:0,$end:1},terminals_:{2:"error",6:"SPACELINE",7:"NL",8:"MINDMAP",11:"EOF",13:"SPACELIST",15:"ICON",16:"CLASS",19:"NODE_DSTART",20:"NODE_DESCR",21:"NODE_DEND",22:"NODE_ID"},productions_:[0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,2],[12,2],[12,2],[12,1],[12,1],[12,1],[12,1],[12,1],[14,1],[14,1],[18,3],[17,1],[17,4]],performAction:o(function(k,C,E,S,L,M,I){var A=M.length-1;switch(L){case 6:case 7:return S;case 8:S.getLogger().trace("Stop NL ");break;case 9:S.getLogger().trace("Stop EOF ");break;case 11:S.getLogger().trace("Stop NL2 ");break;case 12:S.getLogger().trace("Stop EOF2 ");break;case 15:S.getLogger().info("Node: ",M[A].id),S.addNode(M[A-1].length,M[A].id,M[A].descr,M[A].type);break;case 16:S.getLogger().trace("Icon: ",M[A]),S.decorateNode({icon:M[A]});break;case 17:case 21:S.decorateNode({class:M[A]});break;case 18:S.getLogger().trace("SPACELIST");break;case 19:S.getLogger().trace("Node: ",M[A].id),S.addNode(0,M[A].id,M[A].descr,M[A].type);break;case 20:S.decorateNode({icon:M[A]});break;case 25:S.getLogger().trace("node found ..",M[A-2]),this.$={id:M[A-1],descr:M[A-1],type:S.getType(M[A-2],M[A])};break;case 26:this.$={id:M[A],descr:M[A],type:S.nodeType.DEFAULT};break;case 27:S.getLogger().trace("node found ..",M[A-3]),this.$={id:M[A-3],descr:M[A-1],type:S.getType(M[A-2],M[A])};break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],8:e},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:e},{6:r,7:[1,10],9:9,12:11,13:i,14:14,15:n,16:a,17:17,18:18,19:s,22:l},t(u,[2,3]),{1:[2,2]},t(u,[2,4]),t(u,[2,5]),{1:[2,6],6:r,12:21,13:i,14:14,15:n,16:a,17:17,18:18,19:s,22:l},{6:r,9:22,12:11,13:i,14:14,15:n,16:a,17:17,18:18,19:s,22:l},{6:h,7:f,10:23,11:d},t(p,[2,22],{17:17,18:18,14:27,15:[1,28],16:[1,29],19:s,22:l}),t(p,[2,18]),t(p,[2,19]),t(p,[2,20]),t(p,[2,21]),t(p,[2,23]),t(p,[2,24]),t(p,[2,26],{19:[1,30]}),{20:[1,31]},{6:h,7:f,10:32,11:d},{1:[2,7],6:r,12:21,13:i,14:14,15:n,16:a,17:17,18:18,19:s,22:l},t(m,[2,14],{7:g,11:y}),t(v,[2,8]),t(v,[2,9]),t(v,[2,10]),t(p,[2,15]),t(p,[2,16]),t(p,[2,17]),{20:[1,35]},{21:[1,36]},t(m,[2,13],{7:g,11:y}),t(v,[2,11]),t(v,[2,12]),{21:[1,37]},t(p,[2,25]),t(p,[2,27])],defaultActions:{2:[2,1],6:[2,2]},parseError:o(function(k,C){if(C.recoverable)this.trace(k);else{var E=new Error(k);throw E.hash=C,E}},"parseError"),parse:o(function(k){var C=this,E=[0],S=[],L=[null],M=[],I=this.table,A="",_=0,D=0,N=0,R=2,B=1,O=M.slice.call(arguments,1),$=Object.create(this.lexer),z={yy:{}};for(var F in this.yy)Object.prototype.hasOwnProperty.call(this.yy,F)&&(z.yy[F]=this.yy[F]);$.setInput(k,z.yy),z.yy.lexer=$,z.yy.parser=this,typeof $.yylloc>"u"&&($.yylloc={});var V=$.yylloc;M.push(V);var H=$.options&&$.options.ranges;typeof z.yy.parseError=="function"?this.parseError=z.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function X(Te){E.length=E.length-2*Te,L.length=L.length-Te,M.length=M.length-Te}o(X,"popStack");function W(){var Te;return Te=S.pop()||$.lex()||B,typeof Te!="number"&&(Te instanceof Array&&(S=Te,Te=S.pop()),Te=C.symbols_[Te]||Te),Te}o(W,"lex");for(var Z,Y,ae,J,ee,re,te={},be,de,Ee,Ne;;){if(ae=E[E.length-1],this.defaultActions[ae]?J=this.defaultActions[ae]:((Z===null||typeof Z>"u")&&(Z=W()),J=I[ae]&&I[ae][Z]),typeof J>"u"||!J.length||!J[0]){var we="";Ne=[];for(be in I[ae])this.terminals_[be]&&be>R&&Ne.push("'"+this.terminals_[be]+"'");$.showPosition?we="Parse error on line "+(_+1)+`: +`+$.showPosition()+` +Expecting `+Ne.join(", ")+", got '"+(this.terminals_[Z]||Z)+"'":we="Parse error on line "+(_+1)+": Unexpected "+(Z==B?"end of input":"'"+(this.terminals_[Z]||Z)+"'"),this.parseError(we,{text:$.match,token:this.terminals_[Z]||Z,line:$.yylineno,loc:V,expected:Ne})}if(J[0]instanceof Array&&J.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ae+", token: "+Z);switch(J[0]){case 1:E.push(Z),L.push($.yytext),M.push($.yylloc),E.push(J[1]),Z=null,Y?(Z=Y,Y=null):(D=$.yyleng,A=$.yytext,_=$.yylineno,V=$.yylloc,N>0&&N--);break;case 2:if(de=this.productions_[J[1]][1],te.$=L[L.length-de],te._$={first_line:M[M.length-(de||1)].first_line,last_line:M[M.length-1].last_line,first_column:M[M.length-(de||1)].first_column,last_column:M[M.length-1].last_column},H&&(te._$.range=[M[M.length-(de||1)].range[0],M[M.length-1].range[1]]),re=this.performAction.apply(te,[A,D,_,z.yy,J[1],L,M].concat(O)),typeof re<"u")return re;de&&(E=E.slice(0,-1*de*2),L=L.slice(0,-1*de),M=M.slice(0,-1*de)),E.push(this.productions_[J[1]][0]),L.push(te.$),M.push(te._$),Ee=I[E[E.length-2]][E[E.length-1]],E.push(Ee);break;case 3:return!0}}return!0},"parse")},b=(function(){var w={EOF:1,parseError:o(function(C,E){if(this.yy.parser)this.yy.parser.parseError(C,E);else throw new Error(C)},"parseError"),setInput:o(function(k,C){return this.yy=C||this.yy||{},this._input=k,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var k=this._input[0];this.yytext+=k,this.yyleng++,this.offset++,this.match+=k,this.matched+=k;var C=k.match(/(?:\r\n?|\n).*/g);return C?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),k},"input"),unput:o(function(k){var C=k.length,E=k.split(/(?:\r\n?|\n)/g);this._input=k+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-C),this.offset-=C;var S=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),E.length-1&&(this.yylineno-=E.length-1);var L=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:E?(E.length===S.length?this.yylloc.first_column:0)+S[S.length-E.length].length-E[0].length:this.yylloc.first_column-C},this.options.ranges&&(this.yylloc.range=[L[0],L[0]+this.yyleng-C]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(k){this.unput(this.match.slice(k))},"less"),pastInput:o(function(){var k=this.matched.substr(0,this.matched.length-this.match.length);return(k.length>20?"...":"")+k.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var k=this.match;return k.length<20&&(k+=this._input.substr(0,20-k.length)),(k.substr(0,20)+(k.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var k=this.pastInput(),C=new Array(k.length+1).join("-");return k+this.upcomingInput()+` +`+C+"^"},"showPosition"),test_match:o(function(k,C){var E,S,L;if(this.options.backtrack_lexer&&(L={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(L.yylloc.range=this.yylloc.range.slice(0))),S=k[0].match(/(?:\r\n?|\n).*/g),S&&(this.yylineno+=S.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:S?S[S.length-1].length-S[S.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+k[0].length},this.yytext+=k[0],this.match+=k[0],this.matches=k,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(k[0].length),this.matched+=k[0],E=this.performAction.call(this,this.yy,this,C,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),E)return E;if(this._backtrack){for(var M in L)this[M]=L[M];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var k,C,E,S;this._more||(this.yytext="",this.match="");for(var L=this._currentRules(),M=0;MC[0].length)){if(C=E,S=M,this.options.backtrack_lexer){if(k=this.test_match(E,L[M]),k!==!1)return k;if(this._backtrack){C=!1;continue}else return!1}else if(!this.options.flex)break}return C?(k=this.test_match(C,L[S]),k!==!1?k:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var C=this.next();return C||this.lex()},"lex"),begin:o(function(C){this.conditionStack.push(C)},"begin"),popState:o(function(){var C=this.conditionStack.length-1;return C>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(C){return C=this.conditionStack.length-1-Math.abs(C||0),C>=0?this.conditionStack[C]:"INITIAL"},"topState"),pushState:o(function(C){this.begin(C)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(C,E,S,L){var M=L;switch(S){case 0:return C.getLogger().trace("Found comment",E.yytext),6;break;case 1:return 8;case 2:this.begin("CLASS");break;case 3:return this.popState(),16;break;case 4:this.popState();break;case 5:C.getLogger().trace("Begin icon"),this.begin("ICON");break;case 6:return C.getLogger().trace("SPACELINE"),6;break;case 7:return 7;case 8:return 15;case 9:C.getLogger().trace("end icon"),this.popState();break;case 10:return C.getLogger().trace("Exploding node"),this.begin("NODE"),19;break;case 11:return C.getLogger().trace("Cloud"),this.begin("NODE"),19;break;case 12:return C.getLogger().trace("Explosion Bang"),this.begin("NODE"),19;break;case 13:return C.getLogger().trace("Cloud Bang"),this.begin("NODE"),19;break;case 14:return this.begin("NODE"),19;break;case 15:return this.begin("NODE"),19;break;case 16:return this.begin("NODE"),19;break;case 17:return this.begin("NODE"),19;break;case 18:return 13;case 19:return 22;case 20:return 11;case 21:this.begin("NSTR2");break;case 22:return"NODE_DESCR";case 23:this.popState();break;case 24:C.getLogger().trace("Starting NSTR"),this.begin("NSTR");break;case 25:return C.getLogger().trace("description:",E.yytext),"NODE_DESCR";break;case 26:this.popState();break;case 27:return this.popState(),C.getLogger().trace("node end ))"),"NODE_DEND";break;case 28:return this.popState(),C.getLogger().trace("node end )"),"NODE_DEND";break;case 29:return this.popState(),C.getLogger().trace("node end ...",E.yytext),"NODE_DEND";break;case 30:return this.popState(),C.getLogger().trace("node end (("),"NODE_DEND";break;case 31:return this.popState(),C.getLogger().trace("node end (-"),"NODE_DEND";break;case 32:return this.popState(),C.getLogger().trace("node end (-"),"NODE_DEND";break;case 33:return this.popState(),C.getLogger().trace("node end (("),"NODE_DEND";break;case 34:return this.popState(),C.getLogger().trace("node end (("),"NODE_DEND";break;case 35:return C.getLogger().trace("Long description:",E.yytext),20;break;case 36:return C.getLogger().trace("Long description:",E.yytext),20;break}},"anonymous"),rules:[/^(?:\s*%%.*)/i,/^(?:mindmap\b)/i,/^(?::::)/i,/^(?:.+)/i,/^(?:\n)/i,/^(?:::icon\()/i,/^(?:[\s]+[\n])/i,/^(?:[\n]+)/i,/^(?:[^\)]+)/i,/^(?:\))/i,/^(?:-\))/i,/^(?:\(-)/i,/^(?:\)\))/i,/^(?:\))/i,/^(?:\(\()/i,/^(?:\{\{)/i,/^(?:\()/i,/^(?:\[)/i,/^(?:[\s]+)/i,/^(?:[^\(\[\n\)\{\}]+)/i,/^(?:$)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:[^"]+)/i,/^(?:["])/i,/^(?:[\)]\))/i,/^(?:[\)])/i,/^(?:[\]])/i,/^(?:\}\})/i,/^(?:\(-)/i,/^(?:-\))/i,/^(?:\(\()/i,/^(?:\()/i,/^(?:[^\)\]\(\}]+)/i,/^(?:.+(?!\(\())/i],conditions:{CLASS:{rules:[3,4],inclusive:!1},ICON:{rules:[8,9],inclusive:!1},NSTR2:{rules:[22,23],inclusive:!1},NSTR:{rules:[25,26],inclusive:!1},NODE:{rules:[21,24,27,28,29,30,31,32,33,34,35,36],inclusive:!1},INITIAL:{rules:[0,1,2,5,6,7,10,11,12,13,14,15,16,17,18,19,20],inclusive:!0}}};return w})();x.lexer=b;function T(){this.yy={}}return o(T,"Parser"),T.prototype=x,x.Parser=T,new T})();KU.parser=KU;PEe=KU});function FEe(t,e=0){return(os[t[e+0]]+os[t[e+1]]+os[t[e+2]]+os[t[e+3]]+"-"+os[t[e+4]]+os[t[e+5]]+"-"+os[t[e+6]]+os[t[e+7]]+"-"+os[t[e+8]]+os[t[e+9]]+"-"+os[t[e+10]]+os[t[e+11]]+os[t[e+12]]+os[t[e+13]]+os[t[e+14]]+os[t[e+15]]).toLowerCase()}var os,$Ee=P(()=>{"use strict";os=[];for(let t=0;t<256;++t)os.push((t+256).toString(16).slice(1));o(FEe,"unsafeStringify")});function ZU(){if(!QU){if(typeof crypto>"u"||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");QU=crypto.getRandomValues.bind(crypto)}return QU(xpt)}var QU,xpt,zEe=P(()=>{"use strict";xpt=new Uint8Array(16);o(ZU,"rng")});var bpt,JU,GEe=P(()=>{"use strict";bpt=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),JU={randomUUID:bpt}});function Tpt(t,e,r){if(JU.randomUUID&&!e&&!t)return JU.randomUUID();t=t||{};let i=t.random??t.rng?.()??ZU();if(i.length<16)throw new Error("Random bytes length must be >= 16");if(i[6]=i[6]&15|64,i[8]=i[8]&63|128,e){if(r=r||0,r<0||r+16>e.length)throw new RangeError(`UUID byte range ${r}:${r+15} is out of buffer bounds`);for(let n=0;n<16;++n)e[r+n]=i[n];return e}return FEe(i)}var eH,VEe=P(()=>{"use strict";GEe();zEe();$Ee();o(Tpt,"v4");eH=Tpt});var qEe=P(()=>{"use strict";VEe()});var WEe,UEe=P(()=>{"use strict";To();er();WEe=12});var Af,W_,HEe=P(()=>{"use strict";Ut();qEe();Vr();bt();wa();Sr();UEe();Af={DEFAULT:0,NO_BORDER:0,ROUNDED_RECT:1,RECT:2,CIRCLE:3,CLOUD:4,BANG:5,HEXAGON:6},W_=class{constructor(){this.nodes=[];this.count=0;this.elements={};this.getLogger=this.getLogger.bind(this),this.nodeType=Af,this.clear(),this.getType=this.getType.bind(this),this.getElementById=this.getElementById.bind(this),this.getParent=this.getParent.bind(this),this.getMindmap=this.getMindmap.bind(this),this.addNode=this.addNode.bind(this),this.decorateNode=this.decorateNode.bind(this)}static{o(this,"MindmapDB")}clear(){this.nodes=[],this.count=0,this.elements={},this.baseLevel=void 0}getParent(e){for(let r=this.nodes.length-1;r>=0;r--)if(this.nodes[r].level0?this.nodes[0]:null}addNode(e,r,i,n){Q.info("addNode",e,r,i,n);let a=!1;this.nodes.length===0?(this.baseLevel=e,e=0,a=!0):this.baseLevel!==void 0&&(e=e-this.baseLevel,a=!1);let s=ge(),l=s.mindmap?.padding??fr.mindmap.padding;switch(n){case this.nodeType.ROUNDED_RECT:case this.nodeType.RECT:case this.nodeType.HEXAGON:l*=2;break}let u={id:this.count++,nodeId:Tr(r,s),level:e,descr:Tr(i,s),type:n,children:[],width:s.mindmap?.maxNodeWidth??fr.mindmap.maxNodeWidth,padding:l,isRoot:a},h=this.getParent(e);if(h)h.children.push(u),this.nodes.push(u);else if(a)this.nodes.push(u);else throw new Error(`There can be only one root. No parent could be found for ("${u.descr}")`)}getType(e,r){switch(Q.debug("In get type",e,r),e){case"[":return this.nodeType.RECT;case"(":return r===")"?this.nodeType.ROUNDED_RECT:this.nodeType.CLOUD;case"((":return this.nodeType.CIRCLE;case")":return this.nodeType.CLOUD;case"))":return this.nodeType.BANG;case"{{":return this.nodeType.HEXAGON;default:return this.nodeType.DEFAULT}}setElementForId(e,r){this.elements[e]=r}getElementById(e){return this.elements[e]}decorateNode(e){if(!e)return;let r=ge(),i=this.nodes[this.nodes.length-1];e.icon&&(i.icon=Tr(e.icon,r)),e.class&&(i.class=Tr(e.class,r))}type2Str(e){switch(e){case this.nodeType.DEFAULT:return"no-border";case this.nodeType.RECT:return"rect";case this.nodeType.ROUNDED_RECT:return"rounded-rect";case this.nodeType.CIRCLE:return"circle";case this.nodeType.CLOUD:return"cloud";case this.nodeType.BANG:return"bang";case this.nodeType.HEXAGON:return"hexgon";default:return"no-border"}}assignSections(e,r){if(e.level===0?e.section=void 0:e.section=r,e.children)for(let[i,n]of e.children.entries()){let a=e.level===0?i%(WEe-1):r;this.assignSections(n,a)}}flattenNodes(e,r){let i=ge(),n=["mindmap-node"];e.isRoot===!0?n.push("section-root","section--1"):e.section!==void 0&&n.push(`section-${e.section}`),e.class&&n.push(e.class);let a=n.join(" "),s=o(u=>{let f=(i.theme?.toLowerCase()??"").includes("redux");switch(u){case Af.CIRCLE:return"mindmapCircle";case Af.RECT:return"rect";case Af.ROUNDED_RECT:return"rounded";case Af.CLOUD:return"cloud";case Af.BANG:return"bang";case Af.HEXAGON:return"hexagon";case Af.DEFAULT:return f?"rounded":"defaultMindmapNode";case Af.NO_BORDER:default:return"rect"}},"getShapeFromType"),l={id:e.id.toString(),domId:"node_"+e.id.toString(),label:e.descr,labelType:"markdown",isGroup:!1,shape:s(e.type),width:e.width,height:e.height??0,padding:e.padding,cssClasses:a,cssStyles:[],look:i.look,icon:e.icon,x:e.x,y:e.y,level:e.level,nodeId:e.nodeId,type:e.type,section:e.section};if(r.push(l),e.children)for(let u of e.children)this.flattenNodes(u,r)}generateEdges(e,r){if(!e.children)return;let i=ge();for(let n of e.children){let a="edge";n.section!==void 0&&(a+=` section-edge-${n.section}`);let s=e.level+1;a+=` edge-depth-${s}`;let l={id:`edge_${e.id}_${n.id}`,start:e.id.toString(),end:n.id.toString(),type:"normal",curve:"basis",thickness:"normal",look:i.look,classes:a,depth:e.level,section:n.section};r.push(l),this.generateEdges(n,r)}}getData(){let e=this.getMindmap(),r=ge(),n=Hj().layout!==void 0,a=r;if(n||(a.layout="cose-bilkent"),!e)return{nodes:[],edges:[],config:a};Q.debug("getData: mindmapRoot",e,r),this.assignSections(e);let s=[],l=[];this.flattenNodes(e,s),this.generateEdges(e,l),Q.debug(`getData: processed ${s.length} nodes and ${l.length} edges`);let u=new Map;for(let h of s)u.set(h.id,{shape:h.shape,width:h.width,height:h.height,padding:h.padding});return{nodes:s,edges:l,config:a,rootNode:e,markers:["point"],direction:"TB",nodeSpacing:50,rankSpacing:50,shapes:Object.fromEntries(u),type:"mindmap",diagramId:"mindmap-"+eH()}}getLogger(){return Q}}});var kpt,YEe,jEe=P(()=>{"use strict";bt();I0();Wd();Ud();wa();Sr();kpt=o(async(t,e,r,i)=>{Q.debug(`Rendering mindmap diagram +`+t);let n=i.db,a=n.getData(),s=Ol(e,a.config.securityLevel);if(a.type=i.type,a.layoutAlgorithm=Vu(a.config.layout,{fallback:"cose-bilkent"}),a.diagramId=e,!n.getMindmap())return;a.nodes.forEach(p=>{p.shape==="rounded"?(p.radius=15,p.taper=15,p.stroke="none",p.width=0,p.padding=15):p.shape==="circle"?p.padding=10:p.shape==="rect"?(p.width=0,p.padding=10):p.shape==="hexagon"&&(p.width=0,p.height=0)}),await Ul(a,s);let{themeVariables:u}=Lt(),{useGradient:h,gradientStart:f,gradientStop:d}=u;if(h&&f&&d){let p=s.attr("id"),m=s.append("defs").append("linearGradient").attr("id",`${p}-gradient`).attr("gradientUnits","objectBoundingBox").attr("x1","0%").attr("y1","0%").attr("x2","100%").attr("y2","0%");m.append("stop").attr("offset","0%").attr("stop-color",f).attr("stop-opacity",1),m.append("stop").attr("offset","100%").attr("stop-color",d).attr("stop-opacity",1)}Ro(s,a.config.mindmap?.padding??fr.mindmap.padding,"mindmapDiagram",a.config.mindmap?.useMaxWidth??fr.mindmap.useMaxWidth)},"draw"),YEe={draw:kpt}});var Cpt,wpt,Ept,XEe,KEe=P(()=>{"use strict";Yn();Cpt=o(t=>{let{theme:e,look:r}=t,i="";for(let n=0;n{let i="";for(let n=0;n{let{theme:e}=t,r=t.svgId,i=t.dropShadow?t.dropShadow.replace("url(#drop-shadow)",`url(${r}-drop-shadow)`):"none";return` + .edge { + stroke-width: 3; + } + ${Cpt(t)} + .section-root rect, .section-root path, .section-root circle, .section-root polygon { + fill: ${t.git0}; + } + .section-root text { + fill: ${t.gitBranchLabel0}; + } + .section-root span { + color: ${e?.includes("redux")?t.nodeBorder:t.gitBranchLabel0}; + } + .icon-container { + height:100%; + display: flex; + justify-content: center; + align-items: center; + } + .edge { + fill: none; + } + .mindmap-node-label { + dy: 1em; + alignment-baseline: middle; + text-anchor: middle; + dominant-baseline: middle; + text-align: center; + } + [data-look="neo"].mindmap-node { + filter: ${i}; + } + [data-look="neo"].mindmap-node.section-root rect, [data-look="neo"].mindmap-node.section-root path, [data-look="neo"].mindmap-node.section-root circle, [data-look="neo"].mindmap-node.section-root polygon { + fill: ${e?.includes("redux")?t.mainBkg:t.git0}; + } + [data-look="neo"].mindmap-node.section-root .text-inner-tspan { + fill: ${e?.includes("redux")?t.nodeBorder:t["cScaleLabel"+(e==="neutral"?1:0)]}; + } + ${t.useGradient&&r&&t.mainBkg?wpt(t.THEME_COLOR_LIMIT,r,t.mainBkg):""} +`},"getStyles"),XEe=Ept});var QEe={};ur(QEe,{diagram:()=>Spt});var Spt,ZEe=P(()=>{"use strict";BEe();HEe();jEe();KEe();Spt={get db(){return new W_},renderer:YEe,parser:PEe,styles:XEe}});var tH,tSe,rSe=P(()=>{"use strict";tH=(function(){var t=o(function(E,S,L,M){for(L=L||{},M=E.length;M--;L[E[M]]=S);return L},"o"),e=[1,4],r=[1,13],i=[1,12],n=[1,15],a=[1,16],s=[1,20],l=[1,19],u=[6,7,8],h=[1,26],f=[1,24],d=[1,25],p=[6,7,11],m=[1,31],g=[6,7,11,24],y=[1,6,13,16,17,20,23],v=[1,35],x=[1,36],b=[1,6,7,11,13,16,17,20,23],T=[1,38],w={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mindMap:4,spaceLines:5,SPACELINE:6,NL:7,KANBAN:8,document:9,stop:10,EOF:11,statement:12,SPACELIST:13,node:14,shapeData:15,ICON:16,CLASS:17,nodeWithId:18,nodeWithoutId:19,NODE_DSTART:20,NODE_DESCR:21,NODE_DEND:22,NODE_ID:23,SHAPE_DATA:24,$accept:0,$end:1},terminals_:{2:"error",6:"SPACELINE",7:"NL",8:"KANBAN",11:"EOF",13:"SPACELIST",16:"ICON",17:"CLASS",20:"NODE_DSTART",21:"NODE_DESCR",22:"NODE_DEND",23:"NODE_ID",24:"SHAPE_DATA"},productions_:[0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,3],[12,2],[12,2],[12,2],[12,1],[12,2],[12,1],[12,1],[12,1],[12,1],[14,1],[14,1],[19,3],[18,1],[18,4],[15,2],[15,1]],performAction:o(function(S,L,M,I,A,_,D){var N=_.length-1;switch(A){case 6:case 7:return I;case 8:I.getLogger().trace("Stop NL ");break;case 9:I.getLogger().trace("Stop EOF ");break;case 11:I.getLogger().trace("Stop NL2 ");break;case 12:I.getLogger().trace("Stop EOF2 ");break;case 15:I.getLogger().info("Node: ",_[N-1].id),I.addNode(_[N-2].length,_[N-1].id,_[N-1].descr,_[N-1].type,_[N]);break;case 16:I.getLogger().info("Node: ",_[N].id),I.addNode(_[N-1].length,_[N].id,_[N].descr,_[N].type);break;case 17:I.getLogger().trace("Icon: ",_[N]),I.decorateNode({icon:_[N]});break;case 18:case 23:I.decorateNode({class:_[N]});break;case 19:I.getLogger().trace("SPACELIST");break;case 20:I.getLogger().trace("Node: ",_[N-1].id),I.addNode(0,_[N-1].id,_[N-1].descr,_[N-1].type,_[N]);break;case 21:I.getLogger().trace("Node: ",_[N].id),I.addNode(0,_[N].id,_[N].descr,_[N].type);break;case 22:I.decorateNode({icon:_[N]});break;case 27:I.getLogger().trace("node found ..",_[N-2]),this.$={id:_[N-1],descr:_[N-1],type:I.getType(_[N-2],_[N])};break;case 28:this.$={id:_[N],descr:_[N],type:0};break;case 29:I.getLogger().trace("node found ..",_[N-3]),this.$={id:_[N-3],descr:_[N-1],type:I.getType(_[N-2],_[N])};break;case 30:this.$=_[N-1]+_[N];break;case 31:this.$=_[N];break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],8:e},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:e},{6:r,7:[1,10],9:9,12:11,13:i,14:14,16:n,17:a,18:17,19:18,20:s,23:l},t(u,[2,3]),{1:[2,2]},t(u,[2,4]),t(u,[2,5]),{1:[2,6],6:r,12:21,13:i,14:14,16:n,17:a,18:17,19:18,20:s,23:l},{6:r,9:22,12:11,13:i,14:14,16:n,17:a,18:17,19:18,20:s,23:l},{6:h,7:f,10:23,11:d},t(p,[2,24],{18:17,19:18,14:27,16:[1,28],17:[1,29],20:s,23:l}),t(p,[2,19]),t(p,[2,21],{15:30,24:m}),t(p,[2,22]),t(p,[2,23]),t(g,[2,25]),t(g,[2,26]),t(g,[2,28],{20:[1,32]}),{21:[1,33]},{6:h,7:f,10:34,11:d},{1:[2,7],6:r,12:21,13:i,14:14,16:n,17:a,18:17,19:18,20:s,23:l},t(y,[2,14],{7:v,11:x}),t(b,[2,8]),t(b,[2,9]),t(b,[2,10]),t(p,[2,16],{15:37,24:m}),t(p,[2,17]),t(p,[2,18]),t(p,[2,20],{24:T}),t(g,[2,31]),{21:[1,39]},{22:[1,40]},t(y,[2,13],{7:v,11:x}),t(b,[2,11]),t(b,[2,12]),t(p,[2,15],{24:T}),t(g,[2,30]),{22:[1,41]},t(g,[2,27]),t(g,[2,29])],defaultActions:{2:[2,1],6:[2,2]},parseError:o(function(S,L){if(L.recoverable)this.trace(S);else{var M=new Error(S);throw M.hash=L,M}},"parseError"),parse:o(function(S){var L=this,M=[0],I=[],A=[null],_=[],D=this.table,N="",R=0,B=0,O=0,$=2,z=1,F=_.slice.call(arguments,1),V=Object.create(this.lexer),H={yy:{}};for(var X in this.yy)Object.prototype.hasOwnProperty.call(this.yy,X)&&(H.yy[X]=this.yy[X]);V.setInput(S,H.yy),H.yy.lexer=V,H.yy.parser=this,typeof V.yylloc>"u"&&(V.yylloc={});var W=V.yylloc;_.push(W);var Z=V.options&&V.options.ranges;typeof H.yy.parseError=="function"?this.parseError=H.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Y(pe){M.length=M.length-2*pe,A.length=A.length-pe,_.length=_.length-pe}o(Y,"popStack");function ae(){var pe;return pe=I.pop()||V.lex()||z,typeof pe!="number"&&(pe instanceof Array&&(I=pe,pe=I.pop()),pe=L.symbols_[pe]||pe),pe}o(ae,"lex");for(var J,ee,re,te,be,de,Ee={},Ne,we,Te,De;;){if(re=M[M.length-1],this.defaultActions[re]?te=this.defaultActions[re]:((J===null||typeof J>"u")&&(J=ae()),te=D[re]&&D[re][J]),typeof te>"u"||!te.length||!te[0]){var $e="";De=[];for(Ne in D[re])this.terminals_[Ne]&&Ne>$&&De.push("'"+this.terminals_[Ne]+"'");V.showPosition?$e="Parse error on line "+(R+1)+`: +`+V.showPosition()+` +Expecting `+De.join(", ")+", got '"+(this.terminals_[J]||J)+"'":$e="Parse error on line "+(R+1)+": Unexpected "+(J==z?"end of input":"'"+(this.terminals_[J]||J)+"'"),this.parseError($e,{text:V.match,token:this.terminals_[J]||J,line:V.yylineno,loc:W,expected:De})}if(te[0]instanceof Array&&te.length>1)throw new Error("Parse Error: multiple actions possible at state: "+re+", token: "+J);switch(te[0]){case 1:M.push(J),A.push(V.yytext),_.push(V.yylloc),M.push(te[1]),J=null,ee?(J=ee,ee=null):(B=V.yyleng,N=V.yytext,R=V.yylineno,W=V.yylloc,O>0&&O--);break;case 2:if(we=this.productions_[te[1]][1],Ee.$=A[A.length-we],Ee._$={first_line:_[_.length-(we||1)].first_line,last_line:_[_.length-1].last_line,first_column:_[_.length-(we||1)].first_column,last_column:_[_.length-1].last_column},Z&&(Ee._$.range=[_[_.length-(we||1)].range[0],_[_.length-1].range[1]]),de=this.performAction.apply(Ee,[N,B,R,H.yy,te[1],A,_].concat(F)),typeof de<"u")return de;we&&(M=M.slice(0,-1*we*2),A=A.slice(0,-1*we),_=_.slice(0,-1*we)),M.push(this.productions_[te[1]][0]),A.push(Ee.$),_.push(Ee._$),Te=D[M[M.length-2]][M[M.length-1]],M.push(Te);break;case 3:return!0}}return!0},"parse")},k=(function(){var E={EOF:1,parseError:o(function(L,M){if(this.yy.parser)this.yy.parser.parseError(L,M);else throw new Error(L)},"parseError"),setInput:o(function(S,L){return this.yy=L||this.yy||{},this._input=S,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var S=this._input[0];this.yytext+=S,this.yyleng++,this.offset++,this.match+=S,this.matched+=S;var L=S.match(/(?:\r\n?|\n).*/g);return L?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),S},"input"),unput:o(function(S){var L=S.length,M=S.split(/(?:\r\n?|\n)/g);this._input=S+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-L),this.offset-=L;var I=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),M.length-1&&(this.yylineno-=M.length-1);var A=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:M?(M.length===I.length?this.yylloc.first_column:0)+I[I.length-M.length].length-M[0].length:this.yylloc.first_column-L},this.options.ranges&&(this.yylloc.range=[A[0],A[0]+this.yyleng-L]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(S){this.unput(this.match.slice(S))},"less"),pastInput:o(function(){var S=this.matched.substr(0,this.matched.length-this.match.length);return(S.length>20?"...":"")+S.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var S=this.match;return S.length<20&&(S+=this._input.substr(0,20-S.length)),(S.substr(0,20)+(S.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var S=this.pastInput(),L=new Array(S.length+1).join("-");return S+this.upcomingInput()+` +`+L+"^"},"showPosition"),test_match:o(function(S,L){var M,I,A;if(this.options.backtrack_lexer&&(A={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(A.yylloc.range=this.yylloc.range.slice(0))),I=S[0].match(/(?:\r\n?|\n).*/g),I&&(this.yylineno+=I.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:I?I[I.length-1].length-I[I.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+S[0].length},this.yytext+=S[0],this.match+=S[0],this.matches=S,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(S[0].length),this.matched+=S[0],M=this.performAction.call(this,this.yy,this,L,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),M)return M;if(this._backtrack){for(var _ in A)this[_]=A[_];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var S,L,M,I;this._more||(this.yytext="",this.match="");for(var A=this._currentRules(),_=0;_L[0].length)){if(L=M,I=_,this.options.backtrack_lexer){if(S=this.test_match(M,A[_]),S!==!1)return S;if(this._backtrack){L=!1;continue}else return!1}else if(!this.options.flex)break}return L?(S=this.test_match(L,A[I]),S!==!1?S:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var L=this.next();return L||this.lex()},"lex"),begin:o(function(L){this.conditionStack.push(L)},"begin"),popState:o(function(){var L=this.conditionStack.length-1;return L>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(L){return L=this.conditionStack.length-1-Math.abs(L||0),L>=0?this.conditionStack[L]:"INITIAL"},"topState"),pushState:o(function(L){this.begin(L)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(L,M,I,A){var _=A;switch(I){case 0:return this.pushState("shapeData"),M.yytext="",24;break;case 1:return this.pushState("shapeDataStr"),24;break;case 2:return this.popState(),24;break;case 3:let D=/\n\s*/g;return M.yytext=M.yytext.replace(D,"
    "),24;break;case 4:return 24;case 5:this.popState();break;case 6:return L.getLogger().trace("Found comment",M.yytext),6;break;case 7:return 8;case 8:this.begin("CLASS");break;case 9:return this.popState(),17;break;case 10:this.popState();break;case 11:L.getLogger().trace("Begin icon"),this.begin("ICON");break;case 12:return L.getLogger().trace("SPACELINE"),6;break;case 13:return 7;case 14:return 16;case 15:L.getLogger().trace("end icon"),this.popState();break;case 16:return L.getLogger().trace("Exploding node"),this.begin("NODE"),20;break;case 17:return L.getLogger().trace("Cloud"),this.begin("NODE"),20;break;case 18:return L.getLogger().trace("Explosion Bang"),this.begin("NODE"),20;break;case 19:return L.getLogger().trace("Cloud Bang"),this.begin("NODE"),20;break;case 20:return this.begin("NODE"),20;break;case 21:return this.begin("NODE"),20;break;case 22:return this.begin("NODE"),20;break;case 23:return this.begin("NODE"),20;break;case 24:return 13;case 25:return 23;case 26:return 11;case 27:this.begin("NSTR2");break;case 28:return"NODE_DESCR";case 29:this.popState();break;case 30:L.getLogger().trace("Starting NSTR"),this.begin("NSTR");break;case 31:return L.getLogger().trace("description:",M.yytext),"NODE_DESCR";break;case 32:this.popState();break;case 33:return this.popState(),L.getLogger().trace("node end ))"),"NODE_DEND";break;case 34:return this.popState(),L.getLogger().trace("node end )"),"NODE_DEND";break;case 35:return this.popState(),L.getLogger().trace("node end ...",M.yytext),"NODE_DEND";break;case 36:return this.popState(),L.getLogger().trace("node end (("),"NODE_DEND";break;case 37:return this.popState(),L.getLogger().trace("node end (-"),"NODE_DEND";break;case 38:return this.popState(),L.getLogger().trace("node end (-"),"NODE_DEND";break;case 39:return this.popState(),L.getLogger().trace("node end (("),"NODE_DEND";break;case 40:return this.popState(),L.getLogger().trace("node end (("),"NODE_DEND";break;case 41:return L.getLogger().trace("Long description:",M.yytext),21;break;case 42:return L.getLogger().trace("Long description:",M.yytext),21;break}},"anonymous"),rules:[/^(?:@\{)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^\"]+)/i,/^(?:[^}^"]+)/i,/^(?:\})/i,/^(?:\s*%%.*)/i,/^(?:kanban\b)/i,/^(?::::)/i,/^(?:.+)/i,/^(?:\n)/i,/^(?:::icon\()/i,/^(?:[\s]+[\n])/i,/^(?:[\n]+)/i,/^(?:[^\)]+)/i,/^(?:\))/i,/^(?:-\))/i,/^(?:\(-)/i,/^(?:\)\))/i,/^(?:\))/i,/^(?:\(\()/i,/^(?:\{\{)/i,/^(?:\()/i,/^(?:\[)/i,/^(?:[\s]+)/i,/^(?:[^\(\[\n\)\{\}@]+)/i,/^(?:$)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:[^"]+)/i,/^(?:["])/i,/^(?:[\)]\))/i,/^(?:[\)])/i,/^(?:[\]])/i,/^(?:\}\})/i,/^(?:\(-)/i,/^(?:-\))/i,/^(?:\(\()/i,/^(?:\()/i,/^(?:[^\)\]\(\}]+)/i,/^(?:.+(?!\(\())/i],conditions:{shapeDataEndBracket:{rules:[],inclusive:!1},shapeDataStr:{rules:[2,3],inclusive:!1},shapeData:{rules:[1,4,5],inclusive:!1},CLASS:{rules:[9,10],inclusive:!1},ICON:{rules:[14,15],inclusive:!1},NSTR2:{rules:[28,29],inclusive:!1},NSTR:{rules:[31,32],inclusive:!1},NODE:{rules:[27,30,33,34,35,36,37,38,39,40,41,42],inclusive:!1},INITIAL:{rules:[0,6,7,8,11,12,13,16,17,18,19,20,21,22,23,24,25,26],inclusive:!0}}};return E})();w.lexer=k;function C(){this.yy={}}return o(C,"Parser"),C.prototype=w,w.Parser=C,new C})();tH.parser=tH;tSe=tH});var nc,iH,rH,nH,Lpt,Rpt,iSe,Npt,Ipt,ka,Mpt,Opt,Ppt,Bpt,Fpt,$pt,zpt,nSe,aSe=P(()=>{"use strict";Ut();Vr();bt();wa();xb();nc=[],iH=[],rH=0,nH={},Lpt=o(()=>{nc=[],iH=[],rH=0,nH={}},"clear"),Rpt=o(t=>{if(nc.length===0)return null;let e=nc[0].level,r=null;for(let i=nc.length-1;i>=0;i--)if(nc[i].level===e&&!r&&(r=nc[i]),nc[i].levell.parentId===n.id);for(let l of s){let u={id:l.id,parentId:n.id,label:Tr(l.label??"",i),labelType:"markdown",isGroup:!1,ticket:l?.ticket,priority:l?.priority,assigned:l?.assigned,icon:l?.icon,shape:"kanbanItem",level:l.level,rx:5,ry:5,cssStyles:["text-align: left"]};e.push(u)}}return{nodes:e,edges:t,other:{},config:ge()}},"getData"),Ipt=o((t,e,r,i,n)=>{let a=ge(),s=a.mindmap?.padding??fr.mindmap.padding;switch(i){case ka.ROUNDED_RECT:case ka.RECT:case ka.HEXAGON:s*=2}let l={id:Tr(e,a)||"kbn"+rH++,level:t,label:Tr(r,a),width:a.mindmap?.maxNodeWidth??fr.mindmap.maxNodeWidth,padding:s,isGroup:!1};if(n!==void 0){let h;n.includes(` +`)?h=n+` +`:h=`{ +`+n+` +}`;let f=ud(h,{schema:cd});if(f.shape&&(f.shape!==f.shape.toLowerCase()||f.shape.includes("_")))throw new Error(`No such shape: ${f.shape}. Shape names should be lowercase.`);f?.shape&&f.shape==="kanbanItem"&&(l.shape=f?.shape),f?.label&&(l.label=f?.label),f?.icon&&(l.icon=f?.icon.toString()),f?.assigned&&(l.assigned=f?.assigned.toString()),f?.ticket&&(l.ticket=f?.ticket.toString()),f?.priority&&(l.priority=f?.priority)}let u=Rpt(t);u?l.parentId=u.id||"kbn"+rH++:iH.push(l),nc.push(l)},"addNode"),ka={DEFAULT:0,NO_BORDER:0,ROUNDED_RECT:1,RECT:2,CIRCLE:3,CLOUD:4,BANG:5,HEXAGON:6},Mpt=o((t,e)=>{switch(Q.debug("In get type",t,e),t){case"[":return ka.RECT;case"(":return e===")"?ka.ROUNDED_RECT:ka.CLOUD;case"((":return ka.CIRCLE;case")":return ka.CLOUD;case"))":return ka.BANG;case"{{":return ka.HEXAGON;default:return ka.DEFAULT}},"getType"),Opt=o((t,e)=>{nH[t]=e},"setElementForId"),Ppt=o(t=>{if(!t)return;let e=ge(),r=nc[nc.length-1];t.icon&&(r.icon=Tr(t.icon,e)),t.class&&(r.cssClasses=Tr(t.class,e))},"decorateNode"),Bpt=o(t=>{switch(t){case ka.DEFAULT:return"no-border";case ka.RECT:return"rect";case ka.ROUNDED_RECT:return"rounded-rect";case ka.CIRCLE:return"circle";case ka.CLOUD:return"cloud";case ka.BANG:return"bang";case ka.HEXAGON:return"hexgon";default:return"no-border"}},"type2Str"),Fpt=o(()=>Q,"getLogger"),$pt=o(t=>nH[t],"getElementById"),zpt={clear:Lpt,addNode:Ipt,getSections:iSe,getData:Npt,nodeType:ka,getType:Mpt,setElementForId:Opt,decorateNode:Ppt,type2Str:Bpt,getLogger:Fpt,getElementById:$pt},nSe=zpt});var Gpt,sSe,oSe=P(()=>{"use strict";Ut();bt();ro();Xi();wa();A5();B5();Gpt=o(async(t,e,r,i)=>{Q.debug(`Rendering kanban diagram +`+t);let a=i.db.getData(),s=ge();s.htmlLabels=!1;let l=Fi(e);for(let v of a.nodes)v.domId=`${e}-${v.id}`;let u=l.append("g");u.attr("class","sections");let h=l.append("g");h.attr("class","items");let f=a.nodes.filter(v=>v.isGroup),d=0,p=10,m=[],g=25;for(let v of f){let x=s?.kanban?.sectionWidth||200;d=d+1,v.x=x*d+(d-1)*p/2,v.width=x,v.y=0,v.height=x*3,v.rx=5,v.ry=5,v.cssClasses=v.cssClasses+" section-"+d;let b=await N1(u,v);g=Math.max(g,b?.labelBBox?.height),m.push(b)}let y=0;for(let v of f){let x=m[y];y=y+1;let b=s?.kanban?.sectionWidth||200,T=-b*3/2+g,w=T,k=a.nodes.filter(S=>S.parentId===v.id);for(let S of k){if(S.isGroup)throw new Error("Groups within groups are not allowed in Kanban diagrams");S.x=v.x,S.width=b-1.5*p;let M=(await I1(h,S,{config:s})).node().getBBox();S.y=w+M.height/2,await Mb(S),w=S.y+M.height/2+p/2}let C=x.cluster.select("rect"),E=Math.max(w-T+3*p,50)+(g-25);C.attr("height",E)}El(void 0,l,s.mindmap?.padding??fr.kanban.padding,s.mindmap?.useMaxWidth??fr.kanban.useMaxWidth)},"draw"),sSe={draw:Gpt}});var Vpt,qpt,lSe,cSe=P(()=>{"use strict";Yn();wy();Vpt=o(t=>{let e="";for(let i=0;it.darkMode?Ye(i,n):Ke(i,n),"adjuster");for(let i=0;i` + .edge { + stroke-width: 3; + } + ${Vpt(t)} + .section-root rect, .section-root path, .section-root circle, .section-root polygon { + fill: ${t.git0}; + } + .section-root text { + fill: ${t.gitBranchLabel0}; + } + .icon-container { + height:100%; + display: flex; + justify-content: center; + align-items: center; + } + .edge { + fill: none; + } + .cluster-label, .label { + color: ${t.textColor}; + fill: ${t.textColor}; + } + .kanban-label { + dy: 1em; + alignment-baseline: middle; + text-anchor: middle; + dominant-baseline: middle; + text-align: center; + } + ${qu()} +`,"getStyles"),lSe=qpt});var uSe={};ur(uSe,{diagram:()=>Wpt});var Wpt,hSe=P(()=>{"use strict";rSe();aSe();oSe();cSe();Wpt={db:nSe,renderer:sSe,parser:tSe,styles:lSe}});var aH,$C,pSe=P(()=>{"use strict";aH=(function(){var t=o(function(l,u,h,f){for(h=h||{},f=l.length;f--;h[l[f]]=u);return h},"o"),e=[1,9],r=[1,10],i=[1,5,10,12],n={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SANKEY:4,NEWLINE:5,csv:6,opt_eof:7,record:8,csv_tail:9,EOF:10,"field[source]":11,COMMA:12,"field[target]":13,"field[value]":14,field:15,escaped:16,non_escaped:17,DQUOTE:18,ESCAPED_TEXT:19,NON_ESCAPED_TEXT:20,$accept:0,$end:1},terminals_:{2:"error",4:"SANKEY",5:"NEWLINE",10:"EOF",11:"field[source]",12:"COMMA",13:"field[target]",14:"field[value]",18:"DQUOTE",19:"ESCAPED_TEXT",20:"NON_ESCAPED_TEXT"},productions_:[0,[3,4],[6,2],[9,2],[9,0],[7,1],[7,0],[8,5],[15,1],[15,1],[16,3],[17,1]],performAction:o(function(u,h,f,d,p,m,g){var y=m.length-1;switch(p){case 7:let v=d.findOrCreateNode(m[y-4].trim().replaceAll('""','"')),x=d.findOrCreateNode(m[y-2].trim().replaceAll('""','"')),b=parseFloat(m[y].trim());d.addLink(v,x,b);break;case 8:case 9:case 11:this.$=m[y];break;case 10:this.$=m[y-1];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},{5:[1,3]},{6:4,8:5,15:6,16:7,17:8,18:e,20:r},{1:[2,6],7:11,10:[1,12]},t(r,[2,4],{9:13,5:[1,14]}),{12:[1,15]},t(i,[2,8]),t(i,[2,9]),{19:[1,16]},t(i,[2,11]),{1:[2,1]},{1:[2,5]},t(r,[2,2]),{6:17,8:5,15:6,16:7,17:8,18:e,20:r},{15:18,16:7,17:8,18:e,20:r},{18:[1,19]},t(r,[2,3]),{12:[1,20]},t(i,[2,10]),{15:21,16:7,17:8,18:e,20:r},t([1,5,10],[2,7])],defaultActions:{11:[2,1],12:[2,5]},parseError:o(function(u,h){if(h.recoverable)this.trace(u);else{var f=new Error(u);throw f.hash=h,f}},"parseError"),parse:o(function(u){var h=this,f=[0],d=[],p=[null],m=[],g=this.table,y="",v=0,x=0,b=0,T=2,w=1,k=m.slice.call(arguments,1),C=Object.create(this.lexer),E={yy:{}};for(var S in this.yy)Object.prototype.hasOwnProperty.call(this.yy,S)&&(E.yy[S]=this.yy[S]);C.setInput(u,E.yy),E.yy.lexer=C,E.yy.parser=this,typeof C.yylloc>"u"&&(C.yylloc={});var L=C.yylloc;m.push(L);var M=C.options&&C.options.ranges;typeof E.yy.parseError=="function"?this.parseError=E.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function I(W){f.length=f.length-2*W,p.length=p.length-W,m.length=m.length-W}o(I,"popStack");function A(){var W;return W=d.pop()||C.lex()||w,typeof W!="number"&&(W instanceof Array&&(d=W,W=d.pop()),W=h.symbols_[W]||W),W}o(A,"lex");for(var _,D,N,R,B,O,$={},z,F,V,H;;){if(N=f[f.length-1],this.defaultActions[N]?R=this.defaultActions[N]:((_===null||typeof _>"u")&&(_=A()),R=g[N]&&g[N][_]),typeof R>"u"||!R.length||!R[0]){var X="";H=[];for(z in g[N])this.terminals_[z]&&z>T&&H.push("'"+this.terminals_[z]+"'");C.showPosition?X="Parse error on line "+(v+1)+`: +`+C.showPosition()+` +Expecting `+H.join(", ")+", got '"+(this.terminals_[_]||_)+"'":X="Parse error on line "+(v+1)+": Unexpected "+(_==w?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(X,{text:C.match,token:this.terminals_[_]||_,line:C.yylineno,loc:L,expected:H})}if(R[0]instanceof Array&&R.length>1)throw new Error("Parse Error: multiple actions possible at state: "+N+", token: "+_);switch(R[0]){case 1:f.push(_),p.push(C.yytext),m.push(C.yylloc),f.push(R[1]),_=null,D?(_=D,D=null):(x=C.yyleng,y=C.yytext,v=C.yylineno,L=C.yylloc,b>0&&b--);break;case 2:if(F=this.productions_[R[1]][1],$.$=p[p.length-F],$._$={first_line:m[m.length-(F||1)].first_line,last_line:m[m.length-1].last_line,first_column:m[m.length-(F||1)].first_column,last_column:m[m.length-1].last_column},M&&($._$.range=[m[m.length-(F||1)].range[0],m[m.length-1].range[1]]),O=this.performAction.apply($,[y,x,v,E.yy,R[1],p,m].concat(k)),typeof O<"u")return O;F&&(f=f.slice(0,-1*F*2),p=p.slice(0,-1*F),m=m.slice(0,-1*F)),f.push(this.productions_[R[1]][0]),p.push($.$),m.push($._$),V=g[f[f.length-2]][f[f.length-1]],f.push(V);break;case 3:return!0}}return!0},"parse")},a=(function(){var l={EOF:1,parseError:o(function(h,f){if(this.yy.parser)this.yy.parser.parseError(h,f);else throw new Error(h)},"parseError"),setInput:o(function(u,h){return this.yy=h||this.yy||{},this._input=u,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var u=this._input[0];this.yytext+=u,this.yyleng++,this.offset++,this.match+=u,this.matched+=u;var h=u.match(/(?:\r\n?|\n).*/g);return h?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),u},"input"),unput:o(function(u){var h=u.length,f=u.split(/(?:\r\n?|\n)/g);this._input=u+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-h),this.offset-=h;var d=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),f.length-1&&(this.yylineno-=f.length-1);var p=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:f?(f.length===d.length?this.yylloc.first_column:0)+d[d.length-f.length].length-f[0].length:this.yylloc.first_column-h},this.options.ranges&&(this.yylloc.range=[p[0],p[0]+this.yyleng-h]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(u){this.unput(this.match.slice(u))},"less"),pastInput:o(function(){var u=this.matched.substr(0,this.matched.length-this.match.length);return(u.length>20?"...":"")+u.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var u=this.match;return u.length<20&&(u+=this._input.substr(0,20-u.length)),(u.substr(0,20)+(u.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var u=this.pastInput(),h=new Array(u.length+1).join("-");return u+this.upcomingInput()+` +`+h+"^"},"showPosition"),test_match:o(function(u,h){var f,d,p;if(this.options.backtrack_lexer&&(p={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(p.yylloc.range=this.yylloc.range.slice(0))),d=u[0].match(/(?:\r\n?|\n).*/g),d&&(this.yylineno+=d.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:d?d[d.length-1].length-d[d.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+u[0].length},this.yytext+=u[0],this.match+=u[0],this.matches=u,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(u[0].length),this.matched+=u[0],f=this.performAction.call(this,this.yy,this,h,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),f)return f;if(this._backtrack){for(var m in p)this[m]=p[m];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var u,h,f,d;this._more||(this.yytext="",this.match="");for(var p=this._currentRules(),m=0;mh[0].length)){if(h=f,d=m,this.options.backtrack_lexer){if(u=this.test_match(f,p[m]),u!==!1)return u;if(this._backtrack){h=!1;continue}else return!1}else if(!this.options.flex)break}return h?(u=this.test_match(h,p[d]),u!==!1?u:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var h=this.next();return h||this.lex()},"lex"),begin:o(function(h){this.conditionStack.push(h)},"begin"),popState:o(function(){var h=this.conditionStack.length-1;return h>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(h){return h=this.conditionStack.length-1-Math.abs(h||0),h>=0?this.conditionStack[h]:"INITIAL"},"topState"),pushState:o(function(h){this.begin(h)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(h,f,d,p){var m=p;switch(d){case 0:return this.pushState("csv"),4;break;case 1:return this.pushState("csv"),4;break;case 2:return 10;case 3:return 5;case 4:return 12;case 5:return this.pushState("escaped_text"),18;break;case 6:return 20;case 7:return this.popState("escaped_text"),18;break;case 8:return 19}},"anonymous"),rules:[/^(?:sankey-beta\b)/i,/^(?:sankey\b)/i,/^(?:$)/i,/^(?:((\u000D\u000A)|(\u000A)))/i,/^(?:(\u002C))/i,/^(?:(\u0022))/i,/^(?:([\u0020-\u0021\u0023-\u002B\u002D-\u007E])*)/i,/^(?:(\u0022)(?!(\u0022)))/i,/^(?:(([\u0020-\u0021\u0023-\u002B\u002D-\u007E])|(\u002C)|(\u000D)|(\u000A)|(\u0022)(\u0022))*)/i],conditions:{csv:{rules:[2,3,4,5,6,7,8],inclusive:!1},escaped_text:{rules:[7,8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8],inclusive:!0}}};return l})();n.lexer=a;function s(){this.yy={}}return o(s,"Parser"),s.prototype=n,n.Parser=s,new s})();aH.parser=aH;$C=aH});var H_,Y_,U_,jpt,sH,Xpt,oH,Kpt,Qpt,Zpt,Jpt,mSe,gSe=P(()=>{"use strict";Ut();Vr();Ki();H_=[],Y_=[],U_=new Map,jpt=o(()=>{H_=[],Y_=[],U_=new Map,wr()},"clear"),sH=class{constructor(e,r,i=0){this.source=e;this.target=r;this.value=i}static{o(this,"SankeyLink")}},Xpt=o((t,e,r)=>{H_.push(new sH(t,e,r))},"addLink"),oH=class{constructor(e){this.ID=e}static{o(this,"SankeyNode")}},Kpt=o(t=>{t=lt.sanitizeText(t,ge());let e=U_.get(t);return e===void 0&&(e=new oH(t),U_.set(t,e),Y_.push(e)),e},"findOrCreateNode"),Qpt=o(()=>Y_,"getNodes"),Zpt=o(()=>H_,"getLinks"),Jpt=o(()=>({nodes:Y_.map(t=>({id:t.ID})),links:H_.map(t=>({source:t.source.ID,target:t.target.ID,value:t.value}))}),"getGraph"),mSe={nodesMap:U_,getConfig:o(()=>ge().sankey,"getConfig"),getNodes:Qpt,getLinks:Zpt,getGraph:Jpt,addLink:Xpt,findOrCreateNode:Kpt,getAccTitle:Dr,setAccTitle:Ar,getAccDescription:Rr,setAccDescription:Lr,getDiagramTitle:Nr,setDiagramTitle:Mr,clear:jpt}});function zC(t,e){let r;if(e===void 0)for(let i of t)i!=null&&(r=i)&&(r=i);else{let i=-1;for(let n of t)(n=e(n,++i,t))!=null&&(r=n)&&(r=n)}return r}var ySe=P(()=>{"use strict";o(zC,"max")});function lx(t,e){let r;if(e===void 0)for(let i of t)i!=null&&(r>i||r===void 0&&i>=i)&&(r=i);else{let i=-1;for(let n of t)(n=e(n,++i,t))!=null&&(r>n||r===void 0&&n>=n)&&(r=n)}return r}var vSe=P(()=>{"use strict";o(lx,"min")});function cx(t,e){let r=0;if(e===void 0)for(let i of t)(i=+i)&&(r+=i);else{let i=-1;for(let n of t)(n=+e(n,++i,t))&&(r+=n)}return r}var xSe=P(()=>{"use strict";o(cx,"sum")});var lH=P(()=>{"use strict";ySe();vSe();xSe()});function e0t(t){return t.target.depth}function cH(t){return t.depth}function uH(t,e){return e-1-t.height}function GC(t,e){return t.sourceLinks.length?t.depth:e-1}function hH(t){return t.targetLinks.length?t.depth:t.sourceLinks.length?lx(t.sourceLinks,e0t)-1:0}var fH=P(()=>{"use strict";lH();o(e0t,"targetDepth");o(cH,"left");o(uH,"right");o(GC,"justify");o(hH,"center")});function ux(t){return function(){return t}}var bSe=P(()=>{"use strict";o(ux,"constant")});function TSe(t,e){return j_(t.source,e.source)||t.index-e.index}function kSe(t,e){return j_(t.target,e.target)||t.index-e.index}function j_(t,e){return t.y0-e.y0}function dH(t){return t.value}function t0t(t){return t.index}function r0t(t){return t.nodes}function i0t(t){return t.links}function CSe(t,e){let r=t.get(e);if(!r)throw new Error("missing: "+e);return r}function wSe({nodes:t}){for(let e of t){let r=e.y0,i=r;for(let n of e.sourceLinks)n.y0=r+n.width/2,r+=n.width;for(let n of e.targetLinks)n.y1=i+n.width/2,i+=n.width}}function X_(){let t=0,e=0,r=1,i=1,n=24,a=8,s,l=t0t,u=GC,h,f,d=r0t,p=i0t,m=6;function g(){let N={nodes:d.apply(null,arguments),links:p.apply(null,arguments)};return y(N),v(N),x(N),b(N),k(N),wSe(N),N}o(g,"sankey"),g.update=function(N){return wSe(N),N},g.nodeId=function(N){return arguments.length?(l=typeof N=="function"?N:ux(N),g):l},g.nodeAlign=function(N){return arguments.length?(u=typeof N=="function"?N:ux(N),g):u},g.nodeSort=function(N){return arguments.length?(h=N,g):h},g.nodeWidth=function(N){return arguments.length?(n=+N,g):n},g.nodePadding=function(N){return arguments.length?(a=s=+N,g):a},g.nodes=function(N){return arguments.length?(d=typeof N=="function"?N:ux(N),g):d},g.links=function(N){return arguments.length?(p=typeof N=="function"?N:ux(N),g):p},g.linkSort=function(N){return arguments.length?(f=N,g):f},g.size=function(N){return arguments.length?(t=e=0,r=+N[0],i=+N[1],g):[r-t,i-e]},g.extent=function(N){return arguments.length?(t=+N[0][0],r=+N[1][0],e=+N[0][1],i=+N[1][1],g):[[t,e],[r,i]]},g.iterations=function(N){return arguments.length?(m=+N,g):m};function y({nodes:N,links:R}){for(let[O,$]of N.entries())$.index=O,$.sourceLinks=[],$.targetLinks=[];let B=new Map(N.map((O,$)=>[l(O,$,N),O]));for(let[O,$]of R.entries()){$.index=O;let{source:z,target:F}=$;typeof z!="object"&&(z=$.source=CSe(B,z)),typeof F!="object"&&(F=$.target=CSe(B,F)),z.sourceLinks.push($),F.targetLinks.push($)}if(f!=null)for(let{sourceLinks:O,targetLinks:$}of N)O.sort(f),$.sort(f)}o(y,"computeNodeLinks");function v({nodes:N}){for(let R of N)R.value=R.fixedValue===void 0?Math.max(cx(R.sourceLinks,dH),cx(R.targetLinks,dH)):R.fixedValue}o(v,"computeNodeValues");function x({nodes:N}){let R=N.length,B=new Set(N),O=new Set,$=0;for(;B.size;){for(let z of B){z.depth=$;for(let{target:F}of z.sourceLinks)O.add(F)}if(++$>R)throw new Error("circular link");B=O,O=new Set}}o(x,"computeNodeDepths");function b({nodes:N}){let R=N.length,B=new Set(N),O=new Set,$=0;for(;B.size;){for(let z of B){z.height=$;for(let{source:F}of z.targetLinks)O.add(F)}if(++$>R)throw new Error("circular link");B=O,O=new Set}}o(b,"computeNodeHeights");function T({nodes:N}){let R=zC(N,$=>$.depth)+1,B=(r-t-n)/(R-1),O=new Array(R);for(let $ of N){let z=Math.max(0,Math.min(R-1,Math.floor(u.call(null,$,R))));$.layer=z,$.x0=t+z*B,$.x1=$.x0+n,O[z]?O[z].push($):O[z]=[$]}if(h)for(let $ of O)$.sort(h);return O}o(T,"computeNodeLayers");function w(N){let R=lx(N,B=>(i-e-(B.length-1)*s)/cx(B,dH));for(let B of N){let O=e;for(let $ of B){$.y0=O,$.y1=O+$.value*R,O=$.y1+s;for(let z of $.sourceLinks)z.width=z.value*R}O=(i-O+s)/(B.length+1);for(let $=0;$B.length)-1)),w(R);for(let B=0;B0))continue;let X=(V/H-F.y0)*R;F.y0+=X,F.y1+=X,I(F)}h===void 0&&z.sort(j_),S(z,B)}}o(C,"relaxLeftToRight");function E(N,R,B){for(let O=N.length,$=O-2;$>=0;--$){let z=N[$];for(let F of z){let V=0,H=0;for(let{target:W,value:Z}of F.sourceLinks){let Y=Z*(W.layer-F.layer);V+=D(F,W)*Y,H+=Y}if(!(H>0))continue;let X=(V/H-F.y0)*R;F.y0+=X,F.y1+=X,I(F)}h===void 0&&z.sort(j_),S(z,B)}}o(E,"relaxRightToLeft");function S(N,R){let B=N.length>>1,O=N[B];M(N,O.y0-s,B-1,R),L(N,O.y1+s,B+1,R),M(N,i,N.length-1,R),L(N,e,0,R)}o(S,"resolveCollisions");function L(N,R,B,O){for(;B1e-6&&($.y0+=z,$.y1+=z),R=$.y1+s}}o(L,"resolveCollisionsTopToBottom");function M(N,R,B,O){for(;B>=0;--B){let $=N[B],z=($.y1-R)*O;z>1e-6&&($.y0-=z,$.y1-=z),R=$.y0-s}}o(M,"resolveCollisionsBottomToTop");function I({sourceLinks:N,targetLinks:R}){if(f===void 0){for(let{source:{sourceLinks:B}}of R)B.sort(kSe);for(let{target:{targetLinks:B}}of N)B.sort(TSe)}}o(I,"reorderNodeLinks");function A(N){if(f===void 0)for(let{sourceLinks:R,targetLinks:B}of N)R.sort(kSe),B.sort(TSe)}o(A,"reorderLinks");function _(N,R){let B=N.y0-(N.sourceLinks.length-1)*s/2;for(let{target:O,width:$}of N.sourceLinks){if(O===R)break;B+=$+s}for(let{source:O,width:$}of R.targetLinks){if(O===N)break;B-=$}return B}o(_,"targetTop");function D(N,R){let B=R.y0-(R.targetLinks.length-1)*s/2;for(let{source:O,width:$}of R.targetLinks){if(O===N)break;B+=$+s}for(let{target:O,width:$}of N.sourceLinks){if(O===R)break;B-=$}return B}return o(D,"sourceTop"),g}var ESe=P(()=>{"use strict";lH();fH();bSe();o(TSe,"ascendingSourceBreadth");o(kSe,"ascendingTargetBreadth");o(j_,"ascendingBreadth");o(dH,"value");o(t0t,"defaultId");o(r0t,"defaultNodes");o(i0t,"defaultLinks");o(CSe,"find");o(wSe,"computeLinkBreadths");o(X_,"Sankey")});function gH(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function SSe(){return new gH}var pH,mH,pg,n0t,yH,ASe=P(()=>{"use strict";pH=Math.PI,mH=2*pH,pg=1e-6,n0t=mH-pg;o(gH,"Path");o(SSe,"path");gH.prototype=SSe.prototype={constructor:gH,moveTo:o(function(t,e){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)},"moveTo"),closePath:o(function(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},"closePath"),lineTo:o(function(t,e){this._+="L"+(this._x1=+t)+","+(this._y1=+e)},"lineTo"),quadraticCurveTo:o(function(t,e,r,i){this._+="Q"+ +t+","+ +e+","+(this._x1=+r)+","+(this._y1=+i)},"quadraticCurveTo"),bezierCurveTo:o(function(t,e,r,i,n,a){this._+="C"+ +t+","+ +e+","+ +r+","+ +i+","+(this._x1=+n)+","+(this._y1=+a)},"bezierCurveTo"),arcTo:o(function(t,e,r,i,n){t=+t,e=+e,r=+r,i=+i,n=+n;var a=this._x1,s=this._y1,l=r-t,u=i-e,h=a-t,f=s-e,d=h*h+f*f;if(n<0)throw new Error("negative radius: "+n);if(this._x1===null)this._+="M"+(this._x1=t)+","+(this._y1=e);else if(d>pg)if(!(Math.abs(f*l-u*h)>pg)||!n)this._+="L"+(this._x1=t)+","+(this._y1=e);else{var p=r-a,m=i-s,g=l*l+u*u,y=p*p+m*m,v=Math.sqrt(g),x=Math.sqrt(d),b=n*Math.tan((pH-Math.acos((g+d-y)/(2*v*x)))/2),T=b/x,w=b/v;Math.abs(T-1)>pg&&(this._+="L"+(t+T*h)+","+(e+T*f)),this._+="A"+n+","+n+",0,0,"+ +(f*p>h*m)+","+(this._x1=t+w*l)+","+(this._y1=e+w*u)}},"arcTo"),arc:o(function(t,e,r,i,n,a){t=+t,e=+e,r=+r,a=!!a;var s=r*Math.cos(i),l=r*Math.sin(i),u=t+s,h=e+l,f=1^a,d=a?i-n:n-i;if(r<0)throw new Error("negative radius: "+r);this._x1===null?this._+="M"+u+","+h:(Math.abs(this._x1-u)>pg||Math.abs(this._y1-h)>pg)&&(this._+="L"+u+","+h),r&&(d<0&&(d=d%mH+mH),d>n0t?this._+="A"+r+","+r+",0,1,"+f+","+(t-s)+","+(e-l)+"A"+r+","+r+",0,1,"+f+","+(this._x1=u)+","+(this._y1=h):d>pg&&(this._+="A"+r+","+r+",0,"+ +(d>=pH)+","+f+","+(this._x1=t+r*Math.cos(n))+","+(this._y1=e+r*Math.sin(n))))},"arc"),rect:o(function(t,e,r,i){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)+"h"+ +r+"v"+ +i+"h"+-r+"Z"},"rect"),toString:o(function(){return this._},"toString")};yH=SSe});var _Se=P(()=>{"use strict";ASe()});function K_(t){return o(function(){return t},"constant")}var DSe=P(()=>{"use strict";o(K_,"default")});function LSe(t){return t[0]}function RSe(t){return t[1]}var NSe=P(()=>{"use strict";o(LSe,"x");o(RSe,"y")});var ISe,MSe=P(()=>{"use strict";ISe=Array.prototype.slice});function a0t(t){return t.source}function s0t(t){return t.target}function o0t(t){var e=a0t,r=s0t,i=LSe,n=RSe,a=null;function s(){var l,u=ISe.call(arguments),h=e.apply(this,u),f=r.apply(this,u);if(a||(a=l=yH()),t(a,+i.apply(this,(u[0]=h,u)),+n.apply(this,u),+i.apply(this,(u[0]=f,u)),+n.apply(this,u)),l)return a=null,l+""||null}return o(s,"link"),s.source=function(l){return arguments.length?(e=l,s):e},s.target=function(l){return arguments.length?(r=l,s):r},s.x=function(l){return arguments.length?(i=typeof l=="function"?l:K_(+l),s):i},s.y=function(l){return arguments.length?(n=typeof l=="function"?l:K_(+l),s):n},s.context=function(l){return arguments.length?(a=l??null,s):a},s}function l0t(t,e,r,i,n){t.moveTo(e,r),t.bezierCurveTo(e=(e+i)/2,r,e,n,i,n)}function vH(){return o0t(l0t)}var OSe=P(()=>{"use strict";_Se();MSe();DSe();NSe();o(a0t,"linkSource");o(s0t,"linkTarget");o(o0t,"link");o(l0t,"curveHorizontal");o(vH,"linkHorizontal")});var PSe=P(()=>{"use strict";OSe()});function c0t(t){return[t.source.x1,t.y0]}function u0t(t){return[t.target.x0,t.y1]}function Q_(){return vH().source(c0t).target(u0t)}var BSe=P(()=>{"use strict";PSe();o(c0t,"horizontalSource");o(u0t,"horizontalTarget");o(Q_,"default")});var FSe=P(()=>{"use strict";ESe();fH();BSe()});var VC,$Se=P(()=>{"use strict";VC=class t{static{o(this,"Uid")}static{this.count=0}static next(e){return new t(e+ ++t.count)}constructor(e){this.id=e,this.href=`#${e}`}toString(){return"url("+this.href+")"}}});var h0t,f0t,zSe,GSe=P(()=>{"use strict";Ut();Pr();FSe();Xi();$Se();h0t={left:cH,right:uH,center:hH,justify:GC},f0t=o(function(t,e,r,i){let{securityLevel:n,sankey:a}=ge(),s=iw.sankey,l;n==="sandbox"&&(l=Ze("#i"+e));let u=n==="sandbox"?Ze(l.nodes()[0].contentDocument.body):Ze("body"),h=n==="sandbox"?u.select(`[id="${e}"]`):Ze(`[id="${e}"]`),f=a?.width??s.width,d=a?.height??s.width,p=a?.useMaxWidth??s.useMaxWidth,m=a?.nodeAlignment??s.nodeAlignment,g=a?.prefix??s.prefix,y=a?.suffix??s.suffix,v=a?.showValues??s.showValues,x=i.db.getGraph(),b=h0t[m];X_().nodeId(M=>M.id).nodeWidth(10).nodePadding(10+(v?15:0)).nodeAlign(b).extent([[0,0],[f,d]])(x);let k=jo(SN);h.append("g").attr("class","nodes").selectAll(".node").data(x.nodes).join("g").attr("class","node").attr("id",M=>(M.uid=VC.next("node-")).id).attr("transform",function(M){return"translate("+M.x0+","+M.y0+")"}).attr("x",M=>M.x0).attr("y",M=>M.y0).append("rect").attr("height",M=>M.y1-M.y0).attr("width",M=>M.x1-M.x0).attr("fill",M=>k(M.id));let C=o(({id:M,value:I})=>v?`${M} +${g}${Math.round(I*100)/100}${y}`:M,"getText");h.append("g").attr("class","node-labels").attr("font-size",14).selectAll("text").data(x.nodes).join("text").attr("x",M=>M.x0(M.y1+M.y0)/2).attr("dy",`${v?"0":"0.35"}em`).attr("text-anchor",M=>M.x0(I.uid=VC.next("linearGradient-")).id).attr("gradientUnits","userSpaceOnUse").attr("x1",I=>I.source.x1).attr("x2",I=>I.target.x0);M.append("stop").attr("offset","0%").attr("stop-color",I=>k(I.source.id)),M.append("stop").attr("offset","100%").attr("stop-color",I=>k(I.target.id))}let L;switch(S){case"gradient":L=o(M=>M.uid,"coloring");break;case"source":L=o(M=>k(M.source.id),"coloring");break;case"target":L=o(M=>k(M.target.id),"coloring");break;default:L=S}E.append("path").attr("d",Q_()).attr("stroke",L).attr("stroke-width",M=>Math.max(1,M.width)),El(void 0,h,0,p)},"draw"),zSe={draw:f0t}});var VSe,qSe=P(()=>{"use strict";VSe=o(t=>t.replaceAll(/^[^\S\n\r]+|[^\S\n\r]+$/g,"").replaceAll(/([\n\r])+/g,` +`).trim(),"prepareTextForParsing")});var d0t,WSe,USe=P(()=>{"use strict";d0t=o(t=>`.label { + font-family: ${t.fontFamily}; + }`,"getStyles"),WSe=d0t});var HSe={};ur(HSe,{diagram:()=>m0t});var p0t,m0t,YSe=P(()=>{"use strict";pSe();gSe();GSe();qSe();USe();p0t=$C.parse.bind($C);$C.parse=t=>p0t(VSe(t));m0t={styles:WSe,parser:$C,db:mSe,renderer:zSe}});var x0t,hx,xH=P(()=>{"use strict";Sr();wa();er();Ki();x0t=fr.packet,hx=class{constructor(){this.packet=[];this.setAccTitle=Ar;this.getAccTitle=Dr;this.setDiagramTitle=Mr;this.getDiagramTitle=Nr;this.getAccDescription=Rr;this.setAccDescription=Lr}static{o(this,"PacketDB")}getConfig(){let e=fi({...x0t,...Lt().packet});return e.showBits&&(e.paddingY+=10),e}getPacket(){return this.packet}pushWord(e){e.length>0&&this.packet.push(e)}clear(){wr(),this.packet=[]}}});var b0t,T0t,k0t,bH,KSe=P(()=>{"use strict";sh();bt();vf();xH();b0t=1e4,T0t=o((t,e)=>{Ss(t,e);let r=-1,i=[],n=1,{bitsPerRow:a}=e.getConfig();for(let{start:s,end:l,bits:u,label:h}of t.blocks){if(s!==void 0&&l!==void 0&&l{if(t.start===void 0)throw new Error("start should have been set during first phase");if(t.end===void 0)throw new Error("end should have been set during first phase");if(t.start>t.end)throw new Error(`Block start ${t.start} is greater than block end ${t.end}.`);if(t.end+1<=e*r)return[t,void 0];let i=e*r-1,n=e*r;return[{start:t.start,end:i,label:t.label,bits:i-t.start},{start:n,end:t.end,label:t.label,bits:t.end-n}]},"getNextFittingBlock"),bH={parser:{yy:void 0},parse:o(async t=>{let e=await ba("packet",t),r=bH.parser?.yy;if(!(r instanceof hx))throw new Error("parser.parser?.yy was not a PacketDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues.");Q.debug(e),T0t(e,r)},"parse")}});var C0t,w0t,QSe,ZSe=P(()=>{"use strict";ro();Xi();C0t=o((t,e,r,i)=>{let n=i.db,a=n.getConfig(),{rowHeight:s,paddingY:l,bitWidth:u,bitsPerRow:h}=a,f=n.getPacket(),d=n.getDiagramTitle(),p=s+l,m=p*(f.length+1)-(d?0:s),g=u*h+2,y=Fi(e);y.attr("viewBox",`0 0 ${g} ${m}`),Hr(y,m,g,a.useMaxWidth);for(let[v,x]of f.entries())w0t(y,x,v,a);y.append("text").text(d).attr("x",g/2).attr("y",m-p/2).attr("dominant-baseline","middle").attr("text-anchor","middle").attr("class","packetTitle")},"draw"),w0t=o((t,e,r,{rowHeight:i,paddingX:n,paddingY:a,bitWidth:s,bitsPerRow:l,showBits:u})=>{let h=t.append("g"),f=r*(i+a)+a;for(let d of e){let p=d.start%l*s+1,m=(d.end-d.start+1)*s-n;if(h.append("rect").attr("x",p).attr("y",f).attr("width",m).attr("height",i).attr("class","packetBlock"),h.append("text").attr("x",p+m/2).attr("y",f+i/2).attr("class","packetLabel").attr("dominant-baseline","middle").attr("text-anchor","middle").text(d.label),!u)continue;let g=d.end===d.start,y=f-2;h.append("text").attr("x",p+(g?m/2:0)).attr("y",y).attr("class","packetByte start").attr("dominant-baseline","auto").attr("text-anchor",g?"middle":"start").text(d.start),g||h.append("text").attr("x",p+m).attr("y",y).attr("class","packetByte end").attr("dominant-baseline","auto").attr("text-anchor","end").text(d.end)}},"drawWord"),QSe={draw:C0t}});var E0t,JSe,e6e=P(()=>{"use strict";er();E0t={byteFontSize:"10px",startByteColor:"black",endByteColor:"black",labelColor:"black",labelFontSize:"12px",titleColor:"black",titleFontSize:"14px",blockStrokeColor:"black",blockStrokeWidth:"1",blockFillColor:"#efefef"},JSe=o(({packet:t}={})=>{let e=fi(E0t,t);return` + .packetByte { + font-size: ${e.byteFontSize}; + } + .packetByte.start { + fill: ${e.startByteColor}; + } + .packetByte.end { + fill: ${e.endByteColor}; + } + .packetLabel { + fill: ${e.labelColor}; + font-size: ${e.labelFontSize}; + } + .packetTitle { + fill: ${e.titleColor}; + font-size: ${e.titleFontSize}; + } + .packetBlock { + stroke: ${e.blockStrokeColor}; + stroke-width: ${e.blockStrokeWidth}; + fill: ${e.blockFillColor}; + } + `},"styles")});var t6e={};ur(t6e,{diagram:()=>S0t});var S0t,r6e=P(()=>{"use strict";xH();KSe();ZSe();e6e();S0t={parser:bH,get db(){return new hx},renderer:QSe,styles:JSe}});var fx,a6e,mg,D0t,L0t,s6e,R0t,N0t,I0t,M0t,O0t,P0t,B0t,gg,TH=P(()=>{"use strict";Sr();wa();er();Ki();fx={showLegend:!0,ticks:5,max:null,min:0,graticule:"circle"},a6e={axes:[],curves:[],options:fx},mg=structuredClone(a6e),D0t=fr.radar,L0t=o(()=>fi({...D0t,...Lt().radar}),"getConfig"),s6e=o(()=>mg.axes,"getAxes"),R0t=o(()=>mg.curves,"getCurves"),N0t=o(()=>mg.options,"getOptions"),I0t=o(t=>{mg.axes=t.map(e=>({name:e.name,label:e.label??e.name}))},"setAxes"),M0t=o(t=>{mg.curves=t.map(e=>({name:e.name,label:e.label??e.name,entries:O0t(e.entries)}))},"setCurves"),O0t=o(t=>{if(t[0].axis==null)return t.map(r=>r.value);let e=s6e();if(e.length===0)throw new Error("Axes must be populated before curves for reference entries");return e.map(r=>{let i=t.find(n=>n.axis?.$refText===r.name);if(i===void 0)throw new Error("Missing entry for axis "+r.label);return i.value})},"computeCurveEntries"),P0t=o(t=>{let e=t.reduce((r,i)=>(r[i.name]=i,r),{});mg.options={showLegend:e.showLegend?.value??fx.showLegend,ticks:e.ticks?.value??fx.ticks,max:e.max?.value??fx.max,min:e.min?.value??fx.min,graticule:e.graticule?.value??fx.graticule}},"setOptions"),B0t=o(()=>{wr(),mg=structuredClone(a6e)},"clear"),gg={getAxes:s6e,getCurves:R0t,getOptions:N0t,setAxes:I0t,setCurves:M0t,setOptions:P0t,getConfig:L0t,clear:B0t,setAccTitle:Ar,getAccTitle:Dr,setDiagramTitle:Mr,getDiagramTitle:Nr,getAccDescription:Rr,setAccDescription:Lr}});var F0t,o6e,l6e=P(()=>{"use strict";sh();bt();vf();TH();F0t=o(t=>{Ss(t,gg);let{axes:e,curves:r,options:i}=t;gg.setAxes(e),gg.setCurves(r),gg.setOptions(i)},"populate"),o6e={parse:o(async t=>{let e=await ba("radar",t);Q.debug(e),F0t(e)},"parse")}});function q0t(t,e,r,i,n,a,s){let l=e.length,u=Math.min(s.width,s.height)/2;r.forEach((h,f)=>{if(h.entries.length!==l)return;let d=h.entries.map((p,m)=>{let g=2*Math.PI*m/l-Math.PI/2,y=W0t(p,i,n,u),v=y*Math.cos(g),x=y*Math.sin(g);return{x:v,y:x}});a==="circle"?t.append("path").attr("d",U0t(d,s.curveTension)).attr("class",`radarCurve-${f}`):a==="polygon"&&t.append("polygon").attr("points",d.map(p=>`${p.x},${p.y}`).join(" ")).attr("class",`radarCurve-${f}`)})}function W0t(t,e,r,i){let n=Math.min(Math.max(t,e),r);return i*(n-e)/(r-e)}function U0t(t,e){let r=t.length,i=`M${t[0].x},${t[0].y}`;for(let n=0;n{let h=t.append("g").attr("transform",`translate(${n}, ${a+u*s})`);h.append("rect").attr("width",12).attr("height",12).attr("class",`radarLegendBox-${u}`),h.append("text").attr("x",16).attr("y",0).attr("class","radarLegendText").text(l.label)})}var $0t,z0t,G0t,V0t,c6e,u6e=P(()=>{"use strict";ro();Xi();$0t=o((t,e,r,i)=>{let n=i.db,a=n.getAxes(),s=n.getCurves(),l=n.getOptions(),u=n.getConfig(),h=n.getDiagramTitle(),f=Fi(e),d=z0t(f,u),p=l.max??Math.max(...s.map(y=>Math.max(...y.entries))),m=l.min,g=Math.min(u.width,u.height)/2;G0t(d,a,g,l.ticks,l.graticule),V0t(d,a,g,u),q0t(d,a,s,m,p,l.graticule,u),H0t(d,s,l.showLegend,u),d.append("text").attr("class","radarTitle").text(h).attr("x",0).attr("y",-u.height/2-u.marginTop)},"draw"),z0t=o((t,e)=>{let r=e.width+e.marginLeft+e.marginRight,i=e.height+e.marginTop+e.marginBottom,n={x:e.marginLeft+e.width/2,y:e.marginTop+e.height/2};return Hr(t,i,r,e.useMaxWidth??!0),t.attr("viewBox",`0 0 ${r} ${i}`),t.append("g").attr("transform",`translate(${n.x}, ${n.y})`)},"drawFrame"),G0t=o((t,e,r,i,n)=>{if(n==="circle")for(let a=0;a{let d=2*f*Math.PI/a-Math.PI/2,p=l*Math.cos(d),m=l*Math.sin(d);return`${p},${m}`}).join(" ");t.append("polygon").attr("points",u).attr("class","radarGraticule")}}},"drawGraticule"),V0t=o((t,e,r,i)=>{let n=e.length;for(let a=0;a{"use strict";er();wg();Sr();Y0t=o((t,e)=>{let r="";for(let i=0;i{let e=Zc(),r=Lt(),i=fi(e,r.themeVariables),n=fi(i.radar,t);return{themeVariables:i,radarOptions:n}},"buildRadarStyleOptions"),h6e=o(({radar:t}={})=>{let{themeVariables:e,radarOptions:r}=j0t(t);return` + .radarTitle { + font-size: ${e.fontSize}; + color: ${e.titleColor}; + dominant-baseline: hanging; + text-anchor: middle; + } + .radarAxisLine { + stroke: ${r.axisColor}; + stroke-width: ${r.axisStrokeWidth}; + } + .radarAxisLabel { + dominant-baseline: middle; + text-anchor: middle; + font-size: ${r.axisLabelFontSize}px; + color: ${r.axisColor}; + } + .radarGraticule { + fill: ${r.graticuleColor}; + fill-opacity: ${r.graticuleOpacity}; + stroke: ${r.graticuleColor}; + stroke-width: ${r.graticuleStrokeWidth}; + } + .radarLegendText { + text-anchor: start; + font-size: ${r.legendFontSize}px; + dominant-baseline: hanging; + } + ${Y0t(e,r)} + `},"styles")});var d6e={};ur(d6e,{diagram:()=>X0t});var X0t,p6e=P(()=>{"use strict";TH();l6e();u6e();f6e();X0t={parser:o6e,db:gg,renderer:c6e,styles:h6e}});var kH,y6e,v6e=P(()=>{"use strict";kH=(function(){var t=o(function(T,w,k,C){for(k=k||{},C=T.length;C--;k[T[C]]=w);return k},"o"),e=[1,15],r=[1,7],i=[1,13],n=[1,14],a=[1,19],s=[1,16],l=[1,17],u=[1,18],h=[8,30],f=[8,10,21,28,29,30,31,39,43,46],d=[1,23],p=[1,24],m=[8,10,15,16,21,28,29,30,31,39,43,46],g=[8,10,15,16,21,27,28,29,30,31,39,43,46],y=[1,49],v={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,spaceLines:3,SPACELINE:4,NL:5,separator:6,SPACE:7,EOF:8,start:9,BLOCK_DIAGRAM_KEY:10,document:11,stop:12,statement:13,link:14,LINK:15,START_LINK:16,LINK_LABEL:17,STR:18,nodeStatement:19,columnsStatement:20,SPACE_BLOCK:21,blockStatement:22,classDefStatement:23,cssClassStatement:24,styleStatement:25,node:26,SIZE:27,COLUMNS:28,"id-block":29,end:30,NODE_ID:31,nodeShapeNLabel:32,dirList:33,DIR:34,NODE_DSTART:35,NODE_DEND:36,BLOCK_ARROW_START:37,BLOCK_ARROW_END:38,classDef:39,CLASSDEF_ID:40,CLASSDEF_STYLEOPTS:41,DEFAULT:42,class:43,CLASSENTITY_IDS:44,STYLECLASS:45,style:46,STYLE_ENTITY_IDS:47,STYLE_DEFINITION_DATA:48,$accept:0,$end:1},terminals_:{2:"error",4:"SPACELINE",5:"NL",7:"SPACE",8:"EOF",10:"BLOCK_DIAGRAM_KEY",15:"LINK",16:"START_LINK",17:"LINK_LABEL",18:"STR",21:"SPACE_BLOCK",27:"SIZE",28:"COLUMNS",29:"id-block",30:"end",31:"NODE_ID",34:"DIR",35:"NODE_DSTART",36:"NODE_DEND",37:"BLOCK_ARROW_START",38:"BLOCK_ARROW_END",39:"classDef",40:"CLASSDEF_ID",41:"CLASSDEF_STYLEOPTS",42:"DEFAULT",43:"class",44:"CLASSENTITY_IDS",45:"STYLECLASS",46:"style",47:"STYLE_ENTITY_IDS",48:"STYLE_DEFINITION_DATA"},productions_:[0,[3,1],[3,2],[3,2],[6,1],[6,1],[6,1],[9,3],[12,1],[12,1],[12,2],[12,2],[11,1],[11,2],[14,1],[14,4],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[19,3],[19,2],[19,1],[20,1],[22,4],[22,3],[26,1],[26,2],[33,1],[33,2],[32,3],[32,4],[23,3],[23,3],[24,3],[25,3]],performAction:o(function(w,k,C,E,S,L,M){var I=L.length-1;switch(S){case 4:E.getLogger().debug("Rule: separator (NL) ");break;case 5:E.getLogger().debug("Rule: separator (Space) ");break;case 6:E.getLogger().debug("Rule: separator (EOF) ");break;case 7:E.getLogger().debug("Rule: hierarchy: ",L[I-1]),E.setHierarchy(L[I-1]);break;case 8:E.getLogger().debug("Stop NL ");break;case 9:E.getLogger().debug("Stop EOF ");break;case 10:E.getLogger().debug("Stop NL2 ");break;case 11:E.getLogger().debug("Stop EOF2 ");break;case 12:E.getLogger().debug("Rule: statement: ",L[I]),typeof L[I].length=="number"?this.$=L[I]:this.$=[L[I]];break;case 13:E.getLogger().debug("Rule: statement #2: ",L[I-1]),this.$=[L[I-1]].concat(L[I]);break;case 14:E.getLogger().debug("Rule: link: ",L[I],w),this.$={edgeTypeStr:L[I],label:""};break;case 15:E.getLogger().debug("Rule: LABEL link: ",L[I-3],L[I-1],L[I]),this.$={edgeTypeStr:L[I],label:L[I-1]};break;case 18:let A=parseInt(L[I]),_=E.generateId();this.$={id:_,type:"space",label:"",width:A,children:[]};break;case 23:E.getLogger().debug("Rule: (nodeStatement link node) ",L[I-2],L[I-1],L[I]," typestr: ",L[I-1].edgeTypeStr);let D=E.edgeStrToEdgeData(L[I-1].edgeTypeStr);this.$=[{id:L[I-2].id,label:L[I-2].label,type:L[I-2].type,directions:L[I-2].directions},{id:L[I-2].id+"-"+L[I].id,start:L[I-2].id,end:L[I].id,label:L[I-1].label,type:"edge",directions:L[I].directions,arrowTypeEnd:D,arrowTypeStart:"arrow_open"},{id:L[I].id,label:L[I].label,type:E.typeStr2Type(L[I].typeStr),directions:L[I].directions}];break;case 24:E.getLogger().debug("Rule: nodeStatement (abc88 node size) ",L[I-1],L[I]),this.$={id:L[I-1].id,label:L[I-1].label,type:E.typeStr2Type(L[I-1].typeStr),directions:L[I-1].directions,widthInColumns:parseInt(L[I],10)};break;case 25:E.getLogger().debug("Rule: nodeStatement (node) ",L[I]),this.$={id:L[I].id,label:L[I].label,type:E.typeStr2Type(L[I].typeStr),directions:L[I].directions,widthInColumns:1};break;case 26:E.getLogger().debug("APA123",this?this:"na"),E.getLogger().debug("COLUMNS: ",L[I]),this.$={type:"column-setting",columns:L[I]==="auto"?-1:parseInt(L[I])};break;case 27:E.getLogger().debug("Rule: id-block statement : ",L[I-2],L[I-1]);let N=E.generateId();this.$={...L[I-2],type:"composite",children:L[I-1]};break;case 28:E.getLogger().debug("Rule: blockStatement : ",L[I-2],L[I-1],L[I]);let R=E.generateId();this.$={id:R,type:"composite",label:"",children:L[I-1]};break;case 29:E.getLogger().debug("Rule: node (NODE_ID separator): ",L[I]),this.$={id:L[I]};break;case 30:E.getLogger().debug("Rule: node (NODE_ID nodeShapeNLabel separator): ",L[I-1],L[I]),this.$={id:L[I-1],label:L[I].label,typeStr:L[I].typeStr,directions:L[I].directions};break;case 31:E.getLogger().debug("Rule: dirList: ",L[I]),this.$=[L[I]];break;case 32:E.getLogger().debug("Rule: dirList: ",L[I-1],L[I]),this.$=[L[I-1]].concat(L[I]);break;case 33:E.getLogger().debug("Rule: nodeShapeNLabel: ",L[I-2],L[I-1],L[I]),this.$={typeStr:L[I-2]+L[I],label:L[I-1]};break;case 34:E.getLogger().debug("Rule: BLOCK_ARROW nodeShapeNLabel: ",L[I-3],L[I-2]," #3:",L[I-1],L[I]),this.$={typeStr:L[I-3]+L[I],label:L[I-2],directions:L[I-1]};break;case 35:case 36:this.$={type:"classDef",id:L[I-1].trim(),css:L[I].trim()};break;case 37:this.$={type:"applyClass",id:L[I-1].trim(),styleClass:L[I].trim()};break;case 38:this.$={type:"applyStyles",id:L[I-1].trim(),stylesStr:L[I].trim()};break}},"anonymous"),table:[{9:1,10:[1,2]},{1:[3]},{10:e,11:3,13:4,19:5,20:6,21:r,22:8,23:9,24:10,25:11,26:12,28:i,29:n,31:a,39:s,43:l,46:u},{8:[1,20]},t(h,[2,12],{13:4,19:5,20:6,22:8,23:9,24:10,25:11,26:12,11:21,10:e,21:r,28:i,29:n,31:a,39:s,43:l,46:u}),t(f,[2,16],{14:22,15:d,16:p}),t(f,[2,17]),t(f,[2,18]),t(f,[2,19]),t(f,[2,20]),t(f,[2,21]),t(f,[2,22]),t(m,[2,25],{27:[1,25]}),t(f,[2,26]),{19:26,26:12,31:a},{10:e,11:27,13:4,19:5,20:6,21:r,22:8,23:9,24:10,25:11,26:12,28:i,29:n,31:a,39:s,43:l,46:u},{40:[1,28],42:[1,29]},{44:[1,30]},{47:[1,31]},t(g,[2,29],{32:32,35:[1,33],37:[1,34]}),{1:[2,7]},t(h,[2,13]),{26:35,31:a},{31:[2,14]},{17:[1,36]},t(m,[2,24]),{10:e,11:37,13:4,14:22,15:d,16:p,19:5,20:6,21:r,22:8,23:9,24:10,25:11,26:12,28:i,29:n,31:a,39:s,43:l,46:u},{30:[1,38]},{41:[1,39]},{41:[1,40]},{45:[1,41]},{48:[1,42]},t(g,[2,30]),{18:[1,43]},{18:[1,44]},t(m,[2,23]),{18:[1,45]},{30:[1,46]},t(f,[2,28]),t(f,[2,35]),t(f,[2,36]),t(f,[2,37]),t(f,[2,38]),{36:[1,47]},{33:48,34:y},{15:[1,50]},t(f,[2,27]),t(g,[2,33]),{38:[1,51]},{33:52,34:y,38:[2,31]},{31:[2,15]},t(g,[2,34]),{38:[2,32]}],defaultActions:{20:[2,7],23:[2,14],50:[2,15],52:[2,32]},parseError:o(function(w,k){if(k.recoverable)this.trace(w);else{var C=new Error(w);throw C.hash=k,C}},"parseError"),parse:o(function(w){var k=this,C=[0],E=[],S=[null],L=[],M=this.table,I="",A=0,_=0,D=0,N=2,R=1,B=L.slice.call(arguments,1),O=Object.create(this.lexer),$={yy:{}};for(var z in this.yy)Object.prototype.hasOwnProperty.call(this.yy,z)&&($.yy[z]=this.yy[z]);O.setInput(w,$.yy),$.yy.lexer=O,$.yy.parser=this,typeof O.yylloc>"u"&&(O.yylloc={});var F=O.yylloc;L.push(F);var V=O.options&&O.options.ranges;typeof $.yy.parseError=="function"?this.parseError=$.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function H(we){C.length=C.length-2*we,S.length=S.length-we,L.length=L.length-we}o(H,"popStack");function X(){var we;return we=E.pop()||O.lex()||R,typeof we!="number"&&(we instanceof Array&&(E=we,we=E.pop()),we=k.symbols_[we]||we),we}o(X,"lex");for(var W,Z,Y,ae,J,ee,re={},te,be,de,Ee;;){if(Y=C[C.length-1],this.defaultActions[Y]?ae=this.defaultActions[Y]:((W===null||typeof W>"u")&&(W=X()),ae=M[Y]&&M[Y][W]),typeof ae>"u"||!ae.length||!ae[0]){var Ne="";Ee=[];for(te in M[Y])this.terminals_[te]&&te>N&&Ee.push("'"+this.terminals_[te]+"'");O.showPosition?Ne="Parse error on line "+(A+1)+`: +`+O.showPosition()+` +Expecting `+Ee.join(", ")+", got '"+(this.terminals_[W]||W)+"'":Ne="Parse error on line "+(A+1)+": Unexpected "+(W==R?"end of input":"'"+(this.terminals_[W]||W)+"'"),this.parseError(Ne,{text:O.match,token:this.terminals_[W]||W,line:O.yylineno,loc:F,expected:Ee})}if(ae[0]instanceof Array&&ae.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Y+", token: "+W);switch(ae[0]){case 1:C.push(W),S.push(O.yytext),L.push(O.yylloc),C.push(ae[1]),W=null,Z?(W=Z,Z=null):(_=O.yyleng,I=O.yytext,A=O.yylineno,F=O.yylloc,D>0&&D--);break;case 2:if(be=this.productions_[ae[1]][1],re.$=S[S.length-be],re._$={first_line:L[L.length-(be||1)].first_line,last_line:L[L.length-1].last_line,first_column:L[L.length-(be||1)].first_column,last_column:L[L.length-1].last_column},V&&(re._$.range=[L[L.length-(be||1)].range[0],L[L.length-1].range[1]]),ee=this.performAction.apply(re,[I,_,A,$.yy,ae[1],S,L].concat(B)),typeof ee<"u")return ee;be&&(C=C.slice(0,-1*be*2),S=S.slice(0,-1*be),L=L.slice(0,-1*be)),C.push(this.productions_[ae[1]][0]),S.push(re.$),L.push(re._$),de=M[C[C.length-2]][C[C.length-1]],C.push(de);break;case 3:return!0}}return!0},"parse")},x=(function(){var T={EOF:1,parseError:o(function(k,C){if(this.yy.parser)this.yy.parser.parseError(k,C);else throw new Error(k)},"parseError"),setInput:o(function(w,k){return this.yy=k||this.yy||{},this._input=w,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var w=this._input[0];this.yytext+=w,this.yyleng++,this.offset++,this.match+=w,this.matched+=w;var k=w.match(/(?:\r\n?|\n).*/g);return k?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),w},"input"),unput:o(function(w){var k=w.length,C=w.split(/(?:\r\n?|\n)/g);this._input=w+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-k),this.offset-=k;var E=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),C.length-1&&(this.yylineno-=C.length-1);var S=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:C?(C.length===E.length?this.yylloc.first_column:0)+E[E.length-C.length].length-C[0].length:this.yylloc.first_column-k},this.options.ranges&&(this.yylloc.range=[S[0],S[0]+this.yyleng-k]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(w){this.unput(this.match.slice(w))},"less"),pastInput:o(function(){var w=this.matched.substr(0,this.matched.length-this.match.length);return(w.length>20?"...":"")+w.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var w=this.match;return w.length<20&&(w+=this._input.substr(0,20-w.length)),(w.substr(0,20)+(w.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var w=this.pastInput(),k=new Array(w.length+1).join("-");return w+this.upcomingInput()+` +`+k+"^"},"showPosition"),test_match:o(function(w,k){var C,E,S;if(this.options.backtrack_lexer&&(S={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(S.yylloc.range=this.yylloc.range.slice(0))),E=w[0].match(/(?:\r\n?|\n).*/g),E&&(this.yylineno+=E.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:E?E[E.length-1].length-E[E.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+w[0].length},this.yytext+=w[0],this.match+=w[0],this.matches=w,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(w[0].length),this.matched+=w[0],C=this.performAction.call(this,this.yy,this,k,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),C)return C;if(this._backtrack){for(var L in S)this[L]=S[L];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var w,k,C,E;this._more||(this.yytext="",this.match="");for(var S=this._currentRules(),L=0;Lk[0].length)){if(k=C,E=L,this.options.backtrack_lexer){if(w=this.test_match(C,S[L]),w!==!1)return w;if(this._backtrack){k=!1;continue}else return!1}else if(!this.options.flex)break}return k?(w=this.test_match(k,S[E]),w!==!1?w:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var k=this.next();return k||this.lex()},"lex"),begin:o(function(k){this.conditionStack.push(k)},"begin"),popState:o(function(){var k=this.conditionStack.length-1;return k>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(k){return k=this.conditionStack.length-1-Math.abs(k||0),k>=0?this.conditionStack[k]:"INITIAL"},"topState"),pushState:o(function(k){this.begin(k)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(k,C,E,S){var L=S;switch(E){case 0:return k.getLogger().debug("Found block-beta"),10;break;case 1:return k.getLogger().debug("Found id-block"),29;break;case 2:return k.getLogger().debug("Found block"),10;break;case 3:k.getLogger().debug(".",C.yytext);break;case 4:k.getLogger().debug("_",C.yytext);break;case 5:return 5;case 6:return C.yytext=-1,28;break;case 7:return C.yytext=C.yytext.replace(/columns\s+/,""),k.getLogger().debug("COLUMNS (LEX)",C.yytext),28;break;case 8:this.pushState("md_string");break;case 9:return"MD_STR";case 10:this.popState();break;case 11:this.pushState("string");break;case 12:k.getLogger().debug("LEX: POPPING STR:",C.yytext),this.popState();break;case 13:return k.getLogger().debug("LEX: STR end:",C.yytext),"STR";break;case 14:return C.yytext=C.yytext.replace(/space\:/,""),k.getLogger().debug("SPACE NUM (LEX)",C.yytext),21;break;case 15:return C.yytext="1",k.getLogger().debug("COLUMNS (LEX)",C.yytext),21;break;case 16:return 42;case 17:return"LINKSTYLE";case 18:return"INTERPOLATE";case 19:return this.pushState("CLASSDEF"),39;break;case 20:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";break;case 21:return this.popState(),this.pushState("CLASSDEFID"),40;break;case 22:return this.popState(),41;break;case 23:return this.pushState("CLASS"),43;break;case 24:return this.popState(),this.pushState("CLASS_STYLE"),44;break;case 25:return this.popState(),45;break;case 26:return this.pushState("STYLE_STMNT"),46;break;case 27:return this.popState(),this.pushState("STYLE_DEFINITION"),47;break;case 28:return this.popState(),48;break;case 29:return this.pushState("acc_title"),"acc_title";break;case 30:return this.popState(),"acc_title_value";break;case 31:return this.pushState("acc_descr"),"acc_descr";break;case 32:return this.popState(),"acc_descr_value";break;case 33:this.pushState("acc_descr_multiline");break;case 34:this.popState();break;case 35:return"acc_descr_multiline_value";case 36:return 30;case 37:return this.popState(),k.getLogger().debug("Lex: (("),"NODE_DEND";break;case 38:return this.popState(),k.getLogger().debug("Lex: (("),"NODE_DEND";break;case 39:return this.popState(),k.getLogger().debug("Lex: ))"),"NODE_DEND";break;case 40:return this.popState(),k.getLogger().debug("Lex: (("),"NODE_DEND";break;case 41:return this.popState(),k.getLogger().debug("Lex: (("),"NODE_DEND";break;case 42:return this.popState(),k.getLogger().debug("Lex: (-"),"NODE_DEND";break;case 43:return this.popState(),k.getLogger().debug("Lex: -)"),"NODE_DEND";break;case 44:return this.popState(),k.getLogger().debug("Lex: (("),"NODE_DEND";break;case 45:return this.popState(),k.getLogger().debug("Lex: ]]"),"NODE_DEND";break;case 46:return this.popState(),k.getLogger().debug("Lex: ("),"NODE_DEND";break;case 47:return this.popState(),k.getLogger().debug("Lex: ])"),"NODE_DEND";break;case 48:return this.popState(),k.getLogger().debug("Lex: /]"),"NODE_DEND";break;case 49:return this.popState(),k.getLogger().debug("Lex: /]"),"NODE_DEND";break;case 50:return this.popState(),k.getLogger().debug("Lex: )]"),"NODE_DEND";break;case 51:return this.popState(),k.getLogger().debug("Lex: )"),"NODE_DEND";break;case 52:return this.popState(),k.getLogger().debug("Lex: ]>"),"NODE_DEND";break;case 53:return this.popState(),k.getLogger().debug("Lex: ]"),"NODE_DEND";break;case 54:return k.getLogger().debug("Lexa: -)"),this.pushState("NODE"),35;break;case 55:return k.getLogger().debug("Lexa: (-"),this.pushState("NODE"),35;break;case 56:return k.getLogger().debug("Lexa: ))"),this.pushState("NODE"),35;break;case 57:return k.getLogger().debug("Lexa: )"),this.pushState("NODE"),35;break;case 58:return k.getLogger().debug("Lex: ((("),this.pushState("NODE"),35;break;case 59:return k.getLogger().debug("Lexa: )"),this.pushState("NODE"),35;break;case 60:return k.getLogger().debug("Lexa: )"),this.pushState("NODE"),35;break;case 61:return k.getLogger().debug("Lexa: )"),this.pushState("NODE"),35;break;case 62:return k.getLogger().debug("Lexc: >"),this.pushState("NODE"),35;break;case 63:return k.getLogger().debug("Lexa: (["),this.pushState("NODE"),35;break;case 64:return k.getLogger().debug("Lexa: )"),this.pushState("NODE"),35;break;case 65:return this.pushState("NODE"),35;break;case 66:return this.pushState("NODE"),35;break;case 67:return this.pushState("NODE"),35;break;case 68:return this.pushState("NODE"),35;break;case 69:return this.pushState("NODE"),35;break;case 70:return this.pushState("NODE"),35;break;case 71:return this.pushState("NODE"),35;break;case 72:return k.getLogger().debug("Lexa: ["),this.pushState("NODE"),35;break;case 73:return this.pushState("BLOCK_ARROW"),k.getLogger().debug("LEX ARR START"),37;break;case 74:return k.getLogger().debug("Lex: NODE_ID",C.yytext),31;break;case 75:return k.getLogger().debug("Lex: EOF",C.yytext),8;break;case 76:this.pushState("md_string");break;case 77:this.pushState("md_string");break;case 78:return"NODE_DESCR";case 79:this.popState();break;case 80:k.getLogger().debug("Lex: Starting string"),this.pushState("string");break;case 81:k.getLogger().debug("LEX ARR: Starting string"),this.pushState("string");break;case 82:return k.getLogger().debug("LEX: NODE_DESCR:",C.yytext),"NODE_DESCR";break;case 83:k.getLogger().debug("LEX POPPING"),this.popState();break;case 84:k.getLogger().debug("Lex: =>BAE"),this.pushState("ARROW_DIR");break;case 85:return C.yytext=C.yytext.replace(/^,\s*/,""),k.getLogger().debug("Lex (right): dir:",C.yytext),"DIR";break;case 86:return C.yytext=C.yytext.replace(/^,\s*/,""),k.getLogger().debug("Lex (left):",C.yytext),"DIR";break;case 87:return C.yytext=C.yytext.replace(/^,\s*/,""),k.getLogger().debug("Lex (x):",C.yytext),"DIR";break;case 88:return C.yytext=C.yytext.replace(/^,\s*/,""),k.getLogger().debug("Lex (y):",C.yytext),"DIR";break;case 89:return C.yytext=C.yytext.replace(/^,\s*/,""),k.getLogger().debug("Lex (up):",C.yytext),"DIR";break;case 90:return C.yytext=C.yytext.replace(/^,\s*/,""),k.getLogger().debug("Lex (down):",C.yytext),"DIR";break;case 91:return C.yytext="]>",k.getLogger().debug("Lex (ARROW_DIR end):",C.yytext),this.popState(),this.popState(),"BLOCK_ARROW_END";break;case 92:return k.getLogger().debug("Lex: LINK","#"+C.yytext+"#"),15;break;case 93:return k.getLogger().debug("Lex: LINK",C.yytext),15;break;case 94:return k.getLogger().debug("Lex: LINK",C.yytext),15;break;case 95:return k.getLogger().debug("Lex: LINK",C.yytext),15;break;case 96:return k.getLogger().debug("Lex: START_LINK",C.yytext),this.pushState("LLABEL"),16;break;case 97:return k.getLogger().debug("Lex: START_LINK",C.yytext),this.pushState("LLABEL"),16;break;case 98:return k.getLogger().debug("Lex: START_LINK",C.yytext),this.pushState("LLABEL"),16;break;case 99:this.pushState("md_string");break;case 100:return k.getLogger().debug("Lex: Starting string"),this.pushState("string"),"LINK_LABEL";break;case 101:return this.popState(),k.getLogger().debug("Lex: LINK","#"+C.yytext+"#"),15;break;case 102:return this.popState(),k.getLogger().debug("Lex: LINK",C.yytext),15;break;case 103:return this.popState(),k.getLogger().debug("Lex: LINK",C.yytext),15;break;case 104:return k.getLogger().debug("Lex: COLON",C.yytext),C.yytext=C.yytext.slice(1),27;break}},"anonymous"),rules:[/^(?:block-beta\b)/,/^(?:block:)/,/^(?:block\b)/,/^(?:[\s]+)/,/^(?:[\n]+)/,/^(?:((\u000D\u000A)|(\u000A)))/,/^(?:columns\s+auto\b)/,/^(?:columns\s+[\d]+)/,/^(?:["][`])/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:space[:]\d+)/,/^(?:space\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\s+)/,/^(?:DEFAULT\s+)/,/^(?:\w+\s+)/,/^(?:[^\n]*)/,/^(?:class\s+)/,/^(?:(\w+)+((,\s*\w+)*))/,/^(?:[^\n]*)/,/^(?:style\s+)/,/^(?:(\w+)+((,\s*\w+)*))/,/^(?:[^\n]*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:end\b\s*)/,/^(?:\(\(\()/,/^(?:\)\)\))/,/^(?:[\)]\))/,/^(?:\}\})/,/^(?:\})/,/^(?:\(-)/,/^(?:-\))/,/^(?:\(\()/,/^(?:\]\])/,/^(?:\()/,/^(?:\]\))/,/^(?:\\\])/,/^(?:\/\])/,/^(?:\)\])/,/^(?:[\)])/,/^(?:\]>)/,/^(?:[\]])/,/^(?:-\))/,/^(?:\(-)/,/^(?:\)\))/,/^(?:\))/,/^(?:\(\(\()/,/^(?:\(\()/,/^(?:\{\{)/,/^(?:\{)/,/^(?:>)/,/^(?:\(\[)/,/^(?:\()/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\[\\)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:\[)/,/^(?:<\[)/,/^(?:[^\(\[\n\-\)\{\}\s\<\>:]+)/,/^(?:$)/,/^(?:["][`])/,/^(?:["][`])/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["])/,/^(?:["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:\]>\s*\()/,/^(?:,?\s*right\s*)/,/^(?:,?\s*left\s*)/,/^(?:,?\s*x\s*)/,/^(?:,?\s*y\s*)/,/^(?:,?\s*up\s*)/,/^(?:,?\s*down\s*)/,/^(?:\)\s*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*~~[\~]+\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:["][`])/,/^(?:["])/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?::\d+)/],conditions:{STYLE_DEFINITION:{rules:[28],inclusive:!1},STYLE_STMNT:{rules:[27],inclusive:!1},CLASSDEFID:{rules:[22],inclusive:!1},CLASSDEF:{rules:[20,21],inclusive:!1},CLASS_STYLE:{rules:[25],inclusive:!1},CLASS:{rules:[24],inclusive:!1},LLABEL:{rules:[99,100,101,102,103],inclusive:!1},ARROW_DIR:{rules:[85,86,87,88,89,90,91],inclusive:!1},BLOCK_ARROW:{rules:[76,81,84],inclusive:!1},NODE:{rules:[37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,77,80],inclusive:!1},md_string:{rules:[9,10,78,79],inclusive:!1},space:{rules:[],inclusive:!1},string:{rules:[12,13,82,83],inclusive:!1},acc_descr_multiline:{rules:[34,35],inclusive:!1},acc_descr:{rules:[32],inclusive:!1},acc_title:{rules:[30],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,11,14,15,16,17,18,19,23,26,29,31,33,36,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,92,93,94,95,96,97,98,104],inclusive:!0}}};return T})();v.lexer=x;function b(){this.yy={}}return o(b,"Parser"),b.prototype=v,v.Parser=b,new b})();kH.parser=kH;y6e=kH});function amt(t){switch(Q.debug("typeStr2Type",t),t){case"[]":return"square";case"()":return Q.debug("we have a round"),"round";case"(())":return"circle";case">]":return"rect_left_inv_arrow";case"{}":return"diamond";case"{{}}":return"hexagon";case"([])":return"stadium";case"[[]]":return"subroutine";case"[()]":return"cylinder";case"((()))":return"doublecircle";case"[//]":return"lean_right";case"[\\\\]":return"lean_left";case"[/\\]":return"trapezoid";case"[\\/]":return"inv_trapezoid";case"<[]>":return"block_arrow";default:return"na"}}function smt(t){switch(Q.debug("typeStr2Type",t),t){case"==":return"thick";default:return"normal"}}function omt(t){switch(t.replace(/^[\s-]+|[\s-]+$/g,"")){case"x":return"arrow_cross";case"o":return"arrow_circle";case">":return"arrow_point";default:return""}}var Xc,wH,CH,x6e,b6e,Z0t,k6e,J0t,Z_,EH,emt,tmt,rmt,imt,C6e,SH,qC,nmt,T6e,lmt,cmt,umt,hmt,fmt,dmt,pmt,mmt,gmt,ymt,vmt,xmt,bmt,w6e,E6e=P(()=>{"use strict";YM();Sr();Ut();bt();Vr();Ki();Xc=new Map,wH=[],CH=new Map,x6e="color",b6e="fill",Z0t="bgFill",k6e=",",J0t=ge(),Z_=new Map,EH="",emt=o(t=>lt.sanitizeText(t,J0t),"sanitizeText"),tmt=o(function(t,e=""){let r=Z_.get(t);r||(r={id:t,styles:[],textStyles:[]},Z_.set(t,r)),e?.split(k6e).forEach(i=>{let n=i.replace(/([^;]*);/,"$1").trim();if(RegExp(x6e).exec(i)){let s=n.replace(b6e,Z0t).replace(x6e,b6e);r.textStyles.push(s)}r.styles.push(n)})},"addStyleClass"),rmt=o(function(t,e=""){let r=Xc.get(t);e!=null&&(r.styles=e.split(k6e))},"addStyle2Node"),imt=o(function(t,e){t.split(",").forEach(function(r){let i=Xc.get(r);if(i===void 0){let n=r.trim();i={id:n,type:"na",children:[]},Xc.set(n,i)}i.classes||(i.classes=[]),i.classes.push(e)})},"setCssClass"),C6e=o((t,e)=>{let r=t.flat(),i=[],a=r.find(s=>s?.type==="column-setting")?.columns??-1;for(let s of r){if(typeof a=="number"&&a>0&&s.type!=="column-setting"&&typeof s.widthInColumns=="number"&&s.widthInColumns>a&&Q.warn(`Block ${s.id} width ${s.widthInColumns} exceeds configured column width ${a}`),s.label&&(s.label=emt(s.label)),s.type==="classDef"){tmt(s.id,s.css);continue}if(s.type==="applyClass"){imt(s.id,s?.styleClass??"");continue}if(s.type==="applyStyles"){s?.stylesStr&&rmt(s.id,s?.stylesStr);continue}if(s.type==="column-setting")e.columns=s.columns??-1;else if(s.type==="edge"){let l=(CH.get(s.id)??0)+1;CH.set(s.id,l),s.id=l+"-"+s.id,wH.push(s)}else{s.label||(s.type==="composite"?s.label="":s.label=s.id);let l=Xc.get(s.id);if(l===void 0?Xc.set(s.id,s):(s.type!=="na"&&(l.type=s.type),s.label!==s.id&&(l.label=s.label)),s.children&&C6e(s.children,s),s.type==="space"){let u=s.width??1;for(let h=0;h{Q.debug("Clear called"),wr(),qC={id:"root",type:"composite",children:[],columns:-1},Xc=new Map([["root",qC]]),SH=[],Z_=new Map,wH=[],CH=new Map,EH=""},"clear");o(amt,"typeStr2Type");o(smt,"edgeTypeStr2Type");o(omt,"edgeStrToEdgeData");T6e=0,lmt=o(()=>(T6e++,"id-"+Math.random().toString(36).substr(2,12)+"-"+T6e),"generateId"),cmt=o(t=>{qC.children=t,C6e(t,qC),SH=qC.children},"setHierarchy"),umt=o(t=>{let e=Xc.get(t);return e?e.columns?e.columns:e.children?e.children.length:-1:-1},"getColumns"),hmt=o(()=>[...Xc.values()],"getBlocksFlat"),fmt=o(()=>SH||[],"getBlocks"),dmt=o(()=>wH,"getEdges"),pmt=o(t=>Xc.get(t),"getBlock"),mmt=o(t=>{Xc.set(t.id,t)},"setBlock"),gmt=o(t=>{EH=t},"setDiagramId"),ymt=o(()=>EH,"getDiagramId"),vmt=o(()=>Q,"getLogger"),xmt=o(function(){return Z_},"getClasses"),bmt={getConfig:o(()=>Lt().block,"getConfig"),typeStr2Type:amt,edgeTypeStr2Type:smt,edgeStrToEdgeData:omt,getLogger:vmt,getBlocksFlat:hmt,getBlocks:fmt,getEdges:dmt,setHierarchy:cmt,getBlock:pmt,setBlock:mmt,getColumns:umt,getClasses:xmt,clear:nmt,generateId:lmt,setDiagramId:gmt,getDiagramId:ymt},w6e=bmt});var AH,Tmt,S6e,A6e=P(()=>{"use strict";Yn();wy();AH=o((t,e)=>{let r=zp,i=r(t,"r"),n=r(t,"g"),a=r(t,"b");return Fn(i,n,a,e)},"fade"),Tmt=o(t=>`.label { + font-family: ${t.fontFamily}; + color: ${t.nodeTextColor||t.textColor}; + } + .cluster-label text { + fill: ${t.titleColor}; + } + .cluster-label span,p { + color: ${t.titleColor}; + } + + + + .label text,span,p { + fill: ${t.nodeTextColor||t.textColor}; + color: ${t.nodeTextColor||t.textColor}; + } + + .node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; + stroke-width: 1px; + } + .flowchart-label text { + text-anchor: middle; + } + // .flowchart-label .text-outer-tspan { + // text-anchor: middle; + // } + // .flowchart-label .text-inner-tspan { + // text-anchor: start; + // } + + .node .label { + text-align: center; + } + .node.clickable { + cursor: pointer; + } + + .arrowheadPath { + fill: ${t.arrowheadColor}; + } + + .edgePath .path { + stroke: ${t.lineColor}; + stroke-width: 2.0px; + } + + .flowchart-link { + stroke: ${t.lineColor}; + fill: none; + } + + .edgeLabel { + background-color: ${t.edgeLabelBackground}; + /* + * This is for backward compatibility with existing code that didn't + * add a \`

    \` around edge labels. + * + * TODO: We should probably remove this in a future release. + */ + p { + margin: 0; + padding: 0; + display: inline; + } + rect { + opacity: 0.5; + background-color: ${t.edgeLabelBackground}; + fill: ${t.edgeLabelBackground}; + } + text-align: center; + } + + /* For html labels only */ + .labelBkg { + background-color: ${t.edgeLabelBackground}; + } + + .node .cluster { + // fill: ${AH(t.mainBkg,.5)}; + fill: ${AH(t.clusterBkg,.5)}; + stroke: ${AH(t.clusterBorder,.2)}; + box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px, rgba(0, 0, 0, 0.3) 0px 8px 16px -8px; + stroke-width: 1px; + } + + .cluster text { + fill: ${t.titleColor}; + } + + .cluster span,p { + color: ${t.titleColor}; + } + /* .cluster div { + color: ${t.titleColor}; + } */ + + div.mermaidTooltip { + position: absolute; + text-align: center; + max-width: 200px; + padding: 2px; + font-family: ${t.fontFamily}; + font-size: 12px; + background: ${t.tertiaryColor}; + border: 1px solid ${t.border2}; + border-radius: 2px; + pointer-events: none; + z-index: 100; + } + + .flowchartTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${t.textColor}; + } + ${qu()} +`,"getStyles"),S6e=Tmt});var kmt,Cmt,wmt,Emt,Smt,Amt,_mt,Dmt,Lmt,Rmt,Nmt,_6e,D6e=P(()=>{"use strict";bt();kmt=o((t,e,r,i)=>{e.forEach(n=>{Nmt[n](t,r,i)})},"insertMarkers"),Cmt=o((t,e,r)=>{Q.trace("Making markers for ",r),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionStart").attr("class","marker extension "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionEnd").attr("class","marker extension "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},"extension"),wmt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionStart").attr("class","marker composition "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionEnd").attr("class","marker composition "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"composition"),Emt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationStart").attr("class","marker aggregation "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationEnd").attr("class","marker aggregation "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"aggregation"),Smt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyStart").attr("class","marker dependency "+e).attr("refX",6).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyEnd").attr("class","marker dependency "+e).attr("refX",13).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"dependency"),Amt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopStart").attr("class","marker lollipop "+e).attr("refX",13).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6),t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopEnd").attr("class","marker lollipop "+e).attr("refX",1).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6)},"lollipop"),_mt=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-pointEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",6).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-pointStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",4.5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"point"),Dmt=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-circleEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-circleStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"circle"),Lmt=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-crossEnd").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-crossStart").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},"cross"),Rmt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","strokeWidth").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"barb"),Nmt={extension:Cmt,composition:wmt,aggregation:Emt,dependency:Smt,lollipop:Amt,point:_mt,circle:Dmt,cross:Lmt,barb:Rmt},_6e=kmt});function L6e(t,e){if(t===0||!Number.isInteger(t))throw new Error("Columns must be an integer !== 0.");if(e<0||!Number.isInteger(e))throw new Error("Position must be a non-negative integer."+e);if(t<0)return{px:e,py:0};if(t===1)return{px:0,py:e};let r=e%t,i=Math.floor(e/t);return{px:r,py:i}}function _H(t,e,r=0,i=0){Q.debug("setBlockSizes abc95 (start)",t.id,t?.size?.x,"block width =",t?.size,"siblingWidth",r),t?.size?.width||(t.size={width:r,height:i,x:0,y:0});let n=0,a=0;if(t.children?.length>0){for(let m of t.children)_H(m,e);let s=Imt(t);n=s.width,a=s.height,Q.debug("setBlockSizes abc95 maxWidth of",t.id,":s children is ",n,a);for(let m of t.children)m.size&&(Q.debug(`abc95 Setting size of children of ${t.id} id=${m.id} ${n} ${a} ${JSON.stringify(m.size)}`),m.size.width=n*(m.widthInColumns??1)+Hn*((m.widthInColumns??1)-1),m.size.height=a,m.size.x=0,m.size.y=0,Q.debug(`abc95 updating size of ${t.id} children child:${m.id} maxWidth:${n} maxHeight:${a}`));for(let m of t.children)_H(m,e,n,a);let l=t.columns??-1,u=0;for(let m of t.children)u+=m.widthInColumns??1;let h=t.children.length;l>0&&l0?Math.min(t.children.length,l):t.children.length;if(m>0){let g=(d-m*Hn-Hn)/m;Q.debug("abc95 (growing to fit) width",t.id,d,t.size?.width,g);for(let y of t.children)y.size&&(y.size.width=g)}}t.size={width:d,height:p,x:0,y:0}}Q.debug("setBlockSizes abc94 (done)",t.id,t?.size?.x,t?.size?.width,t?.size?.y,t?.size?.height)}function R6e(t,e){Q.debug(`abc85 layout blocks (=>layoutBlocks) ${t.id} x: ${t?.size?.x} y: ${t?.size?.y} width: ${t?.size?.width}`);let r=t.columns??-1;if(Q.debug("layoutBlocks columns abc95",t.id,"=>",r,t),t.children&&t.children.length>0){let i=t?.children[0]?.size?.width??0,n=t.children.length*i+(t.children.length-1)*Hn;Q.debug("widthOfChildren 88",n,"posX");let a=new Map;{let f=0;for(let d of t.children){if(!d.size)continue;let{py:p}=L6e(r,f),m=a.get(p)??0;d.size.height>m&&a.set(p,d.size.height);let g=d?.widthInColumns??1;r>0&&(g=Math.min(g,r-f%r)),f+=g}}let s=new Map;{let f=0,d=[...a.keys()].sort((p,m)=>p-m);for(let p of d)s.set(p,f),f+=(a.get(p)??0)+Hn}let l=0;Q.debug("abc91 block?.size?.x",t.id,t?.size?.x);let u=t?.size?.x?t?.size?.x+(-t?.size?.width/2||0):-Hn,h=0;for(let f of t.children){let d=t;if(!f.size)continue;let{width:p,height:m}=f.size,{px:g,py:y}=L6e(r,l);if(y!=h&&(h=y,u=t?.size?.x?t?.size?.x+(-t?.size?.width/2||0):-Hn,Q.debug("New row in layout for block",t.id," and child ",f.id,h)),Q.debug(`abc89 layout blocks (child) id: ${f.id} Pos: ${l} (px, py) ${g},${y} (${d?.size?.x},${d?.size?.y}) parent: ${d.id} width: ${p}${Hn}`),d.size){let x=p/2;f.size.x=u+Hn+x,Q.debug(`abc91 layout blocks (calc) px, pyid:${f.id} startingPos=X${u} new startingPosX${f.size.x} ${x} padding=${Hn} width=${p} halfWidth=${x} => x:${f.size.x} y:${f.size.y} ${f.widthInColumns} (width * (child?.w || 1)) / 2 ${p*(f?.widthInColumns??1)/2}`),u=f.size.x+x;let b=s.get(y)??0,T=a.get(y)??m;f.size.y=d.size.y-d.size.height/2+b+T/2+Hn,Q.debug(`abc88 layout blocks (calc) px, pyid:${f.id}startingPosX${u}${Hn}${x}=>x:${f.size.x}y:${f.size.y}${f.widthInColumns}(width * (child?.w || 1)) / 2${p*(f?.widthInColumns??1)/2}`)}f.children&&R6e(f,e);let v=f?.widthInColumns??1;r>0&&(v=Math.min(v,r-l%r)),l+=v,Q.debug("abc88 columnsPos",f,l)}}Q.debug(`layout blocks (<==layoutBlocks) ${t.id} x: ${t?.size?.x} y: ${t?.size?.y} width: ${t?.size?.width}`)}function N6e(t,{minX:e,minY:r,maxX:i,maxY:n}={minX:0,minY:0,maxX:0,maxY:0}){if(t.size&&t.id!=="root"){let{x:a,y:s,width:l,height:u}=t.size;a-l/2i&&(i=a+l/2),s+u/2>n&&(n=s+u/2)}if(t.children)for(let a of t.children)({minX:e,minY:r,maxX:i,maxY:n}=N6e(a,{minX:e,minY:r,maxX:i,maxY:n}));return{minX:e,minY:r,maxX:i,maxY:n}}function I6e(t){let e=t.getBlock("root");if(!e)return;_H(e,t,0,0),R6e(e,t),Q.debug("getBlocks",JSON.stringify(e,null,2));let{minX:r,minY:i,maxX:n,maxY:a}=N6e(e),s=a-i,l=n-r;return{x:r,y:i,width:l,height:s}}var Hn,Imt,M6e=P(()=>{"use strict";bt();Ut();Hn=ge()?.block?.padding??8;o(L6e,"calculateBlockPosition");Imt=o(t=>{let e=0,r=0;for(let i of t.children){let{width:n,height:a,x:s,y:l}=i.size??{width:0,height:0,x:0,y:0};Q.debug("getMaxChildSize abc95 child:",i.id,"width:",n,"height:",a,"x:",s,"y:",l,i.type),i.type!=="space"&&(n>e&&(e=n/(i.widthInColumns??1)),a>r&&(r=a))}return{width:e,height:r}},"getMaxChildSize");o(_H,"setBlockSizes");o(R6e,"layoutBlocks");o(N6e,"findBounds");o(I6e,"layout")});var Mmt,Vo,J_=P(()=>{"use strict";Sr();Ut();To();Mmt=o(async(t,e,r,i=!1,n=!1)=>{let a=e||"";typeof a=="object"&&(a=a[0]);let s=ge(),l=Or(s);return await Vi(t,a,{style:r,isTitle:i,useHtmlLabels:l,markdown:!1,isNode:n,width:Number.POSITIVE_INFINITY},s)},"createLabel"),Vo=Mmt});var P6e,Omt,O6e,B6e=P(()=>{"use strict";bt();P6e=o((t,e,r,i,n)=>{e.arrowTypeStart&&O6e(t,"start",e.arrowTypeStart,r,i,n),e.arrowTypeEnd&&O6e(t,"end",e.arrowTypeEnd,r,i,n)},"addEdgeMarkers"),Omt={arrow_cross:"cross",arrow_point:"point",arrow_barb:"barb",arrow_circle:"circle",aggregation:"aggregation",extension:"extension",composition:"composition",dependency:"dependency",lollipop:"lollipop"},O6e=o((t,e,r,i,n,a)=>{let s=Omt[r];if(!s){Q.warn(`Unknown arrow type: ${r}`);return}let l=e==="start"?"Start":"End";t.attr(`marker-${e}`,`url(${i}#${n}_${a}-${s}${l})`)},"addEdgeMarker")});function e8(t,e){Or(ge())&&t&&(t.style.width=e.length*9+"px",t.style.height="12px")}var DH,_s,$6e,z6e,Pmt,Bmt,F6e,G6e,V6e=P(()=>{"use strict";bt();J_();To();_M();Pr();Ut();Sr();er();Vr();LM();Nb();B6e();DH={},_s={},$6e=o(async(t,e)=>{let r=ge(),i=Or(r),n=t.insert("g").attr("class","edgeLabel"),a=n.insert("g").attr("class","label"),s=e.labelType==="markdown",l=await Vi(t,e.label,{style:e.labelStyle,useHtmlLabels:i,addSvgBackground:s,isNode:!1,markdown:s,width:s?void 0:Number.POSITIVE_INFINITY},r);a.node().appendChild(l);let u=l.getBBox(),h=u;if(i){let d=l.children[0],p=Ze(l);u=d.getBoundingClientRect(),h=u,p.attr("width",u.width),p.attr("height",u.height)}else{let d=Ze(l).select("text").node();d&&typeof d.getBBox=="function"&&(h=d.getBBox())}a.attr("transform",Pl(h,i)),DH[e.id]=n,e.width=u.width,e.height=u.height;let f;if(e.startLabelLeft){let d=t.insert("g").attr("class","edgeTerminals"),p=d.insert("g").attr("class","inner"),m=await Vo(p,e.startLabelLeft,e.labelStyle);f=m;let g=m.getBBox();if(i){let y=m.children[0],v=Ze(m);g=y.getBoundingClientRect(),v.attr("width",g.width),v.attr("height",g.height)}p.attr("transform",Pl(g,i)),_s[e.id]||(_s[e.id]={}),_s[e.id].startLeft=d,e8(f,e.startLabelLeft)}if(e.startLabelRight){let d=t.insert("g").attr("class","edgeTerminals"),p=d.insert("g").attr("class","inner"),m=await Vo(d,e.startLabelRight,e.labelStyle);f=m,p.node().appendChild(m);let g=m.getBBox();if(i){let y=m.children[0],v=Ze(m);g=y.getBoundingClientRect(),v.attr("width",g.width),v.attr("height",g.height)}p.attr("transform",Pl(g,i)),_s[e.id]||(_s[e.id]={}),_s[e.id].startRight=d,e8(f,e.startLabelRight)}if(e.endLabelLeft){let d=t.insert("g").attr("class","edgeTerminals"),p=d.insert("g").attr("class","inner"),m=await Vo(p,e.endLabelLeft,e.labelStyle);f=m;let g=m.getBBox();if(i){let y=m.children[0],v=Ze(m);g=y.getBoundingClientRect(),v.attr("width",g.width),v.attr("height",g.height)}p.attr("transform",Pl(g,i)),d.node().appendChild(m),_s[e.id]||(_s[e.id]={}),_s[e.id].endLeft=d,e8(f,e.endLabelLeft)}if(e.endLabelRight){let d=t.insert("g").attr("class","edgeTerminals"),p=d.insert("g").attr("class","inner"),m=await Vo(p,e.endLabelRight,e.labelStyle);f=m;let g=m.getBBox();if(i){let y=m.children[0],v=Ze(m);g=y.getBoundingClientRect(),v.attr("width",g.width),v.attr("height",g.height)}p.attr("transform",Pl(g,i)),d.node().appendChild(m),_s[e.id]||(_s[e.id]={}),_s[e.id].endRight=d,e8(f,e.endLabelRight)}return l},"insertEdgeLabel");o(e8,"setTerminalWidth");z6e=o((t,e)=>{Q.debug("Moving label abc88 ",t.id,t.label,DH[t.id],e);let r=e.updatedPath?e.updatedPath:e.originalPath,i=ge(),{subGraphTitleTotalMargin:n}=Uh(i);if(t.label){let a=DH[t.id],s=t.x,l=t.y;if(r){let u=Kt.calcLabelPosition(r);Q.debug("Moving label "+t.label+" from (",s,",",l,") to (",u.x,",",u.y,") abc88"),e.updatedPath&&(s=u.x,l=u.y)}a.attr("transform",`translate(${s}, ${l+n/2})`)}if(t.startLabelLeft){let a=_s[t.id].startLeft,s=t.x,l=t.y;if(r){let u=Kt.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.startLabelRight){let a=_s[t.id].startRight,s=t.x,l=t.y;if(r){let u=Kt.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelLeft){let a=_s[t.id].endLeft,s=t.x,l=t.y;if(r){let u=Kt.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelRight){let a=_s[t.id].endRight,s=t.x,l=t.y;if(r){let u=Kt.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}},"positionEdgeLabel"),Pmt=o((t,e)=>{let r=t.x,i=t.y,n=Math.abs(e.x-r),a=Math.abs(e.y-i),s=t.width/2,l=t.height/2;return n>=s||a>=l},"outsideNode"),Bmt=o((t,e,r)=>{Q.debug(`intersection calc abc89: + outsidePoint: ${JSON.stringify(e)} + insidePoint : ${JSON.stringify(r)} + node : x:${t.x} y:${t.y} w:${t.width} h:${t.height}`);let i=t.x,n=t.y,a=Math.abs(i-r.x),s=t.width/2,l=r.xMath.abs(i-e.x)*u){let d=r.y{Q.debug("abc88 cutPathAtIntersect",t,e);let r=[],i=t[0],n=!1;return t.forEach(a=>{if(!Pmt(e,a)&&!n){let s=Bmt(e,i,a),l=!1;r.forEach(u=>{l=l||u.x===s.x&&u.y===s.y}),r.some(u=>u.x===s.x&&u.y===s.y)||r.push(s),n=!0}else i=a,n||r.push(a)}),r},"cutPathAtIntersect"),G6e=o(function(t,e,r,i,n,a,s){let l=r.points;Q.debug("abc88 InsertEdge: edge=",r,"e=",e);let u=!1,h=a.node(e.v);var f=a.node(e.w);f?.intersect&&h?.intersect&&(l=l.slice(1,r.points.length-1),l.unshift(h.intersect(l[0])),l.push(f.intersect(l[l.length-1]))),r.toCluster&&(Q.debug("to cluster abc88",i[r.toCluster]),l=F6e(r.points,i[r.toCluster].node),u=!0),r.fromCluster&&(Q.debug("from cluster abc88",i[r.fromCluster]),l=F6e(l.reverse(),i[r.fromCluster].node).reverse(),u=!0);let d=l.filter(w=>!Number.isNaN(w.y)),p=wc;r.curve&&(n==="graph"||n==="flowchart")&&(p=r.curve);let{x:m,y:g}=D5(r),y=Cc().x(m).y(g).curve(p),v;switch(r.thickness){case"normal":v="edge-thickness-normal";break;case"thick":v="edge-thickness-thick";break;case"invisible":v="edge-thickness-thick";break;default:v=""}switch(r.pattern){case"solid":v+=" edge-pattern-solid";break;case"dotted":v+=" edge-pattern-dotted";break;case"dashed":v+=" edge-pattern-dashed";break}let x=t.append("path").attr("d",y(d)).attr("id",r.id).attr("class"," "+v+(r.classes?" "+r.classes:"")).attr("style",r.style),b="";(ge().flowchart.arrowMarkerAbsolute||ge().state.arrowMarkerAbsolute)&&(b=Yp(!0)),P6e(x,r,b,s,n);let T={};return u&&(T.updatedPath=l),T.originalPath=r.points,T},"insertEdge")});var Fmt,q6e,W6e=P(()=>{"use strict";Fmt=o(t=>{let e=new Set;for(let r of t)switch(r){case"x":e.add("right"),e.add("left");break;case"y":e.add("up"),e.add("down");break;default:e.add(r);break}return e},"expandAndDeduplicateDirections"),q6e=o((t,e,r)=>{let i=Fmt(t),n=2,a=e.height+2*r.padding,s=a/n,l=e.width+2*s+r.padding,u=r.padding/2;return i.has("right")&&i.has("left")&&i.has("up")&&i.has("down")?[{x:0,y:0},{x:s,y:0},{x:l/2,y:2*u},{x:l-s,y:0},{x:l,y:0},{x:l,y:-a/3},{x:l+2*u,y:-a/2},{x:l,y:-2*a/3},{x:l,y:-a},{x:l-s,y:-a},{x:l/2,y:-a-2*u},{x:s,y:-a},{x:0,y:-a},{x:0,y:-2*a/3},{x:-2*u,y:-a/2},{x:0,y:-a/3}]:i.has("right")&&i.has("left")&&i.has("up")?[{x:s,y:0},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:s,y:-a},{x:0,y:-a/2}]:i.has("right")&&i.has("left")&&i.has("down")?[{x:0,y:0},{x:s,y:-a},{x:l-s,y:-a},{x:l,y:0}]:i.has("right")&&i.has("up")&&i.has("down")?[{x:0,y:0},{x:l,y:-s},{x:l,y:-a+s},{x:0,y:-a}]:i.has("left")&&i.has("up")&&i.has("down")?[{x:l,y:0},{x:0,y:-s},{x:0,y:-a+s},{x:l,y:-a}]:i.has("right")&&i.has("left")?[{x:s,y:0},{x:s,y:-u},{x:l-s,y:-u},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:l-s,y:-a+u},{x:s,y:-a+u},{x:s,y:-a},{x:0,y:-a/2}]:i.has("up")&&i.has("down")?[{x:l/2,y:0},{x:0,y:-u},{x:s,y:-u},{x:s,y:-a+u},{x:0,y:-a+u},{x:l/2,y:-a},{x:l,y:-a+u},{x:l-s,y:-a+u},{x:l-s,y:-u},{x:l,y:-u}]:i.has("right")&&i.has("up")?[{x:0,y:0},{x:l,y:-s},{x:0,y:-a}]:i.has("right")&&i.has("down")?[{x:0,y:0},{x:l,y:0},{x:0,y:-a}]:i.has("left")&&i.has("up")?[{x:l,y:0},{x:0,y:-s},{x:l,y:-a}]:i.has("left")&&i.has("down")?[{x:l,y:0},{x:0,y:0},{x:l,y:-a}]:i.has("right")?[{x:s,y:-u},{x:s,y:-u},{x:l-s,y:-u},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:l-s,y:-a+u},{x:s,y:-a+u},{x:s,y:-a+u}]:i.has("left")?[{x:s,y:0},{x:s,y:-u},{x:l-s,y:-u},{x:l-s,y:-a+u},{x:s,y:-a+u},{x:s,y:-a},{x:0,y:-a/2}]:i.has("up")?[{x:s,y:-u},{x:s,y:-a+u},{x:0,y:-a+u},{x:l/2,y:-a},{x:l,y:-a+u},{x:l-s,y:-a+u},{x:l-s,y:-u}]:i.has("down")?[{x:l/2,y:0},{x:0,y:-u},{x:s,y:-u},{x:s,y:-a+u},{x:l-s,y:-a+u},{x:l-s,y:-u},{x:l,y:-u}]:[{x:0,y:0}]},"getArrowPoints")});function $mt(t,e){return t.intersect(e)}var U6e,H6e=P(()=>{"use strict";o($mt,"intersectNode");U6e=$mt});function zmt(t,e,r,i){var n=t.x,a=t.y,s=n-i.x,l=a-i.y,u=Math.sqrt(e*e*l*l+r*r*s*s),h=Math.abs(e*r*s/u);i.x{"use strict";o(zmt,"intersectEllipse");t8=zmt});function Gmt(t,e,r){return t8(t,e,e,r)}var Y6e,j6e=P(()=>{"use strict";LH();o(Gmt,"intersectCircle");Y6e=Gmt});function Vmt(t,e,r,i){var n,a,s,l,u,h,f,d,p,m,g,y,v,x,b;if(n=e.y-t.y,s=t.x-e.x,u=e.x*t.y-t.x*e.y,p=n*r.x+s*r.y+u,m=n*i.x+s*i.y+u,!(p!==0&&m!==0&&X6e(p,m))&&(a=i.y-r.y,l=r.x-i.x,h=i.x*r.y-r.x*i.y,f=a*t.x+l*t.y+h,d=a*e.x+l*e.y+h,!(f!==0&&d!==0&&X6e(f,d))&&(g=n*l-a*s,g!==0)))return y=Math.abs(g/2),v=s*h-l*u,x=v<0?(v-y)/g:(v+y)/g,v=a*u-n*h,b=v<0?(v-y)/g:(v+y)/g,{x,y:b}}function X6e(t,e){return t*e>0}var K6e,Q6e=P(()=>{"use strict";o(Vmt,"intersectLine");o(X6e,"sameSign");K6e=Vmt});function qmt(t,e,r){var i=t.x,n=t.y,a=[],s=Number.POSITIVE_INFINITY,l=Number.POSITIVE_INFINITY;typeof e.forEach=="function"?e.forEach(function(g){s=Math.min(s,g.x),l=Math.min(l,g.y)}):(s=Math.min(s,e.x),l=Math.min(l,e.y));for(var u=i-t.width/2-s,h=n-t.height/2-l,f=0;f1&&a.sort(function(g,y){var v=g.x-r.x,x=g.y-r.y,b=Math.sqrt(v*v+x*x),T=y.x-r.x,w=y.y-r.y,k=Math.sqrt(T*T+w*w);return b{"use strict";Q6e();Z6e=qmt;o(qmt,"intersectPolygon")});var Wmt,eAe,tAe=P(()=>{"use strict";Wmt=o((t,e)=>{var r=t.x,i=t.y,n=e.x-r,a=e.y-i,s=t.width/2,l=t.height/2,u,h;return Math.abs(a)*s>Math.abs(n)*l?(a<0&&(l=-l),u=a===0?0:l*n/a,h=l):(n<0&&(s=-s),u=s,h=n===0?0:s*a/n),{x:r+u,y:i+h}},"intersectRect"),eAe=Wmt});var an,RH=P(()=>{"use strict";H6e();j6e();LH();J6e();tAe();an={node:U6e,circle:Y6e,ellipse:t8,polygon:Z6e,rect:eAe}});function Kc(t,e,r,i){return t.insert("polygon",":first-child").attr("points",i.map(function(n){return n.x+","+n.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-e/2+","+r/2+")")}var na,Tn,NH=P(()=>{"use strict";J_();To();Ut();Sr();Pr();Vr();er();rM();na=o(async(t,e,r,i)=>{let n=ge(),a,s=e.useHtmlLabels||Or(n);r?a=r:a="node default";let l=t.insert("g").attr("class",a).attr("id",e.domId||e.id),u=l.insert("g").attr("class","label").attr("style",e.labelStyle),h;e.labelText===void 0?h="":h=typeof e.labelText=="string"?e.labelText:e.labelText[0];let f;e.labelType==="markdown"?f=Vi(u,Tr(zs(h),n),{useHtmlLabels:s,width:e.width||n.flowchart.wrappingWidth,classes:"markdown-node-label"},n):f=await Vo(u,Tr(zs(h),n),e.labelStyle,!1,i);let d=f.getBBox(),p=e.padding/2;if(Or(n)){let m=f.children[0],g=Ze(f);await u5(m,h),d=m.getBoundingClientRect(),g.attr("width",d.width),g.attr("height",d.height)}return s?u.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"):u.attr("transform","translate(0, "+-d.height/2+")"),e.centerLabel&&u.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"),u.insert("rect",":first-child"),{shapeSvg:l,bbox:d,halfPadding:p,label:u}},"labelHelper"),Tn=o((t,e)=>{let r=e.node().getBBox();t.width=r.width,t.height=r.height},"updateNodeBounds");o(Kc,"insertPolygonShape")});var Umt,rAe,iAe=P(()=>{"use strict";NH();bt();Ut();Sr();RH();Umt=o(async(t,e)=>{e.useHtmlLabels||Or(ge())||(e.centerLabel=!0);let{shapeSvg:i,bbox:n,halfPadding:a}=await na(t,e,"node "+e.classes,!0);Q.info("Classes = ",e.classes);let s=i.insert("rect",":first-child");return s.attr("rx",e.rx).attr("ry",e.ry).attr("x",-n.width/2-a).attr("y",-n.height/2-a).attr("width",n.width+e.padding).attr("height",n.height+e.padding),Tn(e,s),e.intersect=function(l){return an.rect(e,l)},i},"note"),rAe=Umt});function IH(t,e,r,i){let n=[],a=o(l=>{n.push(l,0)},"addBorder"),s=o(l=>{n.push(0,l)},"skipBorder");e.includes("t")?(Q.debug("add top border"),a(r)):s(r),e.includes("r")?(Q.debug("add right border"),a(i)):s(i),e.includes("b")?(Q.debug("add bottom border"),a(r)):s(r),e.includes("l")?(Q.debug("add left border"),a(i)):s(i),t.attr("stroke-dasharray",n.join(" "))}var nAe,pl,aAe,Hmt,Ymt,jmt,Xmt,Kmt,Qmt,Zmt,Jmt,egt,tgt,rgt,igt,ngt,agt,sgt,ogt,lgt,cgt,ugt,sAe,hgt,fgt,oAe,r8,MH,lAe,cAe=P(()=>{"use strict";Pr();Ut();Sr();bt();W6e();J_();RH();iAe();NH();nAe=o(t=>t?" "+t:"","formatClass"),pl=o((t,e)=>`${e||"node default"}${nAe(t.classes)} ${nAe(t.class)}`,"getClassesFromNode"),aAe=o(async(t,e)=>{let{shapeSvg:r,bbox:i}=await na(t,e,pl(e,void 0),!0),n=i.width+e.padding,a=i.height+e.padding,s=n+a,l=[{x:s/2,y:0},{x:s,y:-s/2},{x:s/2,y:-s},{x:0,y:-s/2}];Q.info("Question main (Circle)");let u=Kc(r,s,s,l);return u.attr("style",e.style),Tn(e,u),e.intersect=function(h){return Q.warn("Intersect called"),an.polygon(e,l,h)},r},"question"),Hmt=o((t,e)=>{let r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),i=28,n=[{x:0,y:i/2},{x:i/2,y:0},{x:0,y:-i/2},{x:-i/2,y:0}];return r.insert("polygon",":first-child").attr("points",n.map(function(s){return s.x+","+s.y}).join(" ")).attr("class","state-start").attr("r",7).attr("width",28).attr("height",28),e.width=28,e.height=28,e.intersect=function(s){return an.circle(e,14,s)},r},"choice"),Ymt=o(async(t,e)=>{let{shapeSvg:r,bbox:i}=await na(t,e,pl(e,void 0),!0),n=4,a=i.height+e.padding,s=a/n,l=i.width+2*s+e.padding,u=[{x:s,y:0},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:s,y:-a},{x:0,y:-a/2}],h=Kc(r,l,a,u);return h.attr("style",e.style),Tn(e,h),e.intersect=function(f){return an.polygon(e,u,f)},r},"hexagon"),jmt=o(async(t,e)=>{let{shapeSvg:r,bbox:i}=await na(t,e,void 0,!0),n=2,a=i.height+2*e.padding,s=a/n,l=i.width+2*s+e.padding,u=q6e(e.directions,i,e),h=Kc(r,l,a,u);return h.attr("style",e.style),Tn(e,h),e.intersect=function(f){return an.polygon(e,u,f)},r},"block_arrow"),Xmt=o(async(t,e)=>{let{shapeSvg:r,bbox:i}=await na(t,e,pl(e,void 0),!0),n=i.width+e.padding,a=i.height+e.padding,s=[{x:-a/2,y:0},{x:n,y:0},{x:n,y:-a},{x:-a/2,y:-a},{x:0,y:-a/2}];return Kc(r,n,a,s).attr("style",e.style),e.width=n+a,e.height=a,e.intersect=function(u){return an.polygon(e,s,u)},r},"rect_left_inv_arrow"),Kmt=o(async(t,e)=>{let{shapeSvg:r,bbox:i}=await na(t,e,pl(e),!0),n=i.width+e.padding,a=i.height+e.padding,s=[{x:-2*a/6,y:0},{x:n-a/6,y:0},{x:n+2*a/6,y:-a},{x:a/6,y:-a}],l=Kc(r,n,a,s);return l.attr("style",e.style),Tn(e,l),e.intersect=function(u){return an.polygon(e,s,u)},r},"lean_right"),Qmt=o(async(t,e)=>{let{shapeSvg:r,bbox:i}=await na(t,e,pl(e,void 0),!0),n=i.width+e.padding,a=i.height+e.padding,s=[{x:2*a/6,y:0},{x:n+a/6,y:0},{x:n-2*a/6,y:-a},{x:-a/6,y:-a}],l=Kc(r,n,a,s);return l.attr("style",e.style),Tn(e,l),e.intersect=function(u){return an.polygon(e,s,u)},r},"lean_left"),Zmt=o(async(t,e)=>{let{shapeSvg:r,bbox:i}=await na(t,e,pl(e,void 0),!0),n=i.width+e.padding,a=i.height+e.padding,s=[{x:-2*a/6,y:0},{x:n+2*a/6,y:0},{x:n-a/6,y:-a},{x:a/6,y:-a}],l=Kc(r,n,a,s);return l.attr("style",e.style),Tn(e,l),e.intersect=function(u){return an.polygon(e,s,u)},r},"trapezoid"),Jmt=o(async(t,e)=>{let{shapeSvg:r,bbox:i}=await na(t,e,pl(e,void 0),!0),n=i.width+e.padding,a=i.height+e.padding,s=[{x:a/6,y:0},{x:n-a/6,y:0},{x:n+2*a/6,y:-a},{x:-2*a/6,y:-a}],l=Kc(r,n,a,s);return l.attr("style",e.style),Tn(e,l),e.intersect=function(u){return an.polygon(e,s,u)},r},"inv_trapezoid"),egt=o(async(t,e)=>{let{shapeSvg:r,bbox:i}=await na(t,e,pl(e,void 0),!0),n=i.width+e.padding,a=i.height+e.padding,s=[{x:0,y:0},{x:n+a/2,y:0},{x:n,y:-a/2},{x:n+a/2,y:-a},{x:0,y:-a}],l=Kc(r,n,a,s);return l.attr("style",e.style),Tn(e,l),e.intersect=function(u){return an.polygon(e,s,u)},r},"rect_right_inv_arrow"),tgt=o(async(t,e)=>{let{shapeSvg:r,bbox:i}=await na(t,e,pl(e,void 0),!0),n=i.width+e.padding,a=n/2,s=a/(2.5+n/50),l=i.height+s+e.padding,u="M 0,"+s+" a "+a+","+s+" 0,0,0 "+n+" 0 a "+a+","+s+" 0,0,0 "+-n+" 0 l 0,"+l+" a "+a+","+s+" 0,0,0 "+n+" 0 l 0,"+-l,h=r.attr("label-offset-y",s).insert("path",":first-child").attr("style",e.style).attr("d",u).attr("transform","translate("+-n/2+","+-(l/2+s)+")");return Tn(e,h),e.intersect=function(f){let d=an.rect(e,f),p=d.x-e.x;if(a!=0&&(Math.abs(p)e.height/2-s)){let m=s*s*(1-p*p/(a*a));m!=0&&(m=Math.sqrt(m)),m=s-m,f.y-e.y>0&&(m=-m),d.y+=m}return d},r},"cylinder"),rgt=o(async(t,e)=>{let{shapeSvg:r,bbox:i,halfPadding:n}=await na(t,e,"node "+e.classes+" "+e.class,!0),a=r.insert("rect",":first-child"),s=e.positioned?e.width:i.width+e.padding,l=e.positioned?e.height:i.height+e.padding,u=e.positioned?-s/2:-i.width/2-n,h=e.positioned?-l/2:-i.height/2-n;if(a.attr("class","basic label-container").attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",u).attr("y",h).attr("width",s).attr("height",l),e.props){let f=new Set(Object.keys(e.props));e.props.borders&&(IH(a,e.props.borders,s,l),f.delete("borders")),f.forEach(d=>{Q.warn(`Unknown node property ${d}`)})}return Tn(e,a),e.intersect=function(f){return an.rect(e,f)},r},"rect"),igt=o(async(t,e)=>{let{shapeSvg:r,bbox:i,halfPadding:n}=await na(t,e,"node "+e.classes,!0),a=r.insert("rect",":first-child"),s=e.positioned?e.width:i.width+e.padding,l=e.positioned?e.height:i.height+e.padding,u=e.positioned?-s/2:-i.width/2-n,h=e.positioned?-l/2:-i.height/2-n;if(a.attr("class","basic cluster composite label-container").attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",u).attr("y",h).attr("width",s).attr("height",l),e.props){let f=new Set(Object.keys(e.props));e.props.borders&&(IH(a,e.props.borders,s,l),f.delete("borders")),f.forEach(d=>{Q.warn(`Unknown node property ${d}`)})}return Tn(e,a),e.intersect=function(f){return an.rect(e,f)},r},"composite"),ngt=o(async(t,e)=>{let{shapeSvg:r}=await na(t,e,"label",!0);Q.trace("Classes = ",e.class);let i=r.insert("rect",":first-child"),n=0,a=0;if(i.attr("width",n).attr("height",a),r.attr("class","label edgeLabel"),e.props){let s=new Set(Object.keys(e.props));e.props.borders&&(IH(i,e.props.borders,n,a),s.delete("borders")),s.forEach(l=>{Q.warn(`Unknown node property ${l}`)})}return Tn(e,i),e.intersect=function(s){return an.rect(e,s)},r},"labelRect");o(IH,"applyNodePropertyBorders");agt=o(async(t,e)=>{let r;e.classes?r="node "+e.classes:r="node default";let i=t.insert("g").attr("class",r).attr("id",e.domId||e.id),n=i.insert("rect",":first-child"),a=i.insert("line"),s=i.insert("g").attr("class","label"),l=e.labelText.flat?e.labelText.flat():e.labelText,u="";typeof l=="object"?u=l[0]:u=l,Q.info("Label text abc79",u,l,typeof l=="object");let h=await Vo(s,u,e.labelStyle,!0,!0),f={width:0,height:0};if(Or(ge())){let y=h.children[0],v=Ze(h);f=y.getBoundingClientRect(),v.attr("width",f.width),v.attr("height",f.height)}Q.info("Text 2",l);let d=l.slice(1,l.length),p=h.getBBox(),m=await Vo(s,d.join?d.join("
    "):d,e.labelStyle,!0,!0);if(Or(ge())){let y=m.children[0],v=Ze(m);f=y.getBoundingClientRect(),v.attr("width",f.width),v.attr("height",f.height)}let g=e.padding/2;return Ze(m).attr("transform","translate( "+(f.width>p.width?0:(p.width-f.width)/2)+", "+(p.height+g+5)+")"),Ze(h).attr("transform","translate( "+(f.width{let{shapeSvg:r,bbox:i}=await na(t,e,pl(e,void 0),!0),n=i.height+e.padding,a=i.width+n/4+e.padding,s=r.insert("rect",":first-child").attr("style",e.style).attr("rx",n/2).attr("ry",n/2).attr("x",-a/2).attr("y",-n/2).attr("width",a).attr("height",n);return Tn(e,s),e.intersect=function(l){return an.rect(e,l)},r},"stadium"),ogt=o(async(t,e)=>{let{shapeSvg:r,bbox:i,halfPadding:n}=await na(t,e,pl(e,void 0),!0),a=r.insert("circle",":first-child");return a.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",i.width/2+n).attr("width",i.width+e.padding).attr("height",i.height+e.padding),Q.info("Circle main"),Tn(e,a),e.intersect=function(s){return Q.info("Circle intersect",e,i.width/2+n,s),an.circle(e,i.width/2+n,s)},r},"circle"),lgt=o(async(t,e)=>{let{shapeSvg:r,bbox:i,halfPadding:n}=await na(t,e,pl(e,void 0),!0),a=5,s=r.insert("g",":first-child"),l=s.insert("circle"),u=s.insert("circle");return s.attr("class",e.class),l.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",i.width/2+n+a).attr("width",i.width+e.padding+a*2).attr("height",i.height+e.padding+a*2),u.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",i.width/2+n).attr("width",i.width+e.padding).attr("height",i.height+e.padding),Q.info("DoubleCircle main"),Tn(e,l),e.intersect=function(h){return Q.info("DoubleCircle intersect",e,i.width/2+n+a,h),an.circle(e,i.width/2+n+a,h)},r},"doublecircle"),cgt=o(async(t,e)=>{let{shapeSvg:r,bbox:i}=await na(t,e,pl(e,void 0),!0),n=i.width+e.padding,a=i.height+e.padding,s=[{x:0,y:0},{x:n,y:0},{x:n,y:-a},{x:0,y:-a},{x:0,y:0},{x:-8,y:0},{x:n+8,y:0},{x:n+8,y:-a},{x:-8,y:-a},{x:-8,y:0}],l=Kc(r,n,a,s);return l.attr("style",e.style),Tn(e,l),e.intersect=function(u){return an.polygon(e,s,u)},r},"subroutine"),ugt=o((t,e)=>{let r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),i=r.insert("circle",":first-child");return i.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),Tn(e,i),e.intersect=function(n){return an.circle(e,7,n)},r},"start"),sAe=o((t,e,r)=>{let i=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),n=70,a=10;r==="LR"&&(n=10,a=70);let s=i.append("rect").attr("x",-1*n/2).attr("y",-1*a/2).attr("width",n).attr("height",a).attr("class","fork-join");return Tn(e,s),e.height=e.height+e.padding/2,e.width=e.width+e.padding/2,e.intersect=function(l){return an.rect(e,l)},i},"forkJoin"),hgt=o((t,e)=>{let r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),i=r.insert("circle",":first-child"),n=r.insert("circle",":first-child");return n.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),i.attr("class","state-end").attr("r",5).attr("width",10).attr("height",10),Tn(e,n),e.intersect=function(a){return an.circle(e,7,a)},r},"end"),fgt=o(async(t,e)=>{let r=e.padding/2,i=4,n=8,a;e.classes?a="node "+e.classes:a="node default";let s=t.insert("g").attr("class",a).attr("id",e.domId||e.id),l=s.insert("rect",":first-child"),u=s.insert("line"),h=s.insert("line"),f=0,d=i,p=s.insert("g").attr("class","label"),m=0,g=e.classData.annotations?.[0],y=e.classData.annotations[0]?"\xAB"+e.classData.annotations[0]+"\xBB":"",v=await Vo(p,y,e.labelStyle,!0,!0),x=v.getBBox();if(Or(ge())){let S=v.children[0],L=Ze(v);x=S.getBoundingClientRect(),L.attr("width",x.width),L.attr("height",x.height)}e.classData.annotations[0]&&(d+=x.height+i,f+=x.width);let b=e.classData.label;e.classData.type!==void 0&&e.classData.type!==""&&(Or(ge())?b+="<"+e.classData.type+">":b+="<"+e.classData.type+">");let T=await Vo(p,b,e.labelStyle,!0,!0);Ze(T).attr("class","classTitle");let w=T.getBBox();if(Or(ge())){let S=T.children[0],L=Ze(T);w=S.getBoundingClientRect(),L.attr("width",w.width),L.attr("height",w.height)}d+=w.height+i,w.width>f&&(f=w.width);let k=[];e.classData.members.forEach(async S=>{let L=S.getDisplayDetails(),M=L.displayText;Or(ge())&&(M=M.replace(//g,">"));let I=await Vo(p,M,L.cssStyle?L.cssStyle:e.labelStyle,!0,!0),A=I.getBBox();if(Or(ge())){let _=I.children[0],D=Ze(I);A=_.getBoundingClientRect(),D.attr("width",A.width),D.attr("height",A.height)}A.width>f&&(f=A.width),d+=A.height+i,k.push(I)}),d+=n;let C=[];if(e.classData.methods.forEach(async S=>{let L=S.getDisplayDetails(),M=L.displayText;Or(ge())&&(M=M.replace(//g,">"));let I=await Vo(p,M,L.cssStyle?L.cssStyle:e.labelStyle,!0,!0),A=I.getBBox();if(Or(ge())){let _=I.children[0],D=Ze(I);A=_.getBoundingClientRect(),D.attr("width",A.width),D.attr("height",A.height)}A.width>f&&(f=A.width),d+=A.height+i,C.push(I)}),d+=n,g){let S=(f-x.width)/2;Ze(v).attr("transform","translate( "+(-1*f/2+S)+", "+-1*d/2+")"),m=x.height+i}let E=(f-w.width)/2;return Ze(T).attr("transform","translate( "+(-1*f/2+E)+", "+(-1*d/2+m)+")"),m+=w.height+i,u.attr("class","divider").attr("x1",-f/2-r).attr("x2",f/2+r).attr("y1",-d/2-r+n+m).attr("y2",-d/2-r+n+m),m+=n,k.forEach(S=>{Ze(S).attr("transform","translate( "+-f/2+", "+(-1*d/2+m+n/2)+")");let L=S?.getBBox();m+=(L?.height??0)+i}),m+=n,h.attr("class","divider").attr("x1",-f/2-r).attr("x2",f/2+r).attr("y1",-d/2-r+n+m).attr("y2",-d/2-r+n+m),m+=n,C.forEach(S=>{Ze(S).attr("transform","translate( "+-f/2+", "+(-1*d/2+m)+")");let L=S?.getBBox();m+=(L?.height??0)+i}),l.attr("style",e.style).attr("class","outer title-state").attr("x",-f/2-r).attr("y",-(d/2)-r).attr("width",f+e.padding).attr("height",d+e.padding),Tn(e,l),e.intersect=function(S){return an.rect(e,S)},s},"class_box"),oAe={rhombus:aAe,composite:igt,question:aAe,rect:rgt,labelRect:ngt,rectWithTitle:agt,choice:Hmt,circle:ogt,doublecircle:lgt,stadium:sgt,hexagon:Ymt,block_arrow:jmt,rect_left_inv_arrow:Xmt,lean_right:Kmt,lean_left:Qmt,trapezoid:Zmt,inv_trapezoid:Jmt,rect_right_inv_arrow:egt,cylinder:tgt,start:ugt,end:hgt,note:rAe,subroutine:cgt,fork:sAe,join:sAe,class_box:fgt},r8={},MH=o(async(t,e,r)=>{let i,n;if(e.link){let a;ge().securityLevel==="sandbox"?a="_top":e.linkTarget&&(a=e.linkTarget||"_blank"),i=t.insert("svg:a").attr("xlink:href",e.link).attr("target",a),n=await oAe[e.shape](i,e,r)}else n=await oAe[e.shape](t,e,r),i=n;return e.tooltip&&n.attr("title",e.tooltip),e.class&&n.attr("class","node default "+e.class),r8[e.id]=i,e.haveCallback&&r8[e.id].attr("class",r8[e.id].attr("class")+" clickable"),i},"insertNode"),lAe=o(t=>{let e=r8[t.id];Q.trace("Transforming node",t.diff,t,"translate("+(t.x-t.width/2-5)+", "+t.width/2+")");let r=8,i=t.diff||0;return t.clusterNode?e.attr("transform","translate("+(t.x+i-t.width/2)+", "+(t.y-t.height/2-r)+")"):e.attr("transform","translate("+t.x+", "+t.y+")"),i},"positionNode")});function uAe(t,e,r=!1){let i=t,n="default";(i?.classes?.length||0)>0&&(n=(i?.classes??[]).join(" ")),n=n+" flowchart-label";let a=0,s="",l;switch(i.type){case"round":a=5,s="rect";break;case"composite":a=0,s="composite",l=0;break;case"square":s="rect";break;case"diamond":s="question";break;case"hexagon":s="hexagon";break;case"block_arrow":s="block_arrow";break;case"odd":s="rect_left_inv_arrow";break;case"lean_right":s="lean_right";break;case"lean_left":s="lean_left";break;case"trapezoid":s="trapezoid";break;case"inv_trapezoid":s="inv_trapezoid";break;case"rect_left_inv_arrow":s="rect_left_inv_arrow";break;case"circle":s="circle";break;case"ellipse":s="ellipse";break;case"stadium":s="stadium";break;case"subroutine":s="subroutine";break;case"cylinder":s="cylinder";break;case"group":s="rect";break;case"doublecircle":s="doublecircle";break;default:s="rect"}let u=xI(i?.styles??[]),h=i.label,f=i.size??{width:0,height:0,x:0,y:0},d=e.getDiagramId();return{labelStyle:u.labelStyle,shape:s,labelText:h,rx:a,ry:a,class:n,style:u.style,id:i.id,domId:d?`${d}-${i.id}`:i.id,directions:i.directions,width:f.width,height:f.height,x:f.x,y:f.y,positioned:r,intersect:void 0,type:i.type,padding:l??Lt()?.block?.padding??0}}async function dgt(t,e,r){let i=uAe(e,r,!1);if(i.type==="group")return;let n=Lt(),a=await MH(t,i,{config:n}),s=a.node().getBBox(),l=r.getBlock(i.id);l.size={width:s.width,height:s.height,x:0,y:0,node:a},r.setBlock(l),a.remove()}async function pgt(t,e,r){let i=uAe(e,r,!0);if(r.getBlock(i.id).type!=="space"){let a=Lt();await MH(t,i,{config:a}),e.intersect=i?.intersect,lAe(i)}}async function OH(t,e,r,i){for(let n of e)await i(t,n,r),n.children&&await OH(t,n.children,r,i)}async function hAe(t,e,r){await OH(t,e,r,dgt)}async function fAe(t,e,r){await OH(t,e,r,pgt)}async function dAe(t,e,r,i,n){let a=new Ai({multigraph:!0,compound:!0});a.setGraph({rankdir:"TB",nodesep:10,ranksep:10,marginx:8,marginy:8});for(let s of r)s.size&&a.setNode(s.id,{width:s.size.width,height:s.size.height,intersect:s.intersect});for(let s of e)if(s.start&&s.end){let l=i.getBlock(s.start),u=i.getBlock(s.end);if(l?.size&&u?.size){let h=l.size,f=u.size,d=[{x:h.x,y:h.y},{x:h.x+(f.x-h.x)/2,y:h.y+(f.y-h.y)/2},{x:f.x,y:f.y}],p=n?`${n}-${s.id}`:s.id;G6e(t,{v:s.start,w:s.end,name:p},{...s,id:p,arrowTypeEnd:s.arrowTypeEnd,arrowTypeStart:s.arrowTypeStart,points:d,classes:"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1"},void 0,"block",a,n),s.label&&(await $6e(t,{...s,label:s.label,labelStyle:"stroke: #333; stroke-width: 1.5px;fill:none;",arrowTypeEnd:s.arrowTypeEnd,arrowTypeStart:s.arrowTypeStart,points:d,classes:"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1"}),z6e({...s,x:d[1].x,y:d[1].y},{originalPath:d}))}}}var pAe=P(()=>{"use strict";$l();Sr();V6e();cAe();er();o(uAe,"getNodeFromBlock");o(dgt,"calculateBlockSize");o(pgt,"insertBlockPositioned");o(OH,"performOperations");o(hAe,"calculateBlockSizes");o(fAe,"insertBlocks");o(dAe,"insertEdges")});var mgt,ggt,mAe,gAe=P(()=>{"use strict";Pr();Sr();D6e();bt();Xi();M6e();pAe();mgt=o(function(t,e){return e.db.getClasses()},"getClasses"),ggt=o(async function(t,e,r,i){let{securityLevel:n,block:a}=Lt(),s=i.db;s.setDiagramId(e);let l;n==="sandbox"&&(l=Ze("#i"+e));let u=n==="sandbox"?Ze(l.nodes()[0].contentDocument.body):Ze("body"),h=n==="sandbox"?u.select(`[id="${e}"]`):Ze(`[id="${e}"]`);_6e(h,["point","circle","cross"],i.type,e);let d=s.getBlocks(),p=s.getBlocksFlat(),m=s.getEdges(),g=h.insert("g").attr("class","block");await hAe(g,d,s);let y=I6e(s);if(await fAe(g,d,s),await dAe(g,m,p,s,e),y){let v=y,x=Math.max(1,Math.round(.125*(v.width/v.height))),b=v.height+x+10,T=v.width+10,{useMaxWidth:w}=a;Hr(h,b,T,!!w),Q.debug("Here Bounds",y,v),h.attr("viewBox",`${v.x-5} ${v.y-5} ${v.width+10} ${v.height+10}`)}},"draw"),mAe={draw:ggt,getClasses:mgt}});var yAe={};ur(yAe,{diagram:()=>ygt});var ygt,vAe=P(()=>{"use strict";v6e();E6e();A6e();gAe();ygt={parser:y6e,db:w6e,renderer:mAe,styles:S6e}});var uh,Tgt,kgt,Cgt,wgt,Egt,Sgt,Agt,WC,PH=P(()=>{"use strict";Sr();wa();Ki();er();J7();uh=new Cp(()=>({cnt:1,stack:[{id:0,level:-1,name:"/",children:[]}]})),Tgt=o(()=>{uh.reset(),wr()},"clear"),kgt=o(()=>uh.records.stack[0],"getRoot"),Cgt=o(()=>uh.records.cnt,"getCount"),wgt=fr.treeView,Egt=o(()=>fi(wgt,Lt().treeView),"getConfig"),Sgt=o((t,e)=>{for(;t<=uh.records.stack[uh.records.stack.length-1].level;)uh.records.stack.pop();let r={id:uh.records.cnt++,level:t,name:e,children:[]};uh.records.stack[uh.records.stack.length-1].children.push(r),uh.records.stack.push(r)},"addNode"),Agt={clear:Tgt,addNode:Sgt,getRoot:kgt,getCount:Cgt,getConfig:Egt,getAccTitle:Dr,getAccDescription:Rr,getDiagramTitle:Nr,setAccDescription:Lr,setAccTitle:Ar,setDiagramTitle:Mr},WC=Agt});var _gt,TAe,kAe=P(()=>{"use strict";bt();vf();PH();sh();_gt=o(t=>{Ss(t,WC),t.nodes.map(e=>WC.addNode(e.indent?parseInt(e.indent):0,e.name))},"populate"),TAe={parse:o(async t=>{let e=await ba("treeView",t);Q.debug(e),_gt(e)},"parse")}});var Dgt,CAe,Lgt,Rgt,Ngt,wAe,EAe=P(()=>{"use strict";bt();ro();Xi();Dgt=o((t,e,r,i,n)=>{let a=i.append("text").text(r.name).attr("dominant-baseline","middle").attr("class","treeView-node-label"),{height:s,width:l}=a.node().getBBox(),u=s+n.paddingY*2,h=l+n.paddingX*2;a.attr("x",t+n.paddingX),a.attr("y",e+u/2),r.BBox={x:t,y:e,width:h,height:u}},"positionLabel"),CAe=o((t,e,r,i,n,a)=>t.append("line").attr("x1",e).attr("y1",r).attr("x2",i).attr("y2",n).attr("stroke-width",a).attr("class","treeView-node-line"),"positionLine"),Lgt=o((t,e,r)=>{let i=0,n=0,a=o((l,u,h,f)=>{let d=f*(h.rowIndent+h.paddingX);Dgt(d,i,u,l,h);let{height:p,width:m}=u.BBox;CAe(l,d-h.rowIndent,i+p/2,d,i+p/2,h.lineThickness),n=Math.max(n,d+m),i+=p},"drawNode"),s=o((l,u=0)=>{a(t,l,r,u),l.children.forEach(p=>{s(p,u+1)});let{x:h,y:f,height:d}=l.BBox;if(l.children.length){let{y:p,height:m}=l.children[l.children.length-1].BBox;CAe(t,h+r.paddingX,f+d,h+r.paddingX,p+m/2+r.lineThickness/2,r.lineThickness)}},"processNode");return s(e),{totalHeight:i,totalWidth:n}},"drawTree"),Rgt=o((t,e,r,i)=>{Q.debug(`Rendering treeView diagram +`+t);let n=i.db,a=n.getRoot(),s=n.getConfig(),l=Fi(e),u=l.append("g");u.attr("class","tree-view");let{totalHeight:h,totalWidth:f}=Lgt(u,a,s);l.attr("viewBox",`-${s.lineThickness/2} 0 ${f} ${h}`),Hr(l,h,f,s.useMaxWidth)},"draw"),Ngt={draw:Rgt},wAe=Ngt});var Igt,Mgt,SAe,AAe=P(()=>{"use strict";er();Igt={labelFontSize:"16px",labelColor:"black",lineColor:"black"},Mgt=o(({treeView:t})=>{let{labelFontSize:e,labelColor:r,lineColor:i}=fi(Igt,t);return` + .treeView-node-label { + font-size: ${e}; + fill: ${r}; + } + .treeView-node-line { + stroke: ${i}; + } + `},"styles"),SAe=Mgt});var _Ae={};ur(_Ae,{diagram:()=>Ogt});var Ogt,DAe=P(()=>{"use strict";kAe();PH();EAe();AAe();Ogt={db:WC,renderer:wAe,parser:TAe,styles:SAe}});var BH,FH,UC,NAe,$H,Ds,hh,HC,IAe,$gt,YC,MAe,OAe,PAe,BAe,FAe,i8,Np,n8=P(()=>{"use strict";BH={L:"left",R:"right",T:"top",B:"bottom"},FH={L:o(t=>`${t},${t/2} 0,${t} 0,0`,"L"),R:o(t=>`0,${t/2} ${t},0 ${t},${t}`,"R"),T:o(t=>`0,0 ${t},0 ${t/2},${t}`,"T"),B:o(t=>`${t/2},0 ${t},${t} 0,${t}`,"B")},UC={L:o((t,e)=>t-e+2,"L"),R:o((t,e)=>t-2,"R"),T:o((t,e)=>t-e+2,"T"),B:o((t,e)=>t-2,"B")},NAe=o(function(t){return Ds(t)?t==="L"?"R":"L":t==="T"?"B":"T"},"getOppositeArchitectureDirection"),$H=o(function(t){let e=t;return e==="L"||e==="R"||e==="T"||e==="B"},"isArchitectureDirection"),Ds=o(function(t){let e=t;return e==="L"||e==="R"},"isArchitectureDirectionX"),hh=o(function(t){let e=t;return e==="T"||e==="B"},"isArchitectureDirectionY"),HC=o(function(t,e){let r=Ds(t)&&hh(e),i=hh(t)&&Ds(e);return r||i},"isArchitectureDirectionXY"),IAe=o(function(t){let e=t[0],r=t[1],i=Ds(e)&&hh(r),n=hh(e)&&Ds(r);return i||n},"isArchitecturePairXY"),$gt=o(function(t){return t!=="LL"&&t!=="RR"&&t!=="TT"&&t!=="BB"},"isValidArchitectureDirectionPair"),YC=o(function(t,e){let r=`${t}${e}`;return $gt(r)?r:void 0},"getArchitectureDirectionPair"),MAe=o(function([t,e],r){let i=r[0],n=r[1];return Ds(i)?hh(n)?[t+(i==="L"?-1:1),e+(n==="T"?1:-1)]:[t+(i==="L"?-1:1),e]:Ds(n)?[t+(n==="L"?1:-1),e+(i==="T"?1:-1)]:[t,e+(i==="T"?1:-1)]},"shiftPositionByArchitectureDirectionPair"),OAe=o(function(t){return t==="LT"||t==="TL"?[1,1]:t==="BL"||t==="LB"?[1,-1]:t==="BR"||t==="RB"?[-1,-1]:[-1,1]},"getArchitectureDirectionXYFactors"),PAe=o(function(t,e){return HC(t,e)?"bend":Ds(t)?"horizontal":"vertical"},"getArchitectureDirectionAlignment"),BAe=o(function(t){return t.type==="service"},"isArchitectureService"),FAe=o(function(t){return t.type==="junction"},"isArchitectureJunction"),i8=o(t=>t.data(),"edgeData"),Np=o(t=>t.data(),"nodeData")});var zgt,dx,zH=P(()=>{"use strict";Sr();wa();er();Ki();n8();zgt=fr.architecture,dx=class{constructor(){this.nodes={};this.groups={};this.edges=[];this.registeredIds={};this.elements={};this.diagramId="";this.setAccTitle=Ar;this.getAccTitle=Dr;this.setDiagramTitle=Mr;this.getDiagramTitle=Nr;this.getAccDescription=Rr;this.setAccDescription=Lr;this.clear()}static{o(this,"ArchitectureDB")}setDiagramId(e){this.diagramId=e}getDiagramId(){return this.diagramId}clear(){this.nodes={},this.groups={},this.edges=[],this.registeredIds={},this.dataStructures=void 0,this.elements={},this.diagramId="",wr()}addService({id:e,icon:r,in:i,title:n,iconText:a}){if(this.registeredIds[e]!==void 0)throw new Error(`The service id [${e}] is already in use by another ${this.registeredIds[e]}`);if(i!==void 0){if(e===i)throw new Error(`The service [${e}] cannot be placed within itself`);if(this.registeredIds[i]===void 0)throw new Error(`The service [${e}]'s parent does not exist. Please make sure the parent is created before this service`);if(this.registeredIds[i]==="node")throw new Error(`The service [${e}]'s parent is not a group`)}this.registeredIds[e]="node",this.nodes[e]={id:e,type:"service",icon:r,iconText:a,title:n,edges:[],in:i}}getServices(){return Object.values(this.nodes).filter(BAe)}addJunction({id:e,in:r}){if(this.registeredIds[e]!==void 0)throw new Error(`The junction id [${e}] is already in use by another ${this.registeredIds[e]}`);if(r!==void 0){if(e===r)throw new Error(`The junction [${e}] cannot be placed within itself`);if(this.registeredIds[r]===void 0)throw new Error(`The junction [${e}]'s parent does not exist. Please make sure the parent is created before this junction`);if(this.registeredIds[r]==="node")throw new Error(`The junction [${e}]'s parent is not a group`)}this.registeredIds[e]="node",this.nodes[e]={id:e,type:"junction",edges:[],in:r}}getJunctions(){return Object.values(this.nodes).filter(FAe)}getNodes(){return Object.values(this.nodes)}getNode(e){return this.nodes[e]??null}addGroup({id:e,icon:r,in:i,title:n}){if(this.registeredIds?.[e]!==void 0)throw new Error(`The group id [${e}] is already in use by another ${this.registeredIds[e]}`);if(i!==void 0){if(e===i)throw new Error(`The group [${e}] cannot be placed within itself`);if(this.registeredIds?.[i]===void 0)throw new Error(`The group [${e}]'s parent does not exist. Please make sure the parent is created before this group`);if(this.registeredIds?.[i]==="node")throw new Error(`The group [${e}]'s parent is not a group`)}this.registeredIds[e]="group",this.groups[e]={id:e,icon:r,title:n,in:i}}getGroups(){return Object.values(this.groups)}addEdge({lhsId:e,rhsId:r,lhsDir:i,rhsDir:n,lhsInto:a,rhsInto:s,lhsGroup:l,rhsGroup:u,title:h}){if(!$H(i))throw new Error(`Invalid direction given for left hand side of edge ${e}--${r}. Expected (L,R,T,B) got ${String(i)}`);if(!$H(n))throw new Error(`Invalid direction given for right hand side of edge ${e}--${r}. Expected (L,R,T,B) got ${String(n)}`);if(this.nodes[e]===void 0&&this.groups[e]===void 0)throw new Error(`The left-hand id [${e}] does not yet exist. Please create the service/group before declaring an edge to it.`);if(this.nodes[r]===void 0&&this.groups[r]===void 0)throw new Error(`The right-hand id [${r}] does not yet exist. Please create the service/group before declaring an edge to it.`);let f=this.nodes[e].in,d=this.nodes[r].in;if(l&&f&&d&&f==d)throw new Error(`The left-hand id [${e}] is modified to traverse the group boundary, but the edge does not pass through two groups.`);if(u&&f&&d&&f==d)throw new Error(`The right-hand id [${r}] is modified to traverse the group boundary, but the edge does not pass through two groups.`);let p={lhsId:e,lhsDir:i,lhsInto:a,lhsGroup:l,rhsId:r,rhsDir:n,rhsInto:s,rhsGroup:u,title:h};this.edges.push(p),this.nodes[e]&&this.nodes[r]&&(this.nodes[e].edges.push(this.edges[this.edges.length-1]),this.nodes[r].edges.push(this.edges[this.edges.length-1]))}getEdges(){return this.edges}getDataStructures(){if(this.dataStructures===void 0){let e={},r=Object.entries(this.nodes).reduce((u,[h,f])=>(u[h]=f.edges.reduce((d,p)=>{let m=this.getNode(p.lhsId)?.in,g=this.getNode(p.rhsId)?.in;if(m&&g&&m!==g){let y=PAe(p.lhsDir,p.rhsDir);y!=="bend"&&(e[m]??={},e[m][g]=y,e[g]??={},e[g][m]=y)}if(p.lhsId===h){let y=YC(p.lhsDir,p.rhsDir);y&&(d[y]=p.rhsId)}else{let y=YC(p.rhsDir,p.lhsDir);y&&(d[y]=p.lhsId)}return d},{}),u),{}),i=Object.keys(r)[0],n={[i]:1},a=Object.keys(r).reduce((u,h)=>h===i?u:{...u,[h]:1},{}),s=o(u=>{let h={[u]:[0,0]},f=[u];for(;f.length>0;){let d=f.shift();if(d){n[d]=1,delete a[d];let p=r[d],[m,g]=h[d];Object.entries(p).forEach(([y,v])=>{n[v]||(h[v]=MAe([m,g],y),f.push(v))})}}return h},"BFS"),l=[s(i)];for(;Object.keys(a).length>0;)l.push(s(Object.keys(a)[0]));this.dataStructures={adjList:r,spatialMaps:l,groupAlignments:e}}return this.dataStructures}setElementForId(e,r){this.elements[e]=r}getElementById(e){return this.elements[e]}getConfig(){return fi({...zgt,...Lt().architecture})}getConfigField(e){return this.getConfig()[e]}}});var Ggt,GH,$Ae=P(()=>{"use strict";sh();bt();vf();zH();Ggt=o((t,e)=>{Ss(t,e),t.groups.map(r=>e.addGroup(r)),t.services.map(r=>e.addService({...r,type:"service"})),t.junctions.map(r=>e.addJunction({...r,type:"junction"})),t.edges.map(r=>e.addEdge(r))},"populateDb"),GH={parser:{yy:void 0},parse:o(async t=>{let e=await ba("architecture",t);Q.debug(e);let r=GH.parser?.yy;if(!(r instanceof dx))throw new Error("parser.parser?.yy was not a ArchitectureDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues.");Ggt(e,r)},"parse")}});var Vgt,zAe,GAe=P(()=>{"use strict";Vgt=o(t=>` + .edge { + stroke-width: ${t.archEdgeWidth}; + stroke: ${t.archEdgeColor}; + fill: none; + } + + .arrow { + fill: ${t.archEdgeArrowColor}; + } + + .node-bkg { + fill: none; + stroke: ${t.archGroupBorderColor}; + stroke-width: ${t.archGroupBorderWidth}; + stroke-dasharray: 8; + } + .node-icon-text { + display: flex; + align-items: center; + } + + .node-icon-text > div { + color: #fff; + margin: 1px; + height: fit-content; + text-align: center; + overflow: hidden; + display: -webkit-box; + -webkit-box-orient: vertical; + } +`,"getStyles"),zAe=Vgt});var qH=ar((jC,VH)=>{"use strict";o((function(e,r){typeof jC=="object"&&typeof VH=="object"?VH.exports=r():typeof define=="function"&&define.amd?define([],r):typeof jC=="object"?jC.layoutBase=r():e.layoutBase=r()}),"webpackUniversalModuleDefinition")(jC,function(){return(function(t){var e={};function r(i){if(e[i])return e[i].exports;var n=e[i]={i,l:!1,exports:{}};return t[i].call(n.exports,n,n.exports,r),n.l=!0,n.exports}return o(r,"__webpack_require__"),r.m=t,r.c=e,r.i=function(i){return i},r.d=function(i,n,a){r.o(i,n)||Object.defineProperty(i,n,{configurable:!1,enumerable:!0,get:a})},r.n=function(i){var n=i&&i.__esModule?o(function(){return i.default},"getDefault"):o(function(){return i},"getModuleExports");return r.d(n,"a",n),n},r.o=function(i,n){return Object.prototype.hasOwnProperty.call(i,n)},r.p="",r(r.s=28)})([(function(t,e,r){"use strict";function i(){}o(i,"LayoutConstants"),i.QUALITY=1,i.DEFAULT_CREATE_BENDS_AS_NEEDED=!1,i.DEFAULT_INCREMENTAL=!1,i.DEFAULT_ANIMATION_ON_LAYOUT=!0,i.DEFAULT_ANIMATION_DURING_LAYOUT=!1,i.DEFAULT_ANIMATION_PERIOD=50,i.DEFAULT_UNIFORM_LEAF_NODE_SIZES=!1,i.DEFAULT_GRAPH_MARGIN=15,i.NODE_DIMENSIONS_INCLUDE_LABELS=!1,i.SIMPLE_NODE_SIZE=40,i.SIMPLE_NODE_HALF_SIZE=i.SIMPLE_NODE_SIZE/2,i.EMPTY_COMPOUND_NODE_SIZE=40,i.MIN_EDGE_LENGTH=1,i.WORLD_BOUNDARY=1e6,i.INITIAL_WORLD_BOUNDARY=i.WORLD_BOUNDARY/1e3,i.WORLD_CENTER_X=1200,i.WORLD_CENTER_Y=900,t.exports=i}),(function(t,e,r){"use strict";var i=r(2),n=r(8),a=r(9);function s(u,h,f){i.call(this,f),this.isOverlapingSourceAndTarget=!1,this.vGraphObject=f,this.bendpoints=[],this.source=u,this.target=h}o(s,"LEdge"),s.prototype=Object.create(i.prototype);for(var l in i)s[l]=i[l];s.prototype.getSource=function(){return this.source},s.prototype.getTarget=function(){return this.target},s.prototype.isInterGraph=function(){return this.isInterGraph},s.prototype.getLength=function(){return this.length},s.prototype.isOverlapingSourceAndTarget=function(){return this.isOverlapingSourceAndTarget},s.prototype.getBendpoints=function(){return this.bendpoints},s.prototype.getLca=function(){return this.lca},s.prototype.getSourceInLca=function(){return this.sourceInLca},s.prototype.getTargetInLca=function(){return this.targetInLca},s.prototype.getOtherEnd=function(u){if(this.source===u)return this.target;if(this.target===u)return this.source;throw"Node is not incident with this edge"},s.prototype.getOtherEndInGraph=function(u,h){for(var f=this.getOtherEnd(u),d=h.getGraphManager().getRoot();;){if(f.getOwner()==h)return f;if(f.getOwner()==d)break;f=f.getOwner().getParent()}return null},s.prototype.updateLength=function(){var u=new Array(4);this.isOverlapingSourceAndTarget=n.getIntersection(this.target.getRect(),this.source.getRect(),u),this.isOverlapingSourceAndTarget||(this.lengthX=u[0]-u[2],this.lengthY=u[1]-u[3],Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY))},s.prototype.updateLengthSimple=function(){this.lengthX=this.target.getCenterX()-this.source.getCenterX(),this.lengthY=this.target.getCenterY()-this.source.getCenterY(),Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY)},t.exports=s}),(function(t,e,r){"use strict";function i(n){this.vGraphObject=n}o(i,"LGraphObject"),t.exports=i}),(function(t,e,r){"use strict";var i=r(2),n=r(10),a=r(13),s=r(0),l=r(16),u=r(5);function h(d,p,m,g){m==null&&g==null&&(g=p),i.call(this,g),d.graphManager!=null&&(d=d.graphManager),this.estimatedSize=n.MIN_VALUE,this.inclusionTreeDepth=n.MAX_VALUE,this.vGraphObject=g,this.edges=[],this.graphManager=d,m!=null&&p!=null?this.rect=new a(p.x,p.y,m.width,m.height):this.rect=new a}o(h,"LNode"),h.prototype=Object.create(i.prototype);for(var f in i)h[f]=i[f];h.prototype.getEdges=function(){return this.edges},h.prototype.getChild=function(){return this.child},h.prototype.getOwner=function(){return this.owner},h.prototype.getWidth=function(){return this.rect.width},h.prototype.setWidth=function(d){this.rect.width=d},h.prototype.getHeight=function(){return this.rect.height},h.prototype.setHeight=function(d){this.rect.height=d},h.prototype.getCenterX=function(){return this.rect.x+this.rect.width/2},h.prototype.getCenterY=function(){return this.rect.y+this.rect.height/2},h.prototype.getCenter=function(){return new u(this.rect.x+this.rect.width/2,this.rect.y+this.rect.height/2)},h.prototype.getLocation=function(){return new u(this.rect.x,this.rect.y)},h.prototype.getRect=function(){return this.rect},h.prototype.getDiagonal=function(){return Math.sqrt(this.rect.width*this.rect.width+this.rect.height*this.rect.height)},h.prototype.getHalfTheDiagonal=function(){return Math.sqrt(this.rect.height*this.rect.height+this.rect.width*this.rect.width)/2},h.prototype.setRect=function(d,p){this.rect.x=d.x,this.rect.y=d.y,this.rect.width=p.width,this.rect.height=p.height},h.prototype.setCenter=function(d,p){this.rect.x=d-this.rect.width/2,this.rect.y=p-this.rect.height/2},h.prototype.setLocation=function(d,p){this.rect.x=d,this.rect.y=p},h.prototype.moveBy=function(d,p){this.rect.x+=d,this.rect.y+=p},h.prototype.getEdgeListToNode=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(y.target==d){if(y.source!=g)throw"Incorrect edge source!";p.push(y)}}),p},h.prototype.getEdgesBetween=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(!(y.source==g||y.target==g))throw"Incorrect edge source and/or target";(y.target==d||y.source==d)&&p.push(y)}),p},h.prototype.getNeighborsList=function(){var d=new Set,p=this;return p.edges.forEach(function(m){if(m.source==p)d.add(m.target);else{if(m.target!=p)throw"Incorrect incidency!";d.add(m.source)}}),d},h.prototype.withChildren=function(){var d=new Set,p,m;if(d.add(this),this.child!=null)for(var g=this.child.getNodes(),y=0;yp?(this.rect.x-=(this.labelWidth-p)/2,this.setWidth(this.labelWidth)):this.labelPosHorizontal=="right"&&this.setWidth(p+this.labelWidth)),this.labelHeight&&(this.labelPosVertical=="top"?(this.rect.y-=this.labelHeight,this.setHeight(m+this.labelHeight)):this.labelPosVertical=="center"&&this.labelHeight>m?(this.rect.y-=(this.labelHeight-m)/2,this.setHeight(this.labelHeight)):this.labelPosVertical=="bottom"&&this.setHeight(m+this.labelHeight))}}},h.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==n.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},h.prototype.transform=function(d){var p=this.rect.x;p>s.WORLD_BOUNDARY?p=s.WORLD_BOUNDARY:p<-s.WORLD_BOUNDARY&&(p=-s.WORLD_BOUNDARY);var m=this.rect.y;m>s.WORLD_BOUNDARY?m=s.WORLD_BOUNDARY:m<-s.WORLD_BOUNDARY&&(m=-s.WORLD_BOUNDARY);var g=new u(p,m),y=d.inverseTransformPoint(g);this.setLocation(y.x,y.y)},h.prototype.getLeft=function(){return this.rect.x},h.prototype.getRight=function(){return this.rect.x+this.rect.width},h.prototype.getTop=function(){return this.rect.y},h.prototype.getBottom=function(){return this.rect.y+this.rect.height},h.prototype.getParent=function(){return this.owner==null?null:this.owner.getParent()},t.exports=h}),(function(t,e,r){"use strict";var i=r(0);function n(){}o(n,"FDLayoutConstants");for(var a in i)n[a]=i[a];n.MAX_ITERATIONS=2500,n.DEFAULT_EDGE_LENGTH=50,n.DEFAULT_SPRING_STRENGTH=.45,n.DEFAULT_REPULSION_STRENGTH=4500,n.DEFAULT_GRAVITY_STRENGTH=.4,n.DEFAULT_COMPOUND_GRAVITY_STRENGTH=1,n.DEFAULT_GRAVITY_RANGE_FACTOR=3.8,n.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=1.5,n.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION=!0,n.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION=!0,n.DEFAULT_COOLING_FACTOR_INCREMENTAL=.3,n.COOLING_ADAPTATION_FACTOR=.33,n.ADAPTATION_LOWER_NODE_LIMIT=1e3,n.ADAPTATION_UPPER_NODE_LIMIT=5e3,n.MAX_NODE_DISPLACEMENT_INCREMENTAL=100,n.MAX_NODE_DISPLACEMENT=n.MAX_NODE_DISPLACEMENT_INCREMENTAL*3,n.MIN_REPULSION_DIST=n.DEFAULT_EDGE_LENGTH/10,n.CONVERGENCE_CHECK_PERIOD=100,n.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=.1,n.MIN_EDGE_LENGTH=1,n.GRID_CALCULATION_CHECK_PERIOD=10,t.exports=n}),(function(t,e,r){"use strict";function i(n,a){n==null&&a==null?(this.x=0,this.y=0):(this.x=n,this.y=a)}o(i,"PointD"),i.prototype.getX=function(){return this.x},i.prototype.getY=function(){return this.y},i.prototype.setX=function(n){this.x=n},i.prototype.setY=function(n){this.y=n},i.prototype.getDifference=function(n){return new DimensionD(this.x-n.x,this.y-n.y)},i.prototype.getCopy=function(){return new i(this.x,this.y)},i.prototype.translate=function(n){return this.x+=n.width,this.y+=n.height,this},t.exports=i}),(function(t,e,r){"use strict";var i=r(2),n=r(10),a=r(0),s=r(7),l=r(3),u=r(1),h=r(13),f=r(12),d=r(11);function p(g,y,v){i.call(this,v),this.estimatedSize=n.MIN_VALUE,this.margin=a.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=g,y!=null&&y instanceof s?this.graphManager=y:y!=null&&y instanceof Layout&&(this.graphManager=y.graphManager)}o(p,"LGraph"),p.prototype=Object.create(i.prototype);for(var m in i)p[m]=i[m];p.prototype.getNodes=function(){return this.nodes},p.prototype.getEdges=function(){return this.edges},p.prototype.getGraphManager=function(){return this.graphManager},p.prototype.getParent=function(){return this.parent},p.prototype.getLeft=function(){return this.left},p.prototype.getRight=function(){return this.right},p.prototype.getTop=function(){return this.top},p.prototype.getBottom=function(){return this.bottom},p.prototype.isConnected=function(){return this.isConnected},p.prototype.add=function(g,y,v){if(y==null&&v==null){var x=g;if(this.graphManager==null)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(x)>-1)throw"Node already in graph!";return x.owner=this,this.getNodes().push(x),x}else{var b=g;if(!(this.getNodes().indexOf(y)>-1&&this.getNodes().indexOf(v)>-1))throw"Source or target not in graph!";if(!(y.owner==v.owner&&y.owner==this))throw"Both owners must be this graph!";return y.owner!=v.owner?null:(b.source=y,b.target=v,b.isInterGraph=!1,this.getEdges().push(b),y.edges.push(b),v!=y&&v.edges.push(b),b)}},p.prototype.remove=function(g){var y=g;if(g instanceof l){if(y==null)throw"Node is null!";if(!(y.owner!=null&&y.owner==this))throw"Owner graph is invalid!";if(this.graphManager==null)throw"Owner graph manager is invalid!";for(var v=y.edges.slice(),x,b=v.length,T=0;T-1&&C>-1))throw"Source and/or target doesn't know this edge!";x.source.edges.splice(k,1),x.target!=x.source&&x.target.edges.splice(C,1);var w=x.source.owner.getEdges().indexOf(x);if(w==-1)throw"Not in owner's edge list!";x.source.owner.getEdges().splice(w,1)}},p.prototype.updateLeftTop=function(){for(var g=n.MAX_VALUE,y=n.MAX_VALUE,v,x,b,T=this.getNodes(),w=T.length,k=0;kv&&(g=v),y>x&&(y=x)}return g==n.MAX_VALUE?null:(T[0].getParent().paddingLeft!=null?b=T[0].getParent().paddingLeft:b=this.margin,this.left=y-b,this.top=g-b,new f(this.left,this.top))},p.prototype.updateBounds=function(g){for(var y=n.MAX_VALUE,v=-n.MAX_VALUE,x=n.MAX_VALUE,b=-n.MAX_VALUE,T,w,k,C,E,S=this.nodes,L=S.length,M=0;MT&&(y=T),vk&&(x=k),bT&&(y=T),vk&&(x=k),b=this.nodes.length){var L=0;v.forEach(function(M){M.owner==g&&L++}),L==this.nodes.length&&(this.isConnected=!0)}},t.exports=p}),(function(t,e,r){"use strict";var i,n=r(1);function a(s){i=r(6),this.layout=s,this.graphs=[],this.edges=[]}o(a,"LGraphManager"),a.prototype.addRoot=function(){var s=this.layout.newGraph(),l=this.layout.newNode(null),u=this.add(s,l);return this.setRootGraph(u),this.rootGraph},a.prototype.add=function(s,l,u,h,f){if(u==null&&h==null&&f==null){if(s==null)throw"Graph is null!";if(l==null)throw"Parent node is null!";if(this.graphs.indexOf(s)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(s),s.parent!=null)throw"Already has a parent!";if(l.child!=null)throw"Already has a child!";return s.parent=l,l.child=s,s}else{f=u,h=l,u=s;var d=h.getOwner(),p=f.getOwner();if(!(d!=null&&d.getGraphManager()==this))throw"Source not in this graph mgr!";if(!(p!=null&&p.getGraphManager()==this))throw"Target not in this graph mgr!";if(d==p)return u.isInterGraph=!1,d.add(u,h,f);if(u.isInterGraph=!0,u.source=h,u.target=f,this.edges.indexOf(u)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(u),!(u.source!=null&&u.target!=null))throw"Edge source and/or target is null!";if(!(u.source.edges.indexOf(u)==-1&&u.target.edges.indexOf(u)==-1))throw"Edge already in source and/or target incidency list!";return u.source.edges.push(u),u.target.edges.push(u),u}},a.prototype.remove=function(s){if(s instanceof i){var l=s;if(l.getGraphManager()!=this)throw"Graph not in this graph mgr";if(!(l==this.rootGraph||l.parent!=null&&l.parent.graphManager==this))throw"Invalid parent node!";var u=[];u=u.concat(l.getEdges());for(var h,f=u.length,d=0;d=s.getRight()?l[0]+=Math.min(s.getX()-a.getX(),a.getRight()-s.getRight()):s.getX()<=a.getX()&&s.getRight()>=a.getRight()&&(l[0]+=Math.min(a.getX()-s.getX(),s.getRight()-a.getRight())),a.getY()<=s.getY()&&a.getBottom()>=s.getBottom()?l[1]+=Math.min(s.getY()-a.getY(),a.getBottom()-s.getBottom()):s.getY()<=a.getY()&&s.getBottom()>=a.getBottom()&&(l[1]+=Math.min(a.getY()-s.getY(),s.getBottom()-a.getBottom()));var f=Math.abs((s.getCenterY()-a.getCenterY())/(s.getCenterX()-a.getCenterX()));s.getCenterY()===a.getCenterY()&&s.getCenterX()===a.getCenterX()&&(f=1);var d=f*l[0],p=l[1]/f;l[0]d)return l[0]=u,l[1]=m,l[2]=f,l[3]=S,!1;if(hf)return l[0]=p,l[1]=h,l[2]=C,l[3]=d,!1;if(uf?(l[0]=y,l[1]=v,A=!0):(l[0]=g,l[1]=m,A=!0):D===R&&(u>f?(l[0]=p,l[1]=m,A=!0):(l[0]=x,l[1]=v,A=!0)),-N===R?f>u?(l[2]=E,l[3]=S,_=!0):(l[2]=C,l[3]=k,_=!0):N===R&&(f>u?(l[2]=w,l[3]=k,_=!0):(l[2]=L,l[3]=S,_=!0)),A&&_)return!1;if(u>f?h>d?(B=this.getCardinalDirection(D,R,4),O=this.getCardinalDirection(N,R,2)):(B=this.getCardinalDirection(-D,R,3),O=this.getCardinalDirection(-N,R,1)):h>d?(B=this.getCardinalDirection(-D,R,1),O=this.getCardinalDirection(-N,R,3)):(B=this.getCardinalDirection(D,R,2),O=this.getCardinalDirection(N,R,4)),!A)switch(B){case 1:z=m,$=u+-T/R,l[0]=$,l[1]=z;break;case 2:$=x,z=h+b*R,l[0]=$,l[1]=z;break;case 3:z=v,$=u+T/R,l[0]=$,l[1]=z;break;case 4:$=y,z=h+-b*R,l[0]=$,l[1]=z;break}if(!_)switch(O){case 1:V=k,F=f+-I/R,l[2]=F,l[3]=V;break;case 2:F=L,V=d+M*R,l[2]=F,l[3]=V;break;case 3:V=S,F=f+I/R,l[2]=F,l[3]=V;break;case 4:F=E,V=d+-M*R,l[2]=F,l[3]=V;break}}return!1},n.getCardinalDirection=function(a,s,l){return a>s?l:1+l%4},n.getIntersection=function(a,s,l,u){if(u==null)return this.getIntersection2(a,s,l);var h=a.x,f=a.y,d=s.x,p=s.y,m=l.x,g=l.y,y=u.x,v=u.y,x=void 0,b=void 0,T=void 0,w=void 0,k=void 0,C=void 0,E=void 0,S=void 0,L=void 0;return T=p-f,k=h-d,E=d*f-h*p,w=v-g,C=m-y,S=y*g-m*v,L=T*C-w*k,L===0?null:(x=(k*S-C*E)/L,b=(w*E-T*S)/L,new i(x,b))},n.angleOfVector=function(a,s,l,u){var h=void 0;return a!==l?(h=Math.atan((u-s)/(l-a)),l=0){var v=(-m+Math.sqrt(m*m-4*p*g))/(2*p),x=(-m-Math.sqrt(m*m-4*p*g))/(2*p),b=null;return v>=0&&v<=1?[v]:x>=0&&x<=1?[x]:b}else return null},n.HALF_PI=.5*Math.PI,n.ONE_AND_HALF_PI=1.5*Math.PI,n.TWO_PI=2*Math.PI,n.THREE_PI=3*Math.PI,t.exports=n}),(function(t,e,r){"use strict";function i(){}o(i,"IMath"),i.sign=function(n){return n>0?1:n<0?-1:0},i.floor=function(n){return n<0?Math.ceil(n):Math.floor(n)},i.ceil=function(n){return n<0?Math.floor(n):Math.ceil(n)},t.exports=i}),(function(t,e,r){"use strict";function i(){}o(i,"Integer"),i.MAX_VALUE=2147483647,i.MIN_VALUE=-2147483648,t.exports=i}),(function(t,e,r){"use strict";var i=(function(){function h(f,d){for(var p=0;p"u"?"undefined":i(a);return a==null||s!="object"&&s!="function"},t.exports=n}),(function(t,e,r){"use strict";function i(m){if(Array.isArray(m)){for(var g=0,y=Array(m.length);g0&&g;){for(T.push(k[0]);T.length>0&&g;){var C=T[0];T.splice(0,1),b.add(C);for(var E=C.getEdges(),x=0;x-1&&k.splice(I,1)}b=new Set,w=new Map}}return m},p.prototype.createDummyNodesForBendpoints=function(m){for(var g=[],y=m.source,v=this.graphManager.calcLowestCommonAncestor(m.source,m.target),x=0;x0){for(var v=this.edgeToDummyNodes.get(y),x=0;x=0&&g.splice(S,1);var L=w.getNeighborsList();L.forEach(function(A){if(y.indexOf(A)<0){var _=v.get(A),D=_-1;D==1&&C.push(A),v.set(A,D)}})}y=y.concat(C),(g.length==1||g.length==2)&&(x=!0,b=g[0])}return b},p.prototype.setGraphManager=function(m){this.graphManager=m},t.exports=p}),(function(t,e,r){"use strict";function i(){}o(i,"RandomSeed"),i.seed=1,i.x=0,i.nextDouble=function(){return i.x=Math.sin(i.seed++)*1e4,i.x-Math.floor(i.x)},t.exports=i}),(function(t,e,r){"use strict";var i=r(5);function n(a,s){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}o(n,"Transform"),n.prototype.getWorldOrgX=function(){return this.lworldOrgX},n.prototype.setWorldOrgX=function(a){this.lworldOrgX=a},n.prototype.getWorldOrgY=function(){return this.lworldOrgY},n.prototype.setWorldOrgY=function(a){this.lworldOrgY=a},n.prototype.getWorldExtX=function(){return this.lworldExtX},n.prototype.setWorldExtX=function(a){this.lworldExtX=a},n.prototype.getWorldExtY=function(){return this.lworldExtY},n.prototype.setWorldExtY=function(a){this.lworldExtY=a},n.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},n.prototype.setDeviceOrgX=function(a){this.ldeviceOrgX=a},n.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},n.prototype.setDeviceOrgY=function(a){this.ldeviceOrgY=a},n.prototype.getDeviceExtX=function(){return this.ldeviceExtX},n.prototype.setDeviceExtX=function(a){this.ldeviceExtX=a},n.prototype.getDeviceExtY=function(){return this.ldeviceExtY},n.prototype.setDeviceExtY=function(a){this.ldeviceExtY=a},n.prototype.transformX=function(a){var s=0,l=this.lworldExtX;return l!=0&&(s=this.ldeviceOrgX+(a-this.lworldOrgX)*this.ldeviceExtX/l),s},n.prototype.transformY=function(a){var s=0,l=this.lworldExtY;return l!=0&&(s=this.ldeviceOrgY+(a-this.lworldOrgY)*this.ldeviceExtY/l),s},n.prototype.inverseTransformX=function(a){var s=0,l=this.ldeviceExtX;return l!=0&&(s=this.lworldOrgX+(a-this.ldeviceOrgX)*this.lworldExtX/l),s},n.prototype.inverseTransformY=function(a){var s=0,l=this.ldeviceExtY;return l!=0&&(s=this.lworldOrgY+(a-this.ldeviceOrgY)*this.lworldExtY/l),s},n.prototype.inverseTransformPoint=function(a){var s=new i(this.inverseTransformX(a.x),this.inverseTransformY(a.y));return s},t.exports=n}),(function(t,e,r){"use strict";function i(d){if(Array.isArray(d)){for(var p=0,m=Array(d.length);pa.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*a.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-a.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT_INCREMENTAL):(d>a.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(a.COOLING_ADAPTATION_FACTOR,1-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*(1-a.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(this.getAllNodes().length*5,this.maxIterations),this.displacementThresholdPerNode=3*a.DEFAULT_EDGE_LENGTH/100,this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},h.prototype.calcSpringForces=function(){for(var d=this.getAllEdges(),p,m=0;m0&&arguments[0]!==void 0?arguments[0]:!0,p=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,m,g,y,v,x=this.getAllNodes(),b;if(this.useFRGridVariant)for(this.totalIterations%a.GRID_CALCULATION_CHECK_PERIOD==1&&d&&this.updateGrid(),b=new Set,m=0;mT||b>T)&&(d.gravitationForceX=-this.gravityConstant*y,d.gravitationForceY=-this.gravityConstant*v)):(T=p.getEstimatedSize()*this.compoundGravityRangeFactor,(x>T||b>T)&&(d.gravitationForceX=-this.gravityConstant*y*this.compoundGravityConstant,d.gravitationForceY=-this.gravityConstant*v*this.compoundGravityConstant))},h.prototype.isConverged=function(){var d,p=!1;return this.totalIterations>this.maxIterations/3&&(p=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),d=this.totalDisplacement=x.length||T>=x[0].length)){for(var w=0;wh},"_defaultCompareFunction")}]),l})();t.exports=s}),(function(t,e,r){"use strict";function i(){}o(i,"SVD"),i.svd=function(n){this.U=null,this.V=null,this.s=null,this.m=0,this.n=0,this.m=n.length,this.n=n[0].length;var a=Math.min(this.m,this.n);this.s=(function(It){for(var ot=[];It-- >0;)ot.push(0);return ot})(Math.min(this.m+1,this.n)),this.U=(function(It){var ot=o(function ct(Dt){if(Dt.length==0)return 0;for(var kt=[],yt=0;yt0;)ot.push(0);return ot})(this.n),l=(function(It){for(var ot=[];It-- >0;)ot.push(0);return ot})(this.m),u=!0,h=!0,f=Math.min(this.m-1,this.n),d=Math.max(0,Math.min(this.n-2,this.m)),p=0;p=0;R--)if(this.s[R]!==0){for(var B=R+1;B=0;X--){if((function(It,ot){return It&&ot})(X0;){var de=void 0,Ee=void 0;for(de=_-2;de>=-1&&de!==-1;de--)if(Math.abs(s[de])<=be+te*(Math.abs(this.s[de])+Math.abs(this.s[de+1]))){s[de]=0;break}if(de===_-2)Ee=4;else{var Ne=void 0;for(Ne=_-1;Ne>=de&&Ne!==de;Ne--){var we=(Ne!==_?Math.abs(s[Ne]):0)+(Ne!==de+1?Math.abs(s[Ne-1]):0);if(Math.abs(this.s[Ne])<=be+te*we){this.s[Ne]=0;break}}Ne===de?Ee=3:Ne===_-1?Ee=1:(Ee=2,de=Ne)}switch(de++,Ee){case 1:{var Te=s[_-2];s[_-2]=0;for(var De=_-2;De>=de;De--){var $e=i.hypot(this.s[De],Te),pe=this.s[De]/$e,Je=Te/$e;if(this.s[De]=$e,De!==de&&(Te=-Je*s[De-1],s[De-1]=pe*s[De-1]),h)for(var Ce=0;Ce=this.s[de+1]);){var ut=this.s[de];if(this.s[de]=this.s[de+1],this.s[de+1]=ut,h&&deMath.abs(a)?(s=a/n,s=Math.abs(n)*Math.sqrt(1+s*s)):a!=0?(s=n/a,s=Math.abs(a)*Math.sqrt(1+s*s)):s=0,s},t.exports=i}),(function(t,e,r){"use strict";var i=(function(){function s(l,u){for(var h=0;h2&&arguments[2]!==void 0?arguments[2]:1,f=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,d=arguments.length>4&&arguments[4]!==void 0?arguments[4]:-1;n(this,s),this.sequence1=l,this.sequence2=u,this.match_score=h,this.mismatch_penalty=f,this.gap_penalty=d,this.iMax=l.length+1,this.jMax=u.length+1,this.grid=new Array(this.iMax);for(var p=0;p=0;l--){var u=this.listeners[l];u.event===a&&u.callback===s&&this.listeners.splice(l,1)}},n.emit=function(a,s){for(var l=0;l{"use strict";o((function(e,r){typeof XC=="object"&&typeof WH=="object"?WH.exports=r(qH()):typeof define=="function"&&define.amd?define(["layout-base"],r):typeof XC=="object"?XC.coseBase=r(qH()):e.coseBase=r(e.layoutBase)}),"webpackUniversalModuleDefinition")(XC,function(t){return(()=>{"use strict";var e={45:((a,s,l)=>{var u={};u.layoutBase=l(551),u.CoSEConstants=l(806),u.CoSEEdge=l(767),u.CoSEGraph=l(880),u.CoSEGraphManager=l(578),u.CoSELayout=l(765),u.CoSENode=l(991),u.ConstraintHandler=l(902),a.exports=u}),806:((a,s,l)=>{var u=l(551).FDLayoutConstants;function h(){}o(h,"CoSEConstants");for(var f in u)h[f]=u[f];h.DEFAULT_USE_MULTI_LEVEL_SCALING=!1,h.DEFAULT_RADIAL_SEPARATION=u.DEFAULT_EDGE_LENGTH,h.DEFAULT_COMPONENT_SEPERATION=60,h.TILE=!0,h.TILING_PADDING_VERTICAL=10,h.TILING_PADDING_HORIZONTAL=10,h.TRANSFORM_ON_CONSTRAINT_HANDLING=!0,h.ENFORCE_CONSTRAINTS=!0,h.APPLY_LAYOUT=!0,h.RELAX_MOVEMENT_ON_CONSTRAINTS=!0,h.TREE_REDUCTION_ON_INCREMENTAL=!0,h.PURE_INCREMENTAL=h.DEFAULT_INCREMENTAL,a.exports=h}),767:((a,s,l)=>{var u=l(551).FDLayoutEdge;function h(d,p,m){u.call(this,d,p,m)}o(h,"CoSEEdge"),h.prototype=Object.create(u.prototype);for(var f in u)h[f]=u[f];a.exports=h}),880:((a,s,l)=>{var u=l(551).LGraph;function h(d,p,m){u.call(this,d,p,m)}o(h,"CoSEGraph"),h.prototype=Object.create(u.prototype);for(var f in u)h[f]=u[f];a.exports=h}),578:((a,s,l)=>{var u=l(551).LGraphManager;function h(d){u.call(this,d)}o(h,"CoSEGraphManager"),h.prototype=Object.create(u.prototype);for(var f in u)h[f]=u[f];a.exports=h}),765:((a,s,l)=>{var u=l(551).FDLayout,h=l(578),f=l(880),d=l(991),p=l(767),m=l(806),g=l(902),y=l(551).FDLayoutConstants,v=l(551).LayoutConstants,x=l(551).Point,b=l(551).PointD,T=l(551).DimensionD,w=l(551).Layout,k=l(551).Integer,C=l(551).IGeometry,E=l(551).LGraph,S=l(551).Transform,L=l(551).LinkedList;function M(){u.call(this),this.toBeTiled={},this.constraints={}}o(M,"CoSELayout"),M.prototype=Object.create(u.prototype);for(var I in u)M[I]=u[I];M.prototype.newGraphManager=function(){var A=new h(this);return this.graphManager=A,A},M.prototype.newGraph=function(A){return new f(null,this.graphManager,A)},M.prototype.newNode=function(A){return new d(this.graphManager,A)},M.prototype.newEdge=function(A){return new p(null,null,A)},M.prototype.initParameters=function(){u.prototype.initParameters.call(this,arguments),this.isSubLayout||(m.DEFAULT_EDGE_LENGTH<10?this.idealEdgeLength=10:this.idealEdgeLength=m.DEFAULT_EDGE_LENGTH,this.useSmartIdealEdgeLengthCalculation=m.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.gravityConstant=y.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=y.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=y.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=y.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.prunedNodesAll=[],this.growTreeIterations=0,this.afterGrowthIterations=0,this.isTreeGrowing=!1,this.isGrowthFinished=!1)},M.prototype.initSpringEmbedder=function(){u.prototype.initSpringEmbedder.call(this),this.coolingCycle=0,this.maxCoolingCycle=this.maxIterations/y.CONVERGENCE_CHECK_PERIOD,this.finalTemperature=.04,this.coolingAdjuster=1},M.prototype.layout=function(){var A=v.DEFAULT_CREATE_BENDS_AS_NEEDED;return A&&(this.createBendpoints(),this.graphManager.resetAllEdges()),this.level=0,this.classicLayout()},M.prototype.classicLayout=function(){if(this.nodesWithGravity=this.calculateNodesToApplyGravitationTo(),this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity),this.calcNoOfChildrenForAllNodes(),this.graphManager.calcLowestCommonAncestors(),this.graphManager.calcInclusionTreeDepths(),this.graphManager.getRoot().calcEstimatedSize(),this.calcIdealEdgeLengths(),this.incremental){if(m.TREE_REDUCTION_ON_INCREMENTAL){this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var _=new Set(this.getAllNodes()),D=this.nodesWithGravity.filter(function(B){return _.has(B)});this.graphManager.setAllNodesToApplyGravitation(D)}}else{var A=this.getFlatForest();if(A.length>0)this.positionNodesRadially(A);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var _=new Set(this.getAllNodes()),D=this.nodesWithGravity.filter(function(N){return _.has(N)});this.graphManager.setAllNodesToApplyGravitation(D),this.positionNodesRandomly()}}return Object.keys(this.constraints).length>0&&(g.handleConstraints(this),this.initConstraintVariables()),this.initSpringEmbedder(),m.APPLY_LAYOUT&&this.runSpringEmbedder(),!0},M.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished)if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;if(this.totalIterations%y.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged())if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;this.coolingCycle++,this.layoutQuality==0?this.coolingAdjuster=this.coolingCycle:this.layoutQuality==1&&(this.coolingAdjuster=this.coolingCycle/3),this.coolingFactor=Math.max(this.initialCoolingFactor-Math.pow(this.coolingCycle,Math.log(100*(this.initialCoolingFactor-this.finalTemperature))/Math.log(this.maxCoolingCycle))/100*this.coolingAdjuster,this.finalTemperature),this.animationPeriod=Math.ceil(this.initialAnimationPeriod*Math.sqrt(this.coolingFactor))}if(this.isTreeGrowing){if(this.growTreeIterations%10==0)if(this.prunedNodesAll.length>0){this.graphManager.updateBounds(),this.updateGrid(),this.growTree(this.prunedNodesAll),this.graphManager.resetAllNodesToApplyGravitation();var A=new Set(this.getAllNodes()),_=this.nodesWithGravity.filter(function(R){return A.has(R)});this.graphManager.setAllNodesToApplyGravitation(_),this.graphManager.updateBounds(),this.updateGrid(),m.PURE_INCREMENTAL?this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL/2:this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL}else this.isTreeGrowing=!1,this.isGrowthFinished=!0;this.growTreeIterations++}if(this.isGrowthFinished){if(this.isConverged())return!0;this.afterGrowthIterations%10==0&&(this.graphManager.updateBounds(),this.updateGrid()),m.PURE_INCREMENTAL?this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL/2*((100-this.afterGrowthIterations)/100):this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var D=!this.isTreeGrowing&&!this.isGrowthFinished,N=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(D,N),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},M.prototype.getPositionsData=function(){for(var A=this.graphManager.getAllNodes(),_={},D=0;D0&&this.updateDisplacements();for(var D=0;D0&&(N.fixedNodeWeight=B)}}if(this.constraints.relativePlacementConstraint){var O=new Map,$=new Map;if(this.dummyToNodeForVerticalAlignment=new Map,this.dummyToNodeForHorizontalAlignment=new Map,this.fixedNodesOnHorizontal=new Set,this.fixedNodesOnVertical=new Set,this.fixedNodeSet.forEach(function(Y){A.fixedNodesOnHorizontal.add(Y),A.fixedNodesOnVertical.add(Y)}),this.constraints.alignmentConstraint){if(this.constraints.alignmentConstraint.vertical)for(var z=this.constraints.alignmentConstraint.vertical,D=0;D=2*Y.length/3;ee--)ae=Math.floor(Math.random()*(ee+1)),J=Y[ee],Y[ee]=Y[ae],Y[ae]=J;return Y},this.nodesInRelativeHorizontal=[],this.nodesInRelativeVertical=[],this.nodeToRelativeConstraintMapHorizontal=new Map,this.nodeToRelativeConstraintMapVertical=new Map,this.nodeToTempPositionMapHorizontal=new Map,this.nodeToTempPositionMapVertical=new Map,this.constraints.relativePlacementConstraint.forEach(function(Y){if(Y.left){var ae=O.has(Y.left)?O.get(Y.left):Y.left,J=O.has(Y.right)?O.get(Y.right):Y.right;A.nodesInRelativeHorizontal.includes(ae)||(A.nodesInRelativeHorizontal.push(ae),A.nodeToRelativeConstraintMapHorizontal.set(ae,[]),A.dummyToNodeForVerticalAlignment.has(ae)?A.nodeToTempPositionMapHorizontal.set(ae,A.idToNodeMap.get(A.dummyToNodeForVerticalAlignment.get(ae)[0]).getCenterX()):A.nodeToTempPositionMapHorizontal.set(ae,A.idToNodeMap.get(ae).getCenterX())),A.nodesInRelativeHorizontal.includes(J)||(A.nodesInRelativeHorizontal.push(J),A.nodeToRelativeConstraintMapHorizontal.set(J,[]),A.dummyToNodeForVerticalAlignment.has(J)?A.nodeToTempPositionMapHorizontal.set(J,A.idToNodeMap.get(A.dummyToNodeForVerticalAlignment.get(J)[0]).getCenterX()):A.nodeToTempPositionMapHorizontal.set(J,A.idToNodeMap.get(J).getCenterX())),A.nodeToRelativeConstraintMapHorizontal.get(ae).push({right:J,gap:Y.gap}),A.nodeToRelativeConstraintMapHorizontal.get(J).push({left:ae,gap:Y.gap})}else{var ee=$.has(Y.top)?$.get(Y.top):Y.top,re=$.has(Y.bottom)?$.get(Y.bottom):Y.bottom;A.nodesInRelativeVertical.includes(ee)||(A.nodesInRelativeVertical.push(ee),A.nodeToRelativeConstraintMapVertical.set(ee,[]),A.dummyToNodeForHorizontalAlignment.has(ee)?A.nodeToTempPositionMapVertical.set(ee,A.idToNodeMap.get(A.dummyToNodeForHorizontalAlignment.get(ee)[0]).getCenterY()):A.nodeToTempPositionMapVertical.set(ee,A.idToNodeMap.get(ee).getCenterY())),A.nodesInRelativeVertical.includes(re)||(A.nodesInRelativeVertical.push(re),A.nodeToRelativeConstraintMapVertical.set(re,[]),A.dummyToNodeForHorizontalAlignment.has(re)?A.nodeToTempPositionMapVertical.set(re,A.idToNodeMap.get(A.dummyToNodeForHorizontalAlignment.get(re)[0]).getCenterY()):A.nodeToTempPositionMapVertical.set(re,A.idToNodeMap.get(re).getCenterY())),A.nodeToRelativeConstraintMapVertical.get(ee).push({bottom:re,gap:Y.gap}),A.nodeToRelativeConstraintMapVertical.get(re).push({top:ee,gap:Y.gap})}});else{var V=new Map,H=new Map;this.constraints.relativePlacementConstraint.forEach(function(Y){if(Y.left){var ae=O.has(Y.left)?O.get(Y.left):Y.left,J=O.has(Y.right)?O.get(Y.right):Y.right;V.has(ae)?V.get(ae).push(J):V.set(ae,[J]),V.has(J)?V.get(J).push(ae):V.set(J,[ae])}else{var ee=$.has(Y.top)?$.get(Y.top):Y.top,re=$.has(Y.bottom)?$.get(Y.bottom):Y.bottom;H.has(ee)?H.get(ee).push(re):H.set(ee,[re]),H.has(re)?H.get(re).push(ee):H.set(re,[ee])}});var X=o(function(ae,J){var ee=[],re=[],te=new L,be=new Set,de=0;return ae.forEach(function(Ee,Ne){if(!be.has(Ne)){ee[de]=[],re[de]=!1;var we=Ne;for(te.push(we),be.add(we),ee[de].push(we);te.length!=0;){we=te.shift(),J.has(we)&&(re[de]=!0);var Te=ae.get(we);Te.forEach(function(De){be.has(De)||(te.push(De),be.add(De),ee[de].push(De))})}de++}}),{components:ee,isFixed:re}},"constructComponents"),W=X(V,A.fixedNodesOnHorizontal);this.componentsOnHorizontal=W.components,this.fixedComponentsOnHorizontal=W.isFixed;var Z=X(H,A.fixedNodesOnVertical);this.componentsOnVertical=Z.components,this.fixedComponentsOnVertical=Z.isFixed}}},M.prototype.updateDisplacements=function(){var A=this;if(this.constraints.fixedNodeConstraint&&this.constraints.fixedNodeConstraint.forEach(function(Z){var Y=A.idToNodeMap.get(Z.nodeId);Y.displacementX=0,Y.displacementY=0}),this.constraints.alignmentConstraint){if(this.constraints.alignmentConstraint.vertical)for(var _=this.constraints.alignmentConstraint.vertical,D=0;D<_.length;D++){for(var N=0,R=0;R<_[D].length;R++){if(this.fixedNodeSet.has(_[D][R])){N=0;break}N+=this.idToNodeMap.get(_[D][R]).displacementX}for(var B=N/_[D].length,R=0;R<_[D].length;R++)this.idToNodeMap.get(_[D][R]).displacementX=B}if(this.constraints.alignmentConstraint.horizontal)for(var O=this.constraints.alignmentConstraint.horizontal,D=0;D1){var $;for($=0;$N&&(N=Math.floor(O.y)),B=Math.floor(O.x+m.DEFAULT_COMPONENT_SEPERATION)}this.transform(new b(v.WORLD_CENTER_X-O.x/2,v.WORLD_CENTER_Y-O.y/2))},M.radialLayout=function(A,_,D){var N=Math.max(this.maxDiagonalInTree(A),m.DEFAULT_RADIAL_SEPARATION);M.branchRadialLayout(_,null,0,359,0,N);var R=E.calculateBounds(A),B=new S;B.setDeviceOrgX(R.getMinX()),B.setDeviceOrgY(R.getMinY()),B.setWorldOrgX(D.x),B.setWorldOrgY(D.y);for(var O=0;O1;){var ee=J[0];J.splice(0,1);var re=X.indexOf(ee);re>=0&&X.splice(re,1),Y--,W--}_!=null?ae=(X.indexOf(J[0])+1)%Y:ae=0;for(var te=Math.abs(N-D)/W,be=ae;Z!=W;be=++be%Y){var de=X[be].getOtherEnd(A);if(de!=_){var Ee=(D+Z*te)%360,Ne=(Ee+te)%360;M.branchRadialLayout(de,A,Ee,Ne,R+B,B),Z++}}},M.maxDiagonalInTree=function(A){for(var _=k.MIN_VALUE,D=0;D_&&(_=R)}return _},M.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},M.prototype.groupZeroDegreeMembers=function(){var A=this,_={};this.memberGroups={},this.idToDummyNode={};for(var D=[],N=this.graphManager.getAllNodes(),R=0;R"u"&&(_[$]=[]),_[$]=_[$].concat(B)}Object.keys(_).forEach(function(z){if(_[z].length>1){var F="DummyCompound_"+z;A.memberGroups[F]=_[z];var V=_[z][0].getParent(),H=new d(A.graphManager);H.id=F,H.paddingLeft=V.paddingLeft||0,H.paddingRight=V.paddingRight||0,H.paddingBottom=V.paddingBottom||0,H.paddingTop=V.paddingTop||0,A.idToDummyNode[F]=H;var X=A.getGraphManager().add(A.newGraph(),H),W=V.getChild();W.add(H);for(var Z=0;Z<_[z].length;Z++){var Y=_[z][Z];W.remove(Y),X.add(Y)}}})},M.prototype.clearCompounds=function(){var A={},_={};this.performDFSOnCompounds();for(var D=0;DR?(N.rect.x-=(N.labelWidth-R)/2,N.setWidth(N.labelWidth),N.labelMarginLeft=(N.labelWidth-R)/2):N.labelPosHorizontal=="right"&&N.setWidth(R+N.labelWidth)),N.labelHeight&&(N.labelPosVertical=="top"?(N.rect.y-=N.labelHeight,N.setHeight(B+N.labelHeight),N.labelMarginTop=N.labelHeight):N.labelPosVertical=="center"&&N.labelHeight>B?(N.rect.y-=(N.labelHeight-B)/2,N.setHeight(N.labelHeight),N.labelMarginTop=(N.labelHeight-B)/2):N.labelPosVertical=="bottom"&&N.setHeight(B+N.labelHeight))}})},M.prototype.repopulateCompounds=function(){for(var A=this.compoundOrder.length-1;A>=0;A--){var _=this.compoundOrder[A],D=_.id,N=_.paddingLeft,R=_.paddingTop,B=_.labelMarginLeft,O=_.labelMarginTop;this.adjustLocations(this.tiledMemberPack[D],_.rect.x,_.rect.y,N,R,B,O)}},M.prototype.repopulateZeroDegreeMembers=function(){var A=this,_=this.tiledZeroDegreePack;Object.keys(_).forEach(function(D){var N=A.idToDummyNode[D],R=N.paddingLeft,B=N.paddingTop,O=N.labelMarginLeft,$=N.labelMarginTop;A.adjustLocations(_[D],N.rect.x,N.rect.y,R,B,O,$)})},M.prototype.getToBeTiled=function(A){var _=A.id;if(this.toBeTiled[_]!=null)return this.toBeTiled[_];var D=A.getChild();if(D==null)return this.toBeTiled[_]=!1,!1;for(var N=D.getNodes(),R=0;R0)return this.toBeTiled[_]=!1,!1;if(B.getChild()==null){this.toBeTiled[B.id]=!1;continue}if(!this.getToBeTiled(B))return this.toBeTiled[_]=!1,!1}return this.toBeTiled[_]=!0,!0},M.prototype.getNodeDegree=function(A){for(var _=A.id,D=A.getEdges(),N=0,R=0;RV&&(V=X.rect.height)}D+=V+A.verticalPadding}},M.prototype.tileCompoundMembers=function(A,_){var D=this;this.tiledMemberPack=[],Object.keys(A).forEach(function(N){var R=_[N];if(D.tiledMemberPack[N]=D.tileNodes(A[N],R.paddingLeft+R.paddingRight),R.rect.width=D.tiledMemberPack[N].width,R.rect.height=D.tiledMemberPack[N].height,R.setCenter(D.tiledMemberPack[N].centerX,D.tiledMemberPack[N].centerY),R.labelMarginLeft=0,R.labelMarginTop=0,m.NODE_DIMENSIONS_INCLUDE_LABELS){var B=R.rect.width,O=R.rect.height;R.labelWidth&&(R.labelPosHorizontal=="left"?(R.rect.x-=R.labelWidth,R.setWidth(B+R.labelWidth),R.labelMarginLeft=R.labelWidth):R.labelPosHorizontal=="center"&&R.labelWidth>B?(R.rect.x-=(R.labelWidth-B)/2,R.setWidth(R.labelWidth),R.labelMarginLeft=(R.labelWidth-B)/2):R.labelPosHorizontal=="right"&&R.setWidth(B+R.labelWidth)),R.labelHeight&&(R.labelPosVertical=="top"?(R.rect.y-=R.labelHeight,R.setHeight(O+R.labelHeight),R.labelMarginTop=R.labelHeight):R.labelPosVertical=="center"&&R.labelHeight>O?(R.rect.y-=(R.labelHeight-O)/2,R.setHeight(R.labelHeight),R.labelMarginTop=(R.labelHeight-O)/2):R.labelPosVertical=="bottom"&&R.setHeight(O+R.labelHeight))}})},M.prototype.tileNodes=function(A,_){var D=this.tileNodesByFavoringDim(A,_,!0),N=this.tileNodesByFavoringDim(A,_,!1),R=this.getOrgRatio(D),B=this.getOrgRatio(N),O;return B$&&($=Z.getWidth())});var z=B/R,F=O/R,V=Math.pow(D-N,2)+4*(z+N)*(F+D)*R,H=(N-D+Math.sqrt(V))/(2*(z+N)),X;_?(X=Math.ceil(H),X==H&&X++):X=Math.floor(H);var W=X*(z+N)-N;return $>W&&(W=$),W+=N*2,W},M.prototype.tileNodesByFavoringDim=function(A,_,D){var N=m.TILING_PADDING_VERTICAL,R=m.TILING_PADDING_HORIZONTAL,B=m.TILING_COMPARE_BY,O={rows:[],rowWidth:[],rowHeight:[],width:0,height:_,verticalPadding:N,horizontalPadding:R,centerX:0,centerY:0};B&&(O.idealRowWidth=this.calcIdealRowWidth(A,D));var $=o(function(Y){return Y.rect.width*Y.rect.height},"getNodeArea"),z=o(function(Y,ae){return $(ae)-$(Y)},"areaCompareFcn");A.sort(function(Z,Y){var ae=z;return O.idealRowWidth?(ae=B,ae(Z.id,Y.id)):ae(Z,Y)});for(var F=0,V=0,H=0;H0&&(O+=A.horizontalPadding),A.rowWidth[D]=O,A.width0&&($+=A.verticalPadding);var z=0;$>A.rowHeight[D]&&(z=A.rowHeight[D],A.rowHeight[D]=$,z=A.rowHeight[D]-z),A.height+=z,A.rows[D].push(_)},M.prototype.getShortestRowIndex=function(A){for(var _=-1,D=Number.MAX_VALUE,N=0;ND&&(_=N,D=A.rowWidth[N]);return _},M.prototype.canAddHorizontal=function(A,_,D){if(A.idealRowWidth){var N=A.rows.length-1,R=A.rowWidth[N];return R+_+A.horizontalPadding<=A.idealRowWidth}var B=this.getShortestRowIndex(A);if(B<0)return!0;var O=A.rowWidth[B];if(O+A.horizontalPadding+_<=A.width)return!0;var $=0;A.rowHeight[B]0&&($=D+A.verticalPadding-A.rowHeight[B]);var z;A.width-O>=_+A.horizontalPadding?z=(A.height+$)/(O+_+A.horizontalPadding):z=(A.height+$)/A.width,$=D+A.verticalPadding;var F;return A.width<_?F=(A.height+$)/_:F=(A.height+$)/A.width,F<1&&(F=1/F),z<1&&(z=1/z),zB&&_!=D){N.splice(-1,1),A.rows[D].push(R),A.rowWidth[_]=A.rowWidth[_]-B,A.rowWidth[D]=A.rowWidth[D]+B,A.width=A.rowWidth[instance.getLongestRowIndex(A)];for(var O=Number.MIN_VALUE,$=0;$O&&(O=N[$].height);_>0&&(O+=A.verticalPadding);var z=A.rowHeight[_]+A.rowHeight[D];A.rowHeight[_]=O,A.rowHeight[D]0)for(var W=R;W<=B;W++)X[0]+=this.grid[W][O-1].length+this.grid[W][O].length-1;if(B0)for(var W=O;W<=$;W++)X[3]+=this.grid[R-1][W].length+this.grid[R][W].length-1;for(var Z=k.MAX_VALUE,Y,ae,J=0;J{var u=l(551).FDLayoutNode,h=l(551).IMath;function f(p,m,g,y){u.call(this,p,m,g,y)}o(f,"CoSENode"),f.prototype=Object.create(u.prototype);for(var d in u)f[d]=u[d];f.prototype.calculateDisplacement=function(){var p=this.graphManager.getLayout();this.getChild()!=null&&this.fixedNodeWeight?(this.displacementX+=p.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.fixedNodeWeight,this.displacementY+=p.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.fixedNodeWeight):(this.displacementX+=p.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.noOfChildren,this.displacementY+=p.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.noOfChildren),Math.abs(this.displacementX)>p.coolingFactor*p.maxNodeDisplacement&&(this.displacementX=p.coolingFactor*p.maxNodeDisplacement*h.sign(this.displacementX)),Math.abs(this.displacementY)>p.coolingFactor*p.maxNodeDisplacement&&(this.displacementY=p.coolingFactor*p.maxNodeDisplacement*h.sign(this.displacementY)),this.child&&this.child.getNodes().length>0&&this.propogateDisplacementToChildren(this.displacementX,this.displacementY)},f.prototype.propogateDisplacementToChildren=function(p,m){for(var g=this.getChild().getNodes(),y,v=0;v{function u(g){if(Array.isArray(g)){for(var y=0,v=Array(g.length);y0){var it=0;ce.forEach(function(ut){ue=="horizontal"?(ye.set(ut,x.has(ut)?b[x.get(ut)]:se.get(ut)),it+=ye.get(ut)):(ye.set(ut,x.has(ut)?T[x.get(ut)]:se.get(ut)),it+=ye.get(ut))}),it=it/ce.length,Qe.forEach(function(ut){G.has(ut)||ye.set(ut,it)})}else{var fe=0;Qe.forEach(function(ut){ue=="horizontal"?fe+=x.has(ut)?b[x.get(ut)]:se.get(ut):fe+=x.has(ut)?T[x.get(ut)]:se.get(ut)}),fe=fe/Qe.length,Qe.forEach(function(ut){ye.set(ut,fe)})}});for(var Oe=o(function(){var ce=ve.shift(),it=U.get(ce);it.forEach(function(fe){if(ye.get(fe.id)ut&&(ut=kt),ytNt&&(Nt=yt)}}catch(Ii){St=!0,It=Ii}finally{try{!Pt&&ot.return&&ot.return()}finally{if(St)throw It}}var jt=(it+ut)/2-(fe+Nt)/2,hr=!0,Qt=!1,Er=void 0;try{for(var dr=Qe[Symbol.iterator](),ir;!(hr=(ir=dr.next()).done);hr=!0){var pr=ir.value;ye.set(pr,ye.get(pr)+jt)}}catch(Ii){Qt=!0,Er=Ii}finally{try{!hr&&dr.return&&dr.return()}finally{if(Qt)throw Er}}})}return ye},"findAppropriatePositionForRelativePlacement"),I=o(function(U){var ue=0,G=0,se=0,le=0;if(U.forEach(function(Re){Re.left?b[x.get(Re.left)]-b[x.get(Re.right)]>=0?ue++:G++:T[x.get(Re.top)]-T[x.get(Re.bottom)]>=0?se++:le++}),ue>G&&se>le)for(var ke=0;keG)for(var me=0;mele)for(var ye=0;ye1)y.fixedNodeConstraint.forEach(function(oe,U){N[U]=[oe.position.x,oe.position.y],R[U]=[b[x.get(oe.nodeId)],T[x.get(oe.nodeId)]]}),B=!0;else if(y.alignmentConstraint)(function(){var oe=0;if(y.alignmentConstraint.vertical){for(var U=y.alignmentConstraint.vertical,ue=o(function(ye){var Re=new Set;U[ye].forEach(function(We){Re.add(We)});var ve=new Set([].concat(u(Re)).filter(function(We){return $.has(We)})),Oe=void 0;ve.size>0?Oe=b[x.get(ve.values().next().value)]:Oe=L(Re).x,U[ye].forEach(function(We){N[oe]=[Oe,T[x.get(We)]],R[oe]=[b[x.get(We)],T[x.get(We)]],oe++})},"_loop2"),G=0;G0?Oe=b[x.get(ve.values().next().value)]:Oe=L(Re).y,se[ye].forEach(function(We){N[oe]=[b[x.get(We)],Oe],R[oe]=[b[x.get(We)],T[x.get(We)]],oe++})},"_loop3"),ke=0;keH&&(H=V[W].length,X=W);if(H0){var pe={x:0,y:0};y.fixedNodeConstraint.forEach(function(oe,U){var ue={x:b[x.get(oe.nodeId)],y:T[x.get(oe.nodeId)]},G=oe.position,se=S(G,ue);pe.x+=se.x,pe.y+=se.y}),pe.x/=y.fixedNodeConstraint.length,pe.y/=y.fixedNodeConstraint.length,b.forEach(function(oe,U){b[U]+=pe.x}),T.forEach(function(oe,U){T[U]+=pe.y}),y.fixedNodeConstraint.forEach(function(oe){b[x.get(oe.nodeId)]=oe.position.x,T[x.get(oe.nodeId)]=oe.position.y})}if(y.alignmentConstraint){if(y.alignmentConstraint.vertical)for(var Je=y.alignmentConstraint.vertical,Ce=o(function(U){var ue=new Set;Je[U].forEach(function(le){ue.add(le)});var G=new Set([].concat(u(ue)).filter(function(le){return $.has(le)})),se=void 0;G.size>0?se=b[x.get(G.values().next().value)]:se=L(ue).x,ue.forEach(function(le){$.has(le)||(b[x.get(le)]=se)})},"_loop4"),Fe=0;Fe0?se=T[x.get(G.values().next().value)]:se=L(ue).y,ue.forEach(function(le){$.has(le)||(T[x.get(le)]=se)})},"_loop5"),Me=0;Me{a.exports=t})},r={};function i(a){var s=r[a];if(s!==void 0)return s.exports;var l=r[a]={exports:{}};return e[a](l,l.exports,i),l.exports}o(i,"__webpack_require__");var n=i(45);return n})()})});var VAe=ar((KC,HH)=>{"use strict";o((function(e,r){typeof KC=="object"&&typeof HH=="object"?HH.exports=r(UH()):typeof define=="function"&&define.amd?define(["cose-base"],r):typeof KC=="object"?KC.cytoscapeFcose=r(UH()):e.cytoscapeFcose=r(e.coseBase)}),"webpackUniversalModuleDefinition")(KC,function(t){return(()=>{"use strict";var e={658:(a=>{a.exports=Object.assign!=null?Object.assign.bind(Object):function(s){for(var l=arguments.length,u=Array(l>1?l-1:0),h=1;h{var u=(function(){function d(p,m){var g=[],y=!0,v=!1,x=void 0;try{for(var b=p[Symbol.iterator](),T;!(y=(T=b.next()).done)&&(g.push(T.value),!(m&&g.length===m));y=!0);}catch(w){v=!0,x=w}finally{try{!y&&b.return&&b.return()}finally{if(v)throw x}}return g}return o(d,"sliceIterator"),function(p,m){if(Array.isArray(p))return p;if(Symbol.iterator in Object(p))return d(p,m);throw new TypeError("Invalid attempt to destructure non-iterable instance")}})(),h=l(140).layoutBase.LinkedList,f={};f.getTopMostNodes=function(d){for(var p={},m=0;m0&&B.merge(F)});for(var O=0;O1){T=x[0],w=T.connectedEdges().length,x.forEach(function(R){R.connectedEdges().length0&&g.set("dummy"+(g.size+1),E),S},f.relocateComponent=function(d,p,m){if(!m.fixedNodeConstraint){var g=Number.POSITIVE_INFINITY,y=Number.NEGATIVE_INFINITY,v=Number.POSITIVE_INFINITY,x=Number.NEGATIVE_INFINITY;if(m.quality=="draft"){var b=!0,T=!1,w=void 0;try{for(var k=p.nodeIndexes[Symbol.iterator](),C;!(b=(C=k.next()).done);b=!0){var E=C.value,S=u(E,2),L=S[0],M=S[1],I=m.cy.getElementById(L);if(I){var A=I.boundingBox(),_=p.xCoords[M]-A.w/2,D=p.xCoords[M]+A.w/2,N=p.yCoords[M]-A.h/2,R=p.yCoords[M]+A.h/2;_y&&(y=D),Nx&&(x=R)}}}catch(F){T=!0,w=F}finally{try{!b&&k.return&&k.return()}finally{if(T)throw w}}var B=d.x-(y+g)/2,O=d.y-(x+v)/2;p.xCoords=p.xCoords.map(function(F){return F+B}),p.yCoords=p.yCoords.map(function(F){return F+O})}else{Object.keys(p).forEach(function(F){var V=p[F],H=V.getRect().x,X=V.getRect().x+V.getRect().width,W=V.getRect().y,Z=V.getRect().y+V.getRect().height;Hy&&(y=X),Wx&&(x=Z)});var $=d.x-(y+g)/2,z=d.y-(x+v)/2;Object.keys(p).forEach(function(F){var V=p[F];V.setCenter(V.getCenterX()+$,V.getCenterY()+z)})}}},f.calcBoundingBox=function(d,p,m,g){for(var y=Number.MAX_SAFE_INTEGER,v=Number.MIN_SAFE_INTEGER,x=Number.MAX_SAFE_INTEGER,b=Number.MIN_SAFE_INTEGER,T=void 0,w=void 0,k=void 0,C=void 0,E=d.descendants().not(":parent"),S=E.length,L=0;LT&&(y=T),vk&&(x=k),b{var u=l(548),h=l(140).CoSELayout,f=l(140).CoSENode,d=l(140).layoutBase.PointD,p=l(140).layoutBase.DimensionD,m=l(140).layoutBase.LayoutConstants,g=l(140).layoutBase.FDLayoutConstants,y=l(140).CoSEConstants,v=o(function(b,T){var w=b.cy,k=b.eles,C=k.nodes(),E=k.edges(),S=void 0,L=void 0,M=void 0,I={};b.randomize&&(S=T.nodeIndexes,L=T.xCoords,M=T.yCoords);var A=o(function(F){return typeof F=="function"},"isFn"),_=o(function(F,V){return A(F)?F(V):F},"optFn"),D=u.calcParentsWithoutChildren(w,k),N=o(function z(F,V,H,X){for(var W=V.length,Z=0;Z0){var te=void 0;te=H.getGraphManager().add(H.newGraph(),J),z(te,ae,H,X)}}},"processChildrenList"),R=o(function(F,V,H){for(var X=0,W=0,Z=0;Z0?y.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=X/W:A(b.idealEdgeLength)?y.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=50:y.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=b.idealEdgeLength,y.MIN_REPULSION_DIST=g.MIN_REPULSION_DIST=g.DEFAULT_EDGE_LENGTH/10,y.DEFAULT_RADIAL_SEPARATION=g.DEFAULT_EDGE_LENGTH)},"processEdges"),B=o(function(F,V){V.fixedNodeConstraint&&(F.constraints.fixedNodeConstraint=V.fixedNodeConstraint),V.alignmentConstraint&&(F.constraints.alignmentConstraint=V.alignmentConstraint),V.relativePlacementConstraint&&(F.constraints.relativePlacementConstraint=V.relativePlacementConstraint)},"processConstraints");b.nestingFactor!=null&&(y.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=g.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=b.nestingFactor),b.gravity!=null&&(y.DEFAULT_GRAVITY_STRENGTH=g.DEFAULT_GRAVITY_STRENGTH=b.gravity),b.numIter!=null&&(y.MAX_ITERATIONS=g.MAX_ITERATIONS=b.numIter),b.gravityRange!=null&&(y.DEFAULT_GRAVITY_RANGE_FACTOR=g.DEFAULT_GRAVITY_RANGE_FACTOR=b.gravityRange),b.gravityCompound!=null&&(y.DEFAULT_COMPOUND_GRAVITY_STRENGTH=g.DEFAULT_COMPOUND_GRAVITY_STRENGTH=b.gravityCompound),b.gravityRangeCompound!=null&&(y.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=g.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=b.gravityRangeCompound),b.initialEnergyOnIncremental!=null&&(y.DEFAULT_COOLING_FACTOR_INCREMENTAL=g.DEFAULT_COOLING_FACTOR_INCREMENTAL=b.initialEnergyOnIncremental),b.tilingCompareBy!=null&&(y.TILING_COMPARE_BY=b.tilingCompareBy),b.quality=="proof"?m.QUALITY=2:m.QUALITY=0,y.NODE_DIMENSIONS_INCLUDE_LABELS=g.NODE_DIMENSIONS_INCLUDE_LABELS=m.NODE_DIMENSIONS_INCLUDE_LABELS=b.nodeDimensionsIncludeLabels,y.DEFAULT_INCREMENTAL=g.DEFAULT_INCREMENTAL=m.DEFAULT_INCREMENTAL=!b.randomize,y.ANIMATE=g.ANIMATE=m.ANIMATE=b.animate,y.TILE=b.tile,y.TILING_PADDING_VERTICAL=typeof b.tilingPaddingVertical=="function"?b.tilingPaddingVertical.call():b.tilingPaddingVertical,y.TILING_PADDING_HORIZONTAL=typeof b.tilingPaddingHorizontal=="function"?b.tilingPaddingHorizontal.call():b.tilingPaddingHorizontal,y.DEFAULT_INCREMENTAL=g.DEFAULT_INCREMENTAL=m.DEFAULT_INCREMENTAL=!0,y.PURE_INCREMENTAL=!b.randomize,m.DEFAULT_UNIFORM_LEAF_NODE_SIZES=b.uniformNodeDimensions,b.step=="transformed"&&(y.TRANSFORM_ON_CONSTRAINT_HANDLING=!0,y.ENFORCE_CONSTRAINTS=!1,y.APPLY_LAYOUT=!1),b.step=="enforced"&&(y.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,y.ENFORCE_CONSTRAINTS=!0,y.APPLY_LAYOUT=!1),b.step=="cose"&&(y.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,y.ENFORCE_CONSTRAINTS=!1,y.APPLY_LAYOUT=!0),b.step=="all"&&(b.randomize?y.TRANSFORM_ON_CONSTRAINT_HANDLING=!0:y.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,y.ENFORCE_CONSTRAINTS=!0,y.APPLY_LAYOUT=!0),b.fixedNodeConstraint||b.alignmentConstraint||b.relativePlacementConstraint?y.TREE_REDUCTION_ON_INCREMENTAL=!1:y.TREE_REDUCTION_ON_INCREMENTAL=!0;var O=new h,$=O.newGraphManager();return N($.addRoot(),u.getTopMostNodes(C),O,b),R(O,$,E),B(O,b),O.runLayout(),I},"coseLayout");a.exports={coseLayout:v}}),212:((a,s,l)=>{var u=(function(){function b(T,w){for(var k=0;k0)if(R){var $=d.getTopMostNodes(k.eles.nodes());if(A=d.connectComponents(C,k.eles,$),A.forEach(function(we){var Te=we.boundingBox();_.push({x:Te.x1+Te.w/2,y:Te.y1+Te.h/2})}),k.randomize&&A.forEach(function(we){k.eles=we,S.push(m(k))}),k.quality=="default"||k.quality=="proof"){var z=C.collection();if(k.tile){var F=new Map,V=[],H=[],X=0,W={nodeIndexes:F,xCoords:V,yCoords:H},Z=[];if(A.forEach(function(we,Te){we.edges().length==0&&(we.nodes().forEach(function(De,$e){z.merge(we.nodes()[$e]),De.isParent()||(W.nodeIndexes.set(we.nodes()[$e].id(),X++),W.xCoords.push(we.nodes()[0].position().x),W.yCoords.push(we.nodes()[0].position().y))}),Z.push(Te))}),z.length>1){var Y=z.boundingBox();_.push({x:Y.x1+Y.w/2,y:Y.y1+Y.h/2}),A.push(z),S.push(W);for(var ae=Z.length-1;ae>=0;ae--)A.splice(Z[ae],1),S.splice(Z[ae],1),_.splice(Z[ae],1)}}A.forEach(function(we,Te){k.eles=we,I.push(y(k,S[Te])),d.relocateComponent(_[Te],I[Te],k)})}else A.forEach(function(we,Te){d.relocateComponent(_[Te],S[Te],k)});var J=new Set;if(A.length>1){var ee=[],re=E.filter(function(we){return we.css("display")=="none"});A.forEach(function(we,Te){var De=void 0;if(k.quality=="draft"&&(De=S[Te].nodeIndexes),we.nodes().not(re).length>0){var $e={};$e.edges=[],$e.nodes=[];var pe=void 0;we.nodes().not(re).forEach(function(Je){if(k.quality=="draft")if(!Je.isParent())pe=De.get(Je.id()),$e.nodes.push({x:S[Te].xCoords[pe]-Je.boundingbox().w/2,y:S[Te].yCoords[pe]-Je.boundingbox().h/2,width:Je.boundingbox().w,height:Je.boundingbox().h});else{var Ce=d.calcBoundingBox(Je,S[Te].xCoords,S[Te].yCoords,De);$e.nodes.push({x:Ce.topLeftX,y:Ce.topLeftY,width:Ce.width,height:Ce.height})}else I[Te][Je.id()]&&$e.nodes.push({x:I[Te][Je.id()].getLeft(),y:I[Te][Je.id()].getTop(),width:I[Te][Je.id()].getWidth(),height:I[Te][Je.id()].getHeight()})}),we.edges().forEach(function(Je){var Ce=Je.source(),Fe=Je.target();if(Ce.css("display")!="none"&&Fe.css("display")!="none")if(k.quality=="draft"){var Ue=De.get(Ce.id()),qe=De.get(Fe.id()),Me=[],He=[];if(Ce.isParent()){var K=d.calcBoundingBox(Ce,S[Te].xCoords,S[Te].yCoords,De);Me.push(K.topLeftX+K.width/2),Me.push(K.topLeftY+K.height/2)}else Me.push(S[Te].xCoords[Ue]),Me.push(S[Te].yCoords[Ue]);if(Fe.isParent()){var oe=d.calcBoundingBox(Fe,S[Te].xCoords,S[Te].yCoords,De);He.push(oe.topLeftX+oe.width/2),He.push(oe.topLeftY+oe.height/2)}else He.push(S[Te].xCoords[qe]),He.push(S[Te].yCoords[qe]);$e.edges.push({startX:Me[0],startY:Me[1],endX:He[0],endY:He[1]})}else I[Te][Ce.id()]&&I[Te][Fe.id()]&&$e.edges.push({startX:I[Te][Ce.id()].getCenterX(),startY:I[Te][Ce.id()].getCenterY(),endX:I[Te][Fe.id()].getCenterX(),endY:I[Te][Fe.id()].getCenterY()})}),$e.nodes.length>0&&(ee.push($e),J.add(Te))}});var te=N.packComponents(ee,k.randomize).shifts;if(k.quality=="draft")S.forEach(function(we,Te){var De=we.xCoords.map(function(pe){return pe+te[Te].dx}),$e=we.yCoords.map(function(pe){return pe+te[Te].dy});we.xCoords=De,we.yCoords=$e});else{var be=0;J.forEach(function(we){Object.keys(I[we]).forEach(function(Te){var De=I[we][Te];De.setCenter(De.getCenterX()+te[be].dx,De.getCenterY()+te[be].dy)}),be++})}}}else{var B=k.eles.boundingBox();if(_.push({x:B.x1+B.w/2,y:B.y1+B.h/2}),k.randomize){var O=m(k);S.push(O)}k.quality=="default"||k.quality=="proof"?(I.push(y(k,S[0])),d.relocateComponent(_[0],I[0],k)):d.relocateComponent(_[0],S[0],k)}var de=o(function(Te,De){if(k.quality=="default"||k.quality=="proof"){typeof Te=="number"&&(Te=De);var $e=void 0,pe=void 0,Je=Te.data("id");return I.forEach(function(Fe){Je in Fe&&($e={x:Fe[Je].getRect().getCenterX(),y:Fe[Je].getRect().getCenterY()},pe=Fe[Je])}),k.nodeDimensionsIncludeLabels&&(pe.labelWidth&&(pe.labelPosHorizontal=="left"?$e.x+=pe.labelWidth/2:pe.labelPosHorizontal=="right"&&($e.x-=pe.labelWidth/2)),pe.labelHeight&&(pe.labelPosVertical=="top"?$e.y+=pe.labelHeight/2:pe.labelPosVertical=="bottom"&&($e.y-=pe.labelHeight/2))),$e==null&&($e={x:Te.position("x"),y:Te.position("y")}),{x:$e.x,y:$e.y}}else{var Ce=void 0;return S.forEach(function(Fe){var Ue=Fe.nodeIndexes.get(Te.id());Ue!=null&&(Ce={x:Fe.xCoords[Ue],y:Fe.yCoords[Ue]})}),Ce==null&&(Ce={x:Te.position("x"),y:Te.position("y")}),{x:Ce.x,y:Ce.y}}},"getPositions");if(k.quality=="default"||k.quality=="proof"||k.randomize){var Ee=d.calcParentsWithoutChildren(C,E),Ne=E.filter(function(we){return we.css("display")=="none"});k.eles=E.not(Ne),E.nodes().not(":parent").not(Ne).layoutPositions(w,k,de),Ee.length>0&&Ee.forEach(function(we){we.position(de(we))})}else console.log("If randomize option is set to false, then quality option must be 'default' or 'proof'.")},"run")}]),b})();a.exports=x}),657:((a,s,l)=>{var u=l(548),h=l(140).layoutBase.Matrix,f=l(140).layoutBase.SVD,d=o(function(m){var g=m.cy,y=m.eles,v=y.nodes(),x=y.nodes(":parent"),b=new Map,T=new Map,w=new Map,k=[],C=[],E=[],S=[],L=[],M=[],I=[],A=[],_=void 0,D=void 0,N=1e8,R=1e-9,B=m.piTol,O=m.samplingType,$=m.nodeSeparation,z=void 0,F=o(function(){for(var ue=0,G=0,se=!1;G=ke;){ye=le[ke++];for(var Qe=k[ye],ce=0;ceOe&&(Oe=L[fe],We=fe)}return We},"BFS"),H=o(function(ue){var G=void 0;if(ue){G=Math.floor(Math.random()*D),_=G;for(var le=0;le=1)break;Oe=ve}for(var Qe=0;Qe=1)break;Oe=ve}for(var it=0;it0&&(G.isParent()?k[ue].push(w.get(G.id())):k[ue].push(G.id()))})});var Ee=o(function(ue){var G=T.get(ue),se=void 0;b.get(ue).forEach(function(le){g.getElementById(le).isParent()?se=w.get(le):se=le,k[G].push(se),k[T.get(se)].push(ue)})},"_loop"),Ne=!0,we=!1,Te=void 0;try{for(var De=b.keys()[Symbol.iterator](),$e;!(Ne=($e=De.next()).done);Ne=!0){var pe=$e.value;Ee(pe)}}catch(U){we=!0,Te=U}finally{try{!Ne&&De.return&&De.return()}finally{if(we)throw Te}}D=T.size;var Je=void 0;if(D>2){z=D{var u=l(212),h=o(function(d){d&&d("layout","fcose",u)},"register");typeof cytoscape<"u"&&h(cytoscape),a.exports=h}),140:(a=>{a.exports=t})},r={};function i(a){var s=r[a];if(s!==void 0)return s.exports;var l=r[a]={exports:{}};return e[a](l,l.exports,i),l.exports}o(i,"__webpack_require__");var n=i(579);return n})()})});var px,yg,YH=P(()=>{"use strict";lu();px=o(t=>`${t}`,"wrapIcon"),yg={prefix:"mermaid-architecture",height:80,width:80,icons:{database:{body:px('')},server:{body:px('')},disk:{body:px('')},internet:{body:px('')},cloud:{body:px('')},unknown:sL,blank:{body:px("")}}}});var qAe,WAe,UAe,HAe,YAe=P(()=>{"use strict";Ut();To();lu();Vr();YH();n8();er();qAe=o(async function(t,e,r,i){let n=r.getConfigField("padding"),a=r.getConfigField("iconSize"),s=a/2,l=a/6,u=l/2;await Promise.all(e.edges().map(async h=>{let{source:f,sourceDir:d,sourceArrow:p,sourceGroup:m,target:g,targetDir:y,targetArrow:v,targetGroup:x,label:b}=i8(h),{x:T,y:w}=h[0].sourceEndpoint(),{x:k,y:C}=h[0].midpoint(),{x:E,y:S}=h[0].targetEndpoint(),L=n+4;if(m&&(Ds(d)?T+=d==="L"?-L:L:w+=d==="T"?-L:L+18),x&&(Ds(y)?E+=y==="L"?-L:L:S+=y==="T"?-L:L+18),!m&&r.getNode(f)?.type==="junction"&&(Ds(d)?T+=d==="L"?s:-s:w+=d==="T"?s:-s),!x&&r.getNode(g)?.type==="junction"&&(Ds(y)?E+=y==="L"?s:-s:S+=y==="T"?s:-s),h[0]._private.rscratch){let M=t.insert("g");if(M.insert("path").attr("d",`M ${T},${w} L ${k},${C} L${E},${S} `).attr("class","edge").attr("id",`${i}-${Cu(f,g,{prefix:"L"})}`),p){let I=Ds(d)?UC[d](T,l):T-u,A=hh(d)?UC[d](w,l):w-u;M.insert("polygon").attr("points",FH[d](l)).attr("transform",`translate(${I},${A})`).attr("class","arrow")}if(v){let I=Ds(y)?UC[y](E,l):E-u,A=hh(y)?UC[y](S,l):S-u;M.insert("polygon").attr("points",FH[y](l)).attr("transform",`translate(${I},${A})`).attr("class","arrow")}if(b){let I=HC(d,y)?"XY":Ds(d)?"X":"Y",A=0;I==="X"?A=Math.abs(T-E):I==="Y"?A=Math.abs(w-S)/1.5:A=Math.abs(T-E)/2;let _=M.append("g");if(await Vi(_,b,{useHtmlLabels:!1,width:A,classes:"architecture-service-label"},ge()),_.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle"),I==="X")_.attr("transform","translate("+k+", "+C+")");else if(I==="Y")_.attr("transform","translate("+k+", "+C+") rotate(-90)");else if(I==="XY"){let D=YC(d,y);if(D&&IAe(D)){let N=_.node().getBoundingClientRect(),[R,B]=OAe(D);_.attr("dominant-baseline","auto").attr("transform",`rotate(${-1*R*B*45})`);let O=_.node().getBoundingClientRect();_.attr("transform",` + translate(${k}, ${C-N.height/2}) + translate(${R*O.width/2}, ${B*O.height/2}) + rotate(${-1*R*B*45}, 0, ${N.height/2}) + `)}}}}}))},"drawEdges"),WAe=o(async function(t,e,r,i){let a=r.getConfigField("padding")*.75,s=r.getConfigField("fontSize"),u=r.getConfigField("iconSize")/2;await Promise.all(e.nodes().map(async h=>{let f=Np(h);if(f.type==="group"){let{h:d,w:p,x1:m,y1:g}=h.boundingBox(),y=t.append("rect");y.attr("id",`${i}-group-${f.id}`).attr("x",m+u).attr("y",g+u).attr("width",p).attr("height",d).attr("class","node-bkg");let v=t.append("g"),x=m,b=g;if(f.icon){let T=v.append("g");T.html(`${await fo(f.icon,{height:a,width:a,fallbackPrefix:yg.prefix})}`),T.attr("transform","translate("+(x+u+1)+", "+(b+u+1)+")"),x+=a,b+=s/2-1-2}if(f.label){let T=v.append("g");await Vi(T,f.label,{useHtmlLabels:!1,width:p,classes:"architecture-service-label"},ge()),T.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","start").attr("text-anchor","start"),T.attr("transform","translate("+(x+u+4)+", "+(b+u+2)+")")}r.setElementForId(f.id,y)}}))},"drawGroups"),UAe=o(async function(t,e,r,i){let n=ge();for(let a of r){let s=e.append("g"),l=t.getConfigField("iconSize");if(a.title){let d=s.append("g");await Vi(d,a.title,{useHtmlLabels:!1,width:l*1.5,classes:"architecture-service-label"},n),d.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle"),d.attr("transform","translate("+l/2+", "+l+")")}let u=s.append("g");if(a.icon)u.html(`${await fo(a.icon,{height:l,width:l,fallbackPrefix:yg.prefix})}`);else if(a.iconText){u.html(`${await fo("blank",{height:l,width:l,fallbackPrefix:yg.prefix})}`);let m=u.append("g").append("foreignObject").attr("width",l).attr("height",l).append("div").attr("class","node-icon-text").attr("style",`height: ${l}px;`).append("div").html(Tr(a.iconText,n)),g=parseInt(window.getComputedStyle(m.node(),null).getPropertyValue("font-size").replace(/\D/g,""))??16;m.attr("style",`-webkit-line-clamp: ${Math.floor((l-2)/g)};`)}else u.append("path").attr("class","node-bkg").attr("id",`${i}-node-${a.id}`).attr("d",`M0,${l} V5 Q0,0 5,0 H${l-5} Q${l},0 ${l},5 V${l} Z`);s.attr("id",`${i}-service-${a.id}`).attr("class","architecture-service");let{width:h,height:f}=s.node().getBBox();a.width=h,a.height=f,t.setElementForId(a.id,s)}return 0},"drawServices"),HAe=o(function(t,e,r,i){r.forEach(n=>{let a=e.append("g"),s=t.getConfigField("iconSize");a.append("g").append("rect").attr("id",`${i}-node-${n.id}`).attr("fill-opacity","0").attr("width",s).attr("height",s),a.attr("class","architecture-junction");let{width:u,height:h}=a._groups[0][0].getBBox();a.width=u,a.height=h,t.setElementForId(n.id,a)})},"drawJunctions")});function qgt(t,e,r){t.forEach(i=>{e.add({group:"nodes",data:{type:"service",id:i.id,icon:i.icon,label:i.title,parent:i.in,width:r.getConfigField("iconSize"),height:r.getConfigField("iconSize")},classes:"node-service"})})}function Wgt(t,e,r){t.forEach(i=>{e.add({group:"nodes",data:{type:"junction",id:i.id,parent:i.in,width:r.getConfigField("iconSize"),height:r.getConfigField("iconSize")},classes:"node-junction"})})}function Ugt(t,e){e.nodes().map(r=>{let i=Np(r);if(i.type==="group")return;i.x=r.position().x,i.y=r.position().y,t.getElementById(i.id).attr("transform","translate("+(i.x||0)+","+(i.y||0)+")")})}function Hgt(t,e){t.forEach(r=>{e.add({group:"nodes",data:{type:"group",id:r.id,icon:r.icon,label:r.title,parent:r.in},classes:"node-group"})})}function Ygt(t,e){t.forEach(r=>{let{lhsId:i,rhsId:n,lhsInto:a,lhsGroup:s,rhsInto:l,lhsDir:u,rhsDir:h,rhsGroup:f,title:d}=r,p=HC(r.lhsDir,r.rhsDir)?"segments":"straight",m={id:`${i}-${n}`,label:d,source:i,sourceDir:u,sourceArrow:a,sourceGroup:s,sourceEndpoint:u==="L"?"0 50%":u==="R"?"100% 50%":u==="T"?"50% 0":"50% 100%",target:n,targetDir:h,targetArrow:l,targetGroup:f,targetEndpoint:h==="L"?"0 50%":h==="R"?"100% 50%":h==="T"?"50% 0":"50% 100%"};e.add({group:"edges",data:m,classes:p})})}function jgt(t,e,r){let i=o((l,u)=>Object.entries(l).reduce((h,[f,d])=>{let p=0,m=Object.entries(d);if(m.length===1)return h[f]=m[0][1],h;for(let g=0;g{let u={},h={};return Object.entries(l).forEach(([f,[d,p]])=>{let m=t.getNode(f)?.in??"default";u[p]??={},u[p][m]??=[],u[p][m].push(f),h[d]??={},h[d][m]??=[],h[d][m].push(f)}),{horiz:Object.values(i(u,"horizontal")).filter(f=>f.length>1),vert:Object.values(i(h,"vertical")).filter(f=>f.length>1)}}),[a,s]=n.reduce(([l,u],{horiz:h,vert:f})=>[[...l,...h],[...u,...f]],[[],[]]);return{horizontal:a,vertical:s}}function Xgt(t,e){let r=[],i=o(a=>`${a[0]},${a[1]}`,"posToStr"),n=o(a=>a.split(",").map(s=>parseInt(s)),"strToPos");return t.forEach(a=>{let s=Object.fromEntries(Object.entries(a).map(([f,d])=>[i(d),f])),l=[i([0,0])],u={},h={L:[-1,0],R:[1,0],T:[0,1],B:[0,-1]};for(;l.length>0;){let f=l.shift();if(f){u[f]=1;let d=s[f];if(d){let p=n(f);Object.entries(h).forEach(([m,g])=>{let y=i([p[0]+g[0],p[1]+g[1]]),v=s[y];v&&!u[y]&&(l.push(y),r.push({[BH[m]]:v,[BH[NAe(m)]]:d,gap:1.5*e.getConfigField("iconSize")}))})}}}}),r}function Kgt(t,e,r,i,n,{spatialMaps:a,groupAlignments:s}){return new Promise(l=>{let u=Ze("body").append("div").attr("id","cy").attr("style","display:none"),h=Wl({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"straight","source-endpoint":"data(sourceEndpoint)","target-endpoint":"data(targetEndpoint)"}},{selector:"edge[label]",style:{label:"data(label)"}},{selector:"edge.segments",style:{"curve-style":"segments","segment-weights":"0","segment-distances":[.5],"edge-distances":"endpoints","source-endpoint":"data(sourceEndpoint)","target-endpoint":"data(targetEndpoint)"}},{selector:"node",style:{"compound-sizing-wrt-labels":"include"}},{selector:"node[label]",style:{"text-valign":"bottom","text-halign":"center","font-size":`${n.getConfigField("fontSize")}px`}},{selector:".node-service",style:{label:"data(label)",width:"data(width)",height:"data(height)"}},{selector:".node-junction",style:{width:"data(width)",height:"data(height)"}},{selector:".node-group",style:{padding:`${n.getConfigField("padding")}px`}}],layout:{name:"grid",boundingBox:{x1:0,x2:100,y1:0,y2:100}}});u.remove(),Hgt(r,h),qgt(t,h,n),Wgt(e,h,n),Ygt(i,h);let f=jgt(n,a,s),d=Xgt(a,n),p=h.layout({name:"fcose",quality:"proof",randomize:n.getConfigField("randomize"),styleEnabled:!1,animate:!1,nodeDimensionsIncludeLabels:!1,idealEdgeLength(m){let[g,y]=m.connectedNodes(),{parent:v}=Np(g),{parent:x}=Np(y);return v===x?1.5*n.getConfigField("iconSize"):.5*n.getConfigField("iconSize")},edgeElasticity(m){let[g,y]=m.connectedNodes(),{parent:v}=Np(g),{parent:x}=Np(y);return v===x?.45:.001},alignmentConstraint:f,relativePlacementConstraint:d});p.one("layoutstop",()=>{function m(g,y,v,x){let b,T,{x:w,y:k}=g,{x:C,y:E}=y;T=(x-k+(w-v)*(k-E)/(w-C))/Math.sqrt(1+Math.pow((k-E)/(w-C),2)),b=Math.sqrt(Math.pow(x-k,2)+Math.pow(v-w,2)-Math.pow(T,2));let S=Math.sqrt(Math.pow(C-w,2)+Math.pow(E-k,2));b=b/S;let L=(C-w)*(x-k)-(E-k)*(v-w);switch(!0){case L>=0:L=1;break;case L<0:L=-1;break}let M=(C-w)*(v-w)+(E-k)*(x-k);switch(!0){case M>=0:M=1;break;case M<0:M=-1;break}return T=Math.abs(T)*L,b=b*M,{distances:T,weights:b}}o(m,"getSegmentWeights"),h.startBatch();for(let g of Object.values(h.edges()))if(g.data?.()){let{x:y,y:v}=g.source().position(),{x,y:b}=g.target().position();if(y!==x&&v!==b){let T=g.sourceEndpoint(),w=g.targetEndpoint(),{sourceDir:k}=i8(g),[C,E]=hh(k)?[T.x,w.y]:[w.x,T.y],{weights:S,distances:L}=m(T,w,C,E);g.style("segment-distances",L),g.style("segment-weights",S)}}h.endBatch(),p.run()}),p.run(),h.ready(m=>{Q.info("Ready",m),l(h)})})}var jAe,Qgt,XAe,KAe=P(()=>{"use strict";gF();jAe=Wa(VAe(),1);Pr();bt();lu();ro();Xi();YH();n8();YAe();Q4([{name:yg.prefix,icons:yg}]);Wl.use(jAe.default);o(qgt,"addServices");o(Wgt,"addJunctions");o(Ugt,"positionNodes");o(Hgt,"addGroups");o(Ygt,"addEdges");o(jgt,"getAlignments");o(Xgt,"getRelativeConstraints");o(Kgt,"layoutArchitecture");Qgt=o(async(t,e,r,i)=>{let n=i.db;n.setDiagramId(e);let a=n.getServices(),s=n.getJunctions(),l=n.getGroups(),u=n.getEdges(),h=n.getDataStructures(),f=Fi(e),d=f.append("g");d.attr("class","architecture-edges");let p=f.append("g");p.attr("class","architecture-services");let m=f.append("g");m.attr("class","architecture-groups"),await UAe(n,p,a,e),HAe(n,p,s,e);let g=await Kgt(a,s,l,u,n,h);await qAe(d,g,n,e),await WAe(m,g,n,e),Ugt(n,g),El(void 0,f,n.getConfigField("padding"),n.getConfigField("useMaxWidth"))},"draw"),XAe={draw:Qgt}});var QAe={};ur(QAe,{diagram:()=>Zgt});var Zgt,ZAe=P(()=>{"use strict";$Ae();zH();GAe();KAe();Zgt={parser:GH,get db(){return new dx},renderer:XAe,styles:zAe}});var jH,t7e,r7e=P(()=>{"use strict";jH=(function(){var t=o(function(x,b,T,w){for(T=T||{},w=x.length;w--;T[x[w]]=b);return T},"o"),e=[1,4],r=[1,14],i=[1,12],n=[1,13],a=[6,7,8],s=[1,20],l=[1,18],u=[1,19],h=[6,7,11],f=[1,6,13,14],d=[1,23],p=[1,24],m=[1,6,7,11,13,14],g={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,ishikawa:4,spaceLines:5,SPACELINE:6,NL:7,ISHIKAWA:8,document:9,stop:10,EOF:11,statement:12,SPACELIST:13,TEXT:14,$accept:0,$end:1},terminals_:{2:"error",6:"SPACELINE",7:"NL",8:"ISHIKAWA",11:"EOF",13:"SPACELIST",14:"TEXT"},productions_:[0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,2],[12,1],[12,1],[12,1]],performAction:o(function(b,T,w,k,C,E,S){var L=E.length-1;switch(C){case 6:case 7:return k;case 15:k.addNode(E[L-1].length,E[L].trim());break;case 16:k.addNode(0,E[L].trim());break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],8:e},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:e},{6:r,7:[1,10],9:9,12:11,13:i,14:n},t(a,[2,3]),{1:[2,2]},t(a,[2,4]),t(a,[2,5]),{1:[2,6],6:r,12:15,13:i,14:n},{6:r,9:16,12:11,13:i,14:n},{6:s,7:l,10:17,11:u},t(h,[2,18],{14:[1,21]}),t(h,[2,16]),t(h,[2,17]),{6:s,7:l,10:22,11:u},{1:[2,7],6:r,12:15,13:i,14:n},t(f,[2,14],{7:d,11:p}),t(m,[2,8]),t(m,[2,9]),t(m,[2,10]),t(h,[2,15]),t(f,[2,13],{7:d,11:p}),t(m,[2,11]),t(m,[2,12])],defaultActions:{2:[2,1],6:[2,2]},parseError:o(function(b,T){if(T.recoverable)this.trace(b);else{var w=new Error(b);throw w.hash=T,w}},"parseError"),parse:o(function(b){var T=this,w=[0],k=[],C=[null],E=[],S=this.table,L="",M=0,I=0,A=0,_=2,D=1,N=E.slice.call(arguments,1),R=Object.create(this.lexer),B={yy:{}};for(var O in this.yy)Object.prototype.hasOwnProperty.call(this.yy,O)&&(B.yy[O]=this.yy[O]);R.setInput(b,B.yy),B.yy.lexer=R,B.yy.parser=this,typeof R.yylloc>"u"&&(R.yylloc={});var $=R.yylloc;E.push($);var z=R.options&&R.options.ranges;typeof B.yy.parseError=="function"?this.parseError=B.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function F(Ee){w.length=w.length-2*Ee,C.length=C.length-Ee,E.length=E.length-Ee}o(F,"popStack");function V(){var Ee;return Ee=k.pop()||R.lex()||D,typeof Ee!="number"&&(Ee instanceof Array&&(k=Ee,Ee=k.pop()),Ee=T.symbols_[Ee]||Ee),Ee}o(V,"lex");for(var H,X,W,Z,Y,ae,J={},ee,re,te,be;;){if(W=w[w.length-1],this.defaultActions[W]?Z=this.defaultActions[W]:((H===null||typeof H>"u")&&(H=V()),Z=S[W]&&S[W][H]),typeof Z>"u"||!Z.length||!Z[0]){var de="";be=[];for(ee in S[W])this.terminals_[ee]&&ee>_&&be.push("'"+this.terminals_[ee]+"'");R.showPosition?de="Parse error on line "+(M+1)+`: +`+R.showPosition()+` +Expecting `+be.join(", ")+", got '"+(this.terminals_[H]||H)+"'":de="Parse error on line "+(M+1)+": Unexpected "+(H==D?"end of input":"'"+(this.terminals_[H]||H)+"'"),this.parseError(de,{text:R.match,token:this.terminals_[H]||H,line:R.yylineno,loc:$,expected:be})}if(Z[0]instanceof Array&&Z.length>1)throw new Error("Parse Error: multiple actions possible at state: "+W+", token: "+H);switch(Z[0]){case 1:w.push(H),C.push(R.yytext),E.push(R.yylloc),w.push(Z[1]),H=null,X?(H=X,X=null):(I=R.yyleng,L=R.yytext,M=R.yylineno,$=R.yylloc,A>0&&A--);break;case 2:if(re=this.productions_[Z[1]][1],J.$=C[C.length-re],J._$={first_line:E[E.length-(re||1)].first_line,last_line:E[E.length-1].last_line,first_column:E[E.length-(re||1)].first_column,last_column:E[E.length-1].last_column},z&&(J._$.range=[E[E.length-(re||1)].range[0],E[E.length-1].range[1]]),ae=this.performAction.apply(J,[L,I,M,B.yy,Z[1],C,E].concat(N)),typeof ae<"u")return ae;re&&(w=w.slice(0,-1*re*2),C=C.slice(0,-1*re),E=E.slice(0,-1*re)),w.push(this.productions_[Z[1]][0]),C.push(J.$),E.push(J._$),te=S[w[w.length-2]][w[w.length-1]],w.push(te);break;case 3:return!0}}return!0},"parse")},y=(function(){var x={EOF:1,parseError:o(function(T,w){if(this.yy.parser)this.yy.parser.parseError(T,w);else throw new Error(T)},"parseError"),setInput:o(function(b,T){return this.yy=T||this.yy||{},this._input=b,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var b=this._input[0];this.yytext+=b,this.yyleng++,this.offset++,this.match+=b,this.matched+=b;var T=b.match(/(?:\r\n?|\n).*/g);return T?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),b},"input"),unput:o(function(b){var T=b.length,w=b.split(/(?:\r\n?|\n)/g);this._input=b+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-T),this.offset-=T;var k=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),w.length-1&&(this.yylineno-=w.length-1);var C=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:w?(w.length===k.length?this.yylloc.first_column:0)+k[k.length-w.length].length-w[0].length:this.yylloc.first_column-T},this.options.ranges&&(this.yylloc.range=[C[0],C[0]+this.yyleng-T]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(b){this.unput(this.match.slice(b))},"less"),pastInput:o(function(){var b=this.matched.substr(0,this.matched.length-this.match.length);return(b.length>20?"...":"")+b.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var b=this.match;return b.length<20&&(b+=this._input.substr(0,20-b.length)),(b.substr(0,20)+(b.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var b=this.pastInput(),T=new Array(b.length+1).join("-");return b+this.upcomingInput()+` +`+T+"^"},"showPosition"),test_match:o(function(b,T){var w,k,C;if(this.options.backtrack_lexer&&(C={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(C.yylloc.range=this.yylloc.range.slice(0))),k=b[0].match(/(?:\r\n?|\n).*/g),k&&(this.yylineno+=k.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:k?k[k.length-1].length-k[k.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+b[0].length},this.yytext+=b[0],this.match+=b[0],this.matches=b,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(b[0].length),this.matched+=b[0],w=this.performAction.call(this,this.yy,this,T,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),w)return w;if(this._backtrack){for(var E in C)this[E]=C[E];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var b,T,w,k;this._more||(this.yytext="",this.match="");for(var C=this._currentRules(),E=0;ET[0].length)){if(T=w,k=E,this.options.backtrack_lexer){if(b=this.test_match(w,C[E]),b!==!1)return b;if(this._backtrack){T=!1;continue}else return!1}else if(!this.options.flex)break}return T?(b=this.test_match(T,C[k]),b!==!1?b:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var T=this.next();return T||this.lex()},"lex"),begin:o(function(T){this.conditionStack.push(T)},"begin"),popState:o(function(){var T=this.conditionStack.length-1;return T>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(T){return T=this.conditionStack.length-1-Math.abs(T||0),T>=0?this.conditionStack[T]:"INITIAL"},"topState"),pushState:o(function(T){this.begin(T)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(T,w,k,C){var E=C;switch(k){case 0:return 6;case 1:return 8;case 2:return 8;case 3:return 6;case 4:return 7;case 5:return 13;case 6:return 14;case 7:return 11}},"anonymous"),rules:[/^(?:\s*%%.*)/i,/^(?:ishikawa-beta\b)/i,/^(?:ishikawa\b)/i,/^(?:[\s]+[\n])/i,/^(?:[\n]+)/i,/^(?:[\s]+)/i,/^(?:[^\n]+)/i,/^(?:$)/i],conditions:{INITIAL:{rules:[0,1,2,3,4,5,6,7],inclusive:!0}}};return x})();g.lexer=y;function v(){this.yy={}}return o(v,"Parser"),v.prototype=g,g.Parser=v,new v})();jH.parser=jH;t7e=jH});var a8,i7e=P(()=>{"use strict";Ut();Vr();Ki();a8=class{constructor(){this.stack=[];this.clear=this.clear.bind(this),this.addNode=this.addNode.bind(this),this.getRoot=this.getRoot.bind(this)}static{o(this,"IshikawaDB")}clear(){this.root=void 0,this.stack=[],this.baseLevel=void 0,wr()}getRoot(){return this.root}addNode(e,r){let i=lt.sanitizeText(r,ge());if(!this.root){this.root={text:i,children:[]},this.stack=[{level:0,node:this.root}],Mr(i);return}this.baseLevel??=e;let n=e-this.baseLevel+1;for(n<=0&&(n=1);this.stack.length>1&&this.stack[this.stack.length-1].level>=n;)this.stack.pop();let a=this.stack[this.stack.length-1].node,s={text:i,children:[]};a.children.push(s),this.stack.push({level:n,node:s})}getAccTitle(){return Dr()}setAccTitle(e){Ar(e)}getAccDescription(){return Rr()}setAccDescription(e){Lr(e)}getDiagramTitle(){return Nr()}setDiagramTitle(e){Mr(e)}}});var r1t,mx,i1t,n1t,a1t,c7e,n7e,a7e,s7e,s1t,o7e,o1t,l1t,c1t,XH,u1t,h1t,u7e,s8,l7e,gx,h7e,f7e=P(()=>{"use strict";Ut();ro();Xi();er();Yt();r1t=14,mx=250,i1t=30,n1t=60,a1t=5,c7e=82*Math.PI/180,n7e=Math.cos(c7e),a7e=Math.sin(c7e),s7e=o((t,e,r)=>{let i=t.node().getBBox(),n=i.width+e*2,a=i.height+e*2;Hr(t,a,n,r),t.attr("viewBox",`${i.x-e} ${i.y-e} ${n} ${a}`)},"applyPaddedViewBox"),s1t=o((t,e,r,i)=>{let a=i.db.getRoot();if(!a)return;let s=ge(),{look:l,handDrawnSeed:u,themeVariables:h}=s,f=$s(s.fontSize)[0]??r1t,d=l==="handDrawn",p=a.children??[],m=s.ishikawa?.diagramPadding??20,g=s.ishikawa?.useMaxWidth??!1,y=Fi(e),v=y.append("g").attr("class","ishikawa"),x=d?rt.svg(y.node()):void 0,b=x?{roughSvg:x,seed:u??0,lineColor:h?.lineColor??"#333",fillColor:h?.mainBkg??"#fff"}:void 0,T=`ishikawa-arrow-${e}`;d||v.append("defs").append("marker").attr("id",T).attr("viewBox","0 0 10 10").attr("refX",0).attr("refY",5).attr("markerWidth",6).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 10 0 L 0 5 L 10 10 Z").attr("class","ishikawa-arrow");let w=0,k=mx,C=d?void 0:gx(v,w,k,w,k,"ishikawa-spine");if(o1t(v,w,k,a.text,f,b),!p.length){d&&gx(v,w,k,w,k,"ishikawa-spine",b),s7e(y,m,g);return}w-=20;let E=p.filter((R,B)=>B%2===0),S=p.filter((R,B)=>B%2===1),L=o7e(E),M=o7e(S),I=L.total+M.total,A=mx,_=mx;if(I>0){let R=mx*2,B=mx*.3;A=Math.max(B,R*(L.total/I)),_=Math.max(B,R*(M.total/I))}let D=f*2;A=Math.max(A,L.max*D),_=Math.max(_,M.max*D),k=Math.max(A,mx),C&&C.attr("y1",k).attr("y2",k),v.select(".ishikawa-head-group").attr("transform",`translate(0,${k})`);let N=Math.ceil(p.length/2);for(let R=0;RMath.min(O,$.getBBox().x),1/0)}if(d)gx(v,w,k,0,k,"ishikawa-spine",b);else{C.attr("x1",w);let R=`url(#${T})`;v.selectAll("line.ishikawa-branch, line.ishikawa-sub-branch").attr("marker-start",R)}s7e(y,m,g)},"draw"),o7e=o(t=>{let e=o(r=>r.children.reduce((i,n)=>i+1+e(n),0),"countDescendants");return t.reduce((r,i)=>{let n=e(i);return r.total+=n,r.max=Math.max(r.max,n),r},{total:0,max:0})},"sideStats"),o1t=o((t,e,r,i,n,a)=>{let s=Math.max(6,Math.floor(110/(n*.6))),l=t.append("g").attr("class","ishikawa-head-group").attr("transform",`translate(${e},${r})`),u=s8(l,u7e(i,s),0,0,"ishikawa-head-label","start",n),h=u.node().getBBox(),f=Math.max(60,h.width+6),d=Math.max(40,h.height*2+40),p=`M 0 ${-d/2} L 0 ${d/2} Q ${f*2.4} 0 0 ${-d/2} Z`;if(a){let m=a.roughSvg.path(p,{roughness:1.5,seed:a.seed,fill:a.fillColor,fillStyle:"hachure",fillWeight:2.5,hachureGap:5,stroke:a.lineColor,strokeWidth:2});l.insert(()=>m,":first-child").attr("class","ishikawa-head")}else l.insert("path",":first-child").attr("class","ishikawa-head").attr("d",p);u.attr("transform",`translate(${(f-h.width)/2-h.x+3},${-h.y-h.height/2})`)},"drawHead"),l1t=o((t,e)=>{let r=[],i=[],n=o((a,s,l)=>{let u=e===-1?[...a].reverse():a;for(let h of u){let f=r.length,d=h.children??[];r.push({depth:l,text:u7e(h.text,15),parentIndex:s,childCount:d.length}),l%2===0?(i.push(f),d.length&&n(d,f,l+1)):(d.length&&n(d,f,l+1),i.push(f))}},"walk");return n(t,-1,2),{entries:r,yOrder:i}},"flattenTree"),c1t=o((t,e,r,i,n,a,s)=>{let l=t.append("g").attr("class","ishikawa-label-group"),h=s8(l,e,r,i+11*n,"ishikawa-label cause","middle",a).node().getBBox();if(s){let f=s.roughSvg.rectangle(h.x-20,h.y-2,h.width+40,h.height+4,{roughness:1.5,seed:s.seed,fill:s.fillColor,fillStyle:"hachure",fillWeight:2.5,hachureGap:5,stroke:s.lineColor,strokeWidth:2});l.insert(()=>f,":first-child").attr("class","ishikawa-label-box")}else l.insert("rect",":first-child").attr("class","ishikawa-label-box").attr("x",h.x-20).attr("y",h.y-2).attr("width",h.width+40).attr("height",h.height+4)},"drawCauseLabel"),XH=o((t,e,r,i,n,a)=>{let s=Math.sqrt(i*i+n*n);if(s===0)return;let l=i/s,u=n/s,h=6,f=-u*h,d=l*h,p=e,m=r,g=`M ${p} ${m} L ${p-l*h*2+f} ${m-u*h*2+d} L ${p-l*h*2-f} ${m-u*h*2-d} Z`,y=a.roughSvg.path(g,{roughness:1,seed:a.seed,fill:a.lineColor,fillStyle:"solid",stroke:a.lineColor,strokeWidth:1});t.append(()=>y)},"drawArrowMarker"),u1t=o((t,e,r,i,n,a,s,l)=>{let u=e.children??[],h=a*(u.length?1:.2),f=-n7e*h,d=a7e*h*n,p=r+f,m=i+d;if(gx(t,r,i,p,m,"ishikawa-branch",l),l&&XH(t,r,i,r-p,i-m,l),c1t(t,e.text,p,m,n,s,l),!u.length)return;let{entries:g,yOrder:y}=l1t(u,n),v=g.length,x=new Array(v);for(let[C,E]of y.entries())x[E]=i+d*((C+1)/(v+1));let b=new Map;b.set(-1,{x0:r,y0:i,x1:p,y1:m,childCount:u.length,childrenDrawn:0});let T=-n7e,w=a7e*n,k=n<0?"ishikawa-label up":"ishikawa-label down";for(let[C,E]of g.entries()){let S=x[C],L=b.get(E.parentIndex),M=t.append("g").attr("class","ishikawa-sub-group"),I=0,A=0,_=0;if(E.depth%2===0){let D=L.y1-L.y0;I=l7e(L.x0,L.x1,D?(S-L.y0)/D:.5),A=S,_=I-(E.childCount>0?n1t+E.childCount*a1t:i1t),gx(M,I,S,_,S,"ishikawa-sub-branch",l),l&&XH(M,I,S,1,0,l),s8(M,E.text,_,S,"ishikawa-label align","end",s)}else{let D=L.childrenDrawn++;I=l7e(L.x0,L.x1,(L.childCount-D)/(L.childCount+1)),A=L.y0,_=I+T*((S-A)/w),gx(M,I,A,_,S,"ishikawa-sub-branch",l),l&&XH(M,I,A,I-_,A-S,l),s8(M,E.text,_,S,k,"end",s)}E.childCount>0&&b.set(C,{x0:I,y0:A,x1:_,y1:S,childCount:E.childCount,childrenDrawn:0})}},"drawBranch"),h1t=o(t=>t.split(/|\n/),"splitLines"),u7e=o((t,e)=>{if(t.length<=e)return t;let r=[];for(let i of t.split(/\s+/)){let n=r.length-1;n>=0&&r[n].length+1+i.length<=e?r[n]+=" "+i:r.push(i)}return r.join(` +`)},"wrapText"),s8=o((t,e,r,i,n,a,s)=>{let l=h1t(e),u=s*1.05,h=t.append("text").attr("class",n).attr("text-anchor",a).attr("x",r).attr("y",i-(l.length-1)*u/2);for(let[f,d]of l.entries())h.append("tspan").attr("x",r).attr("dy",f===0?0:u).text(d);return h},"drawMultilineText"),l7e=o((t,e,r)=>t+(e-t)*r,"lerp"),gx=o((t,e,r,i,n,a,s)=>{if(s){let l=s.roughSvg.line(e,r,i,n,{roughness:1.5,seed:s.seed,stroke:s.lineColor,strokeWidth:2});t.append(()=>l).attr("class",a);return}return t.append("line").attr("class",a).attr("x1",e).attr("y1",r).attr("x2",i).attr("y2",n)},"drawLine"),h7e={draw:s1t}});var f1t,d7e,p7e=P(()=>{"use strict";f1t=o(t=>` +.ishikawa .ishikawa-spine, +.ishikawa .ishikawa-branch, +.ishikawa .ishikawa-sub-branch { + stroke: ${t.lineColor}; + stroke-width: 2; + fill: none; +} + +.ishikawa .ishikawa-sub-branch { + stroke-width: 1; +} + +.ishikawa .ishikawa-arrow { + fill: ${t.lineColor}; +} + +.ishikawa .ishikawa-head { + fill: ${t.mainBkg}; + stroke: ${t.lineColor}; + stroke-width: 2; +} + +.ishikawa .ishikawa-label-box { + fill: ${t.mainBkg}; + stroke: ${t.lineColor}; + stroke-width: 2; +} + +.ishikawa text { + font-family: ${t.fontFamily}; + font-size: ${t.fontSize}; + fill: ${t.textColor}; +} + +.ishikawa .ishikawa-head-label { + font-weight: 600; + text-anchor: middle; + dominant-baseline: middle; + font-size: 14px; +} + +.ishikawa .ishikawa-label { + text-anchor: end; +} + +.ishikawa .ishikawa-label.cause { + text-anchor: middle; + dominant-baseline: middle; +} + +.ishikawa .ishikawa-label.align { + text-anchor: end; + dominant-baseline: middle; +} + +.ishikawa .ishikawa-label.up { + dominant-baseline: baseline; +} + +.ishikawa .ishikawa-label.down { + dominant-baseline: hanging; +} +`,"getStyles"),d7e=f1t});var m7e={};ur(m7e,{diagram:()=>d1t});var d1t,g7e=P(()=>{"use strict";r7e();i7e();f7e();p7e();d1t={parser:t7e,get db(){return new a8},renderer:h7e,styles:d7e}});var KH,x7e,b7e=P(()=>{"use strict";KH=(function(){var t=o(function(b,T,w,k){for(w=w||{},k=b.length;k--;w[b[k]]=T);return w},"o"),e=[5,8],r=[7,8,11,12,17,19,22,24],i=[1,17],n=[1,18],a=[7,8,11,12,14,15,16,17,19,20,21,22,24,27],s=[1,31],l=[1,39],u=[7,8,11,12,17,19,22,24,27],h=[1,57],f=[1,56],d=[1,58],p=[1,59],m=[1,60],g=[7,8,11,12,16,17,19,20,22,24,27,31,32,33],y={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,optNewlines:4,VENN:5,document:6,EOF:7,NEWLINE:8,line:9,statement:10,TITLE:11,SET:12,identifier:13,BRACKET_LABEL:14,COLON:15,NUMERIC:16,UNION:17,identifierList:18,TEXT:19,IDENTIFIER:20,STRING:21,INDENT_TEXT:22,indentedTextTail:23,STYLE:24,stylesOpt:25,styleField:26,COMMA:27,styleValue:28,valueTokens:29,valueToken:30,HEXCOLOR:31,RGBCOLOR:32,RGBACOLOR:33,$accept:0,$end:1},terminals_:{2:"error",5:"VENN",7:"EOF",8:"NEWLINE",11:"TITLE",12:"SET",14:"BRACKET_LABEL",15:"COLON",16:"NUMERIC",17:"UNION",19:"TEXT",20:"IDENTIFIER",21:"STRING",22:"INDENT_TEXT",24:"STYLE",27:"COMMA",31:"HEXCOLOR",32:"RGBCOLOR",33:"RGBACOLOR"},productions_:[0,[3,4],[4,0],[4,2],[6,0],[6,2],[9,1],[9,1],[10,1],[10,2],[10,3],[10,4],[10,5],[10,2],[10,3],[10,4],[10,5],[10,3],[10,3],[10,3],[10,4],[10,4],[10,2],[10,3],[23,1],[23,1],[23,1],[23,2],[23,2],[25,1],[25,3],[26,3],[28,1],[28,1],[29,1],[29,2],[30,1],[30,1],[30,1],[30,1],[30,1],[18,1],[18,3],[13,1],[13,1]],performAction:o(function(T,w,k,C,E,S,L){var M=S.length-1;switch(E){case 1:return S[M-1];case 2:case 3:case 4:this.$=[];break;case 5:S[M-1].push(S[M]),this.$=S[M-1];break;case 6:this.$=[];break;case 7:case 22:case 32:case 36:case 37:case 38:case 39:case 40:this.$=S[M];break;case 8:C.setDiagramTitle(S[M].substr(6)),this.$=S[M].substr(6);break;case 9:C.addSubsetData([S[M]],void 0,void 0),C.setIndentMode&&C.setIndentMode(!0);break;case 10:C.addSubsetData([S[M-1]],S[M],void 0),C.setIndentMode&&C.setIndentMode(!0);break;case 11:C.addSubsetData([S[M-2]],void 0,parseFloat(S[M])),C.setIndentMode&&C.setIndentMode(!0);break;case 12:C.addSubsetData([S[M-3]],S[M-2],parseFloat(S[M])),C.setIndentMode&&C.setIndentMode(!0);break;case 13:if(S[M].length<2)throw new Error("union requires multiple identifiers");C.validateUnionIdentifiers&&C.validateUnionIdentifiers(S[M]),C.addSubsetData(S[M],void 0,void 0),C.setIndentMode&&C.setIndentMode(!0);break;case 14:if(S[M-1].length<2)throw new Error("union requires multiple identifiers");C.validateUnionIdentifiers&&C.validateUnionIdentifiers(S[M-1]),C.addSubsetData(S[M-1],S[M],void 0),C.setIndentMode&&C.setIndentMode(!0);break;case 15:if(S[M-2].length<2)throw new Error("union requires multiple identifiers");C.validateUnionIdentifiers&&C.validateUnionIdentifiers(S[M-2]),C.addSubsetData(S[M-2],void 0,parseFloat(S[M])),C.setIndentMode&&C.setIndentMode(!0);break;case 16:if(S[M-3].length<2)throw new Error("union requires multiple identifiers");C.validateUnionIdentifiers&&C.validateUnionIdentifiers(S[M-3]),C.addSubsetData(S[M-3],S[M-2],parseFloat(S[M])),C.setIndentMode&&C.setIndentMode(!0);break;case 17:case 18:case 19:C.addTextData(S[M-1],S[M],void 0);break;case 20:case 21:C.addTextData(S[M-2],S[M-1],S[M]);break;case 23:C.addStyleData(S[M-1],S[M]);break;case 24:case 25:case 26:var I=C.getCurrentSets();if(!I)throw new Error("text requires set");C.addTextData(I,S[M],void 0);break;case 27:case 28:var I=C.getCurrentSets();if(!I)throw new Error("text requires set");C.addTextData(I,S[M-1],S[M]);break;case 29:case 41:this.$=[S[M]];break;case 30:case 42:this.$=[...S[M-2],S[M]];break;case 31:this.$=[S[M-2],S[M]];break;case 33:this.$=S[M].join(" ");break;case 34:this.$=[S[M]];break;case 35:S[M-1].push(S[M]),this.$=S[M-1];break;case 43:case 44:this.$=S[M];break}},"anonymous"),table:[t(e,[2,2],{3:1,4:2}),{1:[3]},{5:[1,3],8:[1,4]},t(r,[2,4],{6:5}),t(e,[2,3]),{7:[1,6],8:[1,8],9:7,10:9,11:[1,10],12:[1,11],17:[1,12],19:[1,13],22:[1,14],24:[1,15]},{1:[2,1]},t(r,[2,5]),t(r,[2,6]),t(r,[2,7]),t(r,[2,8]),{13:16,20:i,21:n},{13:20,18:19,20:i,21:n},{13:20,18:21,20:i,21:n},{16:[1,25],20:[1,23],21:[1,24],23:22},{13:20,18:26,20:i,21:n},t(r,[2,9],{14:[1,27],15:[1,28]}),t(a,[2,43]),t(a,[2,44]),t(r,[2,13],{14:[1,29],15:[1,30],27:s}),t(a,[2,41]),{16:[1,34],20:[1,32],21:[1,33],27:s},t(r,[2,22]),t(r,[2,24],{14:[1,35]}),t(r,[2,25],{14:[1,36]}),t(r,[2,26]),{20:l,25:37,26:38,27:s},t(r,[2,10],{15:[1,40]}),{16:[1,41]},t(r,[2,14],{15:[1,42]}),{16:[1,43]},{13:44,20:i,21:n},t(r,[2,17],{14:[1,45]}),t(r,[2,18],{14:[1,46]}),t(r,[2,19]),t(r,[2,27]),t(r,[2,28]),t(r,[2,23],{27:[1,47]}),t(u,[2,29]),{15:[1,48]},{16:[1,49]},t(r,[2,11]),{16:[1,50]},t(r,[2,15]),t(a,[2,42]),t(r,[2,20]),t(r,[2,21]),{20:l,26:51},{16:h,20:f,21:[1,53],28:52,29:54,30:55,31:d,32:p,33:m},t(r,[2,12]),t(r,[2,16]),t(u,[2,30]),t(u,[2,31]),t(u,[2,32]),t(u,[2,33],{30:61,16:h,20:f,31:d,32:p,33:m}),t(g,[2,34]),t(g,[2,36]),t(g,[2,37]),t(g,[2,38]),t(g,[2,39]),t(g,[2,40]),t(g,[2,35])],defaultActions:{6:[2,1]},parseError:o(function(T,w){if(w.recoverable)this.trace(T);else{var k=new Error(T);throw k.hash=w,k}},"parseError"),parse:o(function(T){var w=this,k=[0],C=[],E=[null],S=[],L=this.table,M="",I=0,A=0,_=0,D=2,N=1,R=S.slice.call(arguments,1),B=Object.create(this.lexer),O={yy:{}};for(var $ in this.yy)Object.prototype.hasOwnProperty.call(this.yy,$)&&(O.yy[$]=this.yy[$]);B.setInput(T,O.yy),O.yy.lexer=B,O.yy.parser=this,typeof B.yylloc>"u"&&(B.yylloc={});var z=B.yylloc;S.push(z);var F=B.options&&B.options.ranges;typeof O.yy.parseError=="function"?this.parseError=O.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function V(Ne){k.length=k.length-2*Ne,E.length=E.length-Ne,S.length=S.length-Ne}o(V,"popStack");function H(){var Ne;return Ne=C.pop()||B.lex()||N,typeof Ne!="number"&&(Ne instanceof Array&&(C=Ne,Ne=C.pop()),Ne=w.symbols_[Ne]||Ne),Ne}o(H,"lex");for(var X,W,Z,Y,ae,J,ee={},re,te,be,de;;){if(Z=k[k.length-1],this.defaultActions[Z]?Y=this.defaultActions[Z]:((X===null||typeof X>"u")&&(X=H()),Y=L[Z]&&L[Z][X]),typeof Y>"u"||!Y.length||!Y[0]){var Ee="";de=[];for(re in L[Z])this.terminals_[re]&&re>D&&de.push("'"+this.terminals_[re]+"'");B.showPosition?Ee="Parse error on line "+(I+1)+`: +`+B.showPosition()+` +Expecting `+de.join(", ")+", got '"+(this.terminals_[X]||X)+"'":Ee="Parse error on line "+(I+1)+": Unexpected "+(X==N?"end of input":"'"+(this.terminals_[X]||X)+"'"),this.parseError(Ee,{text:B.match,token:this.terminals_[X]||X,line:B.yylineno,loc:z,expected:de})}if(Y[0]instanceof Array&&Y.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Z+", token: "+X);switch(Y[0]){case 1:k.push(X),E.push(B.yytext),S.push(B.yylloc),k.push(Y[1]),X=null,W?(X=W,W=null):(A=B.yyleng,M=B.yytext,I=B.yylineno,z=B.yylloc,_>0&&_--);break;case 2:if(te=this.productions_[Y[1]][1],ee.$=E[E.length-te],ee._$={first_line:S[S.length-(te||1)].first_line,last_line:S[S.length-1].last_line,first_column:S[S.length-(te||1)].first_column,last_column:S[S.length-1].last_column},F&&(ee._$.range=[S[S.length-(te||1)].range[0],S[S.length-1].range[1]]),J=this.performAction.apply(ee,[M,A,I,O.yy,Y[1],E,S].concat(R)),typeof J<"u")return J;te&&(k=k.slice(0,-1*te*2),E=E.slice(0,-1*te),S=S.slice(0,-1*te)),k.push(this.productions_[Y[1]][0]),E.push(ee.$),S.push(ee._$),be=L[k[k.length-2]][k[k.length-1]],k.push(be);break;case 3:return!0}}return!0},"parse")},v=(function(){var b={EOF:1,parseError:o(function(w,k){if(this.yy.parser)this.yy.parser.parseError(w,k);else throw new Error(w)},"parseError"),setInput:o(function(T,w){return this.yy=w||this.yy||{},this._input=T,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var T=this._input[0];this.yytext+=T,this.yyleng++,this.offset++,this.match+=T,this.matched+=T;var w=T.match(/(?:\r\n?|\n).*/g);return w?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),T},"input"),unput:o(function(T){var w=T.length,k=T.split(/(?:\r\n?|\n)/g);this._input=T+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-w),this.offset-=w;var C=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),k.length-1&&(this.yylineno-=k.length-1);var E=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:k?(k.length===C.length?this.yylloc.first_column:0)+C[C.length-k.length].length-k[0].length:this.yylloc.first_column-w},this.options.ranges&&(this.yylloc.range=[E[0],E[0]+this.yyleng-w]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(T){this.unput(this.match.slice(T))},"less"),pastInput:o(function(){var T=this.matched.substr(0,this.matched.length-this.match.length);return(T.length>20?"...":"")+T.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var T=this.match;return T.length<20&&(T+=this._input.substr(0,20-T.length)),(T.substr(0,20)+(T.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var T=this.pastInput(),w=new Array(T.length+1).join("-");return T+this.upcomingInput()+` +`+w+"^"},"showPosition"),test_match:o(function(T,w){var k,C,E;if(this.options.backtrack_lexer&&(E={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(E.yylloc.range=this.yylloc.range.slice(0))),C=T[0].match(/(?:\r\n?|\n).*/g),C&&(this.yylineno+=C.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:C?C[C.length-1].length-C[C.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+T[0].length},this.yytext+=T[0],this.match+=T[0],this.matches=T,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(T[0].length),this.matched+=T[0],k=this.performAction.call(this,this.yy,this,w,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),k)return k;if(this._backtrack){for(var S in E)this[S]=E[S];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var T,w,k,C;this._more||(this.yytext="",this.match="");for(var E=this._currentRules(),S=0;Sw[0].length)){if(w=k,C=S,this.options.backtrack_lexer){if(T=this.test_match(k,E[S]),T!==!1)return T;if(this._backtrack){w=!1;continue}else return!1}else if(!this.options.flex)break}return w?(T=this.test_match(w,E[C]),T!==!1?T:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var w=this.next();return w||this.lex()},"lex"),begin:o(function(w){this.conditionStack.push(w)},"begin"),popState:o(function(){var w=this.conditionStack.length-1;return w>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(w){return w=this.conditionStack.length-1-Math.abs(w||0),w>=0?this.conditionStack[w]:"INITIAL"},"topState"),pushState:o(function(w){this.begin(w)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(w,k,C,E){var S=E;switch(C){case 0:break;case 1:break;case 2:break;case 3:if(w.getIndentMode&&w.getIndentMode())return w.consumeIndentText=!0,this.begin("INITIAL"),22;break;case 4:break;case 5:w.setIndentMode&&w.setIndentMode(!1),this.begin("INITIAL"),this.unput(k.yytext);break;case 6:return this.begin("bol"),8;break;case 7:break;case 8:break;case 9:return 7;case 10:return 11;case 11:return 5;case 12:return 12;case 13:return 17;case 14:if(w.consumeIndentText)w.consumeIndentText=!1;else return 19;break;case 15:return 24;case 16:return k.yytext=k.yytext.slice(2,-2),14;break;case 17:return k.yytext=k.yytext.slice(1,-1).trim(),14;break;case 18:return 16;case 19:return 31;case 20:return 33;case 21:return 32;case 22:return 20;case 23:return 21;case 24:return 27;case 25:return 15}},"anonymous"),rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[ \t]+(?=[\n\r]))/i,/^(?:[ \t]+(?=text\b))/i,/^(?:[ \t]+)/i,/^(?:[^ \t\n\r])/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:[ \t]+)/i,/^(?:$)/i,/^(?:title\s[^#\n;]+)/i,/^(?:venn-beta\b)/i,/^(?:set\b)/i,/^(?:union\b)/i,/^(?:text\b)/i,/^(?:style\b)/i,/^(?:\["[^\"]*"\])/i,/^(?:\[[^\]\"]+\])/i,/^(?:[+-]?(\d+(\.\d+)?|\.\d+))/i,/^(?:#[0-9a-fA-F]{3,8})/i,/^(?:rgba\(\s*[0-9.]+\s*[,]\s*[0-9.]+\s*[,]\s*[0-9.]+\s*[,]\s*[0-9.]+\s*\))/i,/^(?:rgb\(\s*[0-9.]+\s*[,]\s*[0-9.]+\s*[,]\s*[0-9.]+\s*\))/i,/^(?:[A-Za-z_][A-Za-z0-9\-_]*)/i,/^(?:"[^\"]*")/i,/^(?:,)/i,/^(?::)/i],conditions:{bol:{rules:[0,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],inclusive:!0},INITIAL:{rules:[0,1,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25],inclusive:!0}}};return b})();y.lexer=v;function x(){this.yy={}}return o(x,"Parser"),x.prototype=y,y.Parser=x,new x})();KH.parser=KH;x7e=KH});function _1t(){return fi(A1t,Lt().venn)}var QH,ZH,JH,eY,tY,rY,g1t,y1t,QC,v1t,x1t,b1t,T1t,o8,k1t,C1t,w1t,E1t,S1t,A1t,D1t,T7e,k7e=P(()=>{"use strict";er();Sr();Ki();wa();QH=[],ZH=[],JH=[],eY=new Set,rY=!1,g1t=o((t,e,r)=>{let i=o8(t).sort(),n=r??10/Math.pow(t.length,2);tY=i,i.length===1&&eY.add(i[0]),QH.push({sets:i,size:n,label:e?QC(e):void 0})},"addSubsetData"),y1t=o(()=>QH,"getSubsetData"),QC=o(t=>{let e=t.trim();return e.length>=2&&e.startsWith('"')&&e.endsWith('"')?e.slice(1,-1):e},"normalizeText"),v1t=o(t=>t&&QC(t),"normalizeStyleValue"),x1t=o((t,e,r)=>{let i=QC(e);ZH.push({sets:o8(t).sort(),id:i,label:r?QC(r):void 0})},"addTextData"),b1t=o((t,e)=>{let r=o8(t).sort(),i={};for(let[n,a]of e)i[n]=v1t(a)??a;JH.push({targets:r,styles:i})},"addStyleData"),T1t=o(()=>JH,"getStyleData"),o8=o(t=>t.map(e=>QC(e)),"normalizeIdentifierList"),k1t=o(t=>{let r=o8(t).filter(i=>!eY.has(i));if(r.length>0)throw new Error(`unknown set identifier: ${r.join(", ")}`)},"validateUnionIdentifiers"),C1t=o(()=>ZH,"getTextData"),w1t=o(()=>tY,"getCurrentSets"),E1t=o(()=>rY,"getIndentMode"),S1t=o(t=>{rY=t},"setIndentMode"),A1t=fr.venn;o(_1t,"getConfig");D1t=o(()=>{wr(),QH.length=0,ZH.length=0,JH.length=0,eY.clear(),tY=void 0,rY=!1},"customClear"),T7e={getConfig:_1t,clear:D1t,setAccTitle:Ar,getAccTitle:Dr,setDiagramTitle:Mr,getDiagramTitle:Nr,getAccDescription:Rr,setAccDescription:Lr,addSubsetData:g1t,getSubsetData:y1t,addTextData:x1t,addStyleData:b1t,validateUnionIdentifiers:k1t,getTextData:C1t,getStyleData:T1t,getCurrentSets:w1t,getIndentMode:E1t,setIndentMode:S1t}});var L1t,C7e,w7e=P(()=>{"use strict";L1t=o(t=>` + .venn-title { + font-size: 32px; + fill: ${t.vennTitleTextColor}; + font-family: ${t.fontFamily}; + } + + .venn-circle text { + font-size: 48px; + font-family: ${t.fontFamily}; + } + + .venn-intersection text { + font-size: 48px; + fill: ${t.vennSetTextColor}; + font-family: ${t.fontFamily}; + } + + .venn-text-node { + font-family: ${t.fontFamily}; + color: ${t.vennSetTextColor}; + } +`,"getStyles"),C7e=L1t});function l8(t,e){let r=N1t(t),i=r.filter(l=>R1t(l,t)),n=0,a=0,s=[];if(i.length>1){let l=_7e(i);for(let h=0;hf.angle-h.angle);let u=i[i.length-1];for(let h=0;hg.radius*2&&(T=g.radius*2),(p==null||p.width>T)&&(p={circle:g,width:T,p1:f,p2:u,large:T>g.radius,sweep:!0})}p!=null&&(s.push(p),n+=aY(p.circle.radius,p.width),u=f)}}else{let l=t[0];for(let h=1;hMath.abs(l.radius-t[h].radius)){u=!0;break}u?n=a=0:(n=l.radius*l.radius*Math.PI,s.push({circle:l,p1:{x:l.x,y:l.y+l.radius},p2:{x:l.x-1e-10,y:l.y+l.radius},width:l.radius*2,large:!0,sweep:!0}))}return a/=2,e&&(e.area=n+a,e.arcArea=n,e.polygonArea=a,e.arcs=s,e.innerPoints=i,e.intersectionPoints=r),n+a}function R1t(t,e){return e.every(r=>qo(t,r)=t+e)return 0;if(r<=Math.abs(t-e))return Math.PI*Math.min(t,e)*Math.min(t,e);let i=t-(r*r-e*e+t*t)/(2*r),n=e-(r*r-t*t+e*e)/(2*r);return aY(t,i)+aY(e,n)}function A7e(t,e){let r=qo(t,e),i=t.radius,n=e.radius;if(r>=i+n||r<=Math.abs(i-n))return[];let a=(i*i-n*n+r*r)/(2*r),s=Math.sqrt(i*i-a*a),l=t.x+a*(e.x-t.x)/r,u=t.y+a*(e.y-t.y)/r,h=-(e.y-t.y)*(s/r),f=-(e.x-t.x)*(s/r);return[{x:l+h,y:u-f},{x:l-h,y:u+f}]}function _7e(t){let e={x:0,y:0};for(let r of t)e.x+=r.x,e.y+=r.y;return e.x/=t.length,e.y/=t.length,e}function I1t(t,e,r,i){i=i||{};let n=i.maxIterations||100,a=i.tolerance||1e-10,s=t(e),l=t(r),u=r-e;if(s*l>0)throw"Initial bisect points must have opposite signs";if(s===0)return e;if(l===0)return r;for(let h=0;h=0&&(e=f),Math.abs(u)sY(e))}function yx(t,e){let r=0;for(let i=0;ik.fx-C.fx,"sortOrder"),x=e.slice(),b=e.slice(),T=e.slice(),w=e.slice();for(let k=0;k{let L=S.slice();return L.fx=S.fx,L.id=S.id,L});E.sort((S,L)=>S.id-L.id),r.history.push({x:g[0].slice(),fx:g[0].fx,simplex:E})}p=0;for(let E=0;E=g[m-1].fx){let E=!1;if(b.fx>C.fx?(_f(T,1+f,x,-f,C),T.fx=t(T),T.fx=1)break;for(let S=1;Sl+a*n*u||h>=v)y=n;else{if(Math.abs(d)<=-s*u)return n;d*(y-g)>=0&&(y=g),g=n,v=h}return 0}o(m,"zoom");for(let g=0;g<10;++g){if(_f(i.x,1,r.x,n,e),h=i.fx=t(i.x,i.fxprime),d=yx(i.fxprime,e),h>l+a*n*u||g&&h>=f)return m(p,n,f);if(Math.abs(d)<=-s*u)return n;if(d>=0)return m(n,p,h);f=h,p=n,n*=2}return n}function O1t(t,e,r){let i={x:e.slice(),fx:0,fxprime:e.slice()},n={x:e.slice(),fx:0,fxprime:e.slice()},a=e.slice(),s,l,u=1,h;r=r||{},h=r.maxIterations||e.length*20,i.fx=t(i.x,i.fxprime),s=i.fxprime.slice(),lY(s,i.fxprime,-1);for(let f=0;f{let d={};for(let p=0;phY(t,e,i)-r,0,t+e)}function P1t(t,e={}){let r=e.distinct,i=t.map(l=>Object.assign({},l));function n(l){return l.join(";")}if(o(n,"toKey"),r){let l=new Map;for(let u of i)for(let h=0;hl===u?0:la.sets.length===2).forEach(a=>{let s=r[a.sets[0]],l=r[a.sets[1]],u=Math.sqrt(e[s].size/Math.PI),h=Math.sqrt(e[l].size/Math.PI),f=cY(u,h,a.size);i[s][l]=i[l][s]=f;let d=0;a.size+1e-10>=Math.min(e[s].size,e[l].size)?d=1:a.size<=1e-10&&(d=-1),n[s][l]=n[l][s]=d}),{distances:i,constraints:n}}function F1t(t,e,r,i){for(let a=0;a0&&g<=d||p<0&&g>=d||(n+=2*y*y,e[2*a]+=4*y*(s-h),e[2*a+1]+=4*y*(l-f),e[2*u]+=4*y*(h-s),e[2*u+1]+=4*y*(f-l))}}return n}function $1t(t,e={}){let r=G1t(t,e),i=e.lossFunction||vx;if(t.length>=8){let n=z1t(t,e),a=i(n,t),s=i(r,t);a+1e-8p.map(m=>m/l));let u=o((p,m)=>F1t(p,m,a,s),"obj"),h=null;for(let p=0;pd.sets.length===2);for(let d of t){let p=d.weight!=null?d.weight:1,m=d.sets[0],g=d.sets[1];d.size+R7e>=Math.min(i[m].size,i[g].size)&&(p=0),n[m].push({set:g,size:d.size,weight:p}),n[g].push({set:m,size:d.size,weight:p})}let a=[];Object.keys(n).forEach(d=>{let p=0;for(let m=0;mt[s]));let a=i.weight!=null?i.weight:1;r+=a*(n-i.size)*(n-i.size)}return r}function N7e(t,e){let r=0;for(let i of e){if(i.sets.length===1)continue;let n;if(i.sets.length===2){let l=t[i.sets[0]],u=t[i.sets[1]];n=hY(l.radius,u.radius,qo(l,u))}else n=l8(i.sets.map(l=>t[l]));let a=i.weight!=null?i.weight:1,s=Math.log((n+1)/(i.size+1));r+=a*s*s}return r}function V1t(t,e,r){if(r==null?t.sort((n,a)=>a.radius-n.radius):t.sort(r),t.length>0){let n=t[0].x,a=t[0].y;for(let s of t)s.x-=n,s.y-=a}if(t.length===2&&qo(t[0],t[1])1){let n=Math.atan2(t[1].x,t[1].y)-e,a=Math.cos(n),s=Math.sin(n);for(let l of t){let u=l.x,h=l.y;l.x=a*u-s*h,l.y=s*u+a*h}}if(t.length>2){let n=Math.atan2(t[2].x,t[2].y)-e;for(;n<0;)n+=2*Math.PI;for(;n>2*Math.PI;)n-=2*Math.PI;if(n>Math.PI){let a=t[1].y/(1e-10+t[1].x);for(let s of t){var i=(s.x+a*s.y)/(1+a*a);s.x=2*i-s.x,s.y=2*i*a-s.y}}}}function q1t(t){t.forEach(n=>{n.parent=n});function e(n){return n.parent!==n&&(n.parent=e(n.parent)),n.parent}o(e,"find");function r(n,a){let s=e(n),l=e(a);s.parent=l}o(r,"union");for(let n=0;n{delete n.parent}),Array.from(i.values())}function uY(t){let e=o(r=>{let i=t.reduce((a,s)=>Math.max(a,s[r]+s.radius),Number.NEGATIVE_INFINITY),n=t.reduce((a,s)=>Math.min(a,s[r]-s.radius),Number.POSITIVE_INFINITY);return{max:i,min:n}},"minMax");return{xRange:e("x"),yRange:e("y")}}function I7e(t,e,r){e==null&&(e=Math.PI/2);let i=P7e(t).map(h=>Object.assign({},h)),n=q1t(i);for(let h of n){V1t(h,e,r);let f=uY(h);h.size=(f.xRange.max-f.xRange.min)*(f.yRange.max-f.yRange.min),h.bounds=f}n.sort((h,f)=>f.size-h.size),i=n[0];let a=i.bounds,s=(a.xRange.max-a.xRange.min)/50;function l(h,f,d){if(!h)return;let p=h.bounds,m,g;if(f)m=a.xRange.max-p.xRange.min+s;else{m=a.xRange.max-p.xRange.max;let y=(p.xRange.max-p.xRange.min)/2-(a.xRange.max-a.xRange.min)/2;y<0&&(m+=y)}if(d)g=a.yRange.max-p.yRange.min+s;else{g=a.yRange.max-p.yRange.max;let y=(p.yRange.max-p.yRange.min)/2-(a.yRange.max-a.yRange.min)/2;y<0&&(g+=y)}for(let y of h)y.x+=m,y.y+=g,i.push(y)}o(l,"addCluster");let u=1;for(;u({radius:f*m.radius,x:i+d+(m.x-s.min)*f,y:i+p+(m.y-l.min)*f,setid:m.setid})))}function O7e(t){let e={};for(let r of t)e[r.setid]=r;return e}function P7e(t){return Object.keys(t).map(r=>Object.assign(t[r],{setid:r}))}function B7e(t={}){let e=!1,r=600,i=350,n=15,a=1e3,s=Math.PI/2,l=!0,u=null,h=!0,f=!0,d=null,p=null,m=!1,g=null,y=t&&t.symmetricalTextCentre?t.symmetricalTextCentre:!1,v={},x=t&&t.colourScheme?t.colourScheme:t&&t.colorScheme?t.colorScheme:["#1f77b4","#ff7f0e","#2ca02c","#d62728","#9467bd","#8c564b","#e377c2","#7f7f7f","#bcbd22","#17becf"],b=0,T=o(function(E){if(E in v)return v[E];var S=v[E]=x[b];return b+=1,b>=x.length&&(b=0),S},"colours"),w=L7e,k=vx;function C(E){let S=E.datum(),L=new Set;S.forEach(Y=>{Y.size==0&&Y.sets.length==1&&L.add(Y.sets[0])}),S=S.filter(Y=>!Y.sets.some(ae=>L.has(ae)));let M={},I={};if(S.length>0){let Y=w(S,{lossFunction:k,distinct:m});l&&(Y=I7e(Y,s,p)),M=M7e(Y,r,i,n,u),I=$7e(M,S,y)}let A={};S.forEach(Y=>{Y.label&&(A[Y.sets]=Y.label)});function _(Y){if(Y.sets in A)return A[Y.sets];if(Y.sets.length==1)return""+Y.sets[0]}o(_,"label"),E.selectAll("svg").data([M]).enter().append("svg");let D=E.select("svg");e?D.attr("viewBox",`0 0 ${r} ${i}`):D.attr("width",r).attr("height",i);let N={},R=!1;D.selectAll(".venn-area path").each(function(Y){let ae=this.getAttribute("d");Y.sets.length==1&&ae&&!m&&(R=!0,N[Y.sets[0]]=H1t(ae))});function B(Y){return ae=>{let J=Y.sets.map(ee=>{let re=N[ee],te=M[ee];return re||(re={x:r/2,y:i/2,radius:1}),te||(te={x:r/2,y:i/2,radius:1}),{x:re.x*(1-ae)+te.x*ae,y:re.y*(1-ae)+te.y*ae,radius:re.radius*(1-ae)+te.radius*ae}});return S7e(J,g)}}o(B,"pathTween");let O=D.selectAll(".venn-area").data(S,Y=>Y.sets),$=O.enter().append("g").attr("class",Y=>`venn-area venn-${Y.sets.length==1?"circle":"intersection"}${Y.colour||Y.color?" venn-coloured":""}`).attr("data-venn-sets",Y=>Y.sets.join("_")),z=$.append("path"),F=$.append("text").attr("class","label").text(Y=>_(Y)).attr("text-anchor","middle").attr("dy",".35em").attr("x",r/2).attr("y",i/2);f&&(z.style("fill-opacity","0").filter(Y=>Y.sets.length==1).style("fill",Y=>Y.colour?Y.colour:Y.color?Y.color:T(Y.sets)).style("fill-opacity",".25"),F.style("fill",Y=>Y.colour||Y.color?"#FFF":t.textFill?t.textFill:Y.sets.length==1?T(Y.sets):"#444"));function V(Y){return typeof Y.transition=="function"?Y.transition("venn").duration(a):Y}o(V,"asTransition");let H=E;R&&typeof H.transition=="function"?(H=V(E),H.selectAll("path").attrTween("d",B)):H.selectAll("path").attr("d",Y=>S7e(Y.sets.map(ae=>M[ae])),g);let X=H.selectAll("text").filter(Y=>Y.sets in I).text(Y=>_(Y)).attr("x",Y=>Math.floor(I[Y.sets].x)).attr("y",Y=>Math.floor(I[Y.sets].y));h&&(R?"on"in X?X.on("end",iY(M,_)):X.each("end",iY(M,_)):X.each(iY(M,_)));let W=V(O.exit()).remove();typeof O.transition=="function"&&W.selectAll("path").attrTween("d",B);let Z=W.selectAll("text").attr("x",r/2).attr("y",i/2);return d!==null&&(F.style("font-size","0px"),X.style("font-size",d),Z.style("font-size","0px")),{circles:M,textCentres:I,nodes:O,enter:$,update:H,exit:W}}return o(C,"chart"),C.wrap=function(E){return arguments.length?(h=E,C):h},C.useViewBox=function(){return e=!0,C},C.width=function(E){return arguments.length?(r=E,C):r},C.height=function(E){return arguments.length?(i=E,C):i},C.padding=function(E){return arguments.length?(n=E,C):n},C.distinct=function(E){return arguments.length?(m=E,C):m},C.colours=function(E){return arguments.length?(T=E,C):T},C.colors=function(E){return arguments.length?(T=E,C):T},C.fontSize=function(E){return arguments.length?(d=E,C):d},C.round=function(E){return arguments.length?(g=E,C):g},C.duration=function(E){return arguments.length?(a=E,C):a},C.layoutFunction=function(E){return arguments.length?(w=E,C):w},C.normalize=function(E){return arguments.length?(l=E,C):l},C.scaleToFit=function(E){return arguments.length?(u=E,C):u},C.styled=function(E){return arguments.length?(f=E,C):f},C.orientation=function(E){return arguments.length?(s=E,C):s},C.orientationOrder=function(E){return arguments.length?(p=E,C):p},C.lossFunction=function(E){return arguments.length?(k=E==="default"?vx:E==="logRatio"?N7e:E,C):k},C}function iY(t,e){return function(r){let i=this,n=t[r.sets[0]].radius||50,a=e(r)||"",s=a.split(/\s+/).reverse(),u=(a.length+s.length)/3,h=s.pop(),f=[h],d=0,p=1.1;i.textContent=null;let m=[];function g(T){let w=i.ownerDocument.createElementNS(i.namespaceURI,"tspan");return w.textContent=T,m.push(w),i.append(w),w}o(g,"append");let y=g(h);for(;h=s.pop(),!!h;){f.push(h);let T=f.join(" ");y.textContent=T,T.length>u&&y.getComputedTextLength()>n&&(f.pop(),y.textContent=f.join(" "),f=[h],y=g(h),d++)}let v=.35-d*p/2,x=i.getAttribute("x"),b=i.getAttribute("y");m.forEach((T,w)=>{T.setAttribute("x",x),T.setAttribute("y",b),T.setAttribute("dy",`${v+w*p}em`)})}}function nY(t,e,r){let i=e[0].radius-qo(e[0],t);for(let n=1;n=a&&(n=i[f],a=d)}let s=D7e(f=>-1*nY({x:f[0],y:f[1]},t,e),[n.x,n.y],{maxIterations:500,minErrorDelta:1e-10}).x,l={x:r?0:s[0],y:s[1]},u=!0;for(let f of t)if(qo(l,f)>f.radius){u=!1;break}for(let f of e)if(qo(l,f)f.p1))}function W1t(t){let e={},r=Object.keys(t);for(let i of r)e[i]=[];for(let i=0;i0&&console.log("WARNING: area "+s+" not represented on screen")}return i}function U1t(t,e,r){let i=[];return i.push(` +M`,t,e),i.push(` +m`,-r,0),i.push(` +a`,r,r,0,1,0,r*2,0),i.push(` +a`,r,r,0,1,0,-r*2,0),i.join(" ")}function H1t(t){let e=t.split(" ");return{x:Number.parseFloat(e[1]),y:Number.parseFloat(e[2]),radius:-Number.parseFloat(e[4])}}function z7e(t){if(t.length===0)return[];let e={};return l8(t,e),e.arcs}function G7e(t,e){if(t.length===0)return"M 0 0";let r=Math.pow(10,e||0),i=e!=null?a=>Math.round(a*r)/r:a=>a;if(t.length==1){let a=t[0].circle;return U1t(i(a.x),i(a.y),i(a.radius))}let n=[` +M`,i(t[0].p2.x),i(t[0].p2.y)];for(let a of t){let s=i(a.circle.radius);n.push(` +A`,s,s,0,a.large?1:0,a.sweep?1:0,i(a.p1.x),i(a.p1.y))}return n.join(" ")}function S7e(t,e){return G7e(z7e(t),e)}function V7e(t,e={}){let{lossFunction:r,layoutFunction:i=L7e,normalize:n=!0,orientation:a=Math.PI/2,orientationOrder:s,width:l=600,height:u=350,padding:h=15,scaleToFit:f=!1,symmetricalTextCentre:d=!1,distinct:p,round:m=2}=e,g=i(t,{lossFunction:r==="default"||!r?vx:r==="logRatio"?N7e:r,distinct:p});n&&(g=I7e(g,a,s));let y=M7e(g,l,u,h,f),v=$7e(y,t,d),x=new Map(Object.keys(y).map(w=>[w,{set:w,x:y[w].x,y:y[w].y,radius:y[w].radius}])),b=t.map(w=>{let k=w.sets.map(S=>x.get(S)),C=z7e(k),E=G7e(C,m);return{circles:k,arcs:C,path:E,area:w,has:new Set(w.sets)}});function T(w){let k="";for(let C of b)C.has.size>w.length&&w.every(E=>C.has.has(E))&&(k+=" "+C.path);return k}return o(T,"genDistinctPath"),b.map(({circles:w,arcs:k,path:C,area:E})=>({data:E,text:v[E.sets],circles:w,arcs:k,path:C,distinctPath:C+T(E.sets)}))}var R7e,q7e=P(()=>{"use strict";o(l8,"intersectionArea");o(R1t,"containedInCircles");o(N1t,"getIntersectionPoints");o(aY,"circleArea");o(qo,"distance");o(hY,"circleOverlap");o(A7e,"circleCircleIntersection");o(_7e,"getCenter");o(I1t,"bisect");o(sY,"zeros");o(E7e,"zerosM");o(yx,"dot");o(oY,"norm2");o(lY,"scale");o(_f,"weightedSum");o(D7e,"nelderMead");o(M1t,"wolfeLineSearch");o(O1t,"conjugateGradient");o(L7e,"venn");R7e=1e-10;o(cY,"distanceFromIntersectArea");o(P1t,"addMissingAreas");o(B1t,"getDistanceMatrices");o(F1t,"constrainedMDSGradient");o($1t,"bestInitialLayout");o(z1t,"constrainedMDSLayout");o(G1t,"greedyLayout");o(vx,"lossFunction");o(N7e,"logRatioLossFunction");o(V1t,"orientateCircles");o(q1t,"disjointCluster");o(uY,"getBoundingBox");o(I7e,"normalizeSolution");o(M7e,"scaleSolution");o(O7e,"toObjectNotation");o(P7e,"fromObjectNotation");o(B7e,"VennDiagram");o(iY,"wrapText");o(nY,"circleMargin");o(F7e,"computeTextCentre");o(W1t,"getOverlappingCircles");o($7e,"computeTextCentres");o(U1t,"circlePath");o(H1t,"circleFromPath");o(z7e,"intersectionAreaArcs");o(G7e,"arcsToPath");o(S7e,"intersectionAreaPath");o(V7e,"layout")});function j1t(t){let e=new Map;for(let r of t){let i=r.targets.join("|"),n=e.get(i);n?Object.assign(n,r.styles):e.set(i,{...r.styles})}return e}function vg(t){return t.join("|")}function K1t(t,e,r,i,n,a){let s=t?.useDebugLayout??!1,u=r.select("svg").append("g").attr("class","venn-text-nodes"),h=new Map;for(let f of i){let d=vg(f.sets),p=h.get(d);p?p.push(f):h.set(d,[f])}for(let[f,d]of h.entries()){let p=e.get(f);if(!p?.text)continue;let m=p.text.x,g=p.text.y,y=Math.min(...p.circles.map(D=>D.radius)),v=Math.min(...p.circles.map(D=>D.radius-Math.hypot(m-D.x,g-D.y))),x=Number.isFinite(v)?Math.max(0,v):0;x===0&&Number.isFinite(y)&&(x=y*.6);let b=u.append("g").attr("class","venn-text-area").attr("font-size",`${40*n}px`);s&&b.append("circle").attr("class","venn-text-debug-circle").attr("cx",m).attr("cy",g).attr("r",x).attr("fill","none").attr("stroke","purple").attr("stroke-width",1.5*n).attr("stroke-dasharray",`${6*n} ${4*n}`);let T=Math.max(80*n,x*2*.95),w=Math.max(60*n,x*2*.95),E=(p.data.label&&p.data.label.length>0?Math.min(32*n,x*.25):0)+(d.length<=2?30*n:0),S=m-T/2,L=g-w/2+E,M=Math.max(1,Math.ceil(Math.sqrt(d.length))),I=Math.max(1,Math.ceil(d.length/M)),A=T/M,_=w/I;for(let[D,N]of d.entries()){let R=D%M,B=Math.floor(D/M),O=S+A*(R+.5),$=L+_*(B+.5);s&&b.append("rect").attr("class","venn-text-debug-cell").attr("x",S+A*R).attr("y",L+_*B).attr("width",A).attr("height",_).attr("fill","none").attr("stroke","teal").attr("stroke-width",1*n).attr("stroke-dasharray",`${4*n} ${3*n}`);let z=A*.9,F=_*.9,V=b.append("foreignObject").attr("class","venn-text-node-fo").attr("width",z).attr("height",F).attr("x",O-z/2).attr("y",$-F/2).attr("overflow","visible"),H=a.get(N.id)?.color,X=V.append("xhtml:span").attr("class","venn-text-node").style("display","flex").style("width","100%").style("height","100%").style("white-space","normal").style("align-items","center").style("justify-content","center").style("text-align","center").style("overflow-wrap","normal").style("word-break","normal").text(N.label??N.id);H&&X.style("color",H)}}}var X1t,W7e,U7e=P(()=>{"use strict";Pr();Yn();Sr();ro();q7e();Xi();Yt();o(j1t,"buildStyleByKey");X1t=o((t,e,r,i)=>{let n=i.db,a=n.getConfig?.(),{themeVariables:s,look:l,handDrawnSeed:u}=Lt(),h=l==="handDrawn",f=[s.venn1,s.venn2,s.venn3,s.venn4,s.venn5,s.venn6,s.venn7,s.venn8].filter(Boolean),d=n.getDiagramTitle?.(),p=n.getSubsetData(),m=n.getTextData(),g=j1t(n.getStyleData()),y=a?.width??800,v=a?.height??450,b=y/1600,T=d?48*b:0,w=s.primaryTextColor??s.textColor,k=Fi(e);k.attr("viewBox",`0 0 ${y} ${v}`),d&&k.append("text").text(d).attr("class","venn-title").attr("font-size",`${32*b}px`).attr("text-anchor","middle").attr("dominant-baseline","middle").attr("x","50%").attr("y",32*b).style("fill",s.vennTitleTextColor||s.titleColor);let C=Ze(document.createElement("div")),E=B7e().width(y).height(v-T);C.datum(p).call(E);let S=h?rt.svg(C.select("svg").node()):void 0,L=V7e(p,{width:y,height:v-T,padding:a?.padding??15}),M=new Map;for(let D of L){let N=vg([...D.data.sets].sort());M.set(N,D)}m.length>0&&K1t(a,M,C,m,b,g);let I=yi(s.background||"#f4f4f4");C.selectAll(".venn-circle").each(function(D,N){let R=Ze(this),O=vg([...D.sets].sort()),$=g.get(O),z=$?.fill||f[N%f.length]||s.primaryColor;R.classed(`venn-set-${N%8}`,!0);let F=$?.["fill-opacity"]??.1,V=$?.stroke||z,H=$?.["stroke-width"]||`${5*b}`;if(h&&S){let W=M.get(O);if(W&&W.circles.length>0){let Z=W.circles[0],Y=S.circle(Z.x,Z.y,Z.radius*2,{roughness:.7,seed:u,fill:m4(z,.7),fillStyle:"hachure",fillWeight:2,hachureGap:8,hachureAngle:-41+N*60,stroke:V,strokeWidth:parseFloat(String(H))});R.select("path").remove(),R.node()?.insertBefore(Y,R.select("text").node())}}else R.select("path").style("fill",z).style("fill-opacity",F).style("stroke",V).style("stroke-width",H).style("stroke-opacity",.95);let X=$?.color||(I?Ke(z,30):Ye(z,30));R.select("text").style("font-size",`${48*b}px`).style("fill",X)}),h&&S?C.selectAll(".venn-intersection").each(function(D){let N=Ze(this),B=vg([...D.sets].sort()),O=g.get(B),$=O?.fill;if($){let z=N.select("path"),F=z.attr("d");if(F){let V=S.path(F,{roughness:.7,seed:u,fill:m4($,.3),fillStyle:"cross-hatch",fillWeight:2,hachureGap:6,hachureAngle:60,stroke:"none"}),H=z.node();H?.parentNode?.insertBefore(V,H),z.remove()}}else N.select("path").style("fill-opacity",0);N.select("text").style("font-size",`${48*b}px`).style("fill",O?.color??s.vennSetTextColor??w)}):(C.selectAll(".venn-intersection text").style("font-size",`${48*b}px`).style("fill",D=>{let R=vg([...D.sets].sort());return g.get(R)?.color??s.vennSetTextColor??w}),C.selectAll(".venn-intersection path").style("fill-opacity",D=>{let R=vg([...D.sets].sort());return g.get(R)?.fill?1:0}).style("fill",D=>{let R=vg([...D.sets].sort());return g.get(R)?.fill??"transparent"}));let A=k.append("g").attr("transform",`translate(0, ${T})`),_=C.select("svg").node();if(_&&"childNodes"in _)for(let D of[..._.childNodes])A.node()?.appendChild(D);Hr(k,v,y,a?.useMaxWidth??!0)},"draw");o(vg,"stableSetsKey");o(K1t,"renderTextNodes");W7e={draw:X1t}});var H7e={};ur(H7e,{diagram:()=>Q1t});var Q1t,Y7e=P(()=>{"use strict";b7e();k7e();w7e();U7e();Q1t={parser:x7e,db:T7e,renderer:W7e,styles:C7e}});var xx,fY=P(()=>{"use strict";wa();Sr();er();Ht();Ki();xx=class{constructor(){this.nodes=[];this.levels=new Map;this.outerNodes=[];this.classes=new Map;this.setAccTitle=Ar;this.getAccTitle=Dr;this.setDiagramTitle=Mr;this.getDiagramTitle=Nr;this.getAccDescription=Rr;this.setAccDescription=Lr}static{o(this,"TreeMapDB")}getNodes(){return this.nodes}getConfig(){let e=fr,r=Lt();return fi({...e.treemap,...r.treemap??{}})}addNode(e,r){this.nodes.push(e),this.levels.set(e,r),r===0&&(this.outerNodes.push(e),this.root??=e)}getRoot(){return{name:"",children:this.outerNodes}}addClass(e,r){let i=this.classes.get(e)??{id:e,styles:[],textStyles:[]},n=r.replace(/\\,/g,"\xA7\xA7\xA7").replace(/,/g,";").replace(/§§§/g,",").split(";");n&&n.forEach(a=>{Eb(a)&&(i?.textStyles?i.textStyles.push(a):i.textStyles=[a]),i?.styles?i.styles.push(a):i.styles=[a]}),this.classes.set(e,i)}getClasses(){return this.classes}getStylesForClass(e){return this.classes.get(e)?.styles??[]}clear(){wr(),this.nodes=[],this.levels=new Map,this.outerNodes=[],this.classes=new Map,this.root=void 0}}});function K7e(t){if(!t.length)return[];let e=[],r=[];return t.forEach(i=>{let n={name:i.name,children:i.type==="Leaf"?void 0:[]};for(n.classSelector=i?.classSelector,i?.cssCompiledStyles&&(n.cssCompiledStyles=i.cssCompiledStyles),i.type==="Leaf"&&i.value!==void 0&&(n.value=i.value);r.length>0&&r[r.length-1].level>=i.level;)r.pop();if(r.length===0)e.push(n);else{let a=r[r.length-1].node;a.children?a.children.push(n):a.children=[n]}i.type!=="Leaf"&&r.push({node:n,level:i.level})}),e}var Q7e=P(()=>{"use strict";o(K7e,"buildHierarchy")});var tyt,ryt,dY,Z7e=P(()=>{"use strict";sh();bt();vf();Q7e();fY();tyt=o((t,e)=>{Ss(t,e);let r=[];for(let a of t.TreemapRows??[])a.$type==="ClassDefStatement"&&e.addClass(a.className??"",a.styleText??"");for(let a of t.TreemapRows??[]){let s=a.item;if(!s)continue;let l=a.indent?parseInt(a.indent):0,u=ryt(s),h=s.classSelector?e.getStylesForClass(s.classSelector):[],f=h.length>0?h:void 0,d={level:l,name:u,type:s.$type,value:s.value,classSelector:s.classSelector,cssCompiledStyles:f};r.push(d)}let i=K7e(r),n=o((a,s)=>{for(let l of a)e.addNode(l,s),l.children&&l.children.length>0&&n(l.children,s+1)},"addNodesRecursively");n(i,0)},"populate"),ryt=o(t=>t.name?String(t.name):"","getItemName"),dY={parser:{yy:void 0},parse:o(async t=>{try{let r=await ba("treemap",t);Q.debug("Treemap AST:",r);let i=dY.parser?.yy;if(!(i instanceof xx))throw new Error("parser.parser?.yy was not a TreemapDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues.");tyt(r,i)}catch(e){throw Q.error("Error parsing treemap:",e),e}},"parse")}});var iyt,bx,ZC,nyt,ayt,J7e,e_e=P(()=>{"use strict";ro();Ud();Xi();Pr();Ht();Sr();bt();iyt=10,bx=10,ZC=25,nyt=o((t,e,r,i)=>{let n=i.db,a=n.getConfig(),s=a.padding??iyt,l=n.getDiagramTitle(),u=n.getRoot(),{themeVariables:h}=Lt();if(!u)return;let f=l?30:0,d=Fi(e),p=a.nodeWidth?a.nodeWidth*bx:960,m=a.nodeHeight?a.nodeHeight*bx:500,g=p,y=m+f;d.attr("viewBox",`0 0 ${g} ${y}`),Hr(d,y,g,a.useMaxWidth);let v;try{let D=a.valueFormat||",";if(D==="$0,0")v=o(N=>"$"+du(",")(N),"valueFormat");else if(D.startsWith("$")&&D.includes(",")){let N=/\.\d+/.exec(D),R=N?N[0]:"";v=o(B=>"$"+du(","+R)(B),"valueFormat")}else if(D.startsWith("$")){let N=D.substring(1);v=o(R=>"$"+du(N||"")(R),"valueFormat")}else v=du(D)}catch(D){Q.error("Error creating format function:",D),v=du(",")}let x=jo().range(["transparent",h.cScale0,h.cScale1,h.cScale2,h.cScale3,h.cScale4,h.cScale5,h.cScale6,h.cScale7,h.cScale8,h.cScale9,h.cScale10,h.cScale11]),b=jo().range(["transparent",h.cScalePeer0,h.cScalePeer1,h.cScalePeer2,h.cScalePeer3,h.cScalePeer4,h.cScalePeer5,h.cScalePeer6,h.cScalePeer7,h.cScalePeer8,h.cScalePeer9,h.cScalePeer10,h.cScalePeer11]),T=jo().range([h.cScaleLabel0,h.cScaleLabel1,h.cScaleLabel2,h.cScaleLabel3,h.cScaleLabel4,h.cScaleLabel5,h.cScaleLabel6,h.cScaleLabel7,h.cScaleLabel8,h.cScaleLabel9,h.cScaleLabel10,h.cScaleLabel11]);l&&d.append("text").attr("x",g/2).attr("y",f/2).attr("class","treemapTitle").attr("text-anchor","middle").attr("dominant-baseline","middle").text(l);let w=d.append("g").attr("transform",`translate(0, ${f})`).attr("class","treemapContainer"),k=jg(u).sum(D=>D.value??0).sort((D,N)=>(N.value??0)-(D.value??0)),E=Yw().size([p,m]).paddingTop(D=>D.children&&D.children.length>0?ZC+bx:0).paddingInner(s).paddingLeft(D=>D.children&&D.children.length>0?bx:0).paddingRight(D=>D.children&&D.children.length>0?bx:0).paddingBottom(D=>D.children&&D.children.length>0?bx:0).round(!0)(k),S=E.descendants().filter(D=>D.children&&D.children.length>0),L=w.selectAll(".treemapSection").data(S).enter().append("g").attr("class","treemapSection").attr("transform",D=>`translate(${D.x0},${D.y0})`);L.append("rect").attr("width",D=>D.x1-D.x0).attr("height",ZC).attr("class","treemapSectionHeader").attr("fill","none").attr("fill-opacity",.6).attr("stroke-width",.6).attr("style",D=>D.depth===0?"display: none;":""),L.append("clipPath").attr("id",(D,N)=>`clip-section-${e}-${N}`).append("rect").attr("width",D=>Math.max(0,D.x1-D.x0-12)).attr("height",ZC),L.append("rect").attr("width",D=>D.x1-D.x0).attr("height",D=>D.y1-D.y0).attr("class",(D,N)=>`treemapSection section${N}`).attr("fill",D=>x(D.data.name)).attr("fill-opacity",.6).attr("stroke",D=>b(D.data.name)).attr("stroke-width",2).attr("stroke-opacity",.4).attr("style",D=>{if(D.depth===0)return"display: none;";let N=tt({cssCompiledStyles:D.data.cssCompiledStyles});return N.nodeStyles+";"+N.borderStyles.join(";")}),L.append("text").attr("class","treemapSectionLabel").attr("x",6).attr("y",ZC/2).attr("dominant-baseline","middle").text(D=>D.depth===0?"":D.data.name).attr("font-weight","bold").attr("style",D=>{if(D.depth===0)return"display: none;";let N="dominant-baseline: middle; font-size: 12px; fill:"+T(D.data.name)+"; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;",R=tt({cssCompiledStyles:D.data.cssCompiledStyles});return N+R.labelStyles.replace("color:","fill:")}).each(function(D){if(D.depth===0)return;let N=Ze(this),R=D.data.name;N.text(R);let B=D.x1-D.x0,O=6,$;a.showValues!==!1&&D.value?$=B-10-30-10-O:$=B-O-6;let F=Math.max(15,$),V=N.node();if(V.getComputedTextLength()>F){let W=R;for(;W.length>0;){if(W=R.substring(0,W.length-1),W.length===0){N.text("..."),V.getComputedTextLength()>F&&N.text("");break}if(N.text(W+"..."),V.getComputedTextLength()<=F)break}}}),a.showValues!==!1&&L.append("text").attr("class","treemapSectionValue").attr("x",D=>D.x1-D.x0-10).attr("y",ZC/2).attr("text-anchor","end").attr("dominant-baseline","middle").text(D=>D.value?v(D.value):"").attr("font-style","italic").attr("style",D=>{if(D.depth===0)return"display: none;";let N="text-anchor: end; dominant-baseline: middle; font-size: 10px; fill:"+T(D.data.name)+"; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;",R=tt({cssCompiledStyles:D.data.cssCompiledStyles});return N+R.labelStyles.replace("color:","fill:")});let M=E.leaves(),I=w.selectAll(".treemapLeafGroup").data(M).enter().append("g").attr("class",(D,N)=>`treemapNode treemapLeafGroup leaf${N}${D.data.classSelector?` ${D.data.classSelector}`:""}x`).attr("transform",D=>`translate(${D.x0},${D.y0})`);I.append("rect").attr("width",D=>D.x1-D.x0).attr("height",D=>D.y1-D.y0).attr("class","treemapLeaf").attr("fill",D=>D.parent?x(D.parent.data.name):x(D.data.name)).attr("style",D=>tt({cssCompiledStyles:D.data.cssCompiledStyles}).nodeStyles).attr("fill-opacity",.3).attr("stroke",D=>D.parent?x(D.parent.data.name):x(D.data.name)).attr("stroke-width",3),I.append("clipPath").attr("id",(D,N)=>`clip-${e}-${N}`).append("rect").attr("width",D=>Math.max(0,D.x1-D.x0-4)).attr("height",D=>Math.max(0,D.y1-D.y0-4)),I.append("text").attr("class","treemapLabel").attr("x",D=>(D.x1-D.x0)/2).attr("y",D=>(D.y1-D.y0)/2).attr("style",D=>{let N="text-anchor: middle; dominant-baseline: middle; font-size: 38px;fill:"+T(D.data.name)+";",R=tt({cssCompiledStyles:D.data.cssCompiledStyles});return N+R.labelStyles.replace("color:","fill:")}).attr("clip-path",(D,N)=>`url(#clip-${e}-${N})`).text(D=>D.data.name).each(function(D){let N=Ze(this),R=D.x1-D.x0,B=D.y1-D.y0,O=N.node(),$=4,z=R-2*$,F=B-2*$;if(z<10||F<10){N.style("display","none");return}let V=parseInt(N.style("font-size"),10),H=8,X=28,W=.6,Z=6,Y=2;for(;O.getComputedTextLength()>z&&V>H;)V--,N.style("font-size",`${V}px`);let ae=Math.max(Z,Math.min(X,Math.round(V*W))),J=V+Y+ae;for(;J>F&&V>H&&(V--,ae=Math.max(Z,Math.min(X,Math.round(V*W))),!(aeF;N.style("font-size",`${V}px`),(O.getComputedTextLength()>z||V(N.x1-N.x0)/2).attr("y",function(N){return(N.y1-N.y0)/2}).attr("style",N=>{let R="text-anchor: middle; dominant-baseline: hanging; font-size: 28px;fill:"+T(N.data.name)+";",B=tt({cssCompiledStyles:N.data.cssCompiledStyles});return R+B.labelStyles.replace("color:","fill:")}).attr("clip-path",(N,R)=>`url(#clip-${e}-${R})`).text(N=>N.value?v(N.value):"").each(function(N){let R=Ze(this),B=this.parentNode;if(!B){R.style("display","none");return}let O=Ze(B).select(".treemapLabel");if(O.empty()||O.style("display")==="none"){R.style("display","none");return}let $=parseFloat(O.style("font-size")),z=28,F=.6,V=6,H=2,X=Math.max(V,Math.min(z,Math.round($*F)));R.style("font-size",`${X}px`);let Z=(N.y1-N.y0)/2+$/2+H;R.attr("y",Z);let Y=N.x1-N.x0,ee=N.y1-N.y0-4,re=Y-8;R.node().getComputedTextLength()>re||Z+X>ee||X{"use strict";er();wg();Sr();syt={sectionStrokeColor:"black",sectionStrokeWidth:"1",sectionFillColor:"#efefef",leafStrokeColor:"black",leafStrokeWidth:"1",leafFillColor:"#efefef",labelFontSize:"12px",valueFontSize:"10px",titleFontSize:"14px"},oyt=o(({treemap:t}={})=>{let e=Zc(),r=Lt(),i=fi(e,r.themeVariables),n=fi(syt,t),a=n.titleColor??i.titleColor,s=n.labelColor??i.textColor,l=n.valueColor??i.textColor;return` + .treemapNode.section { + stroke: ${n.sectionStrokeColor}; + stroke-width: ${n.sectionStrokeWidth}; + fill: ${n.sectionFillColor}; + } + .treemapNode.leaf { + stroke: ${n.leafStrokeColor}; + stroke-width: ${n.leafStrokeWidth}; + fill: ${n.leafFillColor}; + } + .treemapLabel { + fill: ${s}; + font-size: ${n.labelFontSize}; + } + .treemapValue { + fill: ${l}; + font-size: ${n.valueFontSize}; + } + .treemapTitle { + fill: ${a}; + font-size: ${n.titleFontSize}; + } + `},"getStyles"),t_e=oyt});var i_e={};ur(i_e,{diagram:()=>lyt});var lyt,n_e=P(()=>{"use strict";fY();Z7e();e_e();r_e();lyt={parser:dY,get db(){return new xx},renderer:J7e,styles:t_e}});var c8,xg,o_e,hyt,fyt,pY,l_e=P(()=>{"use strict";sh();bt();vf();c8=o((t,e)=>{let r=t<=1?t*100:t;if(r<0||r>100)throw new Error(`${e} must be between 0-1 (decimal) or 0-100 (percentage). Received: ${t}`);return r},"toPercent"),xg=o((t,e,r)=>({x:c8(e,`${r} evolution`),y:c8(t,`${r} visibility`)}),"toCoordinates"),o_e=o(t=>{if(t){if(t==="+<>")return"bidirectional";if(t==="+<")return"backward";if(t==="+>")return"forward"}},"getFlowFromPort"),hyt=o(t=>{if(!t?.startsWith("+"))return{};let r=/^\+'([^']*)'/.exec(t)?.[1];return t.includes("<>")?{flow:"bidirectional",label:r}:t.includes("<")?{flow:"backward",label:r}:t.includes(">")?{flow:"forward",label:r}:{label:r}},"extractFlowFromArrow"),fyt=o((t,e)=>{if(Ss(t,e),t.size&&e.setSize(t.size.width,t.size.height),t.evolution){let r=t.evolution.stages.map(n=>n.secondName?`${n.name.trim()} / ${n.secondName.trim()}`:n.name.trim()),i=t.evolution.stages.filter(n=>n.boundary!==void 0).map(n=>n.boundary);e.updateAxes({stages:r,stageBoundaries:i})}if(t.anchors.forEach(r=>{let i=xg(r.visibility,r.evolution,`Anchor "${r.name}"`);e.addNode(r.name,r.name,i.x,i.y,"anchor")}),t.components.forEach(r=>{let i=xg(r.visibility,r.evolution,`Component "${r.name}"`),n=r.label?(r.label.negX?-1:1)*r.label.offsetX:void 0,a=r.label?(r.label.negY?-1:1)*r.label.offsetY:void 0,s=r.decorator?.strategy;e.addNode(r.name,r.name,i.x,i.y,"component",n,a,r.inertia,s)}),t.notes.forEach(r=>{let i=xg(r.visibility,r.evolution,`Note "${r.text}"`);e.addNote(r.text,i.x,i.y)}),t.pipelines.forEach(r=>{let i=e.getNode(r.parent);if(!i||typeof i.y!="number")throw new Error(`Pipeline "${r.parent}" must reference an existing component with coordinates.`);let n=i.y;e.startPipeline(r.parent),r.components.forEach(a=>{let s=`${r.parent}_${a.name}`,l=a.label?(a.label.negX?-1:1)*a.label.offsetX:void 0,u=a.label?(a.label.negY?-1:1)*a.label.offsetY:void 0,h=c8(a.evolution,`Pipeline component "${a.name}" evolution`);e.addNode(s,a.name,h,n,"pipeline-component",l,u),e.addPipelineComponent(r.parent,s)})}),t.links.forEach(r=>{let i=!!r.arrow&&(r.arrow.includes("-.->")||r.arrow.includes(".-.")),n=o_e(r.fromPort)??o_e(r.toPort),{flow:a,label:s}=hyt(r.arrow);!n&&a&&(n=a);let l=r.linkLabel,u=s??l;e.addLink(r.from,r.to,i,u,n)}),t.evolves.forEach(r=>{let i=e.getNode(r.component);if(i?.y!==void 0){let n=c8(r.target,`Evolve target for "${r.component}"`);e.addTrend(r.component,n,i.y)}}),t.annotations.length>0){let r=t.annotations[0],i=xg(r.x,r.y,"Annotations box");e.setAnnotationsBox(i.x,i.y)}t.annotation.forEach(r=>{let i=xg(r.x,r.y,`Annotation ${r.number}`);e.addAnnotation(r.number,[{x:i.x,y:i.y}],r.text)}),t.accelerators.forEach(r=>{let i=xg(r.x,r.y,`Accelerator "${r.name}"`);e.addAccelerator(r.name,i.x,i.y)}),t.deaccelerators.forEach(r=>{let i=xg(r.x,r.y,`Deaccelerator "${r.name}"`);e.addDeaccelerator(r.name,i.x,i.y)})},"populateDb"),pY={parser:{yy:void 0},parse:o(async t=>{let e=await ba("wardley",t);Q.debug(e);let r=pY.parser?.yy;if(!r||typeof r.addNode!="function")throw new Error("parser.parser?.yy was not a WardleyDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues.");fyt(e,r)},"parse")}});var u8,c_e=P(()=>{"use strict";u8=class{constructor(){this.nodes=new Map;this.links=[];this.trends=new Map;this.pipelines=new Map;this.annotations=[];this.notes=[];this.accelerators=[];this.deaccelerators=[];this.axes={}}static{o(this,"WardleyBuilder")}addNode(e){let r=this.nodes.get(e.id)??{id:e.id,label:e.label},i={...r,...e,className:e.className??r.className,labelOffsetX:e.labelOffsetX??r.labelOffsetX,labelOffsetY:e.labelOffsetY??r.labelOffsetY};this.nodes.set(e.id,i)}addLink(e){this.links.push(e)}addTrend(e){this.trends.set(e.nodeId,e)}startPipeline(e){this.pipelines.set(e,{nodeId:e,componentIds:[]});let r=this.nodes.get(e);r&&(r.isPipelineParent=!0)}addPipelineComponent(e,r){let i=this.pipelines.get(e);i&&i.componentIds.push(r);let n=this.nodes.get(r);n&&(n.inPipeline=!0)}addAnnotation(e){this.annotations.push(e)}addNote(e){this.notes.push(e)}addAccelerator(e){this.accelerators.push(e)}addDeaccelerator(e){this.deaccelerators.push(e)}setAnnotationsBox(e,r){this.annotationsBox={x:e,y:r}}setAxes(e){this.axes={...this.axes,...e}}setSize(e,r){this.size={width:e,height:r}}getNode(e){return this.nodes.get(e)}build(){let e=[];for(let r of this.nodes.values()){if(typeof r.x!="number"||typeof r.y!="number")throw new Error(`Node "${r.label}" is missing coordinates`);e.push(r)}return{nodes:e,links:[...this.links],trends:[...this.trends.values()],pipelines:[...this.pipelines.values()],annotations:[...this.annotations],notes:[...this.notes],accelerators:[...this.accelerators],deaccelerators:[...this.deaccelerators],annotationsBox:this.annotationsBox,axes:{...this.axes},size:this.size}}clear(){this.nodes.clear(),this.links=[],this.trends.clear(),this.pipelines.clear(),this.annotations=[],this.notes=[],this.accelerators=[],this.deaccelerators=[],this.annotationsBox=void 0,this.axes={},this.size=void 0}}});function Ip(t){let e=ge();return Tr(t.trim(),e)}function dyt(){return ge()["wardley-beta"]}function pyt(t,e,r,i,n,a,s,l,u){ao.addNode({id:t,label:Ip(e),x:r,y:i,className:n,labelOffsetX:a,labelOffsetY:s,inertia:l,sourceStrategy:u})}function myt(t,e,r=!1,i,n){ao.addLink({source:t,target:e,dashed:r,label:i,flow:n})}function gyt(t,e,r){ao.addTrend({nodeId:t,targetX:e,targetY:r})}function yyt(t,e,r){ao.addAnnotation({number:t,coordinates:e,text:r?Ip(r):void 0})}function vyt(t,e,r){ao.addNote({text:Ip(t),x:e,y:r})}function xyt(t,e,r){ao.addAccelerator({name:Ip(t),x:e,y:r})}function byt(t,e,r){ao.addDeaccelerator({name:Ip(t),x:e,y:r})}function Tyt(t,e){ao.setAnnotationsBox(t,e)}function kyt(t,e){ao.setSize(t,e)}function Cyt(t){ao.startPipeline(t)}function wyt(t,e){ao.addPipelineComponent(t,e)}function Eyt(t){let e={};t.xLabel&&(e.xLabel=Ip(t.xLabel)),t.yLabel&&(e.yLabel=Ip(t.yLabel)),t.stages&&(e.stages=t.stages.map(r=>Ip(r))),t.stageBoundaries&&(e.stageBoundaries=t.stageBoundaries),ao.setAxes(e)}function Syt(t){return ao.getNode(t)}function Ayt(){return ao.build()}function _yt(){ao.clear(),wr()}var ao,u_e,h_e=P(()=>{"use strict";Ut();Vr();Ki();c_e();ao=new u8;o(Ip,"textSanitizer");o(dyt,"getConfig");o(pyt,"addNode");o(myt,"addLink");o(gyt,"addTrend");o(yyt,"addAnnotation");o(vyt,"addNote");o(xyt,"addAccelerator");o(byt,"addDeaccelerator");o(Tyt,"setAnnotationsBox");o(kyt,"setSize");o(Cyt,"startPipeline");o(wyt,"addPipelineComponent");o(Eyt,"updateAxes");o(Syt,"getNode");o(Ayt,"getWardleyData");o(_yt,"clear");u_e={getConfig:dyt,addNode:pyt,addLink:myt,addTrend:gyt,addAnnotation:yyt,addNote:vyt,addAccelerator:xyt,addDeaccelerator:byt,setAnnotationsBox:Tyt,setSize:kyt,startPipeline:Cyt,addPipelineComponent:wyt,updateAxes:Eyt,getNode:Syt,getWardleyData:Ayt,clear:_yt,setAccTitle:Ar,getAccTitle:Dr,setDiagramTitle:Mr,getDiagramTitle:Nr,getAccDescription:Rr,setAccDescription:Lr}});var Dyt,Lyt,Ryt,Nyt,f_e,d_e=P(()=>{"use strict";Ut();bt();ro();Xi();Dyt=["Genesis","Custom Built","Product","Commodity"],Lyt=o(()=>{let{themeVariables:t}=ge();return{backgroundColor:t.wardley?.backgroundColor??t.background??"#fff",axisColor:t.wardley?.axisColor??"#000",axisTextColor:t.wardley?.axisTextColor??t.primaryTextColor??"#222",gridColor:t.wardley?.gridColor??"rgba(100, 100, 100, 0.2)",componentFill:t.wardley?.componentFill??"#fff",componentStroke:t.wardley?.componentStroke??"#000",componentLabelColor:t.wardley?.componentLabelColor??t.primaryTextColor??"#222",linkStroke:t.wardley?.linkStroke??"#000",evolutionStroke:t.wardley?.evolutionStroke??"#dc3545",annotationStroke:t.wardley?.annotationStroke??"#000",annotationTextColor:t.wardley?.annotationTextColor??t.primaryTextColor??"#222",annotationFill:t.wardley?.annotationFill??t.background??"#fff"}},"getTheme"),Ryt=o(()=>{let t=ge()["wardley-beta"];return{width:t?.width??900,height:t?.height??600,padding:t?.padding??48,nodeRadius:t?.nodeRadius??6,nodeLabelOffset:t?.nodeLabelOffset??8,axisFontSize:t?.axisFontSize??12,labelFontSize:t?.labelFontSize??10,showGrid:t?.showGrid??!1,useMaxWidth:t?.useMaxWidth??!0}},"getConfigValues"),Nyt=o((t,e,r,i)=>{Q.debug(`Rendering Wardley map +`+t);let n=Ryt(),a=Lyt(),s=n.nodeRadius*1.6,l=i.db,u=l.getWardleyData(),h=l.getDiagramTitle(),f=u.size?.width??n.width,d=u.size?.height??n.height,p=Fi(e);p.selectAll("*").remove(),Hr(p,d,f,n.useMaxWidth),p.attr("viewBox",`0 0 ${f} ${d}`);let m=p.append("g").attr("class","wardley-map"),g=p.append("defs");g.append("marker").attr("id",`arrow-${e}`).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerWidth",6).attr("markerHeight",6).attr("orient","auto-start-reverse").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("fill",a.evolutionStroke).attr("stroke","none"),g.append("marker").attr("id",`link-arrow-end-${e}`).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerWidth",5).attr("markerHeight",5).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("fill",a.linkStroke).attr("stroke","none"),g.append("marker").attr("id",`link-arrow-start-${e}`).attr("viewBox","0 0 10 10").attr("refX",1).attr("refY",5).attr("markerWidth",5).attr("markerHeight",5).attr("orient","auto").append("path").attr("d","M 10 0 L 0 5 L 10 10 z").attr("fill",a.linkStroke).attr("stroke","none"),m.append("rect").attr("class","wardley-background").attr("width",f).attr("height",d).attr("fill",a.backgroundColor);let y=f-n.padding*2,v=d-n.padding*2;h&&m.append("text").attr("class","wardley-title").attr("x",f/2).attr("y",n.padding/2).attr("fill",a.axisTextColor).attr("font-size",n.axisFontSize*1.05).attr("font-weight","bold").attr("text-anchor","middle").attr("dominant-baseline","middle").text(h);let x=o(O=>n.padding+O/100*y,"projectX"),b=o(O=>d-n.padding-O/100*v,"projectY"),T=m.append("g").attr("class","wardley-axes");T.append("line").attr("x1",n.padding).attr("x2",f-n.padding).attr("y1",d-n.padding).attr("y2",d-n.padding).attr("stroke",a.axisColor).attr("stroke-width",1),T.append("line").attr("x1",n.padding).attr("x2",n.padding).attr("y1",n.padding).attr("y2",d-n.padding).attr("stroke",a.axisColor).attr("stroke-width",1);let w=u.axes.xLabel??"Evolution",k=u.axes.yLabel??"Visibility";T.append("text").attr("class","wardley-axis-label wardley-axis-label-x").attr("x",n.padding+y/2).attr("y",d-n.padding/4).attr("fill",a.axisTextColor).attr("font-size",n.axisFontSize).attr("font-weight","bold").attr("text-anchor","middle").text(w),T.append("text").attr("class","wardley-axis-label wardley-axis-label-y").attr("x",n.padding/3).attr("y",n.padding+v/2).attr("fill",a.axisTextColor).attr("font-size",n.axisFontSize).attr("font-weight","bold").attr("text-anchor","middle").attr("transform",`rotate(-90 ${n.padding/3} ${n.padding+v/2})`).text(k);let C=u.axes.stages&&u.axes.stages.length>0?u.axes.stages:Dyt;if(C.length>0){let O=m.append("g").attr("class","wardley-stages"),$=u.axes.stageBoundaries,z=[];if($&&$.length===C.length){let F=0;$.forEach(V=>{z.push({start:F,end:V}),F=V})}else{let F=1/C.length;C.forEach((V,H)=>{z.push({start:H*F,end:(H+1)*F})})}C.forEach((F,V)=>{let H=z[V],X=n.padding+H.start*y,W=n.padding+H.end*y,Z=(X+W)/2;V>0&&O.append("line").attr("x1",X).attr("x2",X).attr("y1",n.padding).attr("y2",d-n.padding).attr("stroke","#000").attr("stroke-width",1).attr("stroke-dasharray","5 5").attr("opacity",.8),O.append("text").attr("class","wardley-stage-label").attr("x",Z).attr("y",d-n.padding/1.5).attr("fill",a.axisTextColor).attr("font-size",n.axisFontSize-2).attr("text-anchor","middle").text(F)})}if(n.showGrid){let O=m.append("g").attr("class","wardley-grid");for(let $=1;$<4;$++){let z=$/4,F=n.padding+y*z;O.append("line").attr("x1",F).attr("x2",F).attr("y1",n.padding).attr("y2",d-n.padding).attr("stroke",a.gridColor).attr("stroke-dasharray","2 6"),O.append("line").attr("x1",n.padding).attr("x2",f-n.padding).attr("y1",d-n.padding-v*z).attr("y2",d-n.padding-v*z).attr("stroke",a.gridColor).attr("stroke-dasharray","2 6")}}let E=new Map;if(u.nodes.forEach(O=>{E.set(O.id,{x:x(O.x),y:b(O.y),node:O})}),u.pipelines.length>0){let O=m.append("g").attr("class","wardley-pipelines"),$=m.append("g").attr("class","wardley-pipeline-links");u.pipelines.forEach(z=>{if(z.componentIds.length===0)return;let F=z.componentIds.map(W=>({id:W,pos:E.get(W),node:u.nodes.find(Z=>Z.id===W)})).filter(W=>W.pos&&W.node).sort((W,Z)=>W.node.x-Z.node.x);for(let W=0;W{let Z=E.get(W);Z&&(V=Math.min(V,Z.x),H=Math.max(H,Z.x),X=Z.y)}),V!==1/0&&H!==-1/0){let Z=n.nodeRadius*4,Y=X-Z/2,ae=E.get(z.nodeId);if(ae){let J=(V+H)/2;ae.x=J,ae.y=Y-s/6}O.append("rect").attr("class","wardley-pipeline-box").attr("x",V-15).attr("y",Y).attr("width",H-V+30).attr("height",Z).attr("fill","none").attr("stroke",a.axisColor).attr("stroke-width",1.5).attr("rx",4).attr("ry",4)}})}let S=m.append("g").attr("class","wardley-links"),L=new Map;u.pipelines.forEach(O=>{L.set(O.nodeId,new Set(O.componentIds))});let M=u.links.filter(O=>!(!E.has(O.source)||!E.has(O.target)||L.get(O.target)?.has(O.source)));S.selectAll("line").data(M).enter().append("line").attr("class",O=>`wardley-link${O.dashed?" wardley-link--dashed":""}`).attr("x1",O=>{let $=E.get(O.source),z=E.get(O.target),V=u.nodes.find(Z=>Z.id===O.source).isPipelineParent?s/Math.sqrt(2):n.nodeRadius,H=z.x-$.x,X=z.y-$.y,W=Math.sqrt(H*H+X*X);return $.x+H/W*V}).attr("y1",O=>{let $=E.get(O.source),z=E.get(O.target),V=u.nodes.find(Z=>Z.id===O.source).isPipelineParent?s/Math.sqrt(2):n.nodeRadius,H=z.x-$.x,X=z.y-$.y,W=Math.sqrt(H*H+X*X);return $.y+X/W*V}).attr("x2",O=>{let $=E.get(O.source),z=E.get(O.target),V=u.nodes.find(Z=>Z.id===O.target).isPipelineParent?s/Math.sqrt(2):n.nodeRadius,H=$.x-z.x,X=$.y-z.y,W=Math.sqrt(H*H+X*X);return z.x+H/W*V}).attr("y2",O=>{let $=E.get(O.source),z=E.get(O.target),V=u.nodes.find(Z=>Z.id===O.target).isPipelineParent?s/Math.sqrt(2):n.nodeRadius,H=$.x-z.x,X=$.y-z.y,W=Math.sqrt(H*H+X*X);return z.y+X/W*V}).attr("stroke",a.linkStroke).attr("stroke-width",1).attr("stroke-dasharray",O=>O.dashed?"6 6":null).attr("marker-end",O=>O.flow==="forward"||O.flow==="bidirectional"?`url(#link-arrow-end-${e})`:null).attr("marker-start",O=>O.flow==="backward"||O.flow==="bidirectional"?`url(#link-arrow-start-${e})`:null),S.selectAll("text").data(M.filter(O=>O.label)).enter().append("text").attr("class","wardley-link-label").attr("x",O=>{let $=E.get(O.source),z=E.get(O.target),F=($.x+z.x)/2,V=z.y-$.y,H=z.x-$.x,X=Math.sqrt(H*H+V*V),W=8,Z=V/X;return F+Z*W}).attr("y",O=>{let $=E.get(O.source),z=E.get(O.target),F=($.y+z.y)/2,V=z.x-$.x,H=z.y-$.y,X=Math.sqrt(V*V+H*H),W=8,Z=-V/X;return F+Z*W}).attr("fill",a.axisTextColor).attr("font-size",n.labelFontSize).attr("text-anchor","middle").attr("dominant-baseline","middle").attr("transform",O=>{let $=E.get(O.source),z=E.get(O.target),F=($.x+z.x)/2,V=($.y+z.y)/2,H=z.x-$.x,X=z.y-$.y,W=Math.sqrt(H*H+X*X),Z=8,Y=X/W,ae=-H/W,J=F+Y*Z,ee=V+ae*Z,re=Math.atan2(X,H)*180/Math.PI;return(re>90||re<-90)&&(re+=180),`rotate(${re} ${J} ${ee})`}).text(O=>O.label);let I=m.append("g").attr("class","wardley-trends"),A=u.trends.map(O=>{let $=E.get(O.nodeId);if(!$)return null;let z=x(O.targetX),F=b(O.targetY),V=z-$.x,H=F-$.y,X=Math.sqrt(V*V+H*H),W=n.nodeRadius+2,Z=X>W?z-V/X*W:z,Y=X>W?F-H/X*W:F;return{origin:$,targetX:z,targetY:F,adjustedX2:Z,adjustedY2:Y}}).filter(O=>O!==null);I.selectAll("line").data(A).enter().append("line").attr("class","wardley-trend").attr("x1",O=>O.origin.x).attr("y1",O=>O.origin.y).attr("x2",O=>O.adjustedX2).attr("y2",O=>O.adjustedY2).attr("stroke",a.evolutionStroke).attr("stroke-width",1).attr("stroke-dasharray","4 4").attr("marker-end",`url(#arrow-${e})`);let D=m.append("g").attr("class","wardley-nodes").selectAll("g").data(u.nodes).enter().append("g").attr("class",O=>["wardley-node",O.className?`wardley-node--${O.className}`:""].filter(Boolean).join(" "));D.filter(O=>O.sourceStrategy==="outsource").append("circle").attr("class","wardley-outsource-overlay").attr("cx",O=>E.get(O.id).x).attr("cy",O=>E.get(O.id).y).attr("r",n.nodeRadius*2).attr("fill","#666").attr("stroke",a.componentStroke).attr("stroke-width",1),D.filter(O=>O.sourceStrategy==="buy").append("circle").attr("class","wardley-buy-overlay").attr("cx",O=>E.get(O.id).x).attr("cy",O=>E.get(O.id).y).attr("r",n.nodeRadius*2).attr("fill","#ccc").attr("stroke",a.componentStroke).attr("stroke-width",1),D.filter(O=>O.sourceStrategy==="build").append("circle").attr("class","wardley-build-overlay").attr("cx",O=>E.get(O.id).x).attr("cy",O=>E.get(O.id).y).attr("r",n.nodeRadius*2).attr("fill","#eee").attr("stroke","#000").attr("stroke-width",1);let N=D.filter(O=>O.sourceStrategy==="market");N.append("circle").attr("class","wardley-market-overlay").attr("cx",O=>E.get(O.id).x).attr("cy",O=>E.get(O.id).y).attr("r",n.nodeRadius*2).attr("fill","white").attr("stroke",a.componentStroke).attr("stroke-width",1),D.filter(O=>!O.isPipelineParent&&O.sourceStrategy!=="market"&&O.className!=="anchor").append("circle").attr("cx",O=>E.get(O.id).x).attr("cy",O=>E.get(O.id).y).attr("r",n.nodeRadius).attr("fill",a.componentFill).attr("stroke",a.componentStroke).attr("stroke-width",1);let R=n.nodeRadius*.7,B=n.nodeRadius*1.2;if(N.append("line").attr("class","wardley-market-line").attr("x1",O=>E.get(O.id).x).attr("y1",O=>E.get(O.id).y-B).attr("x2",O=>E.get(O.id).x-B*Math.cos(Math.PI/6)).attr("y2",O=>E.get(O.id).y+B*Math.sin(Math.PI/6)).attr("stroke",a.componentStroke).attr("stroke-width",1),N.append("line").attr("class","wardley-market-line").attr("x1",O=>E.get(O.id).x-B*Math.cos(Math.PI/6)).attr("y1",O=>E.get(O.id).y+B*Math.sin(Math.PI/6)).attr("x2",O=>E.get(O.id).x+B*Math.cos(Math.PI/6)).attr("y2",O=>E.get(O.id).y+B*Math.sin(Math.PI/6)).attr("stroke",a.componentStroke).attr("stroke-width",1),N.append("line").attr("class","wardley-market-line").attr("x1",O=>E.get(O.id).x+B*Math.cos(Math.PI/6)).attr("y1",O=>E.get(O.id).y+B*Math.sin(Math.PI/6)).attr("x2",O=>E.get(O.id).x).attr("y2",O=>E.get(O.id).y-B).attr("stroke",a.componentStroke).attr("stroke-width",1),N.append("circle").attr("class","wardley-market-dot").attr("cx",O=>E.get(O.id).x).attr("cy",O=>E.get(O.id).y-B).attr("r",R).attr("fill","white").attr("stroke",a.componentStroke).attr("stroke-width",2),N.append("circle").attr("class","wardley-market-dot").attr("cx",O=>E.get(O.id).x-B*Math.cos(Math.PI/6)).attr("cy",O=>E.get(O.id).y+B*Math.sin(Math.PI/6)).attr("r",R).attr("fill","white").attr("stroke",a.componentStroke).attr("stroke-width",2),N.append("circle").attr("class","wardley-market-dot").attr("cx",O=>E.get(O.id).x+B*Math.cos(Math.PI/6)).attr("cy",O=>E.get(O.id).y+B*Math.sin(Math.PI/6)).attr("r",R).attr("fill","white").attr("stroke",a.componentStroke).attr("stroke-width",2),D.filter(O=>O.isPipelineParent===!0).append("rect").attr("x",O=>E.get(O.id).x-s/2).attr("y",O=>E.get(O.id).y-s/2).attr("width",s).attr("height",s).attr("fill",a.componentFill).attr("stroke",a.componentStroke).attr("stroke-width",1),D.filter(O=>O.inertia===!0).append("line").attr("class","wardley-inertia").attr("x1",O=>{let $=E.get(O.id),z=O.isPipelineParent?s/2+15:n.nodeRadius+15;return O.sourceStrategy&&(z+=n.nodeRadius+10),$.x+z}).attr("y1",O=>{let $=E.get(O.id),z=O.isPipelineParent?s:n.nodeRadius*2;return $.y-z/2}).attr("x2",O=>{let $=E.get(O.id),z=O.isPipelineParent?s/2+15:n.nodeRadius+15;return O.sourceStrategy&&(z+=n.nodeRadius+10),$.x+z}).attr("y2",O=>{let $=E.get(O.id),z=O.isPipelineParent?s:n.nodeRadius*2;return $.y+z/2}).attr("stroke",a.componentStroke).attr("stroke-width",6),D.append("text").attr("x",O=>{let $=E.get(O.id);if(O.className==="anchor")return O.labelOffsetX!==void 0?$.x+O.labelOffsetX:$.x;let z=n.nodeLabelOffset;O.sourceStrategy&&O.labelOffsetX===void 0&&(z+=10);let F=O.labelOffsetX??z;return $.x+F}).attr("y",O=>{let $=E.get(O.id);if(O.className==="anchor")return O.labelOffsetY!==void 0?$.y+O.labelOffsetY:$.y-3;let z=-n.nodeLabelOffset;O.sourceStrategy&&O.labelOffsetY===void 0&&(z-=10);let F=O.labelOffsetY??z;return $.y+F}).attr("class","wardley-node-label").attr("fill",O=>O.className==="evolved"?a.evolutionStroke:O.className==="anchor"?"#000":a.componentLabelColor).attr("font-size",n.labelFontSize).attr("font-weight",O=>O.className==="anchor"?"bold":"normal").attr("text-anchor",O=>O.className==="anchor"?"middle":"start").attr("dominant-baseline",O=>O.className==="anchor"?"middle":"auto").text(O=>O.label),u.annotations.length>0){let O=m.append("g").attr("class","wardley-annotations");if(u.annotations.forEach($=>{let z=$.coordinates.map(F=>({x:x(F.x),y:b(F.y)}));if(z.length>1)for(let F=0;F{let V=O.append("g").attr("class","wardley-annotation");V.append("circle").attr("cx",F.x).attr("cy",F.y).attr("r",10).attr("fill","white").attr("stroke",a.axisColor).attr("stroke-width",1.5),V.append("text").attr("x",F.x).attr("y",F.y).attr("text-anchor","middle").attr("dominant-baseline","central").attr("font-size",10).attr("fill",a.axisTextColor).attr("font-weight","bold").text($.number)})}),u.annotationsBox){let $=x(u.annotationsBox.x),z=b(u.annotationsBox.y),F=10,V=16,H=11,X=O.append("g").attr("class","wardley-annotations-box"),W=[...u.annotations].filter(Y=>Y.text).sort((Y,ae)=>Y.number-ae.number),Z=[];if(W.forEach((Y,ae)=>{let J=X.append("text").attr("x",$+F).attr("y",z+F+(ae+1)*V).attr("font-size",H).attr("fill",a.axisTextColor).attr("text-anchor","start").attr("dominant-baseline","middle").text(`${Y.number}. ${Y.text}`);Z.push(J)}),Z.length>0){let Y=0,ae=0;Z.forEach(Ee=>{let Ne=Ee.node(),we=Ne.getComputedTextLength();Y=Math.max(Y,we);let Te=Ne.getBBox();ae=Math.max(ae,Te.height)});let J=Y+F*2+105,ee=W.length*V+F*2+ae/2,re=n.padding,te=f-n.padding-J,be=n.padding,de=d-n.padding-ee;$=Math.max(re,Math.min($,te)),z=Math.max(be,Math.min(z,de)),Z.forEach((Ee,Ne)=>{Ee.attr("x",$+F).attr("y",z+F+(Ne+1)*V)}),X.insert("rect","text").attr("x",$).attr("y",z).attr("width",J).attr("height",ee).attr("fill","white").attr("stroke",a.axisColor).attr("stroke-width",1.5).attr("rx",4).attr("ry",4)}}}if(u.notes.length>0){let O=m.append("g").attr("class","wardley-notes");u.notes.forEach($=>{let z=x($.x),F=b($.y);O.append("text").attr("x",z).attr("y",F).attr("text-anchor","start").attr("font-size",11).attr("fill",a.axisTextColor).attr("font-weight","bold").text($.text)})}if(u.accelerators.length>0){let O=m.append("g").attr("class","wardley-accelerators");u.accelerators.forEach($=>{let z=x($.x),F=b($.y),V=60,H=30,X=20,W=` + M ${z} ${F-H/2} + L ${z+V-X} ${F-H/2} + L ${z+V-X} ${F-H/2-8} + L ${z+V} ${F} + L ${z+V-X} ${F+H/2+8} + L ${z+V-X} ${F+H/2} + L ${z} ${F+H/2} + Z + `;O.append("path").attr("d",W).attr("fill","white").attr("stroke",a.componentStroke).attr("stroke-width",1),O.append("text").attr("x",z+V/2).attr("y",F+H/2+15).attr("text-anchor","middle").attr("font-size",10).attr("fill",a.axisTextColor).attr("font-weight","bold").text($.name)})}if(u.deaccelerators.length>0){let O=m.append("g").attr("class","wardley-deaccelerators");u.deaccelerators.forEach($=>{let z=x($.x),F=b($.y),V=60,H=30,X=20,W=` + M ${z+V} ${F-H/2} + L ${z+X} ${F-H/2} + L ${z+X} ${F-H/2-8} + L ${z} ${F} + L ${z+X} ${F+H/2+8} + L ${z+X} ${F+H/2} + L ${z+V} ${F+H/2} + Z + `;O.append("path").attr("d",W).attr("fill","white").attr("stroke",a.componentStroke).attr("stroke-width",1),O.append("text").attr("x",z+V/2).attr("y",F+H/2+15).attr("text-anchor","middle").attr("font-size",10).attr("fill",a.axisTextColor).attr("font-weight","bold").text($.name)})}},"draw"),f_e={draw:Nyt}});var p_e={};ur(p_e,{diagram:()=>Iyt});var Iyt,m_e=P(()=>{"use strict";l_e();h_e();d_e();Iyt={parser:pY,db:u_e,renderer:f_e,styles:o(()=>"","styles")}});var bvt={};ur(bvt,{default:()=>xvt});lu();oL();Kp();var KFe=o(t=>/^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(t),"detector"),QFe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(kne(),Tne));return{id:"c4",diagram:t}},"loader"),ZFe={id:"c4",detector:KFe,loader:QFe},Cne=ZFe;var Cye="flowchart",Lit=o((t,e)=>e?.flowchart?.defaultRenderer==="dagre-wrapper"||e?.flowchart?.defaultRenderer==="elk"?!1:/^\s*graph/.test(t),"detector"),Rit=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(WS(),qS));return{id:Cye,diagram:t}},"loader"),Nit={id:Cye,detector:Lit,loader:Rit},wye=Nit;var Eye="flowchart-v2",Iit=o((t,e)=>e?.flowchart?.defaultRenderer==="dagre-d3"?!1:(e?.flowchart?.defaultRenderer==="elk"&&(e.layout="elk"),/^\s*graph/.test(t)&&e?.flowchart?.defaultRenderer==="dagre-wrapper"?!0:/^\s*flowchart/.test(t)),"detector"),Mit=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(WS(),qS));return{id:Eye,diagram:t}},"loader"),Oit={id:Eye,detector:Iit,loader:Mit},Sye=Oit;var zit=o(t=>/^\s*erDiagram/.test(t),"detector"),Git=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Oye(),Mye));return{id:"er",diagram:t}},"loader"),Vit={id:"er",detector:zit,loader:Git},Pye=Vit;var k4e="gitGraph",Ect=o(t=>/^\s*gitGraph/.test(t),"detector"),Sct=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(T4e(),b4e));return{id:k4e,diagram:t}},"loader"),Act={id:k4e,detector:Ect,loader:Sct},C4e=Act;var twe="gantt",mut=o(t=>/^\s*gantt/.test(t),"detector"),gut=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(ewe(),J4e));return{id:twe,diagram:t}},"loader"),yut={id:twe,detector:mut,loader:gut},rwe=yut;var hwe="info",kut=o(t=>/^\s*info/.test(t),"detector"),Cut=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(uwe(),cwe));return{id:hwe,diagram:t}},"loader"),fwe={id:hwe,detector:kut,loader:Cut};var Put=o(t=>/^\s*pie/.test(t),"detector"),But=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Twe(),bwe));return{id:"pie",diagram:t}},"loader"),kwe={id:"pie",detector:Put,loader:But};var Owe="quadrantChart",tht=o(t=>/^\s*quadrantChart/.test(t),"detector"),rht=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Mwe(),Iwe));return{id:Owe,diagram:t}},"loader"),iht={id:Owe,detector:tht,loader:rht},Pwe=iht;var c3e="xychart",bht=o(t=>/^\s*xychart(-beta)?/.test(t),"detector"),Tht=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(l3e(),o3e));return{id:c3e,diagram:t}},"loader"),kht={id:c3e,detector:bht,loader:Tht},u3e=kht;var x3e="requirement",Aht=o(t=>/^\s*requirement(Diagram)?/.test(t),"detector"),_ht=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(v3e(),y3e));return{id:x3e,diagram:t}},"loader"),Dht={id:x3e,detector:Aht,loader:_ht},b3e=Dht;var F3e="sequence",Eft=o(t=>/^\s*sequenceDiagram/.test(t),"detector"),Sft=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(B3e(),P3e));return{id:F3e,diagram:t}},"loader"),Aft={id:F3e,detector:Eft,loader:Sft},$3e=Aft;var U3e="class",Ift=o((t,e)=>e?.class?.defaultRenderer==="dagre-wrapper"?!1:/^\s*classDiagram/.test(t),"detector"),Mft=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(W3e(),q3e));return{id:U3e,diagram:t}},"loader"),Oft={id:U3e,detector:Ift,loader:Mft},H3e=Oft;var X3e="classDiagram",Bft=o((t,e)=>/^\s*classDiagram/.test(t)&&e?.class?.defaultRenderer==="dagre-wrapper"?!0:/^\s*classDiagram-v2/.test(t),"detector"),Fft=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(j3e(),Y3e));return{id:X3e,diagram:t}},"loader"),$ft={id:X3e,detector:Bft,loader:Fft},K3e=$ft;var _5e="state",hdt=o((t,e)=>e?.state?.defaultRenderer==="dagre-wrapper"?!1:/^\s*stateDiagram/.test(t),"detector"),fdt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(A5e(),S5e));return{id:_5e,diagram:t}},"loader"),ddt={id:_5e,detector:hdt,loader:fdt},D5e=ddt;var N5e="stateDiagram",mdt=o((t,e)=>!!(/^\s*stateDiagram-v2/.test(t)||/^\s*stateDiagram/.test(t)&&e?.state?.defaultRenderer==="dagre-wrapper"),"detector"),gdt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(R5e(),L5e));return{id:N5e,diagram:t}},"loader"),ydt={id:N5e,detector:mdt,loader:gdt},I5e=ydt;var j5e="journey",Fdt=o(t=>/^\s*journey/.test(t),"detector"),$dt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Y5e(),H5e));return{id:j5e,diagram:t}},"loader"),zdt={id:j5e,detector:Fdt,loader:$dt},X5e=zdt;bt();ro();Xi();var Gdt=o((t,e,r)=>{Q.debug(`rendering svg for syntax error +`);let i=Fi(e),n=i.append("g");i.attr("viewBox","0 0 2412 512"),Hr(i,100,512,!0),n.append("path").attr("class","error-icon").attr("d","m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z"),n.append("path").attr("class","error-icon").attr("d","m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z"),n.append("path").attr("class","error-icon").attr("d","m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z"),n.append("path").attr("class","error-icon").attr("d","m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z"),n.append("path").attr("class","error-icon").attr("d","m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z"),n.append("path").attr("class","error-icon").attr("d","m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z"),n.append("text").attr("class","error-text").attr("x",1440).attr("y",250).attr("font-size","150px").style("text-anchor","middle").text("Syntax error in text"),n.append("text").attr("class","error-text").attr("x",1250).attr("y",400).attr("font-size","100px").style("text-anchor","middle").text(`mermaid version ${r}`)},"draw"),GU={draw:Gdt},K5e=GU;var Vdt={db:{},renderer:GU,parser:{parse:o(()=>{},"parse")}},Q5e=Vdt;var Z5e="flowchart-elk",qdt=o((t,e={})=>/^\s*flowchart-elk/.test(t)||/^\s*(flowchart|graph)/.test(t)&&e?.flowchart?.defaultRenderer==="elk"?(e.layout="elk",!0):!1,"detector"),Wdt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(WS(),qS));return{id:Z5e,diagram:t}},"loader"),Udt={id:Z5e,detector:qdt,loader:Wdt},J5e=Udt;var MEe="timeline",gpt=o(t=>/^\s*timeline/.test(t),"detector"),ypt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(IEe(),NEe));return{id:MEe,diagram:t}},"loader"),vpt={id:MEe,detector:gpt,loader:ypt},OEe=vpt;var JEe="mindmap",Apt=o(t=>/^\s*mindmap/.test(t),"detector"),_pt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(ZEe(),QEe));return{id:JEe,diagram:t}},"loader"),Dpt={id:JEe,detector:Apt,loader:_pt},eSe=Dpt;var fSe="kanban",Upt=o(t=>/^\s*kanban/.test(t),"detector"),Hpt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(hSe(),uSe));return{id:fSe,diagram:t}},"loader"),Ypt={id:fSe,detector:Upt,loader:Hpt},dSe=Ypt;var jSe="sankey",g0t=o(t=>/^\s*sankey(-beta)?/.test(t),"detector"),y0t=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(YSe(),HSe));return{id:jSe,diagram:t}},"loader"),v0t={id:jSe,detector:g0t,loader:y0t},XSe=v0t;var i6e="packet",A0t=o(t=>/^\s*packet(-beta)?/.test(t),"detector"),_0t=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(r6e(),t6e));return{id:i6e,diagram:t}},"loader"),n6e={id:i6e,detector:A0t,loader:_0t};var m6e="radar",K0t=o(t=>/^\s*radar-beta/.test(t),"detector"),Q0t=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(p6e(),d6e));return{id:m6e,diagram:t}},"loader"),g6e={id:m6e,detector:K0t,loader:Q0t};var xAe="block",vgt=o(t=>/^\s*block(-beta)?/.test(t),"detector"),xgt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(vAe(),yAe));return{id:xAe,diagram:t}},"loader"),bgt={id:xAe,detector:vgt,loader:xgt},bAe=bgt;var LAe="treeView",Pgt=o(t=>/^\s*treeView-beta/.test(t),"detector"),Bgt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(DAe(),_Ae));return{id:LAe,diagram:t}},"loader"),Fgt={id:LAe,detector:Pgt,loader:Bgt},RAe=Fgt;var JAe="architecture",Jgt=o(t=>/^\s*architecture/.test(t),"detector"),e1t=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(ZAe(),QAe));return{id:JAe,diagram:t}},"loader"),t1t={id:JAe,detector:Jgt,loader:e1t},e7e=t1t;var y7e="ishikawa",p1t=o(t=>/^\s*ishikawa(-beta)?\b/i.test(t),"detector"),m1t=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(g7e(),m7e));return{id:y7e,diagram:t}},"loader"),v7e={id:y7e,detector:p1t,loader:m1t};var j7e="venn",Z1t=o(t=>/^\s*venn-beta/.test(t),"detector"),J1t=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Y7e(),H7e));return{id:j7e,diagram:t}},"loader"),eyt={id:j7e,detector:Z1t,loader:J1t},X7e=eyt;Kp();Ut();var a_e="treemap",cyt=o(t=>/^\s*treemap/.test(t),"detector"),uyt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(n_e(),i_e));return{id:a_e,diagram:t}},"loader"),s_e={id:a_e,detector:cyt,loader:uyt};var g_e="wardley-beta",Myt=o(t=>/^\s*wardley-beta/i.test(t),"detector"),Oyt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(m_e(),p_e));return{id:g_e,diagram:t}},"loader"),Pyt={id:g_e,detector:Myt,loader:Oyt},y_e=Pyt;var v_e=!1,Tx=o(()=>{v_e||(v_e=!0,Qp("error",Q5e,t=>t.toLowerCase().trim()==="error"),Qp("---",{db:{clear:o(()=>{},"clear")},styles:{},renderer:{draw:o(()=>{},"draw")},parser:{parse:o(()=>{throw new Error("Diagrams beginning with --- are not valid. If you were trying to use a YAML front-matter, please ensure that you've correctly opened and closed the YAML front-matter with un-indented `---` blocks")},"parse")},init:o(()=>null,"init")},t=>t.toLowerCase().trimStart().startsWith("---")),Zx(J5e,eSe,e7e),Zx(Cne,dSe,K3e,H3e,Pye,rwe,fwe,kwe,b3e,$3e,Sye,wye,OEe,C4e,I5e,D5e,X5e,Pwe,XSe,n6e,u3e,bAe,RAe,g6e,v7e,s_e,X7e,y_e))},"addDiagrams");bt();Kp();Ut();var x_e=o(async()=>{Q.debug("Loading registered diagrams");let e=(await Promise.allSettled(Object.entries(wh).map(async([r,{detector:i,loader:n}])=>{if(n)try{i2(r)}catch{try{let{diagram:a,id:s}=await n();Qp(s,a,i)}catch(a){throw Q.error(`Failed to load external diagram with key ${r}. Removing from detectors.`),delete wh[r],a}}}))).filter(r=>r.status==="rejected");if(e.length>0){Q.error(`Failed to load ${e.length} external diagrams`);for(let r of e)Q.error(r);throw new Error(`Failed to load ${e.length} external diagrams`)}},"loadRegisteredDiagrams");bt();Pr();var h8="comm",f8="rule",d8="decl";var b_e="@import";var T_e="@namespace",k_e="@keyframes";var C_e="@layer";var mY=Math.abs,JC=String.fromCharCode;function p8(t){return t.trim()}o(p8,"trim");function e4(t,e,r){return t.replace(e,r)}o(e4,"replace");function w_e(t,e,r){return t.indexOf(e,r)}o(w_e,"indexof");function Mp(t,e){return t.charCodeAt(e)|0}o(Mp,"charat");function Op(t,e,r){return t.slice(e,r)}o(Op,"substr");function ml(t){return t.length}o(ml,"strlen");function E_e(t){return t.length}o(E_e,"sizeof");function kx(t,e){return e.push(t),t}o(kx,"append");var m8=1,Cx=1,S_e=0,ac=0,aa=0,Ex="";function g8(t,e,r,i,n,a,s,l){return{value:t,root:e,parent:r,type:i,props:n,children:a,line:m8,column:Cx,length:s,return:"",siblings:l}}o(g8,"node");function A_e(){return aa}o(A_e,"char");function __e(){return aa=ac>0?Mp(Ex,--ac):0,Cx--,aa===10&&(Cx=1,m8--),aa}o(__e,"prev");function sc(){return aa=ac2||wx(aa)>3?"":" "}o(R_e,"whitespace");function N_e(t,e){for(;--e&&sc()&&!(aa<48||aa>102||aa>57&&aa<65||aa>70&&aa<97););return y8(t,t4()+(e<6&&Df()==32&&sc()==32))}o(N_e,"escaping");function gY(t){for(;sc();)switch(aa){case t:return ac;case 34:case 39:t!==34&&t!==39&&gY(aa);break;case 40:t===41&&gY(t);break;case 92:sc();break}return ac}o(gY,"delimiter");function I_e(t,e){for(;sc()&&t+aa!==57;)if(t+aa===84&&Df()===47)break;return"/*"+y8(e,ac-1)+"*"+JC(t===47?t:sc())}o(I_e,"commenter");function M_e(t){for(;!wx(Df());)sc();return y8(t,ac)}o(M_e,"identifier");function B_e(t){return L_e(x8("",null,null,null,[""],t=D_e(t),0,[0],t))}o(B_e,"compile");function x8(t,e,r,i,n,a,s,l,u){for(var h=0,f=0,d=s,p=0,m=0,g=0,y=1,v=1,x=1,b=0,T="",w=n,k=a,C=i,E=T;v;)switch(g=b,b=sc()){case 40:if(g!=108&&Mp(E,d-1)==58){w_e(E+=e4(v8(b),"&","&\f"),"&\f",mY(h?l[h-1]:0))!=-1&&(x=-1);break}case 34:case 39:case 91:E+=v8(b);break;case 9:case 10:case 13:case 32:E+=R_e(g);break;case 92:E+=N_e(t4()-1,7);continue;case 47:switch(Df()){case 42:case 47:kx(Byt(I_e(sc(),t4()),e,r,u),u),(wx(g||1)==5||wx(Df()||1)==5)&&ml(E)&&Op(E,-1,void 0)!==" "&&(E+=" ");break;default:E+="/"}break;case 123*y:l[h++]=ml(E)*x;case 125*y:case 59:case 0:switch(b){case 0:case 125:v=0;case 59+f:x==-1&&(E=e4(E,/\f/g,"")),m>0&&(ml(E)-d||y===0&&g===47)&&kx(m>32?P_e(E+";",i,r,d-1,u):P_e(e4(E," ","")+";",i,r,d-2,u),u);break;case 59:E+=";";default:if(kx(C=O_e(E,e,r,h,f,n,l,T,w=[],k=[],d,a),a),b===123)if(f===0)x8(E,e,C,C,w,a,d,l,k);else{switch(p){case 99:if(Mp(E,3)===110)break;case 108:if(Mp(E,2)===97)break;default:f=0;case 100:case 109:case 115:}f?x8(t,C,C,i&&kx(O_e(t,C,C,0,0,n,l,T,n,w=[],d,k),k),n,k,d,l,i?w:k):x8(E,C,C,C,[""],k,0,l,k)}}h=f=m=0,y=x=1,T=E="",d=s;break;case 58:d=1+ml(E),m=g;default:if(y<1){if(b==123)--y;else if(b==125&&y++==0&&__e()==125)continue}switch(E+=JC(b),b*y){case 38:x=f>0?1:(E+="\f",-1);break;case 44:l[h++]=(ml(E)-1)*x,x=1;break;case 64:Df()===45&&(E+=v8(sc())),p=Df(),f=d=ml(T=E+=M_e(t4())),b++;break;case 45:g===45&&ml(E)==2&&(y=0)}}return a}o(x8,"parse");function O_e(t,e,r,i,n,a,s,l,u,h,f,d){for(var p=n-1,m=n===0?a:[""],g=E_e(m),y=0,v=0,x=0;y0?m[b]+" "+T:e4(T,/&\f/g,m[b])))&&(u[x++]=w);return g8(t,e,r,n===0?f8:l,u,h,f,d)}o(O_e,"ruleset");function Byt(t,e,r,i){return g8(t,e,r,h8,JC(A_e()),Op(t,2,-2),0,i)}o(Byt,"comment");function P_e(t,e,r,i,n){return g8(t,e,r,d8,Op(t,0,i),Op(t,i+1,-1),i,n)}o(P_e,"declaration");function b8(t,e){for(var r="",i=0;i{G_e.forEach(t=>{t()}),G_e=[]},"attachFunctions");bt();var q_e=o(t=>t.replace(/^\s*%%(?!{)[^\n]+\n?/gm,"").trimStart(),"cleanupComments");ew();xb();function W_e(t){let e=t.match(J4);if(!e)return{text:t,metadata:{}};let r=ud(e[1],{schema:cd})??{};r=typeof r=="object"&&!Array.isArray(r)?r:{};let i={};return r.displayMode&&(i.displayMode=r.displayMode.toString()),r.title&&(i.title=r.title.toString()),r.config&&(i.config=r.config),{text:t.slice(e[0].length),metadata:i}}o(W_e,"extractFrontMatter");er();var $yt=o(t=>t.replace(/\r\n?/g,` +`).replace(/<(\w+)([^>]*)>/g,(e,r,i)=>"<"+r+i.replace(/="([^"]*)"/g,"='$1'")+">"),"cleanupText"),zyt=o(t=>{let{text:e,metadata:r}=W_e(t),{displayMode:i,title:n,config:a={}}=r;return i&&(a.gantt||(a.gantt={}),a.gantt.displayMode=i),{title:n,config:a,text:e}},"processFrontmatter"),Gyt=o(t=>{let e=Kt.detectInit(t)??{},r=Kt.detectDirective(t,"wrap");return Array.isArray(r)?e.wrap=r.some(({type:i})=>i==="wrap"):r?.type==="wrap"&&(e.wrap=!0),{text:une(t),directive:e}},"processDirectives");function yY(t){let e=$yt(t),r=zyt(e),i=Gyt(r.text),n=fi(r.config,i.directive);return t=q_e(i.text),{code:t,title:r.title,config:n}}o(yY,"preprocessDiagram");hL();g4();er();function U_e(t){let e=new TextEncoder().encode(t),r=Array.from(e,i=>String.fromCodePoint(i)).join("");return btoa(r)}o(U_e,"toBase64");var Vyt=5e4,qyt="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa",Wyt="sandbox",Uyt="loose",Hyt="http://www.w3.org/2000/svg",Yyt="http://www.w3.org/1999/xlink",jyt="http://www.w3.org/1999/xhtml",Xyt="100%",Kyt="100%",Qyt="border:0;margin:0;",Zyt="margin:0",Jyt="allow-top-navigation-by-user-activation allow-popups",evt='The "iframe" tag is not supported by your browser.',tvt=["foreignobject"],rvt=["dominant-baseline"];function X_e(t){let e=yY(t);return Mx(),qj(e.config??{}),e}o(X_e,"processAndSetConfigs");async function ivt(t,e){Tx();try{let{code:r,config:i}=X_e(t);return{diagramType:(await K_e(r)).type,config:i}}catch(r){if(e?.suppressErrors)return!1;throw r}}o(ivt,"parse");var H_e=o((t,e,r=[])=>` +.${t} ${e} { ${r.join(" !important; ")} !important; }`,"cssImportantStyles"),nvt=o((t,e=new Map)=>{let r="";if(t.themeCSS!==void 0&&(r+=` +${t.themeCSS}`),t.fontFamily!==void 0&&(r+=` +:root { --mermaid-font-family: ${t.fontFamily}}`),t.altFontFamily!==void 0&&(r+=` +:root { --mermaid-alt-font-family: ${t.altFontFamily}}`),e instanceof Map){let s=Or(t)?["> *","span"]:["rect","polygon","ellipse","circle","path"];e.forEach(l=>{_r(l.styles)||s.forEach(u=>{r+=H_e(l.id,u,l.styles)}),_r(l.textStyles)||(r+=H_e(l.id,"tspan",(l?.textStyles||[]).map(u=>u.replace("color","fill"))))})}return r},"createCssStyles"),avt=o((t,e,r,i)=>{let n=nvt(t,r),a=XK(e,n,{...t.themeVariables,theme:t.theme,look:t.look},i);return b8(B_e(`${i}{${a}}`),F_e)},"createUserStyles"),svt=o((t="",e,r)=>{let i=t;return!r&&!e&&(i=i.replace(/marker-end="url\([\d+./:=?A-Za-z-]*?#/g,'marker-end="url(#')),i=zs(i),i=i.replace(/
    /g,"
    "),i},"cleanUpSvgCode"),ovt=o((t="",e)=>{let r=e?.viewBox?.baseVal?.height?e.viewBox.baseVal.height+"px":Kyt,i=U_e(`${t}`);return``},"putIntoIFrame"),Y_e=o((t,e,r,i,n)=>{let a=t.append("div");a.attr("id",r),i&&a.attr("style",i);let s=a.append("svg").attr("id",e).attr("width","100%").attr("xmlns",Hyt);return n&&s.attr("xmlns:xlink",n),s.append("g"),t},"appendDivSvgG");function j_e(t,e){return t.append("iframe").attr("id",e).attr("style","width: 100%; height: 100%;").attr("sandbox","")}o(j_e,"sandboxedIframe");var lvt=o((t,e,r,i)=>{t.getElementById(e)?.remove(),t.getElementById(r)?.remove(),t.getElementById(i)?.remove()},"removeExistingElements"),cvt=o(async function(t,e,r){Tx();let i=X_e(e);e=i.code;let n=Lt();Q.debug(n),e.length>(n?.maxTextSize??Vyt)&&(e=qyt);let a="#"+t,s="i"+t,l="#"+s,u="d"+t,h="#"+u,f=o(()=>{let _=Ze(p?l:h).node();_&&"remove"in _&&_.remove()},"removeTempElements"),d=Ze("body"),p=n.securityLevel===Wyt,m=n.securityLevel===Uyt,g=n.fontFamily;if(r!==void 0){if(r&&(r.innerHTML=""),p){let A=j_e(Ze(r),s);d=Ze(A.nodes()[0].contentDocument.body),d.node().style.margin=0}else d=Ze(r);Y_e(d,t,u,`font-family: ${g}`,Yyt)}else{if(lvt(document,t,u,s),p){let A=j_e(Ze("body"),s);d=Ze(A.nodes()[0].contentDocument.body),d.node().style.margin=0}else d=Ze("body");Y_e(d,t,u)}let y,v;try{y=await Sx.fromText(e,{title:i.title})}catch(A){if(n.suppressErrorRendering)throw f(),A;y=await Sx.fromText("error"),v=A}let x=d.select(h).node(),b=y.type,T=x.firstChild,w=T.firstChild,k=y.renderer.getClasses?.(e,y),C=avt(n,b,k,a),E=document.createElement("style");E.innerHTML=C,T.insertBefore(E,w);try{await y.renderer.draw(e,t,"11.14.0",y)}catch(A){throw n.suppressErrorRendering?f():K5e.draw(e,t,"11.14.0"),A}let S=d.select(`${h} svg`),L=y.db.getAccTitle?.(),M=y.db.getAccDescription?.();hvt(b,S,L,M),d.select(`[id="${t}"]`).selectAll("foreignobject > *").attr("xmlns",jyt);let I=d.select(h).node().innerHTML;if(Q.debug("config.arrowMarkerAbsolute",n.arrowMarkerAbsolute),I=svt(I,p,ls(n.arrowMarkerAbsolute)),p){let A=d.select(h+" svg").node();I=ovt(I,A)}else m||(I=Tl.sanitize(I,{ADD_TAGS:tvt,ADD_ATTR:rvt,HTML_INTEGRATION_POINTS:{foreignobject:!0}}));if(V_e(),v)throw v;return f(),{diagramType:b,svg:I,bindFunctions:y.db.bindFunctions}},"render");function uvt(t={}){let e=Yi({},t);e?.fontFamily&&!e.themeVariables?.fontFamily&&(e.themeVariables||(e.themeVariables={}),e.themeVariables.fontFamily=e.fontFamily),zj(e),e?.theme&&e.theme in xl?e.themeVariables=xl[e.theme].getThemeVariables(e.themeVariables):e&&(e.themeVariables=xl.default.getThemeVariables(e.themeVariables));let r=typeof e=="object"?nD(e):aD();_x(r.logLevel),Tx()}o(uvt,"initialize");var K_e=o((t,e={})=>{let{code:r}=yY(t);return Sx.fromText(r,e)},"getDiagramFromText");function hvt(t,e,r,i){$_e(e,t),z_e(e,r,i,e.attr("id"))}o(hvt,"addA11yInfo");var Pp=Object.freeze({render:cvt,parse:ivt,getDiagramFromText:K_e,initialize:uvt,getConfig:Lt,setConfig:x4,getSiteConfig:aD,updateSiteConfig:Gj,reset:o(()=>{Mx()},"reset"),globalReset:o(()=>{Mx(Nf)},"globalReset"),defaultConfig:Nf});_x(Lt().logLevel);Mx(Lt());Wd();er();var fvt=o((t,e,r)=>{Q.warn(t),wI(t)?(r&&r(t.str,t.hash),e.push({...t,message:t.str,error:t})):(r&&r(t),t instanceof Error&&e.push({str:t.message,message:t.message,hash:t.name,error:t}))},"handleError"),Q_e=o(async function(t={querySelector:".mermaid"}){try{await dvt(t)}catch(e){if(wI(e)&&Q.error(e.str),Lf.parseError&&Lf.parseError(e),!t.suppressErrors)throw Q.error("Use the suppressErrors option to suppress these errors"),e}},"run"),dvt=o(async function({postRenderCallback:t,querySelector:e,nodes:r}={querySelector:".mermaid"}){let i=Pp.getConfig();Q.debug(`${t?"":"No "}Callback function found`);let n;if(r)n=r;else if(e)n=document.querySelectorAll(e);else throw new Error("Nodes and querySelector are both undefined");Q.debug(`Found ${n.length} diagrams`),i?.startOnLoad!==void 0&&(Q.debug("Start On Load: "+i?.startOnLoad),Pp.updateSiteConfig({startOnLoad:i?.startOnLoad}));let a=new Kt.InitIDGenerator(i.deterministicIds,i.deterministicIDSeed),s,l=[];for(let u of Array.from(n)){Q.info("Rendering diagram: "+u.id);if(u.getAttribute("data-processed"))continue;u.setAttribute("data-processed","true");let h=`mermaid-${a.next()}`;s=u.innerHTML,s=Z4(Kt.entityDecode(s)).trim().replace(//gi,"
    ");let f=Kt.detectInit(s);f&&Q.debug("Detected early reinit: ",f);try{let{svg:d,bindFunctions:p}=await t8e(h,s,u);u.innerHTML=d,t&&await t(h),p&&p(u)}catch(d){fvt(d,l,Lf.parseError)}}if(l.length>0)throw l[0]},"runThrowsErrors"),Z_e=o(function(t){Pp.initialize(t)},"initialize"),pvt=o(async function(t,e,r){Q.warn("mermaid.init is deprecated. Please use run instead."),t&&Z_e(t);let i={postRenderCallback:r,querySelector:".mermaid"};typeof e=="string"?i.querySelector=e:e&&(e instanceof HTMLElement?i.nodes=[e]:i.nodes=e),await Q_e(i)},"init"),mvt=o(async(t,{lazyLoad:e=!0}={})=>{Tx(),Zx(...t),e===!1&&await x_e()},"registerExternalDiagrams"),J_e=o(function(){if(Lf.startOnLoad){let{startOnLoad:t}=Pp.getConfig();t&&Lf.run().catch(e=>Q.error("Mermaid failed to initialize",e))}},"contentLoaded");if(typeof document<"u"){window.addEventListener("load",J_e,!1)}var gvt=o(function(t){Lf.parseError=t},"setParseErrorHandler"),T8=[],vY=!1,e8e=o(async()=>{if(!vY){for(vY=!0;T8.length>0;){let t=T8.shift();if(t)try{await t()}catch(e){Q.error("Error executing queue",e)}}vY=!1}},"executeQueue"),yvt=o(async(t,e)=>new Promise((r,i)=>{let n=o(()=>new Promise((a,s)=>{Pp.parse(t,e).then(l=>{a(l),r(l)},l=>{Q.error("Error parsing",l),Lf.parseError?.(l),s(l),i(l)})}),"performCall");T8.push(n),e8e().catch(i)}),"parse"),t8e=o((t,e,r)=>new Promise((i,n)=>{let a=o(()=>new Promise((s,l)=>{Pp.render(t,e,r).then(u=>{s(u),i(u)},u=>{Q.error("Error parsing",u),Lf.parseError?.(u),l(u),n(u)})}),"performCall");T8.push(a),e8e().catch(n)}),"render"),vvt=o(()=>Object.keys(wh).map(t=>({id:t})),"getRegisteredDiagramsMetadata"),Lf={startOnLoad:!0,mermaidAPI:Pp,parse:yvt,render:t8e,init:pvt,run:Q_e,registerExternalDiagrams:mvt,registerLayoutLoaders:kF,initialize:Z_e,parseError:void 0,contentLoaded:J_e,setParseErrorHandler:gvt,detectType:Ig,registerIconPacks:Q4,getRegisteredDiagramsMetadata:vvt},xvt=Lf;return s4(bvt);})(); +/*! Check if previously processed */ +/*! + * Wait for document loaded before starting the execution + */ +/*! Bundled license information: + +dompurify/dist/purify.es.mjs: + (*! @license DOMPurify 3.3.1 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.3.1/LICENSE *) + +js-yaml/dist/js-yaml.mjs: + (*! js-yaml 4.1.1 https://github.com/nodeca/js-yaml @license MIT *) + +lodash-es/lodash.js: + (** + * @license + * Lodash (Custom Build) + * Build: `lodash modularize exports="es" -o ./` + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + *) + +cytoscape/dist/cytoscape.esm.mjs: + (*! + Embeddable Minimum Strictly-Compliant Promises/A+ 1.1.1 Thenable + Copyright (c) 2013-2014 Ralf S. Engelschall (http://engelschall.com) + Licensed under The MIT License (http://opensource.org/licenses/MIT) + *) + (*! + Event object based on jQuery events, MIT license + + https://jquery.org/license/ + https://tldrlegal.com/license/mit-license + https://github.com/jquery/jquery/blob/master/src/event.js + *) + (*! Bezier curve function generator. Copyright Gaetan Renaudeau. MIT License: http://en.wikipedia.org/wiki/MIT_License *) + (*! Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License *) +*/ +globalThis["mermaid"] = globalThis.__esbuild_esm_mermaid_nm["mermaid"].default; diff --git a/internal/embedded/static/vendor/fonts/cormorant-garamond/cormorant-garamond-latin-400-italic.woff2 b/internal/embedded/static/vendor/fonts/cormorant-garamond/cormorant-garamond-latin-400-italic.woff2 new file mode 100644 index 00000000..d9272649 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/cormorant-garamond/cormorant-garamond-latin-400-italic.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/cormorant-garamond/cormorant-garamond-latin-400-normal.woff2 b/internal/embedded/static/vendor/fonts/cormorant-garamond/cormorant-garamond-latin-400-normal.woff2 new file mode 100644 index 00000000..096df0a9 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/cormorant-garamond/cormorant-garamond-latin-400-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/cormorant-garamond/cormorant-garamond-latin-500-italic.woff2 b/internal/embedded/static/vendor/fonts/cormorant-garamond/cormorant-garamond-latin-500-italic.woff2 new file mode 100644 index 00000000..1a4e58fa Binary files /dev/null and b/internal/embedded/static/vendor/fonts/cormorant-garamond/cormorant-garamond-latin-500-italic.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/cormorant-garamond/cormorant-garamond-latin-500-normal.woff2 b/internal/embedded/static/vendor/fonts/cormorant-garamond/cormorant-garamond-latin-500-normal.woff2 new file mode 100644 index 00000000..efade81b Binary files /dev/null and b/internal/embedded/static/vendor/fonts/cormorant-garamond/cormorant-garamond-latin-500-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/cormorant-garamond/cormorant-garamond-latin-600-italic.woff2 b/internal/embedded/static/vendor/fonts/cormorant-garamond/cormorant-garamond-latin-600-italic.woff2 new file mode 100644 index 00000000..070e7bdf Binary files /dev/null and b/internal/embedded/static/vendor/fonts/cormorant-garamond/cormorant-garamond-latin-600-italic.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/cormorant-garamond/cormorant-garamond-latin-600-normal.woff2 b/internal/embedded/static/vendor/fonts/cormorant-garamond/cormorant-garamond-latin-600-normal.woff2 new file mode 100644 index 00000000..937e0149 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/cormorant-garamond/cormorant-garamond-latin-600-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/cormorant-garamond/cormorant-garamond-latin-700-italic.woff2 b/internal/embedded/static/vendor/fonts/cormorant-garamond/cormorant-garamond-latin-700-italic.woff2 new file mode 100644 index 00000000..100e53db Binary files /dev/null and b/internal/embedded/static/vendor/fonts/cormorant-garamond/cormorant-garamond-latin-700-italic.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/cormorant-garamond/cormorant-garamond-latin-700-normal.woff2 b/internal/embedded/static/vendor/fonts/cormorant-garamond/cormorant-garamond-latin-700-normal.woff2 new file mode 100644 index 00000000..a0fd9f62 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/cormorant-garamond/cormorant-garamond-latin-700-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/fraunces/fraunces-latin-400-italic.woff2 b/internal/embedded/static/vendor/fonts/fraunces/fraunces-latin-400-italic.woff2 new file mode 100644 index 00000000..8b47701b Binary files /dev/null and b/internal/embedded/static/vendor/fonts/fraunces/fraunces-latin-400-italic.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/0.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/0.woff2 new file mode 100644 index 00000000..5e97d2fe Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/0.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/1.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/1.woff2 new file mode 100644 index 00000000..52afe1b3 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/1.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/10.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/10.woff2 new file mode 100644 index 00000000..c8975756 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/10.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/100.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/100.woff2 new file mode 100644 index 00000000..53e01894 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/100.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/101.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/101.woff2 new file mode 100644 index 00000000..101d8b98 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/101.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/102.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/102.woff2 new file mode 100644 index 00000000..0951c674 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/102.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/103.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/103.woff2 new file mode 100644 index 00000000..6f3cb8aa Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/103.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/104.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/104.woff2 new file mode 100644 index 00000000..66c539bc Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/104.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/105.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/105.woff2 new file mode 100644 index 00000000..44a777b7 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/105.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/106.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/106.woff2 new file mode 100644 index 00000000..0de6520a Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/106.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/107.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/107.woff2 new file mode 100644 index 00000000..945047ca Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/107.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/108.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/108.woff2 new file mode 100644 index 00000000..0199d79d Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/108.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/109.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/109.woff2 new file mode 100644 index 00000000..7118a4a4 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/109.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/11.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/11.woff2 new file mode 100644 index 00000000..24d61e6f Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/11.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/110.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/110.woff2 new file mode 100644 index 00000000..76db6047 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/110.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/111.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/111.woff2 new file mode 100644 index 00000000..fa67e4ab Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/111.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/112.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/112.woff2 new file mode 100644 index 00000000..3dd70187 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/112.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/113.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/113.woff2 new file mode 100644 index 00000000..f8137bb8 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/113.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/114.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/114.woff2 new file mode 100644 index 00000000..cb7607d9 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/114.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/115.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/115.woff2 new file mode 100644 index 00000000..fbe24297 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/115.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/116.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/116.woff2 new file mode 100644 index 00000000..1c4d3c8d Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/116.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/117.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/117.woff2 new file mode 100644 index 00000000..154bbfa6 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/117.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/118.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/118.woff2 new file mode 100644 index 00000000..615b8cd6 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/118.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/119.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/119.woff2 new file mode 100644 index 00000000..c9b5483d Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/119.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/12.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/12.woff2 new file mode 100644 index 00000000..fae1bf28 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/12.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/120.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/120.woff2 new file mode 100644 index 00000000..850b872a Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/120.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/121.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/121.woff2 new file mode 100644 index 00000000..d3d8071b Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/121.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/122.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/122.woff2 new file mode 100644 index 00000000..0725b917 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/122.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/123.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/123.woff2 new file mode 100644 index 00000000..99e290f5 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/123.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/124.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/124.woff2 new file mode 100644 index 00000000..6d11463b Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/124.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/125.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/125.woff2 new file mode 100644 index 00000000..46c09988 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/125.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/126.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/126.woff2 new file mode 100644 index 00000000..e9086bda Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/126.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/127.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/127.woff2 new file mode 100644 index 00000000..b9314d50 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/127.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/128.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/128.woff2 new file mode 100644 index 00000000..4d636ae0 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/128.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/129.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/129.woff2 new file mode 100644 index 00000000..61a23170 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/129.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/13.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/13.woff2 new file mode 100644 index 00000000..99657568 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/13.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/130.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/130.woff2 new file mode 100644 index 00000000..81e18149 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/130.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/131.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/131.woff2 new file mode 100644 index 00000000..a77a7f2b Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/131.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/132.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/132.woff2 new file mode 100644 index 00000000..27ef4333 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/132.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/133.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/133.woff2 new file mode 100644 index 00000000..2aa3681d Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/133.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/134.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/134.woff2 new file mode 100644 index 00000000..90aa0cd9 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/134.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/135.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/135.woff2 new file mode 100644 index 00000000..55466d55 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/135.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/136.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/136.woff2 new file mode 100644 index 00000000..1f8a51e6 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/136.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/137.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/137.woff2 new file mode 100644 index 00000000..d79f11ba Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/137.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/138.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/138.woff2 new file mode 100644 index 00000000..ffb86116 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/138.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/139.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/139.woff2 new file mode 100644 index 00000000..d876f5b9 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/139.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/14.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/14.woff2 new file mode 100644 index 00000000..3af7d149 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/14.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/140.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/140.woff2 new file mode 100644 index 00000000..f186ba9e Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/140.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/141.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/141.woff2 new file mode 100644 index 00000000..9f897ac2 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/141.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/142.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/142.woff2 new file mode 100644 index 00000000..a396db00 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/142.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/143.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/143.woff2 new file mode 100644 index 00000000..93b30931 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/143.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/144.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/144.woff2 new file mode 100644 index 00000000..e7ddadde Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/144.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/145.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/145.woff2 new file mode 100644 index 00000000..cb48d3a0 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/145.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/146.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/146.woff2 new file mode 100644 index 00000000..ba1343ba Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/146.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/147.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/147.woff2 new file mode 100644 index 00000000..6390fd95 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/147.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/148.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/148.woff2 new file mode 100644 index 00000000..fe3a50ce Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/148.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/149.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/149.woff2 new file mode 100644 index 00000000..0a253879 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/149.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/15.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/15.woff2 new file mode 100644 index 00000000..c51f327c Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/15.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/150.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/150.woff2 new file mode 100644 index 00000000..018f59d2 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/150.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/151.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/151.woff2 new file mode 100644 index 00000000..9c37b701 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/151.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/152.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/152.woff2 new file mode 100644 index 00000000..d00f9f74 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/152.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/153.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/153.woff2 new file mode 100644 index 00000000..f1820bc5 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/153.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/154.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/154.woff2 new file mode 100644 index 00000000..2a3041a1 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/154.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/155.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/155.woff2 new file mode 100644 index 00000000..53b620d7 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/155.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/156.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/156.woff2 new file mode 100644 index 00000000..8a27b9b5 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/156.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/157.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/157.woff2 new file mode 100644 index 00000000..130dedfb Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/157.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/158.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/158.woff2 new file mode 100644 index 00000000..f8a7598d Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/158.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/159.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/159.woff2 new file mode 100644 index 00000000..7a164aad Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/159.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/16.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/16.woff2 new file mode 100644 index 00000000..21548274 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/16.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/160.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/160.woff2 new file mode 100644 index 00000000..c69fad84 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/160.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/161.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/161.woff2 new file mode 100644 index 00000000..3b8842f3 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/161.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/162.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/162.woff2 new file mode 100644 index 00000000..962ec386 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/162.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/163.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/163.woff2 new file mode 100644 index 00000000..a95fe525 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/163.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/164.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/164.woff2 new file mode 100644 index 00000000..7304c6db Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/164.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/165.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/165.woff2 new file mode 100644 index 00000000..108f0965 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/165.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/166.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/166.woff2 new file mode 100644 index 00000000..423e6e55 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/166.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/167.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/167.woff2 new file mode 100644 index 00000000..00a04990 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/167.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/168.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/168.woff2 new file mode 100644 index 00000000..9a6ed03c Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/168.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/169.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/169.woff2 new file mode 100644 index 00000000..e83f022f Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/169.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/17.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/17.woff2 new file mode 100644 index 00000000..40f869f2 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/17.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/170.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/170.woff2 new file mode 100644 index 00000000..e80373e9 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/170.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/171.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/171.woff2 new file mode 100644 index 00000000..3844ad90 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/171.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/172.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/172.woff2 new file mode 100644 index 00000000..9e1540b3 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/172.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/173.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/173.woff2 new file mode 100644 index 00000000..2ef93489 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/173.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/174.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/174.woff2 new file mode 100644 index 00000000..2aa16dbe Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/174.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/175.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/175.woff2 new file mode 100644 index 00000000..9f3d4919 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/175.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/176.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/176.woff2 new file mode 100644 index 00000000..362c95dc Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/176.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/177.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/177.woff2 new file mode 100644 index 00000000..f9631df7 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/177.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/178.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/178.woff2 new file mode 100644 index 00000000..00b0790b Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/178.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/179.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/179.woff2 new file mode 100644 index 00000000..a9b911c8 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/179.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/18.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/18.woff2 new file mode 100644 index 00000000..53f7fe2a Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/18.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/180.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/180.woff2 new file mode 100644 index 00000000..c4c67cfc Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/180.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/181.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/181.woff2 new file mode 100644 index 00000000..e9ed8e22 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/181.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/182.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/182.woff2 new file mode 100644 index 00000000..a31b8af3 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/182.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/183.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/183.woff2 new file mode 100644 index 00000000..b426a680 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/183.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/184.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/184.woff2 new file mode 100644 index 00000000..62a28802 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/184.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/185.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/185.woff2 new file mode 100644 index 00000000..8d8e4658 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/185.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/186.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/186.woff2 new file mode 100644 index 00000000..b5a17d38 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/186.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/187.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/187.woff2 new file mode 100644 index 00000000..b9797ba2 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/187.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/188.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/188.woff2 new file mode 100644 index 00000000..ffaf98d2 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/188.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/189.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/189.woff2 new file mode 100644 index 00000000..23e8ebfe Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/189.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/19.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/19.woff2 new file mode 100644 index 00000000..56cbbea9 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/19.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/190.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/190.woff2 new file mode 100644 index 00000000..1d5c249c Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/190.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/191.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/191.woff2 new file mode 100644 index 00000000..3936b279 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/191.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/192.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/192.woff2 new file mode 100644 index 00000000..605932c0 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/192.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/193.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/193.woff2 new file mode 100644 index 00000000..02807d3c Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/193.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/194.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/194.woff2 new file mode 100644 index 00000000..ef6a3739 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/194.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/195.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/195.woff2 new file mode 100644 index 00000000..d55f98a8 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/195.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/196.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/196.woff2 new file mode 100644 index 00000000..52dc57c2 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/196.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/197.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/197.woff2 new file mode 100644 index 00000000..c8871e58 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/197.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/198.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/198.woff2 new file mode 100644 index 00000000..131ebe26 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/198.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/199.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/199.woff2 new file mode 100644 index 00000000..7dca1427 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/199.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/2.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/2.woff2 new file mode 100644 index 00000000..b204c006 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/2.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/20.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/20.woff2 new file mode 100644 index 00000000..d12eb404 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/20.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/200.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/200.woff2 new file mode 100644 index 00000000..f765cc0c Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/200.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/201.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/201.woff2 new file mode 100644 index 00000000..4bf2fc14 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/201.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/202.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/202.woff2 new file mode 100644 index 00000000..d81a289c Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/202.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/203.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/203.woff2 new file mode 100644 index 00000000..af6308b5 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/203.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/204.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/204.woff2 new file mode 100644 index 00000000..37319594 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/204.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/205.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/205.woff2 new file mode 100644 index 00000000..1e0949a1 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/205.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/206.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/206.woff2 new file mode 100644 index 00000000..7df85686 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/206.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/207.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/207.woff2 new file mode 100644 index 00000000..05ae1475 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/207.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/208.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/208.woff2 new file mode 100644 index 00000000..bf776d95 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/208.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/209.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/209.woff2 new file mode 100644 index 00000000..152bbef2 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/209.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/21.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/21.woff2 new file mode 100644 index 00000000..aa9f8ffd Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/21.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/210.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/210.woff2 new file mode 100644 index 00000000..ea2ef338 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/210.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/211.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/211.woff2 new file mode 100644 index 00000000..44a33cdc Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/211.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/212.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/212.woff2 new file mode 100644 index 00000000..b5b7b5e9 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/212.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/213.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/213.woff2 new file mode 100644 index 00000000..ff9b00dc Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/213.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/214.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/214.woff2 new file mode 100644 index 00000000..6cfe0edc Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/214.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/215.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/215.woff2 new file mode 100644 index 00000000..c80ccd20 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/215.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/216.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/216.woff2 new file mode 100644 index 00000000..cdbbee2c Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/216.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/217.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/217.woff2 new file mode 100644 index 00000000..0eeeed32 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/217.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/218.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/218.woff2 new file mode 100644 index 00000000..43f9d37e Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/218.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/219.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/219.woff2 new file mode 100644 index 00000000..0fb62b10 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/219.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/22.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/22.woff2 new file mode 100644 index 00000000..d1bcdc2a Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/22.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/220.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/220.woff2 new file mode 100644 index 00000000..f7060934 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/220.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/221.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/221.woff2 new file mode 100644 index 00000000..82789984 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/221.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/222.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/222.woff2 new file mode 100644 index 00000000..aa0a1c35 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/222.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/223.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/223.woff2 new file mode 100644 index 00000000..e8f38f53 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/223.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/224.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/224.woff2 new file mode 100644 index 00000000..d73d0e6e Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/224.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/225.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/225.woff2 new file mode 100644 index 00000000..60ff8ccf Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/225.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/226.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/226.woff2 new file mode 100644 index 00000000..7fadccb3 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/226.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/227.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/227.woff2 new file mode 100644 index 00000000..8a3d4458 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/227.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/228.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/228.woff2 new file mode 100644 index 00000000..b0d09e31 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/228.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/229.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/229.woff2 new file mode 100644 index 00000000..ec3fb31a Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/229.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/23.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/23.woff2 new file mode 100644 index 00000000..8bc6840e Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/23.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/230.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/230.woff2 new file mode 100644 index 00000000..2cc76cc2 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/230.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/231.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/231.woff2 new file mode 100644 index 00000000..0a0f48b7 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/231.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/232.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/232.woff2 new file mode 100644 index 00000000..63bdf52d Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/232.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/233.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/233.woff2 new file mode 100644 index 00000000..7b353876 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/233.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/234.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/234.woff2 new file mode 100644 index 00000000..c2a15d65 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/234.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/235.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/235.woff2 new file mode 100644 index 00000000..977cc4be Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/235.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/236.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/236.woff2 new file mode 100644 index 00000000..141a0b51 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/236.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/237.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/237.woff2 new file mode 100644 index 00000000..f3ea633b Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/237.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/238.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/238.woff2 new file mode 100644 index 00000000..837793f7 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/238.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/239.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/239.woff2 new file mode 100644 index 00000000..d430d15c Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/239.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/24.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/24.woff2 new file mode 100644 index 00000000..29aa313b Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/24.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/240.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/240.woff2 new file mode 100644 index 00000000..5f0b25c6 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/240.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/241.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/241.woff2 new file mode 100644 index 00000000..739c03be Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/241.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/242.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/242.woff2 new file mode 100644 index 00000000..2553958a Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/242.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/243.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/243.woff2 new file mode 100644 index 00000000..4253c514 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/243.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/25.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/25.woff2 new file mode 100644 index 00000000..2ee7d97a Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/25.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/26.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/26.woff2 new file mode 100644 index 00000000..4ee94cd9 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/26.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/27.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/27.woff2 new file mode 100644 index 00000000..a1fde879 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/27.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/28.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/28.woff2 new file mode 100644 index 00000000..3d0b2e41 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/28.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/29.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/29.woff2 new file mode 100644 index 00000000..aeb49dea Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/29.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/3.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/3.woff2 new file mode 100644 index 00000000..526e9e9c Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/3.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/30.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/30.woff2 new file mode 100644 index 00000000..647cbc37 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/30.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/31.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/31.woff2 new file mode 100644 index 00000000..f53942c9 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/31.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/32.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/32.woff2 new file mode 100644 index 00000000..e5601d9f Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/32.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/33.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/33.woff2 new file mode 100644 index 00000000..f2f30fcd Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/33.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/34.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/34.woff2 new file mode 100644 index 00000000..3ee09de5 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/34.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/35.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/35.woff2 new file mode 100644 index 00000000..ee7e81f5 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/35.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/36.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/36.woff2 new file mode 100644 index 00000000..c134112c Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/36.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/37.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/37.woff2 new file mode 100644 index 00000000..dcac4f6c Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/37.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/38.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/38.woff2 new file mode 100644 index 00000000..48d47c05 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/38.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/39.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/39.woff2 new file mode 100644 index 00000000..291495a1 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/39.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/4.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/4.woff2 new file mode 100644 index 00000000..caa013db Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/4.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/40.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/40.woff2 new file mode 100644 index 00000000..2f62a578 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/40.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/41.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/41.woff2 new file mode 100644 index 00000000..547b571e Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/41.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/42.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/42.woff2 new file mode 100644 index 00000000..215a508a Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/42.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/43.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/43.woff2 new file mode 100644 index 00000000..1316456f Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/43.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/44.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/44.woff2 new file mode 100644 index 00000000..90218e93 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/44.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/45.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/45.woff2 new file mode 100644 index 00000000..5e6b5aab Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/45.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/46.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/46.woff2 new file mode 100644 index 00000000..29a6a37e Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/46.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/47.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/47.woff2 new file mode 100644 index 00000000..8d172acc Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/47.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/48.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/48.woff2 new file mode 100644 index 00000000..aef53ad3 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/48.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/49.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/49.woff2 new file mode 100644 index 00000000..0752ffc3 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/49.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/5.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/5.woff2 new file mode 100644 index 00000000..6896c27e Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/5.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/50.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/50.woff2 new file mode 100644 index 00000000..131ece36 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/50.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/51.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/51.woff2 new file mode 100644 index 00000000..989b1541 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/51.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/52.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/52.woff2 new file mode 100644 index 00000000..e1a7c812 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/52.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/53.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/53.woff2 new file mode 100644 index 00000000..2756cbba Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/53.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/54.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/54.woff2 new file mode 100644 index 00000000..6ea9f95b Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/54.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/55.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/55.woff2 new file mode 100644 index 00000000..388c509c Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/55.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/56.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/56.woff2 new file mode 100644 index 00000000..d792327c Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/56.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/57.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/57.woff2 new file mode 100644 index 00000000..14aceff8 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/57.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/58.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/58.woff2 new file mode 100644 index 00000000..b6a2b5e6 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/58.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/59.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/59.woff2 new file mode 100644 index 00000000..1097d8bf Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/59.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/6.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/6.woff2 new file mode 100644 index 00000000..23c6d4b2 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/6.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/60.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/60.woff2 new file mode 100644 index 00000000..d3716fb9 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/60.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/61.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/61.woff2 new file mode 100644 index 00000000..ce4317d5 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/61.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/62.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/62.woff2 new file mode 100644 index 00000000..dc841385 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/62.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/63.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/63.woff2 new file mode 100644 index 00000000..a57de748 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/63.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/64.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/64.woff2 new file mode 100644 index 00000000..497fc5c8 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/64.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/65.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/65.woff2 new file mode 100644 index 00000000..be881ac1 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/65.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/66.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/66.woff2 new file mode 100644 index 00000000..5a23d8d0 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/66.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/67.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/67.woff2 new file mode 100644 index 00000000..f5cb567a Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/67.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/68.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/68.woff2 new file mode 100644 index 00000000..ea2f4236 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/68.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/69.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/69.woff2 new file mode 100644 index 00000000..2733e031 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/69.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/7.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/7.woff2 new file mode 100644 index 00000000..8b49b0a9 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/7.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/70.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/70.woff2 new file mode 100644 index 00000000..4001138f Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/70.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/71.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/71.woff2 new file mode 100644 index 00000000..076552b1 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/71.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/72.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/72.woff2 new file mode 100644 index 00000000..31c3acbc Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/72.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/73.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/73.woff2 new file mode 100644 index 00000000..27bdcab4 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/73.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/74.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/74.woff2 new file mode 100644 index 00000000..0b2019e9 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/74.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/75.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/75.woff2 new file mode 100644 index 00000000..9468fd01 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/75.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/76.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/76.woff2 new file mode 100644 index 00000000..1e7ee0a6 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/76.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/77.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/77.woff2 new file mode 100644 index 00000000..dcd3a833 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/77.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/78.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/78.woff2 new file mode 100644 index 00000000..767c3ad9 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/78.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/79.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/79.woff2 new file mode 100644 index 00000000..48deb8c0 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/79.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/8.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/8.woff2 new file mode 100644 index 00000000..9e60c35d Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/8.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/80.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/80.woff2 new file mode 100644 index 00000000..fb061b82 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/80.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/81.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/81.woff2 new file mode 100644 index 00000000..ed92d607 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/81.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/82.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/82.woff2 new file mode 100644 index 00000000..f328091c Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/82.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/83.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/83.woff2 new file mode 100644 index 00000000..81adb17d Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/83.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/84.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/84.woff2 new file mode 100644 index 00000000..a7bb7fdb Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/84.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/85.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/85.woff2 new file mode 100644 index 00000000..ac7414e8 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/85.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/86.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/86.woff2 new file mode 100644 index 00000000..02d1d164 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/86.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/87.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/87.woff2 new file mode 100644 index 00000000..42250af2 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/87.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/88.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/88.woff2 new file mode 100644 index 00000000..c1652c1e Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/88.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/89.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/89.woff2 new file mode 100644 index 00000000..e76d2fd9 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/89.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/9.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/9.woff2 new file mode 100644 index 00000000..52988b71 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/9.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/90.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/90.woff2 new file mode 100644 index 00000000..03e459af Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/90.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/91.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/91.woff2 new file mode 100644 index 00000000..75ea7eb4 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/91.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/92.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/92.woff2 new file mode 100644 index 00000000..f35b2826 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/92.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/93.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/93.woff2 new file mode 100644 index 00000000..769a2d2d Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/93.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/94.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/94.woff2 new file mode 100644 index 00000000..fdb479f5 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/94.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/95.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/95.woff2 new file mode 100644 index 00000000..702cddfd Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/95.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/96.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/96.woff2 new file mode 100644 index 00000000..d7ec6d68 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/96.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/97.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/97.woff2 new file mode 100644 index 00000000..98191d15 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/97.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/98.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/98.woff2 new file mode 100644 index 00000000..7a7efa12 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/98.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/99.woff2 b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/99.woff2 new file mode 100644 index 00000000..ddd4f449 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/99.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/index.html b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/index.html new file mode 100644 index 00000000..b417f5cb --- /dev/null +++ b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/index.html @@ -0,0 +1,368 @@ + + + + + + + + + + + + + + diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/reporter.json b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/reporter.json new file mode 100644 index 00000000..7b4acb23 --- /dev/null +++ b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/reporter.json @@ -0,0 +1 @@ +{"config":{"_":[],"i":"./tmp/LXGWWenKaiScreen.ttf","o":"./fonts/lxgwwenkaiscreen","renameOutputFont":"[index][ext]","destFold":"./fonts/lxgwwenkaiscreen","threads":{},"input":"./tmp/LXGWWenKaiScreen.ttf"},"message":{"windows":{"copyright":{"en":"Copyright 2021-2024 LXGW (https://github.com/lxgw/LxgwWenKai-Screen)\r\nCopyright 2020 The Klee Project Authors (https://github.com/fontworks-fonts/Klee)"},"fontFamily":{"en":"LXGW WenKai Screen","zh":"霞鹜文楷 �幕阅读版"},"fontSubfamily":{"en":"Regular","zh":"Regular"},"uniqueID":{"en":"LXGW WenKai Screen:Version 1.522"},"fullName":{"en":"LXGW WenKai Screen"},"version":{"en":"Version 1.522;March 19,2026"},"postScriptName":{"en":"LXGWWenKaiScreen"},"manufacturer":{"en":"LXGW / Fontworks Inc."},"designer":{"en":"LXGW / Fontworks Inc."},"manufacturerURL":{"en":"https://github.com/lxgw"},"designerURL":{"en":"https://github.com/lxgw"},"license":{"en":"This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is available with a FAQ at: https://scripts.sil.org/OFL"},"licenseURL":{"en":"https://scripts.sil.org/OFL"},"sampleText":{"zh":"北海虽赊,扶摇�接;东隅已�,桑榆�晚。"}}},"data":[{"name":"242.woff2","size":62636,"chars":"U+310-357,U+359-36f,U+1e9d-1eff,U+2000-2013,U+2015-2027,U+202f-203b,U+203d-2048,U+204a-205f,U+2070-2071,U+2074-208e,U+2090-209c,U+20a0-20c1,U+20db-20de,U+20e8,U+20f0,U+2101,U+2103,U+2106,U+2109-210a,U+210e-210f,U+2113,U+2117,U+211e-2120,U+2122-2123,U+2125-2127,U+2129-212b,U+212e,U+2132,U+2135,U+2141-2144,U+214b,U+214d-218b,U+2190-2199,U+21b6-21b9,U+21c4-21c6,U+21cb-21d0,U+21d2,U+21d4,U+21e6-21ea,U+21f5,U+2200-220d,U+220f,U+2211-2213,U+2215-2216,U+2219-2220,U+2223-2230,U+2234-2237,U+223c-223e,U+2242-2243,U+2245,U+2248,U+224b-224c,U+2251-2253,U+225c,U+2260-2262,U+2264-226b,U+226e-226f,U+2272-2273,U+2276-2277,U+2282-228b,U+2295-2299,U+229c-229e,U+22a0,U+22a2-22a5,U+22bf-22c5,U+22da-22db,U+22ee-22f1,U+2300,U+2302-2303,U+2305-2307,U+2312,U+2318,U+2325-2326,U+2329-232c,U+2373-237b,U+2387,U+238b,U+2393,U+239b-23ad,U+23b0-23b1,U+23be-23cc,U+23ce,U+23da-23db,U+23e3,U+23e8,U+23fb-23fe,U+2400-2426,U+2460-24cb,U+16fe2-16fe3,U+16ff2","diff":0,"charsSize":817},{"name":"243.woff2","size":19920,"chars":"U+24cc-25ab,U+25b1-25b3,U+25b6-25b7,U+25bc-25bd,U+25c0-25c1,U+25c6-25c7,U+25c9-25cc,U+25ce-25d3,U+25e2-25e6,U+25ef,U+25fb-25fc,U+2600-2603,U+2605-2606,U+2609,U+260e-2612,U+2616-2617,U+261c-261f,U+262f-2637,U+2640-2642,U+2660-266f,U+2672-267d,U+2686-268f,U+26a0,U+26aa-26ab,U+26bd-26be,U+26cb,U+26e4-26e7,U+2702,U+16ff3","diff":0,"charsSize":333},{"name":"240.woff2","size":73604,"chars":"U+27f-280,U+f98e-fa42","diff":0,"charsSize":183},{"name":"241.woff2","size":72672,"chars":"U+281-28b,U+28d-2ff,U+303,U+305,U+307-309,U+30e-30f,U+1ab0-1abe,U+1d00-1df5,U+1dfc-1e3d,U+1e40-1e71,U+1e74-1e8f,U+1e92-1e9c,U+203c,U+2049,U+213b,U+3004,U+3386,U+33c8,U+fa43-fa6d,U+fa7f,U+fad4,U+fb00-fb06,U+fe20-fe2d,U+fe32,U+fe45-fe52,U+fe54-fe66,U+fe68-fe6b,U+ff01-ff0e,U+ff10-ff11,U+ff14-ff26,U+ff29-ff2a,U+ff2c-ff2d,U+ff2f,U+ff31,U+ff33-ff40,U+ff44,U+ff46,U+ff4a,U+ff4c,U+ff51-ff52,U+ff54-ff59,U+ff5b-ff9f,U+ffa1-ffbe,U+ffc2-ffc7,U+ffca-ffcf,U+ffd2-ffd7,U+ffda-ffdc,U+ffe0-ffe6,U+ffe8-ffee,U+fffc-fffd,U+107a5,U+11fb0","diff":0,"charsSize":864},{"name":"239.woff2","size":74428,"chars":"U+250,U+252-253,U+255-258,U+25c-27e,U+d78d-d78f,U+d791-d797,U+d79a,U+d79c,U+d79e-d7a3,U+e003,U+e500-e507,U+ee01-ee02,U+f061,U+f6c3,U+f900-f98d","diff":0,"charsSize":215},{"name":"238.woff2","size":21412,"chars":"U+d68a-d68b,U+d68e-d68f,U+d691-d693,U+d695-d69e,U+d6a0,U+d6a2-d6a7,U+d6a9-d6c3,U+d6c6-d6c7,U+d6c9-d6cb,U+d6cd-d6d0,U+d6d2-d6d3,U+d6d5-d6d6,U+d6d8,U+d6da-d6df,U+d6e1-d6e3,U+d6e5-d6e7,U+d6e9-d6ef,U+d6f1-d6fb,U+d6fe-d6ff,U+d701-d703,U+d705-d710,U+d712-d717,U+d71a-d71b,U+d71d-d71f,U+d721-d727,U+d72a,U+d72c-d733,U+d735-d737,U+d739-d73b,U+d73d-d743,U+d745-d748,U+d74a-d74f,U+d752-d753,U+d755-d756,U+d75a-d75f,U+d762-d764,U+d766-d768,U+d76a-d76b,U+d76d-d76f,U+d771-d773,U+d775-d77b,U+d77e-d787,U+d78a-d78b","diff":0,"charsSize":205},{"name":"237.woff2","size":14984,"chars":"U+d599-d5a4,U+d5a6-d5c7,U+d5ca-d5cb,U+d5cd-d5cf,U+d5d1-d5d7,U+d5da,U+d5dc,U+d5de-d5e3,U+d5e6-d5e7,U+d5e9-d5eb,U+d5ed-d5f3,U+d5f6,U+d5f8,U+d5fa-d5ff,U+d602-d603,U+d605-d607,U+d609-d60f,U+d612,U+d616-d61b,U+d61d-d637,U+d63a-d63b,U+d63d-d63f,U+d641-d647,U+d64a,U+d64c,U+d64e-d650,U+d652-d653,U+d656-d657,U+d659-d65b,U+d65d-d666,U+d668,U+d66a-d66f,U+d672-d682,U+d684-d689","diff":0,"charsSize":196},{"name":"236.woff2","size":15916,"chars":"U+d49e-d4a8,U+d4aa-d4cb,U+d4cd-d4cf,U+d4d1-d4e7,U+d4e9-d4ef,U+d4f1-d4f7,U+d4f9-d4fc,U+d4fe-d503,U+d505-d507,U+d509-d50b,U+d50d-d513,U+d516-d53b,U+d53e-d53f,U+d541-d543,U+d545-d54b,U+d54e,U+d550,U+d552-d557,U+d55a-d55b,U+d55d-d55f,U+d561-d564,U+d566-d567,U+d56a,U+d56c,U+d56e-d573,U+d576-d577,U+d579-d57b,U+d57d-d583,U+d586,U+d58a-d58f,U+d591-d598","diff":0,"charsSize":212},{"name":"235.woff2","size":13436,"chars":"U+d3ba-d3bb,U+d3bd-d3c3,U+d3c6-d3c7,U+d3ca-d3cf,U+d3d1-d3eb,U+d3ee-d3ef,U+d3f1-d3f3,U+d3f5-d3fb,U+d3fd-d3fe,U+d400,U+d402-d407,U+d409-d43f,U+d441-d443,U+d445-d45b,U+d45d-d45f,U+d461-d46e,U+d470-d477,U+d47a-d47b,U+d47d-d47f,U+d481,U+d483-d487,U+d489-d48a,U+d48c,U+d48e-d493,U+d495-d49d","diff":0,"charsSize":200},{"name":"234.woff2","size":13096,"chars":"U+d29e-d2a3,U+d2a5-d2ab,U+d2ad-d2b0,U+d2b2-d2b7,U+d2ba-d2bb,U+d2bd-d2be,U+d2c1,U+d2c3-d2c7,U+d2ca,U+d2cc-d2d3,U+d2d5-d2d7,U+d2d9-d2ef,U+d2f2-d2f3,U+d2f5-d2f7,U+d2f9-d2ff,U+d302-d304,U+d306-d30b,U+d30f,U+d311-d313,U+d315,U+d317-d31b,U+d31e,U+d322-d324,U+d326-d327,U+d32a-d32b,U+d32d-d32f,U+d331-d337,U+d33a,U+d33e-d343,U+d346-d37b,U+d37e-d37f,U+d381-d383,U+d385-d38b,U+d38d-d38e,U+d392-d397,U+d39a-d39b,U+d39d-d39f,U+d3a1-d3a7,U+d3aa,U+d3ac,U+d3ae-d3b3,U+d3b5-d3b7,U+d3b9","diff":0,"charsSize":222},{"name":"232.woff2","size":11288,"chars":"U+d092-d0a3,U+d0a6-d0a7,U+d0a9-d0ab,U+d0ad-d0b3,U+d0b6,U+d0b8,U+d0ba-d0bf,U+d0c2-d0c3,U+d0c5-d0c7,U+d0ca-d0cf,U+d0d2,U+d0d6-d0db,U+d0de-d0df,U+d0e1-d0e3,U+d0e5-d0eb,U+d0ee,U+d0f0,U+d0f2-d0f7,U+d0f9-d12f,U+d132-d133,U+d135-d137,U+d139-d13f,U+d142,U+d146-d14b,U+d14e-d14f,U+d151-d153,U+d155-d15b,U+d15e,U+d160,U+d162-d167,U+d169-d16b,U+d16d-d17b,U+d17d-d183,U+d185-d187,U+d189-d19f,U+d1a2-d1a3,U+d1a5-d1a7,U+d1a9-d1ac","diff":0,"charsSize":230},{"name":"233.woff2","size":17104,"chars":"U+d1ad-d1af,U+d1b2,U+d1b4,U+d1b6-d1b9,U+d1bb,U+d1bd-d1d7,U+d1d9-d1f3,U+d1f5-d206,U+d208-d20f,U+d211-d22b,U+d22e-d22f,U+d231-d233,U+d235-d23b,U+d23d-d23e,U+d240,U+d242-d247,U+d249-d25b,U+d25d-d263,U+d265-d27f,U+d281-d283,U+d285-d287,U+d289-d294,U+d296-d29b,U+d29d","diff":0,"charsSize":216},{"name":"230.woff2","size":11240,"chars":"U+ce7d-ce83,U+ce86,U+ce88,U+ce8a-ce8f,U+ce92-ce93,U+ce95-ce97,U+ce99-ce9f,U+cea2,U+cea6-ceab,U+cead-cee3,U+cee6-cee7,U+cee9-ceea,U+ceed-cef3,U+cef6,U+cefa-ceff,U+cf02-cf03,U+cf05-cf07,U+cf09-cf0f,U+cf12,U+cf14,U+cf16-cf1b,U+cf1d-cf1f,U+cf21-cf23,U+cf25-cf2b,U+cf2e,U+cf31-cf37,U+cf39-cf53,U+cf56-cf57,U+cf59-cf5b,U+cf5d-cf63,U+cf66,U+cf68,U+cf6a-cf6f,U+cf72-cf73,U+cf75-cf77,U+cf79-cf84,U+cf86-cf8b,U+cf8d-cf90","diff":0,"charsSize":222},{"name":"231.woff2","size":15544,"chars":"U+cf91-cfa0,U+cfa2-cfa7,U+cfa9-cfaf,U+cfb1-cfc3,U+cfc5-cfdf,U+cfe2-cfe3,U+cfe5-cfe7,U+cfe9-cfef,U+cff2,U+cff4,U+cff6-cffb,U+cffd-cfff,U+d001-d003,U+d005-d010,U+d012-d017,U+d019-d02c,U+d02e-d033,U+d036-d037,U+d039-d03b,U+d03d-d043,U+d045-d046,U+d048-d04f,U+d051-d057,U+d059-d05f,U+d061-d06b,U+d06e-d06f,U+d071-d073,U+d075-d07b,U+d07e-d080,U+d082-d091","diff":0,"charsSize":223},{"name":"229.woff2","size":20208,"chars":"U+cd85-cd93,U+cd96-cd97,U+cd99-cd9b,U+cd9d-cda3,U+cda6,U+cda8,U+cdaa-cdaf,U+cdb1-cdc3,U+cdc5-cdcb,U+cdcd-cde7,U+cde9-cdf8,U+cdfa,U+cdfc-ce03,U+ce05-ce0b,U+ce0d-ce18,U+ce1a-ce1f,U+ce22-ce23,U+ce25-ce27,U+ce29-ce2f,U+ce31-ce34,U+ce36-ce57,U+ce5a-ce5b,U+ce5d-ce5f,U+ce62-ce67,U+ce6a,U+ce6c,U+ce6e-ce73,U+ce76-ce77,U+ce79-ce7b","diff":0,"charsSize":212},{"name":"228.woff2","size":11808,"chars":"U+cc9f,U+cca1-cca7,U+ccaa,U+ccae-ccb3,U+ccb6-ccb7,U+ccb9-ccbb,U+ccbd-ccc3,U+ccc5-ccc6,U+ccc8,U+ccca-cccf,U+ccd1-ccd3,U+ccd5-cce3,U+cce5-cceb,U+cced-cd07,U+cd0a-cd0b,U+cd0d-cd0f,U+cd11-cd17,U+cd19-cd1a,U+cd1c,U+cd1e-cd23,U+cd25-cd27,U+cd29-cd2b,U+cd2d-cd5b,U+cd5d-cd63,U+cd65-cd77,U+cd79-cd84","diff":0,"charsSize":200},{"name":"226.woff2","size":15832,"chars":"U+cb04-cb0f,U+cb11-cb13,U+cb15-cb17,U+cb19-cb1f,U+cb21-cb40,U+cb42-cb47,U+cb4a-cb4b,U+cb4d-cb4f,U+cb51-cb57,U+cb5a-cb5c,U+cb5e-cb63,U+cb65-cbb5","diff":0,"charsSize":165},{"name":"227.woff2","size":12220,"chars":"U+cbb6-cbb7,U+cbb9-cbd3,U+cbd5-cbe3,U+cbe5-cbe6,U+cbe8-cc0b,U+cc0e-cc0f,U+cc11-cc13,U+cc15-cc1b,U+cc1e-cc20,U+cc23-cc26,U+cc2a-cc2b,U+cc2d,U+cc2f,U+cc31-cc37,U+cc3a,U+cc3f-cc43,U+cc46-cc47,U+cc49-cc4b,U+cc4d-cc53,U+cc56,U+cc5a-cc5f,U+cc61-cc63,U+cc65-cc67,U+cc69-cc74,U+cc76-cc97,U+cc9a-cc9b,U+cc9d-cc9e","diff":0,"charsSize":193},{"name":"225.woff2","size":13312,"chars":"U+ca48-ca4b,U+ca4e-ca4f,U+ca51-ca53,U+ca55-ca5b,U+ca5e-ca60,U+ca62-ca67,U+ca69-ca83,U+ca85-ca97,U+ca99-cabb,U+cabe-cabf,U+cac1-cac3,U+cac5-cace,U+cad0,U+cad2,U+cad4-cad7,U+cada-cb03","diff":0,"charsSize":169},{"name":"223.woff2","size":17268,"chars":"U+c84f-c853,U+c855-c86f,U+c872-c873,U+c875-c877,U+c879-c87f,U+c882,U+c884,U+c888-c88a,U+c88d-c89e,U+c8a0,U+c8a2-c8a7,U+c8a9-c8bc,U+c8be-c8c3,U+c8c5-c8c7,U+c8c9-c8cb,U+c8cd-c8d3,U+c8d5-c8df,U+c8e1-c8e3,U+c8e5-c8f4,U+c8f6-c8fb,U+c8fe-c8ff,U+c901-c903,U+c905-c90b,U+c90e,U+c910,U+c912-c917,U+c919-c92b,U+c92d-c933,U+c935-c947","diff":0,"charsSize":214},{"name":"222.woff2","size":15748,"chars":"U+c6fb-c703,U+c706-c707,U+c709-c70b,U+c70d-c713,U+c716,U+c718,U+c71a-c71f,U+c722-c723,U+c725-c727,U+c729-c72f,U+c732,U+c734,U+c736,U+c738-c73b,U+c73e-c73f,U+c741-c743,U+c745-c749,U+c74b,U+c74e,U+c750,U+c759-c75b,U+c75d-c75f,U+c761-c767,U+c769-c773,U+c776-c777,U+c779-c77b,U+c77e-c782,U+c786,U+c78b-c78d,U+c78f,U+c792-c793,U+c795,U+c799-c79f,U+c7a2,U+c7a7-c7ab,U+c7ae-c7af,U+c7b1-c7b3,U+c7b5-c7bb,U+c7be,U+c7c2-c7c7,U+c7c9-c7cb,U+c7cd,U+c7cf-c7dc,U+c7de-c7e3,U+c7e5-c7e7,U+c7e9-c7ff,U+c802-c803,U+c805-c807,U+c809,U+c80b-c80f,U+c812,U+c814,U+c817-c81b,U+c81e-c81f,U+c821-c823,U+c825-c82b,U+c82d-c82e,U+c830,U+c832-c837,U+c839-c83b,U+c83d-c83f,U+c841-c847,U+c849-c84b,U+c84e","diff":0,"charsSize":241},{"name":"224.woff2","size":15152,"chars":"U+c948-c94f,U+c952-c953,U+c955-c957,U+c959-c95f,U+c961-c96b,U+c96d-c96f,U+c971-c973,U+c975-c97b,U+c97d-c987,U+c98a-c98b,U+c98d-c98f,U+c991-c997,U+c99a-c99c,U+c99e-c9bf,U+c9c2-c9c3,U+c9c5-c9c6,U+c9c9,U+c9cb-c9cf,U+c9d2,U+c9d4,U+c9d7-c9d8,U+c9db,U+c9de-c9df,U+c9e1,U+c9e3,U+c9e5-c9e6,U+c9e8-c9eb,U+c9ee,U+c9f2-c9f7,U+c9fa-c9fb,U+c9fd-ca07,U+ca0a,U+ca0e-ca13,U+ca15-ca47","diff":0,"charsSize":207},{"name":"221.woff2","size":14864,"chars":"U+c5a7-c5b3,U+c5b6-c5b7,U+c5ba,U+c5be-c5c3,U+c5cb,U+c5cd,U+c5cf,U+c5d2-c5d3,U+c5d5-c5d7,U+c5d9-c5df,U+c5e2,U+c5e4,U+c5e6-c5eb,U+c5ef,U+c5f1-c5f3,U+c5f5,U+c5f8-c5fb,U+c602-c604,U+c609-c60b,U+c60d-c60f,U+c611-c617,U+c619-c61a,U+c61d-c623,U+c626-c627,U+c629-c62b,U+c62f,U+c631-c632,U+c636,U+c638,U+c63a,U+c63c-c63f,U+c642-c643,U+c645-c647,U+c649-c652,U+c656-c65b,U+c65e-c65f,U+c661-c66b,U+c66d-c670,U+c672-c677,U+c67a-c67b,U+c67d-c67f,U+c681-c687,U+c689-c693,U+c696-c697,U+c699-c69b,U+c69d-c6a3,U+c6a6,U+c6a8,U+c6aa-c6af,U+c6b2-c6b3,U+c6b5-c6b7,U+c6b9-c6bf,U+c6c2,U+c6c4,U+c6c6-c6cb,U+c6ce-c6cf,U+c6d1-c6d3,U+c6d5-c6db,U+c6de-c6df,U+c6e2-c6e7,U+c6ea-c6eb,U+c6ed-c6ef,U+c6f1-c6f8,U+c6fa","diff":0,"charsSize":235},{"name":"220.woff2","size":15784,"chars":"U+c490-c49b,U+c49d-c4b7,U+c4b9-c4bb,U+c4bd-c4e8,U+c4ea-c4ef,U+c4f2-c4f3,U+c4f5-c4f7,U+c4f9-c4fe,U+c502-c50b,U+c50d-c527,U+c52a-c52b,U+c52d-c52f,U+c531-c537,U+c53a,U+c53c,U+c53e-c543,U+c546-c547,U+c54b,U+c54d,U+c54f-c552,U+c556,U+c55a-c55c,U+c55f,U+c562-c563,U+c565-c567,U+c569-c56f,U+c572,U+c576-c57b,U+c57e-c57f,U+c581-c583,U+c585-c586,U+c588-c58b,U+c58e,U+c590,U+c592-c594,U+c596,U+c599-c59b,U+c59d-c5a6","diff":0,"charsSize":222},{"name":"219.woff2","size":14084,"chars":"U+c3b4-c3bf,U+c3c1-c3d7,U+c3da-c3db,U+c3dd-c3de,U+c3e1-c3e8,U+c3ea-c3ec,U+c3ee-c3f3,U+c3f5-c40f,U+c411-c42b,U+c42d-c42f,U+c431-c43b,U+c43d-c447,U+c449-c463,U+c466-c467,U+c469-c46b,U+c46d-c473,U+c475-c478,U+c47a-c47f,U+c481-c48f","diff":0,"charsSize":199},{"name":"218.woff2","size":13292,"chars":"U+c2a0-c2a3,U+c2a6-c2a7,U+c2a9-c2ab,U+c2ae-c2b3,U+c2b6,U+c2b8,U+c2ba-c2db,U+c2de-c2df,U+c2e1-c2e2,U+c2e5-c2ea,U+c2ee,U+c2f0,U+c2f2-c2f5,U+c2f7,U+c2fa,U+c2fd-c2ff,U+c301-c307,U+c30a-c30b,U+c30e-c312,U+c316-c317,U+c319-c31b,U+c31d-c323,U+c325-c328,U+c32a-c344,U+c346-c367,U+c36a-c36b,U+c36d-c36f,U+c371-c378,U+c37a-c37b,U+c37e-c383,U+c385-c387,U+c389-c38b,U+c38d-c3b3","diff":0,"charsSize":229},{"name":"216.woff2","size":14176,"chars":"U+c041-c057,U+c059-c05b,U+c05d-c05f,U+c061-c067,U+c06a-c08f,U+c092-c093,U+c095-c0a2,U+c0a4,U+c0a6-c0ab,U+c0ae,U+c0b1-c0b3,U+c0b7-c0bb,U+c0be,U+c0c2-c0c4,U+c0c6-c0c7,U+c0ca-c0cb,U+c0cd-c0cf,U+c0d1-c0d7,U+c0da,U+c0de-c0e3,U+c0e6-c0e7,U+c0e9-c0eb,U+c0ed-c0f3,U+c0f6,U+c0f8,U+c0fa-c0ff,U+c101-c11b,U+c11f,U+c121-c122,U+c125,U+c128-c12b,U+c12e,U+c132-c135,U+c137,U+c13a-c13b,U+c13d-c13f,U+c141-c147,U+c14a,U+c14e-c153,U+c155-c157,U+c159-c15b,U+c15d-c163,U+c165-c166,U+c16a-c16f,U+c171-c173,U+c175-c177,U+c179-c17b","diff":0,"charsSize":241},{"name":"217.woff2","size":15296,"chars":"U+c17c-c18b,U+c18f,U+c191-c193,U+c195-c19b,U+c19e,U+c1a0,U+c1a2-c1a4,U+c1a6-c1a7,U+c1a9-c1ab,U+c1ad-c1bc,U+c1be-c1c3,U+c1c5-c1df,U+c1e1-c1e3,U+c1e5-c1f2,U+c1f4-c1fb,U+c1fe-c1ff,U+c201-c203,U+c205-c20b,U+c20e,U+c210,U+c212-c217,U+c21a-c21b,U+c21d-c21e,U+c221-c227,U+c22a,U+c22c,U+c22e,U+c230,U+c233,U+c235-c247,U+c249-c24f,U+c251-c253,U+c255-c257,U+c259-c25f,U+c261-c264,U+c266-c26b,U+c26d-c26f,U+c271-c273,U+c275-c27b,U+c27e,U+c280,U+c282-c287,U+c289-c28f,U+c291-c297,U+c299-c29a,U+c29c,U+c29e-c29f","diff":0,"charsSize":236},{"name":"215.woff2","size":14524,"chars":"U+bf72-bfaf,U+bfb1-bfc4,U+bfc6-bfcb,U+bfce-bfcf,U+bfd1-bfd3,U+bfd5-bfdb,U+bfdd-c03b,U+c03d-c040","diff":0,"charsSize":199},{"name":"214.woff2","size":12452,"chars":"U+be8b,U+be8d-be8e,U+be92-be97,U+be99-bea7,U+bea9-becf,U+bed2-bed3,U+bed5-bed6,U+bed9-bedf,U+bee1-bee2,U+bee6-beeb,U+beed-bf00,U+bf02-bf07,U+bf0a-bf17,U+bf19-bf1a,U+bf1c,U+bf1e-bf3f,U+bf41-bf43,U+bf45-bf4f,U+bf52-bf54,U+bf56-bf71","diff":0,"charsSize":204},{"name":"212.woff2","size":13172,"chars":"U+bc2b-bc2c,U+bc2e-bc2f,U+bc32-bc33,U+bc35-bc37,U+bc39-bc3f,U+bc42,U+bc46-bc48,U+bc4a-bc4b,U+bc4e-bc4f,U+bc51-bc5c,U+bc5e-bc83,U+bc86-bc87,U+bc89-bc8a,U+bc8d-bc93,U+bc96,U+bc98,U+bc9b-bc9f,U+bca2-bca3,U+bca5-bca6,U+bca9-bcaf,U+bcb2,U+bcb6-bcbb,U+bcbe-bcbf,U+bcc1-bcc3,U+bcc5-bccc,U+bcce,U+bcd2-bcd4,U+bcd6-bcd7,U+bcd9-bcf3,U+bcf7,U+bcf9-bcfb,U+bcfd-bd03,U+bd06,U+bd08,U+bd0a-bd0f,U+bd11-bd23,U+bd25-bd2b,U+bd2d-bd3f,U+bd41-bd47,U+bd49-bd4b,U+bd4d-bd4f,U+bd51-bd57","diff":0,"charsSize":240},{"name":"213.woff2","size":16640,"chars":"U+bd5a-bd63,U+bd65-bd67,U+bd69-bd7f,U+bd82-bd83,U+bd85-bd86,U+bd8a-bd8f,U+bd92,U+bd94,U+bd96-bd98,U+bd9a-bd9b,U+bd9d-bdb7,U+bdb9-bdd3,U+bdd5-bddb,U+bddd-bdef,U+bdf1-bdf3,U+bdf5-bdf7,U+bdf9-bdff,U+be01-be0b,U+be0e-be0f,U+be11-be13,U+be15-be43,U+be46-be47,U+be49-be4b,U+be4d,U+be4f-be53,U+be56,U+be58,U+be5c-be5f,U+be62-be63,U+be65-be67,U+be69,U+be6b-be6f,U+be71-be72,U+be76-be7a,U+be7e-be7f,U+be81-be83,U+be85-be8a","diff":0,"charsSize":255},{"name":"211.woff2","size":16020,"chars":"U+baef-bafb,U+bafd-bb03,U+bb05-bb0e,U+bb10-bb17,U+bb19-bb1b,U+bb1d-bb33,U+bb37,U+bb39-bb3a,U+bb3e-bb43,U+bb46,U+bb48,U+bb4a-bb4c,U+bb4e,U+bb51-bb53,U+bb55-bb57,U+bb59-bb60,U+bb62,U+bb64-bb87,U+bb89-bb8b,U+bb8d-bb8f,U+bb91-bba3,U+bba5-bba7,U+bba9-bbab,U+bbad-bbb3,U+bbb5-bbbf,U+bbc1-bbc3,U+bbc5-bbc7,U+bbc9-bbcf,U+bbd1-bbd2,U+bbd4-bbf7,U+bbfa-bbfb,U+bbfd-bbfe,U+bc01-bc07,U+bc0a,U+bc0e,U+bc10,U+bc12-bc13,U+bc17,U+bc19-bc1a,U+bc1e,U+bc20-bc23,U+bc26,U+bc28,U+bc2a","diff":0,"charsSize":257},{"name":"210.woff2","size":12860,"chars":"U+b9b1-b9b3,U+b9b5-b9bb,U+b9be,U+b9c0,U+b9c2-b9c7,U+b9ca-b9cb,U+b9cd,U+b9d2-b9d7,U+b9da,U+b9dc,U+b9df-b9e0,U+b9e2,U+b9e6-b9e7,U+b9e9-b9eb,U+b9ed-b9f3,U+b9f6,U+b9fb-b9ff,U+ba01-ba07,U+ba09-ba14,U+ba16-ba37,U+ba3a-ba3b,U+ba3d-ba3f,U+ba41-ba47,U+ba4a,U+ba4c,U+ba4f-ba52,U+ba56-ba57,U+ba59-ba5b,U+ba5d-ba63,U+ba66,U+ba6a-ba6f,U+ba72-ba73,U+ba75-ba77,U+ba79-ba82,U+ba86,U+ba88-ba8b,U+ba8d-baa7,U+baaa,U+baad-baaf,U+bab1-bab7,U+baba,U+babc,U+babe-bac3,U+bac5-baee","diff":0,"charsSize":248},{"name":"209.woff2","size":19424,"chars":"U+b890-b8af,U+b8b1-b8b3,U+b8b5-b8b7,U+b8b9-b8bf,U+b8c1-b8cb,U+b8cd-b8cf,U+b8d1-b8d3,U+b8d5-b8e0,U+b8e2-b8e7,U+b8ea-b8eb,U+b8ed-b8ef,U+b8f1-b8f7,U+b8fa,U+b8fc,U+b8fe-b903,U+b905-b917,U+b919-b93b,U+b93e-b93f,U+b941-b943,U+b945-b957,U+b95a-b95b,U+b95d-b95f,U+b961-b967,U+b969-b96c,U+b96e-b973,U+b976-b977,U+b979-b97b,U+b97d-b983,U+b986,U+b988,U+b98a-b98d,U+b98f-b9ab,U+b9ae-b9af","diff":0,"charsSize":249},{"name":"207.woff2","size":17488,"chars":"U+b66d-b69b,U+b69e-b6a3,U+b6a5-b6aa,U+b6ac-b6b0,U+b6b2-b6ef,U+b6f1-b6f3,U+b6f5-b6f7,U+b6f9-b6ff,U+b702-b727,U+b72a-b72b,U+b72d-b72e,U+b731-b737,U+b73a,U+b73c-b743,U+b745-b747,U+b749-b74b,U+b74d-b750","diff":0,"charsSize":207},{"name":"208.woff2","size":12700,"chars":"U+b751-b753,U+b756-b75f,U+b761-b763,U+b765-b767,U+b769-b76f,U+b771-b774,U+b776-b77b,U+b77e-b77f,U+b781-b783,U+b785-b78b,U+b78e,U+b793-b795,U+b79a-b79b,U+b79d-b79f,U+b7a1-b7a7,U+b7aa,U+b7ae-b7b3,U+b7b6-b7b7,U+b7b9-b7c6,U+b7c8,U+b7ca-b7eb,U+b7ee-b7ef,U+b7f1-b7f3,U+b7f5-b7fb,U+b7fe,U+b802-b806,U+b80a-b80b,U+b80d-b80f,U+b811-b817,U+b81a,U+b81c,U+b81e-b823,U+b826-b827,U+b829-b82b,U+b82d-b833,U+b836,U+b83a-b83f,U+b841-b843,U+b845-b850,U+b852-b85b,U+b85e-b85f,U+b861-b863,U+b865-b86b,U+b86e,U+b870,U+b872-b877,U+b879-b87b,U+b87d-b88f","diff":0,"charsSize":246},{"name":"206.woff2","size":14704,"chars":"U+b58d-b59f,U+b5a2-b5a3,U+b5a5-b5a7,U+b5a9-b5aa,U+b5ac-b5b2,U+b5b6-b5ba,U+b5bd-b5bf,U+b5c1-b5c3,U+b5c5-b5cb,U+b5cd-b5ce,U+b5d2-b5d7,U+b5d9-b60f,U+b612-b613,U+b615-b617,U+b619-b624,U+b626-b62b,U+b62d-b647,U+b649-b663,U+b665-b66c","diff":0,"charsSize":199},{"name":"205.woff2","size":18180,"chars":"U+b46e-b47f,U+b481-b487,U+b489-b4a3,U+b4a5-b4ab,U+b4ad-b4b6,U+b4b8,U+b4ba-b4bf,U+b4c1-b4c7,U+b4c9-b4cf,U+b4d1-b4db,U+b4de-b4df,U+b4e1-b4e2,U+b4e5,U+b4e7-b4eb,U+b4ee,U+b4f0,U+b4f2-b4f7,U+b4f9-b513,U+b516-b517,U+b519-b51a,U+b51d-b523,U+b526,U+b52b-b52f,U+b532-b533,U+b535-b537,U+b539-b53f,U+b542,U+b546-b54a,U+b54d-b54f,U+b551-b553,U+b555-b55b,U+b55d-b55e,U+b562-b58c","diff":0,"charsSize":239},{"name":"204.woff2","size":16316,"chars":"U+b33d-b353,U+b357,U+b359-b35a,U+b35d-b35e,U+b360-b363,U+b366,U+b368,U+b36a,U+b36c-b36d,U+b36f,U+b372-b373,U+b375-b377,U+b379-b37f,U+b382,U+b384,U+b386-b38b,U+b38d-b38f,U+b391-b393,U+b395-b39f,U+b3a2-b3a7,U+b3a9-b3ab,U+b3ad-b3c3,U+b3c6-b3c7,U+b3c9-b3ca,U+b3cd,U+b3cf,U+b3d1-b3d3,U+b3d6,U+b3d8,U+b3da,U+b3dc,U+b3de-b3df,U+b3e1-b3e3,U+b3e5-b3e7,U+b3e9-b3fb,U+b3fd-b40f,U+b411-b417,U+b419-b41b,U+b41d-b41f,U+b421-b427,U+b42a,U+b42c-b433,U+b435-b44f,U+b452-b453,U+b455-b457,U+b459-b45f,U+b462,U+b464,U+b466-b46b,U+b46d","diff":0,"charsSize":243},{"name":"203.woff2","size":17256,"chars":"U+b1f6-b1fc,U+b1fe-b203,U+b206-b207,U+b209-b20a,U+b20d-b213,U+b216,U+b218,U+b21a-b21f,U+b221-b233,U+b235-b23b,U+b23d-b257,U+b259-b25b,U+b25d-b25f,U+b261-b267,U+b269-b273,U+b275-b27b,U+b27d-b283,U+b285-b288,U+b28a-b28f,U+b292-b293,U+b295-b297,U+b29b-b29f,U+b2a2-b2a4,U+b2a7-b2a9,U+b2ab,U+b2ad-b2c7,U+b2ca-b2cb,U+b2cd-b2cf,U+b2d1-b2d7,U+b2da,U+b2dc,U+b2de-b2e1,U+b2e3,U+b2e7,U+b2e9-b2ea,U+b2f0-b2f2,U+b2f6,U+b2f8,U+b2fc-b2fe,U+b302-b303,U+b305-b307,U+b309-b30f,U+b312,U+b316-b31b,U+b31d-b33c","diff":0,"charsSize":258},{"name":"202.woff2","size":12932,"chars":"U+b0ca-b0cf,U+b0d2-b0d3,U+b0d5-b0d7,U+b0d9-b0df,U+b0e1-b0e4,U+b0e6-b107,U+b10a,U+b10d-b10f,U+b111,U+b114-b117,U+b11a,U+b11e-b122,U+b126-b127,U+b129-b12b,U+b12d-b133,U+b136,U+b13a-b13f,U+b142-b143,U+b145-b147,U+b149-b14f,U+b152-b153,U+b156-b157,U+b159-b15b,U+b15d-b177,U+b17a-b17b,U+b17d-b17f,U+b181,U+b183-b187,U+b18a,U+b18c,U+b18e-b191,U+b195-b197,U+b199-b1a7,U+b1a9-b1cb,U+b1cd-b1cf,U+b1d1-b1d3,U+b1d5-b1db,U+b1dd-b1e7,U+b1ea-b1ef,U+b1f1-b1f5","diff":0,"charsSize":241},{"name":"201.woff2","size":14808,"chars":"U+afb2-afb7,U+afba-afbb,U+afbd-afbf,U+afc1-afc6,U+afca,U+afcc,U+afcf-afd3,U+afd5-afdb,U+afdd-afe7,U+afea-afef,U+aff1-aff3,U+aff5-b003,U+b005-b00b,U+b00d-b00f,U+b011-b013,U+b015-b01b,U+b01d-b027,U+b029-b043,U+b045-b047,U+b049,U+b04b,U+b04d-b052,U+b056,U+b058,U+b05a-b05c,U+b05e-b07b,U+b07e-b07f,U+b081-b083,U+b085-b08b,U+b08e,U+b090,U+b092-b097,U+b09b,U+b09d-b09e,U+b0a2-b0a7,U+b0aa,U+b0b0,U+b0b2,U+b0b6-b0b7,U+b0b9-b0bb,U+b0bd-b0c3,U+b0c6","diff":0,"charsSize":215},{"name":"200.woff2","size":12736,"chars":"U+aec8-aecb,U+aece,U+aed2-aed7,U+aed9-aedb,U+aedd-aeec,U+aeee-aef3,U+aef5-aef7,U+aef9-af06,U+af09-af0c,U+af0e-af0f,U+af11-af2b,U+af2e-af2f,U+af31-af33,U+af35-af3b,U+af3e,U+af40,U+af44-af47,U+af4a-af5c,U+af5e-af63,U+af66-af78,U+af7a-af7f,U+af81-af83,U+af85-af8f,U+af91-af94,U+af96-af9b,U+af9d-afb1","diff":0,"charsSize":199},{"name":"199.woff2","size":16452,"chars":"U+ada7-adbf,U+adc1-adc3,U+adc5-adc7,U+adc9-adcf,U+add1-add2,U+add4-addb,U+addd-addf,U+ade1-ade3,U+ade5-adf7,U+adfa-adfb,U+adfd-adfe,U+ae02-ae07,U+ae0a,U+ae0c,U+ae0e-ae13,U+ae15-ae2f,U+ae32-ae33,U+ae35-ae36,U+ae39-ae3f,U+ae42,U+ae44,U+ae47-ae49,U+ae4b,U+ae4f,U+ae51-ae53,U+ae55-ae5b,U+ae5e,U+ae62-ae64,U+ae66-ae67,U+ae6a-ae6b,U+ae6d-ae6f,U+ae71-ae7a,U+ae7e-ae83,U+ae86-aebb,U+aebf,U+aec1-aec3,U+aec5-aec7","diff":0,"charsSize":234},{"name":"197.woff2","size":55536,"chars":"U+9fb2-9fff,U+a4d0-a4ff,U+a700-a7b5,U+a7f1-a7f4,U+a7f7-a7ff,U+a92e,U+ab30-ab5f,U+ab64-ab65,U+ac02-ac03,U+ac05-ac06,U+ac0a-ac0f,U+ac18,U+ac1e-ac1f,U+ac21-ac23,U+ac25-ac2b,U+ac2e,U+ac32-ac37,U+ac3a-ac3f,U+ac41-ac4a,U+ac4c,U+ac4e-ac53,U+ac55-ac57,U+ac59-ac62","diff":0,"charsSize":438},{"name":"198.woff2","size":14904,"chars":"U+ac63-ac6f,U+ac72-ac73,U+ac75-ac76,U+ac79-ac7f,U+ac82,U+ac87-ac88,U+ac8d-ac8f,U+ac91-ac93,U+ac95-ac9b,U+ac9d-ac9e,U+aca2-aca7,U+acab,U+acad-acae,U+acb1-acb7,U+acba,U+acbe-acc0,U+acc2-acc3,U+acc5-accb,U+accd-acd6,U+acd8-acdf,U+ace2-ace3,U+ace5-ace6,U+ace9,U+aceb,U+aced-acee,U+acf2,U+acf4,U+acf7-acfb,U+acfe-acff,U+ad01-ad03,U+ad05-ad0b,U+ad0d-ad10,U+ad12-ad17,U+ad19-ad1b,U+ad1d-ad2c,U+ad2e-ad33,U+ad36-ad37,U+ad39-ad3b,U+ad3d-ad43,U+ad45-ad46,U+ad48,U+ad4a-ad4f,U+ad51-ad6b,U+ad6e-ad6f,U+ad71-ad72,U+ad77-ad7b,U+ad7e,U+ad80,U+ad83-ad87,U+ad8a-ad8b,U+ad8d-ad8f,U+ad91-ad9b,U+ad9d-ada3,U+ada5-ada6","diff":0,"charsSize":240},{"name":"195.woff2","size":58600,"chars":"U+9e13-9e14,U+9e16-9e19,U+9e1c,U+9e24,U+9e27,U+9e2e,U+9e30,U+9e34,U+9e3b-9e3c,U+9e40,U+9e4d,U+9e50,U+9e52-9e54,U+9e56,U+9e59,U+9e5d,U+9e5f-9e62,U+9e65,U+9e6e-9e6f,U+9e72,U+9e74-9e78,U+9e7b,U+9e80-9e81,U+9e83-9e84,U+9e86,U+9e89-9e8a,U+9e8c-9e91,U+9e94-9e96,U+9e98-9e9c,U+9e9e,U+9ea0-9ea4,U+9ea7-9ea8,U+9eaa-9eb3,U+9eb5-9eb7,U+9eb9-9eba,U+9ebf-9ec2,U+9ec5-9ec8,U+9eca-9ecb,U+9ed0,U+9ed3,U+9ed5-9ed7,U+9ed9-9eda,U+9ee1,U+9ee3-9ee4,U+9ee6,U+9eeb-9eee,U+9ef0-9ef1,U+9ef3,U+9ef5-9ef6,U+9ef8,U+9efa,U+9f00-9f06","diff":0,"charsSize":120},{"name":"196.woff2","size":52584,"chars":"U+9f07-9f08,U+9f0a,U+9f0c,U+9f0f,U+9f11-9f12,U+9f14,U+9f16,U+9f18,U+9f1a-9f1f,U+9f23-9f2b,U+9f2d-9f2e,U+9f30-9f33,U+9f35-9f36,U+9f38,U+9f3a,U+9f3c,U+9f3f-9f43,U+9f45-9f46,U+9f48-9f49,U+9f4c-9f4d,U+9f53,U+9f55-9f58,U+9f5a-9f5b,U+9f5d-9f5e,U+9f62,U+9f64-9f65,U+9f68-9f69,U+9f6b,U+9f6d-9f71,U+9f73-9f75,U+9f78-9f7e,U+9f81-9f82,U+9f8e-9f8f,U+9f91-9f93,U+9f96-9f98,U+9f9d-9f9e,U+9fa1-9fb1","diff":0,"charsSize":106},{"name":"193.woff2","size":51276,"chars":"U+9d01-9d05,U+9d08,U+9d0a-9d14,U+9d16-9d1a,U+9d1c,U+9d1e,U+9d20-9d22,U+9d24-9d25,U+9d27,U+9d29-9d2e,U+9d31-9d3a,U+9d3c-9d3e,U+9d40-9d41,U+9d43-9d50,U+9d54-9d5b,U+9d5e-9d5f,U+9d62-9d69,U+9d6b,U+9d6d-9d6e,U+9d70-9d71,U+9d73-9d86,U+9d88,U+9d8a-9d92,U+9d94-9d97","diff":0,"charsSize":122},{"name":"192.woff2","size":53736,"chars":"U+9c27,U+9c2a-9c2c,U+9c2e-9c30,U+9c34,U+9c36,U+9c38,U+9c3a,U+9c3c-9c3d,U+9c3f-9c44,U+9c46-9c47,U+9c4a-9c51,U+9c53,U+9c55,U+9c59-9c5c,U+9c5e,U+9c60-9c66,U+9c68-9c6c,U+9c6e-9c76,U+9c79,U+9c7b,U+9c7d-9c7e,U+9c80,U+9c83-9c84,U+9c89-9c8a,U+9c8c,U+9c8f,U+9c93,U+9c96-9c99,U+9c9d,U+9caa,U+9cac,U+9caf,U+9cb9,U+9cbe-9cc2,U+9cc8-9cc9,U+9cd1-9cd2,U+9cda-9cdb,U+9ce0-9ce1,U+9ce3-9ce4,U+9ce6,U+9ce8,U+9cea-9cf2,U+9cf5,U+9cf7-9d00","diff":0,"charsSize":115},{"name":"194.woff2","size":52636,"chars":"U+9d99,U+9d9b-9da4,U+9da6-9da8,U+9daa-9dae,U+9db0-9db3,U+9db5-9dba,U+9dbd-9dbf,U+9dc1,U+9dc3-9dd2,U+9dd4-9dd6,U+9dd8,U+9ddb-9de4,U+9de7-9dee,U+9df0-9df1,U+9df4-9df7,U+9dfb-9e0b,U+9e0d-9e12","diff":0,"charsSize":100},{"name":"190.woff2","size":54352,"chars":"U+9ae2-9ae5,U+9ae7-9aea,U+9aec,U+9aee,U+9af0-9af8,U+9afa,U+9afc-9b02,U+9b04-9b05,U+9b07,U+9b09-9b0e,U+9b10-9b12,U+9b14-9b1e,U+9b20-9b21,U+9b24,U+9b26,U+9b2a-9b2d,U+9b30,U+9b33-9b3a,U+9b3d-9b40,U+9b46,U+9b4a-9b4c,U+9b50,U+9b52-9b53,U+9b55-9b57,U+9b59,U+9b5b-9b6e,U+9b70-9b73,U+9b75-9b76,U+9b78-9b80,U+9b82,U+9b84-9b8a","diff":0,"charsSize":125},{"name":"189.woff2","size":56824,"chars":"U+99fb-99fe,U+9a00,U+9a02-9a04,U+9a06-9a0c,U+9a10-9a15,U+9a17-9a18,U+9a1a-9a2a,U+9a2c,U+9a2f,U+9a31-9a35,U+9a39-9a3d,U+9a3f,U+9a46-9a49,U+9a4b-9a4c,U+9a4e,U+9a50-9a54,U+9a56,U+9a58-9a59,U+9a5c-9a5e,U+9a60-9a61,U+9a63,U+9a66-9a69,U+9a6b,U+9a72,U+9a83,U+9a89,U+9a8d-9a8e,U+9a94-9a95,U+9a99,U+9aa6,U+9aa9-9aae,U+9ab2-9ab5,U+9ab9,U+9abb,U+9abd-9abf,U+9ac3-9ac4,U+9ac6-9aca,U+9acd-9ace,U+9ad0,U+9ad7,U+9ad9-9ade,U+9ae0","diff":0,"charsSize":121},{"name":"191.woff2","size":51736,"chars":"U+9b8b-9b8d,U+9b8f,U+9b93-9b99,U+9b9b-9b9d,U+9b9f-9ba9,U+9bac,U+9baf-9bbf,U+9bc2-9bc6,U+9bc8,U+9bcb-9bd3,U+9bd5,U+9bd8-9bda,U+9bdc,U+9bde-9be0,U+9be3,U+9be5-9be6,U+9be9,U+9bec-9bef,U+9bf1-9bf3,U+9bf5-9bfc,U+9bfe,U+9c00-9c07,U+9c0a-9c0c,U+9c0e-9c11,U+9c14-9c1f,U+9c21-9c22,U+9c24,U+9c26","diff":0,"charsSize":117},{"name":"188.woff2","size":55964,"chars":"U+990b,U+990e-990f,U+9914-9917,U+9919,U+991c-991d,U+991f-9920,U+9922-9927,U+9929-992b,U+992d,U+992f-9930,U+9932,U+9934,U+9936,U+9938-993a,U+993d,U+9940-9942,U+9944,U+9946-9947,U+994d-9951,U+9953,U+9956,U+9958-995b,U+995d,U+995f-9961,U+9964,U+9966,U+9973,U+9978-9979,U+997b,U+997e,U+9982-9983,U+9989,U+998c,U+998e,U+999a-99a4,U+99a6-99a7,U+99a9-99ab,U+99af-99b0,U+99b2,U+99b5-99c0,U+99c2-99cf,U+99d3,U+99d6-99d7,U+99da,U+99dc,U+99de,U+99e0-99e1,U+99e3-99ec,U+99ee-99f0,U+99f2-99fa","diff":0,"charsSize":139},{"name":"187.woff2","size":56264,"chars":"U+97fe,U+9800,U+9804,U+9809,U+980b,U+980d,U+9814-9816,U+9819-981b,U+981d-9820,U+9822-9823,U+9825,U+9827-982c,U+982e-982f,U+9831-9836,U+983a,U+983c-9845,U+9847-984b,U+9850-9852,U+9854-9855,U+9857,U+985a,U+985c-985d,U+985f-9861,U+9863-9864,U+9866,U+9868-986a,U+986d-986e,U+9872,U+988b,U+988e,U+9892,U+9895,U+9899,U+98a3,U+98a9-98ad,U+98b0-98b2,U+98b4-98b5,U+98b7-98bb,U+98bd-98c3,U+98c5,U+98c7,U+98c9-98cd,U+98cf-98d0,U+98d4,U+98d6-98d7,U+98dc-98dd,U+98e1,U+98e3-98e6,U+98ec,U+98ee,U+98f0,U+98f3,U+98f5-98fb,U+98ff-9902,U+9904,U+9906-9907","diff":0,"charsSize":135},{"name":"186.woff2","size":59268,"chars":"U+973b-973c,U+973f-9741,U+9743,U+9745-9747,U+9749-9751,U+9754-9755,U+9757-9758,U+975d,U+975f,U+9763-9764,U+9767,U+976a-9772,U+9775,U+9777-977b,U+977d-9784,U+9786-978a,U+978c,U+978e,U+9790,U+9793,U+9795-9797,U+9799-979c,U+979e-979f,U+97a1-97a2,U+97a4-97a5,U+97a7-97aa,U+97ac,U+97ae,U+97b0-97b1,U+97b3,U+97b5-97bc,U+97be-97c2,U+97c4-97c5,U+97c7-97c8,U+97ca,U+97cd-97d2,U+97d4-97d8,U+97da-97db,U+97df-97e5,U+97e8,U+97ee-97f2,U+97f4,U+97f7-97fa,U+97fc-97fd","diff":0,"charsSize":132},{"name":"184.woff2","size":60128,"chars":"U+943b-943d,U+9440-9443,U+9445-9449,U+944b,U+944d-9450,U+9452-9453,U+9455-945f,U+9461-9462,U+9464,U+9466-946a,U+946c,U+946e-946f,U+9471,U+9473-9476,U+9478,U+947a-947b,U+9480,U+9482-9484,U+9491,U+9496,U+9498,U+94c7,U+94cf,U+94d3-94d4,U+94da,U+94e6,U+94fb,U+951c,U+9520,U+9527,U+9533,U+953d,U+9543,U+9548,U+954b,U+9555,U+955a,U+9560,U+956e,U+9574-9575,U+9578-957e,U+9581,U+9584-9585,U+9587-9588,U+958a,U+958d,U+9590-9591,U+9595-9597,U+9599-95a0,U+95a2,U+95a6-95a7,U+95aa,U+95ae-95b0,U+95b2-95b5,U+95b7-95b8,U+95ba,U+95c0-95c2,U+95c4-95c5,U+95c9,U+95cd-95cf,U+95d1-95d2","diff":0,"charsSize":129},{"name":"185.woff2","size":65820,"chars":"U+95d3,U+95d7-95db,U+95dd,U+95df-95e0,U+95e3-95e4,U+95e6-95e7,U+95ec,U+95ff,U+9607,U+9613,U+9618,U+961b,U+961e,U+9620,U+9623-9629,U+962b-962d,U+962f-9630,U+9637-963a,U+963e,U+9641,U+9643,U+964a,U+964e-964f,U+9651-9653,U+9656-9657,U+9659-965a,U+965c,U+965e,U+9660,U+9665-9666,U+966b,U+966d-966f,U+9671,U+9679-967c,U+967e-9684,U+9687,U+968c,U+9691-9693,U+9696,U+969a,U+969d-96a6,U+96a9,U+96ab-96af,U+96b2,U+96b5,U+96b7,U+96ba,U+96bf,U+96c2-96c3,U+96ca,U+96d0-96d1,U+96d3-96d4,U+96d7-96d8,U+96da,U+96dd,U+96df,U+96e1,U+96e4-96e7,U+96eb-96ee,U+96f0-96f1,U+96f4-96f5,U+96f8,U+96fa,U+96fc-96fd,U+96ff,U+9702-9703,U+9705,U+970a-970c,U+9710,U+9712,U+9714-9715,U+9717-971b,U+971d,U+971f-9726,U+9728-9729,U+972b-972c,U+972e-972f,U+9731,U+9733-9737,U+973a","diff":0,"charsSize":166},{"name":"183.woff2","size":60692,"chars":"U+9392-9395,U+9397,U+9399-93a1,U+93a4-93a5,U+93a8,U+93ab,U+93ad,U+93af,U+93b1-93b2,U+93b4,U+93b6-93be,U+93c0-93c2,U+93c4-93c6,U+93c9,U+93cb,U+93ce-93d0,U+93d2-93d5,U+93d9-93db,U+93e0,U+93e3,U+93e5-93e7,U+93e9-93f4,U+93f6,U+93f8,U+93fa-93fc,U+93fe-9402,U+9404-940a,U+940c-940f,U+9411,U+9415-9418,U+941a-941f,U+9421-9425,U+9429-942a,U+942c-942d,U+942f-9431,U+9434,U+9436-9437,U+9439","diff":0,"charsSize":115},{"name":"182.woff2","size":58736,"chars":"U+92c9-92cb,U+92cd-92ce,U+92d0-92d1,U+92d3-92dc,U+92de,U+92e0-92e2,U+92e7,U+92e9,U+92eb-92ed,U+92f2-92f5,U+92f7,U+92f9-92fb,U+92fd-9300,U+9302-9303,U+9305,U+9309-930f,U+9311,U+9313-9314,U+9316-9317,U+931c-931e,U+9321,U+9323-9325,U+9327,U+9329-932a,U+932c-932d,U+9330-9332,U+9334-9335,U+9337,U+9339-933d,U+933f,U+9342,U+9344-9345,U+9348-934a,U+934c,U+934e-9353,U+9355-9357,U+9359-935a,U+935c-9363,U+9366-9368,U+936b,U+936d-936f,U+9371-9374,U+9377-9379,U+937b-937d,U+937f-9381,U+9383,U+9385-9386,U+9388-9389,U+938b-938e,U+9390-9391","diff":0,"charsSize":134},{"name":"181.woff2","size":58360,"chars":"U+91bb-91bf,U+91c2,U+91c4,U+91c6,U+91c8,U+91d6,U+91da-91db,U+91de-91e2,U+91e5,U+91e8,U+91ea-91f4,U+91f6,U+91f8,U+91fb-91ff,U+9202-9203,U+9205-9207,U+920a-920c,U+920e-920f,U+9212-9213,U+9216-921d,U+921f-9222,U+9224,U+9228-922d,U+922f,U+9231-9232,U+9235-9236,U+923b-923c,U+9241-9244,U+9246-9247,U+924a-924c,U+924e-9250,U+9252-9254,U+9256,U+9258-9259,U+925c-925d,U+925f-9261,U+9263,U+9265,U+9267-926b,U+926e-9273,U+9275-9277,U+9279,U+927c-927e,U+9281-9282,U+9284,U+9286-928d,U+928f-9290,U+9292,U+9294-9295,U+9297,U+9299,U+929b,U+929d-929f,U+92a1-92a2,U+92a4,U+92a7,U+92ad,U+92af-92b0,U+92b2,U+92b4-92b6,U+92b8-92ba,U+92bd-92c0,U+92c2,U+92c4,U+92c6","diff":0,"charsSize":161},{"name":"180.woff2","size":62084,"chars":"U+907b,U+907e,U+9085-9086,U+9089,U+908c-908e,U+9092,U+9094,U+9096,U+9098,U+909a,U+909c,U+909e-90a0,U+90a4-90a5,U+90a7-90a9,U+90ab,U+90ad,U+90b2,U+90b7,U+90bc-90bd,U+90bf-90c0,U+90c2-90c3,U+90c6,U+90c8-90c9,U+90cb-90cd,U+90d2,U+90d4-90d6,U+90d8-90da,U+90de,U+90e0,U+90e3,U+90e5,U+90e9-90ea,U+90ec,U+90ee,U+90f0-90f3,U+90f6-90f7,U+90f9-90fc,U+90ff-9101,U+9103,U+9105,U+9107-9108,U+910a-9111,U+9113,U+9115,U+9117-9118,U+911a-911d,U+911f-9121,U+9124-9126,U+9128-912c,U+912e,U+9133,U+9135,U+9137-9138,U+913b-9142,U+9144-9145,U+9147,U+9151,U+9153-9156,U+9158-9159,U+915b-915c,U+915f-9160,U+9166-9168,U+916b,U+916d,U+9173,U+917a-917c,U+9180-9182,U+9184,U+9186,U+9188,U+918a,U+918e-918f,U+9193-9199,U+919d,U+919f-91a1,U+91a4-91a9,U+91b0-91b3,U+91b6-91b9","diff":0,"charsSize":167},{"name":"179.woff2","size":56704,"chars":"U+8f0c-8f11,U+8f16-8f1a,U+8f20-8f24,U+8f27-8f28,U+8f2b-8f2e,U+8f30-8f32,U+8f34-8f37,U+8f39-8f3a,U+8f3c-8f3d,U+8f40-8f41,U+8f43,U+8f47-8f48,U+8f4a-8f4c,U+8f4f-8f53,U+8f55-8f5e,U+8f60,U+8f63,U+8f65,U+8f6a,U+8f80,U+8f8c,U+8f92,U+8f9d,U+8fa0-8fa2,U+8fa4-8fa5,U+8fa7,U+8faa,U+8fac,U+8fb3-8fb5,U+8fb7-8fb8,U+8fba-8fbc,U+8fbf-8fc0,U+8fc3,U+8fc6,U+8fc9-8fcd,U+8fcf,U+8fd2,U+8fd6-8fd7,U+8fda,U+8fe0-8fe1,U+8fe3,U+8fe7,U+8fec,U+8fef,U+8ff1-8ff2,U+8ff5-8ff6,U+8ffa-8ffc,U+8ffe-8fff,U+9007-9008,U+900c,U+900e,U+9013,U+9018,U+901c,U+9024-9025,U+9027-902b,U+9030-9031,U+9033-9034,U+9037,U+9039-903a,U+903d,U+903f-9040,U+9043,U+9045-9046,U+9048-9049,U+904c,U+9056,U+905a,U+905f,U+9061,U+9064,U+9066-9067,U+906a-906c,U+906f-9071,U+9073,U+9076,U+9079","diff":0,"charsSize":155},{"name":"178.woff2","size":56844,"chars":"U+8e27-8e28,U+8e2b,U+8e2d,U+8e32-8e33,U+8e36-8e38,U+8e3b-8e3c,U+8e3e-8e3f,U+8e43,U+8e45-8e46,U+8e4d-8e50,U+8e53-8e54,U+8e56-8e58,U+8e5a-8e5f,U+8e61-8e62,U+8e65,U+8e67-8e68,U+8e6a-8e6b,U+8e6e,U+8e71,U+8e73,U+8e75,U+8e77-8e79,U+8e7b,U+8e7d-8e7e,U+8e80,U+8e82-8e84,U+8e86,U+8e88,U+8e8c,U+8e8e,U+8e96-8e99,U+8e9b,U+8e9d,U+8e9f-8ea0,U+8ea2-8ea4,U+8ea7-8ea9,U+8ead-8eae,U+8eb0-8eb1,U+8eb3-8eb9,U+8ebb-8ebf,U+8ec1-8ec9,U+8ecf-8ed1,U+8ed3,U+8ed5-8eda,U+8edc-8ede,U+8ee0-8ee3,U+8ee5-8eea,U+8eec-8ef1,U+8ef3-8ef7,U+8efd,U+8eff-8f02,U+8f04,U+8f06,U+8f08,U+8f0b","diff":0,"charsSize":138},{"name":"177.woff2","size":56592,"chars":"U+8ce5,U+8ce8-8ce9,U+8ceb,U+8cee-8cf3,U+8cf5-8cf9,U+8cff-8d03,U+8d06-8d07,U+8d09,U+8d0b-8d0c,U+8d0e,U+8d11-8d12,U+8d14-8d15,U+8d18-8d1a,U+8d1c,U+8d20,U+8d51-8d52,U+8d57,U+8d5f,U+8d65,U+8d68-8d6a,U+8d6c,U+8d6e-8d6f,U+8d71-8d72,U+8d78-8d80,U+8d82-8d83,U+8d86-8d89,U+8d8c-8d90,U+8d92-8d93,U+8d96-8d98,U+8d9a-8d9e,U+8da0-8da2,U+8da4-8da7,U+8da9-8db0,U+8db6-8db7,U+8db9,U+8dbb,U+8dbd,U+8dc0-8dc2,U+8dc5,U+8dc7-8dca,U+8dcd,U+8dd0,U+8dd2-8dd5,U+8dd8-8dd9,U+8ddc,U+8de0,U+8de2,U+8de5-8de7,U+8de9,U+8ded-8dee,U+8df0-8df2,U+8df4,U+8df6,U+8dfc,U+8dfe-8e04,U+8e06-8e08,U+8e0b,U+8e0d-8e0e,U+8e11-8e13,U+8e15-8e1c,U+8e20-8e21,U+8e24-8e26","diff":0,"charsSize":158},{"name":"176.woff2","size":60792,"chars":"U+8b6a,U+8b6d-8b6e,U+8b71-8b73,U+8b75-8b76,U+8b78-8b7c,U+8b7f,U+8b81-8b89,U+8b8b-8b8d,U+8b8f-8b91,U+8b94,U+8b97-8b9b,U+8b9d,U+8b9f,U+8bac,U+8bb1,U+8bbb,U+8bc7,U+8bd0,U+8bea,U+8c09,U+8c1e,U+8c38-8c40,U+8c42-8c45,U+8c4a-8c4b,U+8c4d,U+8c4f,U+8c51-8c53,U+8c56-8c59,U+8c5b-8c60,U+8c63-8c69,U+8c6d-8c72,U+8c74-8c77,U+8c7b-8c81,U+8c83-8c84,U+8c86-8c88,U+8c8b,U+8c8e-8c92,U+8c95-8c97,U+8c99-8c9a,U+8c9c,U+8c9f,U+8ca3-8ca6,U+8cad-8cae,U+8cb1,U+8cb5,U+8cb9,U+8cbe,U+8cc6,U+8cc9,U+8ccb-8cd0,U+8cd4,U+8cd6-8cd9,U+8cdb,U+8cdd,U+8cdf","diff":0,"charsSize":143},{"name":"175.woff2","size":62008,"chars":"U+8a81-8a83,U+8a88,U+8a8b,U+8a8e-8a90,U+8a94,U+8a96-8a97,U+8a99,U+8a9b-8a9d,U+8a9f,U+8aa2,U+8aa7,U+8aa9,U+8aab-8aaf,U+8ab1,U+8ab3-8ab5,U+8ab7-8ab8,U+8aba-8abb,U+8abd-8abe,U+8ac0-8ac1,U+8ac3,U+8ac5-8ac6,U+8ac8,U+8aca,U+8acc,U+8ace,U+8ad0,U+8ad3-8ad5,U+8ad8-8ada,U+8add,U+8adf-8ae0,U+8ae3,U+8ae5,U+8ae8-8aea,U+8aec,U+8aef-8af0,U+8af2,U+8af4-8af5,U+8af9,U+8afb,U+8afd,U+8aff,U+8b03,U+8b06,U+8b08-8b09,U+8b0b-8b0d,U+8b0f,U+8b11-8b13,U+8b15,U+8b18,U+8b1a,U+8b1c,U+8b1e-8b1f,U+8b21-8b25,U+8b27,U+8b29-8b2a,U+8b2d-8b32,U+8b34-8b38,U+8b3a-8b3d,U+8b3f-8b40,U+8b42-8b48,U+8b4a-8b4d,U+8b50-8b55,U+8b57,U+8b5b,U+8b5d-8b5e,U+8b60-8b65,U+8b67-8b69","diff":0,"charsSize":140},{"name":"174.woff2","size":60592,"chars":"U+8975-897a,U+897c-897e,U+8980,U+8982,U+8984-8985,U+8987,U+8989-898a,U+898c-898e,U+8990-8992,U+8994-8995,U+8997,U+8999-89a0,U+89a2-89a5,U+89a7-89a9,U+89ab,U+89ad-89ae,U+89b0-89b1,U+89b3-89b6,U+89b8-89b9,U+89bb-89bc,U+89be,U+89c3,U+89cd,U+89d3,U+89d5,U+89d7-89d9,U+89db,U+89dd,U+89df-89e2,U+89e4,U+89e7-89ea,U+89ec-89ee,U+89f0-89f2,U+89f5,U+89f7,U+89f9-89ff,U+8a04-8a06,U+8a09,U+8a0b,U+8a0d,U+8a0f,U+8a11-8a12,U+8a14,U+8a19-8a1a,U+8a1c,U+8a1e,U+8a20-8a22,U+8a24,U+8a26-8a29,U+8a2b-8a2c,U+8a2e-8a30,U+8a32-8a33,U+8a35,U+8a37-8a39,U+8a3c-8a3d,U+8a3f-8a40,U+8a42-8a45,U+8a47,U+8a49-8a4d,U+8a4f,U+8a51,U+8a53,U+8a56-8a57,U+8a59-8a5a,U+8a5c-8a5d,U+8a5f,U+8a64-8a65,U+8a67-8a68,U+8a6a,U+8a6f,U+8a74,U+8a76-8a78,U+8a7a-8a7b,U+8a7d-8a7e,U+8a80","diff":0,"charsSize":159},{"name":"173.woff2","size":55868,"chars":"U+88a6-88aa,U+88ac,U+88ae-88b0,U+88b2-88b6,U+88b8-88bb,U+88bd-88c0,U+88c3-88c4,U+88c7-88c8,U+88ca-88cd,U+88d0-88d1,U+88d3,U+88d6-88d7,U+88da-88db,U+88de,U+88e0-88e1,U+88e6-88e7,U+88e9-88ef,U+88f2,U+88f5-88f7,U+88fa-88fb,U+88ff-8901,U+8903-8909,U+890b-890f,U+8911,U+8914-8918,U+891c-8920,U+8922-8924,U+8926-8929,U+892c-892f,U+8931,U+8935,U+8937,U+8939-893a,U+893c-8940,U+8942-8943,U+8945,U+8947-8948,U+894a-8955,U+8957-895c,U+8961-8963,U+8965,U+8967-8969,U+896b-896e,U+8970-8971,U+8973-8974","diff":0,"charsSize":140},{"name":"172.woff2","size":61336,"chars":"U+87c3,U+87c5,U+87c7,U+87c9,U+87cc-87cd,U+87cf-87d0,U+87d4-87da,U+87dc-87df,U+87e1-87e2,U+87e4,U+87e6-87e9,U+87eb,U+87ed,U+87f0-87f1,U+87f3-87f5,U+87f7-87f8,U+87fa,U+87fc-87fd,U+87ff-8802,U+8804,U+8807-8809,U+880b-880c,U+880e-880f,U+8812,U+8817-881a,U+881c-881e,U+8820,U+8824-8830,U+8833-8835,U+8837-8838,U+883a,U+883d-883f,U+8841-8843,U+8847-8849,U+884b,U+884e-8852,U+8856,U+8858,U+885a,U+885c,U+885e-8860,U+8866-8867,U+886a,U+886d,U+886f,U+8871,U+8873-8876,U+8878-887c,U+8880,U+8883,U+8886-8887,U+8889-888a,U+888c,U+888e-8891,U+8893-8895,U+8897-889b,U+889d,U+889f-88a1,U+88a3,U+88a5","diff":0,"charsSize":140},{"name":"171.woff2","size":59184,"chars":"U+86be-86bf,U+86c1-86c3,U+86c5,U+86c8,U+86cc-86cd,U+86d2-86d3,U+86d5-86d7,U+86da,U+86dc-86dd,U+86e0-86e3,U+86e5-86e8,U+86ea-86ec,U+86ef,U+86f5-86f7,U+86fc-86fd,U+86ff,U+8701,U+8704-8705,U+870b-870c,U+870e-8711,U+8714,U+8719,U+871b,U+871d,U+871f-8720,U+8724,U+8726-8728,U+872a-872d,U+872f-8730,U+8732-8733,U+8735-8736,U+8738-873a,U+873c-873d,U+8740-8746,U+874a-874b,U+874d,U+874f-8752,U+8754,U+8756,U+8758,U+875a-875e,U+8761-8762,U+8767,U+8769-876d,U+876f,U+8771-8773,U+8775,U+8777,U+8779-877a,U+877f-8781,U+8786-8787,U+8789-878a,U+878c,U+878e-8792,U+8794-8796,U+8798-879d,U+87a0-87a1,U+87a3-87a7,U+87a9-87aa,U+87ae,U+87b0-87b2,U+87b4,U+87b6-87b9,U+87bc,U+87be-87bf,U+87c1-87c2","diff":0,"charsSize":152},{"name":"170.woff2","size":63396,"chars":"U+85ef-85f5,U+85f7-85f8,U+85fc-85fe,U+8600-8603,U+8608-8609,U+860c-8610,U+8612-8615,U+8617-8619,U+861b-861d,U+861f-8621,U+8623-8626,U+8628,U+862a-862c,U+862e-8637,U+8639,U+863b,U+863d-863e,U+8640-864c,U+8652-8653,U+8656-8659,U+865d,U+8660-8661,U+8663-8666,U+8668-866a,U+866d,U+8670,U+8672-8678,U+8683-8689,U+868e-8692,U+8694,U+8696-869b,U+869e-86a2,U+86a5-86a6,U+86ab,U+86ad-86ae,U+86b2-86b3,U+86b7-86b9,U+86bb-86bd","diff":0,"charsSize":133},{"name":"169.woff2","size":63448,"chars":"U+851c-851d,U+8520,U+8522,U+8524,U+8527-852a,U+852e-8536,U+853e-8540,U+8542,U+8544-8545,U+8547,U+854b-854d,U+854f-8551,U+8554,U+8557,U+855a-855d,U+855f-8561,U+8563,U+8565-8567,U+856b-856c,U+856e-8571,U+8573,U+8575-8576,U+8578,U+857c-857d,U+857f-8583,U+8586,U+8589,U+858b,U+858d-858e,U+8590,U+8592-8593,U+8595-859a,U+859d-859e,U+85a0-85a3,U+85a5,U+85a7,U+85ab-85ad,U+85b1-85b6,U+85b8,U+85bb-85c0,U+85c2-85c8,U+85ca-85cc,U+85d1-85d2,U+85d4,U+85d6-85db,U+85de-85e3,U+85e6-85e8,U+85eb-85ee","diff":0,"charsSize":131},{"name":"167.woff2","size":63328,"chars":"U+826a,U+826c-826d,U+8275-8277,U+827b-827c,U+8280-8281,U+8283,U+8285-8287,U+8289,U+828c,U+8290,U+8293-8296,U+829a-829b,U+829e,U+82a0,U+82a2-82a3,U+82a7,U+82b2,U+82b5-82b6,U+82ba,U+82bc,U+82bf-82c0,U+82c2-82c3,U+82c5-82c6,U+82c9,U+82d0,U+82d6,U+82d9-82da,U+82dd,U+82e2,U+82e8-82ea,U+82ec-82ee,U+82f0,U+82f2-82f3,U+82f5-82f6,U+82f8,U+82fa,U+82fc-8300,U+830a-830b,U+830d,U+8310,U+8312-8313,U+8316,U+8318-8319,U+831d-8326,U+8329-832a,U+832e,U+8330,U+8337,U+833b,U+833d-833f,U+8341-8342,U+8344-8345,U+8348,U+834b-834e,U+8353,U+8355-8359,U+835d,U+8362,U+8370-8376,U+8379-837a,U+837e-8384,U+8387-8388,U+838b-838d,U+838f-8391,U+8394-8395,U+8397,U+8399-839a,U+839d,U+839f,U+83a1,U+83a3-83a6,U+83ac-83af,U+83b5,U+83bb,U+83be-83bf,U+83c2-83c4,U+83c6,U+83c8-83c9,U+83cb,U+83cd-83ce,U+83d0-83d2,U+83d5,U+83d7,U+83d9-83db,U+83de,U+83e2-83e4,U+83e6-83e8,U+83eb-83ee,U+83f3,U+83f5-83f7,U+83fa-83fc,U+83fe-8400,U+8402,U+8405,U+8408-8409,U+8410,U+8412-8417,U+8419-841b,U+841e-8421","diff":0,"charsSize":209},{"name":"168.woff2","size":62328,"chars":"U+8422-8423,U+8429-842b,U+842d-8430,U+8432-8434,U+8436-8437,U+8439-843b,U+843e-8445,U+8447-8448,U+844a-8450,U+8453-8456,U+8458,U+845d-8460,U+8462,U+8465,U+8467-8468,U+846a,U+846e-8470,U+8472,U+8474,U+8479,U+847b-8481,U+8483-8486,U+848a,U+848d,U+848f,U+8491-8493,U+8495-8496,U+8498,U+849a-849b,U+849d,U+849f-84a0,U+84a2-84ae,U+84b0-84b1,U+84b3,U+84b5-84b7,U+84bb,U+84be,U+84c2-84c3,U+84c5,U+84c7-84c8,U+84cc,U+84ce-84cf,U+84d2,U+84d4-84d5,U+84d7-84dc,U+84de,U+84e1-84e2,U+84e4,U+84e8-84eb,U+84ed,U+84f1-84f3,U+84f5-84fb,U+84fe,U+8500-850b,U+850d-8510,U+8512,U+8515-8516,U+8518-8519,U+851b","diff":0,"charsSize":159},{"name":"166.woff2","size":59428,"chars":"U+8163-8164,U+8168,U+816a,U+816c,U+816f,U+8172,U+8175-8177,U+8184-8187,U+8189,U+818b-818e,U+8190,U+8192-8197,U+8199,U+819e-819f,U+81a1-81a2,U+81a4-81a5,U+81a7,U+81ab-81b2,U+81b4-81b9,U+81bc,U+81c4-81c5,U+81c7-81c8,U+81cb,U+81ce,U+81d0-81d1,U+81d3-81d7,U+81d9,U+81db-81df,U+81e1-81e2,U+81e4,U+81e6,U+81e9,U+81eb,U+81ee-81f2,U+81f5-81fa,U+81fd,U+81ff,U+8203,U+820b,U+820e-820f,U+8211,U+8213,U+8215-821a,U+821d,U+8220,U+8224-8227,U+8229,U+822e,U+8232,U+823a,U+823c-823d,U+823f-8243,U+8245-8246,U+8248,U+824a,U+824c-824e,U+8250-8257,U+825b-825e,U+8260-8263,U+8265,U+8267,U+8269","diff":0,"charsSize":142},{"name":"165.woff2","size":59152,"chars":"U+7ff5-7ff8,U+7ffd-7fff,U+8002,U+8007-800a,U+800e-800f,U+8011,U+8013,U+801a-801b,U+801d-801f,U+8021,U+8023-8024,U+802b,U+802d,U+802f-8030,U+8032,U+8034,U+8039-803a,U+803c,U+803e,U+8040-8041,U+8044-8045,U+8047-8049,U+804e-8051,U+8053,U+8055,U+8057,U+8059,U+805b-805d,U+805f-8068,U+806b-806e,U+8074,U+8078,U+807a-807c,U+8081-8082,U+8088,U+808a,U+808d-8092,U+8094-8095,U+8097,U+8099,U+809e,U+80a3,U+80a6-80a8,U+80ac,U+80b0,U+80b3,U+80b5-80b6,U+80b8-80b9,U+80bb,U+80c5,U+80c7-80cb,U+80cf-80d5,U+80d8,U+80df-80e0,U+80e2-80e3,U+80e6,U+80ee,U+80f5,U+80f7,U+80f9,U+80fb,U+80fe-8101,U+8103-8104,U+8107,U+810b-810c,U+8115,U+8117,U+8119,U+811c-811d,U+811f-8122,U+8124-8128,U+812a,U+812d-812e,U+8130,U+8133-8135,U+8137,U+813a-813d,U+813f-8140,U+8142-8145,U+8147,U+8149,U+814d,U+814f,U+8152,U+8157-8158,U+815b-815f,U+8162","diff":0,"charsSize":176},{"name":"164.woff2","size":61484,"chars":"U+7e7f-7e81,U+7e83-7e87,U+7e89,U+7e8b,U+7e8e,U+7e90-7e92,U+7e95,U+7e97,U+7e99-7e9a,U+7e9d-7e9e,U+7eae,U+7eb4,U+7ebb-7ebc,U+7ed6,U+7ee4,U+7eec,U+7ef9,U+7f0a,U+7f10,U+7f1e,U+7f37,U+7f39,U+7f3b-7f41,U+7f43,U+7f46-7f4b,U+7f4d-7f4f,U+7f52-7f53,U+7f56,U+7f59,U+7f5b-7f5e,U+7f60,U+7f63-7f67,U+7f6b-7f6d,U+7f6f,U+7f73,U+7f76,U+7f78,U+7f7a-7f7d,U+7f7f-7f80,U+7f82-7f84,U+7f87,U+7f89,U+7f8d,U+7f8f-7f93,U+7f95-7f99,U+7f9b-7f9c,U+7fa0,U+7fa2,U+7fa6,U+7faa-7fae,U+7fb1,U+7fb3-7fb5,U+7fb7,U+7fba-7fbb,U+7fbe,U+7fc0,U+7fc2-7fc4,U+7fc6-7fc9,U+7fcb,U+7fcd,U+7fcf-7fd1,U+7fd3,U+7fd6-7fd7,U+7fd9-7fde,U+7fe2-7fe4,U+7fe7-7fe8,U+7fea,U+7fec-7fed,U+7fef,U+7ff2,U+7ff4","diff":0,"charsSize":144},{"name":"163.woff2","size":59512,"chars":"U+7dc1-7dc3,U+7dc5-7dc6,U+7dc8-7dc9,U+7dcc-7dd1,U+7dd3-7dd6,U+7dda-7ddc,U+7ddf,U+7de2,U+7de4-7de5,U+7de7,U+7dea-7deb,U+7ded-7dee,U+7df0,U+7df3,U+7df5,U+7df7-7df8,U+7dfa,U+7dfc-7e07,U+7e0c-7e0f,U+7e12-7e1a,U+7e1c,U+7e20-7e22,U+7e24-7e2a,U+7e2c,U+7e2f-7e30,U+7e33-7e34,U+7e38,U+7e3a,U+7e3c,U+7e3f-7e40,U+7e42,U+7e44,U+7e49-7e51,U+7e53,U+7e56-7e59,U+7e5b-7e5d,U+7e5f-7e60,U+7e63-7e68,U+7e6b-7e6c,U+7e71-7e72,U+7e74-7e78,U+7e7a-7e7b","diff":0,"charsSize":119},{"name":"162.woff2","size":59056,"chars":"U+7cbb,U+7cbf-7cc0,U+7cc2-7cc4,U+7cc6,U+7ccb,U+7cce-7cd4,U+7cd8,U+7cda-7cdb,U+7ce1-7ce6,U+7ce9-7cee,U+7cf0-7cf1,U+7cf3,U+7cf5,U+7cf7,U+7cfa,U+7cfc-7cfd,U+7cff,U+7d01,U+7d03,U+7d0c,U+7d0e-7d0f,U+7d11-7d12,U+7d16,U+7d18,U+7d1d-7d1f,U+7d23-7d26,U+7d28-7d2a,U+7d2c-7d2d,U+7d34-7d38,U+7d3b,U+7d3d-7d3e,U+7d41,U+7d45,U+7d47-7d4d,U+7d4f,U+7d51-7d54,U+7d56-7d5a,U+7d5c,U+7d5f-7d60,U+7d63-7d65,U+7d67,U+7d69-7d6d,U+7d6f-7d70,U+7d74-7d76,U+7d78,U+7d7a-7d80,U+7d82,U+7d84-7d85,U+7d87,U+7d89-7d8e,U+7d90,U+7d92,U+7d94-7d9b,U+7d9d,U+7d9f,U+7da1,U+7da4-7da5,U+7da7-7daa,U+7daf,U+7db3,U+7db6-7db7,U+7dbc,U+7dc0","diff":0,"charsSize":147},{"name":"161.woff2","size":62120,"chars":"U+7bfa-7bfb,U+7bfd,U+7bff,U+7c01-7c06,U+7c08-7c0a,U+7c0e,U+7c10,U+7c12-7c15,U+7c17-7c1d,U+7c20,U+7c22,U+7c24-7c25,U+7c28-7c29,U+7c2c-7c36,U+7c39-7c3d,U+7c42,U+7c44-7c4b,U+7c4e-7c5b,U+7c5d-7c5e,U+7c61-7c63,U+7c65-7c68,U+7c6b,U+7c6d,U+7c6f-7c72,U+7c75-7c7a,U+7c7e-7c88,U+7c8a-7c90,U+7c93-7c94,U+7c96,U+7c99-7c9b,U+7ca0-7ca1,U+7ca3,U+7ca6-7ca9,U+7cab-7cad,U+7caf-7cb0,U+7cb4,U+7cb6-7cb8,U+7cba","diff":0,"charsSize":133},{"name":"160.woff2","size":61368,"chars":"U+7aeb-7aec,U+7aee,U+7af0-7af5,U+7af7-7af8,U+7afb-7afc,U+7afe,U+7b00-7b02,U+7b05,U+7b07,U+7b09,U+7b0c-7b0e,U+7b10,U+7b12-7b13,U+7b16-7b18,U+7b1a,U+7b1c-7b1d,U+7b1f,U+7b21-7b23,U+7b27,U+7b29,U+7b2d,U+7b2f-7b30,U+7b32,U+7b34-7b37,U+7b39,U+7b3b,U+7b3d,U+7b3f-7b44,U+7b48,U+7b4a,U+7b4e,U+7b53,U+7b55,U+7b57,U+7b59,U+7b5c,U+7b5e-7b5f,U+7b61,U+7b63-7b66,U+7b68-7b6d,U+7b6f-7b70,U+7b73-7b74,U+7b76,U+7b78,U+7b7a,U+7b7c-7b7d,U+7b7f,U+7b81-7b84,U+7b86-7b8a,U+7b8c,U+7b8e,U+7b91-7b93,U+7b96,U+7b98-7b9b,U+7b9e-7ba0,U+7ba3-7ba5,U+7bae-7bb0,U+7bb2-7bb3,U+7bb5-7bb7,U+7bb9-7bbf,U+7bc2-7bc3,U+7bc5,U+7bc8,U+7bca,U+7bcd-7bd0,U+7bd2,U+7bd4-7bd8,U+7bdb-7bdc,U+7bde-7be0,U+7be2-7be3,U+7be7-7be8,U+7beb-7bed,U+7bef-7bf0,U+7bf2,U+7bf4-7bf6,U+7bf8-7bf9","diff":0,"charsSize":161},{"name":"158.woff2","size":59564,"chars":"U+78f1,U+78f3,U+78f5-78f6,U+78f8-78f9,U+78fb-78fc,U+78fe-7900,U+7902-7904,U+7907-790d,U+790f-7912,U+7914-7918,U+791a-791d,U+7920-7923,U+7925,U+7927-7929,U+792d-7930,U+7932-7933,U+7935-7939,U+793d,U+793f,U+7942-7945,U+7947,U+794a-7952,U+7954,U+7958-7959,U+7961,U+7963-7964,U+7966,U+7969-796c,U+796e,U+7970-7976,U+7979,U+797b-797e,U+7982-7983,U+7986-7989,U+798b-798c,U+7990-7999,U+799b-79a5,U+79a8-79a9,U+79ab-79ad,U+79af,U+79b2,U+79b4-79b8,U+79bc,U+79c2,U+79c4-79c5,U+79c7,U+79ca,U+79cc,U+79ce-79d0,U+79d3-79d4,U+79d6-79d7,U+79d9-79de,U+79e0-79e1","diff":0,"charsSize":156},{"name":"159.woff2","size":64576,"chars":"U+79e2,U+79e5,U+79e8,U+79ea,U+79ec,U+79ee,U+79f1-79f7,U+79f9-79fa,U+79fc,U+79fe-79ff,U+7a01,U+7a04,U+7a07,U+7a09-7a0a,U+7a0c,U+7a0f-7a13,U+7a15-7a16,U+7a18-7a19,U+7a1b,U+7a1d,U+7a21-7a22,U+7a24-7a2d,U+7a2f-7a30,U+7a32,U+7a34-7a36,U+7a38,U+7a3a,U+7a3e,U+7a41-7a45,U+7a47-7a4b,U+7a4f-7a50,U+7a52-7a56,U+7a58-7a60,U+7a63-7a68,U+7a6a-7a6c,U+7a6e-7a6f,U+7a71-7a73,U+7a75,U+7a7b-7a7e,U+7a82,U+7a85,U+7a87,U+7a89-7a8c,U+7a8e-7a90,U+7a93-7a94,U+7a99-7a9b,U+7a9e,U+7aa1-7aa4,U+7aa7,U+7aab,U+7ab0-7ab2,U+7ab4-7ab5,U+7ab7-7ab9,U+7abb-7abe,U+7ac0-7ac3,U+7ac6,U+7ac9,U+7acc-7ad5,U+7ad7-7ad8,U+7ada-7add,U+7ae1-7ae2,U+7ae4,U+7ae7-7aea","diff":0,"charsSize":164},{"name":"157.woff2","size":59812,"chars":"U+77c9-77cc,U+77ce-77d6,U+77d8-77d9,U+77dd-77e1,U+77e4,U+77e6,U+77e8,U+77ea,U+77f0-77f2,U+77f4-77f5,U+77f7,U+77f9-77fc,U+7803-7808,U+780a-780b,U+780e-7810,U+7813,U+7815,U+7819,U+781b,U+781e,U+7820-7822,U+7824,U+7828,U+782a-782b,U+782e-782f,U+7831-7833,U+7835-7836,U+783d,U+783f,U+7841-7842,U+7844,U+7846,U+7848-784b,U+784d,U+784f,U+7851,U+7853-7854,U+7858-785c,U+785e-7863,U+7865-7867,U+7869,U+7870-7876,U+7878-787b,U+787d-7886,U+7888,U+788a-788b,U+788f-7890,U+7892,U+7894-7896,U+7899,U+789d-789e,U+78a0,U+78a2,U+78a4,U+78a6,U+78a8,U+78aa-78ac,U+78ae-78af,U+78b5-78b7,U+78bb,U+78bd,U+78bf-78c0,U+78c2-78c4,U+78c6-78c8,U+78cc-78cf,U+78d1-78d3,U+78d6-78d8,U+78db-78e2,U+78e4-78e6,U+78e9-78eb,U+78ed-78ee,U+78f0","diff":0,"charsSize":177},{"name":"154.woff2","size":61940,"chars":"U+7461-7462,U+7465-7468,U+746b-746c,U+746e,U+7471-7475,U+7478-747d,U+747f,U+7482,U+7484-7486,U+7488,U+748a,U+748c-748d,U+748f,U+7491-749b,U+749d,U+749f-74a2,U+74a4-74a5,U+74aa-74af,U+74b1-74b9,U+74bb-74bc,U+74be,U+74c0-74c9,U+74cb-74ce,U+74d0-74d1,U+74d3,U+74d5-74d9,U+74db,U+74dd,U+74df,U+74e1,U+74e5,U+74e7-74ed,U+74f0-74f3,U+74f5,U+74f8-74fe,U+7500,U+7502-7503,U+7505-750b,U+750e,U+7510,U+7512,U+7514,U+7516-7517,U+751b,U+751d-751e,U+7520-7521,U+7523-7524,U+7526-7527,U+752a,U+752e,U+7534,U+7536,U+7539,U+753c-753d,U+753f,U+7541-7543","diff":0,"charsSize":148},{"name":"156.woff2","size":58076,"chars":"U+76a2-76a3,U+76a5-76ad,U+76af,U+76b3,U+76b5-76b7,U+76b9,U+76bb-76be,U+76c0-76c1,U+76c4,U+76c7,U+76c9,U+76cb-76cc,U+76d3,U+76d5,U+76d9-76da,U+76dd,U+76e0,U+76e2,U+76e6,U+76e8-76ed,U+76f0,U+76f3,U+76f5-76f7,U+76fa-76fb,U+76fd,U+76ff-7703,U+7705-7706,U+770a,U+770c,U+770e-7718,U+771b-771d,U+7721,U+7723-7724,U+7727,U+772a-772c,U+772e,U+7730-7734,U+7739,U+773b,U+773d-773f,U+7742,U+7744-7746,U+7748-774e,U+7752-7759,U+775d,U+775f-7760,U+7764,U+7767,U+7769-776a,U+776d-7778,U+777a-777c,U+7781-7783,U+7786,U+7788-778b,U+778f-7790,U+7793-7797,U+7799-779d,U+77a1,U+77a3-77a4,U+77a6,U+77a8,U+77ab,U+77ae-77af,U+77b1-77b2,U+77b4,U+77b6-77ba,U+77be,U+77c0-77c8","diff":0,"charsSize":178},{"name":"155.woff2","size":59776,"chars":"U+7544,U+7546-7547,U+7549-754a,U+754d,U+7550-7553,U+7555-7558,U+755e-7561,U+7563-7564,U+7567-7569,U+756c-756f,U+7571,U+7573,U+7575,U+7577,U+757a-757e,U+7580-7582,U+7584-7585,U+7588-7589,U+758c-758e,U+7590,U+7593,U+7595,U+7598,U+759b-759c,U+759e,U+75a2,U+75a6-75aa,U+75ad,U+75b6-75b7,U+75ba-75bb,U+75bf-75c1,U+75c6,U+75cb-75cc,U+75ce-75d1,U+75d3,U+75d7,U+75da,U+75dc-75dd,U+75df,U+75e1,U+75e5,U+75e9,U+75ec-75ef,U+75f2-75f3,U+75f5-75f8,U+75fa-75fb,U+75fd,U+7604,U+7606-7609,U+760e-760f,U+7611-7612,U+7614,U+7616,U+761a,U+761c-761d,U+7623,U+7628,U+762c,U+762e-762f,U+7631-7632,U+7636-7637,U+7639-763a,U+763d,U+7641,U+7644-7645,U+7648,U+764a-764b,U+764e-7651,U+7653,U+7655,U+7657,U+7659-765b,U+765d,U+7660,U+7666,U+7668,U+766a,U+7673-7677,U+7679-767a,U+767f-7680,U+7683,U+7685,U+7689-768a,U+768c-768d,U+768f-7690,U+7692,U+7694-7695,U+7697-7698,U+769b-76a1","diff":0,"charsSize":172},{"name":"153.woff2","size":61636,"chars":"U+7346-734c,U+734f,U+7351,U+7353-7356,U+7358-735f,U+7361-7367,U+7369,U+736e,U+7371,U+7373-7374,U+7376,U+7379,U+737d,U+737f,U+7381-7383,U+7385-7386,U+7388,U+738a,U+738c-738d,U+738f-7390,U+7392-7395,U+7397-739a,U+739c-739e,U+73a0-73a1,U+73a3-73a7,U+73aa,U+73ac-73ad,U+73b1,U+73b4-73b6,U+73b8-73b9,U+73bc-73bf,U+73c1,U+73c3-73c7,U+73cb-73cc,U+73ce,U+73d2-73d8,U+73da-73dd,U+73df,U+73e1-73e4,U+73e6,U+73e8,U+73ea-73ec,U+73ee-73f1,U+73f3-73fd,U+73ff-7402,U+7404,U+7407-7408,U+740b-740e,U+7411-7419,U+741c-7421,U+7423-7424,U+7427,U+7429,U+742b,U+742d,U+742f,U+7431-7432,U+7437-7439,U+743b,U+743d-743e,U+7440,U+7442-7448,U+744a,U+744c-7454,U+7456,U+7458,U+745d,U+7460","diff":0,"charsSize":187},{"name":"152.woff2","size":67640,"chars":"U+720e-720f,U+7211-721a,U+721c,U+721e-7227,U+7229,U+722b,U+722e-722f,U+7233-7234,U+723c,U+7241-7245,U+7249-724b,U+724e-7251,U+7253-7255,U+7257,U+725a,U+725c,U+725e,U+7263-7265,U+7268,U+726a-726d,U+7270-7271,U+7273,U+7276-7278,U+727b-727c,U+7282-7283,U+7285-7289,U+728c,U+728e,U+7290-7291,U+7293-7295,U+7297-729a,U+729c-729e,U+72a0-72a1,U+72a3-72a6,U+72a8-72ab,U+72ae,U+72b1-72b3,U+72b5,U+72ba-72bf,U+72c5-72c7,U+72c9-72cc,U+72cf,U+72d1,U+72d3-72d6,U+72d8,U+72da-72dd,U+72df,U+72e2-72e7,U+72ea-72eb,U+72f5-72f6,U+72fe-7300,U+7302,U+7304-7309,U+730b-730d,U+730f-7312,U+7314,U+7318,U+731a,U+731f-7320,U+7323-7324,U+7326-7328,U+732d,U+732f-7330,U+7332-7333,U+7335,U+733a,U+733c-733d,U+7340,U+7342","diff":0,"charsSize":174},{"name":"151.woff2","size":62700,"chars":"U+7135,U+7137-7144,U+7147-7148,U+714b,U+714d,U+714f-7151,U+7153-7158,U+715a-715b,U+715d,U+715f-7161,U+7163,U+716a-716b,U+716d,U+716f-7171,U+7174-7177,U+7179,U+717b-717c,U+717e-7183,U+7185-7189,U+718b-718e,U+7190-7191,U+7193,U+7195-7196,U+719a-719e,U+71a1-71a7,U+71a9-71ab,U+71ad-71b0,U+71b2,U+71b4,U+71b6-71b8,U+71ba-71bd,U+71bf-71c0,U+71c2,U+71c4-71c7,U+71ca-71cd,U+71cf-71d1,U+71d3,U+71d6-71d8,U+71da-71db,U+71dd-71de,U+71e1-71e4,U+71e8-71ec,U+71ef-71f3,U+71f5-71f8,U+71fa,U+71fd,U+71ff-7205,U+7207-720c","diff":0,"charsSize":151},{"name":"150.woff2","size":64120,"chars":"U+7030-7031,U+7033-7034,U+7036-7038,U+703a-703d,U+703f-7042,U+7045-704b,U+704d-704e,U+7050,U+7052-7054,U+7056-7057,U+7059-705c,U+705f-7062,U+7065-7068,U+706a,U+706e,U+7071-7074,U+7077,U+7079-707b,U+7081-7084,U+7086-7088,U+708b-708d,U+708f-7091,U+7093,U+7097-7098,U+709a-709b,U+709e-70aa,U+70b0,U+70b2,U+70b4-70b6,U+70ba,U+70be-70bf,U+70c4-70c7,U+70c9,U+70cb-70ce,U+70d0-70d7,U+70da,U+70dc-70de,U+70e0-70e3,U+70e5,U+70ea,U+70ee,U+70f0-70f3,U+70f5-70f6,U+70f8,U+70fa-70fc,U+70fe-7108,U+710b-710f,U+7111-7112,U+7114,U+7117,U+711b-7120,U+7122-7125,U+7127-712e,U+7132-7134","diff":0,"charsSize":170},{"name":"147.woff2","size":64372,"chars":"U+6c80,U+6c84,U+6c87,U+6c8a-6c8b,U+6c8d-6c8e,U+6c91,U+6c95-6c98,U+6c9a,U+6c9c-6c9e,U+6ca0,U+6ca2,U+6ca8,U+6cac,U+6caf-6cb0,U+6cb4-6cb7,U+6cba,U+6cc0,U+6cc2-6cc3,U+6cc6-6cc8,U+6ccb,U+6ccd-6ccf,U+6cd1-6cd2,U+6cd8-6cda,U+6cdc,U+6cdf,U+6ce4,U+6ce6-6ce7,U+6ce9,U+6cec-6ced,U+6cf2,U+6cf4,U+6cf9,U+6cff-6d00,U+6d02-6d03,U+6d05-6d06,U+6d08-6d0a,U+6d0d,U+6d0f-6d11,U+6d13-6d16,U+6d18,U+6d1c-6d1d,U+6d1f-6d24,U+6d26,U+6d28,U+6d2c-6d2d,U+6d2f-6d30,U+6d34,U+6d37-6d38,U+6d3a,U+6d3f-6d40,U+6d42,U+6d44,U+6d49,U+6d4c,U+6d50,U+6d55-6d58,U+6d5b,U+6d5d,U+6d5f,U+6d61-6d62,U+6d64-6d65,U+6d67-6d68,U+6d6b-6d6d,U+6d70-6d73,U+6d75-6d76,U+6d7a-6d7b,U+6d7d-6d81,U+6d83-6d84,U+6d86,U+6d8a-6d8b,U+6d8d,U+6d8f-6d90,U+6d92,U+6d96-6d9a,U+6d9c,U+6da2,U+6da5,U+6dac-6dad,U+6db0-6db1,U+6db3-6db4,U+6db6-6db7,U+6db9-6dbb,U+6dbd-6dbe,U+6dc1-6dc3,U+6dc8-6dca,U+6dcd-6dd0,U+6dd2-6dd5,U+6dd7,U+6ddb-6ddc,U+6ddf,U+6de2-6de3,U+6de7,U+6ded,U+6def-6df0,U+6df2,U+6df4,U+6df8,U+6dfd-6e04,U+6e06-6e08,U+6e0b,U+6e0f,U+6e12-6e13,U+6e15,U+6e18,U+6e1c,U+6e1e-6e1f,U+6e22,U+6e27-6e28,U+6e2a,U+6e2e,U+6e30-6e31,U+6e33,U+6e35-6e37,U+6e39,U+6e3b-6e3d,U+6e3f-6e42","diff":0,"charsSize":221},{"name":"149.woff2","size":63064,"chars":"U+6f5f-6f61,U+6f63,U+6f65,U+6f67-6f6c,U+6f71,U+6f73,U+6f75-6f76,U+6f79,U+6f7b,U+6f7d-6f7e,U+6f81-6f83,U+6f85,U+6f8a-6f8b,U+6f8f-6f96,U+6f98-6f9b,U+6f9d-6f9f,U+6fa2-6fa3,U+6fa5-6fa6,U+6fa8,U+6faa-6fad,U+6faf-6fb0,U+6fb2,U+6fb4-6fb5,U+6fb7-6fb8,U+6fba-6fbf,U+6fc4-6fc8,U+6fca-6fd0,U+6fd3-6fd7,U+6fd9-6fdd,U+6fe2-6fe3,U+6fe5-6fea,U+6fec-6fed,U+6ff2-6ff9,U+6ffb,U+6ffd,U+6fff-7004,U+7007-7008,U+700a,U+700c-700e,U+7010,U+7012-7014,U+7016-7017,U+7019,U+701c,U+701e,U+7021-7022,U+7024-7025,U+7029-702f","diff":0,"charsSize":136},{"name":"148.woff2","size":64020,"chars":"U+6e45-6e49,U+6e4b-6e4c,U+6e4f-6e52,U+6e55,U+6e57,U+6e59-6e5a,U+6e5c-6e5d,U+6e60-6e62,U+6e64-6e66,U+6e68-6e6a,U+6e6c-6e6d,U+6e70-6e7d,U+6e80-6e82,U+6e84,U+6e87-6e88,U+6e8a-6e8e,U+6e91-6e95,U+6e97,U+6e99-6e9b,U+6e9e,U+6ea0-6ea1,U+6ea3-6ea4,U+6ea6,U+6ea8-6ea9,U+6eac-6eae,U+6eb0,U+6eb3,U+6eb5,U+6eb8-6eb9,U+6ebe-6ec0,U+6ec3,U+6ec6,U+6ec8-6eca,U+6ecd,U+6ed0,U+6ed2,U+6ed6,U+6ed8-6ed9,U+6edb-6edd,U+6ee3,U+6ee7,U+6eea-6eeb,U+6eed-6eee,U+6ef0-6ef1,U+6ef3,U+6ef5-6ef6,U+6efa-6efd,U+6f00,U+6f03-6f05,U+6f07-6f08,U+6f0a-6f0e,U+6f10,U+6f12,U+6f16-6f19,U+6f1b-6f1f,U+6f21,U+6f25-6f28,U+6f2e,U+6f30,U+6f34,U+6f37,U+6f39-6f3d,U+6f40,U+6f42-6f45,U+6f48-6f4a,U+6f4c,U+6f4e-6f50,U+6f52-6f53,U+6f55-6f57,U+6f5a,U+6f5d","diff":0,"charsSize":165},{"name":"146.woff2","size":63364,"chars":"U+6b2a-6b31,U+6b33-6b36,U+6b38,U+6b3b-6b3c,U+6b3f-6b42,U+6b44-6b45,U+6b48,U+6b4a-6b4b,U+6b4d-6b4f,U+6b51-6b58,U+6b5a-6b5e,U+6b60,U+6b68-6b69,U+6b6b-6b71,U+6b73-6b76,U+6b7a,U+6b7d-6b7e,U+6b80,U+6b85,U+6b88,U+6b8c,U+6b8e-6b91,U+6b94-6b95,U+6b97,U+6b99,U+6b9c-6b9d,U+6b9f-6ba0,U+6ba2-6ba3,U+6ba5-6ba9,U+6bac,U+6bb0-6bb1,U+6bb6,U+6bb8-6bb9,U+6bbb,U+6bbd-6bbe,U+6bc3-6bc4,U+6bc7-6bca,U+6bcc,U+6bce,U+6bd0-6bd1,U+6bd8,U+6bda,U+6bdc-6be0,U+6be2-6be9,U+6bec-6bee,U+6bf0-6bf2,U+6bf4,U+6bf6-6bf8,U+6bfa-6bfc,U+6bfe,U+6c00-6c04,U+6c09-6c0b,U+6c0e,U+6c12,U+6c17,U+6c1c-6c1e,U+6c20,U+6c25,U+6c2d,U+6c31,U+6c36-6c37,U+6c3a-6c3c,U+6c3e-6c3f,U+6c43-6c45,U+6c48,U+6c4b-6c4f,U+6c51-6c53,U+6c56,U+6c58,U+6c5a,U+6c62-6c63,U+6c65-6c67,U+6c6b-6c6f,U+6c71,U+6c73,U+6c75,U+6c77-6c78,U+6c7b-6c7c,U+6c7f","diff":0,"charsSize":186},{"name":"145.woff2","size":64144,"chars":"U+6a87-6a88,U+6a8a-6a8d,U+6a8f,U+6a92-6a93,U+6a95-6a96,U+6a98-6a9b,U+6a9d-6a9f,U+6aa1,U+6aa4-6aa8,U+6aaa,U+6aad-6ab2,U+6ab4-6ab7,U+6ab9-6aba,U+6abc-6abd,U+6abf-6ac2,U+6ac4-6ad2,U+6ad4-6ad9,U+6adc,U+6ae0-6ae4,U+6ae6,U+6ae9,U+6aed-6af0,U+6af2,U+6af4-6af7,U+6af9-6afa,U+6afc-6b03,U+6b05-6b09,U+6b0b-6b0e,U+6b10-6b11,U+6b13-6b15,U+6b17-6b1d,U+6b1f,U+6b25-6b26,U+6b28-6b29","diff":0,"charsSize":117},{"name":"144.woff2","size":65648,"chars":"U+69b3,U+69b5-69b6,U+69b8-69ba,U+69bc-69be,U+69c0,U+69c2-69c9,U+69cf,U+69d1-69d2,U+69d5-69da,U+69dc-69de,U+69e1-69e6,U+69e9,U+69eb-69ec,U+69ee-69f1,U+69f4-69fc,U+69fe,U+6a00,U+6a03-6a04,U+6a06-6a09,U+6a0b-6a10,U+6a12,U+6a14-6a16,U+6a1a-6a1d,U+6a20,U+6a22,U+6a24-6a27,U+6a29,U+6a2b-6a2e,U+6a30,U+6a32-6a33,U+6a36-6a37,U+6a3b-6a3c,U+6a3f-6a43,U+6a45-6a46,U+6a49-6a4a,U+6a4c-6a4f,U+6a51-6a57,U+6a5a,U+6a5c-6a5e,U+6a60,U+6a63-6a64,U+6a66-6a6a,U+6a6c-6a70,U+6a72-6a78,U+6a7a-6a7b,U+6a7d-6a7f,U+6a82-6a83,U+6a85-6a86","diff":0,"charsSize":145},{"name":"143.woff2","size":65468,"chars":"U+68ab-68ac,U+68ae,U+68b1-68b2,U+68b4,U+68b6-68bf,U+68c1,U+68c3,U+68c5-68c8,U+68cc,U+68ce-68d1,U+68d3-68d4,U+68d9,U+68db-68de,U+68e1-68e2,U+68e4-68e6,U+68e8-68eb,U+68ed,U+68ef,U+68f3-68f4,U+68f6-68f8,U+68fb,U+68fd-6900,U+6902-6904,U+6906-690a,U+690c,U+6911,U+6913-691e,U+6921-6923,U+6925-692c,U+692e-692f,U+6931-6933,U+6935-6938,U+693a-693c,U+693e,U+6940-6941,U+6943-6949,U+694b-6952,U+6955-6956,U+6958-6959,U+695b-695c,U+695f,U+6961-6962,U+6964-6965,U+6967,U+6969-696a,U+696c,U+696f-6970,U+6972-6974,U+6976,U+697a-697b,U+697d-697f,U+6981,U+6983,U+6985,U+698a-698c,U+698e-6993,U+6996-6997,U+6999-699a,U+699d-69a6,U+69a9,U+69ac,U+69af-69b0,U+69b2","diff":0,"charsSize":175},{"name":"142.woff2","size":64848,"chars":"U+6712-6713,U+6716,U+6718-671a,U+671c,U+671e,U+6720-6725,U+6729,U+672e,U+6730,U+6732-6733,U+6737-6739,U+673b-673c,U+673e-673f,U+6741,U+6744-6745,U+6747,U+674a-674b,U+674d,U+6752,U+6754-6755,U+6757-675b,U+675d,U+6762-6764,U+6766-6767,U+676b-676c,U+676e,U+6774,U+6776,U+6778-677b,U+677d,U+6780,U+6782-6783,U+6785-6786,U+6788,U+678a,U+678c-678f,U+6791-6794,U+6796,U+6799,U+679b,U+679f-67a1,U+67a4,U+67a6,U+67a9,U+67ac,U+67ae,U+67b1-67b2,U+67b4,U+67b9-67c0,U+67c2,U+67c5-67ce,U+67d5-67d7,U+67db,U+67df,U+67e1,U+67e3-67e4,U+67e6-67e8,U+67ea-67eb,U+67ed-67ee,U+67f2,U+67f6-67fa,U+67fc,U+67fe,U+6801-6804,U+6806,U+680d,U+6810,U+6812,U+6814-6815,U+6818-681c,U+681e-6820,U+6822-6828,U+682b-6831,U+6834-6836,U+683a-683b,U+683f,U+6847,U+684b,U+684d,U+684f,U+6852,U+6856-685f,U+686a,U+686c-6873,U+6875,U+6878-687e,U+6880,U+6882,U+6884,U+6887-688e,U+6890-6892,U+6895-6896,U+6899-689c,U+689e,U+68a0-68a1,U+68a3-68a5,U+68a9-68aa","diff":0,"charsSize":226},{"name":"141.woff2","size":60792,"chars":"U+65dd-65df,U+65e1,U+65e4,U+65ea-65eb,U+65f2-65f5,U+65f8-65f9,U+65fb-65ff,U+6601,U+6604-6605,U+6607-6609,U+660b,U+660d,U+6610-6612,U+6616-6618,U+661a-661c,U+661e,U+6621-6624,U+6626,U+6629-662c,U+662e,U+6630,U+6632-6633,U+6637-663b,U+663d,U+663f-6640,U+6644-6648,U+664a,U+664d-664e,U+6650-6651,U+6658-6659,U+665b-665c,U+665e,U+6660,U+6662-6663,U+6665,U+6667,U+6669-666d,U+6671-6673,U+6675,U+6678-6679,U+667b-667d,U+667f-6681,U+6683,U+6685-6686,U+668a-668b,U+668d-6690,U+6692-6695,U+6698-669c,U+669e-66a1,U+66a3-66a6,U+66a9-66aa,U+66ac-66ad,U+66af-66b0,U+66b2-66b3,U+66b5-66b8,U+66ba-66bd,U+66bf-66c3,U+66c5-66c6,U+66c8,U+66ca-66d5,U+66d7-66d8,U+66da,U+66de-66df,U+66e1-66e5,U+66e7-66e8,U+66ea-66eb,U+66ed-66ef,U+66f1,U+66f5-66f6,U+66fa-66fb,U+66fd,U+6701-6702,U+6704-6707,U+670c,U+670e-670f,U+6711","diff":0,"charsSize":189},{"name":"138.woff2","size":70012,"chars":"U+61de,U+61e0-61e2,U+61e4-61e5,U+61e7,U+61e9-61f1,U+61f3-61f4,U+61f9,U+61fb,U+61fd,U+6201-6205,U+6209,U+6213,U+6219,U+621c-621e,U+6220,U+6223,U+6226,U+6228,U+622b,U+622d,U+622f,U+6231,U+6235,U+6238-623c,U+6242,U+6244-6246,U+624a,U+624f-6250,U+6255-6257,U+6259-625a,U+625c-6260,U+6262,U+6264-6265,U+6268,U+6271-6272,U+6274-6275,U+6277-6278,U+627a-627b,U+627d,U+6281-6283,U+6285-6288,U+628b-6290,U+6294,U+6299,U+629c-629e,U+62a3,U+62a6-62a7,U+62a9-62aa,U+62ad-62b0,U+62b2-62b4,U+62b6-62b8,U+62ba,U+62be,U+62c0-62c1,U+62c3,U+62cf,U+62d1,U+62d5,U+62de,U+62e0-62e1,U+62e4,U+62ea-62eb,U+62f0,U+62f2,U+62f5,U+62f8-62fb,U+6300,U+6303-6306,U+630a-630d,U+630f-6310,U+6312-6315,U+6317-6319,U+631c,U+6326-6327,U+6329,U+632c-632e,U+6330,U+6333-6338,U+633b-633c,U+633f-6341,U+6344,U+6347-6348,U+634a,U+6351-6354,U+6356-635d,U+6360,U+6364-6366,U+636a,U+636c,U+636f-6370,U+6373-6375,U+6378-6379,U+637c-637f,U+6381,U+6385-6386,U+638b,U+638d,U+6391,U+6393-6395,U+6397,U+639a,U+639c","diff":0,"charsSize":212},{"name":"139.woff2","size":66940,"chars":"U+639d-639f,U+63a1,U+63a4,U+63a6,U+63ab,U+63af,U+63b1-63b2,U+63b5-63b6,U+63b9,U+63bb,U+63bd,U+63bf,U+63c1-63c3,U+63c5,U+63c7-63c8,U+63ca-63cc,U+63d1,U+63d3-63d5,U+63d7-63d9,U+63dc-63dd,U+63df,U+63e2,U+63e4-63e8,U+63eb-63ec,U+63ef-63f1,U+63f3,U+63f5,U+63f7,U+63fa-63fc,U+63fe,U+6403-6404,U+6406-640a,U+640e,U+6411-6412,U+6415,U+6418-641a,U+641d,U+641f,U+6422-6424,U+6427-6429,U+642b,U+642e-6433,U+6435,U+6437-6439,U+643b-643c,U+643e,U+6442-6443,U+6449,U+644b-6450,U+6453,U+6455-6457,U+6459-645b,U+645d,U+6460-6462,U+6464-6466,U+6468,U+646a-646c,U+646e,U+6470-6472,U+6474-6475,U+6477,U+647c-6481,U+6483,U+6486,U+6489-648f,U+6494,U+6497-6498,U+649b-649d,U+64a0-64a2,U+64a6-64a8,U+64aa,U+64af,U+64b1,U+64b4,U+64b6,U+64b9,U+64bd,U+64c3,U+64c6,U+64c8-64c9,U+64cc,U+64cf,U+64d1","diff":0,"charsSize":164},{"name":"140.woff2","size":65188,"chars":"U+64d3,U+64d5-64d6,U+64d9,U+64db-64dd,U+64df,U+64e3,U+64e5,U+64e7-64eb,U+64ed-64ee,U+64f3,U+64f5-64f6,U+64f8-64f9,U+64fd,U+64ff,U+6501-6503,U+6505,U+6507-6508,U+650a-650e,U+6510-6511,U+6513,U+6515,U+6517,U+651a,U+651e-6521,U+6526-6529,U+652d,U+6530-6533,U+6537,U+653a,U+653c-653d,U+6540-6544,U+6546-6547,U+654a-654b,U+654d,U+6550,U+6552-6554,U+655a,U+655c,U+655f-6561,U+6564-6565,U+6567-656a,U+656d-656f,U+6571,U+6573,U+6576,U+6579-6581,U+6584-6586,U+6588-658a,U+658d-658f,U+6592,U+6594,U+6596,U+6598,U+659a,U+659d-659e,U+65a0,U+65a2-65a3,U+65a6,U+65a8,U+65aa,U+65ae,U+65b1-65b6,U+65b8,U+65ba-65bb,U+65be-65c0,U+65c7-65ca,U+65cd,U+65d0-65d1,U+65d3-65d5,U+65d8-65dc","diff":0,"charsSize":148},{"name":"136.woff2","size":66776,"chars":"U+5f3e-5f3f,U+5f41-5f47,U+5f49-5f4b,U+5f4d,U+5f4f,U+5f51,U+5f54,U+5f59-5f5c,U+5f5f-5f60,U+5f63,U+5f67-5f68,U+5f6b,U+5f6e-5f6f,U+5f72,U+5f74-5f76,U+5f78,U+5f7a,U+5f7d-5f7e,U+5f83,U+5f86,U+5f8d-5f8f,U+5f93-5f94,U+5f96,U+5f9a-5f9b,U+5f9d,U+5f9f,U+5fa2-5fa7,U+5fab-5fac,U+5faf-5fb4,U+5fb6,U+5fb8,U+5fba-5fbb,U+5fbe-5fc2,U+5fc7-5fc8,U+5fca-5fcb,U+5fce,U+5fd3-5fd5,U+5fda-5fdc,U+5fde-5fdf,U+5fe2-5fe3,U+5fe5-5fe6,U+5fe8-5fe9,U+5fec,U+5fef-5ff0,U+5ff2-5ff4,U+5ff6-5ff7,U+5ff9-5ffa,U+5ffc,U+6007-6009,U+600b-600c,U+6010-6011,U+6013,U+6017-6018,U+601a,U+601e-601f,U+6022-6024,U+602c-602e,U+6030-6034,U+6036-603a,U+603d-603e,U+6040,U+6044-6045,U+6047-604a,U+604c,U+604e-604f,U+6051,U+6053-6054,U+6056-6058,U+605b-605c,U+605e-6061,U+6066,U+606e,U+6071-6072,U+6074-6075,U+6077,U+607e,U+6080-6082,U+6086-6088,U+608a-608b,U+608e-6091,U+6093,U+6095,U+6097-6099,U+609c,U+609e,U+60a1-60a2,U+60a4-60a5,U+60a7,U+60a9-60aa,U+60ae,U+60b0,U+60b3,U+60b7,U+60b9-60ba,U+60be-60c4,U+60c7-60c9,U+60cc-60d0","diff":0,"charsSize":209},{"name":"137.woff2","size":65024,"chars":"U+60d2-60d4,U+60d6-60d7,U+60d9,U+60db,U+60de,U+60e2-60e5,U+60ea,U+60f5,U+60f7-60f8,U+60fc-60ff,U+6102-6105,U+6107,U+610a-610c,U+6110-6114,U+6116-6119,U+611d-611e,U+6121-6122,U+6125,U+6129-612a,U+612c-6133,U+6135-6136,U+6138-613d,U+6140-6141,U+6143,U+6145-6147,U+6149,U+614f-6150,U+6152-6154,U+6156-6157,U+6159,U+615b-615c,U+615e,U+6160-6161,U+6164-6166,U+6169,U+616c-616d,U+616f,U+6171-6172,U+6174,U+6178-617b,U+617d,U+617f-6181,U+6183-6189,U+618c-618d,U+618f,U+6193,U+6195-6199,U+619b-619c,U+619e-61a3,U+61a5-61a6,U+61aa,U+61ad,U+61af-61b1,U+61b3-61b5,U+61b8-61bd,U+61bf-61c1,U+61c3-61c6,U+61ce-61d0,U+61d3,U+61d5-61dd","diff":0,"charsSize":158},{"name":"135.woff2","size":66600,"chars":"U+5dc8-5dca,U+5dcc,U+5dce-5dd1,U+5dd3,U+5dd5,U+5dd7-5dda,U+5ddc,U+5ddf-5de0,U+5de4,U+5dea,U+5dec-5ded,U+5df5-5df6,U+5df8,U+5dfa-5dfc,U+5dff-5e00,U+5e04,U+5e07,U+5e09-5e0b,U+5e0d-5e0e,U+5e12-5e13,U+5e17,U+5e1e-5e24,U+5e28-5e2a,U+5e2c,U+5e2f-5e30,U+5e32,U+5e34-5e35,U+5e39-5e3a,U+5e3e-5e3f,U+5e41,U+5e46-5e4b,U+5e4d-5e53,U+5e56,U+5e59-5e5a,U+5e5c-5e5d,U+5e60,U+5e64-5e6a,U+5e6d-5e71,U+5e75,U+5e77,U+5e81-5e83,U+5e85,U+5e88-5e89,U+5e8c-5e8e,U+5e92,U+5e98,U+5e9b,U+5e9d,U+5ea1-5ea4,U+5ea8-5eaa,U+5eac,U+5eae-5eb2,U+5eb4,U+5eba-5ebd,U+5ebf-5ec0,U+5ec3,U+5ec5-5ec7,U+5ecb-5ed0,U+5ed4-5ed5,U+5ed7-5ed9,U+5edc,U+5ede,U+5ee0,U+5ee4-5ee7,U+5eeb,U+5eed-5ef2,U+5ef5,U+5ef8-5ef9,U+5efb-5efd,U+5f05-5f07,U+5f09,U+5f0c-5f0e,U+5f10,U+5f16,U+5f19-5f1a,U+5f1c-5f1e,U+5f21-5f24,U+5f28,U+5f2b-5f2c,U+5f2e,U+5f30,U+5f32,U+5f34,U+5f36,U+5f38,U+5f3b,U+5f3d","diff":0,"charsSize":190},{"name":"134.woff2","size":60468,"chars":"U+5ce2-5ce3,U+5ce7,U+5ceb-5cec,U+5cee,U+5cf1-5cf3,U+5cf5,U+5cf7-5cfa,U+5cfc,U+5cfe-5d01,U+5d04-5d05,U+5d08-5d0c,U+5d0f-5d10,U+5d12-5d13,U+5d15,U+5d18-5d1a,U+5d1c-5d1d,U+5d1f-5d21,U+5d23,U+5d25,U+5d28,U+5d2a-5d2b,U+5d2f-5d32,U+5d35-5d3c,U+5d3f-5d46,U+5d48-5d49,U+5d4d-5d4f,U+5d51-5d57,U+5d59-5d5a,U+5d5c,U+5d5e-5d68,U+5d6a,U+5d6d-5d6e,U+5d70-5d73,U+5d75-5d80,U+5d83,U+5d85-5d86,U+5d88-5d96,U+5d98,U+5d9a-5d9c,U+5d9e-5d9f,U+5da1-5da6,U+5da8-5db3,U+5db5-5db6,U+5db9,U+5dbb,U+5dbe-5dc4,U+5dc6-5dc7","diff":0,"charsSize":164},{"name":"133.woff2","size":68432,"chars":"U+5b3c-5b3f,U+5b41-5b42,U+5b44-5b4b,U+5b4d-5b4f,U+5b52,U+5b56,U+5b5e,U+5b60-5b61,U+5b67-5b68,U+5b6d-5b6f,U+5b72,U+5b74,U+5b77,U+5b79,U+5b7b-5b7c,U+5b7e,U+5b82,U+5b86,U+5b8a,U+5b8d-5b8e,U+5b90-5b92,U+5b94,U+5b96,U+5b9f,U+5ba7-5ba9,U+5bac-5bad,U+5baf,U+5bb1-5bb2,U+5bb7,U+5bba-5bbc,U+5bc0-5bc1,U+5bc3,U+5bc8-5bcb,U+5bcd-5bcf,U+5bd1,U+5bd4-5bdc,U+5be0,U+5be3,U+5bea,U+5bed,U+5bef,U+5bf1-5bf4,U+5bf7,U+5bfd-5bfe,U+5c00,U+5c02-5c03,U+5c05,U+5c0c,U+5c10,U+5c12-5c13,U+5c17,U+5c19,U+5c1b,U+5c1e-5c21,U+5c23,U+5c26,U+5c28-5c2b,U+5c2d-5c30,U+5c32-5c33,U+5c35-5c36,U+5c43-5c44,U+5c47,U+5c4c,U+5c52-5c54,U+5c56-5c58,U+5c5a,U+5c5d,U+5c5f,U+5c67,U+5c69-5c6b,U+5c6d,U+5c70,U+5c72-5c78,U+5c7b-5c7e,U+5c80,U+5c83-5c87,U+5c89-5c8b,U+5c8e-5c8f,U+5c92-5c93,U+5c95,U+5c9d-5ca0,U+5ca4-5ca8,U+5caa,U+5cae-5cb0,U+5cb2,U+5cb4,U+5cb6,U+5cb9-5cbc,U+5cbe,U+5cc0,U+5cc2-5cc3,U+5cc5-5cca,U+5ccc-5cd1,U+5cd3-5cd8,U+5cda-5ce0","diff":0,"charsSize":211},{"name":"132.woff2","size":64764,"chars":"U+5a70-5a73,U+5a78-5a79,U+5a7b-5a7e,U+5a80-5a91,U+5a93-5a99,U+5a9c-5aa6,U+5aa8-5aa9,U+5aab-5ab1,U+5ab4,U+5ab6-5ab7,U+5ab9-5abb,U+5abf-5ac0,U+5ac3-5ac8,U+5aca,U+5acd-5ad1,U+5ad3,U+5ad5,U+5ad9-5adb,U+5add-5adf,U+5ae2,U+5ae4-5ae5,U+5ae7-5ae8,U+5aea,U+5aec-5af0,U+5af2-5af4,U+5af6-5af9,U+5afb-5aff,U+5b01-5b07,U+5b0a,U+5b0d-5b15,U+5b18,U+5b1a-5b20,U+5b22-5b23,U+5b25-5b29,U+5b2b-5b2f,U+5b31,U+5b33,U+5b35-5b36,U+5b39-5b3b","diff":0,"charsSize":150},{"name":"131.woff2","size":66280,"chars":"U+590e,U+5910-5913,U+5917-5918,U+591b,U+591d-591e,U+5921,U+5923,U+5926,U+5928,U+592c,U+5930,U+5932-5933,U+5935-5936,U+593b,U+593d,U+593f-5940,U+5943,U+5945-5946,U+594a,U+594c-594d,U+5952-5953,U+5959,U+595b-595f,U+5961,U+5963-5964,U+5966,U+5968,U+596b-596d,U+596f-5972,U+5975,U+5977,U+597a-597b,U+597e-5980,U+5985,U+5989,U+598b-598c,U+598e-5991,U+5994-5995,U+5998,U+599a-599c,U+599f-59a2,U+59a6-59a7,U+59ac-59ad,U+59b0-59b1,U+59b4-59b8,U+59ba,U+59bc-59bd,U+59bf-59c5,U+59c7-59c9,U+59cc,U+59ce-59cf,U+59d5-59d6,U+59d9,U+59db,U+59de-59e2,U+59e4,U+59e7,U+59e9-59eb,U+59ed-59f8,U+59fa,U+59fc-59fe,U+5a00,U+5a02,U+5a0a-5a0b,U+5a0d-5a10,U+5a12,U+5a14-5a17,U+5a19-5a1a,U+5a1d-5a1e,U+5a21-5a22,U+5a24,U+5a26-5a28,U+5a2a-5a30,U+5a33,U+5a35,U+5a37-5a3b,U+5a3d-5a3f,U+5a42-5a45,U+5a47-5a48,U+5a4b-5a54,U+5a56-5a59,U+5a5b-5a61,U+5a63-5a65,U+5a68-5a69,U+5a6b-5a6c,U+5a6e-5a6f","diff":0,"charsSize":208},{"name":"130.woff2","size":62916,"chars":"U+581c,U+581f,U+5822-5823,U+5825-5829,U+582b-582e,U+5832-5833,U+5836-5843,U+5845-5849,U+584e,U+5850,U+5853,U+5855-5857,U+5859,U+585b-585d,U+585f-5861,U+5863-5864,U+5866-586a,U+586d-5874,U+5876-5878,U+587a-587d,U+587f,U+5882,U+5884,U+5886-5888,U+588b-5891,U+5894-5898,U+589b,U+589d,U+58a0-58a7,U+58aa-58ad,U+58af-58b2,U+58b4-58bb,U+58bd,U+58bf-58c0,U+58c2-58c4,U+58c6,U+58c8-58cd,U+58cf-58d0,U+58d2,U+58d4,U+58d6-58d7,U+58db-58dd,U+58e1,U+58e3,U+58e5-58e8,U+58ea,U+58ed,U+58f1-58f2,U+58f4-58f5,U+58f7-58f8,U+58fb-58fc,U+58fe-5901,U+5903,U+5905-5906,U+5908-590c","diff":0,"charsSize":163},{"name":"129.woff2","size":64472,"chars":"U+56ac-56ae,U+56b0-56b2,U+56b5,U+56b8-56bb,U+56bd-56bf,U+56c3-56c4,U+56c6-56c7,U+56c9,U+56cb-56d0,U+56d2-56d3,U+56d5-56d6,U+56d8-56d9,U+56dc,U+56e3,U+56e5-56e9,U+56ec,U+56ee-56ef,U+56f2-56f3,U+56f6-56f8,U+56fb-56fc,U+5700-5702,U+5705,U+570c,U+570e,U+5710-5711,U+5714-5715,U+5717,U+5719-571b,U+571d-571e,U+5720-5722,U+5724-5727,U+572b,U+5731-5732,U+5734-5738,U+573c-573d,U+573f,U+5741,U+5743-5746,U+5748-5749,U+574b,U+5752-5756,U+5758-5759,U+5762-5763,U+5765,U+5767,U+576c,U+576e,U+5771-5772,U+5774-5775,U+5778-577a,U+577d-5781,U+5787-578a,U+578d-5791,U+5794-579a,U+579d-579f,U+57a5,U+57a8,U+57aa,U+57ac,U+57af-57b1,U+57b3,U+57b6-57b7,U+57b9-57c1,U+57c4-57ca,U+57cc-57cd,U+57d0-57d1,U+57d3,U+57d6-57d7,U+57db-57dc,U+57de,U+57e2-57e3,U+57e5-57ec,U+57ee,U+57f0-57f3,U+57f5-57f6,U+57fb-57fc,U+57fe-57ff,U+5801,U+5803-5804,U+5808-5809,U+580c,U+580e-5810,U+5812-5814,U+5817-5818,U+581a-581b","diff":0,"charsSize":207},{"name":"128.woff2","size":64864,"chars":"U+5568-5569,U+556b,U+556f-5574,U+5579-557a,U+557d,U+557f,U+5585,U+558c-558e,U+5590,U+5592-5593,U+5595-5597,U+559b,U+55a0-55a6,U+55a8-55a9,U+55ad,U+55af-55b0,U+55b4,U+55b6,U+55b8,U+55ba,U+55bc,U+55bf-55c3,U+55c8,U+55ca-55cb,U+55cf-55d0,U+55d5,U+55d7-55d9,U+55db,U+55de,U+55e0,U+55e2,U+55e7,U+55ed-55ee,U+55f0-55f1,U+55f4,U+55f8-55fc,U+55ff,U+5602-5605,U+5607,U+560a-560b,U+5610-5613,U+5615,U+5619-561a,U+561d,U+5620-5622,U+5625-5626,U+5628-562b,U+5633,U+5637,U+563a,U+563c-563e,U+5640-5644,U+5646-564b,U+564f-5652,U+5655-5656,U+565a-565b,U+565e-565f,U+5661,U+5663,U+5667,U+566d-566e,U+5670,U+5673,U+5675,U+5677,U+5679-567a,U+567d-567f,U+5681-5684,U+5688-568b,U+568d,U+5690-5692,U+5696-56a2,U+56a4,U+56a7,U+56a9-56ab","diff":0,"charsSize":166},{"name":"127.woff2","size":68196,"chars":"U+531f,U+5322,U+5324-5325,U+5327-5329,U+532b-532c,U+5330,U+5332-5338,U+533c-533d,U+5342,U+5344,U+5346,U+534b-534d,U+5350,U+5358-5359,U+535b,U+535d,U+5365,U+5368,U+536a,U+536c-536d,U+5372,U+5376,U+537c,U+537e,U+5380-5381,U+5383,U+5387-5388,U+538a,U+538e-5394,U+5396-5397,U+539b-539c,U+539e,U+53a0-53a1,U+53a4,U+53a7,U+53aa-53ac,U+53af-53b1,U+53b3,U+53b5,U+53b7-53ba,U+53bc-53be,U+53c0,U+53c5-53c7,U+53ce-53d0,U+53d2-53d3,U+53d5,U+53da,U+53dc-53de,U+53e1,U+53e7,U+53f4,U+53fa,U+53fe-5400,U+5402,U+5405,U+5407,U+540b,U+5414,U+5418-541a,U+541c,U+5422,U+5424-5425,U+542a,U+5430,U+5437,U+543a,U+543d,U+543f,U+5441,U+5444-5445,U+5447,U+5449,U+544c-544f,U+545a,U+545d-5461,U+5463,U+5465,U+5467,U+5469-5470,U+5474,U+5479-547a,U+547e-547f,U+5481,U+5483,U+5485,U+5487-548a,U+548d,U+5491,U+5493,U+5497-5498,U+549c,U+549e-54a2,U+54a5,U+54ae,U+54b0,U+54b2,U+54b5-54b7,U+54b9-54ba,U+54be,U+54c3,U+54c5,U+54ca-54cb,U+54d6,U+54d8,U+54db,U+54e0,U+54e3-54e4,U+54eb-54ec,U+54ef-54f1,U+54f4-54f9,U+54fb,U+54fe,U+5500,U+5502-5503,U+5505,U+5508,U+550a-550e,U+5512-5513,U+5516-5519,U+551c-551f,U+5521,U+5525-5526,U+5528-5529,U+552b,U+552d,U+5532,U+5534-5536,U+5539-553b,U+553d,U+5540,U+5542,U+5545,U+5547-5548,U+554b-554e,U+5551-5552,U+5554,U+5557-555b,U+555d,U+555f-5560,U+5562-5563","diff":0,"charsSize":254},{"name":"126.woff2","size":68812,"chars":"U+5186-5187,U+518b,U+518e-5190,U+5193-5194,U+5198,U+519a,U+519d-519f,U+51a1,U+51a3,U+51a6-51a9,U+51ad-51ae,U+51b4,U+51b8-51ba,U+51be-51bf,U+51c1-51c3,U+51c5,U+51c8,U+51ca,U+51ce,U+51d0,U+51d2-51da,U+51de-51df,U+51e2-51e3,U+51e5-51ea,U+51ec,U+51ee,U+51f2,U+51f4,U+51f7,U+51fe,U+5204-5205,U+5209,U+520b-520c,U+520f-5210,U+5213-5215,U+521c,U+521e-521f,U+5221-5223,U+5226-5227,U+522c,U+522f,U+5231-5232,U+5234-5235,U+523c,U+523e,U+5245-5246,U+5248-5249,U+524f,U+5252-5253,U+5255,U+5257-525a,U+525f-5260,U+5262-5264,U+5266,U+5268,U+526b-526d,U+5271,U+5273,U+5276-527c,U+527e,U+5280,U+5285-5286,U+528b,U+528e-528f,U+5292,U+5294-529a,U+529c,U+52a4-52a7,U+52ae-52b0,U+52b4-52bd,U+52c0,U+52c2,U+52c4-52c6,U+52c8,U+52ca,U+52cc-52cf,U+52d1,U+52d3-52d4,U+52d7,U+52da-52dc,U+52e0-52e1,U+52e3,U+52e5-52ef,U+52f2,U+52f4,U+52f6-52f7,U+52fc-52fd,U+5301-5304,U+5307,U+5309-530c,U+530e,U+5311-5314,U+5318,U+531b-531c,U+531e,U+32f99,U+32f9d,U+33069,U+3312e,U+331eb,U+3321b,U+332e9,U+332ed-332ee,U+332f3,U+33398,U+33400,U+3340a","diff":0,"charsSize":219},{"name":"125.woff2","size":68912,"chars":"U+5072-5073,U+5079-507a,U+507c-507d,U+5081-5084,U+5086-5087,U+5089-508c,U+508e-5090,U+5092-5095,U+5097,U+509a-50a1,U+50a4,U+50a6,U+50aa-50ab,U+50ae,U+50b0-50b1,U+50b6,U+50b8-50b9,U+50bc-50bd,U+50bf-50c1,U+50c3-50c4,U+50c6-50c8,U+50ca-50ce,U+50d0,U+50d2-50d4,U+50d7-50d9,U+50db-50dd,U+50df-50e4,U+50e9-50eb,U+50ef-50f0,U+50f2,U+50f4,U+50f6-50f8,U+50fa,U+50fc-50ff,U+5103,U+5105,U+510a,U+510c,U+510e-510f,U+5111,U+5113,U+5116-511e,U+5120,U+5122-5129,U+512b-5131,U+5133-5136,U+5138-5139,U+513d-513e,U+5142,U+514a,U+514e-5150,U+5153,U+5158-5159,U+515b,U+515d-5161,U+5163-5164,U+5166,U+516f,U+5172,U+517a,U+517e-517f,U+5183-5184,U+324d6,U+324dc,U+32625,U+3263f,U+3277b,U+327f1,U+32800,U+3280d,U+329e4,U+32a14,U+32c39,U+32c3c,U+32db9-32dba,U+32dc7,U+32e30,U+32e8b,U+32f17","diff":0,"charsSize":171},{"name":"124.woff2","size":72504,"chars":"U+4f02-4f08,U+4f0b-4f0c,U+4f12-4f14,U+4f16,U+4f1c-4f1d,U+4f21,U+4f23,U+4f28-4f29,U+4f2c-4f2e,U+4f31,U+4f33,U+4f35,U+4f37,U+4f39,U+4f3b,U+4f3e-4f42,U+4f44-4f45,U+4f49-4f4c,U+4f52,U+4f56,U+4f61-4f62,U+4f66,U+4f68,U+4f6a-4f6b,U+4f6d-4f6e,U+4f71-4f72,U+4f75,U+4f77-4f7a,U+4f7d,U+4f80-4f82,U+4f85,U+4f87,U+4f8a,U+4f8c,U+4f8e,U+4f90,U+4f92-4f93,U+4f95,U+4f98-4f9a,U+4f9c,U+4f9e-4f9f,U+4fa1-4fa2,U+4fa4,U+4fab,U+4fad,U+4fb0-4fb4,U+4fb8-4fbe,U+4fc0,U+4fc2,U+4fc6-4fc9,U+4fcb-4fcd,U+4fd2-4fd6,U+4fd9,U+4fdb,U+4fe2,U+4fe4-4fe5,U+4fe7,U+4feb,U+4ff0,U+4ff2,U+4ff4-4ff7,U+4ff9,U+4ffb-4ffd,U+4fff,U+5001-5005,U+5007-5008,U+500a,U+500e,U+5010,U+5013,U+5015,U+5017,U+501b,U+501d-501e,U+5020,U+5022-5024,U+5027,U+502f-5039,U+503b,U+503d,U+503f-5042,U+5044-5046,U+504a-504b,U+504d,U+5050-5054,U+5056-5059,U+505b,U+505d-5064,U+5066-506b,U+506d-5071,U+31677,U+316a6,U+316e5,U+3176b-3176c,U+317db,U+318c9,U+3190f,U+31ac9,U+31b92,U+31b9c,U+31bb8,U+31bc4,U+31bcd,U+31c17,U+31c1b,U+31c2e,U+31c3e,U+31c7f,U+31cea,U+31d1f,U+31d31,U+31e07,U+31e25,U+31e40,U+31e4d,U+31eb0,U+31f00,U+31f11,U+32003,U+32070,U+32084,U+3208d-3208e,U+32117,U+3211a,U+321f4,U+321fd,U+32217,U+32235,U+32239,U+32245,U+322e4,U+3234c,U+3235b,U+3236d,U+3237f,U+323bf,U+323c6,U+32402","diff":0,"charsSize":247},{"name":"123.woff2","size":74988,"chars":"U+4de2-4dff,U+4e02,U+4e04-4e06,U+4e0f,U+4e12,U+4e17,U+4e20-4e21,U+4e23,U+4e29,U+4e2e-4e2f,U+4e31,U+4e33,U+4e35,U+4e37,U+4e3c,U+4e40-4e42,U+4e44,U+4e46,U+4e4a,U+4e51,U+4e55,U+4e57,U+4e5a-4e5b,U+4e62-4e65,U+4e67-4e68,U+4e6a-4e6f,U+4e72,U+4e74-4e7d,U+4e7f-4e81,U+4e83-4e85,U+4e87,U+4e8a,U+4e90,U+4e96-4e97,U+4e9c-4e9d,U+4ea3,U+4eaa,U+4eaf-4eb1,U+4eb4,U+4eb6-4eb9,U+4ebc-4ebe,U+4ec8,U+4ecc,U+4ecf-4ed0,U+4ed2,U+4eda-4edc,U+4ee0,U+4ee2,U+4ee6-4ee7,U+4ee9,U+4eed-4eef,U+4ef1,U+4ef4,U+4ef8-4efa,U+4efc,U+4efe,U+4f00,U+30afd-30afe,U+30b04,U+30b0a,U+30b14-30b15,U+30b18,U+30b2a,U+30b38,U+30b43,U+30b4b,U+30b5d,U+30b87,U+30ba4,U+30bf2,U+30bf6,U+30bfc,U+30c1f,U+30c21,U+30c24,U+30c28,U+30c2b-30c2c,U+30c53,U+30c5f,U+30c69,U+30c71-30c72,U+30cbd,U+30cc7,U+30d4b,U+30d55,U+30d5d-30d5f,U+30d63-30d64,U+30d66-30d67,U+30d69,U+30d74,U+30d7c,U+30d8a,U+30d8c,U+30ddf-30de0,U+30de3,U+30de5-30de6,U+30e01,U+30e04,U+30e6c,U+30e70,U+30e72,U+30e77,U+30e79,U+30edd-30ede,U+30f03,U+30f57,U+30f59-30f5a,U+30f5c,U+30f5f,U+30f62,U+30f64,U+30f66,U+30f6a,U+30f74,U+30f7c-30f7d,U+30f82,U+30f91,U+30f9b,U+30fa0,U+30fab,U+3106c,U+31076,U+31090,U+310a8-310aa,U+310b1,U+310ea,U+310f1,U+310fa,U+31148,U+3114b-3114c,U+31151,U+3115b,U+311a5,U+311cf,U+311d1-311d2,U+311dd,U+311e3,U+311eb,U+311ee,U+311f1,U+311f3,U+311f6,U+311fb,U+311fe,U+31203,U+3120c,U+3124d,U+31250,U+31254,U+31270,U+31275,U+3127b-3127c,U+31283,U+31288,U+3128a,U+3128c,U+312ac-312ad,U+312b3,U+312d0,U+3132e,U+31342,U+31357,U+313bc,U+313f1,U+313ff,U+3143f,U+31455,U+3145e,U+3154c,U+31587,U+3158e,U+31592,U+315e9","diff":0,"charsSize":267},{"name":"122.woff2","size":58056,"chars":"U+4d70-4de1,U+3067d,U+306d1-306d3,U+306e6,U+306ec,U+306f4,U+30708,U+30729,U+30733,U+30776,U+30787,U+307d8,U+30828,U+30831,U+30842,U+30849,U+30853,U+30858,U+308ca,U+308f2,U+308fb,U+30915,U+3094c,U+3094f,U+30955,U+3095b,U+30969,U+30993,U+3099c,U+309aa-309ab,U+309c9,U+30a16,U+30a1b,U+30a62,U+30a67,U+30aa9,U+30ab1,U+30abf","diff":0,"charsSize":154},{"name":"120.woff2","size":58632,"chars":"U+4caa-4d0d,U+30001-30002,U+30004-30006,U+30008-30009,U+30020-30022,U+30053,U+3005c,U+30061,U+3006c,U+30072,U+30078,U+3007c,U+3008e,U+300dd,U+300ee,U+300f7,U+3011d,U+30149-3014a,U+30170,U+30174,U+30179,U+3018a,U+30196,U+301b3,U+301bb,U+301db,U+301e0,U+301e2-301e3,U+301f0,U+30270","diff":0,"charsSize":137},{"name":"121.woff2","size":64044,"chars":"U+4d0e-4d6f,U+302c0,U+302d9,U+302db-302dc,U+302de,U+302f7,U+302fb,U+30300,U+30302,U+30335,U+3033b,U+3034e,U+30367-30368,U+30370-30371,U+30396,U+303a0,U+30409,U+30414,U+3043a,U+3043f,U+3044a,U+3044c,U+30450,U+3045d-3045e,U+304bc,U+304ca,U+304cc,U+304d9,U+304e2-304e3,U+304e8,U+304ec-304ed,U+3057a,U+305d1,U+305d6,U+305dc-305dd,U+305e3,U+305f6","diff":0,"charsSize":141},{"name":"119.woff2","size":56568,"chars":"U+4c3b-4ca9","diff":0,"charsSize":111},{"name":"118.woff2","size":65688,"chars":"U+4bda-4c3a,U+2f804,U+2f80f,U+2f818,U+2f81a,U+2f822,U+2f828,U+2f82c,U+2f833,U+2f83b,U+2f83f,U+2f852,U+2f862,U+2f86d,U+2f873,U+2f877-2f878,U+2f884,U+2f89a-2f89b,U+2f8ac,U+2f8b2,U+2f8b6,U+2f8d2-2f8d3,U+2f8db-2f8dc,U+2f8e1,U+2f8ea,U+2f8ed,U+2f8fc,U+2f903,U+2f90b,U+2f90f,U+2f91a,U+2f920-2f921,U+2f945,U+2f947,U+2f96c,U+2f995,U+2f9d0,U+2f9de-2f9df,U+2f9f4","diff":0,"charsSize":141},{"name":"117.woff2","size":61844,"chars":"U+4b5c-4bd9","diff":0,"charsSize":126},{"name":"116.woff2","size":62088,"chars":"U+4ade-4b5b,U+2ecf4,U+2ecfc,U+2ed3f,U+2edcc-2edcd,U+2edf5,U+2ee5d","diff":0,"charsSize":133},{"name":"115.woff2","size":69468,"chars":"U+4a6b-4add,U+2e8f2-2e8f7,U+2e932,U+2e9f4-2e9f5,U+2ea3b,U+2ea5b,U+2ea5d-2ea5e,U+2eaa5,U+2eac2,U+2eb1b-2eb24,U+2eb65-2eb66,U+2eb68,U+2eb6a,U+2eb70,U+2eb87,U+2ebd9,U+2ebf0,U+2ec35,U+2ec63,U+2ec7b,U+2ec93","diff":0,"charsSize":152},{"name":"114.woff2","size":66428,"chars":"U+49eb-4a6a,U+2e41a,U+2e428,U+2e502,U+2e505,U+2e50a,U+2e51a,U+2e569,U+2e581,U+2e5b1,U+2e5fb,U+2e64a-2e64b,U+2e6ea,U+2e774-2e775,U+2e777-2e77a,U+2e81e","diff":0,"charsSize":148},{"name":"113.woff2","size":68452,"chars":"U+495b-49ea,U+2ddd4,U+2de5c,U+2ded9,U+2defe,U+2e00e,U+2e014,U+2e0b9,U+2e0c4,U+2e18f,U+2e1d8,U+2e261-2e262,U+2e264,U+2e267-2e268,U+2e26a-2e26c,U+2e26f,U+2e278","diff":0,"charsSize":164},{"name":"111.woff2","size":69760,"chars":"U+483a-48da,U+2d25d,U+2d382,U+2d475,U+2d544,U+2d546,U+2d613,U+2d64f,U+2d655,U+2d6a6,U+2d70c,U+2d80d","diff":0,"charsSize":172},{"name":"112.woff2","size":63452,"chars":"U+48db-495a,U+2d8c7,U+2d8e7,U+2d930,U+2da5a,U+2da86,U+2daa4,U+2dc49-2dc4a,U+2dcff,U+2dd08,U+2dd0a","diff":0,"charsSize":139},{"name":"110.woff2","size":62276,"chars":"U+47c2-4839,U+2cd9f-2cda0,U+2cda7-2cda8,U+2cdad-2cdae,U+2cdd5,U+2ce01,U+2ce05,U+2ce08,U+2ce0a,U+2ce18,U+2ce1a,U+2ce22-2ce23,U+2ce26,U+2ce29-2ce2a,U+2ce31,U+2ce7c,U+2ce88,U+2ce93,U+2cea4,U+2cea8,U+2cead,U+2cf65,U+2d026,U+2d075,U+2d079,U+2d0c2,U+2d11b,U+2d139,U+2d208","diff":0,"charsSize":153},{"name":"109.woff2","size":65176,"chars":"U+475f-47c1,U+2c9b0-2c9b1,U+2c9bb,U+2c9c0,U+2ca02,U+2ca0e,U+2ca7d,U+2ca8d,U+2caa9,U+2cb29,U+2cb2b-2cb2e,U+2cb30-2cb32,U+2cb38-2cb3b,U+2cb3f,U+2cb41,U+2cb4a,U+2cb4d-2cb4e,U+2cb5a-2cb5b,U+2cb63-2cb64,U+2cb68-2cb69,U+2cb6c,U+2cb6f,U+2cb72-2cb74,U+2cb76,U+2cb78,U+2cb7c,U+2cba4-2cba6,U+2cbb1,U+2cbb4,U+2cbbf-2cbc0,U+2cbce,U+2cc56,U+2cc5f,U+2cc66,U+2cc6d,U+2ccb1,U+2ccbd,U+2ccc7,U+2ccf3,U+2ccf5-2ccf6,U+2ccfd,U+2ccff,U+2cd02-2cd03,U+2cd0a,U+2cd10,U+2cd68,U+2cd81,U+2cd8b-2cd8d,U+2cd8f-2cd90","diff":0,"charsSize":170},{"name":"108.woff2","size":67236,"chars":"U+46f3-475e,U+2c58b,U+2c591,U+2c598,U+2c59e,U+2c613,U+2c616,U+2c618,U+2c61c-2c61d,U+2c621-2c622,U+2c629,U+2c62b-2c62d,U+2c62f,U+2c635,U+2c642,U+2c646-2c647,U+2c64a-2c64b,U+2c65e,U+2c696,U+2c728,U+2c72c,U+2c72f,U+2c79f,U+2c7c1,U+2c7fd,U+2c805,U+2c816,U+2c842,U+2c88a-2c88b,U+2c8c0,U+2c8d9,U+2c8de,U+2c8e1,U+2c8f3,U+2c907,U+2c90a,U+2c910,U+2c916,U+2c91d,U+2c928,U+2c930,U+2c97a","diff":0,"charsSize":156},{"name":"107.woff2","size":67300,"chars":"U+466e-46f2,U+2c05f,U+2c080-2c081,U+2c089,U+2c09b,U+2c0a9,U+2c0ad,U+2c0c0,U+2c0ca,U+2c0d8,U+2c0eb,U+2c129,U+2c1ae,U+2c1d5,U+2c1d8-2c1d9,U+2c1de,U+2c1f9,U+2c227,U+2c267,U+2c27c,U+2c288,U+2c29c,U+2c2a4,U+2c2b6,U+2c317,U+2c35b,U+2c361,U+2c364,U+2c370,U+2c386,U+2c39e,U+2c3be,U+2c3df,U+2c457,U+2c47d,U+2c488,U+2c494,U+2c497,U+2c4e0,U+2c533,U+2c542","diff":0,"charsSize":175},{"name":"105.woff2","size":70596,"chars":"U+4589-45f6,U+2b751,U+2b758,U+2b75b,U+2b777,U+2b77a-2b77b,U+2b789,U+2b78e,U+2b797,U+2b79a-2b79b,U+2b79d,U+2b7a9,U+2b7bc-2b7bd,U+2b7c2,U+2b7c5,U+2b7d8,U+2b7e6-2b7e7,U+2b7f7,U+2b7f9,U+2b7fc,U+2b7ff,U+2b803,U+2b806,U+2b80a,U+2b81a-2b81c,U+2b823-2b824,U+2b826,U+2b892,U+2b899,U+2b8b8,U+2b8c6,U+2b8ca,U+2b92d,U+2b94e,U+2b95e,U+2b9b3,U+2b9c3,U+2b9c7,U+2b9ef,U+2b9ff,U+2ba4f,U+2ba51,U+2ba5b,U+2ba65,U+2ba6b,U+2ba74,U+2ba81,U+2ba88,U+2ba98,U+2bac7,U+2bae6,U+2bafe,U+2bb37,U+2bb5f,U+2bb62,U+2bb6a,U+2bb72,U+2bb7c,U+2bb83,U+2bb85","diff":0,"charsSize":176},{"name":"106.woff2","size":64076,"chars":"U+45f7-466d,U+2bbdc,U+2bc02,U+2bc06,U+2bc0d,U+2bc1b,U+2bc21,U+2bc2a,U+2bc30,U+2bca6,U+2bca8,U+2bcb7,U+2bd52,U+2bd58,U+2bd71,U+2bd77,U+2bd7a,U+2bd7c,U+2bd87,U+2bda7,U+2bdac,U+2bdc0,U+2bdc9,U+2bdf7,U+2bdf9,U+2be29,U+2be6f,U+2be75,U+2bf17,U+2bf1d,U+2bf23,U+2bf4b,U+2bf67,U+2c029-2c02a","diff":0,"charsSize":153},{"name":"104.woff2","size":71212,"chars":"U+4539-4588,U+2b461,U+2b4a2,U+2b4e7,U+2b4e9,U+2b4ef,U+2b4f1,U+2b4f4,U+2b4f6,U+2b4f9,U+2b502,U+2b507,U+2b50d-2b50e,U+2b52d,U+2b536,U+2b583,U+2b592,U+2b594,U+2b598,U+2b5ae-2b5af,U+2b5b3,U+2b5b9,U+2b5e0,U+2b5e6-2b5e7,U+2b5e9,U+2b5eb,U+2b5ee,U+2b5f0,U+2b5f4,U+2b61c-2b61d,U+2b624-2b628,U+2b62a,U+2b62c-2b62d,U+2b688-2b689,U+2b690,U+2b692,U+2b694-2b696,U+2b6a5,U+2b6aa,U+2b6ad,U+2b6da,U+2b6de-2b6df,U+2b6e3,U+2b6e9,U+2b6ed,U+2b6f3,U+2b6f6,U+2b6f8,U+2b728-2b729,U+2b72c,U+2b730,U+2b735-2b73d,U+2b746,U+2b74f","diff":0,"charsSize":155},{"name":"101.woff2","size":73936,"chars":"U+439a-441d,U+2a41e,U+2a434,U+2a46e,U+2a47e,U+2a49f-2a4a1,U+2a4b9,U+2a4d0,U+2a4db,U+2a4ec,U+2a4f9,U+2a4fd,U+2a4ff,U+2a54c-2a54d,U+2a56f,U+2a581,U+2a590,U+2a599,U+2a5a2,U+2a5a8,U+2a5b7,U+2a5cb,U+2a600,U+2a612,U+2a61a,U+2a64a,U+2a668,U+2a695,U+2a6a5,U+2a6ae,U+2a6b0,U+2a6d7-2a6df,U+2a703,U+2a736,U+2a79d,U+2a7dd,U+2a7e7,U+2a833,U+2a838,U+2a83d,U+2a848,U+2a8ae,U+2a8bc,U+2a8c8,U+2a8dd,U+2a8fb,U+2a917","diff":0,"charsSize":189},{"name":"103.woff2","size":72564,"chars":"U+44ae-4538,U+2aed0,U+2aeda,U+2af47,U+2af94,U+2afa2,U+2afa6,U+2afd6,U+2b042,U+2b061,U+2b088,U+2b0d1,U+2b11b,U+2b11f,U+2b124-2b125,U+2b127-2b128,U+2b12b,U+2b136-2b138,U+2b18f,U+2b1e6,U+2b1ed,U+2b209,U+2b21f,U+2b230,U+2b241,U+2b244,U+2b2a5,U+2b2bb,U+2b2cc,U+2b300,U+2b328,U+2b359-2b35a,U+2b35f,U+2b362-2b363,U+2b36f,U+2b372,U+2b37b,U+2b37d,U+2b393,U+2b3ab-2b3ac,U+2b3cb,U+2b3d0,U+2b404,U+2b410-2b411,U+2b413,U+2b416,U+2b418","diff":0,"charsSize":193},{"name":"102.woff2","size":66996,"chars":"U+441e-44ad,U+2a970,U+2a9e6,U+2a9f7,U+2aa07,U+2aa0a,U+2aa17,U+2aa27,U+2aa30,U+2aa36,U+2aa58,U+2aac6,U+2ab62,U+2ab75,U+2ab8b,U+2ab96,U+2abb6,U+2abc8,U+2abe1,U+2ac76-2ac77,U+2ac94,U+2adfd,U+2ae5a","diff":0,"charsSize":167},{"name":"99.woff2","size":72844,"chars":"U+42c9-4328,U+29bf0,U+29c1e,U+29c24,U+29ce4,U+29d06,U+29d3e,U+29d40,U+29d4b,U+29d56,U+29d5a,U+29d60,U+29d71,U+29d88,U+29d98,U+29da5,U+29dad,U+29daf,U+29dc0,U+29dd3,U+29dd5,U+29dda,U+29de9-29dea,U+29df6,U+29e00,U+29e04,U+29e0d-29e0e,U+29e19,U+29e36,U+29e3d,U+29e42,U+29e44,U+29e47,U+29e4e,U+29e7e,U+29eac-29ead,U+29edf,U+29ef8,U+29f08,U+29f27,U+29f30,U+29f48,U+29f4f,U+29f70,U+29f73,U+29f7c,U+29f7e,U+29f83,U+29f87,U+29f8c,U+29f97","diff":0,"charsSize":149},{"name":"100.woff2","size":82896,"chars":"U+4329-4399,U+29f9a,U+29fbf,U+29fe3,U+29fe7,U+29ffa,U+2a001,U+2a00b,U+2a018,U+2a01a,U+2a049,U+2a04e-2a050,U+2a05c,U+2a05f,U+2a06a,U+2a084,U+2a086,U+2a0b4,U+2a0ba,U+2a0bf,U+2a0c8,U+2a0cf,U+2a0e7-2a0e8,U+2a106,U+2a133,U+2a136,U+2a14f,U+2a183,U+2a1a9,U+2a1bb,U+2a1c4,U+2a1c9,U+2a1d8,U+2a1e1,U+2a1f0-2a1f1,U+2a1f7,U+2a202,U+2a213,U+2a248,U+2a28d,U+2a291,U+2a2ee-2a2ef,U+2a318,U+2a32d,U+2a32f,U+2a333,U+2a351,U+2a353,U+2a35b,U+2a360,U+2a363,U+2a374,U+2a38a,U+2a3ad,U+2a3bd-2a3be","diff":0,"charsSize":173},{"name":"98.woff2","size":72216,"chars":"U+4258-42c8,U+29781,U+297b0,U+2980c-2980d,U+29810,U+2981c,U+29869,U+2987a,U+298b0,U+298b2,U+298b7,U+298bc,U+298ca,U+298da,U+298e1,U+298f1,U+29944,U+29947,U+29949,U+299b1,U+299ba,U+299c6,U+299d0,U+29a02,U+29a1c,U+29a2c,U+29a33,U+29a38,U+29a8b,U+29af5,U+29af8,U+29afb,U+29b1e,U+29b4f,U+29b6a,U+29b9c,U+29bcb","diff":0,"charsSize":150},{"name":"97.woff2","size":71360,"chars":"U+41de-4257,U+29307-29308,U+2930a,U+2933d,U+2935c,U+2937f,U+29396,U+293f6-293f7,U+29405,U+29428,U+29454,U+2945d,U+2947e,U+294ba,U+294d0,U+294de,U+294e3,U+294e5,U+29508,U+29544,U+29573,U+295d7,U+29601,U+2961a,U+2963b,U+2967f,U+2969f,U+296a8,U+296c3,U+296de,U+296e9,U+296f2,U+296fd,U+29704,U+29707,U+29730,U+29736,U+2974e,U+29751,U+2976b","diff":0,"charsSize":163},{"name":"95.woff2","size":69272,"chars":"U+40da-415b,U+28891,U+288a2,U+288c8,U+288e7-288e8,U+28942,U+28948,U+28972,U+28987,U+289a1,U+289c0,U+289f1,U+28a0f,U+28a50,U+28b46,U+28b49,U+28b4e,U+28b5b,U+28c3b,U+28c3e,U+28c44,U+28c47,U+28c4d-28c4f,U+28c51,U+28c53-28c54,U+28c75,U+28c97,U+28ca0,U+28cca,U+28ccd,U+28cd2,U+28cdd,U+28d46,U+28d66,U+28d80,U+28d88,U+28d92","diff":0,"charsSize":170},{"name":"96.woff2","size":77280,"chars":"U+415c-41dd,U+28d99,U+28db2,U+28dc8,U+28df2,U+28dfa-28dfb,U+28e0f,U+28e14,U+28e17,U+28e1d,U+28e30,U+28e39,U+28e5d,U+28e93,U+28e99,U+28ead,U+28ee7,U+28ef6,U+28efb,U+28f4d,U+28f66,U+28f79,U+28f7b,U+28fcb,U+28fd8,U+2900e,U+290ce,U+290d9,U+290ec-290ed,U+290f1,U+29121,U+29166,U+2918a,U+29193,U+291d0,U+291d5,U+291eb,U+291ef,U+291f5,U+29259,U+2925c,U+29293,U+29299-2929a","diff":0,"charsSize":175},{"name":"94.woff2","size":72256,"chars":"U+405b-40d9,U+283a5,U+283aa,U+283b9,U+283d2,U+283e9,U+283f9,U+28408,U+28420-28421,U+28468,U+2846e,U+28473,U+28485,U+28487,U+28492,U+284ab,U+284c6,U+284c8,U+284da,U+284dc,U+284e6,U+28523,U+2853f,U+28595,U+2860c,U+2863b,U+2864a,U+28668,U+2866c,U+28676,U+28678,U+2867b,U+2868d,U+28693,U+28695,U+28697,U+286b2,U+286cb,U+286cd,U+286eb-286ed,U+286f3,U+28712,U+28714,U+2874d,U+28756,U+28778,U+287aa,U+287c9,U+287d6,U+287e0,U+287f9,U+287fb,U+28811,U+2886d","diff":0,"charsSize":183},{"name":"93.woff2","size":73228,"chars":"U+3fd4-405a,U+27e5e,U+27eaf,U+27ed9,U+27ede,U+27ef4,U+27f28,U+27f34,U+27f7b-27f7c,U+27fb1,U+27fb7,U+27fc1,U+27fd2,U+27fec,U+27ff3-27ff4,U+27ff9,U+28001,U+28042,U+2804f,U+28057,U+2805d,U+280bd-280bf,U+280c5,U+280de-280df,U+280e9,U+280f0,U+2810c,U+2812e,U+2814d,U+28154,U+2815d,U+2816c,U+2818d,U+281aa,U+281e4,U+28201,U+28207,U+28210,U+28256,U+28263,U+282b0,U+282b8,U+282bb,U+282cc-282cd,U+282e2,U+282f0,U+28308,U+28325,U+2834f,U+2837d,U+2838a,U+2838d","diff":0,"charsSize":192},{"name":"92.woff2","size":76576,"chars":"U+3f4c-3fd3,U+2790f,U+27916-27917,U+2793e,U+27944,U+27963,U+2797a,U+279a0,U+279a7,U+27a33,U+27a3e-27a3f,U+27a63,U+27a76,U+27ab0,U+27add,U+27af4,U+27b1e,U+27b28,U+27b2a,U+27b2f,U+27b48,U+27b53,U+27b88,U+27b99,U+27baa-27bab,U+27bc6,U+27bcb,U+27bf7,U+27c0e,U+27c19,U+27c28,U+27c35,U+27c49,U+27c53,U+27c82,U+27cb1,U+27cdc,U+27cdf,U+27cfd,U+27d03,U+27d06,U+27d10,U+27d2a,U+27d48,U+27d65,U+27d8a,U+27da0,U+27dba,U+27e18","diff":0,"charsSize":187},{"name":"91.woff2","size":74268,"chars":"U+3ed2-3f4b,U+2742f,U+27431,U+27445,U+27452,U+27486,U+27495,U+274bd,U+274fd,U+274ff,U+27548,U+2754d,U+2755b,U+2759a,U+275e9,U+275f9,U+27607-27608,U+2763d,U+27665,U+276d7,U+276fe,U+27700,U+27741,U+27743,U+27749,U+2774b,U+2774e,U+2775d,U+27764,U+2776c,U+27794,U+277a4,U+277c4,U+277c9,U+277cc,U+277f0,U+278b2,U+278d2,U+278e6,U+278ea","diff":0,"charsSize":162},{"name":"90.woff2","size":82808,"chars":"U+3e49-3ed1,U+26f09,U+26f4a,U+26f4f,U+26f8f,U+26f9b,U+26fae,U+26fb6,U+26fc9,U+26fda,U+2707e,U+27087,U+270d2,U+270fd,U+2711b-2711c,U+27138-27139,U+27141,U+27187,U+2718c,U+271e0,U+271fd,U+27222,U+27246,U+27248,U+27253,U+2725f,U+27267,U+2726a,U+2726e,U+2727e,U+27285,U+27288,U+27292,U+27294-27295,U+272b7,U+272d8,U+272e0-272e1,U+272e5,U+272f1,U+27304,U+2730f,U+27311,U+2733d,U+27355,U+27359,U+27367,U+2736a,U+27371-27372,U+27398,U+273a4-273a5,U+273be,U+273da,U+273e1,U+273fe,U+27410,U+27415,U+2741f","diff":0,"charsSize":199},{"name":"89.woff2","size":75372,"chars":"U+3dc7-3e48,U+269c8,U+269dd,U+269df,U+269e1,U+269f2,U+269f4,U+269fa,U+26a29,U+26a2d,U+26a34,U+26a3c,U+26a58,U+26a64,U+26a77,U+26a7a,U+26a87,U+26a99,U+26aad,U+26abd,U+26ac3,U+26af8,U+26b01,U+26b28,U+26b38,U+26b3a,U+26b3c,U+26b4c,U+26b5c,U+26bb4,U+26bbc,U+26c0f,U+26c21,U+26c47,U+26c4c,U+26c52,U+26c54,U+26cc6,U+26ccb,U+26cdc-26cdd,U+26cef,U+26d4f,U+26d67,U+26d78,U+26d7e,U+26d87,U+26d9f,U+26e05,U+26e08,U+26e87,U+26e96,U+26ed5,U+26ed8","diff":0,"charsSize":183},{"name":"87.woff2","size":83448,"chars":"U+3cbe-3d50,U+25f86,U+25f9d,U+25fba,U+25fc9-25fca,U+25fdd,U+25fee,U+26016,U+26021,U+26049,U+26050,U+26085,U+2608c-2608d,U+260b3,U+260c2,U+260c4,U+260c7,U+260cf,U+260e9,U+2613c,U+2614c,U+261d9,U+261e7,U+26203,U+26216,U+26220-26222,U+26246,U+2624e,U+26258,U+2626a-2626b,U+26270-26271,U+26279,U+26291,U+26293-26294,U+2629a,U+2629e,U+262b1,U+262c6,U+26309-2630a,U+2633e,U+2634b-2634c,U+26351,U+26355,U+26369,U+26393,U+263b9,U+263c6,U+263f4,U+26407,U+2640a,U+2640c,U+26447,U+26476,U+26483,U+2648d,U+26491,U+264b9,U+264d6,U+264fe,U+26529","diff":0,"charsSize":215},{"name":"88.woff2","size":71148,"chars":"U+3d51-3dc6,U+26548,U+26553,U+265d2,U+265f3,U+26614,U+26634,U+2664d,U+2666b,U+26676-26678,U+26690,U+2669f,U+266b0,U+266dd,U+266e8,U+26706,U+26760,U+26762,U+26769,U+2677c,U+26782,U+267a4,U+267a6,U+267cc,U+267d8,U+267ea,U+267ee,U+26806,U+2683f,U+26871,U+2688a,U+268c0,U+268dd-268de,U+26900,U+2690e,U+26919,U+26936,U+26951,U+26954,U+2696f,U+26999","diff":0,"charsSize":161},{"name":"86.woff2","size":78348,"chars":"U+3c3f-3cbd,U+25ab0,U+25ad7,U+25af1,U+25afd,U+25b1e,U+25b20,U+25b2f,U+25b98,U+25b9c,U+25bbe,U+25bd1,U+25bdb,U+25bdf,U+25be4-25be6,U+25be8,U+25c14,U+25c1f,U+25c2b-25c2d,U+25c67,U+25c7c,U+25c7f,U+25c8a,U+25c91,U+25ca4,U+25cbb,U+25cc7,U+25cce,U+25cd4,U+25ce0,U+25d0a,U+25d21,U+25d27,U+25d99,U+25dbd,U+25dd1,U+25dda,U+25de4,U+25de8,U+25e46,U+25e49,U+25e77,U+25e86,U+25ec5,U+25ed7,U+25ee6,U+25ee9,U+25ef5,U+25eff,U+25f1a,U+25f24,U+25f36","diff":0,"charsSize":182},{"name":"85.woff2","size":72608,"chars":"U+3bc8-3c3e,U+255d9,U+255ec,U+255fd,U+2560c,U+2561e,U+25629-2562a,U+2562e,U+2563d,U+25651,U+2567f,U+256c4,U+256f1,U+25712,U+25714,U+2574c,U+25762,U+25767,U+257a5,U+257c7,U+2583b,U+25871,U+25874,U+258a7,U+258b6,U+258db,U+258ec,U+2591a,U+2592e,U+25977,U+25997,U+259d1,U+259f2,U+25a0d-25a0e,U+25a10","diff":0,"charsSize":155},{"name":"84.woff2","size":73192,"chars":"U+3b3b-3bc7,U+25050,U+25055,U+2505e,U+25061-25062,U+2506b,U+25109,U+25128,U+2512b,U+25134,U+25148,U+25160-25161,U+25167,U+2517b,U+2517e,U+2519e,U+251a7,U+251db,U+251e2,U+25241-25242,U+25248-25249,U+2524c,U+25250,U+25273,U+2527b,U+2527f,U+25291,U+252dd,U+2531a,U+25320,U+25349,U+2538a,U+253dd,U+253ea,U+2541e,U+25435,U+2543b,U+2546a,U+2546e,U+254cd,U+254fc,U+25500,U+25532,U+2554d-2554e,U+25562,U+25566,U+25584,U+2559a,U+255a8,U+255aa","diff":0,"charsSize":195},{"name":"83.woff2","size":74560,"chars":"U+3aac-3b3a,U+24ac9,U+24af6,U+24b01,U+24b0f,U+24b1b,U+24b26,U+24b2a,U+24b5b,U+24b62,U+24b95,U+24ba6,U+24bd5,U+24be5,U+24c00,U+24c09,U+24c1a,U+24c1c,U+24c48,U+24c4a,U+24c59,U+24c5d,U+24c8d,U+24cb0,U+24cb6,U+24cc8,U+24d13-24d14,U+24d21,U+24d25,U+24d2f,U+24d50,U+24d52,U+24d78,U+24d80,U+24d83,U+24db8,U+24dcd,U+24dea,U+24e01,U+24e2a,U+24e31,U+24e37,U+24e85,U+24ea5,U+24ea7,U+24eaa,U+24eba,U+24eca,U+24ef2,U+24f42,U+24f49,U+24f93,U+24f95,U+24fa9,U+24fd0,U+2500f","diff":0,"charsSize":199},{"name":"81.woff2","size":79944,"chars":"U+399f-3a38,U+2406f,U+240d2,U+240eb-240ec,U+2410e,U+24136-24137,U+24182,U+2418a,U+241a2,U+241ac,U+241b5,U+241fe,U+2420e,U+24226,U+24259,U+242b6,U+242b9,U+242bb,U+242be-242bf,U+242ee,U+24307,U+2430d,U+24319,U+24350,U+24352,U+2435e,U+24364,U+243d0,U+243f0,U+243f6,U+24419,U+24423,U+24430,U+24436,U+2447a,U+2447e,U+2448a,U+244d3,U+244ef,U+24514,U+24595,U+24605,U+24626-24627,U+2462f","diff":0,"charsSize":201},{"name":"82.woff2","size":74856,"chars":"U+3a39-3aab,U+24656,U+2468e,U+246a9,U+246cb,U+246ce,U+246d1,U+246d8,U+246db,U+246df,U+246ed,U+24716,U+24722-24723,U+24737,U+2473b,U+2474c,U+24759,U+24771,U+2477b,U+2477d,U+2479a,U+2479e,U+247a4,U+247b6,U+247c7,U+247cc,U+247ce,U+247d1,U+247e4-247e5,U+247e7,U+247ef,U+24822,U+2482b,U+24873,U+2488a,U+248b9-248ba,U+248ce,U+248e5,U+248e9,U+24904,U+24934,U+24950,U+2496d,U+249db,U+249df,U+24a01,U+24a0f,U+24a12,U+24a6a,U+24a7d,U+24a8c,U+24aa4","diff":0,"charsSize":169},{"name":"80.woff2","size":77912,"chars":"U+390f-399e,U+23a95,U+23a98,U+23aa0,U+23b02,U+23b1b,U+23b20,U+23b36,U+23b3c,U+23b61,U+23b72,U+23b88,U+23bab,U+23bc8,U+23bcd,U+23bda,U+23be9,U+23bfe,U+23c07,U+23c0b,U+23c28,U+23c5d,U+23c76,U+23c7c,U+23c7e,U+23c97-23c98,U+23ca9,U+23cb5,U+23cb7,U+23cbe,U+23ce6,U+23cfe,U+23d13,U+23d18,U+23d66,U+23d7a,U+23d7d,U+23d82,U+23d88,U+23d8f-23d90,U+23d9e,U+23dfd,U+23e0e,U+23e23-23e24,U+23e70,U+23e8c,U+23eb0,U+23ecf-23ed0,U+23ef5,U+23ef8,U+23f0e,U+23f74,U+23f7d,U+24030","diff":0,"charsSize":201},{"name":"79.woff2","size":77360,"chars":"U+3869-390e,U+23439,U+2343f,U+234c1,U+23519,U+2353a,U+235be,U+235c4,U+235cb,U+235f6,U+23617,U+2361b,U+2363a-2363b,U+23657,U+2365c,U+23683,U+23698,U+236ba,U+236d2,U+236ee,U+23727,U+2372c,U+2373f,U+23749,U+2374b,U+2375b,U+23763,U+237c4,U+237f4,U+2385b,U+23936,U+23942,U+239d7,U+23a19,U+23a3c,U+23a81,U+23a8a-23a8b,U+23a8f","diff":0,"charsSize":205},{"name":"78.woff2","size":71664,"chars":"U+37dd-3868,U+22eb3,U+22f0c,U+22f1b,U+22f38,U+22f7e,U+22f96,U+22fba,U+22fdb,U+23066,U+23073-23074,U+23080,U+2308f-23090,U+230da,U+23119,U+23134,U+23138,U+23143,U+2319f,U+231c7,U+23206,U+23236,U+2329f,U+232ba,U+232c9,U+232de,U+23350,U+23385-23386,U+23397,U+2339c,U+233b2,U+233b4,U+233b7,U+233cc,U+233de,U+233e2,U+233fe,U+2340a,U+23415","diff":0,"charsSize":181},{"name":"77.woff2","size":85472,"chars":"U+373e-37dc,U+22871,U+2289e,U+228bd,U+22927,U+22931-22932,U+2294c,U+22958,U+2295e,U+22960,U+2298f,U+2299f,U+229b6,U+229f5,U+22a0b,U+22a41,U+22a73,U+22a83,U+22a87,U+22a8f,U+22a98,U+22ab1,U+22acf,U+22ad3,U+22ad5,U+22ae6,U+22aec,U+22b02,U+22b38,U+22b43,U+22ba5,U+22bca,U+22bed,U+22bf2,U+22bf9-22bfa,U+22bfe,U+22c49,U+22c4b,U+22c51,U+22c55,U+22c62-22c64,U+22cab,U+22cb4,U+22cb8,U+22cc0,U+22cc2,U+22cc6,U+22ccd,U+22cda,U+22cdf,U+22cea,U+22d08,U+22d32-22d33,U+22d4c,U+22d5e,U+22d67,U+22d80,U+22d89,U+22d8d,U+22d92,U+22da1,U+22dec,U+22e33,U+22e5d,U+22e72,U+22e83-22e84","diff":0,"charsSize":230},{"name":"75.woff2","size":78676,"chars":"U+3626-36b6,U+21d7b,U+21d84,U+21d8b,U+21d90,U+21da6,U+21dad,U+21dd1,U+21de0,U+21de8,U+21deb,U+21df8,U+21e03,U+21e16-21e17,U+21e1e,U+21e23,U+21e47,U+21e6c,U+21e8e,U+21e9f,U+21ea3,U+21eaf,U+21eb1-21eb2,U+21eca,U+21ed5,U+21eed,U+21eef,U+21f0f,U+21f15,U+21f31,U+21f3e-21f3f,U+21f57,U+21f71,U+21f7a,U+21f8b,U+21f9e,U+21fb0,U+21fb2,U+21fbc,U+21fd3,U+21fd6,U+21fe8,U+21ffa,U+21fff,U+22016,U+22049,U+22058,U+220b3,U+220c7,U+22110,U+2213c,U+221a1,U+221c7,U+221cd,U+221f2,U+221f7,U+22208,U+2223b,U+2231a","diff":0,"charsSize":206},{"name":"76.woff2","size":72168,"chars":"U+36b7-373d,U+2231e,U+22342,U+22399,U+2239e,U+223a5,U+223a8,U+22488-22489,U+224b0,U+224bc,U+224c1,U+224c9,U+224cc,U+224dc,U+224e1,U+224ed,U+224f2,U+22504,U+2251b,U+22521,U+22524,U+2256c,U+225a6,U+225a9,U+225b3,U+225bf,U+225d7,U+22609,U+2260d,U+2263f,U+22645,U+22650,U+2265d,U+226c1,U+226f3,U+2272d-2272f,U+22731,U+22736,U+22746,U+22775,U+227b5,U+22835,U+22838","diff":0,"charsSize":180},{"name":"74.woff2","size":74540,"chars":"U+3596-3625,U+217d3,U+217da,U+217e5,U+217ec,U+2180d,U+21824,U+21857,U+21883,U+218ea,U+2192b,U+21946,U+21948,U+21967,U+21976,U+2197c,U+21980,U+21982,U+219bc,U+219f3,U+21a18,U+21a1a,U+21a25,U+21a38,U+21a4b,U+21a61,U+21a7b,U+21acf,U+21b36,U+21b54,U+21b90,U+21bc1-21bc2,U+21c26,U+21c2a,U+21c48,U+21c52,U+21c95,U+21ca2,U+21cac,U+21cbe,U+21cde,U+21d2d,U+21d49,U+21d53,U+21d59-21d5a","diff":0,"charsSize":190},{"name":"71.woff2","size":77376,"chars":"U+337f-3384,U+338a-338c,U+3391-3395,U+3399-339a,U+33a7-33af,U+33b4-33c1,U+33c3,U+33c5-33c7,U+33c9-33ca,U+33ce-33d3,U+33d5-33d6,U+33d9,U+33db-3472,U+20302,U+20316,U+2032f,U+20350,U+203ae,U+203b7,U+203c0,U+203c5,U+2040d,U+2042d,U+20435,U+2043a,U+20469,U+20509,U+2050c,U+2052d,U+2053e-2053f,U+20541-20542,U+20545-20547,U+20584,U+20587,U+205c2,U+205c9,U+205cc,U+205fb,U+20611,U+20627-20628,U+20646,U+2064f,U+20674,U+20676,U+206a4,U+206e1,U+206f1,U+20705,U+2070e,U+20731-20732,U+20734,U+20736,U+2073a,U+2073e,U+20779,U+207a9,U+207ab,U+207ad,U+207b0,U+207cd,U+207fa,U+20803-20804,U+2081d,U+20895,U+208fe,U+20904,U+2090e,U+20929,U+20930,U+20984,U+2099d,U+209aa-209ab,U+209b3,U+209da,U+209e9,U+20a44-20a45,U+20a64,U+20a9a,U+20ab1-20ab2,U+20ae4,U+20b20,U+20b24,U+20b2a,U+20b36,U+20b56,U+20b6f,U+20b9f,U+20bb5-20bb7,U+20bbe-20bbf,U+20bd7-20bd8,U+20be5,U+20bea,U+20c34,U+20c41,U+20c53,U+20c5b,U+20c5e,U+20c78","diff":0,"charsSize":305},{"name":"72.woff2","size":71468,"chars":"U+3473-34e8,U+20c8e-20c8f,U+20c96,U+20cbf,U+20cc1,U+20cc3,U+20ccf-20cd0,U+20cd4-20cd5,U+20ced,U+20cfc,U+20d02,U+20d15,U+20d1f,U+20d2b,U+20d32,U+20d46-20d47,U+20d5d,U+20d71,U+20d7c,U+20d7f,U+20da7,U+20de1,U+20dfa,U+20dff,U+20e01,U+20e0e-20e0f,U+20e5a,U+20e76-20e77,U+20e95-20e96,U+20e98,U+20e9d,U+20ea2,U+20ed7-20ed8,U+20ef3,U+20ef9-20efa,U+20f1f,U+20f22,U+20f2d-20f2e,U+20f3b,U+20f4c,U+20f7e,U+20f90-20f91,U+20f96,U+20fb4,U+20fbc,U+20fd5,U+20fea,U+21014,U+21055,U+2105c,U+2106f,U+21075-21076,U+2107b,U+210a2,U+210ab,U+210bf,U+210c1,U+210c9,U+210e4,U+210f6","diff":0,"charsSize":189},{"name":"73.woff2","size":76420,"chars":"U+34e9-3595,U+21116,U+21123,U+21145,U+21155,U+211a5,U+211cc,U+211d9,U+211fc,U+2123c-2123d,U+21244,U+21251,U+21265,U+2126b,U+21284,U+212ef,U+21334,U+21336,U+2134c,U+2136a,U+21372,U+21375,U+21377,U+2137c,U+2139a,U+213cb,U+21413,U+21428,U+2144d,U+2145e,U+21483-21484,U+214da,U+21523,U+21562,U+215d7,U+215dc,U+215e6,U+21619,U+21681,U+216a6,U+216b1,U+216b4,U+216bd,U+216df,U+216e3,U+216f0,U+21757,U+2176d,U+217c8","diff":0,"charsSize":223},{"name":"70.woff2","size":44232,"chars":"U+3298-32ff,U+332c,U+3358-3370,U+3372-337e,U+1fa60-1fa6d,U+20003,U+2000b,U+2000e,U+20024,U+20027,U+2002a-2002b,U+2003e,U+2005e,U+20063,U+2006d,U+20086-20087,U+20089-2008a,U+20092,U+20094,U+200a2,U+200a4,U+200b0,U+200ca-200cd,U+200d1,U+200d3,U+200db-200dc,U+200e9,U+200f2,U+2010c,U+2010e-2010f,U+20114,U+2011e-20120,U+20122,U+20129,U+20136,U+2013b-2013c,U+20164,U+201a2-201a3,U+201a8-201a9,U+201be,U+201d4,U+201d7,U+201ee,U+20201,U+2020c,U+20235,U+20242,U+20263,U+2026e,U+2028e,U+2029f,U+202ac,U+202c2,U+202c6,U+202e4","diff":0,"charsSize":220},{"name":"69.woff2","size":61636,"chars":"U+31ba-31e5,U+31ef-321e,U+3220-3297,U+1f141-1f1ad,U+1f200-1f202,U+1f210-1f23b,U+1f240-1f248,U+1f250-1f251,U+1f260-1f265,U+1f79c","diff":0,"charsSize":386},{"name":"68.woff2","size":56596,"chars":"U+2f6f-2fd5,U+2ff0-3000,U+3003,U+3005-3007,U+3012-3013,U+3018-302d,U+3030,U+3033-303f,U+3105-312f,U+3131-318e,U+3190-31b9,U+1f100-1f140","diff":0,"charsSize":406},{"name":"67.woff2","size":50480,"chars":"U+2713,U+2717,U+271a,U+273d,U+273f-2740,U+2756,U+275b-2760,U+2772-2773,U+2776-2793,U+27a1,U+27e6-27ef,U+2934-2935,U+29bf,U+29c8-29c9,U+29fa-29fb,U+2a7d-2a7e,U+2acb-2acc,U+2afd,U+2b05-2b07,U+2b1a,U+2b25-2b26,U+2b29,U+2b4e-2b4f,U+2b58,U+2b5a-2b65,U+2b82-2b83,U+2b95,U+2b97,U+2bba,U+2c60-2c7f,U+2e00-2e39,U+2e3c-2e42,U+2e55-2e56,U+2e80-2e99,U+2e9b-2ef3,U+2f00-2f6e,U+1b132,U+1b155,U+1d300-1d356,U+1d360-1d376","diff":0,"charsSize":532},{"name":"63.woff2","size":26160,"chars":"U+ac4b,U+ac4d,U+ac58,U+acaf,U+accc,U+ad35,U+ad47,U+ad89,U+ae46,U+ae60,U+ae69,U+ae84,U+aedc,U+af95,U+b004,U+b028,U+b08f,U+b135,U+b139,U+b182,U+b198,U+b1d0,U+b1dc,U+b1e9,U+b20b,U+b260,U+b268,U+b29a,U+b2a1,U+b2fa,U+b35b,U+b381,U+b394,U+b3dd,U+b3e8,U+b4ac,U+b4f8,U+b528,U+b541,U+b5cc,U+b5d8,U+b701,U+b770,U+b792,U+b796,U+b7b8,U+b7c7,U+b851,U+b8b8,U+b8c0,U+b8d0,U+b8d4,U+b93d,U+b940,U+b944,U+ba08,U+ba68,U+ba83,U+ba8c,U+bac4,U+bb1c,U+bb45,U+bc0c,U+bc4d,U+bc50,U+bc5d,U+bcb1,U+bcb4,U+bd40,U+bd58,U+bd68,U+bd9c,U+bdb8,U+bddc,U+be0d,U+be4e,U+be6a,U+be98,U+bee0,U+bf1d,U+bfc5,U+c03c,U+c0b5,U+c0d9,U+c0e5,U+c126,U+c1bd,U+c260,U+c2fb,U+c31c,U+c324,U+c3c0,U+c3e9,U+c43c,U+c46c,U+c474,U+c480,U+c4bc,U+c4e9,U+c4ff,U+c5f6,U+c618,U+c630,U+c671,U+c679,U+c680,U+c688,U+c6e1,U+c715,U+c731,U+c768,U+c797,U+c7ce,U+c7dd,U+c7e8,U+c831,U+c840,U+c883,U+c886,U+c89f,U+c8a8,U+c8bd,U+c8f5,U+c934,U+c951,U+c960,U+c9ef,U+c9fc,U+ca08-ca09,U+ca14,U+cacf,U+cad8,U+cb41,U+cb4c,U+cb58,U+cbb8,U+cc55,U+cc75,U+ccac,U+cd64,U+cdfb,U+ce19,U+ce24,U+cea3,U+cf2d,U+cff1,U+cff3,U+d011,U+d044,U+d047,U+d060,U+d06d,U+d184,U+d1ba,U+d1bc,U+d1d8,U+d23f,U+d25c,U+d264,U+d2b1,U+d2c9,U+d2d8,U+d316,U+d345,U+d38f,U+d3c5,U+d408,U+d440,U+d460,U+d494,U+d4a9,U+d4fd,U+d671,U+d694,U+d6f0,U+d738,U+d77c,U+d79d","diff":0,"charsSize":179},{"name":"62.woff2","size":33884,"chars":"U+ac2c,U+ac30,U+ac54,U+ac84,U+ac86,U+ac9c,U+aca1,U+acd7,U+acef,U+ad3c,U+ad44,U+ad9c,U+adc8,U+add0,U+adff,U+ae14,U+ae31,U+ae37,U+ae7d,U+ae85,U+aec0,U+aeed,U+aef8,U+af0d,U+af65,U+af84,U+af90,U+af9c,U+afdc,U+aff4,U+b055,U+b08d,U+b091,U+b0b5,U+b0d1,U+b0d4,U+b0e0,U+b112,U+b11c,U+b138,U+b148,U+b151,U+b15c,U+b189,U+b1d4,U+b1f0,U+b219,U+b23c,U+b27c,U+b2ef,U+b31c,U+b356,U+b390,U+b3a1,U+b3a8,U+b3ac,U+b3ce,U+b3d0,U+b3e0,U+b3e4,U+b434,U+b488,U+b525,U+b543,U+b54b,U+b55f-b560,U+b5b5,U+b5d0-b5d1,U+b614,U+b62c,U+b664,U+b739,U+b74c,U+b755,U+b775,U+b844,U+b878,U+b87c,U+b8b4,U+ba00,U+ba15,U+ba49,U+ba53,U+bb04,U+bb0f,U+bb4d,U+bb61,U+bb90,U+bba8,U+bbc4,U+bbd3,U+bc41,U+bc44,U+bc4c,U+bc8b,U+bcd8,U+bd2c,U+bd4c,U+bd50,U+bd64,U+bd87,U+bd91,U+bdf4,U+bdf8,U+be00,U+be55,U+be70,U+be90,U+beec,U+bf01,U+bf44,U+c091,U+c094,U+c0a3,U+c0a5,U+c0dc,U+c0f5,U+c0f7,U+c127,U+c14c,U+c164,U+c169,U+c1a8,U+c1ac,U+c1e4,U+c1fd,U+c20c,U+c20f,U+c211,U+c229,U+c248,U+c254,U+c265,U+c27f,U+c29d,U+c309,U+c315,U+c318,U+c329,U+c345,U+c388,U+c38c,U+c3d9,U+c430,U+c448,U+c479,U+c49c,U+c4b8,U+c53d,U+c55d,U+c571,U+c58d,U+c59c,U+c5e1,U+c61c,U+c65d,U+c66c,U+c69c,U+c6a4-c6a5,U+c6a7,U+c6dd,U+c6e9,U+c6f9,U+c714,U+c730,U+c733,U+c74f,U+c752-c757,U+c75c,U+c760,U+c7c0,U+c7cc,U+c7e4,U+c82c,U+c848,U+c84d,U+c854,U+c8a1,U+c8c8,U+c8cc,U+c8d4,U+c8e4,U+c970,U+c97c,U+c9c7,U+c9ec,U+c9f0,U+c9f9,U+ca5c-ca5d,U+ca98,U+cac0,U+cac4,U+cad9,U+cb14,U+cb18,U+cb20,U+cb59,U+cb64,U+cc1d,U+cc64,U+cc68,U+ccb5,U+ccc4,U+ccc9,U+ccd4,U+ccec,U+cd24,U+cd28,U+cdf9,U+ce0c,U+ce28,U+ce87,U+ce91,U+cea4-cea5,U+cf01,U+cf11,U+cf15,U+cf2c,U+cf2f,U+cf38,U+cf71,U+cf74,U+cfa1,U+cfa8,U+cff0,U+d004,U+d02d,U+d03c,U+d081,U+d0f8,U+d15f,U+d161,U+d16c,U+d17c,U+d1b3,U+d207,U+d210,U+d284,U+d288,U+d2cb,U+d31f,U+d330,U+d338-d339,U+d33c,U+d344,U+d3a8,U+d444,U+d482,U+d4cc,U+d4d0,U+d4f8,U+d515,U+d585,U+d670,U+d690,U+d6d9,U+d6e0,U+d6fd,U+d700,U+d704,U+d711,U+d72b,U+d757,U+d774,U+d77d,U+d79b","diff":0,"charsSize":277},{"name":"66.woff2","size":700,"chars":"U+fd5-fd6","diff":0,"charsSize":2},{"name":"65.woff2","size":796,"chars":"U+e3f","diff":0,"charsSize":1},{"name":"64.woff2","size":592,"chars":"U+feff","diff":0,"charsSize":1},{"name":"60.woff2","size":31168,"chars":"U+ac07,U+ac1a,U+ac20,U+ac24,U+ac2f,U+ac38,U+ac40,U+ac8a,U+ac94,U+acf6,U+ad18,U+ad1c,U+ad49,U+ad7f,U+ad82,U+ade4,U+ae01,U+ae41,U+ae45,U+ae4d,U+ae50,U+ae5c,U+ae61,U+aebd,U+aec4,U+aed1,U+af08,U+af3c,U+af41,U+af49,U+af64,U+afc7,U+afe9,U+aff0,U+b010,U+b014,U+b01c,U+b0a1,U+b0ab,U+b0af,U+b0c5,U+b0c7,U+b10b-b10c,U+b125,U+b128,U+b12c,U+b158,U+b215,U+b217,U+b220,U+b289,U+b291,U+b2a0,U+b2aa,U+b2db,U+b2f3,U+b301,U+b304,U+b308,U+b313-b315,U+b35f,U+b365,U+b371,U+b380,U+b3d4,U+b3d7,U+b3db,U+b460-b461,U+b46c,U+b4c0,U+b4d0,U+b515,U+b51b,U+b527,U+b55c,U+b625,U+b6a4,U+b6f4,U+b700,U+b729,U+b72c,U+b730,U+b797,U+b7a9,U+b7ff,U+b810,U+b818,U+b81b,U+b8f8,U+b8fb,U+b93c,U+b975,U+b9cf,U+b9d8-b9d9,U+b9f4-b9f5,U+b9f7,U+ba4e,U+ba64,U+ba67,U+ba71,U+bb3d,U+bb44,U+bb54,U+bb58,U+bbb4,U+bc09,U+bc0b,U+bc34,U+bc38,U+bc40,U+bc43,U+bc45,U+bc49,U+bc85,U+bc99-bc9a,U+bcb3,U+bccf,U+bcd5,U+bcf6,U+bd07,U+bd90,U+bdd4,U+be10,U+be45,U+be54,U+be64,U+be7d,U+be80,U+be84,U+be8f,U+bea8,U+bf55,U+bfb0,U+bfdc,U+c060,U+c068,U+c090,U+c0bf-c0c0,U+c0c5,U+c0cc,U+c0d0,U+c0ec,U+c0f4,U+c123,U+c139,U+c149,U+c15c,U+c167,U+c1a5,U+c22f,U+c231,U+c258,U+c270,U+c274,U+c290,U+c2ad,U+c2e3,U+c2ef,U+c308,U+c36c,U+c370,U+c379,U+c37d,U+c384,U+c3e0,U+c464-c465,U+c501,U+c539,U+c568,U+c570,U+c575,U+c584,U+c595,U+c597,U+c5ca,U+c5cc,U+c5ce,U+c5e0,U+c5e3,U+c5f7,U+c634-c635,U+c648,U+c6cd,U+c6f0,U+c70c,U+c73d,U+c74a,U+c7a3,U+c7bf,U+c82f,U+c83c,U+c887,U+c90d,U+c90f,U+c92c,U+c954,U+c96c,U+c974,U+c999,U+c9ca,U+c9e0,U+c9e4,U+c9f1,U+ca0c,U+ca50,U+ca61,U+cabc,U+cb10,U+cb48-cb49,U+cbd4,U+cc14,U+cc21-cc22,U+cc27,U+cc39,U+cc3c,U+cc54,U+ccbc,U+cd18,U+cd1b,U+cda5,U+cda7,U+cdcc,U+ce30,U+ce98,U+cea1,U+cef5,U+cf04,U+cf24,U+cf55,U+cf65,U+cf67,U+cfc4,U+cfe8,U+cff5,U+cffc,U+d0a5,U+d0d4,U+d0e0,U+d0e4,U+d0ec,U+d143,U+d15d,U+d1a1,U+d1b0,U+d22d,U+d230,U+d234,U+d23c,U+d241,U+d29c,U+d2ac,U+d2bf,U+d30d,U+d31c-d31d,U+d325,U+d32c,U+d37d,U+d380,U+d391,U+d3a0,U+d3a9,U+d3c8,U+d3fc,U+d401,U+d479,U+d48b,U+d578,U+d584,U+d5db,U+d5e5,U+d648-d649,U+d651,U+d69f,U+d6d1,U+d6d4,U+d6d7,U+d6e4,U+d720,U+d728,U+d769","diff":0,"charsSize":294},{"name":"61.woff2","size":33100,"chars":"U+ac09,U+ac17,U+ac1b,U+ac2d,U+ac39,U+ac85,U+ac8b,U+ac9f,U+acbb,U+acea,U+acec,U+ad0c,U+ad2d,U+ad38,U+ad7c,U+ad88,U+adc4,U+add3,U+ae5f,U+ae6c,U+ae70,U+ae7b-ae7c,U+aecc,U+aed0,U+af07,U+af10,U+af30,U+af3f,U+af48,U+af5d,U+af79,U+afb9,U+afc9,U+afcb,U+afcd-afce,U+afe8,U+b059,U+b07d,U+b09f,U+b0d8,U+b119,U+b11b,U+b11d,U+b134,U+b18b,U+b194,U+b1a8,U+b1fd,U+b205,U+b214,U+b234,U+b2e2,U+b2fb,U+b311,U+b36b,U+b383,U+b385,U+b38c,U+b3a0,U+b42b,U+b463,U+b480,U+b4b9,U+b4e6,U+b524,U+b544,U+b554,U+b561,U+b5ab,U+b5b4,U+b5c0,U+b5c4,U+b5cf,U+b618,U+b648,U+b6f8,U+b748,U+b754,U+b768,U+b78f,U+b7a0,U+b819,U+b81d,U+b8fd,U+b918,U+b9e3,U+b9ec,U+b9f8,U+ba65,U+ba69,U+ba84,U+bafc,U+bb4f,U+bb88,U+bb8c,U+bbc8,U+bbd0,U+bc08,U+bc27,U+bca7,U+bcb0,U+bcb5,U+bcd0,U+bd48,U+bd59,U+be61,U+be73-be74,U+be7b,U+be8c,U+be91,U+bed1,U+bed8,U+bee3-bee5,U+bf09,U+bf18,U+bf1b,U+bf40,U+bf50,U+bfcd,U+c069,U+c0af,U+c0db,U+c0e8,U+c0f9,U+c100,U+c136,U+c14d,U+c174,U+c178,U+c18e,U+c19d,U+c1f3,U+c200,U+c204,U+c20d,U+c21f,U+c234,U+c250,U+c27c,U+c281,U+c29b,U+c2a5,U+c30c,U+c314,U+c3dc,U+c3ed,U+c3f4,U+c410,U+c42c,U+c468,U+c4f1,U+c530,U+c538,U+c54e,U+c573-c574,U+c58c,U+c58f,U+c5e5,U+c5fe,U+c605,U+c607,U+c60c,U+c62d,U+c63b,U+c641,U+c653,U+c660,U+c698,U+c6c1,U+c6dc,U+c705,U+c719,U+c737,U+c7a4,U+c7b0,U+c7b4,U+c7bc-c7bd,U+c7c8,U+c958,U+c98c,U+c9e2,U+c9ed,U+ca0b,U+ca0d,U+ca68,U+ca84,U+cad1,U+cb50,U+cb5d,U+cbe7,U+cc10,U+cc1c,U+cc3b,U+cc48,U+cc4c,U+cc57-cc58,U+cc60,U+ccb8,U+ccc7,U+cd10,U+cd78,U+cdc4,U+ce04,U+ce61,U+ce75,U+ce85,U+ce89,U+ceac,U+cee5,U+cef9,U+cf10,U+cf20,U+cf70,U+cf78,U+cf85,U+cfb0,U+cfe1,U+cfe4,U+d000,U+d018,U+d035,U+d038,U+d058,U+d07d,U+d0b5,U+d0c9,U+d0ed,U+d0ef,U+d140-d141,U+d144,U+d168,U+d188,U+d248,U+d295,U+d2a4,U+d2c2,U+d2d4,U+d301,U+d320,U+d33b,U+d390,U+d3ab,U+d3ad,U+d3c4,U+d3ff,U+d46f,U+d4f0,U+d54c,U+d565,U+d57c,U+d590,U+d5c9,U+d5d9,U+d5f4-d5f5,U+d5f7,U+d5f9,U+d613,U+d64b,U+d667,U+d683,U+d6c5,U+d719,U+d71c,U+d73c,U+d744,U+d789,U+d799","diff":0,"charsSize":277},{"name":"59.woff2","size":32600,"chars":"U+ac13,U+ac31,U+ac77,U+ac81,U+ac89,U+ac90,U+acb8-acb9,U+acc1,U+acf0-acf1,U+acfd,U+ad04,U+ad75-ad76,U+ad7d,U+ad90,U+ada4,U+ae0b,U+ae0d,U+ae43,U+ae4e,U+ae5d,U+ae65,U+aebe,U+aecd,U+aecf,U+aef4,U+af34,U+af3d,U+af42,U+af80,U+afbc,U+afc0,U+afd4,U+b00c,U+b048,U+b04a,U+b053-b054,U+b057,U+b080,U+b084,U+b09a,U+b0b1,U+b0b3,U+b0c4,U+b109,U+b137,U+b141,U+b154-b155,U+b188,U+b1e8,U+b20c,U+b258,U+b25c,U+b299,U+b2ac,U+b2c9,U+b2d9,U+b2dd,U+b2e6,U+b2eb,U+b2ee,U+b2f7,U+b2ff,U+b310,U+b35c,U+b364,U+b367,U+b369,U+b36e,U+b374,U+b3cb,U+b3d5,U+b429,U+b451,U+b4c8,U+b518,U+b51c,U+b529-b52a,U+b531,U+b534,U+b540,U+b550,U+b5a1,U+b5b3,U+b5bc,U+b611,U+b69c-b69d,U+b6ab,U+b6b1,U+b72f,U+b738,U+b744,U+b760,U+b764,U+b799,U+b7ab-b7ad,U+b7b4,U+b7ed,U+b801,U+b809,U+b834,U+b837,U+b864,U+b86c,U+b871,U+b8e1,U+b8ec,U+b8f0,U+b904,U+b95c,U+b968,U+b96d,U+b985,U+b989,U+b98e,U+b9ad,U+b9bf,U+b9d1,U+b9e8,U+b9fa,U+ba48,U+ba4b,U+ba4d,U+ba55,U+ba58,U+ba5c,U+baab-baac,U+bab9,U+bb36,U+bb47,U+bb49,U+bb50,U+bb63,U+bba4,U+bbac,U+bbf9,U+bc0d,U+bc1f,U+bc2d,U+bca1,U+bca4,U+bccd,U+bd04,U+bd10,U+bd24,U+bd89,U+bd93,U+bdf0,U+be57,U+be59,U+be75,U+bed0,U+bed4,U+bed7,U+bf08,U+bf51,U+bfd4,U+c058,U+c05c,U+c0bd,U+c0d8,U+c0e4,U+c11e,U+c130,U+c140,U+c14b,U+c154,U+c170,U+c19c,U+c19f,U+c1fc,U+c22b,U+c22d,U+c232,U+c298,U+c2eb,U+c2f9,U+c2fc,U+c313,U+c369,U+c37c,U+c3d8,U+c3df,U+c500,U+c50c,U+c52c,U+c53b,U+c553,U+c557,U+c564,U+c580,U+c587,U+c598,U+c5b9,U+c5bd,U+c5c9,U+c5d1,U+c5ee,U+c5ff,U+c606,U+c610,U+c633,U+c639,U+c67c,U+c6ec,U+c708,U+c717,U+c789-c78a,U+c796,U+c7a6,U+c7ad,U+c813,U+c816,U+c81d,U+c820,U+c824,U+c881,U+c8e0,U+c90c,U+c918,U+c9d6,U+c9d9-c9da,U+c9e7,U+ca4c-ca4d,U+ca54,U+cad3,U+cc2e,U+cc59,U+cd2c,U+cda4,U+cdb0,U+ce69,U+ce6b,U+ce78,U+ce84,U+ce94,U+cea0,U+ceeb-ceec,U+cef7-cef8,U+cf08,U+cf13,U+cf64,U+cf8c,U+d034,U+d050,U+d0b4,U+d0b7,U+d0b9,U+d0d3,U+d0f1,U+d131,U+d138,U+d145,U+d14d,U+d150,U+d1a8,U+d280,U+d2c8,U+d2f1,U+d2f4,U+d2f8,U+d30e,U+d321,U+d329,U+d33d,U+d384,U+d38c,U+d399,U+d39c,U+d3bc,U+d3f0,U+d47c,U+d508,U+d514,U+d54d,U+d54f,U+d56b,U+d587,U+d5d0,U+d5dd,U+d5e8,U+d5ec,U+d6a1,U+d6cc,U+d6e8,U+d6fc,U+d729,U+d749,U+d759,U+d760,U+d770,U+d790","diff":0,"charsSize":306},{"name":"56.woff2","size":53884,"chars":"U+3041-3096,U+3099-30ff,U+3300-332b,U+332d-3357","diff":0,"charsSize":276},{"name":"58.woff2","size":32620,"chars":"U+ac11-ac12,U+ac14,U+ac1d,U+ac71,U+acaa,U+acbc,U+ace1,U+ace4,U+ace7-ace8,U+acf3,U+ad34,U+ad73-ad74,U+ad81,U+adc0,U+ae00,U+ae34,U+ae4a,U+ae54,U+ae68,U+aebc,U+af2c-af2d,U+af43,U+afb8,U+afc8,U+b044,U+b04c,U+b05d,U+b07c,U+b08c,U+b099,U+b0a9,U+b0ac-b0ae,U+b0b8,U+b0bc,U+b0c8-b0c9,U+b0d0,U+b0e5,U+b110,U+b113,U+b118,U+b123-b124,U+b140,U+b150,U+b179,U+b180,U+b1cc,U+b208,U+b284,U+b2a6,U+b2cc,U+b2d0,U+b2d8,U+b2e5,U+b2ed,U+b2f5,U+b355,U+b378,U+b3c8,U+b3fc,U+b410,U+b428,U+b454,U+b458,U+b465,U+b4a4,U+b4b7,U+b4dd,U+b4e3,U+b4ec-b4ed,U+b4ef,U+b538,U+b545,U+b5a0,U+b5a4,U+b5a8,U+b5bb,U+b6f0,U+b728,U+b73b,U+b77d,U+b784,U+b78d,U+b790,U+b79c,U+b7a8,U+b7b5,U+b7f4,U+b7fd,U+b800,U+b80c,U+b82c,U+b835,U+b838,U+b840,U+b86d,U+b86f,U+b8b0,U+b8e9,U+b8f9,U+b959,U+b960,U+b987,U+b9b4,U+b9c1,U+b9db,U+b9de,U+b9e1,U+b9e5,U+b9f9,U+ba39,U+ba3c,U+ba40,U+ba54,U+ba78,U+ba87,U+bab0,U+bab8,U+babd,U+bb18,U+bb35,U+bb3b,U+bbc0,U+bbff,U+bc11,U+bc16,U+bc24-bc25,U+bc97,U+bca0,U+bca8,U+bcbc-bcbd,U+bcfc,U+bd05,U+bd09,U+bd95,U+bd99,U+be0c,U+be14,U+be48,U+be4c,U+be5a-be5b,U+be60,U+be68,U+be7c,U+bfcc,U+bfd0,U+c0ad,U+c0b6,U+c12c-c12d,U+c12f,U+c13c,U+c148,U+c158,U+c168,U+c194,U+c1c4,U+c1e0,U+c219,U+c228,U+c26c,U+c27d,U+c288,U+c2a8,U+c2ac,U+c2b4,U+c2b7,U+c2ed,U+c2f1,U+c2f6,U+c2f8,U+c300,U+c30d,U+c4f4,U+c4f8,U+c529,U+c549,U+c554,U+c559,U+c560,U+c5bb-c5bc,U+c5c4,U+c5c7,U+c5d4,U+c5d8,U+c5fd,U+c61b,U+c625,U+c62e,U+c637,U+c654-c655,U+c65c,U+c695,U+c6b1,U+c6c0,U+c6c3,U+c6c5,U+c6e0,U+c6e8,U+c724,U+c735,U+c74d,U+c775,U+c77d,U+c783,U+c787,U+c78e,U+c794,U+c7a0,U+c80a,U+c84c,U+c878,U+c880,U+c88b-c88c,U+c8c4,U+c8fd,U+c950,U+c988-c989,U+c990,U+c998,U+c9d0,U+c9d3,U+c9d5,U+c9dc-c9dd,U+c9f8,U+cbe4,U+cc0c-cc0d,U+cc2c,U+cc3e,U+cc99,U+cca8-cca9,U+ccab,U+ccd0,U+cce4,U+cd09,U+cd0c,U+cd98,U+ce20,U+ce59,U+ce60,U+ce6d,U+ce7c,U+ce90,U+cee4,U+cee8,U+cef4,U+cf00,U+cf1c,U+cf30,U+cf58,U+cf5c,U+cf69,U+cfe0,U+d074,U+d07c,U+d0a8,U+d0ac,U+d0c1,U+d0c8,U+d0d0-d0d1,U+d0d5,U+d134,U+d14c,U+d154,U+d1a4,U+d1b1,U+d1f4,U+d2bc,U+d2c0,U+d2f0,U+d300,U+d305,U+d314,U+d328,U+d37c,U+d398,U+d3b4,U+d3d0,U+d3f4,U+d478,U+d480,U+d48d,U+d4e8,U+d50c,U+d53d,U+d540,U+d551,U+d5c8,U+d5cc,U+d5e4,U+d600-d601,U+d608,U+d610,U+d614,U+d61c,U+d639,U+d63c,U+d640,U+d64d,U+d6c8,U+d718,U+d734,U+d750-d751,U+d754,U+d758,U+d761,U+d765,U+d78c,U+d798","diff":0,"charsSize":330},{"name":"57.woff2","size":32820,"chars":"U+ac00-ac01,U+ac04,U+ac08,U+ac10,U+ac15-ac16,U+ac19,U+ac1c,U+ac70,U+ac74,U+ac78,U+ac80,U+ac83,U+ac8c,U+aca0,U+aca8-aca9,U+acac,U+acb0,U+acbd,U+acc4,U+ace0,U+acf5,U+acfc,U+ad00,U+ad11,U+ad50,U+ad6c-ad6d,U+ad70,U+ad8c,U+addc,U+ade0,U+adf8-adf9,U+adfc,U+ae08-ae09,U+ae30,U+ae38,U+ae40,U+ae4c,U+aed8,U+b098,U+b09c,U+b0a0,U+b0a8,U+b0b4,U+b108,U+b144,U+b178,U+b17c,U+b18d,U+b192-b193,U+b204,U+b274,U+b290,U+b294,U+b298,U+b2a5,U+b2c8,U+b2e4,U+b2e8,U+b2ec,U+b2f4,U+b2f9,U+b300,U+b354,U+b358,U+b370,U+b3c4-b3c5,U+b3cc,U+b3d9,U+b418,U+b41c,U+b420,U+b450,U+b4dc,U+b4e0,U+b4e4,U+b4f1,U+b514,U+b530,U+b54c,U+b610,U+b77c,U+b780,U+b78c,U+b791,U+b798,U+b7c9,U+b7ec,U+b7f0,U+b7fc,U+b807-b808,U+b824-b825,U+b828,U+b839,U+b85c-b85d,U+b860,U+b8cc,U+b8e8,U+b958,U+b974,U+b978,U+b97c,U+b984,U+b9ac,U+b9b0,U+b9bc-b9bd,U+b9c8-b9c9,U+b9cc,U+b9ce,U+b9d0,U+b9dd,U+b9e4,U+ba38,U+ba70,U+ba74,U+ba85,U+baa8-baa9,U+babb,U+bb34,U+bb38,U+bb3c,U+bbf8,U+bbfc,U+bc00,U+bc0f,U+bc14-bc15,U+bc18,U+bc1b-bc1d,U+bc29,U+bc30-bc31,U+bc84,U+bc88,U+bc8c,U+bc94-bc95,U+bcc0,U+bcc4,U+bcd1,U+bcf4-bcf5,U+bcf8,U+bd80-bd81,U+bd84,U+bd88,U+be44,U+c0ac,U+c0b0,U+c0b4,U+c0bc,U+c0c1,U+c0c8-c0c9,U+c0dd,U+c11c-c11d,U+c120,U+c124,U+c131,U+c138,U+c18c-c18d,U+c190,U+c1a1,U+c218,U+c21c,U+c220,U+c2a4,U+c2b5,U+c2b9,U+c2dc-c2dd,U+c2e0,U+c2e4,U+c2ec,U+c368,U+c4f0,U+c528,U+c544-c545,U+c548,U+c54a,U+c54c,U+c555,U+c558,U+c55e,U+c561,U+c57c-c57d,U+c591,U+c5b4-c5b5,U+c5b8,U+c5c5-c5c6,U+c5c8,U+c5d0,U+c5ec-c5ed,U+c5f0,U+c5f4,U+c5fc,U+c600-c601,U+c608,U+c624,U+c628,U+c62c,U+c640,U+c644,U+c678,U+c694,U+c6a9,U+c6b0,U+c6b4,U+c6b8,U+c6cc,U+c6d0,U+c6d4,U+c704,U+c720-c721,U+c728,U+c73c,U+c740,U+c744,U+c74c,U+c751,U+c758,U+c774,U+c778,U+c77c,U+c784-c785,U+c788,U+c790-c791,U+c798,U+c7a1,U+c7a5,U+c7ac,U+c7c1,U+c800-c801,U+c804,U+c808,U+c810-c811,U+c815,U+c81c,U+c838,U+c870-c871,U+c874,U+c885,U+c8fc,U+c900,U+c904,U+c911,U+c99d,U+c9c0-c9c1,U+c9c4,U+c9c8,U+c9d1,U+cabd,U+cc28-cc29,U+cc30,U+cc38,U+cc3d,U+cc44-cc45,U+cc98,U+cc9c,U+cca0,U+ccad,U+ccb4,U+cd08,U+cd1d,U+cd5c,U+cd94-cd95,U+cd9c,U+cda9,U+cde8,U+ce21,U+ce35,U+ce58,U+ce5c,U+ce68,U+ce74,U+cf54,U+d06c,U+d070,U+d0a4,U+d0c0,U+d0c4,U+d0dc-d0dd,U+d130,U+d15c,U+d1a0,U+d1b5,U+d22c,U+d2b8-d2b9,U+d30c,U+d310,U+d3b8,U+d3c9,U+d3ec-d3ed,U+d45c,U+d488,U+d504,U+d53c,U+d544,U+d558-d559,U+d55c,U+d560,U+d568-d569,U+d56d,U+d574-d575,U+d588-d589,U+d5a5,U+d5d8,U+d604,U+d611,U+d615,U+d638,U+d654-d655,U+d658,U+d65c,U+d669,U+d68c-d68d,U+d6a8,U+d6c4,U+d76c,U+d788","diff":0,"charsSize":363},{"name":"54.woff2","size":60400,"chars":"U+50e8,U+532d,U+53b4,U+54bc,U+551a,U+5645,U+5666,U+5672,U+56b3,U+56c5,U+5852,U+5b24,U+5b4c,U+5d2c,U+5df9,U+5e6c,U+5f12,U+6463,U+649f,U+6504,U+68d6,U+69bf,U+6aeb,U+6af3,U+6e5e,U+6e63,U+736a-736b,U+7380,U+7649,U+79b0,U+7a6d,U+7ab6,U+7c5c,U+7d06,U+7d32,U+7dd9,U+7de6,U+7df6,U+7df9,U+7e0b,U+7e11,U+7e36,U+7e52,U+7e62,U+7e6f,U+7e8a,U+7f8b,U+8156,U+8161,U+8181,U+8264,U+826b,U+8526,U+8546,U+8558,U+8577,U+85f6,U+86fa,U+87ef,U+8806,U+8946,U+89af,U+89bf,U+8a01,U+8a75,U+8a84,U+8ad7,U+8b7e,U+8b9e,U+8db2,U+8e60,U+8ee4,U+8efa,U+8f05,U+8f07,U+91d9,U+923d,U+9255,U+929a,U+92b1,U+92df,U+92e3,U+92e6,U+92f6,U+9306,U+9308,U+9364,U+9369,U+9370,U+9384,U+93bf,U+9414,U+9428,U+9479,U+95bd,U+95e5,U+9689,U+97bd,U+9859,U+98eb,U+9937,U+993c,U+99d4,U+99d8,U+9a0d,U+9a36,U+9a42,U+9b9e,U+9baa,U+9bdd,U+9c08,U+9c12,U+9c29,U+9c3e,U+9c5d,U+9c6d,U+9d1f,U+9d2f,U+9d42,U+9d6f,U+9d93,U+9dbc,U+9dda,U+9de5,U+9def,U+9e0c,U+9e7a,U+9ef2,U+9f09","diff":0,"charsSize":130},{"name":"52.woff2","size":60592,"chars":"U+50c9,U+5115,U+53c4,U+5635,U+5638,U+57b5,U+581d,U+5b00,U+5b19,U+5b2a,U+5d33,U+5e43,U+5ee1,U+616a,U+6173,U+645c,U+651b,U+6abe,U+6add-6ade,U+6ae8,U+6af8,U+6b7f,U+6c0c,U+7026,U+733b,U+74a6,U+74d4,U+766d,U+7725,U+7868,U+78b8,U+7bcb,U+7c00,U+7cf2,U+7d3c,U+7d4e,U+7d83,U+7da3,U+7db0,U+7dc7,U+7de1,U+7df1,U+7e35,U+7e7e,U+7e98,U+802c,U+8278,U+8494,U+84e7,U+84ef,U+84f4,U+84fd,U+87bb,U+889e,U+8a4e,U+8a58,U+8a7f,U+8a91,U+8a9a,U+8ac2,U+8acf,U+8ade,U+8ae1,U+8afc,U+8b59,U+8b92,U+8b96,U+8b9c,U+8c9b,U+8cb2,U+8cfb,U+8cfe,U+8d04,U+8edb,U+8f1c,U+90df,U+91d3,U+91d5,U+91e4,U+9227,U+9230,U+9248,U+9266,U+927f,U+9283,U+92a3,U+92a6,U+92aa,U+92f1,U+931b,U+9338,U+9340,U+93a6,U+93a9,U+93cc-93cd,U+93e8,U+9403,U+9413,U+943f,U+944c,U+9454,U+9582,U+95bc,U+95be,U+95c3,U+95c8,U+95d0,U+97c9,U+9807,U+9826,U+98ae,U+98bc,U+98e0,U+9908,U+99d1,U+99d9,U+9a05,U+9a44,U+9ad5,U+9b29,U+9b4e,U+9b90,U+9bc7,U+9bd6-9bd7,U+9be1,U+9c13,U+9c23,U+9d52,U+9df3,U+9df8,U+9efd,U+9eff,U+9f5c","diff":0,"charsSize":136},{"name":"55.woff2","size":28356,"chars":"U+5244,U+5515,U+568c,U+58da,U+5c68,U+5e58,U+5f33,U+61cd,U+6214,U+6516,U+68ec,U+69e7,U+6bff,U+7020,U+7044,U+7798,U+78fd,U+7e70,U+802e,U+8079,U+8183,U+8464,U+861e,U+8811,U+8a92,U+8b56,U+8cb0,U+8cd5,U+8ce7,U+8e93,U+8ea6,U+8f62,U+9233,U+92dd,U+9301,U+9307,U+9346,U+93aa,U+93f7,U+940b,U+9412,U+9426,U+958c,U+95ab,U+95bf,U+986c,U+9a2d,U+9a38,U+9b9a,U+9beb,U+9bf4,U+9c20,U+9c35,U+9c37,U+9d1d,U+9da5,U+9f47,U+9f60","diff":0,"charsSize":58},{"name":"53.woff2","size":59624,"chars":"U+50b4,U+5110,U+51aa,U+5274,U+528c,U+52f1,U+56a6,U+5969,U+5abc,U+5d81,U+5df0,U+6128,U+6192,U+61ae,U+61df,U+6207,U+6227,U+6451,U+6898,U+69aa,U+6a48,U+6ae7,U+6f59,U+6f77,U+6fa9,U+6ffc,U+7027,U+7197,U+7602,U+761e,U+7667,U+76b8,U+7c69-7c6a,U+7cdd,U+7cf4,U+7cf6,U+7cf9,U+7d07,U+7d86,U+7d88,U+7dc4,U+7e2d,U+7e32,U+7f86,U+81da,U+81e0,U+8452,U+851e,U+8552,U+8562,U+859f,U+863a,U+87e3,U+8810,U+8933,U+8949,U+895d,U+89a1,U+89f6,U+8a86,U+8ad1,U+8b6b,U+8d10,U+8e92,U+8ef9,U+8f0a,U+8f61,U+91c3,U+9201,U+9225,U+92a0,U+92a9,U+92cf,U+9312,U+931f,U+9343,U+9387,U+93dd,U+93f9,U+9420,U+944a,U+9465,U+946d,U+96c8,U+979d,U+97dd,U+980a,U+980f,U+9856,U+9862,U+98f1,U+9931,U+9933,U+994a,U+995c,U+9a4f,U+9b83,U+9b92,U+9bc0-9bc1,U+9bea,U+9c28,U+9c33,U+9c39,U+9c5f,U+9c67,U+9c7a,U+9d30,U+9d53,U+9d5c,U+9d87,U+9d98,U+9dd9,U+9de6,U+9ecc,U+9ef7,U+9f34,U+9f4e-9f4f,U+9f54,U+9f59","diff":0,"charsSize":122},{"name":"51.woff2","size":60104,"chars":"U+4fc1,U+5000,U+5096,U+5114,U+526e,U+5399,U+55f6,U+5665,U+566f,U+56c0,U+56c8,U+5816,U+584f,U+58d9,U+58e2,U+5b21,U+5d0d,U+614d,U+61e8,U+6331,U+6476,U+64fc,U+6894,U+6a34,U+6a81,U+6a89,U+6aec,U+6b0f,U+6b5f,U+6ba4,U+6de5,U+6fae,U+7032,U+7162,U+7341,U+743a,U+74da,U+7646,U+7658,U+7669,U+7670,U+7864,U+78e7,U+7906,U+7a61,U+7b67,U+7bf3,U+7c1e,U+7d3f,U+7d5b,U+7d5d,U+7d9e,U+7db9,U+7e0a,U+7e1e-7e1f,U+7fb6,U+8141,U+8407,U+8435,U+8541,U+8555,U+85ce,U+85ea,U+87f6,U+8a0c,U+8a10,U+8a6c,U+8ab6,U+8ae2,U+8ae4,U+8b04-8b05,U+8b95,U+8cb3,U+8cba,U+8e55,U+8e91,U+8e95,U+8eeb,U+8f1e,U+8f26,U+8f33,U+8f54,U+90e4,U+9134,U+9136,U+91c5,U+91d4,U+91e7,U+91f7,U+9204,U+9239,U+926d,U+927a,U+92ab,U+92e8,U+92ee,U+93c3,U+9419,U+9477,U+958e,U+95b6,U+95b9,U+95cb,U+9768,U+97d9,U+980e,U+984e,U+9853,U+9873-9874,U+98ed,U+9949,U+99e2,U+9a43,U+9b2e,U+9b58,U+9b74,U+9b8e,U+9bab,U+9be2,U+9bff,U+9c09,U+9c45,U+9ce7,U+9d07,U+9dbb,U+9dc0,U+9dc2,U+9e15,U+9e1d,U+9f6a,U+9f76-9f77","diff":0,"charsSize":135},{"name":"50.woff2","size":61044,"chars":"U+50af,U+5108,U+513b,U+528a,U+559e,U+561c,U+565d,U+5694,U+56b6,U+56c1,U+5707,U+5770,U+584b,U+58ce,U+5950,U+5aa7,U+5b0b,U+5b76,U+5cf4,U+5da0,U+5ee9,U+613e,U+6229,U+6261,U+64a3,U+64c4,U+66d6,U+690f,U+69e8,U+6a05,U+6a9c,U+6aa3,U+6ad3,U+6af1,U+6b1e,U+6b9e,U+6bae,U+6c2c,U+6c33,U+6c39,U+6f35,U+6f7f,U+7028,U+7043,U+7069,U+7146,U+716c,U+7296,U+7319,U+74a3,U+75fe,U+7664,U+77bc,U+78e3,U+7c11,U+7d02,U+7d08,U+7d13,U+7d15,U+7d3a,U+7dbe,U+7e88,U+81cf,U+81d2,U+82bb,U+858c,U+8604,U+861a,U+8716,U+875f,U+8784,U+87c8,U+8960,U+8998,U+89b2,U+89f4,U+8a41,U+8aa5,U+8adb,U+8b16,U+8b2b,U+8cda,U+8e89,U+8e9a,U+8ea1,U+8ea5,U+8ed4,U+8f42,U+8f64,U+9015,U+9090,U+9106,U+91f9,U+9200,U+9210-9211,U+922e,U+9238,U+923f,U+924d,U+925e,U+9278,U+92bc,U+92c3,U+9319,U+9358,U+93a7,U+93b0,U+93b5,U+93d1,U+97c3,U+9865,U+993f,U+9948,U+994c,U+9962,U+9a16,U+9a41,U+9acf,U+9bad,U+9bdb,U+9be4,U+9be7,U+9c25,U+9c48,U+9c56,U+9c78,U+9cf6,U+9d06,U+9d9a,U+9e1b,U+9e85,U+9f5f,U+9f66-9f67,U+9f6c","diff":0,"charsSize":136},{"name":"49.woff2","size":61360,"chars":"U+50c2,U+5137,U+5660,U+5680,U+57e1,U+580a,U+58e0,U+5ad7,U+5b08,U+5b7f,U+5da7,U+5db4,U+5dcb,U+5ec4,U+60f2,U+60fb,U+6142,U+615f,U+616b,U+61cc,U+61e3,U+636b,U+64b3,U+64bb,U+64ef,U+689f,U+6adf,U+6aea,U+6df6,U+6f1a,U+6fa0,U+7005,U+71dc,U+71f4,U+7370,U+7449,U+763b,U+76b0,U+7931,U+7a1f,U+7a4c,U+7c23,U+7c5f,U+7d31,U+7d40,U+7dcb,U+7dd7-7dd8,U+7df2,U+7e39,U+7e48,U+7fa5,U+8075,U+83a2,U+83a7,U+8594,U+866f,U+8706,U+87c4,U+87ce,U+8814,U+8831,U+8938,U+893b,U+8964,U+89a6,U+89ac,U+8a03,U+8a15-8a16,U+8a36,U+8a46,U+8a52,U+8a5b,U+8a85,U+8acd,U+8aed,U+8af6,U+8b14,U+8b3e,U+8b4e,U+8cc5,U+8e4c,U+8eaa,U+8ef2,U+8efb,U+9148,U+91f5,U+92ef,U+9315,U+9341,U+9347,U+9398,U+93a3,U+93dc,U+93e4,U+9410,U+9427,U+9463,U+9481,U+95ac-95ad,U+95de,U+9658,U+973d,U+9744,U+97de,U+981c,U+9821,U+9837,U+9870,U+98b6,U+98c6,U+98e9,U+98f4,U+9909,U+9911,U+991e,U+9a0f,U+9a2e,U+9a64,U+9ad6,U+9bf0,U+9c0d,U+9c2d,U+9c31,U+9c52,U+9ce9,U+9d23,U+9d61,U+9d6a,U+9d89,U+9dd3,U+9df2,U+9ea9,U+9f95","diff":0,"charsSize":136},{"name":"48.woff2","size":60552,"chars":"U+513a,U+5191,U+54e2,U+5504,U+55c7,U+55e9,U+560d,U+562e,U+5630,U+5695,U+56a8,U+585a,U+5879,U+597c,U+5af5,U+5b38,U+5d97,U+5db8,U+60b5,U+611c,U+6134,U+619a,U+61ab,U+61fa,U+6384,U+6425,U+649a,U+64fb,U+6506,U+6523,U+66b1,U+66c4,U+66c7,U+6a62,U+6d79,U+6ece,U+6f6f,U+705d,U+70f4,U+71fc,U+71fe,U+7258,U+729b,U+72a2,U+72fd,U+73a8,U+7515,U+75d9,U+765f,U+769a,U+78ad,U+792b,U+79c8,U+7b8b,U+7c0d,U+7c2b,U+7c6e,U+7cc9,U+7dac,U+7e09,U+7e10,U+7e6e,U+7f4c,U+7ffa,U+8477,U+849e,U+84c0,U+854e,U+85ba,U+8622,U+8768,U+8778,U+87a2,U+8823,U+89b7,U+8a1b,U+8a54,U+8a61,U+8a70,U+8aeb,U+8b01,U+8cc1,U+8ce1,U+8d05,U+8d17,U+8e7a,U+8efe,U+8f45,U+8fae,U+913a,U+91c1,U+91d2,U+91e9,U+91fa,U+9208,U+9249,U+9251,U+925a,U+9262,U+926c,U+92a5,U+92bb,U+92c7,U+92e5,U+92f0,U+9354,U+9376,U+937a,U+93f5,U+942e,U+9432,U+943a,U+9460,U+947e,U+9586,U+958f,U+95a1,U+95cc,U+95d4,U+9742,U+975a,U+9766,U+9830,U+98af,U+98c8,U+991b,U+9957,U+995e,U+9a2b,U+9a4d,U+9aaf,U+9b81,U+9bca,U+9bfd,U+9c54,U+9d26,U+9e1a,U+9f72","diff":0,"charsSize":138},{"name":"47.woff2","size":60820,"chars":"U+4e99,U+4f47,U+50e5,U+5102,U+513c,U+5157,U+55c6,U+5616,U+5653,U+56ea,U+579c,U+59cd,U+5acb,U+5c5c,U+5d22,U+5d87,U+5edd,U+6137,U+615a,U+6440,U+645f,U+6473,U+64f7,U+6519,U+6595,U+67f5,U+6ab3,U+6ab8,U+6abb,U+6ada,U+6b12,U+6bab,U+6ef7-6ef8,U+6f41,U+6f97,U+6fd8,U+6ffa,U+71c9,U+7377,U+737a,U+737c,U+744b,U+7489,U+74bd,U+74cf,U+750c,U+7627,U+766c,U+7787,U+792a,U+792c,U+79b1,U+7d46,U+7d73,U+7e1d,U+7e43,U+7e45,U+7e93,U+7f88,U+811b,U+81be-81bf,U+81cd,U+8396,U+858a,U+85fa,U+865c,U+86fb,U+880d,U+884a,U+8956,U+8a25,U+8a6b,U+8a6d-8a6e,U+8a7c,U+8ab9,U+8ac9,U+8afa,U+8b10,U+8b17,U+8b28,U+8b2c,U+8b4f,U+8cd2,U+8d16,U+8e63,U+8e8a,U+8efc,U+8f25,U+8f46,U+9114,U+9116,U+9183,U+920d,U+9226,U+9237,U+923e,U+927b,U+9291,U+9296,U+92ac,U+92cc,U+9310,U+932e,U+93a2,U+93ac,U+93d7-93d8,U+93de,U+93e2,U+95d5,U+9839,U+990c,U+9912,U+993e,U+9943,U+99b1,U+99df,U+99ed,U+9a3e,U+9a40,U+9a5b,U+9a6a,U+9b22,U+9b77,U+9bc9,U+9c58,U+9d15,U+9d1b,U+9d51,U+9d60,U+9da9,U+9dfa,U+9e1e","diff":0,"charsSize":136},{"name":"46.woff2","size":60856,"chars":"U+4fb6,U+51dc,U+522a,U+5284,U+5436,U+55b2,U+55da,U+56c2,U+5862,U+58ae,U+5a41,U+5a6d,U+5afa,U+5be2,U+5dd2,U+5dd4,U+5e40,U+5fa0,U+60bd,U+618a,U+61fe,U+633e,U+6417,U+64f0,U+64f2,U+6582-6583,U+6727,U+68e7,U+6968,U+69f3,U+6a3a,U+6adb,U+6ae5,U+6c08,U+6d87,U+6e19,U+6e26,U+6f23,U+6f2c,U+7006,U+700f,U+7018,U+7064,U+7152,U+71be,U+71c1,U+71ed,U+743f,U+74bf,U+760d,U+7621,U+7647,U+7662,U+7672,U+76de,U+798e,U+79bf,U+7a08,U+7a1c,U+7aba,U+7ac5,U+7ac7,U+7be4,U+7c37,U+7c6c,U+7d1c,U+7d33,U+7d79,U+7dba-7dbb,U+7dbd,U+7dde,U+7e08,U+7e55,U+7e5a,U+7e7d,U+82e7,U+83f4,U+8553,U+85f9,U+87ec,U+8805,U+8a63,U+8aa3,U+8aa8,U+8ac4,U+8adc,U+8ae6,U+8af3,U+8af7,U+8b0a,U+8b33,U+8c8d,U+8cd1,U+8ce4,U+8cec,U+8d0d,U+8f12,U+8f3e,U+8f4d,U+902c,U+9087,U+9209,U+923a,U+9257,U+9293,U+92a8,U+92e4,U+92f8,U+9328,U+9333,U+9365,U+936c,U+93b3,U+942b,U+9433,U+9438,U+9594,U+95a8,U+9695,U+96cb,U+97dc,U+9824,U+9871,U+98ea,U+9903,U+9921,U+9945,U+99b4,U+99d2,U+9a01,U+9a62,U+9a65,U+9bd4,U+9be8,U+9c32,U+9c77,U+9d72,U+9daf,U+9dd7","diff":0,"charsSize":141},{"name":"45.woff2","size":62236,"chars":"U+4fe0,U+50ad,U+52fb,U+5331,U+5379,U+5614,U+562f,U+589c,U+58b3,U+59e6,U+5b0c,U+5c37,U+5ce9,U+5dbc,U+5e57,U+5f5e,U+6065,U+6190,U+61f6,U+61fc,U+63c0,U+64be-64bf,U+64f1,U+6522,U+652a,U+65ac,U+6688-6689,U+66e0,U+68f2,U+6afb,U+6b16,U+6baf,U+6bb2,U+6bc6,U+6c2b,U+6cdd,U+6d36,U+6dea,U+6f70,U+6f80,U+6fc1,U+6ffe,U+7009,U+701d,U+7055,U+7192,U+71d9,U+720d,U+7463,U+7469,U+746f,U+7587,U+760b,U+7613,U+766e,U+7681,U+76ba,U+775c,U+779e,U+77ef,U+786f,U+78ef,U+79aa,U+7a62,U+7aaa,U+7ac4,U+7b8f,U+7c3e,U+7d09,U+7d5e,U+7d62,U+7d81,U+7d8f,U+7db4,U+7ddd,U+7e37,U+7e46,U+7e79,U+7ff9,U+807e,U+8123,U+81a9,U+8466,U+8588,U+863f,U+879e,U+883b,U+896a,U+8993,U+8a1d,U+8a23,U+8a60,U+8aa1,U+8aa6,U+8af1,U+8b20,U+8b41,U+8b8e,U+8c4e,U+8c9e,U+8cbd,U+8cca,U+8cdc,U+8ec0,U+8f1f,U+905d,U+9132,U+91d7,U+9215,U+9223,U+9240,U+92c5,U+9318,U+931a,U+9320,U+934d,U+9382,U+93df,U+9472,U+947f,U+95a5,U+96b4,U+96db,U+97cc,U+985b,U+986b,U+991a,U+99ad,U+99dd,U+99f1,U+99ff,U+9a4a,U+9c3b,U+9c49,U+9c57,U+9d09,U+9d3f,U+9f9c","diff":0,"charsSize":140},{"name":"44.woff2","size":62100,"chars":"U+4f96,U+5098,U+50d5,U+510d,U+516a,U+524e,U+53ad,U+555e,U+5687,U+56a5,U+56d1,U+582f,U+588a,U+58d8,U+58fa,U+5bf5,U+5c4d,U+5ca1,U+5de3,U+5ec2,U+5eda,U+5eec,U+5f4e,U+60b6,U+60f1,U+6144,U+617c,U+61c7,U+646f,U+647b,U+6493,U+64cb,U+650f,U+6514,U+665d,U+66ec,U+6736,U+6953,U+69d3,U+6a01,U+6bad,U+6d29,U+6df5,U+6e3e,U+6e4a,U+6ecc,U+6f11,U+6f51,U+6f86-6f87,U+6ff0,U+7015,U+701f,U+703e,U+71fb,U+72f9,U+7345,U+7378,U+7464,U+758a,U+7661,U+7671,U+797f,U+798d,U+7ac8,U+7b4d,U+7be9,U+7cde,U+7d43,U+7d91,U+7db8,U+7def,U+7e1b,U+7e61,U+7e6d,U+7e8f,U+7f75,U+7fa8,U+8073,U+8076,U+814e,U+81d8,U+8259,U+834a,U+8514,U+8525,U+852d,U+856a,U+8606,U+8766,U+87fb,U+881f,U+8836,U+8ad2,U+8ae7,U+8b0e,U+8b5f,U+8b74,U+8c48,U+8caf,U+8cb6,U+8cc2,U+8d13,U+8e34,U+8e8b,U+8ed2,U+905c,U+908f,U+919c,U+919e,U+91ac,U+91d8,U+921e,U+925b,U+938a,U+93fd,U+9470,U+947c,U+9598,U+95a9,U+95bb,U+96b8,U+9711,U+97fb,U+980c,U+98e2,U+9913,U+9935,U+993b,U+994b,U+9952,U+99c1,U+9a37,U+9b28,U+9b91,U+9d5d,U+9df9,U+9ef4,U+9f4b,U+9f52","diff":0,"charsSize":140},{"name":"43.woff2","size":62604,"chars":"U+4e1f,U+5006,U+5075,U+50f1,U+5109,U+5147,U+51f1,U+525d,U+52f3,U+52f8,U+53e2,U+5451,U+5674,U+58be,U+58df,U+593e,U+599d,U+5b30,U+5c62,U+5d84,U+5dbd,U+5e25,U+5e5f,U+5ec1,U+5edf,U+5f14,U+5f4c,U+5f65,U+6085,U+6158,U+61a4,U+61f8,U+6200,U+62cb,U+6399,U+6488,U+6490,U+64b2,U+64e1,U+652c,U+6558,U+687f,U+68d7,U+68df,U+6a1e,U+6bbc,U+6dfa,U+6ebc,U+6ec4,U+6eec,U+6ef2,U+6f3f,U+6fb1,U+7165,U+7169,U+71e6,U+723a,U+72a7,U+7343-7344,U+7375,U+746a,U+74ca,U+775e,U+77da,U+79a6,U+7aa9,U+7aaf,U+7aca,U+7c60,U+7cb5,U+7d0b,U+7d17,U+7dbf,U+7de0,U+7dec,U+7e2b,U+7e69,U+7e9c,U+7f77,U+8070,U+816b,U+8178,U+819a,U+81e5,U+8332,U+8490,U+84bc,U+84ee,U+856d,U+860a-860b,U+8755,U+8932,U+896f,U+89d4,U+8a1f,U+8a50,U+8a87,U+8b19,U+8b39,U+8b5a,U+8c93,U+8ced,U+8d1b,U+8ecb,U+8ef8,U+8f13,U+8f3b,U+91c0,U+91d0,U+91e3,U+9214,U+9234,U+9264,U+9298,U+929c,U+92b3,U+935b,U+93c8,U+95e1,U+9727,U+97cb,U+9803,U+9811,U+9838,U+984f,U+98b3,U+98c4,U+9905,U+992c,U+99b3,U+9a0e,U+9a55,U+9a5f,U+9ad2,U+9b31,U+9d28,U+9d3b,U+9db4,U+9e79,U+9e7c,U+9f21,U+9f90,U+9f94","diff":0,"charsSize":145},{"name":"42.woff2","size":62528,"chars":"U+5009,U+5074,U+5078,U+514c,U+51cd,U+5270,U+528d,U+53b2,U+5442,U+5586,U+559a,U+55aa,U+5606,U+5617,U+570f,U+5875,U+58e9,U+58fd,U+5a1b,U+5b43,U+5c5b,U+5d50,U+5dba,U+5dd6,U+6046,U+617e,U+61b6,U+61f2,U+62dd,U+6383,U+6416,U+64ab,U+64e0,U+64ec,U+64fe,U+651c,U+6575,U+6649,U+69cd,U+6a38,U+6ac3,U+6b04,U+6b3d,U+6bc0,U+6dbc,U+6dda,U+6de9,U+6e6f,U+6eef,U+6efe,U+6fc3,U+6fe4,U+6feb,U+7051,U+7058,U+7210,U+721b,U+7246,U+727d,U+7336,U+7501,U+75e0,U+7652,U+76dc,U+78a9,U+78da,U+7919,U+791f,U+7a4e,U+7d68,U+7da2,U+7db1,U+7dd2,U+7de3,U+7e31,U+7e96,U+8056,U+8105,U+8108,U+81c9,U+8266,U+8523,U+8569,U+8591,U+85a6,U+87f2,U+8972,U+8a3a,U+8a73,U+8a95,U+8a98,U+8b5c,U+8b6f,U+8c54,U+8ca9-8caa,U+8cc3-8cc4,U+8cc8,U+8ce2,U+8ce6,U+8cf4,U+8cfa,U+8d08,U+8e30,U+8e64,U+8f14,U+8f29,U+8f3f,U+8f44,U+8f5f,U+8faf,U+9059,U+905e,U+9072,U+9112,U+9130,U+9285,U+92c1,U+934b,U+9396,U+93c7,U+93e1,U+9444,U+947d,U+9583,U+9592,U+95a3,U+95b1,U+95c7,U+95d6,U+95e2,U+9670,U+96b1,U+978f,U+9801,U+9817,U+9846,U+98fc-98fd,U+99ae,U+99d5,U+99db,U+9a19,U+9a45,U+9b27,U+9ce5,U+9cf4","diff":0,"charsSize":148},{"name":"41.woff2","size":62180,"chars":"U+5016,U+502b,U+5091,U+50be,U+50d1,U+50de,U+5101,U+5291,U+52c1,U+55ac,U+55ce,U+5713,U+58c7,U+58de,U+58ef,U+5922,U+596a,U+5abd,U+5bae,U+5cef,U+5cfd,U+5d11,U+5e33,U+5ec8,U+5ee2,U+5f48,U+5f7f,U+5f91,U+60e1,U+6163,U+6182,U+6191,U+61b2,U+6232,U+6368,U+6372,U+63f9,U+6436,U+64a5,U+64fa,U+6524,U+65c2,U+66a2,U+66ab,U+66c9,U+68c4,U+68ca,U+69ea,U+6a11,U+6a6b,U+6bba,U+6de8,U+6e67,U+6e9d,U+6ec5,U+6f01,U+6f32,U+6f38,U+6f54,U+6f5b,U+6ff1,U+700b,U+70cf,U+7149,U+71c8,U+71d2,U+7240,U+7665,U+76c3,U+76e4,U+76e7,U+78bc,U+7a40,U+7aae,U+7c43,U+7cfe,U+7d10,U+7d14,U+7d2e,U+7d61,U+7d72,U+7de9,U+7e2e,U+7e5e,U+7e6a,U+7e73,U+7feb,U+8085,U+8139,U+8173,U+81a0,U+81bd,U+840a,U+84cb,U+85a9,U+85cd,U+865b,U+89bd,U+89f8,U+8a5e,U+8a62,U+8a69,U+8aa0,U+8aa4,U+8abc,U+8aee,U+8af8,U+8afe,U+8b00,U+8b02,U+8c6c,U+8c9d,U+8cbc,U+8cc0,U+8cde,U+8ce0,U+8d0f,U+8d95,U+8de1,U+8edf,U+8f09,U+8f2f,U+8f4e,U+8fad,U+9077,U+907a,U+907c,U+9081,U+912d,U+91cb,U+91e6,U+92d2,U+92ea,U+9326,U+932b,U+932f,U+9589,U+95ca,U+965d,U+9663,U+96de,U+975c,U+9802,U+9812,U+983b,U+98f2,U+98fe,U+9a30,U+9a5a,U+9cf3,U+9e7d,U+9ea5,U+9f15,U+9f61","diff":0,"charsSize":154},{"name":"39.woff2","size":63188,"chars":"U+4f15,U+4f48,U+4f54,U+50c5,U+5152,U+5247,U+524b,U+5289,U+52de,U+532f,U+537b,U+537d,U+5538,U+5678,U+56b4,U+570d,U+5716,U+57f7,U+5805,U+59b3,U+5be7,U+5be9,U+5beb,U+5bf6,U+5c46,U+5c64,U+5c6c,U+5e2b,U+5fa9,U+611b,U+614b,U+6236,U+63db,U+63ee,U+640d,U+64d4,U+64f4,U+65b7,U+69ae,U+6a02,U+6aa2,U+6b50,U+6b77,U+6c23,U+6cc1,U+6e1b,U+6eff,U+6fa4,U+71b1,U+723e,U+7260,U+72c0,U+734e,U+7368,U+7372,U+737b,U+756b,U+76e1,U+76e3,U+774f,U+790e,U+7926,U+7a31,U+7a69,U+7af6,U+7bc0,U+7bc4,U+7ce7,U+7d00,U+7d04-7d05,U+7d0d,U+7d42,U+7d9c,U+7dab,U+7dad,U+7dca,U+7de8,U+7dfb,U+7e7c,U+7e8c,U+7f85,U+7fa3,U+7fd2,U+805e,U+8072,U+8129,U+81e8,U+8208,U+84c6,U+85dd,U+85e5,U+8607,U+862d,U+865f,U+885b,U+88dc,U+8988,U+89aa,U+8a0a,U+8a13,U+8a2a,U+8a31,U+8a3b,U+8a55,U+8a66,U+8acb,U+8b1b,U+8b58,U+8b77,U+8b93,U+8ca0-8ca1,U+8ca7-8ca8,U+8cb7,U+8ce3,U+8cfc-8cfd,U+8f03,U+8f15,U+9023,U+904a,U+9060,U+9069,U+908a,U+91ab,U+9280,U+92fc,U+9322,U+9435,U+9673,U+967d,U+96a8,U+96aa,U+96d9,U+96e2,U+96f2,U+97c6,U+97ff,U+9808,U+9810,U+984d,U+985e,U+9867,U+986f,U+98db,U+990a,U+9918,U+99ac,U+9a57,U+9b25,U+9ec3,U+9ed2,U+9f8d","diff":0,"charsSize":155},{"name":"40.woff2","size":62460,"chars":"U+4e82,U+4fec,U+5049,U+50b5,U+50b7,U+5100,U+511f,U+5132,U+518a,U+525b,U+5287,U+52dd,U+52f5,U+5433,U+5553,U+55ab,U+5712,U+584a,U+58d3,U+5920,U+5967,U+596e,U+5a66,U+5b6b,U+5bec,U+5c0b,U+5cf6,U+5d17,U+5e63,U+5e6b,U+5eab,U+5ef3,U+5fb9,U+616e,U+6176,U+61f7,U+639b,U+63da,U+64c1,U+64c7,U+64ca,U+651d,U+6557,U+65e3,U+694a,U+6a13,U+6a39,U+6a4b,U+6a94,U+6b61,U+6b72,U+6b78,U+6b98,U+6c59,U+6e09,U+6e2c,U+6eab,U+6f22,U+6f64,U+7063,U+707d,U+7159,U+7274,U+755d,U+7562,U+7570,U+7642,U+7843,U+7955,U+79ae,U+7b46,U+7bc9,U+7c21,U+7c4c,U+7c64,U+7d19,U+7d1b,U+7d21,U+7d30,U+7d39,U+7d55,U+7da0,U+7db2,U+7db5,U+7df4,U+7e3e,U+7e8d,U+7f70,U+807d,U+812b,U+8166,U+820a,U+8271,U+838a,U+8449,U+8667,U+885d,U+89ba,U+8a02,U+8a0e,U+8a17,U+8a34,U+8a9e,U+8ab0,U+8ab2,U+8b1d,U+8b7d,U+8b80,U+8c50,U+8ca2,U+8cab,U+8cb4,U+8cb8,U+8cd3,U+8d0a,U+8d99,U+8da8,U+8e10,U+8e8d,U+8ecc,U+8f1b,U+8f1d,U+8f2a,U+8f38,U+9055,U+90f5,U+9127,U+91dd,U+9245,U+9304,U+9375,U+937e,U+9451,U+95c6,U+9678,U+968e,U+96d6,U+96dc,U+9748,U+97a6,U+97d3,U+9806,U+9813,U+9858,U+98ef,U+9928,U+99d0,U+9b06,U+9b5a,U+9b6f,U+9bae,U+9d6c,U+9e97,U+9f4a","diff":0,"charsSize":154},{"name":"38.woff2","size":62004,"chars":"U+4e26,U+4e9e,U+4f86,U+4fb7,U+500b,U+5011,U+5099,U+50a2,U+50b3,U+50f9,U+5104,U+512a,U+5167,U+5169,U+5225,U+5275,U+5283,U+52d5,U+52d9,U+52e2,U+5340,U+5354,U+53c3,U+54e1,U+554f,U+55ae,U+570b,U+5718,U+5831,U+5834,U+5b78,U+5be6,U+5c07-5c08,U+5c0d-5c0e,U+5e36,U+5e79,U+5e7e,U+5ee3,U+5f35,U+5f37,U+5f9e,U+61c9,U+6230,U+64da,U+654e,U+6578,U+6642,U+66f8,U+6703,U+6771,U+67fb,U+689d,U+696d,U+6975,U+69cb,U+6a19,U+6a23,U+6a5f,U+6b0a,U+6c7a,U+6c92,U+6e96,U+6fdf,U+7121,U+71df,U+722d,U+7232,U+73fe,U+74b0,U+7522,U+7576,U+767c,U+771e,U+77ad,U+78ba,U+7a05,U+7a2e,U+7a4d,U+7d1a,U+7d44,U+7d50,U+7d66,U+7d71,U+7d93,U+7e23,U+7e3d,U+7e54,U+7e94,U+7fa9,U+806f,U+8077,U+8207,U+8209,U+83d3,U+83ef,U+842c,U+8655,U+8846,U+8853,U+8855,U+88cf,U+88dd,U+88fd,U+898b,U+898f,U+8996,U+89c0,U+8a08,U+8a18,U+8a2d,U+8a71-8a72,U+8a8c-8a8d,U+8aaa,U+8abf,U+8ac7,U+8ad6,U+8b49,U+8b70,U+8b8a,U+8cac,U+8cbb,U+8cbf,U+8cc7,U+8cea,U+8eca,U+8ecd,U+8f49,U+8fa6,U+8fb2,U+8ff4,U+9019,U+9032,U+904b,U+904e,U+9054,U+9078,U+9084,U+9109,U+92b7,U+9336,U+93ae,U+9577,U+9580,U+958b,U+9593,U+95a4,U+95dc,U+968a,U+969b,U+96bb,U+96e3,U+96fb,U+9805,U+9818,U+982d,U+984c,U+98a8,U+9ad4,U+9ebc,U+9ede,U+9ee8,U+9f63","diff":0,"charsSize":166},{"name":"36.woff2","size":63900,"chars":"U+4f1b,U+507e,U+5181,U+523f,U+52a2,U+5326,U+537a,U+53a3,U+5423,U+5459,U+54b4,U+54d9,U+55be,U+57d8,U+5941,U+5a08,U+5b37,U+5cbd,U+5e31,U+5e5e,U+5f11,U+610d,U+6126,U+6206,U+6322,U+63b4,U+63f8,U+6445,U+6769,U+67a8,U+680a,U+6864,U+69e0,U+6a65,U+6d48,U+6e16,U+6ed7,U+7173,U+72ef,U+7303,U+7321,U+7605,U+78b9,U+7962,U+7a06,U+7aad,U+7ba8,U+7c16,U+7cc7,U+7d77,U+7ea1,U+7ea5,U+7ea9,U+7ec1,U+7ef2,U+7f02,U+7f07,U+7f0b-7f0c,U+7f0f,U+7f12,U+7f21,U+7f23,U+7f2f,U+7f74,U+80b7,U+80e8,U+80ea,U+8114,U+8136,U+8223,U+823b,U+8288,U+82c8,U+8311,U+835b,U+836d,U+83b6,U+8411,U+8487,U+84e3,U+866e,U+867f,U+86f1-86f2,U+88e5,U+89cb-89cc,U+89cf,U+89ef,U+8ba0,U+8bd4,U+8bdc,U+8c02,U+8c18,U+8c2b,U+8c33,U+8db1,U+8dd6,U+8f7a,U+8f7e,U+8f81-8f82,U+948b,U+94ac,U+94b7-94b8,U+94d8,U+94de,U+94eb,U+950d,U+9513-9514,U+9516,U+9518,U+9529,U+9538,U+953f,U+954e,U+9561,U+9565,U+9568-956a,U+956c,U+95fc,U+9667,U+9792,U+97b2,U+97b4,U+98a1,U+98e7,U+9967,U+9969,U+996b,U+9987,U+9a75,U+9a7a,U+9a80,U+9a92,U+9a96,U+9aa3,U+9c86,U+9c8e,U+9c94-9c95,U+9c9a,U+9ca0-9ca1,U+9ca3,U+9cb4,U+9cbd,U+9cd0,U+9cd4,U+9ce2,U+9e2b,U+9e31,U+9e36,U+9e38,U+9e3a,U+9e4b,U+9e4e,U+9e55,U+9e63,U+9e68-9e6a,U+9e71,U+9e7e,U+9ebd,U+9ec9,U+9eea,U+9f0d,U+9f51","diff":0,"charsSize":174},{"name":"35.woff2","size":64216,"chars":"U+4f65,U+50a7,U+5240,U+5452,U+5456,U+54d3,U+56df,U+57ef,U+59ab,U+5aaa,U+5ad4,U+5af1,U+5d5b,U+5d5d,U+5d74,U+5def,U+5e0f,U+5e42,U+5e91,U+6003-6004,U+603c,U+60ab,U+60ad,U+61b7,U+6217,U+64ba,U+67a7,U+680c,U+6861,U+6a7c,U+6b81,U+6c07,U+6ca9,U+6cf6-6cf7,U+6cfa,U+6f74,U+709d,U+7198,U+72ad,U+72f2,U+737e,U+7477,U+748e,U+75ac,U+75d6,U+7617,U+763f,U+76b2,U+7726,U+7817,U+781c,U+7b3e,U+7ba7,U+7c74,U+7c9c-7c9d,U+7cc1,U+7e9f,U+7ee0-7ee1,U+7ee8,U+7ef1,U+7efe,U+7f01,U+7f11,U+7f17,U+7f26-7f27,U+7f31,U+8279,U+82c1,U+82d8,U+835c,U+836c,U+839c,U+83bc,U+8489,U+848c,U+84e0,U+86f4,U+886e,U+88e2-88e3,U+8bb5,U+8bce,U+8bd3,U+8bd6,U+8bf3,U+8bf9,U+8bfc,U+8c04,U+8c16-8c17,U+8c1d,U+8c25,U+8c35-8c36,U+8d40,U+8d46,U+8d4d,U+8d5c,U+8dde,U+8f6d,U+8f75,U+8f8e,U+8f94,U+90cf,U+917e,U+94aa-94ab,U+94c8,U+94ca,U+94d1,U+94d5,U+94d7,U+94df,U+94e5,U+94e9-94ea,U+94f3,U+94f7,U+94fc-94fd,U+9515,U+951d,U+952a,U+952c,U+9545,U+954f,U+9554,U+9558-9559,U+9566-9567,U+9571-9572,U+95f1,U+9608,U+960f,U+96e0,U+97af,U+9878,U+987c,U+9883,U+988f,U+989f,U+98d1,U+98d5,U+990d,U+9963,U+9993,U+9a93,U+9acc,U+9b49,U+9c8b,U+9c9e,U+9ca5,U+9ca7,U+9ca9,U+9cad-9cae,U+9cb1,U+9cce,U+9cd3,U+9e37,U+9e39,U+9e41,U+9e46-9e48,U+9ee9,U+9f39,U+9f80,U+9f85,U+9f87","diff":0,"charsSize":177},{"name":"37.woff2","size":27648,"chars":"U+4e2c,U+522d,U+54d5,U+54dc,U+5523,U+5786,U+5c66,U+5e3b,U+5f2a,U+61d4,U+620b,U+6484,U+684a,U+6920,U+6bf5,U+6ee0,U+6f24,U+6f46,U+717a,U+770d,U+7857,U+7f32-7f33,U+8022,U+804d,U+817d,U+836e,U+8539,U+877e,U+8bf6,U+8c2e,U+8d33,U+8d47,U+8d55,U+8e2c,U+8e9c,U+8f77,U+8f79,U+9494,U+94b6,U+94f4,U+94f9,U+950a,U+950e,U+951e,U+952b,U+953c,U+953e,U+9544,U+9564,U+95f6,U+9603,U+960c-960d,U+98a5,U+9a98,U+9a9f,U+9c92,U+9ca6,U+9cb0,U+9cba,U+9cbc,U+9cc6,U+9ccb,U+9cd8,U+9e32,U+9e5b,U+9f44,U+9f86","diff":0,"charsSize":69},{"name":"34.woff2","size":64272,"chars":"U+4f25,U+4f27,U+4faa,U+4fe3,U+4fe6,U+51eb,U+5250,U+538d,U+53c1,U+5453,U+54d4,U+54dd,U+556d,U+55f3,U+56af,U+5739,U+575c,U+57b2,U+57b4,U+57da,U+5ad2,U+5d03,U+6079,U+6120,U+629f,U+6332,U+63bc,U+64b8,U+679e,U+67b3,U+67fd,U+6800,U+691f,U+6924,U+6987,U+6989,U+6aa9,U+6b24,U+6b87,U+6d4d,U+6e0c,U+6f4b,U+72b8,U+73d0,U+74d2,U+75a0,U+75c8,U+75e8,U+765e,U+7856,U+7877,U+789b,U+7a51,U+7b15,U+7b5a,U+7ba6,U+7baa,U+7ccd,U+7ecb,U+7ed0,U+7ed4,U+7ed7,U+7ee6,U+7efa-7efb,U+7f0d,U+7f1b,U+7f1f,U+7f22,U+7f35,U+8027,U+80fc,U+816d,U+81bb,U+82cc,U+8315,U+8368-8369,U+83b3-83b4,U+83b8,U+85ae,U+86cf,U+877c,U+8a8a,U+8ba6-8ba7,U+8bcc,U+8bdf,U+8be8,U+8bee,U+8c00,U+8c07,U+8c14,U+8c20,U+8c2f-8c30,U+8d30,U+8d36,U+8d3d,U+8d59,U+8df8,U+8e2f,U+8e70,U+8f78,U+8f87,U+8f8b,U+8f8f,U+8f9a,U+90ba,U+90c4,U+90d0,U+917d,U+933e,U+9486-9487,U+948c-948d,U+948f-9490,U+94ad,U+94b2,U+94bd,U+94cd,U+94d2,U+94d6,U+94d9,U+94ef,U+9507,U+951b,U+9531,U+9546,U+954a,U+955e,U+956b,U+95e9,U+95f3,U+9604,U+9609-960b,U+9612,U+9615,U+9617,U+9765,U+97ea,U+9880,U+989a-989b,U+989e,U+98a7,U+996c,U+9980,U+9991,U+9a78,U+9a7d,U+9a88,U+9aa0,U+9aa2,U+9b47,U+9c82,U+9c87,U+9c90,U+9c9b,U+9cb5,U+9cc3,U+9cc7,U+9cca,U+9cd9,U+9e28,U+9e2c,U+9e42,U+9e58,U+9e5a,U+9e5e,U+9e6c,U+9efe,U+9f0b,U+9f88,U+9f8a,U+9f8c","diff":0,"charsSize":181},{"name":"33.woff2","size":64072,"chars":"U+4fa9,U+506c,U+50a5,U+51fc,U+520d,U+523d,U+53a9,U+549d,U+551b,U+5527,U+556e,U+55eb-55ec,U+5624,U+568f,U+56f5,U+57a7,U+57d9,U+57dd,U+5942,U+5a32,U+5a75,U+5b73,U+5c98,U+5cbf,U+5cc4,U+5ce4,U+5eea,U+5ffe,U+607b,U+61d1,U+622c,U+6266,U+626a,U+63b3,U+63b8,U+63ff,U+66a7,U+67a5,U+6860,U+6867,U+68c2,U+6901,U+6a2f,U+6a79,U+6b92-6b93,U+6bc2,U+6c29,U+6c32,U+6ca3-6ca4,U+6da0,U+6e86,U+6edf,U+6fd1,U+7080,U+7116,U+7145,U+72cd,U+72de,U+72f0,U+732c,U+7391,U+7596,U+75b1,U+75b4,U+766f,U+7751,U+789c,U+7bd1,U+7ea3,U+7ea8,U+7eb0,U+7ebe,U+7ec0,U+7eeb,U+7eef,U+7f25,U+7f2c,U+8191,U+8297,U+8314,U+835a,U+8366,U+84d1,U+8572,U+85c1,U+85d3,U+8616,U+866c,U+86ac,U+86ca,U+86d4,U+86f3,U+8748,U+88c6,U+89c7,U+89ca,U+89ce,U+89d0,U+89de,U+8ba3,U+8baa-8bab,U+8bc2,U+8bdb,U+8be4,U+8bf0,U+8c15,U+8c21,U+8c2a,U+8d49,U+8db8,U+8dc4,U+8df9,U+8e51,U+8e7f,U+8f6b,U+8f73,U+8ff3,U+9026,U+90d3,U+9495,U+9497,U+949c,U+94a3-94a4,U+94af,U+94b9-94ba,U+94bf,U+94cb-94cc,U+94e0-94e1,U+94f0,U+9509,U+9512,U+951f,U+9534,U+9552-9553,U+9557,U+955d,U+9562,U+9791,U+9889,U+9894,U+98a2,U+9974,U+998a,U+9990,U+9994-9995,U+9a9b-9a9c,U+9aa7,U+9ac5,U+9c88,U+9c91,U+9ca2,U+9cb2-9cb3,U+9cb6-9cb7,U+9cc5,U+9ccf,U+9cd5,U+9cdc,U+9e22,U+9e29-9e2a,U+9e57,U+9e67,U+9e6b,U+9e73,U+9eb8,U+9f83,U+9f89,U+9f9b","diff":0,"charsSize":181},{"name":"31.woff2","size":64508,"chars":"U+4e98,U+4f2b,U+4fa5,U+4fac,U+4fe8,U+5156,U+52d0,U+5364,U+53ae,U+53fd,U+545b,U+5494,U+54a4,U+5520,U+5567,U+5618,U+56f1,U+579b,U+5811,U+59a9,U+59d7,U+5a76,U+5c49,U+5c96,U+5ce5,U+5d02,U+5d58,U+6005,U+607a,U+60ec-60ee,U+62a0,U+6342,U+6376,U+6400,U+6402,U+64b7,U+64de,U+6593,U+6654,U+67e0,U+6805,U+6808,U+683e,U+692d,U+6988,U+69db,U+69df,U+6b9a,U+6cde,U+6d52,U+6da7,U+6e85,U+7096,U+70c3,U+7266,U+728a,U+72b7,U+7315,U+736d,U+73ae,U+73ba,U+73d1,U+740f,U+74ee-74ef,U+759f,U+7663,U+7691,U+772f,U+77fe,U+783a,U+783e,U+7977,U+7b3a,U+7bd3,U+7eca,U+7edb,U+7ef7,U+7f1c,U+7f28,U+7f2b,U+7f30,U+7f42,U+7f81,U+7ff1,U+80ae,U+80eb,U+810d,U+8110,U+8113,U+814c,U+82d4,U+830e,U+835e,U+8364,U+836a,U+83ba,U+84df,U+84e6,U+8511,U+853a,U+864f,U+8715,U+874e,U+8845,U+8884-8885,U+8ba5,U+8bb7,U+8bd9,U+8be0-8be1,U+8be7,U+8bfd,U+8bff,U+8c1a,U+8c1f,U+8c24,U+8c27,U+8c2c,U+8d4a,U+8d4e,U+8d58,U+8d61,U+8e0c,U+8e52,U+8f76,U+8f8a,U+8f98,U+8ff8,U+90ac,U+90e7,U+949a-949b,U+949d,U+94a8,U+94b4,U+94c0,U+94c2,U+94c6,U+94d0,U+94e2-94e4,U+94ec,U+94f1,U+94ff,U+9522,U+9525,U+9535,U+9550,U+9556,U+955b,U+956f-9570,U+95eb,U+95f0,U+9611,U+9619,U+988a,U+988d,U+9893,U+98e8,U+9975,U+9981,U+998d,U+998f,U+9a6e,U+9a77,U+9a7f,U+9a87,U+9a8a,U+9aa1,U+9b13,U+9c7f,U+9c9f,U+9ca4,U+9cdd,U+9e2f,U+9e33,U+9e35,U+9e3e,U+9e43-9e44,U+9e5c,U+9e6d","diff":0,"charsSize":188},{"name":"32.woff2","size":64524,"chars":"U+4eb5,U+4fea,U+507b,U+50a9,U+51a2,U+5457,U+5499,U+549b,U+54d2,U+5522,U+556c,U+55bd,U+565c,U+567c,U+5785,U+57a9,U+57ad,U+59aa,U+59f9,U+5a06,U+5b6a,U+5c99,U+5fcf,U+6002,U+6006,U+603f,U+6078,U+607d,U+607f,U+60af,U+62a1,U+631b,U+631e,U+637b,U+6448,U+64b5,U+6619,U+6635,U+67ad,U+680e,U+6d43,U+6d54,U+6d9e,U+6e11,U+6ee2,U+704f,U+70e9,U+70ec,U+7118,U+724d,U+72c8,U+73c9,U+73cf,U+7572,U+75c9,U+7618,U+762a,U+7800,U+783b,U+7980,U+7a23,U+7ba9,U+7bab,U+7c41,U+7c7c,U+7cbd,U+7ec2,U+7ec9,U+7ecc,U+7ef6,U+7f03-7f04,U+7f08,U+7f19,U+7f9f,U+8069,U+80c4,U+817c,U+82cb,U+830f,U+8360,U+8365,U+8385,U+8424,U+84e5,U+8537,U+8671,U+869d,U+86ce,U+86f0,U+8717,U+87a8,U+891b,U+8934,U+8941,U+89d1,U+8bb9,U+8bc3,U+8bc5,U+8bcb,U+8bcf,U+8bd2,U+8bd8,U+8be9,U+8c0c,U+8c0f,U+8c11-8c12,U+8c29,U+8c32,U+8d32,U+8d45,U+8d53,U+8d5d,U+8df7,U+8e8f,U+8f71-8f72,U+8f7c,U+8f95,U+8fab,U+909d,U+90e6,U+92ae,U+9485,U+948e,U+9492,U+94a1,U+94b5,U+94bc,U+94c4,U+94c9,U+94db,U+94e7,U+9502-9503,U+9506,U+950f,U+9511,U+9517,U+9528,U+9536-9537,U+9542,U+9549,U+9563,U+9573,U+95fe,U+9602,U+9606,U+9616,U+961a,U+9649,U+96f3,U+9701,U+972d,U+9753,U+97eb,U+988c,U+98a6,U+98d2-98d3,U+98d9-98da,U+9968,U+996f,U+9977,U+997d,U+9984,U+998b,U+9a81,U+9a90,U+9a9d-9a9e,U+9acb,U+9c85,U+9ca8,U+9cab,U+9ccd,U+9cdf,U+9e20,U+9e49,U+9e4c,U+9e51,U+9e66,U+9f8b","diff":0,"charsSize":186},{"name":"30.woff2","size":65160,"chars":"U+4fa3,U+51c4,U+51db,U+5220,U+532e,U+5450,U+5455,U+545c,U+54df,U+5507,U+5578,U+56a3,U+5742,U+575e,U+5815,U+5a04-5a05,U+5a34,U+5bdd,U+5c34,U+5ce6,U+5ce8,U+5dc5,U+5e27,U+5e3c,U+5eb5,U+5f95,U+6064,U+60eb,U+6123,U+6151,U+62e3,U+62e7,U+631f,U+6361,U+6363,U+63b7,U+6405,U+6512,U+655b,U+65f7,U+672d,U+6809,U+6862,U+6866,U+6868,U+68f1,U+6984,U+6a71,U+6a90,U+6ba1,U+6bd9,U+6be1,U+6c79,U+6c93,U+6ca6,U+6cf8,U+6cfe,U+6d4a,U+6d4f,U+6d9f,U+6da1,U+6da3,U+6da9,U+6e0d-6e0e,U+6eaf,U+6ee4,U+6ee6,U+6f13,U+709c,U+70bd,U+70db,U+70e8,U+72f8,U+73f2,U+7410,U+7487,U+75a1,U+75ae,U+75d2,U+75eb,U+766b,U+7682,U+76b1,U+76cf,U+77eb,U+781a,U+796f,U+79c3,U+79c6,U+7a8d,U+7a9c,U+7aa5-7aa6,U+7b03,U+7bf1,U+7eab,U+7ead,U+7ec5,U+7eda,U+7ede,U+7ee2,U+7eee,U+7ef0,U+7efd,U+7f00,U+7f0e,U+7f24,U+7f2d-7f2e,U+7fd8,U+80e7,U+82b8,U+82c7,U+82ce,U+8426,U+853c,U+8682,U+86ee,U+8747,U+8749,U+8bb4,U+8bbd,U+8be3,U+8bec,U+8bf2,U+8bf5,U+8c06,U+8c0d-8c0e,U+8c19,U+8c1b,U+8d26,U+8d31,U+8d3b-8d3c,U+8d48,U+8d50,U+8f84,U+8f8d,U+8f97,U+8f99,U+8fe9,U+94a0,U+94ae,U+94b0,U+94b3,U+94ce,U+94e8,U+94f2,U+94f5,U+9504,U+951a,U+952f-9530,U+9532,U+9539,U+9541,U+954c-954d,U+956d,U+95f5,U+95fa,U+9668,U+96bd,U+97ec,U+9885,U+9890,U+996a,U+997a,U+9985,U+9992,U+9a6d,U+9a6f,U+9a74,U+9a79,U+9a85,U+9a8b,U+9a8f,U+9aa5,U+9cb8,U+9cbb,U+9cc4,U+9ccc,U+9cd7,U+9cde,U+9e25-9e26,U+9e4a,U+9f9f","diff":0,"charsSize":191},{"name":"29.woff2","size":67032,"chars":"U+4ec6-4ec7,U+4ed1,U+4f1e,U+4f63,U+4fa0,U+4fde,U+50bb,U+50f5,U+517d,U+51d1,U+51ff,U+5239,U+5300,U+535c,U+538c,U+53a2,U+53e0,U+5413,U+548f,U+54bd,U+54c4,U+54d1,U+54d7,U+5582,U+5631,U+566a,U+575f-5760,U+5792,U+57ab,U+58f6,U+5978,U+5a07,U+5ba0,U+5c27,U+5c38,U+5c7f,U+5c82,U+5de2,U+5e18,U+5e90,U+5f26,U+5f5d,U+601c,U+6073,U+607c,U+60e7,U+61d2,U+621a,U+62e2,U+62e6,U+631a,U+631d,U+6320,U+6328,U+6346,U+63ba,U+6401,U+658b,U+65a9,U+663c,U+6652,U+6655-6656,U+6760,U+67ab,U+6816-6817,U+6869,U+6a31,U+6b7c,U+6bb4,U+6c22,U+6ca5,U+6cbe,U+6cc4,U+6cfb,U+6d3c,U+6d47,U+6da4,U+6e0a,U+6e83,U+6f4d,U+6f9c,U+6fd2,U+7076,U+70c1,U+70eb,U+718f,U+72ed,U+7405,U+7476,U+7574,U+75af,U+75ea,U+75f4,U+762b,U+763e,U+7741,U+7792,U+77e9,U+77f6,U+7845,U+7978,U+7985,U+79fd,U+7ad6,U+7b0b,U+7b5b,U+7b5d,U+7caa,U+7cd5,U+7eac,U+7eb6,U+7ece,U+7ed1,U+7ee5,U+7f09,U+7f15,U+7f1a,U+7f20,U+7f2a,U+7fa1,U+8038,U+803b,U+804b,U+80b4,U+80be,U+817b,U+8231,U+829c,U+82a6,U+8327,U+8346,U+835f,U+8367,U+836b,U+83b9,U+841d,U+8471,U+8681,U+8721,U+889c,U+89c5,U+8bb3,U+8bb6,U+8bc0,U+8beb,U+8c05,U+8c1c,U+8c23,U+8c34,U+8d1e,U+8d2c,U+8d2e,U+8d42-8d43,U+8dfb,U+8e0a,U+8eaf,U+8f69,U+900a,U+90f8,U+915d,U+9171,U+9489-948a,U+9499,U+94a5,U+94a7,U+94be,U+94c5,U+94ee,U+9508,U+950c,U+9523-9524,U+952d,U+9540,U+9551,U+9576,U+95f7-95f8,U+95fd,U+9600,U+960e,U+9647,U+96b6,U+96cf,U+9709,U+97e7,U+98a0,U+98a4,U+9965,U+9976,U+997f,U+9988,U+9a73,U+9a7c,U+9a82,U+9a86,U+9a9a,U+9cd6,U+9e3d,U+9e70,U+9f7f","diff":0,"charsSize":207},{"name":"28.woff2","size":66212,"chars":"U+4e11,U+4e1b,U+4e22,U+4e27,U+4fa6,U+4fe9,U+4fed,U+5179,U+5188,U+51bb,U+51c9,U+51ef,U+51f6,U+522e,U+5265,U+529d,U+52cb,U+5367,U+5395,U+5398,U+53a8,U+53d9,U+53f9,U+540a,U+5415,U+541e,U+5446,U+54b8,U+5524,U+55b7,U+575d,U+5784,U+57a6,U+58f3,U+5938-5939,U+5986,U+5a74,U+5c18,U+5c4f,U+5c61,U+5c9a,U+5cb3,U+5d2d,U+5e05,U+5e1c,U+5e99,U+5e9e,U+5f25,U+5f2f,U+5f66,U+5fa1,U+604b,U+6052,U+60a6,U+60ac,U+60e8,U+6124,U+6251,U+629a-629b,U+62ac,U+6321,U+6323,U+633d,U+635e,U+63fd,U+641c,U+643a,U+6491,U+6735,U+6746,U+67a2-67a3,U+680b,U+6c64,U+6ca7,U+6caa,U+6cfc,U+6d12,U+6d45-6d46,U+6d51,U+6d9d,U+6dc0,U+6e17,U+6e7f,U+6e89,U+6ee5,U+6f47,U+707f,U+70c2,U+70e6,U+7115,U+7237,U+727a,U+72b9,U+72ee,U+72f1,U+730e,U+732b,U+739b,U+743c,U+7750,U+77a9,U+7816,U+7855,U+78b1,U+7984,U+7a83,U+7a91,U+7a9d,U+7b3c,U+7b4b,U+7ca4,U+7eb1,U+7eb9,U+7ed2,U+7ee3,U+7eea,U+7ef3,U+7ef5,U+7ef8,U+7f05-7f06,U+7f14,U+7f1d,U+7f62,U+8042,U+806a,U+80a0,U+80a4,U+80bf,U+80c1,U+8109,U+810f,U+814a,U+8230,U+8273,U+82cd,U+82f9,U+8350,U+83b2,U+8427,U+8574,U+867e,U+8680,U+8695,U+8854,U+886c,U+88e4,U+8bbc,U+8bc8,U+8bd1,U+8be6,U+8bf1,U+8c10,U+8c26,U+8c28,U+8c2d,U+8c31,U+8d3f,U+8d41,U+8d4b-8d4c,U+8d63,U+8e2a,U+8f67,U+8f74,U+8f90,U+8fa9,U+903b,U+903e,U+9065,U+90c1,U+917f,U+9493,U+949e,U+94a9,U+94c3,U+94dd,U+94ed,U+94f8,U+94fe,U+9510,U+953b,U+95ea,U+9601,U+9610,U+96c7,U+96fe,U+97e6,U+97f5,U+9875,U+9877,U+987d,U+9882,U+9888,U+989c,U+98d8,U+997c,U+9a70,U+9a84,U+9a91,U+9aa4,U+9c8d,U+9e2d,U+9e3f,U+9e45,U+9e64,U+9f20,U+9f9a","diff":0,"charsSize":212},{"name":"25.woff2","size":67248,"chars":"U+4e07,U+4e0e,U+4e13,U+4e1a,U+4e1c,U+4e24-4e25,U+4e2a,U+4e3a,U+4e3e,U+4e48-4e49,U+4e50,U+4e61,U+4e66,U+4e70,U+4e86,U+4e89,U+4e8e,U+4e9a,U+4ea7,U+4eb2,U+4ebf,U+4ec5,U+4ece,U+4eec,U+4ef7,U+4f17-4f18,U+4f1a,U+4f20,U+4f53,U+4f59,U+4f60,U+4fee,U+513f,U+514b,U+515a,U+5173-5174,U+517b,U+5185,U+519b-519c,U+51b3,U+51b5,U+51c6,U+51e0,U+51fa,U+5212,U+5218-5219,U+521b,U+522b,U+5236,U+529e,U+52a1,U+52a8,U+52b3,U+52bf,U+533a-533b,U+5343,U+534e-534f,U+5355-5356,U+5360,U+5373-5374,U+5386,U+53bf,U+53c2,U+53cc,U+53d1,U+53d8,U+53ea,U+53f7,U+5408,U+540c,U+540e,U+5458,U+54cd,U+56de,U+56e2,U+56f0,U+56fd-56fe,U+573a,U+575a,U+58f0,U+5904,U+5907,U+590d,U+5934,U+5956,U+5b66,U+5b83,U+5b9e,U+5ba1,U+5bb6,U+5bf9,U+5bfc,U+5c06,U+5c14,U+5c3d,U+5c40,U+5c42,U+5c4a,U+5e03,U+5e08,U+5e26,U+5e2d,U+5e72,U+5e76,U+5e7f,U+5e94,U+5f00,U+5f20,U+5f3a,U+5f53,U+5fd7,U+603b,U+6218,U+6237,U+624d,U+6267,U+62a4-62a5,U+62c5,U+6325,U+636e,U+6559,U+6570,U+65ad,U+65e0,U+65f6,U+663e,U+672f,U+673a,U+6743,U+6761,U+6765,U+6781,U+6784,U+679c,U+67e5,U+6807,U+6837,U+68c0,U+6c14,U+6ca1,U+6ce8,U+6d4e,U+6e38,U+6ee1,U+70b9,U+70ed,U+7231,U+73af-73b0,U+7535,U+76d1,U+771f,U+7740,U+7840,U+786e,U+79cd,U+79ef-79f0,U+7a0e,U+7a33,U+7ade,U+7c7b,U+7cae,U+7d27,U+7ea2,U+7ea6-7ea7,U+7eaa,U+7ebf,U+7ec4,U+7ec7,U+7ecf,U+7ed3,U+7ed9,U+7edf,U+7ee7,U+7eed,U+7ef4,U+7fa4,U+804c,U+8054,U+81f4,U+827a,U+8282,U+8303,U+836f,U+83b7,U+8425,U+8868,U+88c5,U+89c1-89c2,U+89c4,U+89c6,U+8ba1,U+8ba4,U+8ba9,U+8bae-8bb0,U+8bb2,U+8bb8,U+8bba,U+8bbe-8bbf,U+8bc1,U+8bc4,U+8bc6,U+8bd5,U+8bdd,U+8be5,U+8bf4,U+8bf7,U+8c03,U+8c08,U+8d1f,U+8d22-8d23,U+8d27-8d28,U+8d2d,U+8d38-8d39,U+8d44,U+8d5b,U+8f66,U+8f6c,U+8f83,U+8fb9,U+8fbe,U+8fc7,U+8fd0,U+8fd8-8fd9,U+8fdb-8fdc,U+8fde,U+9002,U+9009,U+91cc,U+94b1,U+94c1,U+94f6,U+9500,U+9547,U+957f,U+95e8,U+95ee,U+95f4,U+95fb,U+961f,U+9633,U+9645,U+9648,U+968f,U+96be,U+9879,U+987b,U+9884,U+9886,U+9898,U+989d,U+98ce,U+9a6c,U+9a8c,U+9ec4","diff":0,"charsSize":278},{"name":"26.woff2","size":68268,"chars":"U+4e1d,U+4e30,U+4e34,U+4e3d,U+4e4c,U+4e60,U+4e71,U+4e8f,U+4e91,U+4ea9,U+4eea,U+4f1f,U+4f24,U+501f,U+503a,U+503e,U+507f,U+50a8,U+5170,U+518c,U+5199,U+51b2,U+51cf,U+51fb,U+521a,U+5267,U+52b1,U+536b,U+5377,U+5385,U+538b,U+53a6,U+53f6,U+5403,U+5428,U+542c,U+542f,U+5434,U+56ed,U+56f4,U+574f,U+5757,U+58ee,U+591f,U+592b,U+593a,U+594b,U+5965,U+5987,U+5b59,U+5b81,U+5b9d,U+5bbd-5bbe,U+5bfb,U+5c5e,U+5c81,U+5c97,U+5c9b,U+5ce1,U+5cf0,U+5de8,U+5e01,U+5e2e,U+5e84,U+5e86,U+5e93,U+5f02,U+5f52,U+5f55,U+5f69,U+5f7b,U+5f81,U+5f84,U+5ff5,U+6000-6001,U+60ca,U+613f,U+620f,U+624e,U+6258,U+6269,U+626c,U+62a2,U+62b5,U+62e5,U+62e9,U+6302,U+635f,U+6362,U+6444,U+6446,U+6597,U+65d7,U+65e2,U+65e7,U+6653,U+6731,U+6742,U+6768,U+6770,U+677e-677f,U+6811,U+6838,U+6863,U+6865,U+6881,U+697c,U+6b22,U+6b27,U+6b8b,U+6bd5,U+6c47,U+6c49,U+6c61,U+6c88,U+6cfd,U+6d4b,U+6d89,U+6da6,U+6da8,U+6e10,U+6e29,U+6e7e,U+6f5c,U+7075,U+707e,U+70df,U+72b6,U+72ec,U+732e,U+753b,U+7597,U+76d6,U+76d8,U+77ff,U+793c,U+79bb,U+79c1,U+79cb,U+79d8,U+7b14,U+7b51,U+7b79,U+7b7e,U+7b80,U+7d2f,U+7eaf,U+7eb3,U+7eb7-7eb8,U+7eba,U+7ec3,U+7ec6,U+7ec8,U+7ecd,U+7edd,U+7ee9,U+7efc,U+7eff,U+7f16,U+7f51,U+7f57,U+7f5a,U+80cc,U+80dc,U+8111,U+8131,U+8270,U+82cf,U+8363,U+8428,U+8651,U+867d,U+8865,U+89c8-89c9,U+8a89,U+8ba2,U+8ba8,U+8bad,U+8bc9,U+8bcd,U+8bd7,U+8bed,U+8bef,U+8bfb,U+8bfe,U+8c01,U+8c22,U+8d21,U+8d25,U+8d2b,U+8d2f,U+8d35,U+8d37,U+8d5e,U+8d75-8d76,U+8d8b,U+8dc3,U+8df5,U+8f68,U+8f6e-8f6f,U+8f7b,U+8f7d,U+8f86,U+8f89,U+8f93,U+8fbd,U+8fdd,U+8ff9,U+9057,U+9093,U+90ae,U+90d1,U+9274,U+9488,U+949f,U+94a2,U+9519,U+9526,U+952e,U+9636,U+9646,U+9669,U+97e9,U+987a,U+987e-987f,U+98de,U+996d-996e,U+9986,U+9a7b,U+9c7c,U+9c81,U+9c9c,U+9e4f,U+9ed1,U+9f50,U+9f99","diff":0,"charsSize":245},{"name":"27.woff2","size":66788,"chars":"U+4e54,U+4ed3,U+4eff,U+4f19,U+4f26,U+4f2a,U+4f5b,U+4fa7-4fa8,U+4fca,U+5077,U+5151,U+51ac,U+51af,U+51c0,U+51cc,U+51e4,U+51ed,U+5242,U+5251,U+5269,U+52b2,U+5362,U+5389,U+5417,U+54a8,U+54f2,U+5706,U+5708,U+5723,U+575b,U+5899,U+5988,U+59dc,U+5a18,U+5a31,U+5baa-5bab,U+5bff,U+5c1d,U+5ca9,U+5cad,U+5de9,U+5e10,U+5e78,U+5e8a,U+5e9f,U+5f03,U+5f39,U+5fc6,U+5fe7,U+6076,U+60e9,U+60ef,U+6108,U+6263,U+626b,U+6270,U+6298,U+62dc,U+62df,U+62e8,U+6324,U+6447,U+644a,U+654c,U+65cb,U+6606,U+664b,U+6682,U+6697,U+6734,U+6740,U+676f,U+67aa,U+67dc,U+680f,U+68a6,U+68cb,U+6982,U+6a2a,U+6b32,U+6bc1,U+6c9f,U+6cea,U+6d01,U+6d53,U+6d8c,U+6d9b,U+6e14,U+6eda,U+6ede,U+6ee8-6ee9,U+706d,U+706f,U+7089,U+70ae,U+70bc,U+70e7,U+7275,U+732a,U+73a9,U+74f6,U+7545,U+75c7,U+76d0,U+76d7,U+7801,U+788d,U+7a77,U+7bee,U+7cd6,U+7ea0,U+7ea4,U+7eb2,U+7eb5,U+7ebd,U+7ed5,U+7ed8,U+7edc,U+7f13,U+7f18,U+7f29,U+7f34,U+8083,U+80c0,U+80c6,U+80f6,U+811a,U+8138,U+817e,U+8206,U+820d,U+8361,U+83b1,U+848b,U+84dd,U+865a,U+866b,U+88ad,U+89e6,U+8bca,U+8bda,U+8bde,U+8be2,U+8bf8,U+8bfa,U+8c0a-8c0b,U+8c13,U+8c37,U+8d1d,U+8d24,U+8d29-8d2a,U+8d34,U+8d3a,U+8d3e,U+8d4f,U+8d54,U+8d56,U+8d5a,U+8d60,U+8d62,U+8f70,U+8f7f,U+8f85,U+8f88,U+8f91,U+8f96,U+8f9e-8f9f,U+8fc1,U+8fc8,U+8fdf,U+9012,U+90b9,U+90bb,U+9178,U+91ca,U+94a6,U+94bb,U+94dc,U+94fa,U+9501,U+9505,U+950b,U+9521,U+955c,U+95ed,U+95ef,U+95f2,U+95f9,U+9605,U+9614,U+9634-9635,U+9655,U+9690,U+9759,U+9876,U+9881,U+9887,U+9891,U+9896-9897,U+9970-9972,U+9a71,U+9a76,U+9a7e,U+9a97,U+9e1f,U+9e21,U+9e23,U+9ea6,U+9f84","diff":0,"charsSize":219},{"name":"24.woff2","size":39352,"chars":"U+4e3f,U+5107,U+5155,U+5216,U+5281,U+5293,U+53b6,U+54f3,U+553c,U+570a,U+5776,U+5819,U+5adc,U+5b32,U+5b65,U+5c88,U+5c8d,U+5f61,U+5fee,U+6067,U+614a,U+615d,U+62f6,U+63ad,U+63be,U+6420,U+6434,U+6499,U+652e,U+67d9,U+67dd,U+6a8e,U+6aa0,U+6b43,U+6bea,U+6c15,U+6d5e,U+71e0,U+72c1,U+72c3,U+72e8,U+730a,U+73e7,U+746d,U+752f,U+754e,U+75b0,U+7603,U+7722,U+778d,U+77e7,U+7809,U+7811,U+78c9,U+78f2,U+7946,U+7967,U+799a,U+7b45,U+7b9d,U+7ba2,U+7cd7,U+8014,U+8028,U+8080,U+80c2,U+80d9,U+80ec,U+810e,U+8159,U+81a3,U+81aa,U+8201,U+833c,U+83e5,U+8459,U+848e,U+84cd,U+84d0,U+84f0,U+85b7,U+871e,U+8723,U+8729,U+8753,U+878b,U+8793,U+87d3,U+88d2,U+8966,U+89dc,U+89eb,U+8b26,U+8e9e,U+8ece,U+8fee,U+9139,U+914f,U+9174,U+9191,U+928e,U+9622,U+9674,U+9b48,U+9e88,U+9eb4,U+9f3d","diff":0,"charsSize":107},{"name":"22.woff2","size":62880,"chars":"U+4ef3,U+4f74,U+50d6,U+50ec,U+51ab,U+51b1,U+52d6,U+536e,U+54a9,U+54da,U+55cd,U+564d,U+572f,U+574c,U+576b,U+57fd,U+5844,U+59d2,U+5ae0,U+5b16,U+5b5b,U+5b80,U+5b84,U+5cb5,U+5d1e,U+5d6b,U+5efe,U+5f56,U+5f58,U+5f73,U+5f82,U+5f8c,U+5fc4,U+5fc9,U+5fe4,U+600a,U+602b,U+60dd,U+6106,U+63de,U+641b,U+643f,U+64e4,U+6634,U+676a,U+67b5,U+681d,U+6883,U+69b1,U+69d4,U+6b37,U+6b9b,U+6c46,U+6d7c,U+6eb7,U+6f36,U+6f72,U+6f89,U+6f8c,U+7035,U+7039,U+7113,U+7178,U+71d4,U+7228,U+727f,U+728f,U+72b4,U+72f4,U+7331,U+7481,U+74de,U+74e0,U+7540,U+755b,U+75c3,U+75e6,U+760a,U+761b,U+7625,U+7635,U+763c,U+764d,U+76cd,U+7704,U+7743,U+7747,U+7780,U+7847,U+786a,U+78a5,U+7a02-7a03,U+7aac,U+7ab3,U+7b0a,U+7b4c,U+7b7b,U+7bfc,U+7c0f,U+7c40,U+7ca2,U+7cf8,U+7e3b,U+7f9d,U+7fbc,U+8016,U+8020,U+811e,U+812c,U+8182,U+822f,U+8233,U+825f,U+8268,U+8284,U+828f,U+8291,U+8308,U+831b,U+83a9,U+83dd,U+8406,U+840f,U+845c,U+84b4,U+850c,U+855e,U+863c,U+864d,U+86ba,U+86c4,U+86de,U+873e,U+87ac-87ad,U+87bd,U+87db,U+880a,U+883c,U+887f,U+88bc,U+88f0,U+890a,U+892b,U+895e,U+8a48,U+8c94,U+8dcf,U+8de3,U+8e6f,U+8e90,U+8fb6,U+902d,U+90be,U+90db,U+9164,U+91ad,U+91af,U+936a,U+953a,U+963c,U+9654,U+966c,U+9688,U+96b3,U+9998,U+9aba,U+9adf,U+9aed,U+9b08,U+9b43,U+9f2c,U+9f37","diff":0,"charsSize":174},{"name":"21.woff2","size":62716,"chars":"U+4e69,U+4f67,U+4f7e,U+4fdc,U+50e6,U+5196,U+5202,U+5233,U+5363,U+5432,U+5476,U+54ad,U+54cf,U+5537,U+5575,U+5581,U+55cc,U+55fe,U+5601,U+561e,U+56dd,U+5709,U+572c,U+57cf,U+57f8,U+580d,U+5881,U+589a,U+5981,U+59b2,U+5c25,U+5d24,U+5e8b,U+5eb3,U+5ed2,U+5ef4,U+5fad,U+601b,U+6083,U+6092,U+6100,U+62ca,U+6369,U+638e,U+6426,U+646d,U+6535,U+65c4,U+6661,U+66db,U+6715,U+6798,U+67c3,U+68f9,U+698d,U+69ca,U+69ed,U+69f2,U+69ff,U+6a18,U+6b39,U+6bb3,U+6bf9,U+6c05,U+6c0d,U+6cb2,U+6cd6,U+6d33,U+6dab,U+6e53-6e54,U+6ebb,U+6fb6,U+71b5,U+7256,U+725d,U+727e,U+72f7,U+72fb,U+7313,U+739f,U+73e5,U+74ba,U+750f,U+754b,U+758b,U+7630,U+7640,U+76a4,U+775a,U+77bd,U+781f,U+78a1,U+7905,U+79b3,U+7b2b,U+7b2e,U+7b31,U+7b62,U+7b6e,U+7b85,U+7b9c,U+7bcc,U+7bea,U+7c0b,U+7c9e,U+7ce8,U+7e47,U+7f7e,U+7fb0,U+802a,U+8031,U+8071,U+8112,U+8160,U+8169,U+81a6,U+81c1,U+8234,U+829f,U+82a4,U+82e1,U+82fb,U+831a,U+8333,U+83c0,U+83f8,U+841c,U+845a,U+84bd,U+8548,U+85a4,U+8627,U+8629,U+86b5,U+86e9,U+86f8,U+872e,U+8731,U+877b,U+877d,U+8785,U+87ab,U+87ea,U+8813,U+8816,U+8864,U+88ce,U+897b,U+89da,U+89f3,U+8dba,U+8e3a,U+8fd3,U+9161,U+9179,U+91a3,U+961d,U+972a,U+9730,U+9ac0,U+9ae1,U+9aeb,U+9af9,U+9b51,U+9e87,U+9ee2,U+9f17,U+9f19,U+9f2f","diff":0,"charsSize":170},{"name":"23.woff2","size":64040,"chars":"U+4e0c,U+4e28,U+4e36,U+4ea0,U+4ec2,U+4f91,U+4f94,U+4fc5,U+502e,U+50ba,U+50ed,U+5182,U+51f5,U+525e,U+5282,U+5290,U+52f9,U+5369,U+54ff,U+552a,U+5588,U+55b5,U+55c9,U+5686,U+57a4,U+57f4,U+580b,U+5820,U+5865,U+58bc,U+5902,U+5925,U+5ab5,U+5be4,U+5c1c,U+5c22,U+5c6e,U+5d3e,U+5ddb,U+5e80,U+5ee8,U+5f50,U+5fed,U+605d,U+609b,U+609d,U+619d,U+6224-6225,U+6243,U+6343,U+63ce,U+63f2,U+640b-640c,U+6496,U+64d0,U+64d7,U+6509,U+6534,U+6549,U+656b,U+6603,U+674c,U+6833,U+6844,U+6957,U+6971,U+6a91,U+6c2a,U+6c5c,U+6cd0,U+6d0e,U+6e2b,U+6eb2,U+6f2d,U+706c,U+70b1,U+70c0,U+721d,U+728b,U+72f3,U+7338-7339,U+734d,U+736c,U+736f,U+74a9,U+750d,U+7513,U+7592,U+75c4,U+762d,U+7643,U+7707,U+7735,U+77a2,U+77b5,U+7839,U+784e,U+786d,U+791e,U+7924,U+793b,U+7953,U+798a,U+7a78,U+7a80,U+7b58,U+7bda,U+7be5,U+7cc8,U+7f68,U+8025,U+8029,U+8035,U+809c,U+80ad,U+80e9,U+80f2,U+8204,U+8221,U+822d,U+824b,U+825a,U+8274,U+827d,U+827f,U+82b0,U+82e0,U+8307,U+8347,U+837d,U+839b,U+83b0,U+83f9,U+8488,U+84b9,U+8579-857a,U+85a8,U+867c,U+86b0,U+86d1,U+86d8,U+8764,U+8770,U+8788,U+8797,U+87b5,U+8803,U+881b,U+8844,U+88fc,U+8930,U+89d6,U+8c85,U+8c8a,U+8c98,U+8dbc,U+8e23,U+8e40,U+8e94,U+8fd5,U+9058,U+90b6,U+914e,U+91a2,U+91b5,U+943e,U+955f,U+963d,U+9794,U+97ab,U+9ab1,U+9ad1,U+9b0f,U+9b2f,U+9ee5,U+9ef9,U+9efb-9efc,U+9fa0","diff":0,"charsSize":183},{"name":"18.woff2","size":63996,"chars":"U+4e93,U+4ebb,U+4ec4,U+4ef5,U+4f7b,U+502c,U+5080,U+5121,U+51c7,U+5208,U+52f0,U+530f,U+53f5,U+5464,U+5466,U+54a3,U+54bf,U+54d0,U+5549,U+555c,U+5576,U+558f,U+55b1,U+55f2,U+55f5,U+564c,U+5685,U+56e1,U+571c,U+57a1,U+5807,U+58c5,U+59a4,U+59af,U+59d8,U+5a09,U+5a0c,U+5a4a,U+5a67,U+5b6c,U+5c50,U+5c7a,U+5ca2,U+5d27,U+5d6c,U+5df3,U+5e19,U+5ea0,U+5eb9,U+5ebe,U+5fea,U+6042,U+6175,U+6215,U+6221,U+62bb,U+6308,U+6339,U+643d,U+6441,U+64e2,U+6555,U+659b,U+6677,U+6775,U+678b,U+6832,U+6840,U+68f0,U+6910,U+6934,U+6966,U+6998,U+69ce,U+6a3d,U+6a84,U+6bd6,U+6bfd,U+6c16,U+6c18,U+6cd4,U+6d0c,U+6d60,U+6ddd,U+6ecf,U+6ed3,U+6fb9,U+7023,U+70b7,U+70ca,U+712f,U+7168,U+7284,U+72d9,U+7352,U+73c8,U+740a,U+7441,U+7457,U+75a3,U+75d8,U+75e3-75e4,U+75ff,U+7610,U+7622,U+7688,U+76b4,U+76e5,U+772d,U+7812,U+7818,U+784c,U+7850,U+7887,U+789a,U+78b2,U+78f4,U+7b1e,U+7b24,U+7bb8,U+7bc1,U+7bd9,U+7ccc,U+7f71,U+7fa7,U+7fe6,U+7ff3,U+8052,U+8084,U+8093,U+80b1,U+80e4,U+80ef,U+80f4,U+81ec,U+8202,U+8210,U+828a,U+828e,U+82a8,U+82e3,U+8331,U+83a8,U+83aa,U+83e1,U+84ca,U+84fc,U+853b,U+857b,U+8605,U+8662,U+86b1,U+86b4,U+86c9,U+86ed,U+8725,U+874c,U+8763,U+879f,U+87b3,U+887d,U+88fe,U+89e5,U+8c47,U+8c49,U+8c7a,U+8dd7,U+8e59,U+8e69,U+8e85,U+902f,U+9099,U+909b,U+90c7,U+9143,U+914a,U+91ae,U+91ba,U+975b,U+977c,U+9ab6-9ab7,U+9afb,U+9ecd,U+9edc","diff":0,"charsSize":186},{"name":"20.woff2","size":63284,"chars":"U+4e47,U+4f89,U+5261,U+52ac,U+531a,U+5416,U+5454,U+5472,U+5478,U+54bb,U+54c2,U+54de,U+553f,U+55e5,U+560c,U+566b,U+572e,U+5769,U+5793,U+57d2,U+57e4,U+581e,U+5924,U+593c,U+5997,U+59a3,U+5ab8,U+5ad8,U+5b34,U+5b53,U+5ba5,U+5c59,U+5c63,U+5e11,U+5e14,U+5ed1,U+5f40,U+5fbc,U+600d,U+6019,U+605a,U+610e,U+623d,U+624c,U+634c,U+65d2,U+65f0,U+66f7,U+670a,U+6753,U+67e2,U+67f0,U+6855,U+686b,U+6874,U+6939,U+696e,U+6980,U+6a17,U+6aab,U+6b82,U+6b84,U+6bf3,U+6c06,U+6c19-6c1a,U+6d07,U+6d1a,U+6d27,U+6d2b,U+6d91,U+6e6b,U+6e8f,U+6fde,U+7085,U+70bb,U+723b,U+726e,U+72b0,U+72ce,U+72fa,U+7301,U+731e,U+7322,U+738e,U+755a,U+7594,U+75b3,U+760c,U+7615,U+7654,U+771a,U+7765,U+7768,U+77ec,U+78d4,U+78d9,U+7913,U+7957,U+79d5,U+79eb,U+7a70,U+7a86,U+7b25,U+7b2a,U+7b38,U+7b47,U+7b72,U+7c26,U+7dae,U+7e9b,U+7f36,U+7fee,U+801c,U+8043,U+809f,U+80ab,U+80cd,U+80d7,U+8118,U+8188,U+81cc,U+823e,U+8298,U+82ca,U+82e4,U+82f4,U+8306,U+833a,U+83d4,U+83df,U+8401,U+8451,U+846d,U+8476,U+8478,U+84ba,U+851f,U+8556,U+8585,U+867a,U+868b,U+868d,U+8734,U+8765,U+87ca,U+87ee,U+8832,U+8872,U+887e,U+88a2,U+88b7,U+88c9,U+8c55,U+8c73,U+8c78,U+8d67,U+8d91,U+8deb-8dec,U+8dfd,U+8e14,U+8e41,U+8fe8,U+900b,U+9011,U+915e,U+9162,U+9172,U+9185,U+918c,U+9190,U+92c8,U+96ce,U+96e9,U+9785,U+992e,U+9954-9955,U+9ab0,U+9ac1,U+9b1f,U+9b32,U+9b4d,U+9ee7,U+9f22","diff":0,"charsSize":186},{"name":"19.woff2","size":64596,"chars":"U+4e5c,U+4e8d,U+4edf,U+4f32,U+4f5e,U+4f76,U+5028,U+5048,U+50ee,U+520e,U+535f,U+5412,U+5443,U+54a6,U+5533,U+5541,U+5550,U+5556,U+5577,U+5591,U+55dd,U+560f,U+5627,U+562c,U+5657-5658,U+5664,U+567b,U+56d4,U+577c,U+578c,U+5800,U+5889,U+5a62,U+5aeb,U+5c3b,U+5ca3,U+5cac,U+5d26,U+5d9d,U+5db7,U+5edb,U+5f01,U+5f2d,U+5fb5,U+5fdd,U+5ff8,U+6029,U+6041,U+60b1,U+6222,U+623e,U+638a,U+63e0,U+647a,U+6485,U+65ab,U+65c3,U+65c6,U+6600,U+668c,U+669d,U+66be,U+66e9,U+67c1,U+67d2,U+6877,U+68fc,U+690b,U+6978,U+69a7,U+69c1,U+6a3e,U+6a50,U+6a5b,U+6a97,U+6b8d,U+6baa,U+6c10,U+6c3d,U+6c54,U+6ceb,U+6cee,U+6d04,U+6de0,U+6eb1,U+6ebd,U+7110,U+71b3,U+71f9,U+7230,U+728d,U+7292,U+72d2,U+7360,U+73a2,U+73b3,U+74ff,U+7511,U+75a5,U+75e7,U+7619,U+7633,U+779f,U+7826,U+7829,U+782c,U+7a39,U+7aa8,U+7ae6,U+7b04,U+7b0f,U+7bac,U+7c1f,U+7f45,U+7f5f,U+7faf,U+7fbf,U+7fd5,U+7fe5,U+80bc,U+80db,U+80dd,U+8132,U+815a,U+8167,U+81ca,U+8228,U+8244,U+8249,U+824f,U+82a1,U+82a9,U+82ab,U+82b4,U+8351,U+8378,U+83d8,U+83ea,U+83f0,U+8497,U+84c1,U+8538,U+858f,U+859c,U+85ff,U+867b,U+86a8-86a9,U+870a,U+8722,U+876e,U+87e5,U+8888,U+88df,U+8919,U+8921,U+8db5,U+8dbf,U+8e05,U+8e1f,U+9021,U+9044,U+9062,U+908b,U+90b4,U+90eb,U+90fe,U+9123,U+9146,U+918d,U+91aa,U+93ca,U+96b9,U+96d2,U+9708,U+9ac2,U+9b23,U+9b3b,U+9ecf","diff":0,"charsSize":180},{"name":"16.woff2","size":63776,"chars":"U+4ee8,U+4f09,U+4f22,U+4f43,U+4f57,U+4f5d,U+4f6f,U+4fce,U+4ff3,U+4ff8,U+500c,U+500f,U+502d,U+504e,U+5088,U+5345,U+53fb,U+5482,U+54a7,U+54cc,U+550f,U+5544,U+558b,U+5594,U+559f,U+55d6,U+55e8,U+55ef,U+564e,U+5704,U+57ed,U+5914,U+5958,U+599e,U+5a40,U+5ae1,U+5ae6,U+5b40,U+5b93,U+5c9c,U+5ccb,U+5d2e,U+5d47,U+5d4b,U+5d99,U+5e54,U+5e61,U+6014,U+608c,U+609a,U+60f4,U+60fa,U+61ff,U+621b,U+622e,U+63ae,U+63cd,U+6410,U+6414,U+64d8,U+6710,U+6748,U+6772,U+67b0,U+67b7,U+6954,U+695d,U+69ab,U+6c68,U+6c8f,U+6d2e,U+6dd9,U+6dec,U+6e4e,U+6e98,U+6ec2,U+6f66,U+6f8d,U+6fc9,U+6fe0,U+7094,U+7119,U+723f,U+729f,U+73de,U+7430,U+74e4,U+753e,U+7548,U+75bd,U+75cd,U+7634,U+76c5,U+76f1,U+7708,U+778c,U+7791,U+77b3,U+77dc,U+781d,U+7823,U+7827,U+782d,U+7830,U+783c,U+7893,U+78a3,U+78ec,U+7949,U+79e3,U+7a14,U+7a95,U+7aa0,U+7afd,U+7b90,U+7b95,U+7bfe,U+7c0c,U+7c91,U+7cc5,U+7da6,U+7f61,U+7fca,U+8006,U+807f,U+80bd,U+814b,U+8174,U+8198,U+8200,U+828d,U+82c4,U+82d2,U+82d5,U+82f7,U+832d,U+834f,U+840b,U+8438,U+847a,U+84d6,U+852b,U+85d0,U+86a4,U+86f9,U+8703,U+8707,U+8737,U+873b,U+8782,U+87d2,U+87e0,U+8839,U+8913,U+8a07,U+8c4c,U+8dce,U+8ddb,U+8dfa,U+8e09,U+8e1d,U+8e31,U+8e39,U+8e42,U+8e49,U+8e6d,U+8e76,U+9004,U+9036,U+9097,U+90d7,U+90dc,U+90e2,U+90ef,U+9104,U+9169,U+919a,U+91b4,U+938f,U+970e,U+973e,U+9798,U+97a3,U+9997,U+9f3e","diff":0,"charsSize":185},{"name":"17.woff2","size":63432,"chars":"U+4edd-4ede,U+4ee1,U+4eeb,U+4fda,U+4ffe,U+5025,U+50f3,U+5106,U+5241,U+525c,U+52ad,U+530d,U+5310,U+539d,U+53df,U+53fc,U+5421,U+544b,U+5477,U+54e7,U+5514,U+5530,U+5555,U+557e,U+5599,U+55b9,U+55c4,U+55d1,U+55d4,U+55df,U+55e4,U+55ea,U+5623,U+562d,U+5654,U+5671,U+56d7,U+56eb,U+56f9,U+576d,U+57d5,U+584d,U+5880,U+58ec,U+59be,U+59dd,U+5a55,U+5abe,U+5b51,U+5b71,U+5bee,U+5cd2,U+5d06,U+5d6f,U+5dfd,U+5e5b,U+5e96,U+5fd2,U+600f,U+606b,U+62bf,U+634b,U+636d,U+6371,U+6387,U+63c4,U+63c6,U+63d6,U+63f6,U+6421,U+64c0,U+661d,U+6657,U+66dc,U+6841,U+6849,U+699b,U+6a28,U+6a47,U+6b46,U+6c21,U+6c24,U+6c35,U+6c4a,U+6c86,U+6c94,U+6cc5,U+6d39,U+6d63,U+6d6f,U+6d94,U+6fef,U+705e,U+71e7,U+726f,U+7325,U+7350,U+73d9,U+741a,U+757f,U+7583,U+759d,U+75b8,U+75c2,U+75f1,U+7699,U+7719,U+777e,U+7889,U+795c,U+7a17,U+7a88,U+7b08,U+7b33,U+7be6,U+7c2a,U+7cb2,U+7f58,U+7fb8,U+8012,U+8026,U+8037,U+8153,U+8171,U+8214,U+821b,U+8222,U+826e,U+82be,U+82dc,U+82eb,U+830c,U+8334,U+83c5,U+83d6,U+83fd,U+8418,U+843c,U+8473,U+84a1,U+84ff,U+8564,U+8693,U+86a3,U+86a7,U+86aa,U+86af,U+86b6,U+86c6,U+86d0,U+8708-8709,U+870d,U+8759,U+8760,U+87af,U+87c6,U+87d1,U+8869,U+8a3e,U+8b07,U+8c62,U+8c89,U+8d6d,U+8d84,U+8d94,U+8dc6,U+8e2e,U+8e3d,U+8e47,U+8e4b,U+9005,U+9016,U+9051,U+907d,U+9082,U+9088,U+90b0,U+9150,U+965f,U+9697,U+96b0,U+96bc,U+9aef,U+9e82,U+9edf-9ee0","diff":0,"charsSize":188},{"name":"15.woff2","size":64000,"chars":"U+4e2b,U+4eb3,U+4ec9,U+4f0e,U+4f5a,U+4f64,U+4f8f,U+4fdf,U+501c,U+510b,U+51bc,U+527d,U+52be,U+5420,U+5429,U+542e,U+5486,U+54af,U+54c6,U+5506,U+5511,U+552c,U+55b3,U+55d2,U+55e6,U+55fd,U+5639,U+5659,U+5662,U+568e,U+5693,U+572a,U+5768,U+577b,U+5892,U+598a,U+5992,U+5a11,U+5a20,U+5ae3,U+5b17,U+5b7d,U+5bb8,U+5c15,U+5cc1,U+5d34,U+5d3d,U+5d4a,U+5d82,U+5e1a-5e1b,U+5ea5,U+5f77,U+5fd0-5fd1,U+5fd6,U+5fff,U+6035,U+6063,U+60b4,U+60bb,U+60c6,U+60da,U+612b,U+6194,U+61ca,U+61e6,U+61f5,U+620a,U+621f,U+6248,U+62c8,U+62d7,U+63e9,U+655d,U+65bc,U+65cc,U+65ce,U+65d6,U+6641,U+664c,U+665f,U+66b9,U+6773,U+6777,U+6787,U+67e9,U+6845,U+684e,U+688f,U+693d,U+696b,U+6994,U+69b7,U+6a35,U+6a58,U+6c26,U+6d35,U+6d5c,U+6d8e,U+6dd6,U+6e6e,U+6e9f,U+6ef9,U+6f09,U+6f2a,U+6f78,U+6fc2,U+714a,U+71b9,U+7337,U+733e,U+73b7,U+7428,U+742c,U+74f4,U+7525,U+753a,U+7566,U+7579,U+75e2,U+75fc,U+7638,U+7678,U+768e,U+76c2,U+76f9,U+7762,U+77cd,U+77fd,U+7825,U+7837,U+78b4,U+795f,U+7a1e,U+7b06,U+7b20,U+7bdd,U+7cb3,U+7cdc,U+7f44,U+7f54,U+7f94,U+8004,U+800b,U+8019,U+809b,U+80ed,U+80f1,U+8146,U+816e,U+81c0,U+81fc,U+81fe,U+832f,U+8340,U+8392,U+83a0,U+84af,U+869c,U+8713,U+8718,U+87c0,U+87cb,U+87fe,U+8815,U+8821,U+8902,U+8936,U+8d73,U+8fe4,U+9041,U+9052,U+905b,U+9095,U+90c5,U+911e,U+9122,U+916a,U+919b,U+9621,U+9631,U+96c9,U+9739,U+99a5,U+9b03,U+9ebe,U+9f10","diff":0,"charsSize":188},{"name":"13.woff2","size":65352,"chars":"U+4e56,U+4f58,U+4f6c,U+4f70,U+4fd0,U+5014,U+5197,U+51bd,U+524c,U+5315,U+5323,U+53e8,U+5406,U+540f,U+542d,U+548e,U+549a,U+54ab,U+54e6,U+54ee,U+54fc,U+556a,U+5583,U+55e3,U+5600,U+5669,U+56ff,U+573b,U+574d,U+586c,U+58f9,U+592f,U+5944,U+595a,U+598d,U+5993,U+5996,U+59ca,U+5a7f,U+5b7a,U+5ba6,U+5c4e,U+5e4c,U+5eb6,U+5f08,U+5f1b,U+602f,U+6059,U+606c,U+608d,U+60cb,U+61a9,U+620c,U+6233,U+6249,U+62a8,U+62c4,U+62ed,U+62f4,U+62f7,U+62fd,U+6345,U+6382,U+6396,U+63c9,U+6413,U+642a,U+645e,U+6487,U+64a9,U+64ac,U+6556,U+659f,U+65a1,U+6615,U+667e,U+6a80,U+6aac,U+6b83,U+6b86,U+6c30,U+6c50,U+6c5e,U+6c76,U+6c85,U+6cad,U+6d19,U+6d31,U+6d93,U+6dae,U+6dbf,U+6e25,U+6e4d,U+6e5f,U+6ec1,U+6f31,U+6f5e,U+6f7a,U+6f7c,U+6fa7,U+701b,U+70ab,U+70f7,U+717d,U+71a8,U+7252,U+72c4,U+72e1,U+72e9,U+73c0,U+73c2,U+745a,U+74e2,U+752d,U+7599,U+75a4,U+75f0,U+7600-7601,U+7629,U+768b,U+76bf,U+76d4,U+776c,U+77a0,U+77b0,U+78fa,U+7940,U+7a37,U+7a92,U+7afa,U+7b19,U+7b71,U+7b94,U+7cb1,U+7ce0,U+7cef,U+7fe1,U+80e5,U+812f,U+8148,U+819b,U+81ba,U+81c3,U+8235,U+828b,U+82ae,U+82b7,U+8309,U+8338,U+837c,U+8393,U+83c1,U+8431,U+8469,U+84bf,U+84d3,U+86db,U+86fe,U+8712,U+873f,U+8757,U+8783,U+8822,U+8859,U+8882,U+8892,U+88a4,U+88f3,U+892a,U+8d66,U+8dda,U+8e74,U+8fc2,U+8fe5-8fe6,U+900d,U+9068,U+90b3,U+90b8,U+9119,U+9131,U+915a,U+9163,U+9170,U+965b,U+96cc,U+96f9,U+9774,U+9ab8,U+9e8b,U+9e92,U+9eef","diff":0,"charsSize":193},{"name":"14.woff2","size":64636,"chars":"U+4e15,U+4e1e,U+4f3d,U+5043,U+5055,U+5140,U+51cb,U+5243,U+531d,U+535e,U+536f,U+53a5,U+53f1,U+541d,U+5431,U+547b,U+5492,U+54aa,U+54ce,U+54fd,U+5509,U+553e,U+557b,U+55c5,U+55e1,U+55f7,U+5608,U+561f,U+5636,U+563b,U+563f,U+5773,U+57a0,U+57b8,U+57c2,U+587e,U+58d5,U+59e3,U+5a29,U+5a6a,U+5a7a,U+5ac9,U+5b62,U+5b95,U+5c8c,U+5cab,U+5cb7,U+5e44,U+5e7a,U+5eff,U+5f0b,U+5f29,U+5f89,U+5f99,U+5f9c,U+5fa8,U+6026,U+6043,U+60b8,U+60d8,U+60f0,U+6115,U+618e,U+630e,U+637a,U+6390,U+63a3,U+63ac,U+63b0,U+64ae,U+6525,U+652b,U+6538,U+65ee-65ef,U+6631,U+6636,U+6666,U+6684,U+66f3,U+677c,U+67b8,U+67d8,U+67de,U+6886,U+68b5,U+6963,U+6979,U+6b59,U+6c69,U+6c74,U+6c8c,U+6cae,U+6ce0,U+6cef,U+6d95,U+6db8,U+6dc5,U+6dde,U+6de6,U+6dfc,U+6e1a,U+6ea7,U+6eb4,U+6f15,U+6f29,U+6fe1,U+7131,U+715c,U+7166,U+7172,U+7317,U+731d,U+7329,U+7396,U+73e9,U+7425,U+742e,U+7455,U+7490,U+7519,U+75b5,U+75b9,U+75d4,U+75de,U+7656,U+765c,U+7728-7729,U+777d,U+77f8,U+787c,U+78d0,U+795a,U+79ed,U+7a79,U+7abf,U+7b4f,U+7b60,U+7b75,U+7b8d,U+7bb4,U+7be1,U+7cbc,U+7f8c,U+7fb2,U+7fb9,U+7fce,U+808b,U+81c6,U+822b,U+82a5,U+82aa,U+82de,U+8317,U+8343,U+8543,U+854a,U+8559,U+8568,U+85b0,U+85b9,U+8638,U+86c0,U+86e4,U+88e8,U+88f1,U+8983,U+8c5a,U+8c82,U+8dbe,U+8e7c,U+8e87,U+9035,U+9074,U+90a1,U+9149,U+9157,U+916e,U+93d6,U+9642,U+968d,U+9706,U+970f,U+97ed,U+9abc,U+9e9d,U+9edb,U+9edd","diff":0,"charsSize":189},{"name":"12.woff2","size":63644,"chars":"U+4e10,U+4ea2,U+4ea5,U+4ec3,U+4f36,U+4f3a,U+4f5f,U+4f84,U+4f88,U+4f8d,U+4f97,U+501a,U+5029,U+504c,U+51a5,U+51f8,U+5201,U+52fa,U+5321,U+5352,U+5366,U+53e9,U+543c,U+5471,U+5480,U+5495,U+54b3,U+54c7,U+557c,U+55dc,U+5632,U+566c,U+5676,U+56b7,U+56da,U+56e4,U+5703,U+57a2-57a3,U+58d1,U+5919,U+592d,U+5955,U+5983,U+59e5,U+5a13,U+5b09,U+5b70,U+5b75,U+5bd0,U+5bf0,U+5c41,U+5c91,U+5c94,U+5ced,U+5d69,U+5e16,U+5f3c,U+6020,U+604d,U+6055,U+60e6,U+618b,U+61a7,U+61ac,U+61cb,U+62ce,U+62d9,U+62ee,U+634e,U+63ea,U+6452,U+6479,U+6482,U+64ce,U+64d2,U+660a,U+664f,U+66e6,U+675e,U+67c4,U+67da,U+6853,U+68a2,U+68fa,U+693f,U+6942,U+695e,U+69ad,U+69b4,U+6b89,U+6bcb,U+6c40,U+6cb1,U+6cf1,U+6d85,U+6daa,U+6dc6-6dc7,U+6e32,U+6e3a,U+6e43,U+6eba,U+6f3e,U+6f88,U+6fee,U+70d9,U+7109,U+7184,U+71ee,U+722a,U+733f,U+7409,U+7435-7436,U+7459,U+747e,U+748b,U+749c,U+749e,U+7504,U+752c,U+759a,U+75ca,U+761f-7620,U+7738,U+773a,U+777f,U+7785,U+77a5,U+77aa,U+77bf,U+78be,U+78d5,U+7934,U+795b,U+79a7,U+7a20,U+7a96,U+7b28,U+7b50,U+7b77,U+7c27,U+7c38,U+7c95,U+7f79,U+7f9a,U+7fcc,U+8046,U+8098,U+80da,U+80f0,U+80f3,U+8165,U+8237-8238,U+8299,U+82d3,U+8301,U+831c,U+8398,U+83bd,U+83e0,U+83e9,U+8475,U+85d5,U+85e9,U+8654,U+86df,U+871a,U+888d,U+8910,U+891a,U+8925,U+8db4,U+8de4,U+8e1e,U+8e66,U+8e6c,U+901e,U+9083,U+90e1,U+90f4,U+912f,U+9165,U+91c9,U+91dc,U+962a,U+9685,U+9704,U+9773,U+9776","diff":0,"charsSize":193},{"name":"11.woff2","size":65756,"chars":"U+4fae,U+4fd8,U+4fef,U+50a3,U+516e,U+5189,U+5195,U+51f3,U+51f9,U+5228,U+527f,U+5288,U+52ff,U+533f,U+5351,U+53db,U+53ed,U+5484,U+5490,U+54c9,U+54e9,U+5501,U+5543,U+55d3,U+56bc,U+5729,U+589f,U+5984,U+59ec,U+5a25,U+5a36,U+5a77,U+5a9a-5a9b,U+5ab2,U+5ac2,U+5ad6,U+5bc7,U+5c2c,U+5c51,U+5c79,U+5cd9,U+5d0e,U+5deb,U+5e87,U+5ed3,U+5f13,U+5f27,U+5f64,U+5fe1,U+5ffb,U+606a,U+6096,U+60df,U+60f6,U+60f9,U+61a8,U+620d-620e,U+6241,U+6252,U+6273,U+627c,U+6289,U+62c2,U+62c7,U+62cc,U+62ef,U+634d,U+63e3,U+6518,U+66ae,U+6726,U+6756,U+6789,U+6813,U+6829,U+6893,U+6897,U+68e3,U+690e,U+6995,U+69a8,U+69cc,U+6a1f,U+6a44,U+6a59,U+6bd3,U+6c13,U+6c90,U+6cbd,U+6ccc,U+6cd3,U+6cd7,U+6d5a,U+6dcc,U+6e44,U+6ea5,U+6f2f,U+6f8e,U+701a,U+7078,U+7095,U+7099,U+70af,U+70fd,U+714e,U+715e,U+71a0,U+71ce,U+7235,U+7239,U+7280,U+72d0,U+73ab,U+745c,U+7480,U+74a7-74a8,U+74e3,U+75f9,U+7693,U+76ce,U+7736,U+776b,U+778e,U+77e2-77e3,U+7852,U+789f,U+7948,U+7960,U+797a,U+79ba,U+79be,U+79f8,U+7a98,U+7aff,U+7b1b,U+7bc6,U+7cd9,U+7d0a,U+7d6e,U+7e82,U+800d,U+80fa,U+8116,U+8151,U+818a,U+81b3,U+81e7,U+8205,U+82db,U+832c,U+8335,U+8339,U+837b,U+8386,U+83cf,U+846b,U+8587,U+85c9,U+85dc,U+8611,U+868a,U+868c,U+8774,U+88d8,U+88f4,U+8912,U+8b6c,U+8c41,U+8c79,U+8dea,U+8e35,U+8e4a,U+8fe2,U+9017,U+914c,U+916f,U+9175-9176,U+918b,U+9640,U+9672,U+968b,U+9698,U+96cd,U+96ef,U+9713,U+9e93","diff":0,"charsSize":191},{"name":"10.woff2","size":63852,"chars":"U+4e4d,U+4e5e,U+4ed5,U+4f51,U+5018,U+5026,U+508d,U+50da,U+50e7,U+515c,U+51a4,U+5203,U+5254,U+533e,U+5375,U+53ee,U+5435,U+543b,U+548b,U+54fa,U+5587,U+5598,U+55a7,U+560e,U+576f,U+5777,U+57ae,U+5830,U+58a9,U+5937,U+5962,U+59e8,U+5a23,U+5a3c,U+5a49,U+5b5a,U+5bb5,U+5bc5,U+5bde,U+5be1,U+5c09,U+5cb1,U+5cea,U+5d29,U+5d4c,U+5f57,U+5f87,U+5ff1,U+6016,U+6021,U+606d,U+614c,U+6177,U+625b,U+6296,U+62f1,U+634f,U+63a0,U+6467,U+6495,U+64bc,U+64c2,U+6577,U+6590,U+65a7,U+6627,U+6643,U+6687,U+66dd,U+6714,U+6795,U+67d1,U+67ff,U+68b3,U+68cd,U+68d5,U+68d8,U+68e0,U+6930,U+6960,U+6977,U+69bb,U+69d0,U+6bd7,U+6c2e-6c2f,U+6c72,U+6c7e,U+6c81,U+6cbc,U+6ce3,U+6de4,U+6df3,U+6e2d,U+6ec7,U+6ed5,U+6f33,U+6f62,U+6fa1,U+7011,U+707c,U+708a,U+70d8,U+70f9,U+711a,U+7130,U+716e,U+7194,U+71ac,U+71e5,U+7281,U+7316,U+7357,U+7384,U+73ca,U+7422,U+7426,U+742a,U+745b,U+745f,U+7578,U+77a7,U+77d7,U+77ee,U+780c,U+785d,U+78c5,U+7941,U+79e4,U+7a1a,U+7bf7,U+7c07,U+7c3f,U+7c9f,U+7ca5,U+7cb9,U+7cdf,U+7f38,U+7f9e,U+7fdf,U+7fe9,U+803d,U+80aa,U+80d6,U+813e,U+8155,U+817a,U+819d,U+81fb,U+821c,U+82ad,U+82b9,U+82df,U+82ef,U+8304,U+8354,U+8446,U+853d,U+8549,U+85af,U+85fb,U+8650,U+865e,U+86d9,U+8700,U+8862,U+88d4,U+88f8-88f9,U+895f,U+8a79,U+8dcb,U+8e29,U+8e44,U+8e72,U+8e81,U+8eac,U+9050,U+9091,U+914b,U+962e,U+9661,U+9699,U+9716,U+9761,U+97a0,U+97f6,U+9ae6","diff":0,"charsSize":188},{"name":"9.woff2","size":64560,"chars":"U+4e19,U+4e38,U+4ea8,U+4f7c,U+4f83,U+4fd1,U+4ffa,U+502a,U+50fb,U+5154,U+5162,U+51f0,U+5256,U+52c9,U+5308,U+5319,U+5320,U+532a,U+5384,U+541f,U+5475,U+5496,U+54ac,U+54c0,U+54e8,U+5561,U+5589,U+561b,U+57e0,U+5885,U+5974,U+59ae,U+5a1f,U+5ab3,U+5acc,U+5b99,U+5b9b,U+5be5,U+5c6f,U+5c90,U+5d16,U+5dcd,U+5e37,U+5e9a,U+5f6a,U+5f8a,U+5f98,U+5fcc,U+6012,U+6068,U+6094,U+60bc,U+60d5,U+6109,U+611a,U+6254,U+626e-626f,U+6284,U+6292,U+62b9,U+62d0,U+62fe,U+6454,U+6674,U+66d9,U+66f0,U+673d,U+6749,U+67af,U+6854,U+68a7-68a8,U+68ad,U+68f5,U+6912,U+6986,U+69fd,U+6b47,U+6b49,U+6b6a,U+6c1f,U+6c28,U+6c5d,U+6cab,U+6cb8,U+6cf5,U+6d78,U+6dc4,U+6dcb,U+6e1d,U+6e23,U+6e9c,U+6eb6,U+6ed4,U+6f84,U+70ac,U+72fc,U+731c,U+7334,U+7470,U+7529,U+752b,U+75d5,U+7696,U+76ef,U+7720,U+7737,U+7766,U+77ac,U+77bb,U+7838,U+788c,U+78ca,U+7901,U+796d,U+79b9,U+79c9,U+79e7,U+7a3c-7a3d,U+7a57,U+7a74,U+7a84,U+7a9f,U+7b52,U+7c7d,U+7f69,U+7fc5,U+8018,U+803f,U+8086-8087,U+808c,U+809a,U+80a2,U+810a,U+8180,U+818f,U+81ed,U+820c,U+8292,U+82af,U+82bd,U+82d1,U+839e,U+83c7,U+83f1,U+8403,U+840c,U+840e,U+849c,U+84b2,U+84c9,U+8513,U+8517,U+851a,U+85e4,U+871c,U+8776,U+87ba,U+87f9,U+88d9,U+8a93,U+8d81,U+8d9f,U+8e22,U+8eb2,U+8eba,U+8fa8,U+8fed,U+901b,U+902e,U+9038,U+9042,U+904f,U+906e,U+90aa,U+90af,U+90dd,U+9102,U+9187,U+946b,U+964b-964c,U+96c0-96c1,U+971c,U+9756,U+99a8,U+9ad3,U+9b41,U+9e9f,U+9ed4","diff":0,"charsSize":194},{"name":"8.woff2","size":65132,"chars":"U+4e52-4e53,U+4e7e,U+4e9f,U+4ed7,U+4ef0,U+4f50,U+4fcf,U+50ac,U+50b2,U+5112,U+5180,U+52df,U+52fe,U+5349,U+5378,U+537f,U+53c9,U+53d4,U+543e,U+5440,U+5565-5566,U+5580,U+55bb,U+56ca,U+572d,U+573e,U+574e,U+5764,U+576a,U+5782-5783,U+584c,U+5948,U+594e,U+5951,U+59a8,U+59fb,U+5a1c,U+5ae9,U+5b55,U+5b5c,U+5bb0,U+5bc2,U+5bd3,U+5bf8,U+5c39,U+5c3f,U+5c60,U+5d14,U+5df7,U+5dfe,U+5e06,U+5e62,U+5e7b,U+5e7d,U+5eb8,U+5ed6,U+5f6c,U+609f,U+6101,U+6127,U+6148,U+61be,U+6247,U+62d8,U+62da,U+632b,U+6349,U+6367,U+6380,U+638f,U+63a9,U+64b0,U+64e6,U+655e,U+6572,U+6591,U+65a5,U+65ed,U+660f,U+6691,U+66a8,U+674f,U+67d4,U+67ef,U+6850,U+6876,U+68d2,U+6905,U+6a0a,U+6a61,U+6b79,U+6bb7,U+6bbf,U+6bef,U+6c41,U+6c55,U+6c82-6c83,U+6c9b,U+6d74,U+6daf,U+6dd1,U+6dd8,U+6deb,U+6df9,U+6e24,U+6e5b,U+6ea2,U+6ef4,U+6f06,U+6f6d,U+70b3,U+70e4,U+70ef,U+710a,U+7199,U+722c,U+723d,U+725f,U+7261,U+72ac,U+7433,U+7538,U+754f,U+7554,U+75bc,U+7624,U+7626,U+76d2,U+7709,U+7779,U+7784,U+7802,U+780d,U+786b,U+7898,U+78a7,U+78b3,U+78cb,U+78f7,U+7aed,U+7c92,U+7c98,U+7cca,U+7f55,U+7fc1,U+7fd4,U+7fe0,U+7ff0,U+7ffc,U+804a,U+80ba,U+80c3,U+8102,U+8106,U+8154,U+81c2,U+8247,U+8258,U+8328,U+832b,U+8389,U+838e,U+83ca,U+845b,U+846c,U+84b8,U+857e,U+859b,U+86c7,U+8702,U+884d,U+8896,U+88b1,U+8944,U+8f9c,U+8fa3,U+8fb1,U+8fc4,U+9006,U+9063,U+90a2,U+90b1,U+90b5,U+9177,U+9189,U+961c,U+96a7,U+978d,U+97ad,U+9b3c,U+9b44-9b45,U+9b54,U+9f0e,U+9f3b","diff":0,"charsSize":199},{"name":"7.woff2","size":64524,"chars":"U+4e08,U+4e18,U+4e32,U+4e59,U+4e73,U+4ead,U+4ed4,U+4ed9,U+4f0f,U+4faf,U+5076,U+5085,U+5144,U+5146,U+51fd,U+524a,U+526a,U+52ab,U+5306,U+5339,U+5353,U+5410,U+5439,U+54b1,U+54ed,U+5564,U+558a,U+5634,U+574a,U+5751,U+57cb,U+57d4,U+5806,U+5824,U+582a,U+5835,U+5858,U+5893,U+58e4,U+5915,U+5960,U+5999,U+59a5,U+59b9,U+59c6,U+59da,U+59ff,U+5a03,U+5a46,U+5ac1,U+5b5d,U+5b64,U+5bb4,U+5bfa,U+5c16,U+5c3a,U+5c3e,U+5c48,U+5cfb,U+5d1b,U+5de1,U+5e15,U+5e3d,U+5eca,U+5ef7,U+5f0a,U+5f17-5f18,U+5f7c,U+5fcd,U+6028,U+6084,U+60a0,U+60d1,U+614e,U+6155,U+6168,U+61c8,U+6208,U+6212,U+62ab,U+62f3,U+62fc,U+632a,U+633a,U+6398,U+63cf,U+63d2,U+642d,U+6492,U+649e,U+64c5,U+6500,U+659c,U+6602,U+6614,U+662d,U+6664,U+6670,U+6676,U+679d,U+67cf,U+682a,U+683d,U+6843,U+6846,U+684c,U+68af,U+68da,U+699c,U+6b3a,U+6b67,U+6c1b,U+6c27,U+6c5b,U+6c70,U+6cca,U+6ce1,U+6d3d,U+6d82,U+6db5,U+6e34,U+6e58,U+6f02,U+6f0f,U+6f58,U+7070,U+7092,U+718a,U+7238,U+7262,U+7272,U+72c2,U+72d7,U+72e0,U+73b2,U+751c,U+758f,U+75b2,U+764c,U+7686,U+76c6,U+76fc,U+775b,U+7761,U+788e,U+7891,U+7897,U+78b0,U+78c1,U+79bd,U+7a00,U+7a0d,U+7ae3,U+7bad,U+7d2b,U+7f50,U+7fbd,U+8036,U+809d,U+80a9,U+80ce,U+80f8,U+8170,U+8179,U+817f,U+819c,U+81e3,U+821f,U+8236,U+829d,U+82ac,U+8302,U+8305,U+83cc,U+8404,U+840d,U+8461,U+8482,U+84ec,U+8521,U+85aa,U+8679,U+886b,U+8870,U+8877,U+8881,U+88c2,U+8c6b,U+8dcc,U+8e48,U+8fb0,U+901d,U+9022,U+903c,U+90ce,U+916c,U+96d5,U+970d,U+971e,U+9738,U+9b42,U+9b4f,U+9e7f","diff":0,"charsSize":204},{"name":"6.woff2","size":66212,"chars":"U+4e01,U+4e43,U+4ea6,U+4ef2,U+4f2f,U+4f38,U+4f69,U+4fd7,U+4ff1,U+5021,U+5141,U+51b6,U+51dd,U+5200,U+5237,U+523a,U+5272,U+52d8,U+5401,U+541b,U+5427,U+5448,U+554a,U+559d,U+5609,U+5740,U+57c3,U+5821,U+586b,U+58a8,U+58c1,U+594f,U+5976,U+59bb,U+59d0-59d1,U+59d3,U+5a92,U+5b54,U+5b5f,U+5b85,U+5b87,U+5bbf,U+5bc4,U+5bd2,U+5be8,U+5c65,U+5d07,U+5de7,U+5e1d,U+5e7c,U+5f04,U+5f1f,U+5f6d,U+5f70,U+5f79,U+5f92,U+5faa,U+5fbd,U+5ffd,U+602a,U+6050,U+6070,U+60a8,U+60b2,U+60dc,U+6162,U+6167,U+6170,U+61c2,U+622a,U+6234,U+626d,U+6291,U+62b1,U+62bc,U+62c6,U+62d2,U+62d4,U+62d6,U+6316,U+6355,U+6377,U+63ed,U+640f,U+642c,U+6458,U+6478,U+64a4,U+6566,U+658c,U+65c1,U+65e8,U+65ec,U+65f1,U+6628,U+6668,U+6696,U+66f9,U+66fc,U+66ff,U+6717,U+675c,U+676d,U+679a,U+67ec,U+67f1,U+67f3-67f4,U+6842,U+6851,U+695a,U+6b20,U+6b23,U+6b96,U+6bc5,U+6beb,U+6c0f,U+6c57,U+6c60,U+6c6a,U+6cf3,U+6d1e,U+6d66,U+6d69,U+6d6e,U+6db2,U+6de1,U+6dee,U+6dfb,U+6eaa,U+6ecb,U+6ed1,U+6f20,U+6f2b,U+704c,U+708e,U+70ad,U+70b8,U+7126,U+714c,U+71c3,U+71d5,U+7206,U+731b,U+73bb,U+741b,U+7434,U+7483,U+74dc,U+74f7,U+7532,U+755c,U+75ab,U+7687,U+76f2,U+78e8,U+79d2,U+79e6,U+79e9,U+7a3b,U+7a3f,U+7a46,U+7a97,U+7af9,U+7c4d,U+7c89,U+7c97,U+8000,U+8010,U+8017,U+8033,U+8096,U+80de,U+81a8,U+8212,U+827e,U+82b3,U+82d7,U+8377,U+83f2,U+84c4,U+8584,U+864e,U+86cb,U+888b,U+88d5,U+8986,U+8c46,U+8c6a,U+8c8c,U+8d64,U+8d6b,U+8e0f,U+8fea,U+8ff7,U+9003,U+906d,U+9075,U+90a6,U+90ca,U+9192,U+963b,U+966a,U+9675-9677,U+9694,U+9ece,U+9ed8","diff":0,"charsSize":210},{"name":"5.woff2","size":65696,"chars":"U+4e39,U+4e4f,U+4e58,U+4e95,U+4ea1,U+4eab,U+4eae,U+4ec1,U+4f0a,U+4f10-4f11,U+4f30,U+4f34,U+4f3c,U+4f73,U+4fb5,U+5012,U+504f,U+5178,U+517c,U+5192,U+51a0,U+51b0,U+51b7,U+51e1,U+5211,U+52a3,U+52c3,U+52c7,U+52d2,U+52e4,U+5371,U+539a,U+53e5,U+53eb,U+5409,U+542b,U+5462,U+5473,U+547c,U+54c8,U+54e5,U+54ea,U+5510,U+552f,U+5531,U+5750,U+5761,U+5766,U+5802,U+5851,U+5854,U+585e,U+590f,U+591c,U+5949,U+5954,U+5a5a,U+5b63,U+5b88,U+5b8b,U+5b97,U+5b9c,U+5c01,U+5c04,U+5c0a,U+5c1a,U+5c24,U+5c4b,U+5cb8,U+5e55,U+5ec9,U+5ef6,U+5f31,U+5f90,U+5fae,U+5fd8-5fd9,U+5fe0,U+6015,U+6062,U+6069,U+6089,U+60a3,U+60e0,U+6276,U+6297,U+62bd,U+62d3,U+6311,U+6350,U+6389,U+638c,U+63e1,U+63f4,U+6469,U+64cd,U+653b,U+654f,U+6562-6563,U+656c,U+65e6,U+65fa,U+660c,U+667a,U+66b4,U+66f2,U+670b,U+672b,U+6790,U+67b6,U+67d3,U+6885,U+68b0,U+68ee,U+6b8a,U+6bcd,U+6bd2,U+6c89,U+6cc9,U+6cdb,U+6ce5,U+6cf0,U+6d17,U+6d1b,U+6d59,U+6d6a,U+6df7,U+6e20-6e21,U+6fb3,U+719f,U+7236,U+7259,U+725b,U+7267,U+73cd,U+73e0,U+745e,U+74e6,U+7518,U+7537,U+756a,U+7586,U+7591,U+75be,U+75db,U+76ae,U+76c8,U+76db,U+76df,U+76fe,U+77db,U+786c,U+7956,U+795d,U+7965,U+7981,U+79df,U+7a7f,U+7adf,U+7ae5,U+7aef,U+7b11,U+7b26,U+7b54,U+7bb1,U+7bc7,U+7f72,U+7f8a,U+7ffb,U+8015,U+8058,U+805a,U+8089,U+80a5,U+80af,U+80e1,U+8150,U+82e5,U+8336,U+8352,U+83ab,U+8463,U+8499,U+852c,U+8861,U+8863,U+88c1,U+8d74,U+8da3,U+8dd1,U+8ddd,U+8ddf,U+8de8,U+8df3,U+8f9b,U+8fd4,U+8feb,U+900f,U+9014,U+904d,U+907f-9080,U+90ed,U+91ce,U+9644,U+9686,U+969c,U+96c4-96c5,U+96e8,U+96ea,U+96f6-96f7,U+9707,U+9732,U+978b,U+9910,U+9aa8,U+9ebb,U+9f13","diff":0,"charsSize":223},{"name":"4.woff2","size":65704,"chars":"U+4e03,U+4e14,U+4e45,U+4e4e,U+4e5d,U+4e88,U+4e92,U+4ec0,U+4ecb,U+4ecd,U+4ed8,U+4ee4,U+4efd,U+4f0d,U+4f4e-4f4f,U+4f8b,U+4f9d,U+4fbf,U+4fc3-4fc4,U+500d,U+5019,U+5047,U+505c,U+5065,U+50cf,U+5145,U+514d,U+516b,U+516d,U+5175,U+5207,U+520a,U+521d,U+5224,U+5238,U+523b,U+52a9-52aa,U+5347-5348,U+534a,U+535a,U+5361,U+5370,U+53cb,U+53e4,U+53e6,U+53ec,U+53f2-53f3,U+5426,U+5438,U+5468,U+547d,U+552e,U+5584,U+559c,U+5668,U+56fa,U+5733,U+5747,U+57df,U+57f9,U+58eb,U+592a,U+592e,U+5931,U+5947,U+5957,U+59cb,U+5a01,U+5b57-5b58,U+5b69,U+5b8f,U+5b98,U+5ba2-5ba4,U+5bb3,U+5bb9,U+5bc6,U+5bcc,U+5bdf,U+5c3c,U+5c45,U+5ddd,U+5de6,U+5dee,U+5df4,U+5e0c,U+5e45,U+5e8f,U+5e95,U+5e97,U+5ea7,U+5ead,U+5eb7,U+5f80,U+5f85,U+600e,U+6025,U+606f,U+623f,U+627e-627f,U+6293,U+62cd,U+62db,U+62ec,U+62ff,U+6309,U+632f,U+6388,U+6392,U+63a2,U+63a7,U+63aa,U+641e,U+64ad,U+6545,U+6551,U+65a4,U+65c5,U+65e9,U+661f-6620,U+6625,U+665a,U+666e-666f,U+66fe,U+671d,U+6728,U+672a,U+6750,U+675f,U+67d0,U+6821,U+68c9,U+690d,U+6a21,U+6b4c,U+6b62,U+6b66,U+6b7b,U+6bb5,U+6bdb,U+6c38,U+6c7d,U+6c99,U+6cb9,U+6cbf,U+6ce2,U+6d0b,U+6d25,U+6d2a,U+6d32,U+6d3e,U+6e56,U+6f14,U+6f6e,U+6fc0,U+706b,U+70c8,U+7164,U+7167,U+7247-7248,U+724c,U+72af,U+7389,U+73ed,U+7403,U+751a,U+7530,U+7533,U+7559,U+7565,U+75c5,U+767b,U+767d,U+773c,U+7763,U+77ed,U+77f3,U+7834,U+793a,U+7968,U+798f,U+79c0,U+79fb,U+7a7a,U+7a81,U+7ad9,U+7ae0,U+7b97,U+7c73,U+7d20,U+7d22,U+7e41,U+7f3a,U+7f6a,U+7f6e,U+8003,U+821e,U+822a,U+822c,U+8239,U+826f,U+82e6,U+82f1,U+8349,U+83dc,U+843d,U+8457,U+85cf,U+878d,U+8840,U+8857,U+89d2,U+8a00,U+8b66,U+8c61,U+8d85,U+8d8a,U+8db3,U+8fc5,U+8fce,U+8ff0,U+8ffd,U+9000-9001,U+9010,U+9047,U+914d,U+9152,U+9632,U+963f,U+964d,U+9650,U+9664,U+9760,U+97f3,U+98df,U+9999","diff":0,"charsSize":248},{"name":"3.woff2","size":67936,"chars":"U+2014,U+2e3a-2e3b,U+3001-3002,U+3008-3011,U+3014-3017,U+4e00,U+4e09-4e0b,U+4e0d,U+4e16,U+4e2d,U+4e3b,U+4e4b,U+4e5f,U+4e8b-4e8c,U+4e94,U+4e9b,U+4ea4,U+4eac,U+4eba,U+4eca,U+4ed6,U+4ee3,U+4ee5,U+4ef6,U+4efb,U+4f01,U+4f46,U+4f4d,U+4f55,U+4f5c,U+4f7f,U+4f9b,U+4fdd,U+4fe1,U+503c,U+505a,U+5143,U+5148-5149,U+5165,U+5168,U+516c,U+5171,U+5176-5177,U+518d,U+5206,U+5217,U+5229,U+5230,U+524d,U+526f,U+529b,U+529f-52a0,U+5305,U+5316-5317,U+5341,U+5357,U+5382,U+539f,U+53bb,U+53c8,U+53ca,U+53cd,U+53d6-53d7,U+53e3,U+53ef-53f0,U+53f8,U+5404,U+540d,U+5411,U+544a,U+548c,U+54c1,U+5546,U+56db,U+56e0,U+571f,U+5728,U+5730,U+578b,U+57ce,U+57fa,U+5883,U+589e,U+5916,U+591a,U+5927,U+5929,U+5973,U+5979,U+597d,U+5982,U+59d4,U+5b50,U+5b89,U+5b8c,U+5b9a,U+5c0f,U+5c11,U+5c31,U+5c55,U+5c71,U+5dde,U+5de5,U+5df1-5df2,U+5e02,U+5e38,U+5e73-5e74,U+5e9c,U+5ea6,U+5efa,U+5f0f,U+5f15,U+5f62,U+5f71,U+5f88,U+5f8b,U+5f97,U+5fb7,U+5fc3,U+5fc5,U+5feb,U+601d,U+6027,U+60c5,U+60f3,U+610f,U+611f,U+6210-6211,U+6216,U+6240,U+624b,U+6253,U+6279,U+6280,U+628a,U+6295,U+62c9,U+6301,U+6307,U+63a5,U+63a8,U+63d0,U+652f,U+6536,U+6539,U+653e-653f,U+6548,U+6574,U+6587,U+6599,U+65af-65b0,U+65b9,U+65bd,U+65cf,U+65e5,U+660e,U+6613,U+662f,U+66f4,U+6700,U+6708-6709,U+670d,U+671b,U+671f,U+672c,U+674e,U+6751,U+6797,U+6839,U+683c,U+6848,U+6b21,U+6b3e,U+6b63-6b65,U+6bcf,U+6bd4,U+6c11,U+6c34,U+6c42,U+6c5f,U+6cb3,U+6cbb,U+6cd5,U+6d3b,U+6d41,U+6d77,U+6d88,U+6df1,U+6e05,U+6e2f,U+6e90,U+7136,U+7269,U+7279,U+7387,U+738b,U+7406,U+751f,U+7528,U+7531,U+754c,U+767e,U+7684,U+76ca,U+76ee,U+76f4,U+76f8,U+770b,U+77e5,U+7814,U+793e,U+795e,U+79d1,U+7a0b,U+7a76,U+7acb,U+7b2c,U+7b49,U+7b56,U+7ba1,U+7cbe,U+7cfb,U+7f8e,U+8001,U+8005,U+800c,U+80a1,U+80b2,U+80fd,U+81ea,U+81f3,U+8272,U+82b1,U+884c,U+88ab,U+897f,U+8981,U+89e3,U+8d70,U+8d77,U+8def,U+8eab,U+8fd1,U+901a,U+901f-9020,U+9053,U+90a3,U+90e8,U+90fd,U+91c7,U+91cd,U+91cf,U+91d1,U+9662,U+96c6,U+9700,U+9752,U+975e,U+9762,U+9769,U+9996,U+9ad8,U+fe10-fe19,U+fe30-fe31,U+fe33-fe44","diff":0,"charsSize":324},{"name":"0.woff2","size":55992,"chars":"U+2,U+20-7e,U+a0-24f,U+251,U+254,U+259-25b,U+28c,U+300-302,U+304,U+306,U+30a-30d,U+358,U+1e3e-1e3f,U+1e72-1e73,U+1e90-1e91,U+203c,U+2049,U+2100,U+2105,U+2116,U+2121,U+213b,U+3004,U+3371,U+3385-3389,U+338d-3390,U+3396-3398,U+339b-33a6,U+33b0-33b3,U+33c2,U+33c4,U+33c8,U+33cb-33cd,U+33d4,U+33d7-33d8,U+33da,U+ff0f,U+ff12-ff13,U+ff22,U+ff27-ff28,U+ff2b,U+ff2d-ff2e,U+ff30,U+ff32,U+ff41-ff43,U+ff45,U+ff47-ff49,U+ff4b,U+ff4d-ff50,U+ff53,U+ff5a,U+ffffd","diff":0,"charsSize":623},{"name":"1.woff2","size":16476,"chars":"U+370-377,U+37a-37f,U+384-38a,U+38c,U+38e-3a1,U+3a3-3e1,U+3f0-3ff,U+1f00-1f15,U+1f18-1f1d,U+1f20-1f45,U+1f48-1f4d,U+1f50-1f57,U+1f59,U+1f5b,U+1f5d,U+1f5f-1f7d,U+1f80-1fb4,U+1fb6-1fc4,U+1fc6-1fd3,U+1fd6-1fdb,U+1fdd-1fef,U+1ff2-1ff4,U+1ff6-1ffe","diff":0,"charsSize":354},{"name":"2.woff2","size":27392,"chars":"U+400-52f,U+2de0-2dff,U+a640-a69d,U+a69f","diff":0,"charsSize":431}],"record":[{"name":"LoadFile","start":60.554198,"end":89.910347},{"name":"transferFontType","start":90.214086,"end":93.301686},{"name":"loadHarbuzz","start":93.638757,"end":109.063828},{"name":"initOpentype","start":109.521294,"end":109.920752},{"name":"createImage","start":110.146084,"end":110.242645},{"name":"getBasicMessage","start":110.384701,"end":110.93973},{"name":"PreSubset","start":111.072208,"end":349.968552},{"name":"subsetFont","start":350.223549,"end":22912.917818},{"name":"outputCSS","start":22913.061146,"end":22915.068164},{"name":"outputHTML","start":22915.224587,"end":22916.489504}],"version":"6.0.3","env":{"envName":"node","runtime":{"name":"javascript","version":"24.14.0"},"os":{"name":"linux","version":"#17~24.04.1-Ubuntu SMP Mon Dec 1 20:10:50 UTC 2025","release":"6.14.0-1017-azure"},"device":{"cpus":4,"locale":"C","architecture":"x64"},"createdTime":"Mon, 23 Mar 2026 01:38:19 GMT"},"bundleMessage":{"originLength":25673994,"ttfLength":25673994,"originSize":47449,"bundledSize":47457,"bundledTotalLength":13141180},"css":{"family":"LXGW WenKai Screen","style":"normal","weight":400,"display":"swap"}} \ No newline at end of file diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/result.css b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/result.css new file mode 100644 index 00000000..db6d17b1 --- /dev/null +++ b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/result.css @@ -0,0 +1,264 @@ +/* Generated By cn-font-split@6.0.3 https://www.npmjs.com/package/cn-font-split +CreateTime: Mon, 23 Mar 2026 01:38:19 GMT; +Origin File Name Table: +copyright: Copyright 2021-2024 LXGW (https://github.com/lxgw/LxgwWenKai-Screen) +Copyright 2020 The Klee Project Authors (https://github.com/fontworks-fonts/Klee) +fontFamily: LXGW WenKai Screen +fontSubfamily: Regular +uniqueID: LXGW WenKai Screen:Version 1.522 +fullName: LXGW WenKai Screen +version: Version 1.522;March 19,2026 +postScriptName: LXGWWenKaiScreen +manufacturer: LXGW / Fontworks Inc. +designer: LXGW / Fontworks Inc. +manufacturerURL: https://github.com/lxgw +designerURL: https://github.com/lxgw +license: This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is available with a FAQ at: https://scripts.sil.org/OFL +licenseURL: https://scripts.sil.org/OFL +sampleText: + */ + +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./242.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+310-357,U+359-36f,U+1e9d-1eff,U+2000-2013,U+2015-2027,U+202f-203b,U+203d-2048,U+204a-205f,U+2070-2071,U+2074-208e,U+2090-209c,U+20a0-20c1,U+20db-20de,U+20e8,U+20f0,U+2101,U+2103,U+2106,U+2109-210a,U+210e-210f,U+2113,U+2117,U+211e-2120,U+2122-2123,U+2125-2127,U+2129-212b,U+212e,U+2132,U+2135,U+2141-2144,U+214b,U+214d-218b,U+2190-2199,U+21b6-21b9,U+21c4-21c6,U+21cb-21d0,U+21d2,U+21d4,U+21e6-21ea,U+21f5,U+2200-220d,U+220f,U+2211-2213,U+2215-2216,U+2219-2220,U+2223-2230,U+2234-2237,U+223c-223e,U+2242-2243,U+2245,U+2248,U+224b-224c,U+2251-2253,U+225c,U+2260-2262,U+2264-226b,U+226e-226f,U+2272-2273,U+2276-2277,U+2282-228b,U+2295-2299,U+229c-229e,U+22a0,U+22a2-22a5,U+22bf-22c5,U+22da-22db,U+22ee-22f1,U+2300,U+2302-2303,U+2305-2307,U+2312,U+2318,U+2325-2326,U+2329-232c,U+2373-237b,U+2387,U+238b,U+2393,U+239b-23ad,U+23b0-23b1,U+23be-23cc,U+23ce,U+23da-23db,U+23e3,U+23e8,U+23fb-23fe,U+2400-2426,U+2460-24cb,U+16fe2-16fe3,U+16ff2;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./243.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+24cc-25ab,U+25b1-25b3,U+25b6-25b7,U+25bc-25bd,U+25c0-25c1,U+25c6-25c7,U+25c9-25cc,U+25ce-25d3,U+25e2-25e6,U+25ef,U+25fb-25fc,U+2600-2603,U+2605-2606,U+2609,U+260e-2612,U+2616-2617,U+261c-261f,U+262f-2637,U+2640-2642,U+2660-266f,U+2672-267d,U+2686-268f,U+26a0,U+26aa-26ab,U+26bd-26be,U+26cb,U+26e4-26e7,U+2702,U+16ff3;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./240.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+27f-280,U+f98e-fa42;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./241.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+281-28b,U+28d-2ff,U+303,U+305,U+307-309,U+30e-30f,U+1ab0-1abe,U+1d00-1df5,U+1dfc-1e3d,U+1e40-1e71,U+1e74-1e8f,U+1e92-1e9c,U+203c,U+2049,U+213b,U+3004,U+3386,U+33c8,U+fa43-fa6d,U+fa7f,U+fad4,U+fb00-fb06,U+fe20-fe2d,U+fe32,U+fe45-fe52,U+fe54-fe66,U+fe68-fe6b,U+ff01-ff0e,U+ff10-ff11,U+ff14-ff26,U+ff29-ff2a,U+ff2c-ff2d,U+ff2f,U+ff31,U+ff33-ff40,U+ff44,U+ff46,U+ff4a,U+ff4c,U+ff51-ff52,U+ff54-ff59,U+ff5b-ff9f,U+ffa1-ffbe,U+ffc2-ffc7,U+ffca-ffcf,U+ffd2-ffd7,U+ffda-ffdc,U+ffe0-ffe6,U+ffe8-ffee,U+fffc-fffd,U+107a5,U+11fb0;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./239.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+250,U+252-253,U+255-258,U+25c-27e,U+d78d-d78f,U+d791-d797,U+d79a,U+d79c,U+d79e-d7a3,U+e003,U+e500-e507,U+ee01-ee02,U+f061,U+f6c3,U+f900-f98d;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./238.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+d68a-d68b,U+d68e-d68f,U+d691-d693,U+d695-d69e,U+d6a0,U+d6a2-d6a7,U+d6a9-d6c3,U+d6c6-d6c7,U+d6c9-d6cb,U+d6cd-d6d0,U+d6d2-d6d3,U+d6d5-d6d6,U+d6d8,U+d6da-d6df,U+d6e1-d6e3,U+d6e5-d6e7,U+d6e9-d6ef,U+d6f1-d6fb,U+d6fe-d6ff,U+d701-d703,U+d705-d710,U+d712-d717,U+d71a-d71b,U+d71d-d71f,U+d721-d727,U+d72a,U+d72c-d733,U+d735-d737,U+d739-d73b,U+d73d-d743,U+d745-d748,U+d74a-d74f,U+d752-d753,U+d755-d756,U+d75a-d75f,U+d762-d764,U+d766-d768,U+d76a-d76b,U+d76d-d76f,U+d771-d773,U+d775-d77b,U+d77e-d787,U+d78a-d78b;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./237.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+d599-d5a4,U+d5a6-d5c7,U+d5ca-d5cb,U+d5cd-d5cf,U+d5d1-d5d7,U+d5da,U+d5dc,U+d5de-d5e3,U+d5e6-d5e7,U+d5e9-d5eb,U+d5ed-d5f3,U+d5f6,U+d5f8,U+d5fa-d5ff,U+d602-d603,U+d605-d607,U+d609-d60f,U+d612,U+d616-d61b,U+d61d-d637,U+d63a-d63b,U+d63d-d63f,U+d641-d647,U+d64a,U+d64c,U+d64e-d650,U+d652-d653,U+d656-d657,U+d659-d65b,U+d65d-d666,U+d668,U+d66a-d66f,U+d672-d682,U+d684-d689;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./236.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+d49e-d4a8,U+d4aa-d4cb,U+d4cd-d4cf,U+d4d1-d4e7,U+d4e9-d4ef,U+d4f1-d4f7,U+d4f9-d4fc,U+d4fe-d503,U+d505-d507,U+d509-d50b,U+d50d-d513,U+d516-d53b,U+d53e-d53f,U+d541-d543,U+d545-d54b,U+d54e,U+d550,U+d552-d557,U+d55a-d55b,U+d55d-d55f,U+d561-d564,U+d566-d567,U+d56a,U+d56c,U+d56e-d573,U+d576-d577,U+d579-d57b,U+d57d-d583,U+d586,U+d58a-d58f,U+d591-d598;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./235.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+d3ba-d3bb,U+d3bd-d3c3,U+d3c6-d3c7,U+d3ca-d3cf,U+d3d1-d3eb,U+d3ee-d3ef,U+d3f1-d3f3,U+d3f5-d3fb,U+d3fd-d3fe,U+d400,U+d402-d407,U+d409-d43f,U+d441-d443,U+d445-d45b,U+d45d-d45f,U+d461-d46e,U+d470-d477,U+d47a-d47b,U+d47d-d47f,U+d481,U+d483-d487,U+d489-d48a,U+d48c,U+d48e-d493,U+d495-d49d;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./234.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+d29e-d2a3,U+d2a5-d2ab,U+d2ad-d2b0,U+d2b2-d2b7,U+d2ba-d2bb,U+d2bd-d2be,U+d2c1,U+d2c3-d2c7,U+d2ca,U+d2cc-d2d3,U+d2d5-d2d7,U+d2d9-d2ef,U+d2f2-d2f3,U+d2f5-d2f7,U+d2f9-d2ff,U+d302-d304,U+d306-d30b,U+d30f,U+d311-d313,U+d315,U+d317-d31b,U+d31e,U+d322-d324,U+d326-d327,U+d32a-d32b,U+d32d-d32f,U+d331-d337,U+d33a,U+d33e-d343,U+d346-d37b,U+d37e-d37f,U+d381-d383,U+d385-d38b,U+d38d-d38e,U+d392-d397,U+d39a-d39b,U+d39d-d39f,U+d3a1-d3a7,U+d3aa,U+d3ac,U+d3ae-d3b3,U+d3b5-d3b7,U+d3b9;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./232.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+d092-d0a3,U+d0a6-d0a7,U+d0a9-d0ab,U+d0ad-d0b3,U+d0b6,U+d0b8,U+d0ba-d0bf,U+d0c2-d0c3,U+d0c5-d0c7,U+d0ca-d0cf,U+d0d2,U+d0d6-d0db,U+d0de-d0df,U+d0e1-d0e3,U+d0e5-d0eb,U+d0ee,U+d0f0,U+d0f2-d0f7,U+d0f9-d12f,U+d132-d133,U+d135-d137,U+d139-d13f,U+d142,U+d146-d14b,U+d14e-d14f,U+d151-d153,U+d155-d15b,U+d15e,U+d160,U+d162-d167,U+d169-d16b,U+d16d-d17b,U+d17d-d183,U+d185-d187,U+d189-d19f,U+d1a2-d1a3,U+d1a5-d1a7,U+d1a9-d1ac;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./233.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+d1ad-d1af,U+d1b2,U+d1b4,U+d1b6-d1b9,U+d1bb,U+d1bd-d1d7,U+d1d9-d1f3,U+d1f5-d206,U+d208-d20f,U+d211-d22b,U+d22e-d22f,U+d231-d233,U+d235-d23b,U+d23d-d23e,U+d240,U+d242-d247,U+d249-d25b,U+d25d-d263,U+d265-d27f,U+d281-d283,U+d285-d287,U+d289-d294,U+d296-d29b,U+d29d;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./230.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+ce7d-ce83,U+ce86,U+ce88,U+ce8a-ce8f,U+ce92-ce93,U+ce95-ce97,U+ce99-ce9f,U+cea2,U+cea6-ceab,U+cead-cee3,U+cee6-cee7,U+cee9-ceea,U+ceed-cef3,U+cef6,U+cefa-ceff,U+cf02-cf03,U+cf05-cf07,U+cf09-cf0f,U+cf12,U+cf14,U+cf16-cf1b,U+cf1d-cf1f,U+cf21-cf23,U+cf25-cf2b,U+cf2e,U+cf31-cf37,U+cf39-cf53,U+cf56-cf57,U+cf59-cf5b,U+cf5d-cf63,U+cf66,U+cf68,U+cf6a-cf6f,U+cf72-cf73,U+cf75-cf77,U+cf79-cf84,U+cf86-cf8b,U+cf8d-cf90;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./231.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+cf91-cfa0,U+cfa2-cfa7,U+cfa9-cfaf,U+cfb1-cfc3,U+cfc5-cfdf,U+cfe2-cfe3,U+cfe5-cfe7,U+cfe9-cfef,U+cff2,U+cff4,U+cff6-cffb,U+cffd-cfff,U+d001-d003,U+d005-d010,U+d012-d017,U+d019-d02c,U+d02e-d033,U+d036-d037,U+d039-d03b,U+d03d-d043,U+d045-d046,U+d048-d04f,U+d051-d057,U+d059-d05f,U+d061-d06b,U+d06e-d06f,U+d071-d073,U+d075-d07b,U+d07e-d080,U+d082-d091;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./229.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+cd85-cd93,U+cd96-cd97,U+cd99-cd9b,U+cd9d-cda3,U+cda6,U+cda8,U+cdaa-cdaf,U+cdb1-cdc3,U+cdc5-cdcb,U+cdcd-cde7,U+cde9-cdf8,U+cdfa,U+cdfc-ce03,U+ce05-ce0b,U+ce0d-ce18,U+ce1a-ce1f,U+ce22-ce23,U+ce25-ce27,U+ce29-ce2f,U+ce31-ce34,U+ce36-ce57,U+ce5a-ce5b,U+ce5d-ce5f,U+ce62-ce67,U+ce6a,U+ce6c,U+ce6e-ce73,U+ce76-ce77,U+ce79-ce7b;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./228.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+cc9f,U+cca1-cca7,U+ccaa,U+ccae-ccb3,U+ccb6-ccb7,U+ccb9-ccbb,U+ccbd-ccc3,U+ccc5-ccc6,U+ccc8,U+ccca-cccf,U+ccd1-ccd3,U+ccd5-cce3,U+cce5-cceb,U+cced-cd07,U+cd0a-cd0b,U+cd0d-cd0f,U+cd11-cd17,U+cd19-cd1a,U+cd1c,U+cd1e-cd23,U+cd25-cd27,U+cd29-cd2b,U+cd2d-cd5b,U+cd5d-cd63,U+cd65-cd77,U+cd79-cd84;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./226.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+cb04-cb0f,U+cb11-cb13,U+cb15-cb17,U+cb19-cb1f,U+cb21-cb40,U+cb42-cb47,U+cb4a-cb4b,U+cb4d-cb4f,U+cb51-cb57,U+cb5a-cb5c,U+cb5e-cb63,U+cb65-cbb5;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./227.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+cbb6-cbb7,U+cbb9-cbd3,U+cbd5-cbe3,U+cbe5-cbe6,U+cbe8-cc0b,U+cc0e-cc0f,U+cc11-cc13,U+cc15-cc1b,U+cc1e-cc20,U+cc23-cc26,U+cc2a-cc2b,U+cc2d,U+cc2f,U+cc31-cc37,U+cc3a,U+cc3f-cc43,U+cc46-cc47,U+cc49-cc4b,U+cc4d-cc53,U+cc56,U+cc5a-cc5f,U+cc61-cc63,U+cc65-cc67,U+cc69-cc74,U+cc76-cc97,U+cc9a-cc9b,U+cc9d-cc9e;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./225.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+ca48-ca4b,U+ca4e-ca4f,U+ca51-ca53,U+ca55-ca5b,U+ca5e-ca60,U+ca62-ca67,U+ca69-ca83,U+ca85-ca97,U+ca99-cabb,U+cabe-cabf,U+cac1-cac3,U+cac5-cace,U+cad0,U+cad2,U+cad4-cad7,U+cada-cb03;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./223.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+c84f-c853,U+c855-c86f,U+c872-c873,U+c875-c877,U+c879-c87f,U+c882,U+c884,U+c888-c88a,U+c88d-c89e,U+c8a0,U+c8a2-c8a7,U+c8a9-c8bc,U+c8be-c8c3,U+c8c5-c8c7,U+c8c9-c8cb,U+c8cd-c8d3,U+c8d5-c8df,U+c8e1-c8e3,U+c8e5-c8f4,U+c8f6-c8fb,U+c8fe-c8ff,U+c901-c903,U+c905-c90b,U+c90e,U+c910,U+c912-c917,U+c919-c92b,U+c92d-c933,U+c935-c947;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./222.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+c6fb-c703,U+c706-c707,U+c709-c70b,U+c70d-c713,U+c716,U+c718,U+c71a-c71f,U+c722-c723,U+c725-c727,U+c729-c72f,U+c732,U+c734,U+c736,U+c738-c73b,U+c73e-c73f,U+c741-c743,U+c745-c749,U+c74b,U+c74e,U+c750,U+c759-c75b,U+c75d-c75f,U+c761-c767,U+c769-c773,U+c776-c777,U+c779-c77b,U+c77e-c782,U+c786,U+c78b-c78d,U+c78f,U+c792-c793,U+c795,U+c799-c79f,U+c7a2,U+c7a7-c7ab,U+c7ae-c7af,U+c7b1-c7b3,U+c7b5-c7bb,U+c7be,U+c7c2-c7c7,U+c7c9-c7cb,U+c7cd,U+c7cf-c7dc,U+c7de-c7e3,U+c7e5-c7e7,U+c7e9-c7ff,U+c802-c803,U+c805-c807,U+c809,U+c80b-c80f,U+c812,U+c814,U+c817-c81b,U+c81e-c81f,U+c821-c823,U+c825-c82b,U+c82d-c82e,U+c830,U+c832-c837,U+c839-c83b,U+c83d-c83f,U+c841-c847,U+c849-c84b,U+c84e;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./224.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+c948-c94f,U+c952-c953,U+c955-c957,U+c959-c95f,U+c961-c96b,U+c96d-c96f,U+c971-c973,U+c975-c97b,U+c97d-c987,U+c98a-c98b,U+c98d-c98f,U+c991-c997,U+c99a-c99c,U+c99e-c9bf,U+c9c2-c9c3,U+c9c5-c9c6,U+c9c9,U+c9cb-c9cf,U+c9d2,U+c9d4,U+c9d7-c9d8,U+c9db,U+c9de-c9df,U+c9e1,U+c9e3,U+c9e5-c9e6,U+c9e8-c9eb,U+c9ee,U+c9f2-c9f7,U+c9fa-c9fb,U+c9fd-ca07,U+ca0a,U+ca0e-ca13,U+ca15-ca47;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./221.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+c5a7-c5b3,U+c5b6-c5b7,U+c5ba,U+c5be-c5c3,U+c5cb,U+c5cd,U+c5cf,U+c5d2-c5d3,U+c5d5-c5d7,U+c5d9-c5df,U+c5e2,U+c5e4,U+c5e6-c5eb,U+c5ef,U+c5f1-c5f3,U+c5f5,U+c5f8-c5fb,U+c602-c604,U+c609-c60b,U+c60d-c60f,U+c611-c617,U+c619-c61a,U+c61d-c623,U+c626-c627,U+c629-c62b,U+c62f,U+c631-c632,U+c636,U+c638,U+c63a,U+c63c-c63f,U+c642-c643,U+c645-c647,U+c649-c652,U+c656-c65b,U+c65e-c65f,U+c661-c66b,U+c66d-c670,U+c672-c677,U+c67a-c67b,U+c67d-c67f,U+c681-c687,U+c689-c693,U+c696-c697,U+c699-c69b,U+c69d-c6a3,U+c6a6,U+c6a8,U+c6aa-c6af,U+c6b2-c6b3,U+c6b5-c6b7,U+c6b9-c6bf,U+c6c2,U+c6c4,U+c6c6-c6cb,U+c6ce-c6cf,U+c6d1-c6d3,U+c6d5-c6db,U+c6de-c6df,U+c6e2-c6e7,U+c6ea-c6eb,U+c6ed-c6ef,U+c6f1-c6f8,U+c6fa;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./220.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+c490-c49b,U+c49d-c4b7,U+c4b9-c4bb,U+c4bd-c4e8,U+c4ea-c4ef,U+c4f2-c4f3,U+c4f5-c4f7,U+c4f9-c4fe,U+c502-c50b,U+c50d-c527,U+c52a-c52b,U+c52d-c52f,U+c531-c537,U+c53a,U+c53c,U+c53e-c543,U+c546-c547,U+c54b,U+c54d,U+c54f-c552,U+c556,U+c55a-c55c,U+c55f,U+c562-c563,U+c565-c567,U+c569-c56f,U+c572,U+c576-c57b,U+c57e-c57f,U+c581-c583,U+c585-c586,U+c588-c58b,U+c58e,U+c590,U+c592-c594,U+c596,U+c599-c59b,U+c59d-c5a6;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./219.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+c3b4-c3bf,U+c3c1-c3d7,U+c3da-c3db,U+c3dd-c3de,U+c3e1-c3e8,U+c3ea-c3ec,U+c3ee-c3f3,U+c3f5-c40f,U+c411-c42b,U+c42d-c42f,U+c431-c43b,U+c43d-c447,U+c449-c463,U+c466-c467,U+c469-c46b,U+c46d-c473,U+c475-c478,U+c47a-c47f,U+c481-c48f;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./218.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+c2a0-c2a3,U+c2a6-c2a7,U+c2a9-c2ab,U+c2ae-c2b3,U+c2b6,U+c2b8,U+c2ba-c2db,U+c2de-c2df,U+c2e1-c2e2,U+c2e5-c2ea,U+c2ee,U+c2f0,U+c2f2-c2f5,U+c2f7,U+c2fa,U+c2fd-c2ff,U+c301-c307,U+c30a-c30b,U+c30e-c312,U+c316-c317,U+c319-c31b,U+c31d-c323,U+c325-c328,U+c32a-c344,U+c346-c367,U+c36a-c36b,U+c36d-c36f,U+c371-c378,U+c37a-c37b,U+c37e-c383,U+c385-c387,U+c389-c38b,U+c38d-c3b3;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./216.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+c041-c057,U+c059-c05b,U+c05d-c05f,U+c061-c067,U+c06a-c08f,U+c092-c093,U+c095-c0a2,U+c0a4,U+c0a6-c0ab,U+c0ae,U+c0b1-c0b3,U+c0b7-c0bb,U+c0be,U+c0c2-c0c4,U+c0c6-c0c7,U+c0ca-c0cb,U+c0cd-c0cf,U+c0d1-c0d7,U+c0da,U+c0de-c0e3,U+c0e6-c0e7,U+c0e9-c0eb,U+c0ed-c0f3,U+c0f6,U+c0f8,U+c0fa-c0ff,U+c101-c11b,U+c11f,U+c121-c122,U+c125,U+c128-c12b,U+c12e,U+c132-c135,U+c137,U+c13a-c13b,U+c13d-c13f,U+c141-c147,U+c14a,U+c14e-c153,U+c155-c157,U+c159-c15b,U+c15d-c163,U+c165-c166,U+c16a-c16f,U+c171-c173,U+c175-c177,U+c179-c17b;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./217.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+c17c-c18b,U+c18f,U+c191-c193,U+c195-c19b,U+c19e,U+c1a0,U+c1a2-c1a4,U+c1a6-c1a7,U+c1a9-c1ab,U+c1ad-c1bc,U+c1be-c1c3,U+c1c5-c1df,U+c1e1-c1e3,U+c1e5-c1f2,U+c1f4-c1fb,U+c1fe-c1ff,U+c201-c203,U+c205-c20b,U+c20e,U+c210,U+c212-c217,U+c21a-c21b,U+c21d-c21e,U+c221-c227,U+c22a,U+c22c,U+c22e,U+c230,U+c233,U+c235-c247,U+c249-c24f,U+c251-c253,U+c255-c257,U+c259-c25f,U+c261-c264,U+c266-c26b,U+c26d-c26f,U+c271-c273,U+c275-c27b,U+c27e,U+c280,U+c282-c287,U+c289-c28f,U+c291-c297,U+c299-c29a,U+c29c,U+c29e-c29f;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./215.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+bf72-bfaf,U+bfb1-bfc4,U+bfc6-bfcb,U+bfce-bfcf,U+bfd1-bfd3,U+bfd5-bfdb,U+bfdd-c03b,U+c03d-c040;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./214.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+be8b,U+be8d-be8e,U+be92-be97,U+be99-bea7,U+bea9-becf,U+bed2-bed3,U+bed5-bed6,U+bed9-bedf,U+bee1-bee2,U+bee6-beeb,U+beed-bf00,U+bf02-bf07,U+bf0a-bf17,U+bf19-bf1a,U+bf1c,U+bf1e-bf3f,U+bf41-bf43,U+bf45-bf4f,U+bf52-bf54,U+bf56-bf71;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./212.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+bc2b-bc2c,U+bc2e-bc2f,U+bc32-bc33,U+bc35-bc37,U+bc39-bc3f,U+bc42,U+bc46-bc48,U+bc4a-bc4b,U+bc4e-bc4f,U+bc51-bc5c,U+bc5e-bc83,U+bc86-bc87,U+bc89-bc8a,U+bc8d-bc93,U+bc96,U+bc98,U+bc9b-bc9f,U+bca2-bca3,U+bca5-bca6,U+bca9-bcaf,U+bcb2,U+bcb6-bcbb,U+bcbe-bcbf,U+bcc1-bcc3,U+bcc5-bccc,U+bcce,U+bcd2-bcd4,U+bcd6-bcd7,U+bcd9-bcf3,U+bcf7,U+bcf9-bcfb,U+bcfd-bd03,U+bd06,U+bd08,U+bd0a-bd0f,U+bd11-bd23,U+bd25-bd2b,U+bd2d-bd3f,U+bd41-bd47,U+bd49-bd4b,U+bd4d-bd4f,U+bd51-bd57;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./213.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+bd5a-bd63,U+bd65-bd67,U+bd69-bd7f,U+bd82-bd83,U+bd85-bd86,U+bd8a-bd8f,U+bd92,U+bd94,U+bd96-bd98,U+bd9a-bd9b,U+bd9d-bdb7,U+bdb9-bdd3,U+bdd5-bddb,U+bddd-bdef,U+bdf1-bdf3,U+bdf5-bdf7,U+bdf9-bdff,U+be01-be0b,U+be0e-be0f,U+be11-be13,U+be15-be43,U+be46-be47,U+be49-be4b,U+be4d,U+be4f-be53,U+be56,U+be58,U+be5c-be5f,U+be62-be63,U+be65-be67,U+be69,U+be6b-be6f,U+be71-be72,U+be76-be7a,U+be7e-be7f,U+be81-be83,U+be85-be8a;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./211.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+baef-bafb,U+bafd-bb03,U+bb05-bb0e,U+bb10-bb17,U+bb19-bb1b,U+bb1d-bb33,U+bb37,U+bb39-bb3a,U+bb3e-bb43,U+bb46,U+bb48,U+bb4a-bb4c,U+bb4e,U+bb51-bb53,U+bb55-bb57,U+bb59-bb60,U+bb62,U+bb64-bb87,U+bb89-bb8b,U+bb8d-bb8f,U+bb91-bba3,U+bba5-bba7,U+bba9-bbab,U+bbad-bbb3,U+bbb5-bbbf,U+bbc1-bbc3,U+bbc5-bbc7,U+bbc9-bbcf,U+bbd1-bbd2,U+bbd4-bbf7,U+bbfa-bbfb,U+bbfd-bbfe,U+bc01-bc07,U+bc0a,U+bc0e,U+bc10,U+bc12-bc13,U+bc17,U+bc19-bc1a,U+bc1e,U+bc20-bc23,U+bc26,U+bc28,U+bc2a;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./210.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+b9b1-b9b3,U+b9b5-b9bb,U+b9be,U+b9c0,U+b9c2-b9c7,U+b9ca-b9cb,U+b9cd,U+b9d2-b9d7,U+b9da,U+b9dc,U+b9df-b9e0,U+b9e2,U+b9e6-b9e7,U+b9e9-b9eb,U+b9ed-b9f3,U+b9f6,U+b9fb-b9ff,U+ba01-ba07,U+ba09-ba14,U+ba16-ba37,U+ba3a-ba3b,U+ba3d-ba3f,U+ba41-ba47,U+ba4a,U+ba4c,U+ba4f-ba52,U+ba56-ba57,U+ba59-ba5b,U+ba5d-ba63,U+ba66,U+ba6a-ba6f,U+ba72-ba73,U+ba75-ba77,U+ba79-ba82,U+ba86,U+ba88-ba8b,U+ba8d-baa7,U+baaa,U+baad-baaf,U+bab1-bab7,U+baba,U+babc,U+babe-bac3,U+bac5-baee;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./209.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+b890-b8af,U+b8b1-b8b3,U+b8b5-b8b7,U+b8b9-b8bf,U+b8c1-b8cb,U+b8cd-b8cf,U+b8d1-b8d3,U+b8d5-b8e0,U+b8e2-b8e7,U+b8ea-b8eb,U+b8ed-b8ef,U+b8f1-b8f7,U+b8fa,U+b8fc,U+b8fe-b903,U+b905-b917,U+b919-b93b,U+b93e-b93f,U+b941-b943,U+b945-b957,U+b95a-b95b,U+b95d-b95f,U+b961-b967,U+b969-b96c,U+b96e-b973,U+b976-b977,U+b979-b97b,U+b97d-b983,U+b986,U+b988,U+b98a-b98d,U+b98f-b9ab,U+b9ae-b9af;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./207.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+b66d-b69b,U+b69e-b6a3,U+b6a5-b6aa,U+b6ac-b6b0,U+b6b2-b6ef,U+b6f1-b6f3,U+b6f5-b6f7,U+b6f9-b6ff,U+b702-b727,U+b72a-b72b,U+b72d-b72e,U+b731-b737,U+b73a,U+b73c-b743,U+b745-b747,U+b749-b74b,U+b74d-b750;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./208.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+b751-b753,U+b756-b75f,U+b761-b763,U+b765-b767,U+b769-b76f,U+b771-b774,U+b776-b77b,U+b77e-b77f,U+b781-b783,U+b785-b78b,U+b78e,U+b793-b795,U+b79a-b79b,U+b79d-b79f,U+b7a1-b7a7,U+b7aa,U+b7ae-b7b3,U+b7b6-b7b7,U+b7b9-b7c6,U+b7c8,U+b7ca-b7eb,U+b7ee-b7ef,U+b7f1-b7f3,U+b7f5-b7fb,U+b7fe,U+b802-b806,U+b80a-b80b,U+b80d-b80f,U+b811-b817,U+b81a,U+b81c,U+b81e-b823,U+b826-b827,U+b829-b82b,U+b82d-b833,U+b836,U+b83a-b83f,U+b841-b843,U+b845-b850,U+b852-b85b,U+b85e-b85f,U+b861-b863,U+b865-b86b,U+b86e,U+b870,U+b872-b877,U+b879-b87b,U+b87d-b88f;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./206.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+b58d-b59f,U+b5a2-b5a3,U+b5a5-b5a7,U+b5a9-b5aa,U+b5ac-b5b2,U+b5b6-b5ba,U+b5bd-b5bf,U+b5c1-b5c3,U+b5c5-b5cb,U+b5cd-b5ce,U+b5d2-b5d7,U+b5d9-b60f,U+b612-b613,U+b615-b617,U+b619-b624,U+b626-b62b,U+b62d-b647,U+b649-b663,U+b665-b66c;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./205.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+b46e-b47f,U+b481-b487,U+b489-b4a3,U+b4a5-b4ab,U+b4ad-b4b6,U+b4b8,U+b4ba-b4bf,U+b4c1-b4c7,U+b4c9-b4cf,U+b4d1-b4db,U+b4de-b4df,U+b4e1-b4e2,U+b4e5,U+b4e7-b4eb,U+b4ee,U+b4f0,U+b4f2-b4f7,U+b4f9-b513,U+b516-b517,U+b519-b51a,U+b51d-b523,U+b526,U+b52b-b52f,U+b532-b533,U+b535-b537,U+b539-b53f,U+b542,U+b546-b54a,U+b54d-b54f,U+b551-b553,U+b555-b55b,U+b55d-b55e,U+b562-b58c;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./204.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+b33d-b353,U+b357,U+b359-b35a,U+b35d-b35e,U+b360-b363,U+b366,U+b368,U+b36a,U+b36c-b36d,U+b36f,U+b372-b373,U+b375-b377,U+b379-b37f,U+b382,U+b384,U+b386-b38b,U+b38d-b38f,U+b391-b393,U+b395-b39f,U+b3a2-b3a7,U+b3a9-b3ab,U+b3ad-b3c3,U+b3c6-b3c7,U+b3c9-b3ca,U+b3cd,U+b3cf,U+b3d1-b3d3,U+b3d6,U+b3d8,U+b3da,U+b3dc,U+b3de-b3df,U+b3e1-b3e3,U+b3e5-b3e7,U+b3e9-b3fb,U+b3fd-b40f,U+b411-b417,U+b419-b41b,U+b41d-b41f,U+b421-b427,U+b42a,U+b42c-b433,U+b435-b44f,U+b452-b453,U+b455-b457,U+b459-b45f,U+b462,U+b464,U+b466-b46b,U+b46d;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./203.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+b1f6-b1fc,U+b1fe-b203,U+b206-b207,U+b209-b20a,U+b20d-b213,U+b216,U+b218,U+b21a-b21f,U+b221-b233,U+b235-b23b,U+b23d-b257,U+b259-b25b,U+b25d-b25f,U+b261-b267,U+b269-b273,U+b275-b27b,U+b27d-b283,U+b285-b288,U+b28a-b28f,U+b292-b293,U+b295-b297,U+b29b-b29f,U+b2a2-b2a4,U+b2a7-b2a9,U+b2ab,U+b2ad-b2c7,U+b2ca-b2cb,U+b2cd-b2cf,U+b2d1-b2d7,U+b2da,U+b2dc,U+b2de-b2e1,U+b2e3,U+b2e7,U+b2e9-b2ea,U+b2f0-b2f2,U+b2f6,U+b2f8,U+b2fc-b2fe,U+b302-b303,U+b305-b307,U+b309-b30f,U+b312,U+b316-b31b,U+b31d-b33c;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./202.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+b0ca-b0cf,U+b0d2-b0d3,U+b0d5-b0d7,U+b0d9-b0df,U+b0e1-b0e4,U+b0e6-b107,U+b10a,U+b10d-b10f,U+b111,U+b114-b117,U+b11a,U+b11e-b122,U+b126-b127,U+b129-b12b,U+b12d-b133,U+b136,U+b13a-b13f,U+b142-b143,U+b145-b147,U+b149-b14f,U+b152-b153,U+b156-b157,U+b159-b15b,U+b15d-b177,U+b17a-b17b,U+b17d-b17f,U+b181,U+b183-b187,U+b18a,U+b18c,U+b18e-b191,U+b195-b197,U+b199-b1a7,U+b1a9-b1cb,U+b1cd-b1cf,U+b1d1-b1d3,U+b1d5-b1db,U+b1dd-b1e7,U+b1ea-b1ef,U+b1f1-b1f5;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./201.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+afb2-afb7,U+afba-afbb,U+afbd-afbf,U+afc1-afc6,U+afca,U+afcc,U+afcf-afd3,U+afd5-afdb,U+afdd-afe7,U+afea-afef,U+aff1-aff3,U+aff5-b003,U+b005-b00b,U+b00d-b00f,U+b011-b013,U+b015-b01b,U+b01d-b027,U+b029-b043,U+b045-b047,U+b049,U+b04b,U+b04d-b052,U+b056,U+b058,U+b05a-b05c,U+b05e-b07b,U+b07e-b07f,U+b081-b083,U+b085-b08b,U+b08e,U+b090,U+b092-b097,U+b09b,U+b09d-b09e,U+b0a2-b0a7,U+b0aa,U+b0b0,U+b0b2,U+b0b6-b0b7,U+b0b9-b0bb,U+b0bd-b0c3,U+b0c6;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./200.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+aec8-aecb,U+aece,U+aed2-aed7,U+aed9-aedb,U+aedd-aeec,U+aeee-aef3,U+aef5-aef7,U+aef9-af06,U+af09-af0c,U+af0e-af0f,U+af11-af2b,U+af2e-af2f,U+af31-af33,U+af35-af3b,U+af3e,U+af40,U+af44-af47,U+af4a-af5c,U+af5e-af63,U+af66-af78,U+af7a-af7f,U+af81-af83,U+af85-af8f,U+af91-af94,U+af96-af9b,U+af9d-afb1;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./199.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+ada7-adbf,U+adc1-adc3,U+adc5-adc7,U+adc9-adcf,U+add1-add2,U+add4-addb,U+addd-addf,U+ade1-ade3,U+ade5-adf7,U+adfa-adfb,U+adfd-adfe,U+ae02-ae07,U+ae0a,U+ae0c,U+ae0e-ae13,U+ae15-ae2f,U+ae32-ae33,U+ae35-ae36,U+ae39-ae3f,U+ae42,U+ae44,U+ae47-ae49,U+ae4b,U+ae4f,U+ae51-ae53,U+ae55-ae5b,U+ae5e,U+ae62-ae64,U+ae66-ae67,U+ae6a-ae6b,U+ae6d-ae6f,U+ae71-ae7a,U+ae7e-ae83,U+ae86-aebb,U+aebf,U+aec1-aec3,U+aec5-aec7;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./197.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+9fb2-9fff,U+a4d0-a4ff,U+a700-a7b5,U+a7f1-a7f4,U+a7f7-a7ff,U+a92e,U+ab30-ab5f,U+ab64-ab65,U+ac02-ac03,U+ac05-ac06,U+ac0a-ac0f,U+ac18,U+ac1e-ac1f,U+ac21-ac23,U+ac25-ac2b,U+ac2e,U+ac32-ac37,U+ac3a-ac3f,U+ac41-ac4a,U+ac4c,U+ac4e-ac53,U+ac55-ac57,U+ac59-ac62;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./198.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+ac63-ac6f,U+ac72-ac73,U+ac75-ac76,U+ac79-ac7f,U+ac82,U+ac87-ac88,U+ac8d-ac8f,U+ac91-ac93,U+ac95-ac9b,U+ac9d-ac9e,U+aca2-aca7,U+acab,U+acad-acae,U+acb1-acb7,U+acba,U+acbe-acc0,U+acc2-acc3,U+acc5-accb,U+accd-acd6,U+acd8-acdf,U+ace2-ace3,U+ace5-ace6,U+ace9,U+aceb,U+aced-acee,U+acf2,U+acf4,U+acf7-acfb,U+acfe-acff,U+ad01-ad03,U+ad05-ad0b,U+ad0d-ad10,U+ad12-ad17,U+ad19-ad1b,U+ad1d-ad2c,U+ad2e-ad33,U+ad36-ad37,U+ad39-ad3b,U+ad3d-ad43,U+ad45-ad46,U+ad48,U+ad4a-ad4f,U+ad51-ad6b,U+ad6e-ad6f,U+ad71-ad72,U+ad77-ad7b,U+ad7e,U+ad80,U+ad83-ad87,U+ad8a-ad8b,U+ad8d-ad8f,U+ad91-ad9b,U+ad9d-ada3,U+ada5-ada6;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./195.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+9e13-9e14,U+9e16-9e19,U+9e1c,U+9e24,U+9e27,U+9e2e,U+9e30,U+9e34,U+9e3b-9e3c,U+9e40,U+9e4d,U+9e50,U+9e52-9e54,U+9e56,U+9e59,U+9e5d,U+9e5f-9e62,U+9e65,U+9e6e-9e6f,U+9e72,U+9e74-9e78,U+9e7b,U+9e80-9e81,U+9e83-9e84,U+9e86,U+9e89-9e8a,U+9e8c-9e91,U+9e94-9e96,U+9e98-9e9c,U+9e9e,U+9ea0-9ea4,U+9ea7-9ea8,U+9eaa-9eb3,U+9eb5-9eb7,U+9eb9-9eba,U+9ebf-9ec2,U+9ec5-9ec8,U+9eca-9ecb,U+9ed0,U+9ed3,U+9ed5-9ed7,U+9ed9-9eda,U+9ee1,U+9ee3-9ee4,U+9ee6,U+9eeb-9eee,U+9ef0-9ef1,U+9ef3,U+9ef5-9ef6,U+9ef8,U+9efa,U+9f00-9f06;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./196.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+9f07-9f08,U+9f0a,U+9f0c,U+9f0f,U+9f11-9f12,U+9f14,U+9f16,U+9f18,U+9f1a-9f1f,U+9f23-9f2b,U+9f2d-9f2e,U+9f30-9f33,U+9f35-9f36,U+9f38,U+9f3a,U+9f3c,U+9f3f-9f43,U+9f45-9f46,U+9f48-9f49,U+9f4c-9f4d,U+9f53,U+9f55-9f58,U+9f5a-9f5b,U+9f5d-9f5e,U+9f62,U+9f64-9f65,U+9f68-9f69,U+9f6b,U+9f6d-9f71,U+9f73-9f75,U+9f78-9f7e,U+9f81-9f82,U+9f8e-9f8f,U+9f91-9f93,U+9f96-9f98,U+9f9d-9f9e,U+9fa1-9fb1;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./193.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+9d01-9d05,U+9d08,U+9d0a-9d14,U+9d16-9d1a,U+9d1c,U+9d1e,U+9d20-9d22,U+9d24-9d25,U+9d27,U+9d29-9d2e,U+9d31-9d3a,U+9d3c-9d3e,U+9d40-9d41,U+9d43-9d50,U+9d54-9d5b,U+9d5e-9d5f,U+9d62-9d69,U+9d6b,U+9d6d-9d6e,U+9d70-9d71,U+9d73-9d86,U+9d88,U+9d8a-9d92,U+9d94-9d97;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./192.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+9c27,U+9c2a-9c2c,U+9c2e-9c30,U+9c34,U+9c36,U+9c38,U+9c3a,U+9c3c-9c3d,U+9c3f-9c44,U+9c46-9c47,U+9c4a-9c51,U+9c53,U+9c55,U+9c59-9c5c,U+9c5e,U+9c60-9c66,U+9c68-9c6c,U+9c6e-9c76,U+9c79,U+9c7b,U+9c7d-9c7e,U+9c80,U+9c83-9c84,U+9c89-9c8a,U+9c8c,U+9c8f,U+9c93,U+9c96-9c99,U+9c9d,U+9caa,U+9cac,U+9caf,U+9cb9,U+9cbe-9cc2,U+9cc8-9cc9,U+9cd1-9cd2,U+9cda-9cdb,U+9ce0-9ce1,U+9ce3-9ce4,U+9ce6,U+9ce8,U+9cea-9cf2,U+9cf5,U+9cf7-9d00;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./194.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+9d99,U+9d9b-9da4,U+9da6-9da8,U+9daa-9dae,U+9db0-9db3,U+9db5-9dba,U+9dbd-9dbf,U+9dc1,U+9dc3-9dd2,U+9dd4-9dd6,U+9dd8,U+9ddb-9de4,U+9de7-9dee,U+9df0-9df1,U+9df4-9df7,U+9dfb-9e0b,U+9e0d-9e12;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./190.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+9ae2-9ae5,U+9ae7-9aea,U+9aec,U+9aee,U+9af0-9af8,U+9afa,U+9afc-9b02,U+9b04-9b05,U+9b07,U+9b09-9b0e,U+9b10-9b12,U+9b14-9b1e,U+9b20-9b21,U+9b24,U+9b26,U+9b2a-9b2d,U+9b30,U+9b33-9b3a,U+9b3d-9b40,U+9b46,U+9b4a-9b4c,U+9b50,U+9b52-9b53,U+9b55-9b57,U+9b59,U+9b5b-9b6e,U+9b70-9b73,U+9b75-9b76,U+9b78-9b80,U+9b82,U+9b84-9b8a;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./189.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+99fb-99fe,U+9a00,U+9a02-9a04,U+9a06-9a0c,U+9a10-9a15,U+9a17-9a18,U+9a1a-9a2a,U+9a2c,U+9a2f,U+9a31-9a35,U+9a39-9a3d,U+9a3f,U+9a46-9a49,U+9a4b-9a4c,U+9a4e,U+9a50-9a54,U+9a56,U+9a58-9a59,U+9a5c-9a5e,U+9a60-9a61,U+9a63,U+9a66-9a69,U+9a6b,U+9a72,U+9a83,U+9a89,U+9a8d-9a8e,U+9a94-9a95,U+9a99,U+9aa6,U+9aa9-9aae,U+9ab2-9ab5,U+9ab9,U+9abb,U+9abd-9abf,U+9ac3-9ac4,U+9ac6-9aca,U+9acd-9ace,U+9ad0,U+9ad7,U+9ad9-9ade,U+9ae0;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./191.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+9b8b-9b8d,U+9b8f,U+9b93-9b99,U+9b9b-9b9d,U+9b9f-9ba9,U+9bac,U+9baf-9bbf,U+9bc2-9bc6,U+9bc8,U+9bcb-9bd3,U+9bd5,U+9bd8-9bda,U+9bdc,U+9bde-9be0,U+9be3,U+9be5-9be6,U+9be9,U+9bec-9bef,U+9bf1-9bf3,U+9bf5-9bfc,U+9bfe,U+9c00-9c07,U+9c0a-9c0c,U+9c0e-9c11,U+9c14-9c1f,U+9c21-9c22,U+9c24,U+9c26;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./188.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+990b,U+990e-990f,U+9914-9917,U+9919,U+991c-991d,U+991f-9920,U+9922-9927,U+9929-992b,U+992d,U+992f-9930,U+9932,U+9934,U+9936,U+9938-993a,U+993d,U+9940-9942,U+9944,U+9946-9947,U+994d-9951,U+9953,U+9956,U+9958-995b,U+995d,U+995f-9961,U+9964,U+9966,U+9973,U+9978-9979,U+997b,U+997e,U+9982-9983,U+9989,U+998c,U+998e,U+999a-99a4,U+99a6-99a7,U+99a9-99ab,U+99af-99b0,U+99b2,U+99b5-99c0,U+99c2-99cf,U+99d3,U+99d6-99d7,U+99da,U+99dc,U+99de,U+99e0-99e1,U+99e3-99ec,U+99ee-99f0,U+99f2-99fa;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./187.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+97fe,U+9800,U+9804,U+9809,U+980b,U+980d,U+9814-9816,U+9819-981b,U+981d-9820,U+9822-9823,U+9825,U+9827-982c,U+982e-982f,U+9831-9836,U+983a,U+983c-9845,U+9847-984b,U+9850-9852,U+9854-9855,U+9857,U+985a,U+985c-985d,U+985f-9861,U+9863-9864,U+9866,U+9868-986a,U+986d-986e,U+9872,U+988b,U+988e,U+9892,U+9895,U+9899,U+98a3,U+98a9-98ad,U+98b0-98b2,U+98b4-98b5,U+98b7-98bb,U+98bd-98c3,U+98c5,U+98c7,U+98c9-98cd,U+98cf-98d0,U+98d4,U+98d6-98d7,U+98dc-98dd,U+98e1,U+98e3-98e6,U+98ec,U+98ee,U+98f0,U+98f3,U+98f5-98fb,U+98ff-9902,U+9904,U+9906-9907;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./186.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+973b-973c,U+973f-9741,U+9743,U+9745-9747,U+9749-9751,U+9754-9755,U+9757-9758,U+975d,U+975f,U+9763-9764,U+9767,U+976a-9772,U+9775,U+9777-977b,U+977d-9784,U+9786-978a,U+978c,U+978e,U+9790,U+9793,U+9795-9797,U+9799-979c,U+979e-979f,U+97a1-97a2,U+97a4-97a5,U+97a7-97aa,U+97ac,U+97ae,U+97b0-97b1,U+97b3,U+97b5-97bc,U+97be-97c2,U+97c4-97c5,U+97c7-97c8,U+97ca,U+97cd-97d2,U+97d4-97d8,U+97da-97db,U+97df-97e5,U+97e8,U+97ee-97f2,U+97f4,U+97f7-97fa,U+97fc-97fd;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./184.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+943b-943d,U+9440-9443,U+9445-9449,U+944b,U+944d-9450,U+9452-9453,U+9455-945f,U+9461-9462,U+9464,U+9466-946a,U+946c,U+946e-946f,U+9471,U+9473-9476,U+9478,U+947a-947b,U+9480,U+9482-9484,U+9491,U+9496,U+9498,U+94c7,U+94cf,U+94d3-94d4,U+94da,U+94e6,U+94fb,U+951c,U+9520,U+9527,U+9533,U+953d,U+9543,U+9548,U+954b,U+9555,U+955a,U+9560,U+956e,U+9574-9575,U+9578-957e,U+9581,U+9584-9585,U+9587-9588,U+958a,U+958d,U+9590-9591,U+9595-9597,U+9599-95a0,U+95a2,U+95a6-95a7,U+95aa,U+95ae-95b0,U+95b2-95b5,U+95b7-95b8,U+95ba,U+95c0-95c2,U+95c4-95c5,U+95c9,U+95cd-95cf,U+95d1-95d2;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./185.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+95d3,U+95d7-95db,U+95dd,U+95df-95e0,U+95e3-95e4,U+95e6-95e7,U+95ec,U+95ff,U+9607,U+9613,U+9618,U+961b,U+961e,U+9620,U+9623-9629,U+962b-962d,U+962f-9630,U+9637-963a,U+963e,U+9641,U+9643,U+964a,U+964e-964f,U+9651-9653,U+9656-9657,U+9659-965a,U+965c,U+965e,U+9660,U+9665-9666,U+966b,U+966d-966f,U+9671,U+9679-967c,U+967e-9684,U+9687,U+968c,U+9691-9693,U+9696,U+969a,U+969d-96a6,U+96a9,U+96ab-96af,U+96b2,U+96b5,U+96b7,U+96ba,U+96bf,U+96c2-96c3,U+96ca,U+96d0-96d1,U+96d3-96d4,U+96d7-96d8,U+96da,U+96dd,U+96df,U+96e1,U+96e4-96e7,U+96eb-96ee,U+96f0-96f1,U+96f4-96f5,U+96f8,U+96fa,U+96fc-96fd,U+96ff,U+9702-9703,U+9705,U+970a-970c,U+9710,U+9712,U+9714-9715,U+9717-971b,U+971d,U+971f-9726,U+9728-9729,U+972b-972c,U+972e-972f,U+9731,U+9733-9737,U+973a;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./183.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+9392-9395,U+9397,U+9399-93a1,U+93a4-93a5,U+93a8,U+93ab,U+93ad,U+93af,U+93b1-93b2,U+93b4,U+93b6-93be,U+93c0-93c2,U+93c4-93c6,U+93c9,U+93cb,U+93ce-93d0,U+93d2-93d5,U+93d9-93db,U+93e0,U+93e3,U+93e5-93e7,U+93e9-93f4,U+93f6,U+93f8,U+93fa-93fc,U+93fe-9402,U+9404-940a,U+940c-940f,U+9411,U+9415-9418,U+941a-941f,U+9421-9425,U+9429-942a,U+942c-942d,U+942f-9431,U+9434,U+9436-9437,U+9439;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./182.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+92c9-92cb,U+92cd-92ce,U+92d0-92d1,U+92d3-92dc,U+92de,U+92e0-92e2,U+92e7,U+92e9,U+92eb-92ed,U+92f2-92f5,U+92f7,U+92f9-92fb,U+92fd-9300,U+9302-9303,U+9305,U+9309-930f,U+9311,U+9313-9314,U+9316-9317,U+931c-931e,U+9321,U+9323-9325,U+9327,U+9329-932a,U+932c-932d,U+9330-9332,U+9334-9335,U+9337,U+9339-933d,U+933f,U+9342,U+9344-9345,U+9348-934a,U+934c,U+934e-9353,U+9355-9357,U+9359-935a,U+935c-9363,U+9366-9368,U+936b,U+936d-936f,U+9371-9374,U+9377-9379,U+937b-937d,U+937f-9381,U+9383,U+9385-9386,U+9388-9389,U+938b-938e,U+9390-9391;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./181.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+91bb-91bf,U+91c2,U+91c4,U+91c6,U+91c8,U+91d6,U+91da-91db,U+91de-91e2,U+91e5,U+91e8,U+91ea-91f4,U+91f6,U+91f8,U+91fb-91ff,U+9202-9203,U+9205-9207,U+920a-920c,U+920e-920f,U+9212-9213,U+9216-921d,U+921f-9222,U+9224,U+9228-922d,U+922f,U+9231-9232,U+9235-9236,U+923b-923c,U+9241-9244,U+9246-9247,U+924a-924c,U+924e-9250,U+9252-9254,U+9256,U+9258-9259,U+925c-925d,U+925f-9261,U+9263,U+9265,U+9267-926b,U+926e-9273,U+9275-9277,U+9279,U+927c-927e,U+9281-9282,U+9284,U+9286-928d,U+928f-9290,U+9292,U+9294-9295,U+9297,U+9299,U+929b,U+929d-929f,U+92a1-92a2,U+92a4,U+92a7,U+92ad,U+92af-92b0,U+92b2,U+92b4-92b6,U+92b8-92ba,U+92bd-92c0,U+92c2,U+92c4,U+92c6;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./180.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+907b,U+907e,U+9085-9086,U+9089,U+908c-908e,U+9092,U+9094,U+9096,U+9098,U+909a,U+909c,U+909e-90a0,U+90a4-90a5,U+90a7-90a9,U+90ab,U+90ad,U+90b2,U+90b7,U+90bc-90bd,U+90bf-90c0,U+90c2-90c3,U+90c6,U+90c8-90c9,U+90cb-90cd,U+90d2,U+90d4-90d6,U+90d8-90da,U+90de,U+90e0,U+90e3,U+90e5,U+90e9-90ea,U+90ec,U+90ee,U+90f0-90f3,U+90f6-90f7,U+90f9-90fc,U+90ff-9101,U+9103,U+9105,U+9107-9108,U+910a-9111,U+9113,U+9115,U+9117-9118,U+911a-911d,U+911f-9121,U+9124-9126,U+9128-912c,U+912e,U+9133,U+9135,U+9137-9138,U+913b-9142,U+9144-9145,U+9147,U+9151,U+9153-9156,U+9158-9159,U+915b-915c,U+915f-9160,U+9166-9168,U+916b,U+916d,U+9173,U+917a-917c,U+9180-9182,U+9184,U+9186,U+9188,U+918a,U+918e-918f,U+9193-9199,U+919d,U+919f-91a1,U+91a4-91a9,U+91b0-91b3,U+91b6-91b9;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./179.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+8f0c-8f11,U+8f16-8f1a,U+8f20-8f24,U+8f27-8f28,U+8f2b-8f2e,U+8f30-8f32,U+8f34-8f37,U+8f39-8f3a,U+8f3c-8f3d,U+8f40-8f41,U+8f43,U+8f47-8f48,U+8f4a-8f4c,U+8f4f-8f53,U+8f55-8f5e,U+8f60,U+8f63,U+8f65,U+8f6a,U+8f80,U+8f8c,U+8f92,U+8f9d,U+8fa0-8fa2,U+8fa4-8fa5,U+8fa7,U+8faa,U+8fac,U+8fb3-8fb5,U+8fb7-8fb8,U+8fba-8fbc,U+8fbf-8fc0,U+8fc3,U+8fc6,U+8fc9-8fcd,U+8fcf,U+8fd2,U+8fd6-8fd7,U+8fda,U+8fe0-8fe1,U+8fe3,U+8fe7,U+8fec,U+8fef,U+8ff1-8ff2,U+8ff5-8ff6,U+8ffa-8ffc,U+8ffe-8fff,U+9007-9008,U+900c,U+900e,U+9013,U+9018,U+901c,U+9024-9025,U+9027-902b,U+9030-9031,U+9033-9034,U+9037,U+9039-903a,U+903d,U+903f-9040,U+9043,U+9045-9046,U+9048-9049,U+904c,U+9056,U+905a,U+905f,U+9061,U+9064,U+9066-9067,U+906a-906c,U+906f-9071,U+9073,U+9076,U+9079;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./178.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+8e27-8e28,U+8e2b,U+8e2d,U+8e32-8e33,U+8e36-8e38,U+8e3b-8e3c,U+8e3e-8e3f,U+8e43,U+8e45-8e46,U+8e4d-8e50,U+8e53-8e54,U+8e56-8e58,U+8e5a-8e5f,U+8e61-8e62,U+8e65,U+8e67-8e68,U+8e6a-8e6b,U+8e6e,U+8e71,U+8e73,U+8e75,U+8e77-8e79,U+8e7b,U+8e7d-8e7e,U+8e80,U+8e82-8e84,U+8e86,U+8e88,U+8e8c,U+8e8e,U+8e96-8e99,U+8e9b,U+8e9d,U+8e9f-8ea0,U+8ea2-8ea4,U+8ea7-8ea9,U+8ead-8eae,U+8eb0-8eb1,U+8eb3-8eb9,U+8ebb-8ebf,U+8ec1-8ec9,U+8ecf-8ed1,U+8ed3,U+8ed5-8eda,U+8edc-8ede,U+8ee0-8ee3,U+8ee5-8eea,U+8eec-8ef1,U+8ef3-8ef7,U+8efd,U+8eff-8f02,U+8f04,U+8f06,U+8f08,U+8f0b;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./177.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+8ce5,U+8ce8-8ce9,U+8ceb,U+8cee-8cf3,U+8cf5-8cf9,U+8cff-8d03,U+8d06-8d07,U+8d09,U+8d0b-8d0c,U+8d0e,U+8d11-8d12,U+8d14-8d15,U+8d18-8d1a,U+8d1c,U+8d20,U+8d51-8d52,U+8d57,U+8d5f,U+8d65,U+8d68-8d6a,U+8d6c,U+8d6e-8d6f,U+8d71-8d72,U+8d78-8d80,U+8d82-8d83,U+8d86-8d89,U+8d8c-8d90,U+8d92-8d93,U+8d96-8d98,U+8d9a-8d9e,U+8da0-8da2,U+8da4-8da7,U+8da9-8db0,U+8db6-8db7,U+8db9,U+8dbb,U+8dbd,U+8dc0-8dc2,U+8dc5,U+8dc7-8dca,U+8dcd,U+8dd0,U+8dd2-8dd5,U+8dd8-8dd9,U+8ddc,U+8de0,U+8de2,U+8de5-8de7,U+8de9,U+8ded-8dee,U+8df0-8df2,U+8df4,U+8df6,U+8dfc,U+8dfe-8e04,U+8e06-8e08,U+8e0b,U+8e0d-8e0e,U+8e11-8e13,U+8e15-8e1c,U+8e20-8e21,U+8e24-8e26;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./176.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+8b6a,U+8b6d-8b6e,U+8b71-8b73,U+8b75-8b76,U+8b78-8b7c,U+8b7f,U+8b81-8b89,U+8b8b-8b8d,U+8b8f-8b91,U+8b94,U+8b97-8b9b,U+8b9d,U+8b9f,U+8bac,U+8bb1,U+8bbb,U+8bc7,U+8bd0,U+8bea,U+8c09,U+8c1e,U+8c38-8c40,U+8c42-8c45,U+8c4a-8c4b,U+8c4d,U+8c4f,U+8c51-8c53,U+8c56-8c59,U+8c5b-8c60,U+8c63-8c69,U+8c6d-8c72,U+8c74-8c77,U+8c7b-8c81,U+8c83-8c84,U+8c86-8c88,U+8c8b,U+8c8e-8c92,U+8c95-8c97,U+8c99-8c9a,U+8c9c,U+8c9f,U+8ca3-8ca6,U+8cad-8cae,U+8cb1,U+8cb5,U+8cb9,U+8cbe,U+8cc6,U+8cc9,U+8ccb-8cd0,U+8cd4,U+8cd6-8cd9,U+8cdb,U+8cdd,U+8cdf;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./175.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+8a81-8a83,U+8a88,U+8a8b,U+8a8e-8a90,U+8a94,U+8a96-8a97,U+8a99,U+8a9b-8a9d,U+8a9f,U+8aa2,U+8aa7,U+8aa9,U+8aab-8aaf,U+8ab1,U+8ab3-8ab5,U+8ab7-8ab8,U+8aba-8abb,U+8abd-8abe,U+8ac0-8ac1,U+8ac3,U+8ac5-8ac6,U+8ac8,U+8aca,U+8acc,U+8ace,U+8ad0,U+8ad3-8ad5,U+8ad8-8ada,U+8add,U+8adf-8ae0,U+8ae3,U+8ae5,U+8ae8-8aea,U+8aec,U+8aef-8af0,U+8af2,U+8af4-8af5,U+8af9,U+8afb,U+8afd,U+8aff,U+8b03,U+8b06,U+8b08-8b09,U+8b0b-8b0d,U+8b0f,U+8b11-8b13,U+8b15,U+8b18,U+8b1a,U+8b1c,U+8b1e-8b1f,U+8b21-8b25,U+8b27,U+8b29-8b2a,U+8b2d-8b32,U+8b34-8b38,U+8b3a-8b3d,U+8b3f-8b40,U+8b42-8b48,U+8b4a-8b4d,U+8b50-8b55,U+8b57,U+8b5b,U+8b5d-8b5e,U+8b60-8b65,U+8b67-8b69;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./174.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+8975-897a,U+897c-897e,U+8980,U+8982,U+8984-8985,U+8987,U+8989-898a,U+898c-898e,U+8990-8992,U+8994-8995,U+8997,U+8999-89a0,U+89a2-89a5,U+89a7-89a9,U+89ab,U+89ad-89ae,U+89b0-89b1,U+89b3-89b6,U+89b8-89b9,U+89bb-89bc,U+89be,U+89c3,U+89cd,U+89d3,U+89d5,U+89d7-89d9,U+89db,U+89dd,U+89df-89e2,U+89e4,U+89e7-89ea,U+89ec-89ee,U+89f0-89f2,U+89f5,U+89f7,U+89f9-89ff,U+8a04-8a06,U+8a09,U+8a0b,U+8a0d,U+8a0f,U+8a11-8a12,U+8a14,U+8a19-8a1a,U+8a1c,U+8a1e,U+8a20-8a22,U+8a24,U+8a26-8a29,U+8a2b-8a2c,U+8a2e-8a30,U+8a32-8a33,U+8a35,U+8a37-8a39,U+8a3c-8a3d,U+8a3f-8a40,U+8a42-8a45,U+8a47,U+8a49-8a4d,U+8a4f,U+8a51,U+8a53,U+8a56-8a57,U+8a59-8a5a,U+8a5c-8a5d,U+8a5f,U+8a64-8a65,U+8a67-8a68,U+8a6a,U+8a6f,U+8a74,U+8a76-8a78,U+8a7a-8a7b,U+8a7d-8a7e,U+8a80;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./173.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+88a6-88aa,U+88ac,U+88ae-88b0,U+88b2-88b6,U+88b8-88bb,U+88bd-88c0,U+88c3-88c4,U+88c7-88c8,U+88ca-88cd,U+88d0-88d1,U+88d3,U+88d6-88d7,U+88da-88db,U+88de,U+88e0-88e1,U+88e6-88e7,U+88e9-88ef,U+88f2,U+88f5-88f7,U+88fa-88fb,U+88ff-8901,U+8903-8909,U+890b-890f,U+8911,U+8914-8918,U+891c-8920,U+8922-8924,U+8926-8929,U+892c-892f,U+8931,U+8935,U+8937,U+8939-893a,U+893c-8940,U+8942-8943,U+8945,U+8947-8948,U+894a-8955,U+8957-895c,U+8961-8963,U+8965,U+8967-8969,U+896b-896e,U+8970-8971,U+8973-8974;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./172.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+87c3,U+87c5,U+87c7,U+87c9,U+87cc-87cd,U+87cf-87d0,U+87d4-87da,U+87dc-87df,U+87e1-87e2,U+87e4,U+87e6-87e9,U+87eb,U+87ed,U+87f0-87f1,U+87f3-87f5,U+87f7-87f8,U+87fa,U+87fc-87fd,U+87ff-8802,U+8804,U+8807-8809,U+880b-880c,U+880e-880f,U+8812,U+8817-881a,U+881c-881e,U+8820,U+8824-8830,U+8833-8835,U+8837-8838,U+883a,U+883d-883f,U+8841-8843,U+8847-8849,U+884b,U+884e-8852,U+8856,U+8858,U+885a,U+885c,U+885e-8860,U+8866-8867,U+886a,U+886d,U+886f,U+8871,U+8873-8876,U+8878-887c,U+8880,U+8883,U+8886-8887,U+8889-888a,U+888c,U+888e-8891,U+8893-8895,U+8897-889b,U+889d,U+889f-88a1,U+88a3,U+88a5;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./171.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+86be-86bf,U+86c1-86c3,U+86c5,U+86c8,U+86cc-86cd,U+86d2-86d3,U+86d5-86d7,U+86da,U+86dc-86dd,U+86e0-86e3,U+86e5-86e8,U+86ea-86ec,U+86ef,U+86f5-86f7,U+86fc-86fd,U+86ff,U+8701,U+8704-8705,U+870b-870c,U+870e-8711,U+8714,U+8719,U+871b,U+871d,U+871f-8720,U+8724,U+8726-8728,U+872a-872d,U+872f-8730,U+8732-8733,U+8735-8736,U+8738-873a,U+873c-873d,U+8740-8746,U+874a-874b,U+874d,U+874f-8752,U+8754,U+8756,U+8758,U+875a-875e,U+8761-8762,U+8767,U+8769-876d,U+876f,U+8771-8773,U+8775,U+8777,U+8779-877a,U+877f-8781,U+8786-8787,U+8789-878a,U+878c,U+878e-8792,U+8794-8796,U+8798-879d,U+87a0-87a1,U+87a3-87a7,U+87a9-87aa,U+87ae,U+87b0-87b2,U+87b4,U+87b6-87b9,U+87bc,U+87be-87bf,U+87c1-87c2;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./170.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+85ef-85f5,U+85f7-85f8,U+85fc-85fe,U+8600-8603,U+8608-8609,U+860c-8610,U+8612-8615,U+8617-8619,U+861b-861d,U+861f-8621,U+8623-8626,U+8628,U+862a-862c,U+862e-8637,U+8639,U+863b,U+863d-863e,U+8640-864c,U+8652-8653,U+8656-8659,U+865d,U+8660-8661,U+8663-8666,U+8668-866a,U+866d,U+8670,U+8672-8678,U+8683-8689,U+868e-8692,U+8694,U+8696-869b,U+869e-86a2,U+86a5-86a6,U+86ab,U+86ad-86ae,U+86b2-86b3,U+86b7-86b9,U+86bb-86bd;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./169.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+851c-851d,U+8520,U+8522,U+8524,U+8527-852a,U+852e-8536,U+853e-8540,U+8542,U+8544-8545,U+8547,U+854b-854d,U+854f-8551,U+8554,U+8557,U+855a-855d,U+855f-8561,U+8563,U+8565-8567,U+856b-856c,U+856e-8571,U+8573,U+8575-8576,U+8578,U+857c-857d,U+857f-8583,U+8586,U+8589,U+858b,U+858d-858e,U+8590,U+8592-8593,U+8595-859a,U+859d-859e,U+85a0-85a3,U+85a5,U+85a7,U+85ab-85ad,U+85b1-85b6,U+85b8,U+85bb-85c0,U+85c2-85c8,U+85ca-85cc,U+85d1-85d2,U+85d4,U+85d6-85db,U+85de-85e3,U+85e6-85e8,U+85eb-85ee;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./167.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+826a,U+826c-826d,U+8275-8277,U+827b-827c,U+8280-8281,U+8283,U+8285-8287,U+8289,U+828c,U+8290,U+8293-8296,U+829a-829b,U+829e,U+82a0,U+82a2-82a3,U+82a7,U+82b2,U+82b5-82b6,U+82ba,U+82bc,U+82bf-82c0,U+82c2-82c3,U+82c5-82c6,U+82c9,U+82d0,U+82d6,U+82d9-82da,U+82dd,U+82e2,U+82e8-82ea,U+82ec-82ee,U+82f0,U+82f2-82f3,U+82f5-82f6,U+82f8,U+82fa,U+82fc-8300,U+830a-830b,U+830d,U+8310,U+8312-8313,U+8316,U+8318-8319,U+831d-8326,U+8329-832a,U+832e,U+8330,U+8337,U+833b,U+833d-833f,U+8341-8342,U+8344-8345,U+8348,U+834b-834e,U+8353,U+8355-8359,U+835d,U+8362,U+8370-8376,U+8379-837a,U+837e-8384,U+8387-8388,U+838b-838d,U+838f-8391,U+8394-8395,U+8397,U+8399-839a,U+839d,U+839f,U+83a1,U+83a3-83a6,U+83ac-83af,U+83b5,U+83bb,U+83be-83bf,U+83c2-83c4,U+83c6,U+83c8-83c9,U+83cb,U+83cd-83ce,U+83d0-83d2,U+83d5,U+83d7,U+83d9-83db,U+83de,U+83e2-83e4,U+83e6-83e8,U+83eb-83ee,U+83f3,U+83f5-83f7,U+83fa-83fc,U+83fe-8400,U+8402,U+8405,U+8408-8409,U+8410,U+8412-8417,U+8419-841b,U+841e-8421;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./168.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+8422-8423,U+8429-842b,U+842d-8430,U+8432-8434,U+8436-8437,U+8439-843b,U+843e-8445,U+8447-8448,U+844a-8450,U+8453-8456,U+8458,U+845d-8460,U+8462,U+8465,U+8467-8468,U+846a,U+846e-8470,U+8472,U+8474,U+8479,U+847b-8481,U+8483-8486,U+848a,U+848d,U+848f,U+8491-8493,U+8495-8496,U+8498,U+849a-849b,U+849d,U+849f-84a0,U+84a2-84ae,U+84b0-84b1,U+84b3,U+84b5-84b7,U+84bb,U+84be,U+84c2-84c3,U+84c5,U+84c7-84c8,U+84cc,U+84ce-84cf,U+84d2,U+84d4-84d5,U+84d7-84dc,U+84de,U+84e1-84e2,U+84e4,U+84e8-84eb,U+84ed,U+84f1-84f3,U+84f5-84fb,U+84fe,U+8500-850b,U+850d-8510,U+8512,U+8515-8516,U+8518-8519,U+851b;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./166.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+8163-8164,U+8168,U+816a,U+816c,U+816f,U+8172,U+8175-8177,U+8184-8187,U+8189,U+818b-818e,U+8190,U+8192-8197,U+8199,U+819e-819f,U+81a1-81a2,U+81a4-81a5,U+81a7,U+81ab-81b2,U+81b4-81b9,U+81bc,U+81c4-81c5,U+81c7-81c8,U+81cb,U+81ce,U+81d0-81d1,U+81d3-81d7,U+81d9,U+81db-81df,U+81e1-81e2,U+81e4,U+81e6,U+81e9,U+81eb,U+81ee-81f2,U+81f5-81fa,U+81fd,U+81ff,U+8203,U+820b,U+820e-820f,U+8211,U+8213,U+8215-821a,U+821d,U+8220,U+8224-8227,U+8229,U+822e,U+8232,U+823a,U+823c-823d,U+823f-8243,U+8245-8246,U+8248,U+824a,U+824c-824e,U+8250-8257,U+825b-825e,U+8260-8263,U+8265,U+8267,U+8269;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./165.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+7ff5-7ff8,U+7ffd-7fff,U+8002,U+8007-800a,U+800e-800f,U+8011,U+8013,U+801a-801b,U+801d-801f,U+8021,U+8023-8024,U+802b,U+802d,U+802f-8030,U+8032,U+8034,U+8039-803a,U+803c,U+803e,U+8040-8041,U+8044-8045,U+8047-8049,U+804e-8051,U+8053,U+8055,U+8057,U+8059,U+805b-805d,U+805f-8068,U+806b-806e,U+8074,U+8078,U+807a-807c,U+8081-8082,U+8088,U+808a,U+808d-8092,U+8094-8095,U+8097,U+8099,U+809e,U+80a3,U+80a6-80a8,U+80ac,U+80b0,U+80b3,U+80b5-80b6,U+80b8-80b9,U+80bb,U+80c5,U+80c7-80cb,U+80cf-80d5,U+80d8,U+80df-80e0,U+80e2-80e3,U+80e6,U+80ee,U+80f5,U+80f7,U+80f9,U+80fb,U+80fe-8101,U+8103-8104,U+8107,U+810b-810c,U+8115,U+8117,U+8119,U+811c-811d,U+811f-8122,U+8124-8128,U+812a,U+812d-812e,U+8130,U+8133-8135,U+8137,U+813a-813d,U+813f-8140,U+8142-8145,U+8147,U+8149,U+814d,U+814f,U+8152,U+8157-8158,U+815b-815f,U+8162;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./164.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+7e7f-7e81,U+7e83-7e87,U+7e89,U+7e8b,U+7e8e,U+7e90-7e92,U+7e95,U+7e97,U+7e99-7e9a,U+7e9d-7e9e,U+7eae,U+7eb4,U+7ebb-7ebc,U+7ed6,U+7ee4,U+7eec,U+7ef9,U+7f0a,U+7f10,U+7f1e,U+7f37,U+7f39,U+7f3b-7f41,U+7f43,U+7f46-7f4b,U+7f4d-7f4f,U+7f52-7f53,U+7f56,U+7f59,U+7f5b-7f5e,U+7f60,U+7f63-7f67,U+7f6b-7f6d,U+7f6f,U+7f73,U+7f76,U+7f78,U+7f7a-7f7d,U+7f7f-7f80,U+7f82-7f84,U+7f87,U+7f89,U+7f8d,U+7f8f-7f93,U+7f95-7f99,U+7f9b-7f9c,U+7fa0,U+7fa2,U+7fa6,U+7faa-7fae,U+7fb1,U+7fb3-7fb5,U+7fb7,U+7fba-7fbb,U+7fbe,U+7fc0,U+7fc2-7fc4,U+7fc6-7fc9,U+7fcb,U+7fcd,U+7fcf-7fd1,U+7fd3,U+7fd6-7fd7,U+7fd9-7fde,U+7fe2-7fe4,U+7fe7-7fe8,U+7fea,U+7fec-7fed,U+7fef,U+7ff2,U+7ff4;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./163.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+7dc1-7dc3,U+7dc5-7dc6,U+7dc8-7dc9,U+7dcc-7dd1,U+7dd3-7dd6,U+7dda-7ddc,U+7ddf,U+7de2,U+7de4-7de5,U+7de7,U+7dea-7deb,U+7ded-7dee,U+7df0,U+7df3,U+7df5,U+7df7-7df8,U+7dfa,U+7dfc-7e07,U+7e0c-7e0f,U+7e12-7e1a,U+7e1c,U+7e20-7e22,U+7e24-7e2a,U+7e2c,U+7e2f-7e30,U+7e33-7e34,U+7e38,U+7e3a,U+7e3c,U+7e3f-7e40,U+7e42,U+7e44,U+7e49-7e51,U+7e53,U+7e56-7e59,U+7e5b-7e5d,U+7e5f-7e60,U+7e63-7e68,U+7e6b-7e6c,U+7e71-7e72,U+7e74-7e78,U+7e7a-7e7b;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./162.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+7cbb,U+7cbf-7cc0,U+7cc2-7cc4,U+7cc6,U+7ccb,U+7cce-7cd4,U+7cd8,U+7cda-7cdb,U+7ce1-7ce6,U+7ce9-7cee,U+7cf0-7cf1,U+7cf3,U+7cf5,U+7cf7,U+7cfa,U+7cfc-7cfd,U+7cff,U+7d01,U+7d03,U+7d0c,U+7d0e-7d0f,U+7d11-7d12,U+7d16,U+7d18,U+7d1d-7d1f,U+7d23-7d26,U+7d28-7d2a,U+7d2c-7d2d,U+7d34-7d38,U+7d3b,U+7d3d-7d3e,U+7d41,U+7d45,U+7d47-7d4d,U+7d4f,U+7d51-7d54,U+7d56-7d5a,U+7d5c,U+7d5f-7d60,U+7d63-7d65,U+7d67,U+7d69-7d6d,U+7d6f-7d70,U+7d74-7d76,U+7d78,U+7d7a-7d80,U+7d82,U+7d84-7d85,U+7d87,U+7d89-7d8e,U+7d90,U+7d92,U+7d94-7d9b,U+7d9d,U+7d9f,U+7da1,U+7da4-7da5,U+7da7-7daa,U+7daf,U+7db3,U+7db6-7db7,U+7dbc,U+7dc0;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./161.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+7bfa-7bfb,U+7bfd,U+7bff,U+7c01-7c06,U+7c08-7c0a,U+7c0e,U+7c10,U+7c12-7c15,U+7c17-7c1d,U+7c20,U+7c22,U+7c24-7c25,U+7c28-7c29,U+7c2c-7c36,U+7c39-7c3d,U+7c42,U+7c44-7c4b,U+7c4e-7c5b,U+7c5d-7c5e,U+7c61-7c63,U+7c65-7c68,U+7c6b,U+7c6d,U+7c6f-7c72,U+7c75-7c7a,U+7c7e-7c88,U+7c8a-7c90,U+7c93-7c94,U+7c96,U+7c99-7c9b,U+7ca0-7ca1,U+7ca3,U+7ca6-7ca9,U+7cab-7cad,U+7caf-7cb0,U+7cb4,U+7cb6-7cb8,U+7cba;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./160.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+7aeb-7aec,U+7aee,U+7af0-7af5,U+7af7-7af8,U+7afb-7afc,U+7afe,U+7b00-7b02,U+7b05,U+7b07,U+7b09,U+7b0c-7b0e,U+7b10,U+7b12-7b13,U+7b16-7b18,U+7b1a,U+7b1c-7b1d,U+7b1f,U+7b21-7b23,U+7b27,U+7b29,U+7b2d,U+7b2f-7b30,U+7b32,U+7b34-7b37,U+7b39,U+7b3b,U+7b3d,U+7b3f-7b44,U+7b48,U+7b4a,U+7b4e,U+7b53,U+7b55,U+7b57,U+7b59,U+7b5c,U+7b5e-7b5f,U+7b61,U+7b63-7b66,U+7b68-7b6d,U+7b6f-7b70,U+7b73-7b74,U+7b76,U+7b78,U+7b7a,U+7b7c-7b7d,U+7b7f,U+7b81-7b84,U+7b86-7b8a,U+7b8c,U+7b8e,U+7b91-7b93,U+7b96,U+7b98-7b9b,U+7b9e-7ba0,U+7ba3-7ba5,U+7bae-7bb0,U+7bb2-7bb3,U+7bb5-7bb7,U+7bb9-7bbf,U+7bc2-7bc3,U+7bc5,U+7bc8,U+7bca,U+7bcd-7bd0,U+7bd2,U+7bd4-7bd8,U+7bdb-7bdc,U+7bde-7be0,U+7be2-7be3,U+7be7-7be8,U+7beb-7bed,U+7bef-7bf0,U+7bf2,U+7bf4-7bf6,U+7bf8-7bf9;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./158.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+78f1,U+78f3,U+78f5-78f6,U+78f8-78f9,U+78fb-78fc,U+78fe-7900,U+7902-7904,U+7907-790d,U+790f-7912,U+7914-7918,U+791a-791d,U+7920-7923,U+7925,U+7927-7929,U+792d-7930,U+7932-7933,U+7935-7939,U+793d,U+793f,U+7942-7945,U+7947,U+794a-7952,U+7954,U+7958-7959,U+7961,U+7963-7964,U+7966,U+7969-796c,U+796e,U+7970-7976,U+7979,U+797b-797e,U+7982-7983,U+7986-7989,U+798b-798c,U+7990-7999,U+799b-79a5,U+79a8-79a9,U+79ab-79ad,U+79af,U+79b2,U+79b4-79b8,U+79bc,U+79c2,U+79c4-79c5,U+79c7,U+79ca,U+79cc,U+79ce-79d0,U+79d3-79d4,U+79d6-79d7,U+79d9-79de,U+79e0-79e1;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./159.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+79e2,U+79e5,U+79e8,U+79ea,U+79ec,U+79ee,U+79f1-79f7,U+79f9-79fa,U+79fc,U+79fe-79ff,U+7a01,U+7a04,U+7a07,U+7a09-7a0a,U+7a0c,U+7a0f-7a13,U+7a15-7a16,U+7a18-7a19,U+7a1b,U+7a1d,U+7a21-7a22,U+7a24-7a2d,U+7a2f-7a30,U+7a32,U+7a34-7a36,U+7a38,U+7a3a,U+7a3e,U+7a41-7a45,U+7a47-7a4b,U+7a4f-7a50,U+7a52-7a56,U+7a58-7a60,U+7a63-7a68,U+7a6a-7a6c,U+7a6e-7a6f,U+7a71-7a73,U+7a75,U+7a7b-7a7e,U+7a82,U+7a85,U+7a87,U+7a89-7a8c,U+7a8e-7a90,U+7a93-7a94,U+7a99-7a9b,U+7a9e,U+7aa1-7aa4,U+7aa7,U+7aab,U+7ab0-7ab2,U+7ab4-7ab5,U+7ab7-7ab9,U+7abb-7abe,U+7ac0-7ac3,U+7ac6,U+7ac9,U+7acc-7ad5,U+7ad7-7ad8,U+7ada-7add,U+7ae1-7ae2,U+7ae4,U+7ae7-7aea;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./157.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+77c9-77cc,U+77ce-77d6,U+77d8-77d9,U+77dd-77e1,U+77e4,U+77e6,U+77e8,U+77ea,U+77f0-77f2,U+77f4-77f5,U+77f7,U+77f9-77fc,U+7803-7808,U+780a-780b,U+780e-7810,U+7813,U+7815,U+7819,U+781b,U+781e,U+7820-7822,U+7824,U+7828,U+782a-782b,U+782e-782f,U+7831-7833,U+7835-7836,U+783d,U+783f,U+7841-7842,U+7844,U+7846,U+7848-784b,U+784d,U+784f,U+7851,U+7853-7854,U+7858-785c,U+785e-7863,U+7865-7867,U+7869,U+7870-7876,U+7878-787b,U+787d-7886,U+7888,U+788a-788b,U+788f-7890,U+7892,U+7894-7896,U+7899,U+789d-789e,U+78a0,U+78a2,U+78a4,U+78a6,U+78a8,U+78aa-78ac,U+78ae-78af,U+78b5-78b7,U+78bb,U+78bd,U+78bf-78c0,U+78c2-78c4,U+78c6-78c8,U+78cc-78cf,U+78d1-78d3,U+78d6-78d8,U+78db-78e2,U+78e4-78e6,U+78e9-78eb,U+78ed-78ee,U+78f0;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./154.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+7461-7462,U+7465-7468,U+746b-746c,U+746e,U+7471-7475,U+7478-747d,U+747f,U+7482,U+7484-7486,U+7488,U+748a,U+748c-748d,U+748f,U+7491-749b,U+749d,U+749f-74a2,U+74a4-74a5,U+74aa-74af,U+74b1-74b9,U+74bb-74bc,U+74be,U+74c0-74c9,U+74cb-74ce,U+74d0-74d1,U+74d3,U+74d5-74d9,U+74db,U+74dd,U+74df,U+74e1,U+74e5,U+74e7-74ed,U+74f0-74f3,U+74f5,U+74f8-74fe,U+7500,U+7502-7503,U+7505-750b,U+750e,U+7510,U+7512,U+7514,U+7516-7517,U+751b,U+751d-751e,U+7520-7521,U+7523-7524,U+7526-7527,U+752a,U+752e,U+7534,U+7536,U+7539,U+753c-753d,U+753f,U+7541-7543;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./156.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+76a2-76a3,U+76a5-76ad,U+76af,U+76b3,U+76b5-76b7,U+76b9,U+76bb-76be,U+76c0-76c1,U+76c4,U+76c7,U+76c9,U+76cb-76cc,U+76d3,U+76d5,U+76d9-76da,U+76dd,U+76e0,U+76e2,U+76e6,U+76e8-76ed,U+76f0,U+76f3,U+76f5-76f7,U+76fa-76fb,U+76fd,U+76ff-7703,U+7705-7706,U+770a,U+770c,U+770e-7718,U+771b-771d,U+7721,U+7723-7724,U+7727,U+772a-772c,U+772e,U+7730-7734,U+7739,U+773b,U+773d-773f,U+7742,U+7744-7746,U+7748-774e,U+7752-7759,U+775d,U+775f-7760,U+7764,U+7767,U+7769-776a,U+776d-7778,U+777a-777c,U+7781-7783,U+7786,U+7788-778b,U+778f-7790,U+7793-7797,U+7799-779d,U+77a1,U+77a3-77a4,U+77a6,U+77a8,U+77ab,U+77ae-77af,U+77b1-77b2,U+77b4,U+77b6-77ba,U+77be,U+77c0-77c8;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./155.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+7544,U+7546-7547,U+7549-754a,U+754d,U+7550-7553,U+7555-7558,U+755e-7561,U+7563-7564,U+7567-7569,U+756c-756f,U+7571,U+7573,U+7575,U+7577,U+757a-757e,U+7580-7582,U+7584-7585,U+7588-7589,U+758c-758e,U+7590,U+7593,U+7595,U+7598,U+759b-759c,U+759e,U+75a2,U+75a6-75aa,U+75ad,U+75b6-75b7,U+75ba-75bb,U+75bf-75c1,U+75c6,U+75cb-75cc,U+75ce-75d1,U+75d3,U+75d7,U+75da,U+75dc-75dd,U+75df,U+75e1,U+75e5,U+75e9,U+75ec-75ef,U+75f2-75f3,U+75f5-75f8,U+75fa-75fb,U+75fd,U+7604,U+7606-7609,U+760e-760f,U+7611-7612,U+7614,U+7616,U+761a,U+761c-761d,U+7623,U+7628,U+762c,U+762e-762f,U+7631-7632,U+7636-7637,U+7639-763a,U+763d,U+7641,U+7644-7645,U+7648,U+764a-764b,U+764e-7651,U+7653,U+7655,U+7657,U+7659-765b,U+765d,U+7660,U+7666,U+7668,U+766a,U+7673-7677,U+7679-767a,U+767f-7680,U+7683,U+7685,U+7689-768a,U+768c-768d,U+768f-7690,U+7692,U+7694-7695,U+7697-7698,U+769b-76a1;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./153.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+7346-734c,U+734f,U+7351,U+7353-7356,U+7358-735f,U+7361-7367,U+7369,U+736e,U+7371,U+7373-7374,U+7376,U+7379,U+737d,U+737f,U+7381-7383,U+7385-7386,U+7388,U+738a,U+738c-738d,U+738f-7390,U+7392-7395,U+7397-739a,U+739c-739e,U+73a0-73a1,U+73a3-73a7,U+73aa,U+73ac-73ad,U+73b1,U+73b4-73b6,U+73b8-73b9,U+73bc-73bf,U+73c1,U+73c3-73c7,U+73cb-73cc,U+73ce,U+73d2-73d8,U+73da-73dd,U+73df,U+73e1-73e4,U+73e6,U+73e8,U+73ea-73ec,U+73ee-73f1,U+73f3-73fd,U+73ff-7402,U+7404,U+7407-7408,U+740b-740e,U+7411-7419,U+741c-7421,U+7423-7424,U+7427,U+7429,U+742b,U+742d,U+742f,U+7431-7432,U+7437-7439,U+743b,U+743d-743e,U+7440,U+7442-7448,U+744a,U+744c-7454,U+7456,U+7458,U+745d,U+7460;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./152.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+720e-720f,U+7211-721a,U+721c,U+721e-7227,U+7229,U+722b,U+722e-722f,U+7233-7234,U+723c,U+7241-7245,U+7249-724b,U+724e-7251,U+7253-7255,U+7257,U+725a,U+725c,U+725e,U+7263-7265,U+7268,U+726a-726d,U+7270-7271,U+7273,U+7276-7278,U+727b-727c,U+7282-7283,U+7285-7289,U+728c,U+728e,U+7290-7291,U+7293-7295,U+7297-729a,U+729c-729e,U+72a0-72a1,U+72a3-72a6,U+72a8-72ab,U+72ae,U+72b1-72b3,U+72b5,U+72ba-72bf,U+72c5-72c7,U+72c9-72cc,U+72cf,U+72d1,U+72d3-72d6,U+72d8,U+72da-72dd,U+72df,U+72e2-72e7,U+72ea-72eb,U+72f5-72f6,U+72fe-7300,U+7302,U+7304-7309,U+730b-730d,U+730f-7312,U+7314,U+7318,U+731a,U+731f-7320,U+7323-7324,U+7326-7328,U+732d,U+732f-7330,U+7332-7333,U+7335,U+733a,U+733c-733d,U+7340,U+7342;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./151.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+7135,U+7137-7144,U+7147-7148,U+714b,U+714d,U+714f-7151,U+7153-7158,U+715a-715b,U+715d,U+715f-7161,U+7163,U+716a-716b,U+716d,U+716f-7171,U+7174-7177,U+7179,U+717b-717c,U+717e-7183,U+7185-7189,U+718b-718e,U+7190-7191,U+7193,U+7195-7196,U+719a-719e,U+71a1-71a7,U+71a9-71ab,U+71ad-71b0,U+71b2,U+71b4,U+71b6-71b8,U+71ba-71bd,U+71bf-71c0,U+71c2,U+71c4-71c7,U+71ca-71cd,U+71cf-71d1,U+71d3,U+71d6-71d8,U+71da-71db,U+71dd-71de,U+71e1-71e4,U+71e8-71ec,U+71ef-71f3,U+71f5-71f8,U+71fa,U+71fd,U+71ff-7205,U+7207-720c;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./150.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+7030-7031,U+7033-7034,U+7036-7038,U+703a-703d,U+703f-7042,U+7045-704b,U+704d-704e,U+7050,U+7052-7054,U+7056-7057,U+7059-705c,U+705f-7062,U+7065-7068,U+706a,U+706e,U+7071-7074,U+7077,U+7079-707b,U+7081-7084,U+7086-7088,U+708b-708d,U+708f-7091,U+7093,U+7097-7098,U+709a-709b,U+709e-70aa,U+70b0,U+70b2,U+70b4-70b6,U+70ba,U+70be-70bf,U+70c4-70c7,U+70c9,U+70cb-70ce,U+70d0-70d7,U+70da,U+70dc-70de,U+70e0-70e3,U+70e5,U+70ea,U+70ee,U+70f0-70f3,U+70f5-70f6,U+70f8,U+70fa-70fc,U+70fe-7108,U+710b-710f,U+7111-7112,U+7114,U+7117,U+711b-7120,U+7122-7125,U+7127-712e,U+7132-7134;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./147.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+6c80,U+6c84,U+6c87,U+6c8a-6c8b,U+6c8d-6c8e,U+6c91,U+6c95-6c98,U+6c9a,U+6c9c-6c9e,U+6ca0,U+6ca2,U+6ca8,U+6cac,U+6caf-6cb0,U+6cb4-6cb7,U+6cba,U+6cc0,U+6cc2-6cc3,U+6cc6-6cc8,U+6ccb,U+6ccd-6ccf,U+6cd1-6cd2,U+6cd8-6cda,U+6cdc,U+6cdf,U+6ce4,U+6ce6-6ce7,U+6ce9,U+6cec-6ced,U+6cf2,U+6cf4,U+6cf9,U+6cff-6d00,U+6d02-6d03,U+6d05-6d06,U+6d08-6d0a,U+6d0d,U+6d0f-6d11,U+6d13-6d16,U+6d18,U+6d1c-6d1d,U+6d1f-6d24,U+6d26,U+6d28,U+6d2c-6d2d,U+6d2f-6d30,U+6d34,U+6d37-6d38,U+6d3a,U+6d3f-6d40,U+6d42,U+6d44,U+6d49,U+6d4c,U+6d50,U+6d55-6d58,U+6d5b,U+6d5d,U+6d5f,U+6d61-6d62,U+6d64-6d65,U+6d67-6d68,U+6d6b-6d6d,U+6d70-6d73,U+6d75-6d76,U+6d7a-6d7b,U+6d7d-6d81,U+6d83-6d84,U+6d86,U+6d8a-6d8b,U+6d8d,U+6d8f-6d90,U+6d92,U+6d96-6d9a,U+6d9c,U+6da2,U+6da5,U+6dac-6dad,U+6db0-6db1,U+6db3-6db4,U+6db6-6db7,U+6db9-6dbb,U+6dbd-6dbe,U+6dc1-6dc3,U+6dc8-6dca,U+6dcd-6dd0,U+6dd2-6dd5,U+6dd7,U+6ddb-6ddc,U+6ddf,U+6de2-6de3,U+6de7,U+6ded,U+6def-6df0,U+6df2,U+6df4,U+6df8,U+6dfd-6e04,U+6e06-6e08,U+6e0b,U+6e0f,U+6e12-6e13,U+6e15,U+6e18,U+6e1c,U+6e1e-6e1f,U+6e22,U+6e27-6e28,U+6e2a,U+6e2e,U+6e30-6e31,U+6e33,U+6e35-6e37,U+6e39,U+6e3b-6e3d,U+6e3f-6e42;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./149.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+6f5f-6f61,U+6f63,U+6f65,U+6f67-6f6c,U+6f71,U+6f73,U+6f75-6f76,U+6f79,U+6f7b,U+6f7d-6f7e,U+6f81-6f83,U+6f85,U+6f8a-6f8b,U+6f8f-6f96,U+6f98-6f9b,U+6f9d-6f9f,U+6fa2-6fa3,U+6fa5-6fa6,U+6fa8,U+6faa-6fad,U+6faf-6fb0,U+6fb2,U+6fb4-6fb5,U+6fb7-6fb8,U+6fba-6fbf,U+6fc4-6fc8,U+6fca-6fd0,U+6fd3-6fd7,U+6fd9-6fdd,U+6fe2-6fe3,U+6fe5-6fea,U+6fec-6fed,U+6ff2-6ff9,U+6ffb,U+6ffd,U+6fff-7004,U+7007-7008,U+700a,U+700c-700e,U+7010,U+7012-7014,U+7016-7017,U+7019,U+701c,U+701e,U+7021-7022,U+7024-7025,U+7029-702f;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./148.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+6e45-6e49,U+6e4b-6e4c,U+6e4f-6e52,U+6e55,U+6e57,U+6e59-6e5a,U+6e5c-6e5d,U+6e60-6e62,U+6e64-6e66,U+6e68-6e6a,U+6e6c-6e6d,U+6e70-6e7d,U+6e80-6e82,U+6e84,U+6e87-6e88,U+6e8a-6e8e,U+6e91-6e95,U+6e97,U+6e99-6e9b,U+6e9e,U+6ea0-6ea1,U+6ea3-6ea4,U+6ea6,U+6ea8-6ea9,U+6eac-6eae,U+6eb0,U+6eb3,U+6eb5,U+6eb8-6eb9,U+6ebe-6ec0,U+6ec3,U+6ec6,U+6ec8-6eca,U+6ecd,U+6ed0,U+6ed2,U+6ed6,U+6ed8-6ed9,U+6edb-6edd,U+6ee3,U+6ee7,U+6eea-6eeb,U+6eed-6eee,U+6ef0-6ef1,U+6ef3,U+6ef5-6ef6,U+6efa-6efd,U+6f00,U+6f03-6f05,U+6f07-6f08,U+6f0a-6f0e,U+6f10,U+6f12,U+6f16-6f19,U+6f1b-6f1f,U+6f21,U+6f25-6f28,U+6f2e,U+6f30,U+6f34,U+6f37,U+6f39-6f3d,U+6f40,U+6f42-6f45,U+6f48-6f4a,U+6f4c,U+6f4e-6f50,U+6f52-6f53,U+6f55-6f57,U+6f5a,U+6f5d;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./146.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+6b2a-6b31,U+6b33-6b36,U+6b38,U+6b3b-6b3c,U+6b3f-6b42,U+6b44-6b45,U+6b48,U+6b4a-6b4b,U+6b4d-6b4f,U+6b51-6b58,U+6b5a-6b5e,U+6b60,U+6b68-6b69,U+6b6b-6b71,U+6b73-6b76,U+6b7a,U+6b7d-6b7e,U+6b80,U+6b85,U+6b88,U+6b8c,U+6b8e-6b91,U+6b94-6b95,U+6b97,U+6b99,U+6b9c-6b9d,U+6b9f-6ba0,U+6ba2-6ba3,U+6ba5-6ba9,U+6bac,U+6bb0-6bb1,U+6bb6,U+6bb8-6bb9,U+6bbb,U+6bbd-6bbe,U+6bc3-6bc4,U+6bc7-6bca,U+6bcc,U+6bce,U+6bd0-6bd1,U+6bd8,U+6bda,U+6bdc-6be0,U+6be2-6be9,U+6bec-6bee,U+6bf0-6bf2,U+6bf4,U+6bf6-6bf8,U+6bfa-6bfc,U+6bfe,U+6c00-6c04,U+6c09-6c0b,U+6c0e,U+6c12,U+6c17,U+6c1c-6c1e,U+6c20,U+6c25,U+6c2d,U+6c31,U+6c36-6c37,U+6c3a-6c3c,U+6c3e-6c3f,U+6c43-6c45,U+6c48,U+6c4b-6c4f,U+6c51-6c53,U+6c56,U+6c58,U+6c5a,U+6c62-6c63,U+6c65-6c67,U+6c6b-6c6f,U+6c71,U+6c73,U+6c75,U+6c77-6c78,U+6c7b-6c7c,U+6c7f;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./145.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+6a87-6a88,U+6a8a-6a8d,U+6a8f,U+6a92-6a93,U+6a95-6a96,U+6a98-6a9b,U+6a9d-6a9f,U+6aa1,U+6aa4-6aa8,U+6aaa,U+6aad-6ab2,U+6ab4-6ab7,U+6ab9-6aba,U+6abc-6abd,U+6abf-6ac2,U+6ac4-6ad2,U+6ad4-6ad9,U+6adc,U+6ae0-6ae4,U+6ae6,U+6ae9,U+6aed-6af0,U+6af2,U+6af4-6af7,U+6af9-6afa,U+6afc-6b03,U+6b05-6b09,U+6b0b-6b0e,U+6b10-6b11,U+6b13-6b15,U+6b17-6b1d,U+6b1f,U+6b25-6b26,U+6b28-6b29;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./144.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+69b3,U+69b5-69b6,U+69b8-69ba,U+69bc-69be,U+69c0,U+69c2-69c9,U+69cf,U+69d1-69d2,U+69d5-69da,U+69dc-69de,U+69e1-69e6,U+69e9,U+69eb-69ec,U+69ee-69f1,U+69f4-69fc,U+69fe,U+6a00,U+6a03-6a04,U+6a06-6a09,U+6a0b-6a10,U+6a12,U+6a14-6a16,U+6a1a-6a1d,U+6a20,U+6a22,U+6a24-6a27,U+6a29,U+6a2b-6a2e,U+6a30,U+6a32-6a33,U+6a36-6a37,U+6a3b-6a3c,U+6a3f-6a43,U+6a45-6a46,U+6a49-6a4a,U+6a4c-6a4f,U+6a51-6a57,U+6a5a,U+6a5c-6a5e,U+6a60,U+6a63-6a64,U+6a66-6a6a,U+6a6c-6a70,U+6a72-6a78,U+6a7a-6a7b,U+6a7d-6a7f,U+6a82-6a83,U+6a85-6a86;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./143.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+68ab-68ac,U+68ae,U+68b1-68b2,U+68b4,U+68b6-68bf,U+68c1,U+68c3,U+68c5-68c8,U+68cc,U+68ce-68d1,U+68d3-68d4,U+68d9,U+68db-68de,U+68e1-68e2,U+68e4-68e6,U+68e8-68eb,U+68ed,U+68ef,U+68f3-68f4,U+68f6-68f8,U+68fb,U+68fd-6900,U+6902-6904,U+6906-690a,U+690c,U+6911,U+6913-691e,U+6921-6923,U+6925-692c,U+692e-692f,U+6931-6933,U+6935-6938,U+693a-693c,U+693e,U+6940-6941,U+6943-6949,U+694b-6952,U+6955-6956,U+6958-6959,U+695b-695c,U+695f,U+6961-6962,U+6964-6965,U+6967,U+6969-696a,U+696c,U+696f-6970,U+6972-6974,U+6976,U+697a-697b,U+697d-697f,U+6981,U+6983,U+6985,U+698a-698c,U+698e-6993,U+6996-6997,U+6999-699a,U+699d-69a6,U+69a9,U+69ac,U+69af-69b0,U+69b2;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./142.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+6712-6713,U+6716,U+6718-671a,U+671c,U+671e,U+6720-6725,U+6729,U+672e,U+6730,U+6732-6733,U+6737-6739,U+673b-673c,U+673e-673f,U+6741,U+6744-6745,U+6747,U+674a-674b,U+674d,U+6752,U+6754-6755,U+6757-675b,U+675d,U+6762-6764,U+6766-6767,U+676b-676c,U+676e,U+6774,U+6776,U+6778-677b,U+677d,U+6780,U+6782-6783,U+6785-6786,U+6788,U+678a,U+678c-678f,U+6791-6794,U+6796,U+6799,U+679b,U+679f-67a1,U+67a4,U+67a6,U+67a9,U+67ac,U+67ae,U+67b1-67b2,U+67b4,U+67b9-67c0,U+67c2,U+67c5-67ce,U+67d5-67d7,U+67db,U+67df,U+67e1,U+67e3-67e4,U+67e6-67e8,U+67ea-67eb,U+67ed-67ee,U+67f2,U+67f6-67fa,U+67fc,U+67fe,U+6801-6804,U+6806,U+680d,U+6810,U+6812,U+6814-6815,U+6818-681c,U+681e-6820,U+6822-6828,U+682b-6831,U+6834-6836,U+683a-683b,U+683f,U+6847,U+684b,U+684d,U+684f,U+6852,U+6856-685f,U+686a,U+686c-6873,U+6875,U+6878-687e,U+6880,U+6882,U+6884,U+6887-688e,U+6890-6892,U+6895-6896,U+6899-689c,U+689e,U+68a0-68a1,U+68a3-68a5,U+68a9-68aa;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./141.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+65dd-65df,U+65e1,U+65e4,U+65ea-65eb,U+65f2-65f5,U+65f8-65f9,U+65fb-65ff,U+6601,U+6604-6605,U+6607-6609,U+660b,U+660d,U+6610-6612,U+6616-6618,U+661a-661c,U+661e,U+6621-6624,U+6626,U+6629-662c,U+662e,U+6630,U+6632-6633,U+6637-663b,U+663d,U+663f-6640,U+6644-6648,U+664a,U+664d-664e,U+6650-6651,U+6658-6659,U+665b-665c,U+665e,U+6660,U+6662-6663,U+6665,U+6667,U+6669-666d,U+6671-6673,U+6675,U+6678-6679,U+667b-667d,U+667f-6681,U+6683,U+6685-6686,U+668a-668b,U+668d-6690,U+6692-6695,U+6698-669c,U+669e-66a1,U+66a3-66a6,U+66a9-66aa,U+66ac-66ad,U+66af-66b0,U+66b2-66b3,U+66b5-66b8,U+66ba-66bd,U+66bf-66c3,U+66c5-66c6,U+66c8,U+66ca-66d5,U+66d7-66d8,U+66da,U+66de-66df,U+66e1-66e5,U+66e7-66e8,U+66ea-66eb,U+66ed-66ef,U+66f1,U+66f5-66f6,U+66fa-66fb,U+66fd,U+6701-6702,U+6704-6707,U+670c,U+670e-670f,U+6711;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./138.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+61de,U+61e0-61e2,U+61e4-61e5,U+61e7,U+61e9-61f1,U+61f3-61f4,U+61f9,U+61fb,U+61fd,U+6201-6205,U+6209,U+6213,U+6219,U+621c-621e,U+6220,U+6223,U+6226,U+6228,U+622b,U+622d,U+622f,U+6231,U+6235,U+6238-623c,U+6242,U+6244-6246,U+624a,U+624f-6250,U+6255-6257,U+6259-625a,U+625c-6260,U+6262,U+6264-6265,U+6268,U+6271-6272,U+6274-6275,U+6277-6278,U+627a-627b,U+627d,U+6281-6283,U+6285-6288,U+628b-6290,U+6294,U+6299,U+629c-629e,U+62a3,U+62a6-62a7,U+62a9-62aa,U+62ad-62b0,U+62b2-62b4,U+62b6-62b8,U+62ba,U+62be,U+62c0-62c1,U+62c3,U+62cf,U+62d1,U+62d5,U+62de,U+62e0-62e1,U+62e4,U+62ea-62eb,U+62f0,U+62f2,U+62f5,U+62f8-62fb,U+6300,U+6303-6306,U+630a-630d,U+630f-6310,U+6312-6315,U+6317-6319,U+631c,U+6326-6327,U+6329,U+632c-632e,U+6330,U+6333-6338,U+633b-633c,U+633f-6341,U+6344,U+6347-6348,U+634a,U+6351-6354,U+6356-635d,U+6360,U+6364-6366,U+636a,U+636c,U+636f-6370,U+6373-6375,U+6378-6379,U+637c-637f,U+6381,U+6385-6386,U+638b,U+638d,U+6391,U+6393-6395,U+6397,U+639a,U+639c;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./139.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+639d-639f,U+63a1,U+63a4,U+63a6,U+63ab,U+63af,U+63b1-63b2,U+63b5-63b6,U+63b9,U+63bb,U+63bd,U+63bf,U+63c1-63c3,U+63c5,U+63c7-63c8,U+63ca-63cc,U+63d1,U+63d3-63d5,U+63d7-63d9,U+63dc-63dd,U+63df,U+63e2,U+63e4-63e8,U+63eb-63ec,U+63ef-63f1,U+63f3,U+63f5,U+63f7,U+63fa-63fc,U+63fe,U+6403-6404,U+6406-640a,U+640e,U+6411-6412,U+6415,U+6418-641a,U+641d,U+641f,U+6422-6424,U+6427-6429,U+642b,U+642e-6433,U+6435,U+6437-6439,U+643b-643c,U+643e,U+6442-6443,U+6449,U+644b-6450,U+6453,U+6455-6457,U+6459-645b,U+645d,U+6460-6462,U+6464-6466,U+6468,U+646a-646c,U+646e,U+6470-6472,U+6474-6475,U+6477,U+647c-6481,U+6483,U+6486,U+6489-648f,U+6494,U+6497-6498,U+649b-649d,U+64a0-64a2,U+64a6-64a8,U+64aa,U+64af,U+64b1,U+64b4,U+64b6,U+64b9,U+64bd,U+64c3,U+64c6,U+64c8-64c9,U+64cc,U+64cf,U+64d1;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./140.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+64d3,U+64d5-64d6,U+64d9,U+64db-64dd,U+64df,U+64e3,U+64e5,U+64e7-64eb,U+64ed-64ee,U+64f3,U+64f5-64f6,U+64f8-64f9,U+64fd,U+64ff,U+6501-6503,U+6505,U+6507-6508,U+650a-650e,U+6510-6511,U+6513,U+6515,U+6517,U+651a,U+651e-6521,U+6526-6529,U+652d,U+6530-6533,U+6537,U+653a,U+653c-653d,U+6540-6544,U+6546-6547,U+654a-654b,U+654d,U+6550,U+6552-6554,U+655a,U+655c,U+655f-6561,U+6564-6565,U+6567-656a,U+656d-656f,U+6571,U+6573,U+6576,U+6579-6581,U+6584-6586,U+6588-658a,U+658d-658f,U+6592,U+6594,U+6596,U+6598,U+659a,U+659d-659e,U+65a0,U+65a2-65a3,U+65a6,U+65a8,U+65aa,U+65ae,U+65b1-65b6,U+65b8,U+65ba-65bb,U+65be-65c0,U+65c7-65ca,U+65cd,U+65d0-65d1,U+65d3-65d5,U+65d8-65dc;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./136.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+5f3e-5f3f,U+5f41-5f47,U+5f49-5f4b,U+5f4d,U+5f4f,U+5f51,U+5f54,U+5f59-5f5c,U+5f5f-5f60,U+5f63,U+5f67-5f68,U+5f6b,U+5f6e-5f6f,U+5f72,U+5f74-5f76,U+5f78,U+5f7a,U+5f7d-5f7e,U+5f83,U+5f86,U+5f8d-5f8f,U+5f93-5f94,U+5f96,U+5f9a-5f9b,U+5f9d,U+5f9f,U+5fa2-5fa7,U+5fab-5fac,U+5faf-5fb4,U+5fb6,U+5fb8,U+5fba-5fbb,U+5fbe-5fc2,U+5fc7-5fc8,U+5fca-5fcb,U+5fce,U+5fd3-5fd5,U+5fda-5fdc,U+5fde-5fdf,U+5fe2-5fe3,U+5fe5-5fe6,U+5fe8-5fe9,U+5fec,U+5fef-5ff0,U+5ff2-5ff4,U+5ff6-5ff7,U+5ff9-5ffa,U+5ffc,U+6007-6009,U+600b-600c,U+6010-6011,U+6013,U+6017-6018,U+601a,U+601e-601f,U+6022-6024,U+602c-602e,U+6030-6034,U+6036-603a,U+603d-603e,U+6040,U+6044-6045,U+6047-604a,U+604c,U+604e-604f,U+6051,U+6053-6054,U+6056-6058,U+605b-605c,U+605e-6061,U+6066,U+606e,U+6071-6072,U+6074-6075,U+6077,U+607e,U+6080-6082,U+6086-6088,U+608a-608b,U+608e-6091,U+6093,U+6095,U+6097-6099,U+609c,U+609e,U+60a1-60a2,U+60a4-60a5,U+60a7,U+60a9-60aa,U+60ae,U+60b0,U+60b3,U+60b7,U+60b9-60ba,U+60be-60c4,U+60c7-60c9,U+60cc-60d0;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./137.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+60d2-60d4,U+60d6-60d7,U+60d9,U+60db,U+60de,U+60e2-60e5,U+60ea,U+60f5,U+60f7-60f8,U+60fc-60ff,U+6102-6105,U+6107,U+610a-610c,U+6110-6114,U+6116-6119,U+611d-611e,U+6121-6122,U+6125,U+6129-612a,U+612c-6133,U+6135-6136,U+6138-613d,U+6140-6141,U+6143,U+6145-6147,U+6149,U+614f-6150,U+6152-6154,U+6156-6157,U+6159,U+615b-615c,U+615e,U+6160-6161,U+6164-6166,U+6169,U+616c-616d,U+616f,U+6171-6172,U+6174,U+6178-617b,U+617d,U+617f-6181,U+6183-6189,U+618c-618d,U+618f,U+6193,U+6195-6199,U+619b-619c,U+619e-61a3,U+61a5-61a6,U+61aa,U+61ad,U+61af-61b1,U+61b3-61b5,U+61b8-61bd,U+61bf-61c1,U+61c3-61c6,U+61ce-61d0,U+61d3,U+61d5-61dd;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./135.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+5dc8-5dca,U+5dcc,U+5dce-5dd1,U+5dd3,U+5dd5,U+5dd7-5dda,U+5ddc,U+5ddf-5de0,U+5de4,U+5dea,U+5dec-5ded,U+5df5-5df6,U+5df8,U+5dfa-5dfc,U+5dff-5e00,U+5e04,U+5e07,U+5e09-5e0b,U+5e0d-5e0e,U+5e12-5e13,U+5e17,U+5e1e-5e24,U+5e28-5e2a,U+5e2c,U+5e2f-5e30,U+5e32,U+5e34-5e35,U+5e39-5e3a,U+5e3e-5e3f,U+5e41,U+5e46-5e4b,U+5e4d-5e53,U+5e56,U+5e59-5e5a,U+5e5c-5e5d,U+5e60,U+5e64-5e6a,U+5e6d-5e71,U+5e75,U+5e77,U+5e81-5e83,U+5e85,U+5e88-5e89,U+5e8c-5e8e,U+5e92,U+5e98,U+5e9b,U+5e9d,U+5ea1-5ea4,U+5ea8-5eaa,U+5eac,U+5eae-5eb2,U+5eb4,U+5eba-5ebd,U+5ebf-5ec0,U+5ec3,U+5ec5-5ec7,U+5ecb-5ed0,U+5ed4-5ed5,U+5ed7-5ed9,U+5edc,U+5ede,U+5ee0,U+5ee4-5ee7,U+5eeb,U+5eed-5ef2,U+5ef5,U+5ef8-5ef9,U+5efb-5efd,U+5f05-5f07,U+5f09,U+5f0c-5f0e,U+5f10,U+5f16,U+5f19-5f1a,U+5f1c-5f1e,U+5f21-5f24,U+5f28,U+5f2b-5f2c,U+5f2e,U+5f30,U+5f32,U+5f34,U+5f36,U+5f38,U+5f3b,U+5f3d;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./134.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+5ce2-5ce3,U+5ce7,U+5ceb-5cec,U+5cee,U+5cf1-5cf3,U+5cf5,U+5cf7-5cfa,U+5cfc,U+5cfe-5d01,U+5d04-5d05,U+5d08-5d0c,U+5d0f-5d10,U+5d12-5d13,U+5d15,U+5d18-5d1a,U+5d1c-5d1d,U+5d1f-5d21,U+5d23,U+5d25,U+5d28,U+5d2a-5d2b,U+5d2f-5d32,U+5d35-5d3c,U+5d3f-5d46,U+5d48-5d49,U+5d4d-5d4f,U+5d51-5d57,U+5d59-5d5a,U+5d5c,U+5d5e-5d68,U+5d6a,U+5d6d-5d6e,U+5d70-5d73,U+5d75-5d80,U+5d83,U+5d85-5d86,U+5d88-5d96,U+5d98,U+5d9a-5d9c,U+5d9e-5d9f,U+5da1-5da6,U+5da8-5db3,U+5db5-5db6,U+5db9,U+5dbb,U+5dbe-5dc4,U+5dc6-5dc7;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./133.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+5b3c-5b3f,U+5b41-5b42,U+5b44-5b4b,U+5b4d-5b4f,U+5b52,U+5b56,U+5b5e,U+5b60-5b61,U+5b67-5b68,U+5b6d-5b6f,U+5b72,U+5b74,U+5b77,U+5b79,U+5b7b-5b7c,U+5b7e,U+5b82,U+5b86,U+5b8a,U+5b8d-5b8e,U+5b90-5b92,U+5b94,U+5b96,U+5b9f,U+5ba7-5ba9,U+5bac-5bad,U+5baf,U+5bb1-5bb2,U+5bb7,U+5bba-5bbc,U+5bc0-5bc1,U+5bc3,U+5bc8-5bcb,U+5bcd-5bcf,U+5bd1,U+5bd4-5bdc,U+5be0,U+5be3,U+5bea,U+5bed,U+5bef,U+5bf1-5bf4,U+5bf7,U+5bfd-5bfe,U+5c00,U+5c02-5c03,U+5c05,U+5c0c,U+5c10,U+5c12-5c13,U+5c17,U+5c19,U+5c1b,U+5c1e-5c21,U+5c23,U+5c26,U+5c28-5c2b,U+5c2d-5c30,U+5c32-5c33,U+5c35-5c36,U+5c43-5c44,U+5c47,U+5c4c,U+5c52-5c54,U+5c56-5c58,U+5c5a,U+5c5d,U+5c5f,U+5c67,U+5c69-5c6b,U+5c6d,U+5c70,U+5c72-5c78,U+5c7b-5c7e,U+5c80,U+5c83-5c87,U+5c89-5c8b,U+5c8e-5c8f,U+5c92-5c93,U+5c95,U+5c9d-5ca0,U+5ca4-5ca8,U+5caa,U+5cae-5cb0,U+5cb2,U+5cb4,U+5cb6,U+5cb9-5cbc,U+5cbe,U+5cc0,U+5cc2-5cc3,U+5cc5-5cca,U+5ccc-5cd1,U+5cd3-5cd8,U+5cda-5ce0;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./132.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+5a70-5a73,U+5a78-5a79,U+5a7b-5a7e,U+5a80-5a91,U+5a93-5a99,U+5a9c-5aa6,U+5aa8-5aa9,U+5aab-5ab1,U+5ab4,U+5ab6-5ab7,U+5ab9-5abb,U+5abf-5ac0,U+5ac3-5ac8,U+5aca,U+5acd-5ad1,U+5ad3,U+5ad5,U+5ad9-5adb,U+5add-5adf,U+5ae2,U+5ae4-5ae5,U+5ae7-5ae8,U+5aea,U+5aec-5af0,U+5af2-5af4,U+5af6-5af9,U+5afb-5aff,U+5b01-5b07,U+5b0a,U+5b0d-5b15,U+5b18,U+5b1a-5b20,U+5b22-5b23,U+5b25-5b29,U+5b2b-5b2f,U+5b31,U+5b33,U+5b35-5b36,U+5b39-5b3b;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./131.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+590e,U+5910-5913,U+5917-5918,U+591b,U+591d-591e,U+5921,U+5923,U+5926,U+5928,U+592c,U+5930,U+5932-5933,U+5935-5936,U+593b,U+593d,U+593f-5940,U+5943,U+5945-5946,U+594a,U+594c-594d,U+5952-5953,U+5959,U+595b-595f,U+5961,U+5963-5964,U+5966,U+5968,U+596b-596d,U+596f-5972,U+5975,U+5977,U+597a-597b,U+597e-5980,U+5985,U+5989,U+598b-598c,U+598e-5991,U+5994-5995,U+5998,U+599a-599c,U+599f-59a2,U+59a6-59a7,U+59ac-59ad,U+59b0-59b1,U+59b4-59b8,U+59ba,U+59bc-59bd,U+59bf-59c5,U+59c7-59c9,U+59cc,U+59ce-59cf,U+59d5-59d6,U+59d9,U+59db,U+59de-59e2,U+59e4,U+59e7,U+59e9-59eb,U+59ed-59f8,U+59fa,U+59fc-59fe,U+5a00,U+5a02,U+5a0a-5a0b,U+5a0d-5a10,U+5a12,U+5a14-5a17,U+5a19-5a1a,U+5a1d-5a1e,U+5a21-5a22,U+5a24,U+5a26-5a28,U+5a2a-5a30,U+5a33,U+5a35,U+5a37-5a3b,U+5a3d-5a3f,U+5a42-5a45,U+5a47-5a48,U+5a4b-5a54,U+5a56-5a59,U+5a5b-5a61,U+5a63-5a65,U+5a68-5a69,U+5a6b-5a6c,U+5a6e-5a6f;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./130.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+581c,U+581f,U+5822-5823,U+5825-5829,U+582b-582e,U+5832-5833,U+5836-5843,U+5845-5849,U+584e,U+5850,U+5853,U+5855-5857,U+5859,U+585b-585d,U+585f-5861,U+5863-5864,U+5866-586a,U+586d-5874,U+5876-5878,U+587a-587d,U+587f,U+5882,U+5884,U+5886-5888,U+588b-5891,U+5894-5898,U+589b,U+589d,U+58a0-58a7,U+58aa-58ad,U+58af-58b2,U+58b4-58bb,U+58bd,U+58bf-58c0,U+58c2-58c4,U+58c6,U+58c8-58cd,U+58cf-58d0,U+58d2,U+58d4,U+58d6-58d7,U+58db-58dd,U+58e1,U+58e3,U+58e5-58e8,U+58ea,U+58ed,U+58f1-58f2,U+58f4-58f5,U+58f7-58f8,U+58fb-58fc,U+58fe-5901,U+5903,U+5905-5906,U+5908-590c;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./129.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+56ac-56ae,U+56b0-56b2,U+56b5,U+56b8-56bb,U+56bd-56bf,U+56c3-56c4,U+56c6-56c7,U+56c9,U+56cb-56d0,U+56d2-56d3,U+56d5-56d6,U+56d8-56d9,U+56dc,U+56e3,U+56e5-56e9,U+56ec,U+56ee-56ef,U+56f2-56f3,U+56f6-56f8,U+56fb-56fc,U+5700-5702,U+5705,U+570c,U+570e,U+5710-5711,U+5714-5715,U+5717,U+5719-571b,U+571d-571e,U+5720-5722,U+5724-5727,U+572b,U+5731-5732,U+5734-5738,U+573c-573d,U+573f,U+5741,U+5743-5746,U+5748-5749,U+574b,U+5752-5756,U+5758-5759,U+5762-5763,U+5765,U+5767,U+576c,U+576e,U+5771-5772,U+5774-5775,U+5778-577a,U+577d-5781,U+5787-578a,U+578d-5791,U+5794-579a,U+579d-579f,U+57a5,U+57a8,U+57aa,U+57ac,U+57af-57b1,U+57b3,U+57b6-57b7,U+57b9-57c1,U+57c4-57ca,U+57cc-57cd,U+57d0-57d1,U+57d3,U+57d6-57d7,U+57db-57dc,U+57de,U+57e2-57e3,U+57e5-57ec,U+57ee,U+57f0-57f3,U+57f5-57f6,U+57fb-57fc,U+57fe-57ff,U+5801,U+5803-5804,U+5808-5809,U+580c,U+580e-5810,U+5812-5814,U+5817-5818,U+581a-581b;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./128.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+5568-5569,U+556b,U+556f-5574,U+5579-557a,U+557d,U+557f,U+5585,U+558c-558e,U+5590,U+5592-5593,U+5595-5597,U+559b,U+55a0-55a6,U+55a8-55a9,U+55ad,U+55af-55b0,U+55b4,U+55b6,U+55b8,U+55ba,U+55bc,U+55bf-55c3,U+55c8,U+55ca-55cb,U+55cf-55d0,U+55d5,U+55d7-55d9,U+55db,U+55de,U+55e0,U+55e2,U+55e7,U+55ed-55ee,U+55f0-55f1,U+55f4,U+55f8-55fc,U+55ff,U+5602-5605,U+5607,U+560a-560b,U+5610-5613,U+5615,U+5619-561a,U+561d,U+5620-5622,U+5625-5626,U+5628-562b,U+5633,U+5637,U+563a,U+563c-563e,U+5640-5644,U+5646-564b,U+564f-5652,U+5655-5656,U+565a-565b,U+565e-565f,U+5661,U+5663,U+5667,U+566d-566e,U+5670,U+5673,U+5675,U+5677,U+5679-567a,U+567d-567f,U+5681-5684,U+5688-568b,U+568d,U+5690-5692,U+5696-56a2,U+56a4,U+56a7,U+56a9-56ab;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./127.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+531f,U+5322,U+5324-5325,U+5327-5329,U+532b-532c,U+5330,U+5332-5338,U+533c-533d,U+5342,U+5344,U+5346,U+534b-534d,U+5350,U+5358-5359,U+535b,U+535d,U+5365,U+5368,U+536a,U+536c-536d,U+5372,U+5376,U+537c,U+537e,U+5380-5381,U+5383,U+5387-5388,U+538a,U+538e-5394,U+5396-5397,U+539b-539c,U+539e,U+53a0-53a1,U+53a4,U+53a7,U+53aa-53ac,U+53af-53b1,U+53b3,U+53b5,U+53b7-53ba,U+53bc-53be,U+53c0,U+53c5-53c7,U+53ce-53d0,U+53d2-53d3,U+53d5,U+53da,U+53dc-53de,U+53e1,U+53e7,U+53f4,U+53fa,U+53fe-5400,U+5402,U+5405,U+5407,U+540b,U+5414,U+5418-541a,U+541c,U+5422,U+5424-5425,U+542a,U+5430,U+5437,U+543a,U+543d,U+543f,U+5441,U+5444-5445,U+5447,U+5449,U+544c-544f,U+545a,U+545d-5461,U+5463,U+5465,U+5467,U+5469-5470,U+5474,U+5479-547a,U+547e-547f,U+5481,U+5483,U+5485,U+5487-548a,U+548d,U+5491,U+5493,U+5497-5498,U+549c,U+549e-54a2,U+54a5,U+54ae,U+54b0,U+54b2,U+54b5-54b7,U+54b9-54ba,U+54be,U+54c3,U+54c5,U+54ca-54cb,U+54d6,U+54d8,U+54db,U+54e0,U+54e3-54e4,U+54eb-54ec,U+54ef-54f1,U+54f4-54f9,U+54fb,U+54fe,U+5500,U+5502-5503,U+5505,U+5508,U+550a-550e,U+5512-5513,U+5516-5519,U+551c-551f,U+5521,U+5525-5526,U+5528-5529,U+552b,U+552d,U+5532,U+5534-5536,U+5539-553b,U+553d,U+5540,U+5542,U+5545,U+5547-5548,U+554b-554e,U+5551-5552,U+5554,U+5557-555b,U+555d,U+555f-5560,U+5562-5563;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./126.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+5186-5187,U+518b,U+518e-5190,U+5193-5194,U+5198,U+519a,U+519d-519f,U+51a1,U+51a3,U+51a6-51a9,U+51ad-51ae,U+51b4,U+51b8-51ba,U+51be-51bf,U+51c1-51c3,U+51c5,U+51c8,U+51ca,U+51ce,U+51d0,U+51d2-51da,U+51de-51df,U+51e2-51e3,U+51e5-51ea,U+51ec,U+51ee,U+51f2,U+51f4,U+51f7,U+51fe,U+5204-5205,U+5209,U+520b-520c,U+520f-5210,U+5213-5215,U+521c,U+521e-521f,U+5221-5223,U+5226-5227,U+522c,U+522f,U+5231-5232,U+5234-5235,U+523c,U+523e,U+5245-5246,U+5248-5249,U+524f,U+5252-5253,U+5255,U+5257-525a,U+525f-5260,U+5262-5264,U+5266,U+5268,U+526b-526d,U+5271,U+5273,U+5276-527c,U+527e,U+5280,U+5285-5286,U+528b,U+528e-528f,U+5292,U+5294-529a,U+529c,U+52a4-52a7,U+52ae-52b0,U+52b4-52bd,U+52c0,U+52c2,U+52c4-52c6,U+52c8,U+52ca,U+52cc-52cf,U+52d1,U+52d3-52d4,U+52d7,U+52da-52dc,U+52e0-52e1,U+52e3,U+52e5-52ef,U+52f2,U+52f4,U+52f6-52f7,U+52fc-52fd,U+5301-5304,U+5307,U+5309-530c,U+530e,U+5311-5314,U+5318,U+531b-531c,U+531e,U+32f99,U+32f9d,U+33069,U+3312e,U+331eb,U+3321b,U+332e9,U+332ed-332ee,U+332f3,U+33398,U+33400,U+3340a;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./125.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+5072-5073,U+5079-507a,U+507c-507d,U+5081-5084,U+5086-5087,U+5089-508c,U+508e-5090,U+5092-5095,U+5097,U+509a-50a1,U+50a4,U+50a6,U+50aa-50ab,U+50ae,U+50b0-50b1,U+50b6,U+50b8-50b9,U+50bc-50bd,U+50bf-50c1,U+50c3-50c4,U+50c6-50c8,U+50ca-50ce,U+50d0,U+50d2-50d4,U+50d7-50d9,U+50db-50dd,U+50df-50e4,U+50e9-50eb,U+50ef-50f0,U+50f2,U+50f4,U+50f6-50f8,U+50fa,U+50fc-50ff,U+5103,U+5105,U+510a,U+510c,U+510e-510f,U+5111,U+5113,U+5116-511e,U+5120,U+5122-5129,U+512b-5131,U+5133-5136,U+5138-5139,U+513d-513e,U+5142,U+514a,U+514e-5150,U+5153,U+5158-5159,U+515b,U+515d-5161,U+5163-5164,U+5166,U+516f,U+5172,U+517a,U+517e-517f,U+5183-5184,U+324d6,U+324dc,U+32625,U+3263f,U+3277b,U+327f1,U+32800,U+3280d,U+329e4,U+32a14,U+32c39,U+32c3c,U+32db9-32dba,U+32dc7,U+32e30,U+32e8b,U+32f17;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./124.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4f02-4f08,U+4f0b-4f0c,U+4f12-4f14,U+4f16,U+4f1c-4f1d,U+4f21,U+4f23,U+4f28-4f29,U+4f2c-4f2e,U+4f31,U+4f33,U+4f35,U+4f37,U+4f39,U+4f3b,U+4f3e-4f42,U+4f44-4f45,U+4f49-4f4c,U+4f52,U+4f56,U+4f61-4f62,U+4f66,U+4f68,U+4f6a-4f6b,U+4f6d-4f6e,U+4f71-4f72,U+4f75,U+4f77-4f7a,U+4f7d,U+4f80-4f82,U+4f85,U+4f87,U+4f8a,U+4f8c,U+4f8e,U+4f90,U+4f92-4f93,U+4f95,U+4f98-4f9a,U+4f9c,U+4f9e-4f9f,U+4fa1-4fa2,U+4fa4,U+4fab,U+4fad,U+4fb0-4fb4,U+4fb8-4fbe,U+4fc0,U+4fc2,U+4fc6-4fc9,U+4fcb-4fcd,U+4fd2-4fd6,U+4fd9,U+4fdb,U+4fe2,U+4fe4-4fe5,U+4fe7,U+4feb,U+4ff0,U+4ff2,U+4ff4-4ff7,U+4ff9,U+4ffb-4ffd,U+4fff,U+5001-5005,U+5007-5008,U+500a,U+500e,U+5010,U+5013,U+5015,U+5017,U+501b,U+501d-501e,U+5020,U+5022-5024,U+5027,U+502f-5039,U+503b,U+503d,U+503f-5042,U+5044-5046,U+504a-504b,U+504d,U+5050-5054,U+5056-5059,U+505b,U+505d-5064,U+5066-506b,U+506d-5071,U+31677,U+316a6,U+316e5,U+3176b-3176c,U+317db,U+318c9,U+3190f,U+31ac9,U+31b92,U+31b9c,U+31bb8,U+31bc4,U+31bcd,U+31c17,U+31c1b,U+31c2e,U+31c3e,U+31c7f,U+31cea,U+31d1f,U+31d31,U+31e07,U+31e25,U+31e40,U+31e4d,U+31eb0,U+31f00,U+31f11,U+32003,U+32070,U+32084,U+3208d-3208e,U+32117,U+3211a,U+321f4,U+321fd,U+32217,U+32235,U+32239,U+32245,U+322e4,U+3234c,U+3235b,U+3236d,U+3237f,U+323bf,U+323c6,U+32402;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./123.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4de2-4dff,U+4e02,U+4e04-4e06,U+4e0f,U+4e12,U+4e17,U+4e20-4e21,U+4e23,U+4e29,U+4e2e-4e2f,U+4e31,U+4e33,U+4e35,U+4e37,U+4e3c,U+4e40-4e42,U+4e44,U+4e46,U+4e4a,U+4e51,U+4e55,U+4e57,U+4e5a-4e5b,U+4e62-4e65,U+4e67-4e68,U+4e6a-4e6f,U+4e72,U+4e74-4e7d,U+4e7f-4e81,U+4e83-4e85,U+4e87,U+4e8a,U+4e90,U+4e96-4e97,U+4e9c-4e9d,U+4ea3,U+4eaa,U+4eaf-4eb1,U+4eb4,U+4eb6-4eb9,U+4ebc-4ebe,U+4ec8,U+4ecc,U+4ecf-4ed0,U+4ed2,U+4eda-4edc,U+4ee0,U+4ee2,U+4ee6-4ee7,U+4ee9,U+4eed-4eef,U+4ef1,U+4ef4,U+4ef8-4efa,U+4efc,U+4efe,U+4f00,U+30afd-30afe,U+30b04,U+30b0a,U+30b14-30b15,U+30b18,U+30b2a,U+30b38,U+30b43,U+30b4b,U+30b5d,U+30b87,U+30ba4,U+30bf2,U+30bf6,U+30bfc,U+30c1f,U+30c21,U+30c24,U+30c28,U+30c2b-30c2c,U+30c53,U+30c5f,U+30c69,U+30c71-30c72,U+30cbd,U+30cc7,U+30d4b,U+30d55,U+30d5d-30d5f,U+30d63-30d64,U+30d66-30d67,U+30d69,U+30d74,U+30d7c,U+30d8a,U+30d8c,U+30ddf-30de0,U+30de3,U+30de5-30de6,U+30e01,U+30e04,U+30e6c,U+30e70,U+30e72,U+30e77,U+30e79,U+30edd-30ede,U+30f03,U+30f57,U+30f59-30f5a,U+30f5c,U+30f5f,U+30f62,U+30f64,U+30f66,U+30f6a,U+30f74,U+30f7c-30f7d,U+30f82,U+30f91,U+30f9b,U+30fa0,U+30fab,U+3106c,U+31076,U+31090,U+310a8-310aa,U+310b1,U+310ea,U+310f1,U+310fa,U+31148,U+3114b-3114c,U+31151,U+3115b,U+311a5,U+311cf,U+311d1-311d2,U+311dd,U+311e3,U+311eb,U+311ee,U+311f1,U+311f3,U+311f6,U+311fb,U+311fe,U+31203,U+3120c,U+3124d,U+31250,U+31254,U+31270,U+31275,U+3127b-3127c,U+31283,U+31288,U+3128a,U+3128c,U+312ac-312ad,U+312b3,U+312d0,U+3132e,U+31342,U+31357,U+313bc,U+313f1,U+313ff,U+3143f,U+31455,U+3145e,U+3154c,U+31587,U+3158e,U+31592,U+315e9;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./122.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4d70-4de1,U+3067d,U+306d1-306d3,U+306e6,U+306ec,U+306f4,U+30708,U+30729,U+30733,U+30776,U+30787,U+307d8,U+30828,U+30831,U+30842,U+30849,U+30853,U+30858,U+308ca,U+308f2,U+308fb,U+30915,U+3094c,U+3094f,U+30955,U+3095b,U+30969,U+30993,U+3099c,U+309aa-309ab,U+309c9,U+30a16,U+30a1b,U+30a62,U+30a67,U+30aa9,U+30ab1,U+30abf;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./120.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4caa-4d0d,U+30001-30002,U+30004-30006,U+30008-30009,U+30020-30022,U+30053,U+3005c,U+30061,U+3006c,U+30072,U+30078,U+3007c,U+3008e,U+300dd,U+300ee,U+300f7,U+3011d,U+30149-3014a,U+30170,U+30174,U+30179,U+3018a,U+30196,U+301b3,U+301bb,U+301db,U+301e0,U+301e2-301e3,U+301f0,U+30270;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./121.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4d0e-4d6f,U+302c0,U+302d9,U+302db-302dc,U+302de,U+302f7,U+302fb,U+30300,U+30302,U+30335,U+3033b,U+3034e,U+30367-30368,U+30370-30371,U+30396,U+303a0,U+30409,U+30414,U+3043a,U+3043f,U+3044a,U+3044c,U+30450,U+3045d-3045e,U+304bc,U+304ca,U+304cc,U+304d9,U+304e2-304e3,U+304e8,U+304ec-304ed,U+3057a,U+305d1,U+305d6,U+305dc-305dd,U+305e3,U+305f6;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./119.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4c3b-4ca9;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./118.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4bda-4c3a,U+2f804,U+2f80f,U+2f818,U+2f81a,U+2f822,U+2f828,U+2f82c,U+2f833,U+2f83b,U+2f83f,U+2f852,U+2f862,U+2f86d,U+2f873,U+2f877-2f878,U+2f884,U+2f89a-2f89b,U+2f8ac,U+2f8b2,U+2f8b6,U+2f8d2-2f8d3,U+2f8db-2f8dc,U+2f8e1,U+2f8ea,U+2f8ed,U+2f8fc,U+2f903,U+2f90b,U+2f90f,U+2f91a,U+2f920-2f921,U+2f945,U+2f947,U+2f96c,U+2f995,U+2f9d0,U+2f9de-2f9df,U+2f9f4;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./117.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4b5c-4bd9;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./116.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4ade-4b5b,U+2ecf4,U+2ecfc,U+2ed3f,U+2edcc-2edcd,U+2edf5,U+2ee5d;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./115.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4a6b-4add,U+2e8f2-2e8f7,U+2e932,U+2e9f4-2e9f5,U+2ea3b,U+2ea5b,U+2ea5d-2ea5e,U+2eaa5,U+2eac2,U+2eb1b-2eb24,U+2eb65-2eb66,U+2eb68,U+2eb6a,U+2eb70,U+2eb87,U+2ebd9,U+2ebf0,U+2ec35,U+2ec63,U+2ec7b,U+2ec93;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./114.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+49eb-4a6a,U+2e41a,U+2e428,U+2e502,U+2e505,U+2e50a,U+2e51a,U+2e569,U+2e581,U+2e5b1,U+2e5fb,U+2e64a-2e64b,U+2e6ea,U+2e774-2e775,U+2e777-2e77a,U+2e81e;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./113.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+495b-49ea,U+2ddd4,U+2de5c,U+2ded9,U+2defe,U+2e00e,U+2e014,U+2e0b9,U+2e0c4,U+2e18f,U+2e1d8,U+2e261-2e262,U+2e264,U+2e267-2e268,U+2e26a-2e26c,U+2e26f,U+2e278;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./111.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+483a-48da,U+2d25d,U+2d382,U+2d475,U+2d544,U+2d546,U+2d613,U+2d64f,U+2d655,U+2d6a6,U+2d70c,U+2d80d;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./112.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+48db-495a,U+2d8c7,U+2d8e7,U+2d930,U+2da5a,U+2da86,U+2daa4,U+2dc49-2dc4a,U+2dcff,U+2dd08,U+2dd0a;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./110.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+47c2-4839,U+2cd9f-2cda0,U+2cda7-2cda8,U+2cdad-2cdae,U+2cdd5,U+2ce01,U+2ce05,U+2ce08,U+2ce0a,U+2ce18,U+2ce1a,U+2ce22-2ce23,U+2ce26,U+2ce29-2ce2a,U+2ce31,U+2ce7c,U+2ce88,U+2ce93,U+2cea4,U+2cea8,U+2cead,U+2cf65,U+2d026,U+2d075,U+2d079,U+2d0c2,U+2d11b,U+2d139,U+2d208;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./109.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+475f-47c1,U+2c9b0-2c9b1,U+2c9bb,U+2c9c0,U+2ca02,U+2ca0e,U+2ca7d,U+2ca8d,U+2caa9,U+2cb29,U+2cb2b-2cb2e,U+2cb30-2cb32,U+2cb38-2cb3b,U+2cb3f,U+2cb41,U+2cb4a,U+2cb4d-2cb4e,U+2cb5a-2cb5b,U+2cb63-2cb64,U+2cb68-2cb69,U+2cb6c,U+2cb6f,U+2cb72-2cb74,U+2cb76,U+2cb78,U+2cb7c,U+2cba4-2cba6,U+2cbb1,U+2cbb4,U+2cbbf-2cbc0,U+2cbce,U+2cc56,U+2cc5f,U+2cc66,U+2cc6d,U+2ccb1,U+2ccbd,U+2ccc7,U+2ccf3,U+2ccf5-2ccf6,U+2ccfd,U+2ccff,U+2cd02-2cd03,U+2cd0a,U+2cd10,U+2cd68,U+2cd81,U+2cd8b-2cd8d,U+2cd8f-2cd90;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./108.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+46f3-475e,U+2c58b,U+2c591,U+2c598,U+2c59e,U+2c613,U+2c616,U+2c618,U+2c61c-2c61d,U+2c621-2c622,U+2c629,U+2c62b-2c62d,U+2c62f,U+2c635,U+2c642,U+2c646-2c647,U+2c64a-2c64b,U+2c65e,U+2c696,U+2c728,U+2c72c,U+2c72f,U+2c79f,U+2c7c1,U+2c7fd,U+2c805,U+2c816,U+2c842,U+2c88a-2c88b,U+2c8c0,U+2c8d9,U+2c8de,U+2c8e1,U+2c8f3,U+2c907,U+2c90a,U+2c910,U+2c916,U+2c91d,U+2c928,U+2c930,U+2c97a;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./107.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+466e-46f2,U+2c05f,U+2c080-2c081,U+2c089,U+2c09b,U+2c0a9,U+2c0ad,U+2c0c0,U+2c0ca,U+2c0d8,U+2c0eb,U+2c129,U+2c1ae,U+2c1d5,U+2c1d8-2c1d9,U+2c1de,U+2c1f9,U+2c227,U+2c267,U+2c27c,U+2c288,U+2c29c,U+2c2a4,U+2c2b6,U+2c317,U+2c35b,U+2c361,U+2c364,U+2c370,U+2c386,U+2c39e,U+2c3be,U+2c3df,U+2c457,U+2c47d,U+2c488,U+2c494,U+2c497,U+2c4e0,U+2c533,U+2c542;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./105.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4589-45f6,U+2b751,U+2b758,U+2b75b,U+2b777,U+2b77a-2b77b,U+2b789,U+2b78e,U+2b797,U+2b79a-2b79b,U+2b79d,U+2b7a9,U+2b7bc-2b7bd,U+2b7c2,U+2b7c5,U+2b7d8,U+2b7e6-2b7e7,U+2b7f7,U+2b7f9,U+2b7fc,U+2b7ff,U+2b803,U+2b806,U+2b80a,U+2b81a-2b81c,U+2b823-2b824,U+2b826,U+2b892,U+2b899,U+2b8b8,U+2b8c6,U+2b8ca,U+2b92d,U+2b94e,U+2b95e,U+2b9b3,U+2b9c3,U+2b9c7,U+2b9ef,U+2b9ff,U+2ba4f,U+2ba51,U+2ba5b,U+2ba65,U+2ba6b,U+2ba74,U+2ba81,U+2ba88,U+2ba98,U+2bac7,U+2bae6,U+2bafe,U+2bb37,U+2bb5f,U+2bb62,U+2bb6a,U+2bb72,U+2bb7c,U+2bb83,U+2bb85;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./106.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+45f7-466d,U+2bbdc,U+2bc02,U+2bc06,U+2bc0d,U+2bc1b,U+2bc21,U+2bc2a,U+2bc30,U+2bca6,U+2bca8,U+2bcb7,U+2bd52,U+2bd58,U+2bd71,U+2bd77,U+2bd7a,U+2bd7c,U+2bd87,U+2bda7,U+2bdac,U+2bdc0,U+2bdc9,U+2bdf7,U+2bdf9,U+2be29,U+2be6f,U+2be75,U+2bf17,U+2bf1d,U+2bf23,U+2bf4b,U+2bf67,U+2c029-2c02a;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./104.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4539-4588,U+2b461,U+2b4a2,U+2b4e7,U+2b4e9,U+2b4ef,U+2b4f1,U+2b4f4,U+2b4f6,U+2b4f9,U+2b502,U+2b507,U+2b50d-2b50e,U+2b52d,U+2b536,U+2b583,U+2b592,U+2b594,U+2b598,U+2b5ae-2b5af,U+2b5b3,U+2b5b9,U+2b5e0,U+2b5e6-2b5e7,U+2b5e9,U+2b5eb,U+2b5ee,U+2b5f0,U+2b5f4,U+2b61c-2b61d,U+2b624-2b628,U+2b62a,U+2b62c-2b62d,U+2b688-2b689,U+2b690,U+2b692,U+2b694-2b696,U+2b6a5,U+2b6aa,U+2b6ad,U+2b6da,U+2b6de-2b6df,U+2b6e3,U+2b6e9,U+2b6ed,U+2b6f3,U+2b6f6,U+2b6f8,U+2b728-2b729,U+2b72c,U+2b730,U+2b735-2b73d,U+2b746,U+2b74f;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./101.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+439a-441d,U+2a41e,U+2a434,U+2a46e,U+2a47e,U+2a49f-2a4a1,U+2a4b9,U+2a4d0,U+2a4db,U+2a4ec,U+2a4f9,U+2a4fd,U+2a4ff,U+2a54c-2a54d,U+2a56f,U+2a581,U+2a590,U+2a599,U+2a5a2,U+2a5a8,U+2a5b7,U+2a5cb,U+2a600,U+2a612,U+2a61a,U+2a64a,U+2a668,U+2a695,U+2a6a5,U+2a6ae,U+2a6b0,U+2a6d7-2a6df,U+2a703,U+2a736,U+2a79d,U+2a7dd,U+2a7e7,U+2a833,U+2a838,U+2a83d,U+2a848,U+2a8ae,U+2a8bc,U+2a8c8,U+2a8dd,U+2a8fb,U+2a917;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./103.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+44ae-4538,U+2aed0,U+2aeda,U+2af47,U+2af94,U+2afa2,U+2afa6,U+2afd6,U+2b042,U+2b061,U+2b088,U+2b0d1,U+2b11b,U+2b11f,U+2b124-2b125,U+2b127-2b128,U+2b12b,U+2b136-2b138,U+2b18f,U+2b1e6,U+2b1ed,U+2b209,U+2b21f,U+2b230,U+2b241,U+2b244,U+2b2a5,U+2b2bb,U+2b2cc,U+2b300,U+2b328,U+2b359-2b35a,U+2b35f,U+2b362-2b363,U+2b36f,U+2b372,U+2b37b,U+2b37d,U+2b393,U+2b3ab-2b3ac,U+2b3cb,U+2b3d0,U+2b404,U+2b410-2b411,U+2b413,U+2b416,U+2b418;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./102.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+441e-44ad,U+2a970,U+2a9e6,U+2a9f7,U+2aa07,U+2aa0a,U+2aa17,U+2aa27,U+2aa30,U+2aa36,U+2aa58,U+2aac6,U+2ab62,U+2ab75,U+2ab8b,U+2ab96,U+2abb6,U+2abc8,U+2abe1,U+2ac76-2ac77,U+2ac94,U+2adfd,U+2ae5a;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./99.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+42c9-4328,U+29bf0,U+29c1e,U+29c24,U+29ce4,U+29d06,U+29d3e,U+29d40,U+29d4b,U+29d56,U+29d5a,U+29d60,U+29d71,U+29d88,U+29d98,U+29da5,U+29dad,U+29daf,U+29dc0,U+29dd3,U+29dd5,U+29dda,U+29de9-29dea,U+29df6,U+29e00,U+29e04,U+29e0d-29e0e,U+29e19,U+29e36,U+29e3d,U+29e42,U+29e44,U+29e47,U+29e4e,U+29e7e,U+29eac-29ead,U+29edf,U+29ef8,U+29f08,U+29f27,U+29f30,U+29f48,U+29f4f,U+29f70,U+29f73,U+29f7c,U+29f7e,U+29f83,U+29f87,U+29f8c,U+29f97;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./100.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4329-4399,U+29f9a,U+29fbf,U+29fe3,U+29fe7,U+29ffa,U+2a001,U+2a00b,U+2a018,U+2a01a,U+2a049,U+2a04e-2a050,U+2a05c,U+2a05f,U+2a06a,U+2a084,U+2a086,U+2a0b4,U+2a0ba,U+2a0bf,U+2a0c8,U+2a0cf,U+2a0e7-2a0e8,U+2a106,U+2a133,U+2a136,U+2a14f,U+2a183,U+2a1a9,U+2a1bb,U+2a1c4,U+2a1c9,U+2a1d8,U+2a1e1,U+2a1f0-2a1f1,U+2a1f7,U+2a202,U+2a213,U+2a248,U+2a28d,U+2a291,U+2a2ee-2a2ef,U+2a318,U+2a32d,U+2a32f,U+2a333,U+2a351,U+2a353,U+2a35b,U+2a360,U+2a363,U+2a374,U+2a38a,U+2a3ad,U+2a3bd-2a3be;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./98.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4258-42c8,U+29781,U+297b0,U+2980c-2980d,U+29810,U+2981c,U+29869,U+2987a,U+298b0,U+298b2,U+298b7,U+298bc,U+298ca,U+298da,U+298e1,U+298f1,U+29944,U+29947,U+29949,U+299b1,U+299ba,U+299c6,U+299d0,U+29a02,U+29a1c,U+29a2c,U+29a33,U+29a38,U+29a8b,U+29af5,U+29af8,U+29afb,U+29b1e,U+29b4f,U+29b6a,U+29b9c,U+29bcb;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./97.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+41de-4257,U+29307-29308,U+2930a,U+2933d,U+2935c,U+2937f,U+29396,U+293f6-293f7,U+29405,U+29428,U+29454,U+2945d,U+2947e,U+294ba,U+294d0,U+294de,U+294e3,U+294e5,U+29508,U+29544,U+29573,U+295d7,U+29601,U+2961a,U+2963b,U+2967f,U+2969f,U+296a8,U+296c3,U+296de,U+296e9,U+296f2,U+296fd,U+29704,U+29707,U+29730,U+29736,U+2974e,U+29751,U+2976b;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./95.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+40da-415b,U+28891,U+288a2,U+288c8,U+288e7-288e8,U+28942,U+28948,U+28972,U+28987,U+289a1,U+289c0,U+289f1,U+28a0f,U+28a50,U+28b46,U+28b49,U+28b4e,U+28b5b,U+28c3b,U+28c3e,U+28c44,U+28c47,U+28c4d-28c4f,U+28c51,U+28c53-28c54,U+28c75,U+28c97,U+28ca0,U+28cca,U+28ccd,U+28cd2,U+28cdd,U+28d46,U+28d66,U+28d80,U+28d88,U+28d92;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./96.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+415c-41dd,U+28d99,U+28db2,U+28dc8,U+28df2,U+28dfa-28dfb,U+28e0f,U+28e14,U+28e17,U+28e1d,U+28e30,U+28e39,U+28e5d,U+28e93,U+28e99,U+28ead,U+28ee7,U+28ef6,U+28efb,U+28f4d,U+28f66,U+28f79,U+28f7b,U+28fcb,U+28fd8,U+2900e,U+290ce,U+290d9,U+290ec-290ed,U+290f1,U+29121,U+29166,U+2918a,U+29193,U+291d0,U+291d5,U+291eb,U+291ef,U+291f5,U+29259,U+2925c,U+29293,U+29299-2929a;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./94.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+405b-40d9,U+283a5,U+283aa,U+283b9,U+283d2,U+283e9,U+283f9,U+28408,U+28420-28421,U+28468,U+2846e,U+28473,U+28485,U+28487,U+28492,U+284ab,U+284c6,U+284c8,U+284da,U+284dc,U+284e6,U+28523,U+2853f,U+28595,U+2860c,U+2863b,U+2864a,U+28668,U+2866c,U+28676,U+28678,U+2867b,U+2868d,U+28693,U+28695,U+28697,U+286b2,U+286cb,U+286cd,U+286eb-286ed,U+286f3,U+28712,U+28714,U+2874d,U+28756,U+28778,U+287aa,U+287c9,U+287d6,U+287e0,U+287f9,U+287fb,U+28811,U+2886d;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./93.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+3fd4-405a,U+27e5e,U+27eaf,U+27ed9,U+27ede,U+27ef4,U+27f28,U+27f34,U+27f7b-27f7c,U+27fb1,U+27fb7,U+27fc1,U+27fd2,U+27fec,U+27ff3-27ff4,U+27ff9,U+28001,U+28042,U+2804f,U+28057,U+2805d,U+280bd-280bf,U+280c5,U+280de-280df,U+280e9,U+280f0,U+2810c,U+2812e,U+2814d,U+28154,U+2815d,U+2816c,U+2818d,U+281aa,U+281e4,U+28201,U+28207,U+28210,U+28256,U+28263,U+282b0,U+282b8,U+282bb,U+282cc-282cd,U+282e2,U+282f0,U+28308,U+28325,U+2834f,U+2837d,U+2838a,U+2838d;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./92.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+3f4c-3fd3,U+2790f,U+27916-27917,U+2793e,U+27944,U+27963,U+2797a,U+279a0,U+279a7,U+27a33,U+27a3e-27a3f,U+27a63,U+27a76,U+27ab0,U+27add,U+27af4,U+27b1e,U+27b28,U+27b2a,U+27b2f,U+27b48,U+27b53,U+27b88,U+27b99,U+27baa-27bab,U+27bc6,U+27bcb,U+27bf7,U+27c0e,U+27c19,U+27c28,U+27c35,U+27c49,U+27c53,U+27c82,U+27cb1,U+27cdc,U+27cdf,U+27cfd,U+27d03,U+27d06,U+27d10,U+27d2a,U+27d48,U+27d65,U+27d8a,U+27da0,U+27dba,U+27e18;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./91.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+3ed2-3f4b,U+2742f,U+27431,U+27445,U+27452,U+27486,U+27495,U+274bd,U+274fd,U+274ff,U+27548,U+2754d,U+2755b,U+2759a,U+275e9,U+275f9,U+27607-27608,U+2763d,U+27665,U+276d7,U+276fe,U+27700,U+27741,U+27743,U+27749,U+2774b,U+2774e,U+2775d,U+27764,U+2776c,U+27794,U+277a4,U+277c4,U+277c9,U+277cc,U+277f0,U+278b2,U+278d2,U+278e6,U+278ea;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./90.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+3e49-3ed1,U+26f09,U+26f4a,U+26f4f,U+26f8f,U+26f9b,U+26fae,U+26fb6,U+26fc9,U+26fda,U+2707e,U+27087,U+270d2,U+270fd,U+2711b-2711c,U+27138-27139,U+27141,U+27187,U+2718c,U+271e0,U+271fd,U+27222,U+27246,U+27248,U+27253,U+2725f,U+27267,U+2726a,U+2726e,U+2727e,U+27285,U+27288,U+27292,U+27294-27295,U+272b7,U+272d8,U+272e0-272e1,U+272e5,U+272f1,U+27304,U+2730f,U+27311,U+2733d,U+27355,U+27359,U+27367,U+2736a,U+27371-27372,U+27398,U+273a4-273a5,U+273be,U+273da,U+273e1,U+273fe,U+27410,U+27415,U+2741f;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./89.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+3dc7-3e48,U+269c8,U+269dd,U+269df,U+269e1,U+269f2,U+269f4,U+269fa,U+26a29,U+26a2d,U+26a34,U+26a3c,U+26a58,U+26a64,U+26a77,U+26a7a,U+26a87,U+26a99,U+26aad,U+26abd,U+26ac3,U+26af8,U+26b01,U+26b28,U+26b38,U+26b3a,U+26b3c,U+26b4c,U+26b5c,U+26bb4,U+26bbc,U+26c0f,U+26c21,U+26c47,U+26c4c,U+26c52,U+26c54,U+26cc6,U+26ccb,U+26cdc-26cdd,U+26cef,U+26d4f,U+26d67,U+26d78,U+26d7e,U+26d87,U+26d9f,U+26e05,U+26e08,U+26e87,U+26e96,U+26ed5,U+26ed8;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./87.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+3cbe-3d50,U+25f86,U+25f9d,U+25fba,U+25fc9-25fca,U+25fdd,U+25fee,U+26016,U+26021,U+26049,U+26050,U+26085,U+2608c-2608d,U+260b3,U+260c2,U+260c4,U+260c7,U+260cf,U+260e9,U+2613c,U+2614c,U+261d9,U+261e7,U+26203,U+26216,U+26220-26222,U+26246,U+2624e,U+26258,U+2626a-2626b,U+26270-26271,U+26279,U+26291,U+26293-26294,U+2629a,U+2629e,U+262b1,U+262c6,U+26309-2630a,U+2633e,U+2634b-2634c,U+26351,U+26355,U+26369,U+26393,U+263b9,U+263c6,U+263f4,U+26407,U+2640a,U+2640c,U+26447,U+26476,U+26483,U+2648d,U+26491,U+264b9,U+264d6,U+264fe,U+26529;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./88.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+3d51-3dc6,U+26548,U+26553,U+265d2,U+265f3,U+26614,U+26634,U+2664d,U+2666b,U+26676-26678,U+26690,U+2669f,U+266b0,U+266dd,U+266e8,U+26706,U+26760,U+26762,U+26769,U+2677c,U+26782,U+267a4,U+267a6,U+267cc,U+267d8,U+267ea,U+267ee,U+26806,U+2683f,U+26871,U+2688a,U+268c0,U+268dd-268de,U+26900,U+2690e,U+26919,U+26936,U+26951,U+26954,U+2696f,U+26999;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./86.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+3c3f-3cbd,U+25ab0,U+25ad7,U+25af1,U+25afd,U+25b1e,U+25b20,U+25b2f,U+25b98,U+25b9c,U+25bbe,U+25bd1,U+25bdb,U+25bdf,U+25be4-25be6,U+25be8,U+25c14,U+25c1f,U+25c2b-25c2d,U+25c67,U+25c7c,U+25c7f,U+25c8a,U+25c91,U+25ca4,U+25cbb,U+25cc7,U+25cce,U+25cd4,U+25ce0,U+25d0a,U+25d21,U+25d27,U+25d99,U+25dbd,U+25dd1,U+25dda,U+25de4,U+25de8,U+25e46,U+25e49,U+25e77,U+25e86,U+25ec5,U+25ed7,U+25ee6,U+25ee9,U+25ef5,U+25eff,U+25f1a,U+25f24,U+25f36;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./85.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+3bc8-3c3e,U+255d9,U+255ec,U+255fd,U+2560c,U+2561e,U+25629-2562a,U+2562e,U+2563d,U+25651,U+2567f,U+256c4,U+256f1,U+25712,U+25714,U+2574c,U+25762,U+25767,U+257a5,U+257c7,U+2583b,U+25871,U+25874,U+258a7,U+258b6,U+258db,U+258ec,U+2591a,U+2592e,U+25977,U+25997,U+259d1,U+259f2,U+25a0d-25a0e,U+25a10;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./84.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+3b3b-3bc7,U+25050,U+25055,U+2505e,U+25061-25062,U+2506b,U+25109,U+25128,U+2512b,U+25134,U+25148,U+25160-25161,U+25167,U+2517b,U+2517e,U+2519e,U+251a7,U+251db,U+251e2,U+25241-25242,U+25248-25249,U+2524c,U+25250,U+25273,U+2527b,U+2527f,U+25291,U+252dd,U+2531a,U+25320,U+25349,U+2538a,U+253dd,U+253ea,U+2541e,U+25435,U+2543b,U+2546a,U+2546e,U+254cd,U+254fc,U+25500,U+25532,U+2554d-2554e,U+25562,U+25566,U+25584,U+2559a,U+255a8,U+255aa;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./83.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+3aac-3b3a,U+24ac9,U+24af6,U+24b01,U+24b0f,U+24b1b,U+24b26,U+24b2a,U+24b5b,U+24b62,U+24b95,U+24ba6,U+24bd5,U+24be5,U+24c00,U+24c09,U+24c1a,U+24c1c,U+24c48,U+24c4a,U+24c59,U+24c5d,U+24c8d,U+24cb0,U+24cb6,U+24cc8,U+24d13-24d14,U+24d21,U+24d25,U+24d2f,U+24d50,U+24d52,U+24d78,U+24d80,U+24d83,U+24db8,U+24dcd,U+24dea,U+24e01,U+24e2a,U+24e31,U+24e37,U+24e85,U+24ea5,U+24ea7,U+24eaa,U+24eba,U+24eca,U+24ef2,U+24f42,U+24f49,U+24f93,U+24f95,U+24fa9,U+24fd0,U+2500f;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./81.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+399f-3a38,U+2406f,U+240d2,U+240eb-240ec,U+2410e,U+24136-24137,U+24182,U+2418a,U+241a2,U+241ac,U+241b5,U+241fe,U+2420e,U+24226,U+24259,U+242b6,U+242b9,U+242bb,U+242be-242bf,U+242ee,U+24307,U+2430d,U+24319,U+24350,U+24352,U+2435e,U+24364,U+243d0,U+243f0,U+243f6,U+24419,U+24423,U+24430,U+24436,U+2447a,U+2447e,U+2448a,U+244d3,U+244ef,U+24514,U+24595,U+24605,U+24626-24627,U+2462f;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./82.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+3a39-3aab,U+24656,U+2468e,U+246a9,U+246cb,U+246ce,U+246d1,U+246d8,U+246db,U+246df,U+246ed,U+24716,U+24722-24723,U+24737,U+2473b,U+2474c,U+24759,U+24771,U+2477b,U+2477d,U+2479a,U+2479e,U+247a4,U+247b6,U+247c7,U+247cc,U+247ce,U+247d1,U+247e4-247e5,U+247e7,U+247ef,U+24822,U+2482b,U+24873,U+2488a,U+248b9-248ba,U+248ce,U+248e5,U+248e9,U+24904,U+24934,U+24950,U+2496d,U+249db,U+249df,U+24a01,U+24a0f,U+24a12,U+24a6a,U+24a7d,U+24a8c,U+24aa4;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./80.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+390f-399e,U+23a95,U+23a98,U+23aa0,U+23b02,U+23b1b,U+23b20,U+23b36,U+23b3c,U+23b61,U+23b72,U+23b88,U+23bab,U+23bc8,U+23bcd,U+23bda,U+23be9,U+23bfe,U+23c07,U+23c0b,U+23c28,U+23c5d,U+23c76,U+23c7c,U+23c7e,U+23c97-23c98,U+23ca9,U+23cb5,U+23cb7,U+23cbe,U+23ce6,U+23cfe,U+23d13,U+23d18,U+23d66,U+23d7a,U+23d7d,U+23d82,U+23d88,U+23d8f-23d90,U+23d9e,U+23dfd,U+23e0e,U+23e23-23e24,U+23e70,U+23e8c,U+23eb0,U+23ecf-23ed0,U+23ef5,U+23ef8,U+23f0e,U+23f74,U+23f7d,U+24030;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./79.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+3869-390e,U+23439,U+2343f,U+234c1,U+23519,U+2353a,U+235be,U+235c4,U+235cb,U+235f6,U+23617,U+2361b,U+2363a-2363b,U+23657,U+2365c,U+23683,U+23698,U+236ba,U+236d2,U+236ee,U+23727,U+2372c,U+2373f,U+23749,U+2374b,U+2375b,U+23763,U+237c4,U+237f4,U+2385b,U+23936,U+23942,U+239d7,U+23a19,U+23a3c,U+23a81,U+23a8a-23a8b,U+23a8f;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./78.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+37dd-3868,U+22eb3,U+22f0c,U+22f1b,U+22f38,U+22f7e,U+22f96,U+22fba,U+22fdb,U+23066,U+23073-23074,U+23080,U+2308f-23090,U+230da,U+23119,U+23134,U+23138,U+23143,U+2319f,U+231c7,U+23206,U+23236,U+2329f,U+232ba,U+232c9,U+232de,U+23350,U+23385-23386,U+23397,U+2339c,U+233b2,U+233b4,U+233b7,U+233cc,U+233de,U+233e2,U+233fe,U+2340a,U+23415;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./77.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+373e-37dc,U+22871,U+2289e,U+228bd,U+22927,U+22931-22932,U+2294c,U+22958,U+2295e,U+22960,U+2298f,U+2299f,U+229b6,U+229f5,U+22a0b,U+22a41,U+22a73,U+22a83,U+22a87,U+22a8f,U+22a98,U+22ab1,U+22acf,U+22ad3,U+22ad5,U+22ae6,U+22aec,U+22b02,U+22b38,U+22b43,U+22ba5,U+22bca,U+22bed,U+22bf2,U+22bf9-22bfa,U+22bfe,U+22c49,U+22c4b,U+22c51,U+22c55,U+22c62-22c64,U+22cab,U+22cb4,U+22cb8,U+22cc0,U+22cc2,U+22cc6,U+22ccd,U+22cda,U+22cdf,U+22cea,U+22d08,U+22d32-22d33,U+22d4c,U+22d5e,U+22d67,U+22d80,U+22d89,U+22d8d,U+22d92,U+22da1,U+22dec,U+22e33,U+22e5d,U+22e72,U+22e83-22e84;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./75.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+3626-36b6,U+21d7b,U+21d84,U+21d8b,U+21d90,U+21da6,U+21dad,U+21dd1,U+21de0,U+21de8,U+21deb,U+21df8,U+21e03,U+21e16-21e17,U+21e1e,U+21e23,U+21e47,U+21e6c,U+21e8e,U+21e9f,U+21ea3,U+21eaf,U+21eb1-21eb2,U+21eca,U+21ed5,U+21eed,U+21eef,U+21f0f,U+21f15,U+21f31,U+21f3e-21f3f,U+21f57,U+21f71,U+21f7a,U+21f8b,U+21f9e,U+21fb0,U+21fb2,U+21fbc,U+21fd3,U+21fd6,U+21fe8,U+21ffa,U+21fff,U+22016,U+22049,U+22058,U+220b3,U+220c7,U+22110,U+2213c,U+221a1,U+221c7,U+221cd,U+221f2,U+221f7,U+22208,U+2223b,U+2231a;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./76.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+36b7-373d,U+2231e,U+22342,U+22399,U+2239e,U+223a5,U+223a8,U+22488-22489,U+224b0,U+224bc,U+224c1,U+224c9,U+224cc,U+224dc,U+224e1,U+224ed,U+224f2,U+22504,U+2251b,U+22521,U+22524,U+2256c,U+225a6,U+225a9,U+225b3,U+225bf,U+225d7,U+22609,U+2260d,U+2263f,U+22645,U+22650,U+2265d,U+226c1,U+226f3,U+2272d-2272f,U+22731,U+22736,U+22746,U+22775,U+227b5,U+22835,U+22838;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./74.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+3596-3625,U+217d3,U+217da,U+217e5,U+217ec,U+2180d,U+21824,U+21857,U+21883,U+218ea,U+2192b,U+21946,U+21948,U+21967,U+21976,U+2197c,U+21980,U+21982,U+219bc,U+219f3,U+21a18,U+21a1a,U+21a25,U+21a38,U+21a4b,U+21a61,U+21a7b,U+21acf,U+21b36,U+21b54,U+21b90,U+21bc1-21bc2,U+21c26,U+21c2a,U+21c48,U+21c52,U+21c95,U+21ca2,U+21cac,U+21cbe,U+21cde,U+21d2d,U+21d49,U+21d53,U+21d59-21d5a;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./71.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+337f-3384,U+338a-338c,U+3391-3395,U+3399-339a,U+33a7-33af,U+33b4-33c1,U+33c3,U+33c5-33c7,U+33c9-33ca,U+33ce-33d3,U+33d5-33d6,U+33d9,U+33db-3472,U+20302,U+20316,U+2032f,U+20350,U+203ae,U+203b7,U+203c0,U+203c5,U+2040d,U+2042d,U+20435,U+2043a,U+20469,U+20509,U+2050c,U+2052d,U+2053e-2053f,U+20541-20542,U+20545-20547,U+20584,U+20587,U+205c2,U+205c9,U+205cc,U+205fb,U+20611,U+20627-20628,U+20646,U+2064f,U+20674,U+20676,U+206a4,U+206e1,U+206f1,U+20705,U+2070e,U+20731-20732,U+20734,U+20736,U+2073a,U+2073e,U+20779,U+207a9,U+207ab,U+207ad,U+207b0,U+207cd,U+207fa,U+20803-20804,U+2081d,U+20895,U+208fe,U+20904,U+2090e,U+20929,U+20930,U+20984,U+2099d,U+209aa-209ab,U+209b3,U+209da,U+209e9,U+20a44-20a45,U+20a64,U+20a9a,U+20ab1-20ab2,U+20ae4,U+20b20,U+20b24,U+20b2a,U+20b36,U+20b56,U+20b6f,U+20b9f,U+20bb5-20bb7,U+20bbe-20bbf,U+20bd7-20bd8,U+20be5,U+20bea,U+20c34,U+20c41,U+20c53,U+20c5b,U+20c5e,U+20c78;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./72.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+3473-34e8,U+20c8e-20c8f,U+20c96,U+20cbf,U+20cc1,U+20cc3,U+20ccf-20cd0,U+20cd4-20cd5,U+20ced,U+20cfc,U+20d02,U+20d15,U+20d1f,U+20d2b,U+20d32,U+20d46-20d47,U+20d5d,U+20d71,U+20d7c,U+20d7f,U+20da7,U+20de1,U+20dfa,U+20dff,U+20e01,U+20e0e-20e0f,U+20e5a,U+20e76-20e77,U+20e95-20e96,U+20e98,U+20e9d,U+20ea2,U+20ed7-20ed8,U+20ef3,U+20ef9-20efa,U+20f1f,U+20f22,U+20f2d-20f2e,U+20f3b,U+20f4c,U+20f7e,U+20f90-20f91,U+20f96,U+20fb4,U+20fbc,U+20fd5,U+20fea,U+21014,U+21055,U+2105c,U+2106f,U+21075-21076,U+2107b,U+210a2,U+210ab,U+210bf,U+210c1,U+210c9,U+210e4,U+210f6;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./73.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+34e9-3595,U+21116,U+21123,U+21145,U+21155,U+211a5,U+211cc,U+211d9,U+211fc,U+2123c-2123d,U+21244,U+21251,U+21265,U+2126b,U+21284,U+212ef,U+21334,U+21336,U+2134c,U+2136a,U+21372,U+21375,U+21377,U+2137c,U+2139a,U+213cb,U+21413,U+21428,U+2144d,U+2145e,U+21483-21484,U+214da,U+21523,U+21562,U+215d7,U+215dc,U+215e6,U+21619,U+21681,U+216a6,U+216b1,U+216b4,U+216bd,U+216df,U+216e3,U+216f0,U+21757,U+2176d,U+217c8;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./70.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+3298-32ff,U+332c,U+3358-3370,U+3372-337e,U+1fa60-1fa6d,U+20003,U+2000b,U+2000e,U+20024,U+20027,U+2002a-2002b,U+2003e,U+2005e,U+20063,U+2006d,U+20086-20087,U+20089-2008a,U+20092,U+20094,U+200a2,U+200a4,U+200b0,U+200ca-200cd,U+200d1,U+200d3,U+200db-200dc,U+200e9,U+200f2,U+2010c,U+2010e-2010f,U+20114,U+2011e-20120,U+20122,U+20129,U+20136,U+2013b-2013c,U+20164,U+201a2-201a3,U+201a8-201a9,U+201be,U+201d4,U+201d7,U+201ee,U+20201,U+2020c,U+20235,U+20242,U+20263,U+2026e,U+2028e,U+2029f,U+202ac,U+202c2,U+202c6,U+202e4;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./69.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+31ba-31e5,U+31ef-321e,U+3220-3297,U+1f141-1f1ad,U+1f200-1f202,U+1f210-1f23b,U+1f240-1f248,U+1f250-1f251,U+1f260-1f265,U+1f79c;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./68.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+2f6f-2fd5,U+2ff0-3000,U+3003,U+3005-3007,U+3012-3013,U+3018-302d,U+3030,U+3033-303f,U+3105-312f,U+3131-318e,U+3190-31b9,U+1f100-1f140;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./67.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+2713,U+2717,U+271a,U+273d,U+273f-2740,U+2756,U+275b-2760,U+2772-2773,U+2776-2793,U+27a1,U+27e6-27ef,U+2934-2935,U+29bf,U+29c8-29c9,U+29fa-29fb,U+2a7d-2a7e,U+2acb-2acc,U+2afd,U+2b05-2b07,U+2b1a,U+2b25-2b26,U+2b29,U+2b4e-2b4f,U+2b58,U+2b5a-2b65,U+2b82-2b83,U+2b95,U+2b97,U+2bba,U+2c60-2c7f,U+2e00-2e39,U+2e3c-2e42,U+2e55-2e56,U+2e80-2e99,U+2e9b-2ef3,U+2f00-2f6e,U+1b132,U+1b155,U+1d300-1d356,U+1d360-1d376;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./63.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+ac4b,U+ac4d,U+ac58,U+acaf,U+accc,U+ad35,U+ad47,U+ad89,U+ae46,U+ae60,U+ae69,U+ae84,U+aedc,U+af95,U+b004,U+b028,U+b08f,U+b135,U+b139,U+b182,U+b198,U+b1d0,U+b1dc,U+b1e9,U+b20b,U+b260,U+b268,U+b29a,U+b2a1,U+b2fa,U+b35b,U+b381,U+b394,U+b3dd,U+b3e8,U+b4ac,U+b4f8,U+b528,U+b541,U+b5cc,U+b5d8,U+b701,U+b770,U+b792,U+b796,U+b7b8,U+b7c7,U+b851,U+b8b8,U+b8c0,U+b8d0,U+b8d4,U+b93d,U+b940,U+b944,U+ba08,U+ba68,U+ba83,U+ba8c,U+bac4,U+bb1c,U+bb45,U+bc0c,U+bc4d,U+bc50,U+bc5d,U+bcb1,U+bcb4,U+bd40,U+bd58,U+bd68,U+bd9c,U+bdb8,U+bddc,U+be0d,U+be4e,U+be6a,U+be98,U+bee0,U+bf1d,U+bfc5,U+c03c,U+c0b5,U+c0d9,U+c0e5,U+c126,U+c1bd,U+c260,U+c2fb,U+c31c,U+c324,U+c3c0,U+c3e9,U+c43c,U+c46c,U+c474,U+c480,U+c4bc,U+c4e9,U+c4ff,U+c5f6,U+c618,U+c630,U+c671,U+c679,U+c680,U+c688,U+c6e1,U+c715,U+c731,U+c768,U+c797,U+c7ce,U+c7dd,U+c7e8,U+c831,U+c840,U+c883,U+c886,U+c89f,U+c8a8,U+c8bd,U+c8f5,U+c934,U+c951,U+c960,U+c9ef,U+c9fc,U+ca08-ca09,U+ca14,U+cacf,U+cad8,U+cb41,U+cb4c,U+cb58,U+cbb8,U+cc55,U+cc75,U+ccac,U+cd64,U+cdfb,U+ce19,U+ce24,U+cea3,U+cf2d,U+cff1,U+cff3,U+d011,U+d044,U+d047,U+d060,U+d06d,U+d184,U+d1ba,U+d1bc,U+d1d8,U+d23f,U+d25c,U+d264,U+d2b1,U+d2c9,U+d2d8,U+d316,U+d345,U+d38f,U+d3c5,U+d408,U+d440,U+d460,U+d494,U+d4a9,U+d4fd,U+d671,U+d694,U+d6f0,U+d738,U+d77c,U+d79d;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./62.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+ac2c,U+ac30,U+ac54,U+ac84,U+ac86,U+ac9c,U+aca1,U+acd7,U+acef,U+ad3c,U+ad44,U+ad9c,U+adc8,U+add0,U+adff,U+ae14,U+ae31,U+ae37,U+ae7d,U+ae85,U+aec0,U+aeed,U+aef8,U+af0d,U+af65,U+af84,U+af90,U+af9c,U+afdc,U+aff4,U+b055,U+b08d,U+b091,U+b0b5,U+b0d1,U+b0d4,U+b0e0,U+b112,U+b11c,U+b138,U+b148,U+b151,U+b15c,U+b189,U+b1d4,U+b1f0,U+b219,U+b23c,U+b27c,U+b2ef,U+b31c,U+b356,U+b390,U+b3a1,U+b3a8,U+b3ac,U+b3ce,U+b3d0,U+b3e0,U+b3e4,U+b434,U+b488,U+b525,U+b543,U+b54b,U+b55f-b560,U+b5b5,U+b5d0-b5d1,U+b614,U+b62c,U+b664,U+b739,U+b74c,U+b755,U+b775,U+b844,U+b878,U+b87c,U+b8b4,U+ba00,U+ba15,U+ba49,U+ba53,U+bb04,U+bb0f,U+bb4d,U+bb61,U+bb90,U+bba8,U+bbc4,U+bbd3,U+bc41,U+bc44,U+bc4c,U+bc8b,U+bcd8,U+bd2c,U+bd4c,U+bd50,U+bd64,U+bd87,U+bd91,U+bdf4,U+bdf8,U+be00,U+be55,U+be70,U+be90,U+beec,U+bf01,U+bf44,U+c091,U+c094,U+c0a3,U+c0a5,U+c0dc,U+c0f5,U+c0f7,U+c127,U+c14c,U+c164,U+c169,U+c1a8,U+c1ac,U+c1e4,U+c1fd,U+c20c,U+c20f,U+c211,U+c229,U+c248,U+c254,U+c265,U+c27f,U+c29d,U+c309,U+c315,U+c318,U+c329,U+c345,U+c388,U+c38c,U+c3d9,U+c430,U+c448,U+c479,U+c49c,U+c4b8,U+c53d,U+c55d,U+c571,U+c58d,U+c59c,U+c5e1,U+c61c,U+c65d,U+c66c,U+c69c,U+c6a4-c6a5,U+c6a7,U+c6dd,U+c6e9,U+c6f9,U+c714,U+c730,U+c733,U+c74f,U+c752-c757,U+c75c,U+c760,U+c7c0,U+c7cc,U+c7e4,U+c82c,U+c848,U+c84d,U+c854,U+c8a1,U+c8c8,U+c8cc,U+c8d4,U+c8e4,U+c970,U+c97c,U+c9c7,U+c9ec,U+c9f0,U+c9f9,U+ca5c-ca5d,U+ca98,U+cac0,U+cac4,U+cad9,U+cb14,U+cb18,U+cb20,U+cb59,U+cb64,U+cc1d,U+cc64,U+cc68,U+ccb5,U+ccc4,U+ccc9,U+ccd4,U+ccec,U+cd24,U+cd28,U+cdf9,U+ce0c,U+ce28,U+ce87,U+ce91,U+cea4-cea5,U+cf01,U+cf11,U+cf15,U+cf2c,U+cf2f,U+cf38,U+cf71,U+cf74,U+cfa1,U+cfa8,U+cff0,U+d004,U+d02d,U+d03c,U+d081,U+d0f8,U+d15f,U+d161,U+d16c,U+d17c,U+d1b3,U+d207,U+d210,U+d284,U+d288,U+d2cb,U+d31f,U+d330,U+d338-d339,U+d33c,U+d344,U+d3a8,U+d444,U+d482,U+d4cc,U+d4d0,U+d4f8,U+d515,U+d585,U+d670,U+d690,U+d6d9,U+d6e0,U+d6fd,U+d700,U+d704,U+d711,U+d72b,U+d757,U+d774,U+d77d,U+d79b;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./66.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+fd5-fd6;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./65.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+e3f;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./64.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+feff;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./60.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+ac07,U+ac1a,U+ac20,U+ac24,U+ac2f,U+ac38,U+ac40,U+ac8a,U+ac94,U+acf6,U+ad18,U+ad1c,U+ad49,U+ad7f,U+ad82,U+ade4,U+ae01,U+ae41,U+ae45,U+ae4d,U+ae50,U+ae5c,U+ae61,U+aebd,U+aec4,U+aed1,U+af08,U+af3c,U+af41,U+af49,U+af64,U+afc7,U+afe9,U+aff0,U+b010,U+b014,U+b01c,U+b0a1,U+b0ab,U+b0af,U+b0c5,U+b0c7,U+b10b-b10c,U+b125,U+b128,U+b12c,U+b158,U+b215,U+b217,U+b220,U+b289,U+b291,U+b2a0,U+b2aa,U+b2db,U+b2f3,U+b301,U+b304,U+b308,U+b313-b315,U+b35f,U+b365,U+b371,U+b380,U+b3d4,U+b3d7,U+b3db,U+b460-b461,U+b46c,U+b4c0,U+b4d0,U+b515,U+b51b,U+b527,U+b55c,U+b625,U+b6a4,U+b6f4,U+b700,U+b729,U+b72c,U+b730,U+b797,U+b7a9,U+b7ff,U+b810,U+b818,U+b81b,U+b8f8,U+b8fb,U+b93c,U+b975,U+b9cf,U+b9d8-b9d9,U+b9f4-b9f5,U+b9f7,U+ba4e,U+ba64,U+ba67,U+ba71,U+bb3d,U+bb44,U+bb54,U+bb58,U+bbb4,U+bc09,U+bc0b,U+bc34,U+bc38,U+bc40,U+bc43,U+bc45,U+bc49,U+bc85,U+bc99-bc9a,U+bcb3,U+bccf,U+bcd5,U+bcf6,U+bd07,U+bd90,U+bdd4,U+be10,U+be45,U+be54,U+be64,U+be7d,U+be80,U+be84,U+be8f,U+bea8,U+bf55,U+bfb0,U+bfdc,U+c060,U+c068,U+c090,U+c0bf-c0c0,U+c0c5,U+c0cc,U+c0d0,U+c0ec,U+c0f4,U+c123,U+c139,U+c149,U+c15c,U+c167,U+c1a5,U+c22f,U+c231,U+c258,U+c270,U+c274,U+c290,U+c2ad,U+c2e3,U+c2ef,U+c308,U+c36c,U+c370,U+c379,U+c37d,U+c384,U+c3e0,U+c464-c465,U+c501,U+c539,U+c568,U+c570,U+c575,U+c584,U+c595,U+c597,U+c5ca,U+c5cc,U+c5ce,U+c5e0,U+c5e3,U+c5f7,U+c634-c635,U+c648,U+c6cd,U+c6f0,U+c70c,U+c73d,U+c74a,U+c7a3,U+c7bf,U+c82f,U+c83c,U+c887,U+c90d,U+c90f,U+c92c,U+c954,U+c96c,U+c974,U+c999,U+c9ca,U+c9e0,U+c9e4,U+c9f1,U+ca0c,U+ca50,U+ca61,U+cabc,U+cb10,U+cb48-cb49,U+cbd4,U+cc14,U+cc21-cc22,U+cc27,U+cc39,U+cc3c,U+cc54,U+ccbc,U+cd18,U+cd1b,U+cda5,U+cda7,U+cdcc,U+ce30,U+ce98,U+cea1,U+cef5,U+cf04,U+cf24,U+cf55,U+cf65,U+cf67,U+cfc4,U+cfe8,U+cff5,U+cffc,U+d0a5,U+d0d4,U+d0e0,U+d0e4,U+d0ec,U+d143,U+d15d,U+d1a1,U+d1b0,U+d22d,U+d230,U+d234,U+d23c,U+d241,U+d29c,U+d2ac,U+d2bf,U+d30d,U+d31c-d31d,U+d325,U+d32c,U+d37d,U+d380,U+d391,U+d3a0,U+d3a9,U+d3c8,U+d3fc,U+d401,U+d479,U+d48b,U+d578,U+d584,U+d5db,U+d5e5,U+d648-d649,U+d651,U+d69f,U+d6d1,U+d6d4,U+d6d7,U+d6e4,U+d720,U+d728,U+d769;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./61.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+ac09,U+ac17,U+ac1b,U+ac2d,U+ac39,U+ac85,U+ac8b,U+ac9f,U+acbb,U+acea,U+acec,U+ad0c,U+ad2d,U+ad38,U+ad7c,U+ad88,U+adc4,U+add3,U+ae5f,U+ae6c,U+ae70,U+ae7b-ae7c,U+aecc,U+aed0,U+af07,U+af10,U+af30,U+af3f,U+af48,U+af5d,U+af79,U+afb9,U+afc9,U+afcb,U+afcd-afce,U+afe8,U+b059,U+b07d,U+b09f,U+b0d8,U+b119,U+b11b,U+b11d,U+b134,U+b18b,U+b194,U+b1a8,U+b1fd,U+b205,U+b214,U+b234,U+b2e2,U+b2fb,U+b311,U+b36b,U+b383,U+b385,U+b38c,U+b3a0,U+b42b,U+b463,U+b480,U+b4b9,U+b4e6,U+b524,U+b544,U+b554,U+b561,U+b5ab,U+b5b4,U+b5c0,U+b5c4,U+b5cf,U+b618,U+b648,U+b6f8,U+b748,U+b754,U+b768,U+b78f,U+b7a0,U+b819,U+b81d,U+b8fd,U+b918,U+b9e3,U+b9ec,U+b9f8,U+ba65,U+ba69,U+ba84,U+bafc,U+bb4f,U+bb88,U+bb8c,U+bbc8,U+bbd0,U+bc08,U+bc27,U+bca7,U+bcb0,U+bcb5,U+bcd0,U+bd48,U+bd59,U+be61,U+be73-be74,U+be7b,U+be8c,U+be91,U+bed1,U+bed8,U+bee3-bee5,U+bf09,U+bf18,U+bf1b,U+bf40,U+bf50,U+bfcd,U+c069,U+c0af,U+c0db,U+c0e8,U+c0f9,U+c100,U+c136,U+c14d,U+c174,U+c178,U+c18e,U+c19d,U+c1f3,U+c200,U+c204,U+c20d,U+c21f,U+c234,U+c250,U+c27c,U+c281,U+c29b,U+c2a5,U+c30c,U+c314,U+c3dc,U+c3ed,U+c3f4,U+c410,U+c42c,U+c468,U+c4f1,U+c530,U+c538,U+c54e,U+c573-c574,U+c58c,U+c58f,U+c5e5,U+c5fe,U+c605,U+c607,U+c60c,U+c62d,U+c63b,U+c641,U+c653,U+c660,U+c698,U+c6c1,U+c6dc,U+c705,U+c719,U+c737,U+c7a4,U+c7b0,U+c7b4,U+c7bc-c7bd,U+c7c8,U+c958,U+c98c,U+c9e2,U+c9ed,U+ca0b,U+ca0d,U+ca68,U+ca84,U+cad1,U+cb50,U+cb5d,U+cbe7,U+cc10,U+cc1c,U+cc3b,U+cc48,U+cc4c,U+cc57-cc58,U+cc60,U+ccb8,U+ccc7,U+cd10,U+cd78,U+cdc4,U+ce04,U+ce61,U+ce75,U+ce85,U+ce89,U+ceac,U+cee5,U+cef9,U+cf10,U+cf20,U+cf70,U+cf78,U+cf85,U+cfb0,U+cfe1,U+cfe4,U+d000,U+d018,U+d035,U+d038,U+d058,U+d07d,U+d0b5,U+d0c9,U+d0ed,U+d0ef,U+d140-d141,U+d144,U+d168,U+d188,U+d248,U+d295,U+d2a4,U+d2c2,U+d2d4,U+d301,U+d320,U+d33b,U+d390,U+d3ab,U+d3ad,U+d3c4,U+d3ff,U+d46f,U+d4f0,U+d54c,U+d565,U+d57c,U+d590,U+d5c9,U+d5d9,U+d5f4-d5f5,U+d5f7,U+d5f9,U+d613,U+d64b,U+d667,U+d683,U+d6c5,U+d719,U+d71c,U+d73c,U+d744,U+d789,U+d799;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./59.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+ac13,U+ac31,U+ac77,U+ac81,U+ac89,U+ac90,U+acb8-acb9,U+acc1,U+acf0-acf1,U+acfd,U+ad04,U+ad75-ad76,U+ad7d,U+ad90,U+ada4,U+ae0b,U+ae0d,U+ae43,U+ae4e,U+ae5d,U+ae65,U+aebe,U+aecd,U+aecf,U+aef4,U+af34,U+af3d,U+af42,U+af80,U+afbc,U+afc0,U+afd4,U+b00c,U+b048,U+b04a,U+b053-b054,U+b057,U+b080,U+b084,U+b09a,U+b0b1,U+b0b3,U+b0c4,U+b109,U+b137,U+b141,U+b154-b155,U+b188,U+b1e8,U+b20c,U+b258,U+b25c,U+b299,U+b2ac,U+b2c9,U+b2d9,U+b2dd,U+b2e6,U+b2eb,U+b2ee,U+b2f7,U+b2ff,U+b310,U+b35c,U+b364,U+b367,U+b369,U+b36e,U+b374,U+b3cb,U+b3d5,U+b429,U+b451,U+b4c8,U+b518,U+b51c,U+b529-b52a,U+b531,U+b534,U+b540,U+b550,U+b5a1,U+b5b3,U+b5bc,U+b611,U+b69c-b69d,U+b6ab,U+b6b1,U+b72f,U+b738,U+b744,U+b760,U+b764,U+b799,U+b7ab-b7ad,U+b7b4,U+b7ed,U+b801,U+b809,U+b834,U+b837,U+b864,U+b86c,U+b871,U+b8e1,U+b8ec,U+b8f0,U+b904,U+b95c,U+b968,U+b96d,U+b985,U+b989,U+b98e,U+b9ad,U+b9bf,U+b9d1,U+b9e8,U+b9fa,U+ba48,U+ba4b,U+ba4d,U+ba55,U+ba58,U+ba5c,U+baab-baac,U+bab9,U+bb36,U+bb47,U+bb49,U+bb50,U+bb63,U+bba4,U+bbac,U+bbf9,U+bc0d,U+bc1f,U+bc2d,U+bca1,U+bca4,U+bccd,U+bd04,U+bd10,U+bd24,U+bd89,U+bd93,U+bdf0,U+be57,U+be59,U+be75,U+bed0,U+bed4,U+bed7,U+bf08,U+bf51,U+bfd4,U+c058,U+c05c,U+c0bd,U+c0d8,U+c0e4,U+c11e,U+c130,U+c140,U+c14b,U+c154,U+c170,U+c19c,U+c19f,U+c1fc,U+c22b,U+c22d,U+c232,U+c298,U+c2eb,U+c2f9,U+c2fc,U+c313,U+c369,U+c37c,U+c3d8,U+c3df,U+c500,U+c50c,U+c52c,U+c53b,U+c553,U+c557,U+c564,U+c580,U+c587,U+c598,U+c5b9,U+c5bd,U+c5c9,U+c5d1,U+c5ee,U+c5ff,U+c606,U+c610,U+c633,U+c639,U+c67c,U+c6ec,U+c708,U+c717,U+c789-c78a,U+c796,U+c7a6,U+c7ad,U+c813,U+c816,U+c81d,U+c820,U+c824,U+c881,U+c8e0,U+c90c,U+c918,U+c9d6,U+c9d9-c9da,U+c9e7,U+ca4c-ca4d,U+ca54,U+cad3,U+cc2e,U+cc59,U+cd2c,U+cda4,U+cdb0,U+ce69,U+ce6b,U+ce78,U+ce84,U+ce94,U+cea0,U+ceeb-ceec,U+cef7-cef8,U+cf08,U+cf13,U+cf64,U+cf8c,U+d034,U+d050,U+d0b4,U+d0b7,U+d0b9,U+d0d3,U+d0f1,U+d131,U+d138,U+d145,U+d14d,U+d150,U+d1a8,U+d280,U+d2c8,U+d2f1,U+d2f4,U+d2f8,U+d30e,U+d321,U+d329,U+d33d,U+d384,U+d38c,U+d399,U+d39c,U+d3bc,U+d3f0,U+d47c,U+d508,U+d514,U+d54d,U+d54f,U+d56b,U+d587,U+d5d0,U+d5dd,U+d5e8,U+d5ec,U+d6a1,U+d6cc,U+d6e8,U+d6fc,U+d729,U+d749,U+d759,U+d760,U+d770,U+d790;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./56.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+3041-3096,U+3099-30ff,U+3300-332b,U+332d-3357;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./58.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+ac11-ac12,U+ac14,U+ac1d,U+ac71,U+acaa,U+acbc,U+ace1,U+ace4,U+ace7-ace8,U+acf3,U+ad34,U+ad73-ad74,U+ad81,U+adc0,U+ae00,U+ae34,U+ae4a,U+ae54,U+ae68,U+aebc,U+af2c-af2d,U+af43,U+afb8,U+afc8,U+b044,U+b04c,U+b05d,U+b07c,U+b08c,U+b099,U+b0a9,U+b0ac-b0ae,U+b0b8,U+b0bc,U+b0c8-b0c9,U+b0d0,U+b0e5,U+b110,U+b113,U+b118,U+b123-b124,U+b140,U+b150,U+b179,U+b180,U+b1cc,U+b208,U+b284,U+b2a6,U+b2cc,U+b2d0,U+b2d8,U+b2e5,U+b2ed,U+b2f5,U+b355,U+b378,U+b3c8,U+b3fc,U+b410,U+b428,U+b454,U+b458,U+b465,U+b4a4,U+b4b7,U+b4dd,U+b4e3,U+b4ec-b4ed,U+b4ef,U+b538,U+b545,U+b5a0,U+b5a4,U+b5a8,U+b5bb,U+b6f0,U+b728,U+b73b,U+b77d,U+b784,U+b78d,U+b790,U+b79c,U+b7a8,U+b7b5,U+b7f4,U+b7fd,U+b800,U+b80c,U+b82c,U+b835,U+b838,U+b840,U+b86d,U+b86f,U+b8b0,U+b8e9,U+b8f9,U+b959,U+b960,U+b987,U+b9b4,U+b9c1,U+b9db,U+b9de,U+b9e1,U+b9e5,U+b9f9,U+ba39,U+ba3c,U+ba40,U+ba54,U+ba78,U+ba87,U+bab0,U+bab8,U+babd,U+bb18,U+bb35,U+bb3b,U+bbc0,U+bbff,U+bc11,U+bc16,U+bc24-bc25,U+bc97,U+bca0,U+bca8,U+bcbc-bcbd,U+bcfc,U+bd05,U+bd09,U+bd95,U+bd99,U+be0c,U+be14,U+be48,U+be4c,U+be5a-be5b,U+be60,U+be68,U+be7c,U+bfcc,U+bfd0,U+c0ad,U+c0b6,U+c12c-c12d,U+c12f,U+c13c,U+c148,U+c158,U+c168,U+c194,U+c1c4,U+c1e0,U+c219,U+c228,U+c26c,U+c27d,U+c288,U+c2a8,U+c2ac,U+c2b4,U+c2b7,U+c2ed,U+c2f1,U+c2f6,U+c2f8,U+c300,U+c30d,U+c4f4,U+c4f8,U+c529,U+c549,U+c554,U+c559,U+c560,U+c5bb-c5bc,U+c5c4,U+c5c7,U+c5d4,U+c5d8,U+c5fd,U+c61b,U+c625,U+c62e,U+c637,U+c654-c655,U+c65c,U+c695,U+c6b1,U+c6c0,U+c6c3,U+c6c5,U+c6e0,U+c6e8,U+c724,U+c735,U+c74d,U+c775,U+c77d,U+c783,U+c787,U+c78e,U+c794,U+c7a0,U+c80a,U+c84c,U+c878,U+c880,U+c88b-c88c,U+c8c4,U+c8fd,U+c950,U+c988-c989,U+c990,U+c998,U+c9d0,U+c9d3,U+c9d5,U+c9dc-c9dd,U+c9f8,U+cbe4,U+cc0c-cc0d,U+cc2c,U+cc3e,U+cc99,U+cca8-cca9,U+ccab,U+ccd0,U+cce4,U+cd09,U+cd0c,U+cd98,U+ce20,U+ce59,U+ce60,U+ce6d,U+ce7c,U+ce90,U+cee4,U+cee8,U+cef4,U+cf00,U+cf1c,U+cf30,U+cf58,U+cf5c,U+cf69,U+cfe0,U+d074,U+d07c,U+d0a8,U+d0ac,U+d0c1,U+d0c8,U+d0d0-d0d1,U+d0d5,U+d134,U+d14c,U+d154,U+d1a4,U+d1b1,U+d1f4,U+d2bc,U+d2c0,U+d2f0,U+d300,U+d305,U+d314,U+d328,U+d37c,U+d398,U+d3b4,U+d3d0,U+d3f4,U+d478,U+d480,U+d48d,U+d4e8,U+d50c,U+d53d,U+d540,U+d551,U+d5c8,U+d5cc,U+d5e4,U+d600-d601,U+d608,U+d610,U+d614,U+d61c,U+d639,U+d63c,U+d640,U+d64d,U+d6c8,U+d718,U+d734,U+d750-d751,U+d754,U+d758,U+d761,U+d765,U+d78c,U+d798;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./57.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+ac00-ac01,U+ac04,U+ac08,U+ac10,U+ac15-ac16,U+ac19,U+ac1c,U+ac70,U+ac74,U+ac78,U+ac80,U+ac83,U+ac8c,U+aca0,U+aca8-aca9,U+acac,U+acb0,U+acbd,U+acc4,U+ace0,U+acf5,U+acfc,U+ad00,U+ad11,U+ad50,U+ad6c-ad6d,U+ad70,U+ad8c,U+addc,U+ade0,U+adf8-adf9,U+adfc,U+ae08-ae09,U+ae30,U+ae38,U+ae40,U+ae4c,U+aed8,U+b098,U+b09c,U+b0a0,U+b0a8,U+b0b4,U+b108,U+b144,U+b178,U+b17c,U+b18d,U+b192-b193,U+b204,U+b274,U+b290,U+b294,U+b298,U+b2a5,U+b2c8,U+b2e4,U+b2e8,U+b2ec,U+b2f4,U+b2f9,U+b300,U+b354,U+b358,U+b370,U+b3c4-b3c5,U+b3cc,U+b3d9,U+b418,U+b41c,U+b420,U+b450,U+b4dc,U+b4e0,U+b4e4,U+b4f1,U+b514,U+b530,U+b54c,U+b610,U+b77c,U+b780,U+b78c,U+b791,U+b798,U+b7c9,U+b7ec,U+b7f0,U+b7fc,U+b807-b808,U+b824-b825,U+b828,U+b839,U+b85c-b85d,U+b860,U+b8cc,U+b8e8,U+b958,U+b974,U+b978,U+b97c,U+b984,U+b9ac,U+b9b0,U+b9bc-b9bd,U+b9c8-b9c9,U+b9cc,U+b9ce,U+b9d0,U+b9dd,U+b9e4,U+ba38,U+ba70,U+ba74,U+ba85,U+baa8-baa9,U+babb,U+bb34,U+bb38,U+bb3c,U+bbf8,U+bbfc,U+bc00,U+bc0f,U+bc14-bc15,U+bc18,U+bc1b-bc1d,U+bc29,U+bc30-bc31,U+bc84,U+bc88,U+bc8c,U+bc94-bc95,U+bcc0,U+bcc4,U+bcd1,U+bcf4-bcf5,U+bcf8,U+bd80-bd81,U+bd84,U+bd88,U+be44,U+c0ac,U+c0b0,U+c0b4,U+c0bc,U+c0c1,U+c0c8-c0c9,U+c0dd,U+c11c-c11d,U+c120,U+c124,U+c131,U+c138,U+c18c-c18d,U+c190,U+c1a1,U+c218,U+c21c,U+c220,U+c2a4,U+c2b5,U+c2b9,U+c2dc-c2dd,U+c2e0,U+c2e4,U+c2ec,U+c368,U+c4f0,U+c528,U+c544-c545,U+c548,U+c54a,U+c54c,U+c555,U+c558,U+c55e,U+c561,U+c57c-c57d,U+c591,U+c5b4-c5b5,U+c5b8,U+c5c5-c5c6,U+c5c8,U+c5d0,U+c5ec-c5ed,U+c5f0,U+c5f4,U+c5fc,U+c600-c601,U+c608,U+c624,U+c628,U+c62c,U+c640,U+c644,U+c678,U+c694,U+c6a9,U+c6b0,U+c6b4,U+c6b8,U+c6cc,U+c6d0,U+c6d4,U+c704,U+c720-c721,U+c728,U+c73c,U+c740,U+c744,U+c74c,U+c751,U+c758,U+c774,U+c778,U+c77c,U+c784-c785,U+c788,U+c790-c791,U+c798,U+c7a1,U+c7a5,U+c7ac,U+c7c1,U+c800-c801,U+c804,U+c808,U+c810-c811,U+c815,U+c81c,U+c838,U+c870-c871,U+c874,U+c885,U+c8fc,U+c900,U+c904,U+c911,U+c99d,U+c9c0-c9c1,U+c9c4,U+c9c8,U+c9d1,U+cabd,U+cc28-cc29,U+cc30,U+cc38,U+cc3d,U+cc44-cc45,U+cc98,U+cc9c,U+cca0,U+ccad,U+ccb4,U+cd08,U+cd1d,U+cd5c,U+cd94-cd95,U+cd9c,U+cda9,U+cde8,U+ce21,U+ce35,U+ce58,U+ce5c,U+ce68,U+ce74,U+cf54,U+d06c,U+d070,U+d0a4,U+d0c0,U+d0c4,U+d0dc-d0dd,U+d130,U+d15c,U+d1a0,U+d1b5,U+d22c,U+d2b8-d2b9,U+d30c,U+d310,U+d3b8,U+d3c9,U+d3ec-d3ed,U+d45c,U+d488,U+d504,U+d53c,U+d544,U+d558-d559,U+d55c,U+d560,U+d568-d569,U+d56d,U+d574-d575,U+d588-d589,U+d5a5,U+d5d8,U+d604,U+d611,U+d615,U+d638,U+d654-d655,U+d658,U+d65c,U+d669,U+d68c-d68d,U+d6a8,U+d6c4,U+d76c,U+d788;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./54.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+50e8,U+532d,U+53b4,U+54bc,U+551a,U+5645,U+5666,U+5672,U+56b3,U+56c5,U+5852,U+5b24,U+5b4c,U+5d2c,U+5df9,U+5e6c,U+5f12,U+6463,U+649f,U+6504,U+68d6,U+69bf,U+6aeb,U+6af3,U+6e5e,U+6e63,U+736a-736b,U+7380,U+7649,U+79b0,U+7a6d,U+7ab6,U+7c5c,U+7d06,U+7d32,U+7dd9,U+7de6,U+7df6,U+7df9,U+7e0b,U+7e11,U+7e36,U+7e52,U+7e62,U+7e6f,U+7e8a,U+7f8b,U+8156,U+8161,U+8181,U+8264,U+826b,U+8526,U+8546,U+8558,U+8577,U+85f6,U+86fa,U+87ef,U+8806,U+8946,U+89af,U+89bf,U+8a01,U+8a75,U+8a84,U+8ad7,U+8b7e,U+8b9e,U+8db2,U+8e60,U+8ee4,U+8efa,U+8f05,U+8f07,U+91d9,U+923d,U+9255,U+929a,U+92b1,U+92df,U+92e3,U+92e6,U+92f6,U+9306,U+9308,U+9364,U+9369,U+9370,U+9384,U+93bf,U+9414,U+9428,U+9479,U+95bd,U+95e5,U+9689,U+97bd,U+9859,U+98eb,U+9937,U+993c,U+99d4,U+99d8,U+9a0d,U+9a36,U+9a42,U+9b9e,U+9baa,U+9bdd,U+9c08,U+9c12,U+9c29,U+9c3e,U+9c5d,U+9c6d,U+9d1f,U+9d2f,U+9d42,U+9d6f,U+9d93,U+9dbc,U+9dda,U+9de5,U+9def,U+9e0c,U+9e7a,U+9ef2,U+9f09;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./52.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+50c9,U+5115,U+53c4,U+5635,U+5638,U+57b5,U+581d,U+5b00,U+5b19,U+5b2a,U+5d33,U+5e43,U+5ee1,U+616a,U+6173,U+645c,U+651b,U+6abe,U+6add-6ade,U+6ae8,U+6af8,U+6b7f,U+6c0c,U+7026,U+733b,U+74a6,U+74d4,U+766d,U+7725,U+7868,U+78b8,U+7bcb,U+7c00,U+7cf2,U+7d3c,U+7d4e,U+7d83,U+7da3,U+7db0,U+7dc7,U+7de1,U+7df1,U+7e35,U+7e7e,U+7e98,U+802c,U+8278,U+8494,U+84e7,U+84ef,U+84f4,U+84fd,U+87bb,U+889e,U+8a4e,U+8a58,U+8a7f,U+8a91,U+8a9a,U+8ac2,U+8acf,U+8ade,U+8ae1,U+8afc,U+8b59,U+8b92,U+8b96,U+8b9c,U+8c9b,U+8cb2,U+8cfb,U+8cfe,U+8d04,U+8edb,U+8f1c,U+90df,U+91d3,U+91d5,U+91e4,U+9227,U+9230,U+9248,U+9266,U+927f,U+9283,U+92a3,U+92a6,U+92aa,U+92f1,U+931b,U+9338,U+9340,U+93a6,U+93a9,U+93cc-93cd,U+93e8,U+9403,U+9413,U+943f,U+944c,U+9454,U+9582,U+95bc,U+95be,U+95c3,U+95c8,U+95d0,U+97c9,U+9807,U+9826,U+98ae,U+98bc,U+98e0,U+9908,U+99d1,U+99d9,U+9a05,U+9a44,U+9ad5,U+9b29,U+9b4e,U+9b90,U+9bc7,U+9bd6-9bd7,U+9be1,U+9c13,U+9c23,U+9d52,U+9df3,U+9df8,U+9efd,U+9eff,U+9f5c;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./55.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+5244,U+5515,U+568c,U+58da,U+5c68,U+5e58,U+5f33,U+61cd,U+6214,U+6516,U+68ec,U+69e7,U+6bff,U+7020,U+7044,U+7798,U+78fd,U+7e70,U+802e,U+8079,U+8183,U+8464,U+861e,U+8811,U+8a92,U+8b56,U+8cb0,U+8cd5,U+8ce7,U+8e93,U+8ea6,U+8f62,U+9233,U+92dd,U+9301,U+9307,U+9346,U+93aa,U+93f7,U+940b,U+9412,U+9426,U+958c,U+95ab,U+95bf,U+986c,U+9a2d,U+9a38,U+9b9a,U+9beb,U+9bf4,U+9c20,U+9c35,U+9c37,U+9d1d,U+9da5,U+9f47,U+9f60;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./53.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+50b4,U+5110,U+51aa,U+5274,U+528c,U+52f1,U+56a6,U+5969,U+5abc,U+5d81,U+5df0,U+6128,U+6192,U+61ae,U+61df,U+6207,U+6227,U+6451,U+6898,U+69aa,U+6a48,U+6ae7,U+6f59,U+6f77,U+6fa9,U+6ffc,U+7027,U+7197,U+7602,U+761e,U+7667,U+76b8,U+7c69-7c6a,U+7cdd,U+7cf4,U+7cf6,U+7cf9,U+7d07,U+7d86,U+7d88,U+7dc4,U+7e2d,U+7e32,U+7f86,U+81da,U+81e0,U+8452,U+851e,U+8552,U+8562,U+859f,U+863a,U+87e3,U+8810,U+8933,U+8949,U+895d,U+89a1,U+89f6,U+8a86,U+8ad1,U+8b6b,U+8d10,U+8e92,U+8ef9,U+8f0a,U+8f61,U+91c3,U+9201,U+9225,U+92a0,U+92a9,U+92cf,U+9312,U+931f,U+9343,U+9387,U+93dd,U+93f9,U+9420,U+944a,U+9465,U+946d,U+96c8,U+979d,U+97dd,U+980a,U+980f,U+9856,U+9862,U+98f1,U+9931,U+9933,U+994a,U+995c,U+9a4f,U+9b83,U+9b92,U+9bc0-9bc1,U+9bea,U+9c28,U+9c33,U+9c39,U+9c5f,U+9c67,U+9c7a,U+9d30,U+9d53,U+9d5c,U+9d87,U+9d98,U+9dd9,U+9de6,U+9ecc,U+9ef7,U+9f34,U+9f4e-9f4f,U+9f54,U+9f59;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./51.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4fc1,U+5000,U+5096,U+5114,U+526e,U+5399,U+55f6,U+5665,U+566f,U+56c0,U+56c8,U+5816,U+584f,U+58d9,U+58e2,U+5b21,U+5d0d,U+614d,U+61e8,U+6331,U+6476,U+64fc,U+6894,U+6a34,U+6a81,U+6a89,U+6aec,U+6b0f,U+6b5f,U+6ba4,U+6de5,U+6fae,U+7032,U+7162,U+7341,U+743a,U+74da,U+7646,U+7658,U+7669,U+7670,U+7864,U+78e7,U+7906,U+7a61,U+7b67,U+7bf3,U+7c1e,U+7d3f,U+7d5b,U+7d5d,U+7d9e,U+7db9,U+7e0a,U+7e1e-7e1f,U+7fb6,U+8141,U+8407,U+8435,U+8541,U+8555,U+85ce,U+85ea,U+87f6,U+8a0c,U+8a10,U+8a6c,U+8ab6,U+8ae2,U+8ae4,U+8b04-8b05,U+8b95,U+8cb3,U+8cba,U+8e55,U+8e91,U+8e95,U+8eeb,U+8f1e,U+8f26,U+8f33,U+8f54,U+90e4,U+9134,U+9136,U+91c5,U+91d4,U+91e7,U+91f7,U+9204,U+9239,U+926d,U+927a,U+92ab,U+92e8,U+92ee,U+93c3,U+9419,U+9477,U+958e,U+95b6,U+95b9,U+95cb,U+9768,U+97d9,U+980e,U+984e,U+9853,U+9873-9874,U+98ed,U+9949,U+99e2,U+9a43,U+9b2e,U+9b58,U+9b74,U+9b8e,U+9bab,U+9be2,U+9bff,U+9c09,U+9c45,U+9ce7,U+9d07,U+9dbb,U+9dc0,U+9dc2,U+9e15,U+9e1d,U+9f6a,U+9f76-9f77;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./50.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+50af,U+5108,U+513b,U+528a,U+559e,U+561c,U+565d,U+5694,U+56b6,U+56c1,U+5707,U+5770,U+584b,U+58ce,U+5950,U+5aa7,U+5b0b,U+5b76,U+5cf4,U+5da0,U+5ee9,U+613e,U+6229,U+6261,U+64a3,U+64c4,U+66d6,U+690f,U+69e8,U+6a05,U+6a9c,U+6aa3,U+6ad3,U+6af1,U+6b1e,U+6b9e,U+6bae,U+6c2c,U+6c33,U+6c39,U+6f35,U+6f7f,U+7028,U+7043,U+7069,U+7146,U+716c,U+7296,U+7319,U+74a3,U+75fe,U+7664,U+77bc,U+78e3,U+7c11,U+7d02,U+7d08,U+7d13,U+7d15,U+7d3a,U+7dbe,U+7e88,U+81cf,U+81d2,U+82bb,U+858c,U+8604,U+861a,U+8716,U+875f,U+8784,U+87c8,U+8960,U+8998,U+89b2,U+89f4,U+8a41,U+8aa5,U+8adb,U+8b16,U+8b2b,U+8cda,U+8e89,U+8e9a,U+8ea1,U+8ea5,U+8ed4,U+8f42,U+8f64,U+9015,U+9090,U+9106,U+91f9,U+9200,U+9210-9211,U+922e,U+9238,U+923f,U+924d,U+925e,U+9278,U+92bc,U+92c3,U+9319,U+9358,U+93a7,U+93b0,U+93b5,U+93d1,U+97c3,U+9865,U+993f,U+9948,U+994c,U+9962,U+9a16,U+9a41,U+9acf,U+9bad,U+9bdb,U+9be4,U+9be7,U+9c25,U+9c48,U+9c56,U+9c78,U+9cf6,U+9d06,U+9d9a,U+9e1b,U+9e85,U+9f5f,U+9f66-9f67,U+9f6c;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./49.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+50c2,U+5137,U+5660,U+5680,U+57e1,U+580a,U+58e0,U+5ad7,U+5b08,U+5b7f,U+5da7,U+5db4,U+5dcb,U+5ec4,U+60f2,U+60fb,U+6142,U+615f,U+616b,U+61cc,U+61e3,U+636b,U+64b3,U+64bb,U+64ef,U+689f,U+6adf,U+6aea,U+6df6,U+6f1a,U+6fa0,U+7005,U+71dc,U+71f4,U+7370,U+7449,U+763b,U+76b0,U+7931,U+7a1f,U+7a4c,U+7c23,U+7c5f,U+7d31,U+7d40,U+7dcb,U+7dd7-7dd8,U+7df2,U+7e39,U+7e48,U+7fa5,U+8075,U+83a2,U+83a7,U+8594,U+866f,U+8706,U+87c4,U+87ce,U+8814,U+8831,U+8938,U+893b,U+8964,U+89a6,U+89ac,U+8a03,U+8a15-8a16,U+8a36,U+8a46,U+8a52,U+8a5b,U+8a85,U+8acd,U+8aed,U+8af6,U+8b14,U+8b3e,U+8b4e,U+8cc5,U+8e4c,U+8eaa,U+8ef2,U+8efb,U+9148,U+91f5,U+92ef,U+9315,U+9341,U+9347,U+9398,U+93a3,U+93dc,U+93e4,U+9410,U+9427,U+9463,U+9481,U+95ac-95ad,U+95de,U+9658,U+973d,U+9744,U+97de,U+981c,U+9821,U+9837,U+9870,U+98b6,U+98c6,U+98e9,U+98f4,U+9909,U+9911,U+991e,U+9a0f,U+9a2e,U+9a64,U+9ad6,U+9bf0,U+9c0d,U+9c2d,U+9c31,U+9c52,U+9ce9,U+9d23,U+9d61,U+9d6a,U+9d89,U+9dd3,U+9df2,U+9ea9,U+9f95;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./48.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+513a,U+5191,U+54e2,U+5504,U+55c7,U+55e9,U+560d,U+562e,U+5630,U+5695,U+56a8,U+585a,U+5879,U+597c,U+5af5,U+5b38,U+5d97,U+5db8,U+60b5,U+611c,U+6134,U+619a,U+61ab,U+61fa,U+6384,U+6425,U+649a,U+64fb,U+6506,U+6523,U+66b1,U+66c4,U+66c7,U+6a62,U+6d79,U+6ece,U+6f6f,U+705d,U+70f4,U+71fc,U+71fe,U+7258,U+729b,U+72a2,U+72fd,U+73a8,U+7515,U+75d9,U+765f,U+769a,U+78ad,U+792b,U+79c8,U+7b8b,U+7c0d,U+7c2b,U+7c6e,U+7cc9,U+7dac,U+7e09,U+7e10,U+7e6e,U+7f4c,U+7ffa,U+8477,U+849e,U+84c0,U+854e,U+85ba,U+8622,U+8768,U+8778,U+87a2,U+8823,U+89b7,U+8a1b,U+8a54,U+8a61,U+8a70,U+8aeb,U+8b01,U+8cc1,U+8ce1,U+8d05,U+8d17,U+8e7a,U+8efe,U+8f45,U+8fae,U+913a,U+91c1,U+91d2,U+91e9,U+91fa,U+9208,U+9249,U+9251,U+925a,U+9262,U+926c,U+92a5,U+92bb,U+92c7,U+92e5,U+92f0,U+9354,U+9376,U+937a,U+93f5,U+942e,U+9432,U+943a,U+9460,U+947e,U+9586,U+958f,U+95a1,U+95cc,U+95d4,U+9742,U+975a,U+9766,U+9830,U+98af,U+98c8,U+991b,U+9957,U+995e,U+9a2b,U+9a4d,U+9aaf,U+9b81,U+9bca,U+9bfd,U+9c54,U+9d26,U+9e1a,U+9f72;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./47.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4e99,U+4f47,U+50e5,U+5102,U+513c,U+5157,U+55c6,U+5616,U+5653,U+56ea,U+579c,U+59cd,U+5acb,U+5c5c,U+5d22,U+5d87,U+5edd,U+6137,U+615a,U+6440,U+645f,U+6473,U+64f7,U+6519,U+6595,U+67f5,U+6ab3,U+6ab8,U+6abb,U+6ada,U+6b12,U+6bab,U+6ef7-6ef8,U+6f41,U+6f97,U+6fd8,U+6ffa,U+71c9,U+7377,U+737a,U+737c,U+744b,U+7489,U+74bd,U+74cf,U+750c,U+7627,U+766c,U+7787,U+792a,U+792c,U+79b1,U+7d46,U+7d73,U+7e1d,U+7e43,U+7e45,U+7e93,U+7f88,U+811b,U+81be-81bf,U+81cd,U+8396,U+858a,U+85fa,U+865c,U+86fb,U+880d,U+884a,U+8956,U+8a25,U+8a6b,U+8a6d-8a6e,U+8a7c,U+8ab9,U+8ac9,U+8afa,U+8b10,U+8b17,U+8b28,U+8b2c,U+8b4f,U+8cd2,U+8d16,U+8e63,U+8e8a,U+8efc,U+8f25,U+8f46,U+9114,U+9116,U+9183,U+920d,U+9226,U+9237,U+923e,U+927b,U+9291,U+9296,U+92ac,U+92cc,U+9310,U+932e,U+93a2,U+93ac,U+93d7-93d8,U+93de,U+93e2,U+95d5,U+9839,U+990c,U+9912,U+993e,U+9943,U+99b1,U+99df,U+99ed,U+9a3e,U+9a40,U+9a5b,U+9a6a,U+9b22,U+9b77,U+9bc9,U+9c58,U+9d15,U+9d1b,U+9d51,U+9d60,U+9da9,U+9dfa,U+9e1e;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./46.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4fb6,U+51dc,U+522a,U+5284,U+5436,U+55b2,U+55da,U+56c2,U+5862,U+58ae,U+5a41,U+5a6d,U+5afa,U+5be2,U+5dd2,U+5dd4,U+5e40,U+5fa0,U+60bd,U+618a,U+61fe,U+633e,U+6417,U+64f0,U+64f2,U+6582-6583,U+6727,U+68e7,U+6968,U+69f3,U+6a3a,U+6adb,U+6ae5,U+6c08,U+6d87,U+6e19,U+6e26,U+6f23,U+6f2c,U+7006,U+700f,U+7018,U+7064,U+7152,U+71be,U+71c1,U+71ed,U+743f,U+74bf,U+760d,U+7621,U+7647,U+7662,U+7672,U+76de,U+798e,U+79bf,U+7a08,U+7a1c,U+7aba,U+7ac5,U+7ac7,U+7be4,U+7c37,U+7c6c,U+7d1c,U+7d33,U+7d79,U+7dba-7dbb,U+7dbd,U+7dde,U+7e08,U+7e55,U+7e5a,U+7e7d,U+82e7,U+83f4,U+8553,U+85f9,U+87ec,U+8805,U+8a63,U+8aa3,U+8aa8,U+8ac4,U+8adc,U+8ae6,U+8af3,U+8af7,U+8b0a,U+8b33,U+8c8d,U+8cd1,U+8ce4,U+8cec,U+8d0d,U+8f12,U+8f3e,U+8f4d,U+902c,U+9087,U+9209,U+923a,U+9257,U+9293,U+92a8,U+92e4,U+92f8,U+9328,U+9333,U+9365,U+936c,U+93b3,U+942b,U+9433,U+9438,U+9594,U+95a8,U+9695,U+96cb,U+97dc,U+9824,U+9871,U+98ea,U+9903,U+9921,U+9945,U+99b4,U+99d2,U+9a01,U+9a62,U+9a65,U+9bd4,U+9be8,U+9c32,U+9c77,U+9d72,U+9daf,U+9dd7;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./45.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4fe0,U+50ad,U+52fb,U+5331,U+5379,U+5614,U+562f,U+589c,U+58b3,U+59e6,U+5b0c,U+5c37,U+5ce9,U+5dbc,U+5e57,U+5f5e,U+6065,U+6190,U+61f6,U+61fc,U+63c0,U+64be-64bf,U+64f1,U+6522,U+652a,U+65ac,U+6688-6689,U+66e0,U+68f2,U+6afb,U+6b16,U+6baf,U+6bb2,U+6bc6,U+6c2b,U+6cdd,U+6d36,U+6dea,U+6f70,U+6f80,U+6fc1,U+6ffe,U+7009,U+701d,U+7055,U+7192,U+71d9,U+720d,U+7463,U+7469,U+746f,U+7587,U+760b,U+7613,U+766e,U+7681,U+76ba,U+775c,U+779e,U+77ef,U+786f,U+78ef,U+79aa,U+7a62,U+7aaa,U+7ac4,U+7b8f,U+7c3e,U+7d09,U+7d5e,U+7d62,U+7d81,U+7d8f,U+7db4,U+7ddd,U+7e37,U+7e46,U+7e79,U+7ff9,U+807e,U+8123,U+81a9,U+8466,U+8588,U+863f,U+879e,U+883b,U+896a,U+8993,U+8a1d,U+8a23,U+8a60,U+8aa1,U+8aa6,U+8af1,U+8b20,U+8b41,U+8b8e,U+8c4e,U+8c9e,U+8cbd,U+8cca,U+8cdc,U+8ec0,U+8f1f,U+905d,U+9132,U+91d7,U+9215,U+9223,U+9240,U+92c5,U+9318,U+931a,U+9320,U+934d,U+9382,U+93df,U+9472,U+947f,U+95a5,U+96b4,U+96db,U+97cc,U+985b,U+986b,U+991a,U+99ad,U+99dd,U+99f1,U+99ff,U+9a4a,U+9c3b,U+9c49,U+9c57,U+9d09,U+9d3f,U+9f9c;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./44.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4f96,U+5098,U+50d5,U+510d,U+516a,U+524e,U+53ad,U+555e,U+5687,U+56a5,U+56d1,U+582f,U+588a,U+58d8,U+58fa,U+5bf5,U+5c4d,U+5ca1,U+5de3,U+5ec2,U+5eda,U+5eec,U+5f4e,U+60b6,U+60f1,U+6144,U+617c,U+61c7,U+646f,U+647b,U+6493,U+64cb,U+650f,U+6514,U+665d,U+66ec,U+6736,U+6953,U+69d3,U+6a01,U+6bad,U+6d29,U+6df5,U+6e3e,U+6e4a,U+6ecc,U+6f11,U+6f51,U+6f86-6f87,U+6ff0,U+7015,U+701f,U+703e,U+71fb,U+72f9,U+7345,U+7378,U+7464,U+758a,U+7661,U+7671,U+797f,U+798d,U+7ac8,U+7b4d,U+7be9,U+7cde,U+7d43,U+7d91,U+7db8,U+7def,U+7e1b,U+7e61,U+7e6d,U+7e8f,U+7f75,U+7fa8,U+8073,U+8076,U+814e,U+81d8,U+8259,U+834a,U+8514,U+8525,U+852d,U+856a,U+8606,U+8766,U+87fb,U+881f,U+8836,U+8ad2,U+8ae7,U+8b0e,U+8b5f,U+8b74,U+8c48,U+8caf,U+8cb6,U+8cc2,U+8d13,U+8e34,U+8e8b,U+8ed2,U+905c,U+908f,U+919c,U+919e,U+91ac,U+91d8,U+921e,U+925b,U+938a,U+93fd,U+9470,U+947c,U+9598,U+95a9,U+95bb,U+96b8,U+9711,U+97fb,U+980c,U+98e2,U+9913,U+9935,U+993b,U+994b,U+9952,U+99c1,U+9a37,U+9b28,U+9b91,U+9d5d,U+9df9,U+9ef4,U+9f4b,U+9f52;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./43.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4e1f,U+5006,U+5075,U+50f1,U+5109,U+5147,U+51f1,U+525d,U+52f3,U+52f8,U+53e2,U+5451,U+5674,U+58be,U+58df,U+593e,U+599d,U+5b30,U+5c62,U+5d84,U+5dbd,U+5e25,U+5e5f,U+5ec1,U+5edf,U+5f14,U+5f4c,U+5f65,U+6085,U+6158,U+61a4,U+61f8,U+6200,U+62cb,U+6399,U+6488,U+6490,U+64b2,U+64e1,U+652c,U+6558,U+687f,U+68d7,U+68df,U+6a1e,U+6bbc,U+6dfa,U+6ebc,U+6ec4,U+6eec,U+6ef2,U+6f3f,U+6fb1,U+7165,U+7169,U+71e6,U+723a,U+72a7,U+7343-7344,U+7375,U+746a,U+74ca,U+775e,U+77da,U+79a6,U+7aa9,U+7aaf,U+7aca,U+7c60,U+7cb5,U+7d0b,U+7d17,U+7dbf,U+7de0,U+7dec,U+7e2b,U+7e69,U+7e9c,U+7f77,U+8070,U+816b,U+8178,U+819a,U+81e5,U+8332,U+8490,U+84bc,U+84ee,U+856d,U+860a-860b,U+8755,U+8932,U+896f,U+89d4,U+8a1f,U+8a50,U+8a87,U+8b19,U+8b39,U+8b5a,U+8c93,U+8ced,U+8d1b,U+8ecb,U+8ef8,U+8f13,U+8f3b,U+91c0,U+91d0,U+91e3,U+9214,U+9234,U+9264,U+9298,U+929c,U+92b3,U+935b,U+93c8,U+95e1,U+9727,U+97cb,U+9803,U+9811,U+9838,U+984f,U+98b3,U+98c4,U+9905,U+992c,U+99b3,U+9a0e,U+9a55,U+9a5f,U+9ad2,U+9b31,U+9d28,U+9d3b,U+9db4,U+9e79,U+9e7c,U+9f21,U+9f90,U+9f94;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./42.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+5009,U+5074,U+5078,U+514c,U+51cd,U+5270,U+528d,U+53b2,U+5442,U+5586,U+559a,U+55aa,U+5606,U+5617,U+570f,U+5875,U+58e9,U+58fd,U+5a1b,U+5b43,U+5c5b,U+5d50,U+5dba,U+5dd6,U+6046,U+617e,U+61b6,U+61f2,U+62dd,U+6383,U+6416,U+64ab,U+64e0,U+64ec,U+64fe,U+651c,U+6575,U+6649,U+69cd,U+6a38,U+6ac3,U+6b04,U+6b3d,U+6bc0,U+6dbc,U+6dda,U+6de9,U+6e6f,U+6eef,U+6efe,U+6fc3,U+6fe4,U+6feb,U+7051,U+7058,U+7210,U+721b,U+7246,U+727d,U+7336,U+7501,U+75e0,U+7652,U+76dc,U+78a9,U+78da,U+7919,U+791f,U+7a4e,U+7d68,U+7da2,U+7db1,U+7dd2,U+7de3,U+7e31,U+7e96,U+8056,U+8105,U+8108,U+81c9,U+8266,U+8523,U+8569,U+8591,U+85a6,U+87f2,U+8972,U+8a3a,U+8a73,U+8a95,U+8a98,U+8b5c,U+8b6f,U+8c54,U+8ca9-8caa,U+8cc3-8cc4,U+8cc8,U+8ce2,U+8ce6,U+8cf4,U+8cfa,U+8d08,U+8e30,U+8e64,U+8f14,U+8f29,U+8f3f,U+8f44,U+8f5f,U+8faf,U+9059,U+905e,U+9072,U+9112,U+9130,U+9285,U+92c1,U+934b,U+9396,U+93c7,U+93e1,U+9444,U+947d,U+9583,U+9592,U+95a3,U+95b1,U+95c7,U+95d6,U+95e2,U+9670,U+96b1,U+978f,U+9801,U+9817,U+9846,U+98fc-98fd,U+99ae,U+99d5,U+99db,U+9a19,U+9a45,U+9b27,U+9ce5,U+9cf4;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./41.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+5016,U+502b,U+5091,U+50be,U+50d1,U+50de,U+5101,U+5291,U+52c1,U+55ac,U+55ce,U+5713,U+58c7,U+58de,U+58ef,U+5922,U+596a,U+5abd,U+5bae,U+5cef,U+5cfd,U+5d11,U+5e33,U+5ec8,U+5ee2,U+5f48,U+5f7f,U+5f91,U+60e1,U+6163,U+6182,U+6191,U+61b2,U+6232,U+6368,U+6372,U+63f9,U+6436,U+64a5,U+64fa,U+6524,U+65c2,U+66a2,U+66ab,U+66c9,U+68c4,U+68ca,U+69ea,U+6a11,U+6a6b,U+6bba,U+6de8,U+6e67,U+6e9d,U+6ec5,U+6f01,U+6f32,U+6f38,U+6f54,U+6f5b,U+6ff1,U+700b,U+70cf,U+7149,U+71c8,U+71d2,U+7240,U+7665,U+76c3,U+76e4,U+76e7,U+78bc,U+7a40,U+7aae,U+7c43,U+7cfe,U+7d10,U+7d14,U+7d2e,U+7d61,U+7d72,U+7de9,U+7e2e,U+7e5e,U+7e6a,U+7e73,U+7feb,U+8085,U+8139,U+8173,U+81a0,U+81bd,U+840a,U+84cb,U+85a9,U+85cd,U+865b,U+89bd,U+89f8,U+8a5e,U+8a62,U+8a69,U+8aa0,U+8aa4,U+8abc,U+8aee,U+8af8,U+8afe,U+8b00,U+8b02,U+8c6c,U+8c9d,U+8cbc,U+8cc0,U+8cde,U+8ce0,U+8d0f,U+8d95,U+8de1,U+8edf,U+8f09,U+8f2f,U+8f4e,U+8fad,U+9077,U+907a,U+907c,U+9081,U+912d,U+91cb,U+91e6,U+92d2,U+92ea,U+9326,U+932b,U+932f,U+9589,U+95ca,U+965d,U+9663,U+96de,U+975c,U+9802,U+9812,U+983b,U+98f2,U+98fe,U+9a30,U+9a5a,U+9cf3,U+9e7d,U+9ea5,U+9f15,U+9f61;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./39.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4f15,U+4f48,U+4f54,U+50c5,U+5152,U+5247,U+524b,U+5289,U+52de,U+532f,U+537b,U+537d,U+5538,U+5678,U+56b4,U+570d,U+5716,U+57f7,U+5805,U+59b3,U+5be7,U+5be9,U+5beb,U+5bf6,U+5c46,U+5c64,U+5c6c,U+5e2b,U+5fa9,U+611b,U+614b,U+6236,U+63db,U+63ee,U+640d,U+64d4,U+64f4,U+65b7,U+69ae,U+6a02,U+6aa2,U+6b50,U+6b77,U+6c23,U+6cc1,U+6e1b,U+6eff,U+6fa4,U+71b1,U+723e,U+7260,U+72c0,U+734e,U+7368,U+7372,U+737b,U+756b,U+76e1,U+76e3,U+774f,U+790e,U+7926,U+7a31,U+7a69,U+7af6,U+7bc0,U+7bc4,U+7ce7,U+7d00,U+7d04-7d05,U+7d0d,U+7d42,U+7d9c,U+7dab,U+7dad,U+7dca,U+7de8,U+7dfb,U+7e7c,U+7e8c,U+7f85,U+7fa3,U+7fd2,U+805e,U+8072,U+8129,U+81e8,U+8208,U+84c6,U+85dd,U+85e5,U+8607,U+862d,U+865f,U+885b,U+88dc,U+8988,U+89aa,U+8a0a,U+8a13,U+8a2a,U+8a31,U+8a3b,U+8a55,U+8a66,U+8acb,U+8b1b,U+8b58,U+8b77,U+8b93,U+8ca0-8ca1,U+8ca7-8ca8,U+8cb7,U+8ce3,U+8cfc-8cfd,U+8f03,U+8f15,U+9023,U+904a,U+9060,U+9069,U+908a,U+91ab,U+9280,U+92fc,U+9322,U+9435,U+9673,U+967d,U+96a8,U+96aa,U+96d9,U+96e2,U+96f2,U+97c6,U+97ff,U+9808,U+9810,U+984d,U+985e,U+9867,U+986f,U+98db,U+990a,U+9918,U+99ac,U+9a57,U+9b25,U+9ec3,U+9ed2,U+9f8d;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./40.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4e82,U+4fec,U+5049,U+50b5,U+50b7,U+5100,U+511f,U+5132,U+518a,U+525b,U+5287,U+52dd,U+52f5,U+5433,U+5553,U+55ab,U+5712,U+584a,U+58d3,U+5920,U+5967,U+596e,U+5a66,U+5b6b,U+5bec,U+5c0b,U+5cf6,U+5d17,U+5e63,U+5e6b,U+5eab,U+5ef3,U+5fb9,U+616e,U+6176,U+61f7,U+639b,U+63da,U+64c1,U+64c7,U+64ca,U+651d,U+6557,U+65e3,U+694a,U+6a13,U+6a39,U+6a4b,U+6a94,U+6b61,U+6b72,U+6b78,U+6b98,U+6c59,U+6e09,U+6e2c,U+6eab,U+6f22,U+6f64,U+7063,U+707d,U+7159,U+7274,U+755d,U+7562,U+7570,U+7642,U+7843,U+7955,U+79ae,U+7b46,U+7bc9,U+7c21,U+7c4c,U+7c64,U+7d19,U+7d1b,U+7d21,U+7d30,U+7d39,U+7d55,U+7da0,U+7db2,U+7db5,U+7df4,U+7e3e,U+7e8d,U+7f70,U+807d,U+812b,U+8166,U+820a,U+8271,U+838a,U+8449,U+8667,U+885d,U+89ba,U+8a02,U+8a0e,U+8a17,U+8a34,U+8a9e,U+8ab0,U+8ab2,U+8b1d,U+8b7d,U+8b80,U+8c50,U+8ca2,U+8cab,U+8cb4,U+8cb8,U+8cd3,U+8d0a,U+8d99,U+8da8,U+8e10,U+8e8d,U+8ecc,U+8f1b,U+8f1d,U+8f2a,U+8f38,U+9055,U+90f5,U+9127,U+91dd,U+9245,U+9304,U+9375,U+937e,U+9451,U+95c6,U+9678,U+968e,U+96d6,U+96dc,U+9748,U+97a6,U+97d3,U+9806,U+9813,U+9858,U+98ef,U+9928,U+99d0,U+9b06,U+9b5a,U+9b6f,U+9bae,U+9d6c,U+9e97,U+9f4a;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./38.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4e26,U+4e9e,U+4f86,U+4fb7,U+500b,U+5011,U+5099,U+50a2,U+50b3,U+50f9,U+5104,U+512a,U+5167,U+5169,U+5225,U+5275,U+5283,U+52d5,U+52d9,U+52e2,U+5340,U+5354,U+53c3,U+54e1,U+554f,U+55ae,U+570b,U+5718,U+5831,U+5834,U+5b78,U+5be6,U+5c07-5c08,U+5c0d-5c0e,U+5e36,U+5e79,U+5e7e,U+5ee3,U+5f35,U+5f37,U+5f9e,U+61c9,U+6230,U+64da,U+654e,U+6578,U+6642,U+66f8,U+6703,U+6771,U+67fb,U+689d,U+696d,U+6975,U+69cb,U+6a19,U+6a23,U+6a5f,U+6b0a,U+6c7a,U+6c92,U+6e96,U+6fdf,U+7121,U+71df,U+722d,U+7232,U+73fe,U+74b0,U+7522,U+7576,U+767c,U+771e,U+77ad,U+78ba,U+7a05,U+7a2e,U+7a4d,U+7d1a,U+7d44,U+7d50,U+7d66,U+7d71,U+7d93,U+7e23,U+7e3d,U+7e54,U+7e94,U+7fa9,U+806f,U+8077,U+8207,U+8209,U+83d3,U+83ef,U+842c,U+8655,U+8846,U+8853,U+8855,U+88cf,U+88dd,U+88fd,U+898b,U+898f,U+8996,U+89c0,U+8a08,U+8a18,U+8a2d,U+8a71-8a72,U+8a8c-8a8d,U+8aaa,U+8abf,U+8ac7,U+8ad6,U+8b49,U+8b70,U+8b8a,U+8cac,U+8cbb,U+8cbf,U+8cc7,U+8cea,U+8eca,U+8ecd,U+8f49,U+8fa6,U+8fb2,U+8ff4,U+9019,U+9032,U+904b,U+904e,U+9054,U+9078,U+9084,U+9109,U+92b7,U+9336,U+93ae,U+9577,U+9580,U+958b,U+9593,U+95a4,U+95dc,U+968a,U+969b,U+96bb,U+96e3,U+96fb,U+9805,U+9818,U+982d,U+984c,U+98a8,U+9ad4,U+9ebc,U+9ede,U+9ee8,U+9f63;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./36.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4f1b,U+507e,U+5181,U+523f,U+52a2,U+5326,U+537a,U+53a3,U+5423,U+5459,U+54b4,U+54d9,U+55be,U+57d8,U+5941,U+5a08,U+5b37,U+5cbd,U+5e31,U+5e5e,U+5f11,U+610d,U+6126,U+6206,U+6322,U+63b4,U+63f8,U+6445,U+6769,U+67a8,U+680a,U+6864,U+69e0,U+6a65,U+6d48,U+6e16,U+6ed7,U+7173,U+72ef,U+7303,U+7321,U+7605,U+78b9,U+7962,U+7a06,U+7aad,U+7ba8,U+7c16,U+7cc7,U+7d77,U+7ea1,U+7ea5,U+7ea9,U+7ec1,U+7ef2,U+7f02,U+7f07,U+7f0b-7f0c,U+7f0f,U+7f12,U+7f21,U+7f23,U+7f2f,U+7f74,U+80b7,U+80e8,U+80ea,U+8114,U+8136,U+8223,U+823b,U+8288,U+82c8,U+8311,U+835b,U+836d,U+83b6,U+8411,U+8487,U+84e3,U+866e,U+867f,U+86f1-86f2,U+88e5,U+89cb-89cc,U+89cf,U+89ef,U+8ba0,U+8bd4,U+8bdc,U+8c02,U+8c18,U+8c2b,U+8c33,U+8db1,U+8dd6,U+8f7a,U+8f7e,U+8f81-8f82,U+948b,U+94ac,U+94b7-94b8,U+94d8,U+94de,U+94eb,U+950d,U+9513-9514,U+9516,U+9518,U+9529,U+9538,U+953f,U+954e,U+9561,U+9565,U+9568-956a,U+956c,U+95fc,U+9667,U+9792,U+97b2,U+97b4,U+98a1,U+98e7,U+9967,U+9969,U+996b,U+9987,U+9a75,U+9a7a,U+9a80,U+9a92,U+9a96,U+9aa3,U+9c86,U+9c8e,U+9c94-9c95,U+9c9a,U+9ca0-9ca1,U+9ca3,U+9cb4,U+9cbd,U+9cd0,U+9cd4,U+9ce2,U+9e2b,U+9e31,U+9e36,U+9e38,U+9e3a,U+9e4b,U+9e4e,U+9e55,U+9e63,U+9e68-9e6a,U+9e71,U+9e7e,U+9ebd,U+9ec9,U+9eea,U+9f0d,U+9f51;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./35.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4f65,U+50a7,U+5240,U+5452,U+5456,U+54d3,U+56df,U+57ef,U+59ab,U+5aaa,U+5ad4,U+5af1,U+5d5b,U+5d5d,U+5d74,U+5def,U+5e0f,U+5e42,U+5e91,U+6003-6004,U+603c,U+60ab,U+60ad,U+61b7,U+6217,U+64ba,U+67a7,U+680c,U+6861,U+6a7c,U+6b81,U+6c07,U+6ca9,U+6cf6-6cf7,U+6cfa,U+6f74,U+709d,U+7198,U+72ad,U+72f2,U+737e,U+7477,U+748e,U+75ac,U+75d6,U+7617,U+763f,U+76b2,U+7726,U+7817,U+781c,U+7b3e,U+7ba7,U+7c74,U+7c9c-7c9d,U+7cc1,U+7e9f,U+7ee0-7ee1,U+7ee8,U+7ef1,U+7efe,U+7f01,U+7f11,U+7f17,U+7f26-7f27,U+7f31,U+8279,U+82c1,U+82d8,U+835c,U+836c,U+839c,U+83bc,U+8489,U+848c,U+84e0,U+86f4,U+886e,U+88e2-88e3,U+8bb5,U+8bce,U+8bd3,U+8bd6,U+8bf3,U+8bf9,U+8bfc,U+8c04,U+8c16-8c17,U+8c1d,U+8c25,U+8c35-8c36,U+8d40,U+8d46,U+8d4d,U+8d5c,U+8dde,U+8f6d,U+8f75,U+8f8e,U+8f94,U+90cf,U+917e,U+94aa-94ab,U+94c8,U+94ca,U+94d1,U+94d5,U+94d7,U+94df,U+94e5,U+94e9-94ea,U+94f3,U+94f7,U+94fc-94fd,U+9515,U+951d,U+952a,U+952c,U+9545,U+954f,U+9554,U+9558-9559,U+9566-9567,U+9571-9572,U+95f1,U+9608,U+960f,U+96e0,U+97af,U+9878,U+987c,U+9883,U+988f,U+989f,U+98d1,U+98d5,U+990d,U+9963,U+9993,U+9a93,U+9acc,U+9b49,U+9c8b,U+9c9e,U+9ca5,U+9ca7,U+9ca9,U+9cad-9cae,U+9cb1,U+9cce,U+9cd3,U+9e37,U+9e39,U+9e41,U+9e46-9e48,U+9ee9,U+9f39,U+9f80,U+9f85,U+9f87;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./37.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4e2c,U+522d,U+54d5,U+54dc,U+5523,U+5786,U+5c66,U+5e3b,U+5f2a,U+61d4,U+620b,U+6484,U+684a,U+6920,U+6bf5,U+6ee0,U+6f24,U+6f46,U+717a,U+770d,U+7857,U+7f32-7f33,U+8022,U+804d,U+817d,U+836e,U+8539,U+877e,U+8bf6,U+8c2e,U+8d33,U+8d47,U+8d55,U+8e2c,U+8e9c,U+8f77,U+8f79,U+9494,U+94b6,U+94f4,U+94f9,U+950a,U+950e,U+951e,U+952b,U+953c,U+953e,U+9544,U+9564,U+95f6,U+9603,U+960c-960d,U+98a5,U+9a98,U+9a9f,U+9c92,U+9ca6,U+9cb0,U+9cba,U+9cbc,U+9cc6,U+9ccb,U+9cd8,U+9e32,U+9e5b,U+9f44,U+9f86;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./34.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4f25,U+4f27,U+4faa,U+4fe3,U+4fe6,U+51eb,U+5250,U+538d,U+53c1,U+5453,U+54d4,U+54dd,U+556d,U+55f3,U+56af,U+5739,U+575c,U+57b2,U+57b4,U+57da,U+5ad2,U+5d03,U+6079,U+6120,U+629f,U+6332,U+63bc,U+64b8,U+679e,U+67b3,U+67fd,U+6800,U+691f,U+6924,U+6987,U+6989,U+6aa9,U+6b24,U+6b87,U+6d4d,U+6e0c,U+6f4b,U+72b8,U+73d0,U+74d2,U+75a0,U+75c8,U+75e8,U+765e,U+7856,U+7877,U+789b,U+7a51,U+7b15,U+7b5a,U+7ba6,U+7baa,U+7ccd,U+7ecb,U+7ed0,U+7ed4,U+7ed7,U+7ee6,U+7efa-7efb,U+7f0d,U+7f1b,U+7f1f,U+7f22,U+7f35,U+8027,U+80fc,U+816d,U+81bb,U+82cc,U+8315,U+8368-8369,U+83b3-83b4,U+83b8,U+85ae,U+86cf,U+877c,U+8a8a,U+8ba6-8ba7,U+8bcc,U+8bdf,U+8be8,U+8bee,U+8c00,U+8c07,U+8c14,U+8c20,U+8c2f-8c30,U+8d30,U+8d36,U+8d3d,U+8d59,U+8df8,U+8e2f,U+8e70,U+8f78,U+8f87,U+8f8b,U+8f8f,U+8f9a,U+90ba,U+90c4,U+90d0,U+917d,U+933e,U+9486-9487,U+948c-948d,U+948f-9490,U+94ad,U+94b2,U+94bd,U+94cd,U+94d2,U+94d6,U+94d9,U+94ef,U+9507,U+951b,U+9531,U+9546,U+954a,U+955e,U+956b,U+95e9,U+95f3,U+9604,U+9609-960b,U+9612,U+9615,U+9617,U+9765,U+97ea,U+9880,U+989a-989b,U+989e,U+98a7,U+996c,U+9980,U+9991,U+9a78,U+9a7d,U+9a88,U+9aa0,U+9aa2,U+9b47,U+9c82,U+9c87,U+9c90,U+9c9b,U+9cb5,U+9cc3,U+9cc7,U+9cca,U+9cd9,U+9e28,U+9e2c,U+9e42,U+9e58,U+9e5a,U+9e5e,U+9e6c,U+9efe,U+9f0b,U+9f88,U+9f8a,U+9f8c;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./33.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4fa9,U+506c,U+50a5,U+51fc,U+520d,U+523d,U+53a9,U+549d,U+551b,U+5527,U+556e,U+55eb-55ec,U+5624,U+568f,U+56f5,U+57a7,U+57d9,U+57dd,U+5942,U+5a32,U+5a75,U+5b73,U+5c98,U+5cbf,U+5cc4,U+5ce4,U+5eea,U+5ffe,U+607b,U+61d1,U+622c,U+6266,U+626a,U+63b3,U+63b8,U+63ff,U+66a7,U+67a5,U+6860,U+6867,U+68c2,U+6901,U+6a2f,U+6a79,U+6b92-6b93,U+6bc2,U+6c29,U+6c32,U+6ca3-6ca4,U+6da0,U+6e86,U+6edf,U+6fd1,U+7080,U+7116,U+7145,U+72cd,U+72de,U+72f0,U+732c,U+7391,U+7596,U+75b1,U+75b4,U+766f,U+7751,U+789c,U+7bd1,U+7ea3,U+7ea8,U+7eb0,U+7ebe,U+7ec0,U+7eeb,U+7eef,U+7f25,U+7f2c,U+8191,U+8297,U+8314,U+835a,U+8366,U+84d1,U+8572,U+85c1,U+85d3,U+8616,U+866c,U+86ac,U+86ca,U+86d4,U+86f3,U+8748,U+88c6,U+89c7,U+89ca,U+89ce,U+89d0,U+89de,U+8ba3,U+8baa-8bab,U+8bc2,U+8bdb,U+8be4,U+8bf0,U+8c15,U+8c21,U+8c2a,U+8d49,U+8db8,U+8dc4,U+8df9,U+8e51,U+8e7f,U+8f6b,U+8f73,U+8ff3,U+9026,U+90d3,U+9495,U+9497,U+949c,U+94a3-94a4,U+94af,U+94b9-94ba,U+94bf,U+94cb-94cc,U+94e0-94e1,U+94f0,U+9509,U+9512,U+951f,U+9534,U+9552-9553,U+9557,U+955d,U+9562,U+9791,U+9889,U+9894,U+98a2,U+9974,U+998a,U+9990,U+9994-9995,U+9a9b-9a9c,U+9aa7,U+9ac5,U+9c88,U+9c91,U+9ca2,U+9cb2-9cb3,U+9cb6-9cb7,U+9cc5,U+9ccf,U+9cd5,U+9cdc,U+9e22,U+9e29-9e2a,U+9e57,U+9e67,U+9e6b,U+9e73,U+9eb8,U+9f83,U+9f89,U+9f9b;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./31.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4e98,U+4f2b,U+4fa5,U+4fac,U+4fe8,U+5156,U+52d0,U+5364,U+53ae,U+53fd,U+545b,U+5494,U+54a4,U+5520,U+5567,U+5618,U+56f1,U+579b,U+5811,U+59a9,U+59d7,U+5a76,U+5c49,U+5c96,U+5ce5,U+5d02,U+5d58,U+6005,U+607a,U+60ec-60ee,U+62a0,U+6342,U+6376,U+6400,U+6402,U+64b7,U+64de,U+6593,U+6654,U+67e0,U+6805,U+6808,U+683e,U+692d,U+6988,U+69db,U+69df,U+6b9a,U+6cde,U+6d52,U+6da7,U+6e85,U+7096,U+70c3,U+7266,U+728a,U+72b7,U+7315,U+736d,U+73ae,U+73ba,U+73d1,U+740f,U+74ee-74ef,U+759f,U+7663,U+7691,U+772f,U+77fe,U+783a,U+783e,U+7977,U+7b3a,U+7bd3,U+7eca,U+7edb,U+7ef7,U+7f1c,U+7f28,U+7f2b,U+7f30,U+7f42,U+7f81,U+7ff1,U+80ae,U+80eb,U+810d,U+8110,U+8113,U+814c,U+82d4,U+830e,U+835e,U+8364,U+836a,U+83ba,U+84df,U+84e6,U+8511,U+853a,U+864f,U+8715,U+874e,U+8845,U+8884-8885,U+8ba5,U+8bb7,U+8bd9,U+8be0-8be1,U+8be7,U+8bfd,U+8bff,U+8c1a,U+8c1f,U+8c24,U+8c27,U+8c2c,U+8d4a,U+8d4e,U+8d58,U+8d61,U+8e0c,U+8e52,U+8f76,U+8f8a,U+8f98,U+8ff8,U+90ac,U+90e7,U+949a-949b,U+949d,U+94a8,U+94b4,U+94c0,U+94c2,U+94c6,U+94d0,U+94e2-94e4,U+94ec,U+94f1,U+94ff,U+9522,U+9525,U+9535,U+9550,U+9556,U+955b,U+956f-9570,U+95eb,U+95f0,U+9611,U+9619,U+988a,U+988d,U+9893,U+98e8,U+9975,U+9981,U+998d,U+998f,U+9a6e,U+9a77,U+9a7f,U+9a87,U+9a8a,U+9aa1,U+9b13,U+9c7f,U+9c9f,U+9ca4,U+9cdd,U+9e2f,U+9e33,U+9e35,U+9e3e,U+9e43-9e44,U+9e5c,U+9e6d;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./32.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4eb5,U+4fea,U+507b,U+50a9,U+51a2,U+5457,U+5499,U+549b,U+54d2,U+5522,U+556c,U+55bd,U+565c,U+567c,U+5785,U+57a9,U+57ad,U+59aa,U+59f9,U+5a06,U+5b6a,U+5c99,U+5fcf,U+6002,U+6006,U+603f,U+6078,U+607d,U+607f,U+60af,U+62a1,U+631b,U+631e,U+637b,U+6448,U+64b5,U+6619,U+6635,U+67ad,U+680e,U+6d43,U+6d54,U+6d9e,U+6e11,U+6ee2,U+704f,U+70e9,U+70ec,U+7118,U+724d,U+72c8,U+73c9,U+73cf,U+7572,U+75c9,U+7618,U+762a,U+7800,U+783b,U+7980,U+7a23,U+7ba9,U+7bab,U+7c41,U+7c7c,U+7cbd,U+7ec2,U+7ec9,U+7ecc,U+7ef6,U+7f03-7f04,U+7f08,U+7f19,U+7f9f,U+8069,U+80c4,U+817c,U+82cb,U+830f,U+8360,U+8365,U+8385,U+8424,U+84e5,U+8537,U+8671,U+869d,U+86ce,U+86f0,U+8717,U+87a8,U+891b,U+8934,U+8941,U+89d1,U+8bb9,U+8bc3,U+8bc5,U+8bcb,U+8bcf,U+8bd2,U+8bd8,U+8be9,U+8c0c,U+8c0f,U+8c11-8c12,U+8c29,U+8c32,U+8d32,U+8d45,U+8d53,U+8d5d,U+8df7,U+8e8f,U+8f71-8f72,U+8f7c,U+8f95,U+8fab,U+909d,U+90e6,U+92ae,U+9485,U+948e,U+9492,U+94a1,U+94b5,U+94bc,U+94c4,U+94c9,U+94db,U+94e7,U+9502-9503,U+9506,U+950f,U+9511,U+9517,U+9528,U+9536-9537,U+9542,U+9549,U+9563,U+9573,U+95fe,U+9602,U+9606,U+9616,U+961a,U+9649,U+96f3,U+9701,U+972d,U+9753,U+97eb,U+988c,U+98a6,U+98d2-98d3,U+98d9-98da,U+9968,U+996f,U+9977,U+997d,U+9984,U+998b,U+9a81,U+9a90,U+9a9d-9a9e,U+9acb,U+9c85,U+9ca8,U+9cab,U+9ccd,U+9cdf,U+9e20,U+9e49,U+9e4c,U+9e51,U+9e66,U+9f8b;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./30.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4fa3,U+51c4,U+51db,U+5220,U+532e,U+5450,U+5455,U+545c,U+54df,U+5507,U+5578,U+56a3,U+5742,U+575e,U+5815,U+5a04-5a05,U+5a34,U+5bdd,U+5c34,U+5ce6,U+5ce8,U+5dc5,U+5e27,U+5e3c,U+5eb5,U+5f95,U+6064,U+60eb,U+6123,U+6151,U+62e3,U+62e7,U+631f,U+6361,U+6363,U+63b7,U+6405,U+6512,U+655b,U+65f7,U+672d,U+6809,U+6862,U+6866,U+6868,U+68f1,U+6984,U+6a71,U+6a90,U+6ba1,U+6bd9,U+6be1,U+6c79,U+6c93,U+6ca6,U+6cf8,U+6cfe,U+6d4a,U+6d4f,U+6d9f,U+6da1,U+6da3,U+6da9,U+6e0d-6e0e,U+6eaf,U+6ee4,U+6ee6,U+6f13,U+709c,U+70bd,U+70db,U+70e8,U+72f8,U+73f2,U+7410,U+7487,U+75a1,U+75ae,U+75d2,U+75eb,U+766b,U+7682,U+76b1,U+76cf,U+77eb,U+781a,U+796f,U+79c3,U+79c6,U+7a8d,U+7a9c,U+7aa5-7aa6,U+7b03,U+7bf1,U+7eab,U+7ead,U+7ec5,U+7eda,U+7ede,U+7ee2,U+7eee,U+7ef0,U+7efd,U+7f00,U+7f0e,U+7f24,U+7f2d-7f2e,U+7fd8,U+80e7,U+82b8,U+82c7,U+82ce,U+8426,U+853c,U+8682,U+86ee,U+8747,U+8749,U+8bb4,U+8bbd,U+8be3,U+8bec,U+8bf2,U+8bf5,U+8c06,U+8c0d-8c0e,U+8c19,U+8c1b,U+8d26,U+8d31,U+8d3b-8d3c,U+8d48,U+8d50,U+8f84,U+8f8d,U+8f97,U+8f99,U+8fe9,U+94a0,U+94ae,U+94b0,U+94b3,U+94ce,U+94e8,U+94f2,U+94f5,U+9504,U+951a,U+952f-9530,U+9532,U+9539,U+9541,U+954c-954d,U+956d,U+95f5,U+95fa,U+9668,U+96bd,U+97ec,U+9885,U+9890,U+996a,U+997a,U+9985,U+9992,U+9a6d,U+9a6f,U+9a74,U+9a79,U+9a85,U+9a8b,U+9a8f,U+9aa5,U+9cb8,U+9cbb,U+9cc4,U+9ccc,U+9cd7,U+9cde,U+9e25-9e26,U+9e4a,U+9f9f;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./29.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4ec6-4ec7,U+4ed1,U+4f1e,U+4f63,U+4fa0,U+4fde,U+50bb,U+50f5,U+517d,U+51d1,U+51ff,U+5239,U+5300,U+535c,U+538c,U+53a2,U+53e0,U+5413,U+548f,U+54bd,U+54c4,U+54d1,U+54d7,U+5582,U+5631,U+566a,U+575f-5760,U+5792,U+57ab,U+58f6,U+5978,U+5a07,U+5ba0,U+5c27,U+5c38,U+5c7f,U+5c82,U+5de2,U+5e18,U+5e90,U+5f26,U+5f5d,U+601c,U+6073,U+607c,U+60e7,U+61d2,U+621a,U+62e2,U+62e6,U+631a,U+631d,U+6320,U+6328,U+6346,U+63ba,U+6401,U+658b,U+65a9,U+663c,U+6652,U+6655-6656,U+6760,U+67ab,U+6816-6817,U+6869,U+6a31,U+6b7c,U+6bb4,U+6c22,U+6ca5,U+6cbe,U+6cc4,U+6cfb,U+6d3c,U+6d47,U+6da4,U+6e0a,U+6e83,U+6f4d,U+6f9c,U+6fd2,U+7076,U+70c1,U+70eb,U+718f,U+72ed,U+7405,U+7476,U+7574,U+75af,U+75ea,U+75f4,U+762b,U+763e,U+7741,U+7792,U+77e9,U+77f6,U+7845,U+7978,U+7985,U+79fd,U+7ad6,U+7b0b,U+7b5b,U+7b5d,U+7caa,U+7cd5,U+7eac,U+7eb6,U+7ece,U+7ed1,U+7ee5,U+7f09,U+7f15,U+7f1a,U+7f20,U+7f2a,U+7fa1,U+8038,U+803b,U+804b,U+80b4,U+80be,U+817b,U+8231,U+829c,U+82a6,U+8327,U+8346,U+835f,U+8367,U+836b,U+83b9,U+841d,U+8471,U+8681,U+8721,U+889c,U+89c5,U+8bb3,U+8bb6,U+8bc0,U+8beb,U+8c05,U+8c1c,U+8c23,U+8c34,U+8d1e,U+8d2c,U+8d2e,U+8d42-8d43,U+8dfb,U+8e0a,U+8eaf,U+8f69,U+900a,U+90f8,U+915d,U+9171,U+9489-948a,U+9499,U+94a5,U+94a7,U+94be,U+94c5,U+94ee,U+9508,U+950c,U+9523-9524,U+952d,U+9540,U+9551,U+9576,U+95f7-95f8,U+95fd,U+9600,U+960e,U+9647,U+96b6,U+96cf,U+9709,U+97e7,U+98a0,U+98a4,U+9965,U+9976,U+997f,U+9988,U+9a73,U+9a7c,U+9a82,U+9a86,U+9a9a,U+9cd6,U+9e3d,U+9e70,U+9f7f;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./28.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4e11,U+4e1b,U+4e22,U+4e27,U+4fa6,U+4fe9,U+4fed,U+5179,U+5188,U+51bb,U+51c9,U+51ef,U+51f6,U+522e,U+5265,U+529d,U+52cb,U+5367,U+5395,U+5398,U+53a8,U+53d9,U+53f9,U+540a,U+5415,U+541e,U+5446,U+54b8,U+5524,U+55b7,U+575d,U+5784,U+57a6,U+58f3,U+5938-5939,U+5986,U+5a74,U+5c18,U+5c4f,U+5c61,U+5c9a,U+5cb3,U+5d2d,U+5e05,U+5e1c,U+5e99,U+5e9e,U+5f25,U+5f2f,U+5f66,U+5fa1,U+604b,U+6052,U+60a6,U+60ac,U+60e8,U+6124,U+6251,U+629a-629b,U+62ac,U+6321,U+6323,U+633d,U+635e,U+63fd,U+641c,U+643a,U+6491,U+6735,U+6746,U+67a2-67a3,U+680b,U+6c64,U+6ca7,U+6caa,U+6cfc,U+6d12,U+6d45-6d46,U+6d51,U+6d9d,U+6dc0,U+6e17,U+6e7f,U+6e89,U+6ee5,U+6f47,U+707f,U+70c2,U+70e6,U+7115,U+7237,U+727a,U+72b9,U+72ee,U+72f1,U+730e,U+732b,U+739b,U+743c,U+7750,U+77a9,U+7816,U+7855,U+78b1,U+7984,U+7a83,U+7a91,U+7a9d,U+7b3c,U+7b4b,U+7ca4,U+7eb1,U+7eb9,U+7ed2,U+7ee3,U+7eea,U+7ef3,U+7ef5,U+7ef8,U+7f05-7f06,U+7f14,U+7f1d,U+7f62,U+8042,U+806a,U+80a0,U+80a4,U+80bf,U+80c1,U+8109,U+810f,U+814a,U+8230,U+8273,U+82cd,U+82f9,U+8350,U+83b2,U+8427,U+8574,U+867e,U+8680,U+8695,U+8854,U+886c,U+88e4,U+8bbc,U+8bc8,U+8bd1,U+8be6,U+8bf1,U+8c10,U+8c26,U+8c28,U+8c2d,U+8c31,U+8d3f,U+8d41,U+8d4b-8d4c,U+8d63,U+8e2a,U+8f67,U+8f74,U+8f90,U+8fa9,U+903b,U+903e,U+9065,U+90c1,U+917f,U+9493,U+949e,U+94a9,U+94c3,U+94dd,U+94ed,U+94f8,U+94fe,U+9510,U+953b,U+95ea,U+9601,U+9610,U+96c7,U+96fe,U+97e6,U+97f5,U+9875,U+9877,U+987d,U+9882,U+9888,U+989c,U+98d8,U+997c,U+9a70,U+9a84,U+9a91,U+9aa4,U+9c8d,U+9e2d,U+9e3f,U+9e45,U+9e64,U+9f20,U+9f9a;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./25.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4e07,U+4e0e,U+4e13,U+4e1a,U+4e1c,U+4e24-4e25,U+4e2a,U+4e3a,U+4e3e,U+4e48-4e49,U+4e50,U+4e61,U+4e66,U+4e70,U+4e86,U+4e89,U+4e8e,U+4e9a,U+4ea7,U+4eb2,U+4ebf,U+4ec5,U+4ece,U+4eec,U+4ef7,U+4f17-4f18,U+4f1a,U+4f20,U+4f53,U+4f59,U+4f60,U+4fee,U+513f,U+514b,U+515a,U+5173-5174,U+517b,U+5185,U+519b-519c,U+51b3,U+51b5,U+51c6,U+51e0,U+51fa,U+5212,U+5218-5219,U+521b,U+522b,U+5236,U+529e,U+52a1,U+52a8,U+52b3,U+52bf,U+533a-533b,U+5343,U+534e-534f,U+5355-5356,U+5360,U+5373-5374,U+5386,U+53bf,U+53c2,U+53cc,U+53d1,U+53d8,U+53ea,U+53f7,U+5408,U+540c,U+540e,U+5458,U+54cd,U+56de,U+56e2,U+56f0,U+56fd-56fe,U+573a,U+575a,U+58f0,U+5904,U+5907,U+590d,U+5934,U+5956,U+5b66,U+5b83,U+5b9e,U+5ba1,U+5bb6,U+5bf9,U+5bfc,U+5c06,U+5c14,U+5c3d,U+5c40,U+5c42,U+5c4a,U+5e03,U+5e08,U+5e26,U+5e2d,U+5e72,U+5e76,U+5e7f,U+5e94,U+5f00,U+5f20,U+5f3a,U+5f53,U+5fd7,U+603b,U+6218,U+6237,U+624d,U+6267,U+62a4-62a5,U+62c5,U+6325,U+636e,U+6559,U+6570,U+65ad,U+65e0,U+65f6,U+663e,U+672f,U+673a,U+6743,U+6761,U+6765,U+6781,U+6784,U+679c,U+67e5,U+6807,U+6837,U+68c0,U+6c14,U+6ca1,U+6ce8,U+6d4e,U+6e38,U+6ee1,U+70b9,U+70ed,U+7231,U+73af-73b0,U+7535,U+76d1,U+771f,U+7740,U+7840,U+786e,U+79cd,U+79ef-79f0,U+7a0e,U+7a33,U+7ade,U+7c7b,U+7cae,U+7d27,U+7ea2,U+7ea6-7ea7,U+7eaa,U+7ebf,U+7ec4,U+7ec7,U+7ecf,U+7ed3,U+7ed9,U+7edf,U+7ee7,U+7eed,U+7ef4,U+7fa4,U+804c,U+8054,U+81f4,U+827a,U+8282,U+8303,U+836f,U+83b7,U+8425,U+8868,U+88c5,U+89c1-89c2,U+89c4,U+89c6,U+8ba1,U+8ba4,U+8ba9,U+8bae-8bb0,U+8bb2,U+8bb8,U+8bba,U+8bbe-8bbf,U+8bc1,U+8bc4,U+8bc6,U+8bd5,U+8bdd,U+8be5,U+8bf4,U+8bf7,U+8c03,U+8c08,U+8d1f,U+8d22-8d23,U+8d27-8d28,U+8d2d,U+8d38-8d39,U+8d44,U+8d5b,U+8f66,U+8f6c,U+8f83,U+8fb9,U+8fbe,U+8fc7,U+8fd0,U+8fd8-8fd9,U+8fdb-8fdc,U+8fde,U+9002,U+9009,U+91cc,U+94b1,U+94c1,U+94f6,U+9500,U+9547,U+957f,U+95e8,U+95ee,U+95f4,U+95fb,U+961f,U+9633,U+9645,U+9648,U+968f,U+96be,U+9879,U+987b,U+9884,U+9886,U+9898,U+989d,U+98ce,U+9a6c,U+9a8c,U+9ec4;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./26.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4e1d,U+4e30,U+4e34,U+4e3d,U+4e4c,U+4e60,U+4e71,U+4e8f,U+4e91,U+4ea9,U+4eea,U+4f1f,U+4f24,U+501f,U+503a,U+503e,U+507f,U+50a8,U+5170,U+518c,U+5199,U+51b2,U+51cf,U+51fb,U+521a,U+5267,U+52b1,U+536b,U+5377,U+5385,U+538b,U+53a6,U+53f6,U+5403,U+5428,U+542c,U+542f,U+5434,U+56ed,U+56f4,U+574f,U+5757,U+58ee,U+591f,U+592b,U+593a,U+594b,U+5965,U+5987,U+5b59,U+5b81,U+5b9d,U+5bbd-5bbe,U+5bfb,U+5c5e,U+5c81,U+5c97,U+5c9b,U+5ce1,U+5cf0,U+5de8,U+5e01,U+5e2e,U+5e84,U+5e86,U+5e93,U+5f02,U+5f52,U+5f55,U+5f69,U+5f7b,U+5f81,U+5f84,U+5ff5,U+6000-6001,U+60ca,U+613f,U+620f,U+624e,U+6258,U+6269,U+626c,U+62a2,U+62b5,U+62e5,U+62e9,U+6302,U+635f,U+6362,U+6444,U+6446,U+6597,U+65d7,U+65e2,U+65e7,U+6653,U+6731,U+6742,U+6768,U+6770,U+677e-677f,U+6811,U+6838,U+6863,U+6865,U+6881,U+697c,U+6b22,U+6b27,U+6b8b,U+6bd5,U+6c47,U+6c49,U+6c61,U+6c88,U+6cfd,U+6d4b,U+6d89,U+6da6,U+6da8,U+6e10,U+6e29,U+6e7e,U+6f5c,U+7075,U+707e,U+70df,U+72b6,U+72ec,U+732e,U+753b,U+7597,U+76d6,U+76d8,U+77ff,U+793c,U+79bb,U+79c1,U+79cb,U+79d8,U+7b14,U+7b51,U+7b79,U+7b7e,U+7b80,U+7d2f,U+7eaf,U+7eb3,U+7eb7-7eb8,U+7eba,U+7ec3,U+7ec6,U+7ec8,U+7ecd,U+7edd,U+7ee9,U+7efc,U+7eff,U+7f16,U+7f51,U+7f57,U+7f5a,U+80cc,U+80dc,U+8111,U+8131,U+8270,U+82cf,U+8363,U+8428,U+8651,U+867d,U+8865,U+89c8-89c9,U+8a89,U+8ba2,U+8ba8,U+8bad,U+8bc9,U+8bcd,U+8bd7,U+8bed,U+8bef,U+8bfb,U+8bfe,U+8c01,U+8c22,U+8d21,U+8d25,U+8d2b,U+8d2f,U+8d35,U+8d37,U+8d5e,U+8d75-8d76,U+8d8b,U+8dc3,U+8df5,U+8f68,U+8f6e-8f6f,U+8f7b,U+8f7d,U+8f86,U+8f89,U+8f93,U+8fbd,U+8fdd,U+8ff9,U+9057,U+9093,U+90ae,U+90d1,U+9274,U+9488,U+949f,U+94a2,U+9519,U+9526,U+952e,U+9636,U+9646,U+9669,U+97e9,U+987a,U+987e-987f,U+98de,U+996d-996e,U+9986,U+9a7b,U+9c7c,U+9c81,U+9c9c,U+9e4f,U+9ed1,U+9f50,U+9f99;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./27.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4e54,U+4ed3,U+4eff,U+4f19,U+4f26,U+4f2a,U+4f5b,U+4fa7-4fa8,U+4fca,U+5077,U+5151,U+51ac,U+51af,U+51c0,U+51cc,U+51e4,U+51ed,U+5242,U+5251,U+5269,U+52b2,U+5362,U+5389,U+5417,U+54a8,U+54f2,U+5706,U+5708,U+5723,U+575b,U+5899,U+5988,U+59dc,U+5a18,U+5a31,U+5baa-5bab,U+5bff,U+5c1d,U+5ca9,U+5cad,U+5de9,U+5e10,U+5e78,U+5e8a,U+5e9f,U+5f03,U+5f39,U+5fc6,U+5fe7,U+6076,U+60e9,U+60ef,U+6108,U+6263,U+626b,U+6270,U+6298,U+62dc,U+62df,U+62e8,U+6324,U+6447,U+644a,U+654c,U+65cb,U+6606,U+664b,U+6682,U+6697,U+6734,U+6740,U+676f,U+67aa,U+67dc,U+680f,U+68a6,U+68cb,U+6982,U+6a2a,U+6b32,U+6bc1,U+6c9f,U+6cea,U+6d01,U+6d53,U+6d8c,U+6d9b,U+6e14,U+6eda,U+6ede,U+6ee8-6ee9,U+706d,U+706f,U+7089,U+70ae,U+70bc,U+70e7,U+7275,U+732a,U+73a9,U+74f6,U+7545,U+75c7,U+76d0,U+76d7,U+7801,U+788d,U+7a77,U+7bee,U+7cd6,U+7ea0,U+7ea4,U+7eb2,U+7eb5,U+7ebd,U+7ed5,U+7ed8,U+7edc,U+7f13,U+7f18,U+7f29,U+7f34,U+8083,U+80c0,U+80c6,U+80f6,U+811a,U+8138,U+817e,U+8206,U+820d,U+8361,U+83b1,U+848b,U+84dd,U+865a,U+866b,U+88ad,U+89e6,U+8bca,U+8bda,U+8bde,U+8be2,U+8bf8,U+8bfa,U+8c0a-8c0b,U+8c13,U+8c37,U+8d1d,U+8d24,U+8d29-8d2a,U+8d34,U+8d3a,U+8d3e,U+8d4f,U+8d54,U+8d56,U+8d5a,U+8d60,U+8d62,U+8f70,U+8f7f,U+8f85,U+8f88,U+8f91,U+8f96,U+8f9e-8f9f,U+8fc1,U+8fc8,U+8fdf,U+9012,U+90b9,U+90bb,U+9178,U+91ca,U+94a6,U+94bb,U+94dc,U+94fa,U+9501,U+9505,U+950b,U+9521,U+955c,U+95ed,U+95ef,U+95f2,U+95f9,U+9605,U+9614,U+9634-9635,U+9655,U+9690,U+9759,U+9876,U+9881,U+9887,U+9891,U+9896-9897,U+9970-9972,U+9a71,U+9a76,U+9a7e,U+9a97,U+9e1f,U+9e21,U+9e23,U+9ea6,U+9f84;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./24.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4e3f,U+5107,U+5155,U+5216,U+5281,U+5293,U+53b6,U+54f3,U+553c,U+570a,U+5776,U+5819,U+5adc,U+5b32,U+5b65,U+5c88,U+5c8d,U+5f61,U+5fee,U+6067,U+614a,U+615d,U+62f6,U+63ad,U+63be,U+6420,U+6434,U+6499,U+652e,U+67d9,U+67dd,U+6a8e,U+6aa0,U+6b43,U+6bea,U+6c15,U+6d5e,U+71e0,U+72c1,U+72c3,U+72e8,U+730a,U+73e7,U+746d,U+752f,U+754e,U+75b0,U+7603,U+7722,U+778d,U+77e7,U+7809,U+7811,U+78c9,U+78f2,U+7946,U+7967,U+799a,U+7b45,U+7b9d,U+7ba2,U+7cd7,U+8014,U+8028,U+8080,U+80c2,U+80d9,U+80ec,U+810e,U+8159,U+81a3,U+81aa,U+8201,U+833c,U+83e5,U+8459,U+848e,U+84cd,U+84d0,U+84f0,U+85b7,U+871e,U+8723,U+8729,U+8753,U+878b,U+8793,U+87d3,U+88d2,U+8966,U+89dc,U+89eb,U+8b26,U+8e9e,U+8ece,U+8fee,U+9139,U+914f,U+9174,U+9191,U+928e,U+9622,U+9674,U+9b48,U+9e88,U+9eb4,U+9f3d;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./22.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4ef3,U+4f74,U+50d6,U+50ec,U+51ab,U+51b1,U+52d6,U+536e,U+54a9,U+54da,U+55cd,U+564d,U+572f,U+574c,U+576b,U+57fd,U+5844,U+59d2,U+5ae0,U+5b16,U+5b5b,U+5b80,U+5b84,U+5cb5,U+5d1e,U+5d6b,U+5efe,U+5f56,U+5f58,U+5f73,U+5f82,U+5f8c,U+5fc4,U+5fc9,U+5fe4,U+600a,U+602b,U+60dd,U+6106,U+63de,U+641b,U+643f,U+64e4,U+6634,U+676a,U+67b5,U+681d,U+6883,U+69b1,U+69d4,U+6b37,U+6b9b,U+6c46,U+6d7c,U+6eb7,U+6f36,U+6f72,U+6f89,U+6f8c,U+7035,U+7039,U+7113,U+7178,U+71d4,U+7228,U+727f,U+728f,U+72b4,U+72f4,U+7331,U+7481,U+74de,U+74e0,U+7540,U+755b,U+75c3,U+75e6,U+760a,U+761b,U+7625,U+7635,U+763c,U+764d,U+76cd,U+7704,U+7743,U+7747,U+7780,U+7847,U+786a,U+78a5,U+7a02-7a03,U+7aac,U+7ab3,U+7b0a,U+7b4c,U+7b7b,U+7bfc,U+7c0f,U+7c40,U+7ca2,U+7cf8,U+7e3b,U+7f9d,U+7fbc,U+8016,U+8020,U+811e,U+812c,U+8182,U+822f,U+8233,U+825f,U+8268,U+8284,U+828f,U+8291,U+8308,U+831b,U+83a9,U+83dd,U+8406,U+840f,U+845c,U+84b4,U+850c,U+855e,U+863c,U+864d,U+86ba,U+86c4,U+86de,U+873e,U+87ac-87ad,U+87bd,U+87db,U+880a,U+883c,U+887f,U+88bc,U+88f0,U+890a,U+892b,U+895e,U+8a48,U+8c94,U+8dcf,U+8de3,U+8e6f,U+8e90,U+8fb6,U+902d,U+90be,U+90db,U+9164,U+91ad,U+91af,U+936a,U+953a,U+963c,U+9654,U+966c,U+9688,U+96b3,U+9998,U+9aba,U+9adf,U+9aed,U+9b08,U+9b43,U+9f2c,U+9f37;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./21.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4e69,U+4f67,U+4f7e,U+4fdc,U+50e6,U+5196,U+5202,U+5233,U+5363,U+5432,U+5476,U+54ad,U+54cf,U+5537,U+5575,U+5581,U+55cc,U+55fe,U+5601,U+561e,U+56dd,U+5709,U+572c,U+57cf,U+57f8,U+580d,U+5881,U+589a,U+5981,U+59b2,U+5c25,U+5d24,U+5e8b,U+5eb3,U+5ed2,U+5ef4,U+5fad,U+601b,U+6083,U+6092,U+6100,U+62ca,U+6369,U+638e,U+6426,U+646d,U+6535,U+65c4,U+6661,U+66db,U+6715,U+6798,U+67c3,U+68f9,U+698d,U+69ca,U+69ed,U+69f2,U+69ff,U+6a18,U+6b39,U+6bb3,U+6bf9,U+6c05,U+6c0d,U+6cb2,U+6cd6,U+6d33,U+6dab,U+6e53-6e54,U+6ebb,U+6fb6,U+71b5,U+7256,U+725d,U+727e,U+72f7,U+72fb,U+7313,U+739f,U+73e5,U+74ba,U+750f,U+754b,U+758b,U+7630,U+7640,U+76a4,U+775a,U+77bd,U+781f,U+78a1,U+7905,U+79b3,U+7b2b,U+7b2e,U+7b31,U+7b62,U+7b6e,U+7b85,U+7b9c,U+7bcc,U+7bea,U+7c0b,U+7c9e,U+7ce8,U+7e47,U+7f7e,U+7fb0,U+802a,U+8031,U+8071,U+8112,U+8160,U+8169,U+81a6,U+81c1,U+8234,U+829f,U+82a4,U+82e1,U+82fb,U+831a,U+8333,U+83c0,U+83f8,U+841c,U+845a,U+84bd,U+8548,U+85a4,U+8627,U+8629,U+86b5,U+86e9,U+86f8,U+872e,U+8731,U+877b,U+877d,U+8785,U+87ab,U+87ea,U+8813,U+8816,U+8864,U+88ce,U+897b,U+89da,U+89f3,U+8dba,U+8e3a,U+8fd3,U+9161,U+9179,U+91a3,U+961d,U+972a,U+9730,U+9ac0,U+9ae1,U+9aeb,U+9af9,U+9b51,U+9e87,U+9ee2,U+9f17,U+9f19,U+9f2f;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./23.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4e0c,U+4e28,U+4e36,U+4ea0,U+4ec2,U+4f91,U+4f94,U+4fc5,U+502e,U+50ba,U+50ed,U+5182,U+51f5,U+525e,U+5282,U+5290,U+52f9,U+5369,U+54ff,U+552a,U+5588,U+55b5,U+55c9,U+5686,U+57a4,U+57f4,U+580b,U+5820,U+5865,U+58bc,U+5902,U+5925,U+5ab5,U+5be4,U+5c1c,U+5c22,U+5c6e,U+5d3e,U+5ddb,U+5e80,U+5ee8,U+5f50,U+5fed,U+605d,U+609b,U+609d,U+619d,U+6224-6225,U+6243,U+6343,U+63ce,U+63f2,U+640b-640c,U+6496,U+64d0,U+64d7,U+6509,U+6534,U+6549,U+656b,U+6603,U+674c,U+6833,U+6844,U+6957,U+6971,U+6a91,U+6c2a,U+6c5c,U+6cd0,U+6d0e,U+6e2b,U+6eb2,U+6f2d,U+706c,U+70b1,U+70c0,U+721d,U+728b,U+72f3,U+7338-7339,U+734d,U+736c,U+736f,U+74a9,U+750d,U+7513,U+7592,U+75c4,U+762d,U+7643,U+7707,U+7735,U+77a2,U+77b5,U+7839,U+784e,U+786d,U+791e,U+7924,U+793b,U+7953,U+798a,U+7a78,U+7a80,U+7b58,U+7bda,U+7be5,U+7cc8,U+7f68,U+8025,U+8029,U+8035,U+809c,U+80ad,U+80e9,U+80f2,U+8204,U+8221,U+822d,U+824b,U+825a,U+8274,U+827d,U+827f,U+82b0,U+82e0,U+8307,U+8347,U+837d,U+839b,U+83b0,U+83f9,U+8488,U+84b9,U+8579-857a,U+85a8,U+867c,U+86b0,U+86d1,U+86d8,U+8764,U+8770,U+8788,U+8797,U+87b5,U+8803,U+881b,U+8844,U+88fc,U+8930,U+89d6,U+8c85,U+8c8a,U+8c98,U+8dbc,U+8e23,U+8e40,U+8e94,U+8fd5,U+9058,U+90b6,U+914e,U+91a2,U+91b5,U+943e,U+955f,U+963d,U+9794,U+97ab,U+9ab1,U+9ad1,U+9b0f,U+9b2f,U+9ee5,U+9ef9,U+9efb-9efc,U+9fa0;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./18.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4e93,U+4ebb,U+4ec4,U+4ef5,U+4f7b,U+502c,U+5080,U+5121,U+51c7,U+5208,U+52f0,U+530f,U+53f5,U+5464,U+5466,U+54a3,U+54bf,U+54d0,U+5549,U+555c,U+5576,U+558f,U+55b1,U+55f2,U+55f5,U+564c,U+5685,U+56e1,U+571c,U+57a1,U+5807,U+58c5,U+59a4,U+59af,U+59d8,U+5a09,U+5a0c,U+5a4a,U+5a67,U+5b6c,U+5c50,U+5c7a,U+5ca2,U+5d27,U+5d6c,U+5df3,U+5e19,U+5ea0,U+5eb9,U+5ebe,U+5fea,U+6042,U+6175,U+6215,U+6221,U+62bb,U+6308,U+6339,U+643d,U+6441,U+64e2,U+6555,U+659b,U+6677,U+6775,U+678b,U+6832,U+6840,U+68f0,U+6910,U+6934,U+6966,U+6998,U+69ce,U+6a3d,U+6a84,U+6bd6,U+6bfd,U+6c16,U+6c18,U+6cd4,U+6d0c,U+6d60,U+6ddd,U+6ecf,U+6ed3,U+6fb9,U+7023,U+70b7,U+70ca,U+712f,U+7168,U+7284,U+72d9,U+7352,U+73c8,U+740a,U+7441,U+7457,U+75a3,U+75d8,U+75e3-75e4,U+75ff,U+7610,U+7622,U+7688,U+76b4,U+76e5,U+772d,U+7812,U+7818,U+784c,U+7850,U+7887,U+789a,U+78b2,U+78f4,U+7b1e,U+7b24,U+7bb8,U+7bc1,U+7bd9,U+7ccc,U+7f71,U+7fa7,U+7fe6,U+7ff3,U+8052,U+8084,U+8093,U+80b1,U+80e4,U+80ef,U+80f4,U+81ec,U+8202,U+8210,U+828a,U+828e,U+82a8,U+82e3,U+8331,U+83a8,U+83aa,U+83e1,U+84ca,U+84fc,U+853b,U+857b,U+8605,U+8662,U+86b1,U+86b4,U+86c9,U+86ed,U+8725,U+874c,U+8763,U+879f,U+87b3,U+887d,U+88fe,U+89e5,U+8c47,U+8c49,U+8c7a,U+8dd7,U+8e59,U+8e69,U+8e85,U+902f,U+9099,U+909b,U+90c7,U+9143,U+914a,U+91ae,U+91ba,U+975b,U+977c,U+9ab6-9ab7,U+9afb,U+9ecd,U+9edc;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./20.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4e47,U+4f89,U+5261,U+52ac,U+531a,U+5416,U+5454,U+5472,U+5478,U+54bb,U+54c2,U+54de,U+553f,U+55e5,U+560c,U+566b,U+572e,U+5769,U+5793,U+57d2,U+57e4,U+581e,U+5924,U+593c,U+5997,U+59a3,U+5ab8,U+5ad8,U+5b34,U+5b53,U+5ba5,U+5c59,U+5c63,U+5e11,U+5e14,U+5ed1,U+5f40,U+5fbc,U+600d,U+6019,U+605a,U+610e,U+623d,U+624c,U+634c,U+65d2,U+65f0,U+66f7,U+670a,U+6753,U+67e2,U+67f0,U+6855,U+686b,U+6874,U+6939,U+696e,U+6980,U+6a17,U+6aab,U+6b82,U+6b84,U+6bf3,U+6c06,U+6c19-6c1a,U+6d07,U+6d1a,U+6d27,U+6d2b,U+6d91,U+6e6b,U+6e8f,U+6fde,U+7085,U+70bb,U+723b,U+726e,U+72b0,U+72ce,U+72fa,U+7301,U+731e,U+7322,U+738e,U+755a,U+7594,U+75b3,U+760c,U+7615,U+7654,U+771a,U+7765,U+7768,U+77ec,U+78d4,U+78d9,U+7913,U+7957,U+79d5,U+79eb,U+7a70,U+7a86,U+7b25,U+7b2a,U+7b38,U+7b47,U+7b72,U+7c26,U+7dae,U+7e9b,U+7f36,U+7fee,U+801c,U+8043,U+809f,U+80ab,U+80cd,U+80d7,U+8118,U+8188,U+81cc,U+823e,U+8298,U+82ca,U+82e4,U+82f4,U+8306,U+833a,U+83d4,U+83df,U+8401,U+8451,U+846d,U+8476,U+8478,U+84ba,U+851f,U+8556,U+8585,U+867a,U+868b,U+868d,U+8734,U+8765,U+87ca,U+87ee,U+8832,U+8872,U+887e,U+88a2,U+88b7,U+88c9,U+8c55,U+8c73,U+8c78,U+8d67,U+8d91,U+8deb-8dec,U+8dfd,U+8e14,U+8e41,U+8fe8,U+900b,U+9011,U+915e,U+9162,U+9172,U+9185,U+918c,U+9190,U+92c8,U+96ce,U+96e9,U+9785,U+992e,U+9954-9955,U+9ab0,U+9ac1,U+9b1f,U+9b32,U+9b4d,U+9ee7,U+9f22;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./19.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4e5c,U+4e8d,U+4edf,U+4f32,U+4f5e,U+4f76,U+5028,U+5048,U+50ee,U+520e,U+535f,U+5412,U+5443,U+54a6,U+5533,U+5541,U+5550,U+5556,U+5577,U+5591,U+55dd,U+560f,U+5627,U+562c,U+5657-5658,U+5664,U+567b,U+56d4,U+577c,U+578c,U+5800,U+5889,U+5a62,U+5aeb,U+5c3b,U+5ca3,U+5cac,U+5d26,U+5d9d,U+5db7,U+5edb,U+5f01,U+5f2d,U+5fb5,U+5fdd,U+5ff8,U+6029,U+6041,U+60b1,U+6222,U+623e,U+638a,U+63e0,U+647a,U+6485,U+65ab,U+65c3,U+65c6,U+6600,U+668c,U+669d,U+66be,U+66e9,U+67c1,U+67d2,U+6877,U+68fc,U+690b,U+6978,U+69a7,U+69c1,U+6a3e,U+6a50,U+6a5b,U+6a97,U+6b8d,U+6baa,U+6c10,U+6c3d,U+6c54,U+6ceb,U+6cee,U+6d04,U+6de0,U+6eb1,U+6ebd,U+7110,U+71b3,U+71f9,U+7230,U+728d,U+7292,U+72d2,U+7360,U+73a2,U+73b3,U+74ff,U+7511,U+75a5,U+75e7,U+7619,U+7633,U+779f,U+7826,U+7829,U+782c,U+7a39,U+7aa8,U+7ae6,U+7b04,U+7b0f,U+7bac,U+7c1f,U+7f45,U+7f5f,U+7faf,U+7fbf,U+7fd5,U+7fe5,U+80bc,U+80db,U+80dd,U+8132,U+815a,U+8167,U+81ca,U+8228,U+8244,U+8249,U+824f,U+82a1,U+82a9,U+82ab,U+82b4,U+8351,U+8378,U+83d8,U+83ea,U+83f0,U+8497,U+84c1,U+8538,U+858f,U+859c,U+85ff,U+867b,U+86a8-86a9,U+870a,U+8722,U+876e,U+87e5,U+8888,U+88df,U+8919,U+8921,U+8db5,U+8dbf,U+8e05,U+8e1f,U+9021,U+9044,U+9062,U+908b,U+90b4,U+90eb,U+90fe,U+9123,U+9146,U+918d,U+91aa,U+93ca,U+96b9,U+96d2,U+9708,U+9ac2,U+9b23,U+9b3b,U+9ecf;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./16.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4ee8,U+4f09,U+4f22,U+4f43,U+4f57,U+4f5d,U+4f6f,U+4fce,U+4ff3,U+4ff8,U+500c,U+500f,U+502d,U+504e,U+5088,U+5345,U+53fb,U+5482,U+54a7,U+54cc,U+550f,U+5544,U+558b,U+5594,U+559f,U+55d6,U+55e8,U+55ef,U+564e,U+5704,U+57ed,U+5914,U+5958,U+599e,U+5a40,U+5ae1,U+5ae6,U+5b40,U+5b93,U+5c9c,U+5ccb,U+5d2e,U+5d47,U+5d4b,U+5d99,U+5e54,U+5e61,U+6014,U+608c,U+609a,U+60f4,U+60fa,U+61ff,U+621b,U+622e,U+63ae,U+63cd,U+6410,U+6414,U+64d8,U+6710,U+6748,U+6772,U+67b0,U+67b7,U+6954,U+695d,U+69ab,U+6c68,U+6c8f,U+6d2e,U+6dd9,U+6dec,U+6e4e,U+6e98,U+6ec2,U+6f66,U+6f8d,U+6fc9,U+6fe0,U+7094,U+7119,U+723f,U+729f,U+73de,U+7430,U+74e4,U+753e,U+7548,U+75bd,U+75cd,U+7634,U+76c5,U+76f1,U+7708,U+778c,U+7791,U+77b3,U+77dc,U+781d,U+7823,U+7827,U+782d,U+7830,U+783c,U+7893,U+78a3,U+78ec,U+7949,U+79e3,U+7a14,U+7a95,U+7aa0,U+7afd,U+7b90,U+7b95,U+7bfe,U+7c0c,U+7c91,U+7cc5,U+7da6,U+7f61,U+7fca,U+8006,U+807f,U+80bd,U+814b,U+8174,U+8198,U+8200,U+828d,U+82c4,U+82d2,U+82d5,U+82f7,U+832d,U+834f,U+840b,U+8438,U+847a,U+84d6,U+852b,U+85d0,U+86a4,U+86f9,U+8703,U+8707,U+8737,U+873b,U+8782,U+87d2,U+87e0,U+8839,U+8913,U+8a07,U+8c4c,U+8dce,U+8ddb,U+8dfa,U+8e09,U+8e1d,U+8e31,U+8e39,U+8e42,U+8e49,U+8e6d,U+8e76,U+9004,U+9036,U+9097,U+90d7,U+90dc,U+90e2,U+90ef,U+9104,U+9169,U+919a,U+91b4,U+938f,U+970e,U+973e,U+9798,U+97a3,U+9997,U+9f3e;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./17.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4edd-4ede,U+4ee1,U+4eeb,U+4fda,U+4ffe,U+5025,U+50f3,U+5106,U+5241,U+525c,U+52ad,U+530d,U+5310,U+539d,U+53df,U+53fc,U+5421,U+544b,U+5477,U+54e7,U+5514,U+5530,U+5555,U+557e,U+5599,U+55b9,U+55c4,U+55d1,U+55d4,U+55df,U+55e4,U+55ea,U+5623,U+562d,U+5654,U+5671,U+56d7,U+56eb,U+56f9,U+576d,U+57d5,U+584d,U+5880,U+58ec,U+59be,U+59dd,U+5a55,U+5abe,U+5b51,U+5b71,U+5bee,U+5cd2,U+5d06,U+5d6f,U+5dfd,U+5e5b,U+5e96,U+5fd2,U+600f,U+606b,U+62bf,U+634b,U+636d,U+6371,U+6387,U+63c4,U+63c6,U+63d6,U+63f6,U+6421,U+64c0,U+661d,U+6657,U+66dc,U+6841,U+6849,U+699b,U+6a28,U+6a47,U+6b46,U+6c21,U+6c24,U+6c35,U+6c4a,U+6c86,U+6c94,U+6cc5,U+6d39,U+6d63,U+6d6f,U+6d94,U+6fef,U+705e,U+71e7,U+726f,U+7325,U+7350,U+73d9,U+741a,U+757f,U+7583,U+759d,U+75b8,U+75c2,U+75f1,U+7699,U+7719,U+777e,U+7889,U+795c,U+7a17,U+7a88,U+7b08,U+7b33,U+7be6,U+7c2a,U+7cb2,U+7f58,U+7fb8,U+8012,U+8026,U+8037,U+8153,U+8171,U+8214,U+821b,U+8222,U+826e,U+82be,U+82dc,U+82eb,U+830c,U+8334,U+83c5,U+83d6,U+83fd,U+8418,U+843c,U+8473,U+84a1,U+84ff,U+8564,U+8693,U+86a3,U+86a7,U+86aa,U+86af,U+86b6,U+86c6,U+86d0,U+8708-8709,U+870d,U+8759,U+8760,U+87af,U+87c6,U+87d1,U+8869,U+8a3e,U+8b07,U+8c62,U+8c89,U+8d6d,U+8d84,U+8d94,U+8dc6,U+8e2e,U+8e3d,U+8e47,U+8e4b,U+9005,U+9016,U+9051,U+907d,U+9082,U+9088,U+90b0,U+9150,U+965f,U+9697,U+96b0,U+96bc,U+9aef,U+9e82,U+9edf-9ee0;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./15.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4e2b,U+4eb3,U+4ec9,U+4f0e,U+4f5a,U+4f64,U+4f8f,U+4fdf,U+501c,U+510b,U+51bc,U+527d,U+52be,U+5420,U+5429,U+542e,U+5486,U+54af,U+54c6,U+5506,U+5511,U+552c,U+55b3,U+55d2,U+55e6,U+55fd,U+5639,U+5659,U+5662,U+568e,U+5693,U+572a,U+5768,U+577b,U+5892,U+598a,U+5992,U+5a11,U+5a20,U+5ae3,U+5b17,U+5b7d,U+5bb8,U+5c15,U+5cc1,U+5d34,U+5d3d,U+5d4a,U+5d82,U+5e1a-5e1b,U+5ea5,U+5f77,U+5fd0-5fd1,U+5fd6,U+5fff,U+6035,U+6063,U+60b4,U+60bb,U+60c6,U+60da,U+612b,U+6194,U+61ca,U+61e6,U+61f5,U+620a,U+621f,U+6248,U+62c8,U+62d7,U+63e9,U+655d,U+65bc,U+65cc,U+65ce,U+65d6,U+6641,U+664c,U+665f,U+66b9,U+6773,U+6777,U+6787,U+67e9,U+6845,U+684e,U+688f,U+693d,U+696b,U+6994,U+69b7,U+6a35,U+6a58,U+6c26,U+6d35,U+6d5c,U+6d8e,U+6dd6,U+6e6e,U+6e9f,U+6ef9,U+6f09,U+6f2a,U+6f78,U+6fc2,U+714a,U+71b9,U+7337,U+733e,U+73b7,U+7428,U+742c,U+74f4,U+7525,U+753a,U+7566,U+7579,U+75e2,U+75fc,U+7638,U+7678,U+768e,U+76c2,U+76f9,U+7762,U+77cd,U+77fd,U+7825,U+7837,U+78b4,U+795f,U+7a1e,U+7b06,U+7b20,U+7bdd,U+7cb3,U+7cdc,U+7f44,U+7f54,U+7f94,U+8004,U+800b,U+8019,U+809b,U+80ed,U+80f1,U+8146,U+816e,U+81c0,U+81fc,U+81fe,U+832f,U+8340,U+8392,U+83a0,U+84af,U+869c,U+8713,U+8718,U+87c0,U+87cb,U+87fe,U+8815,U+8821,U+8902,U+8936,U+8d73,U+8fe4,U+9041,U+9052,U+905b,U+9095,U+90c5,U+911e,U+9122,U+916a,U+919b,U+9621,U+9631,U+96c9,U+9739,U+99a5,U+9b03,U+9ebe,U+9f10;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./13.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4e56,U+4f58,U+4f6c,U+4f70,U+4fd0,U+5014,U+5197,U+51bd,U+524c,U+5315,U+5323,U+53e8,U+5406,U+540f,U+542d,U+548e,U+549a,U+54ab,U+54e6,U+54ee,U+54fc,U+556a,U+5583,U+55e3,U+5600,U+5669,U+56ff,U+573b,U+574d,U+586c,U+58f9,U+592f,U+5944,U+595a,U+598d,U+5993,U+5996,U+59ca,U+5a7f,U+5b7a,U+5ba6,U+5c4e,U+5e4c,U+5eb6,U+5f08,U+5f1b,U+602f,U+6059,U+606c,U+608d,U+60cb,U+61a9,U+620c,U+6233,U+6249,U+62a8,U+62c4,U+62ed,U+62f4,U+62f7,U+62fd,U+6345,U+6382,U+6396,U+63c9,U+6413,U+642a,U+645e,U+6487,U+64a9,U+64ac,U+6556,U+659f,U+65a1,U+6615,U+667e,U+6a80,U+6aac,U+6b83,U+6b86,U+6c30,U+6c50,U+6c5e,U+6c76,U+6c85,U+6cad,U+6d19,U+6d31,U+6d93,U+6dae,U+6dbf,U+6e25,U+6e4d,U+6e5f,U+6ec1,U+6f31,U+6f5e,U+6f7a,U+6f7c,U+6fa7,U+701b,U+70ab,U+70f7,U+717d,U+71a8,U+7252,U+72c4,U+72e1,U+72e9,U+73c0,U+73c2,U+745a,U+74e2,U+752d,U+7599,U+75a4,U+75f0,U+7600-7601,U+7629,U+768b,U+76bf,U+76d4,U+776c,U+77a0,U+77b0,U+78fa,U+7940,U+7a37,U+7a92,U+7afa,U+7b19,U+7b71,U+7b94,U+7cb1,U+7ce0,U+7cef,U+7fe1,U+80e5,U+812f,U+8148,U+819b,U+81ba,U+81c3,U+8235,U+828b,U+82ae,U+82b7,U+8309,U+8338,U+837c,U+8393,U+83c1,U+8431,U+8469,U+84bf,U+84d3,U+86db,U+86fe,U+8712,U+873f,U+8757,U+8783,U+8822,U+8859,U+8882,U+8892,U+88a4,U+88f3,U+892a,U+8d66,U+8dda,U+8e74,U+8fc2,U+8fe5-8fe6,U+900d,U+9068,U+90b3,U+90b8,U+9119,U+9131,U+915a,U+9163,U+9170,U+965b,U+96cc,U+96f9,U+9774,U+9ab8,U+9e8b,U+9e92,U+9eef;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./14.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4e15,U+4e1e,U+4f3d,U+5043,U+5055,U+5140,U+51cb,U+5243,U+531d,U+535e,U+536f,U+53a5,U+53f1,U+541d,U+5431,U+547b,U+5492,U+54aa,U+54ce,U+54fd,U+5509,U+553e,U+557b,U+55c5,U+55e1,U+55f7,U+5608,U+561f,U+5636,U+563b,U+563f,U+5773,U+57a0,U+57b8,U+57c2,U+587e,U+58d5,U+59e3,U+5a29,U+5a6a,U+5a7a,U+5ac9,U+5b62,U+5b95,U+5c8c,U+5cab,U+5cb7,U+5e44,U+5e7a,U+5eff,U+5f0b,U+5f29,U+5f89,U+5f99,U+5f9c,U+5fa8,U+6026,U+6043,U+60b8,U+60d8,U+60f0,U+6115,U+618e,U+630e,U+637a,U+6390,U+63a3,U+63ac,U+63b0,U+64ae,U+6525,U+652b,U+6538,U+65ee-65ef,U+6631,U+6636,U+6666,U+6684,U+66f3,U+677c,U+67b8,U+67d8,U+67de,U+6886,U+68b5,U+6963,U+6979,U+6b59,U+6c69,U+6c74,U+6c8c,U+6cae,U+6ce0,U+6cef,U+6d95,U+6db8,U+6dc5,U+6dde,U+6de6,U+6dfc,U+6e1a,U+6ea7,U+6eb4,U+6f15,U+6f29,U+6fe1,U+7131,U+715c,U+7166,U+7172,U+7317,U+731d,U+7329,U+7396,U+73e9,U+7425,U+742e,U+7455,U+7490,U+7519,U+75b5,U+75b9,U+75d4,U+75de,U+7656,U+765c,U+7728-7729,U+777d,U+77f8,U+787c,U+78d0,U+795a,U+79ed,U+7a79,U+7abf,U+7b4f,U+7b60,U+7b75,U+7b8d,U+7bb4,U+7be1,U+7cbc,U+7f8c,U+7fb2,U+7fb9,U+7fce,U+808b,U+81c6,U+822b,U+82a5,U+82aa,U+82de,U+8317,U+8343,U+8543,U+854a,U+8559,U+8568,U+85b0,U+85b9,U+8638,U+86c0,U+86e4,U+88e8,U+88f1,U+8983,U+8c5a,U+8c82,U+8dbe,U+8e7c,U+8e87,U+9035,U+9074,U+90a1,U+9149,U+9157,U+916e,U+93d6,U+9642,U+968d,U+9706,U+970f,U+97ed,U+9abc,U+9e9d,U+9edb,U+9edd;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./12.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4e10,U+4ea2,U+4ea5,U+4ec3,U+4f36,U+4f3a,U+4f5f,U+4f84,U+4f88,U+4f8d,U+4f97,U+501a,U+5029,U+504c,U+51a5,U+51f8,U+5201,U+52fa,U+5321,U+5352,U+5366,U+53e9,U+543c,U+5471,U+5480,U+5495,U+54b3,U+54c7,U+557c,U+55dc,U+5632,U+566c,U+5676,U+56b7,U+56da,U+56e4,U+5703,U+57a2-57a3,U+58d1,U+5919,U+592d,U+5955,U+5983,U+59e5,U+5a13,U+5b09,U+5b70,U+5b75,U+5bd0,U+5bf0,U+5c41,U+5c91,U+5c94,U+5ced,U+5d69,U+5e16,U+5f3c,U+6020,U+604d,U+6055,U+60e6,U+618b,U+61a7,U+61ac,U+61cb,U+62ce,U+62d9,U+62ee,U+634e,U+63ea,U+6452,U+6479,U+6482,U+64ce,U+64d2,U+660a,U+664f,U+66e6,U+675e,U+67c4,U+67da,U+6853,U+68a2,U+68fa,U+693f,U+6942,U+695e,U+69ad,U+69b4,U+6b89,U+6bcb,U+6c40,U+6cb1,U+6cf1,U+6d85,U+6daa,U+6dc6-6dc7,U+6e32,U+6e3a,U+6e43,U+6eba,U+6f3e,U+6f88,U+6fee,U+70d9,U+7109,U+7184,U+71ee,U+722a,U+733f,U+7409,U+7435-7436,U+7459,U+747e,U+748b,U+749c,U+749e,U+7504,U+752c,U+759a,U+75ca,U+761f-7620,U+7738,U+773a,U+777f,U+7785,U+77a5,U+77aa,U+77bf,U+78be,U+78d5,U+7934,U+795b,U+79a7,U+7a20,U+7a96,U+7b28,U+7b50,U+7b77,U+7c27,U+7c38,U+7c95,U+7f79,U+7f9a,U+7fcc,U+8046,U+8098,U+80da,U+80f0,U+80f3,U+8165,U+8237-8238,U+8299,U+82d3,U+8301,U+831c,U+8398,U+83bd,U+83e0,U+83e9,U+8475,U+85d5,U+85e9,U+8654,U+86df,U+871a,U+888d,U+8910,U+891a,U+8925,U+8db4,U+8de4,U+8e1e,U+8e66,U+8e6c,U+901e,U+9083,U+90e1,U+90f4,U+912f,U+9165,U+91c9,U+91dc,U+962a,U+9685,U+9704,U+9773,U+9776;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./11.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4fae,U+4fd8,U+4fef,U+50a3,U+516e,U+5189,U+5195,U+51f3,U+51f9,U+5228,U+527f,U+5288,U+52ff,U+533f,U+5351,U+53db,U+53ed,U+5484,U+5490,U+54c9,U+54e9,U+5501,U+5543,U+55d3,U+56bc,U+5729,U+589f,U+5984,U+59ec,U+5a25,U+5a36,U+5a77,U+5a9a-5a9b,U+5ab2,U+5ac2,U+5ad6,U+5bc7,U+5c2c,U+5c51,U+5c79,U+5cd9,U+5d0e,U+5deb,U+5e87,U+5ed3,U+5f13,U+5f27,U+5f64,U+5fe1,U+5ffb,U+606a,U+6096,U+60df,U+60f6,U+60f9,U+61a8,U+620d-620e,U+6241,U+6252,U+6273,U+627c,U+6289,U+62c2,U+62c7,U+62cc,U+62ef,U+634d,U+63e3,U+6518,U+66ae,U+6726,U+6756,U+6789,U+6813,U+6829,U+6893,U+6897,U+68e3,U+690e,U+6995,U+69a8,U+69cc,U+6a1f,U+6a44,U+6a59,U+6bd3,U+6c13,U+6c90,U+6cbd,U+6ccc,U+6cd3,U+6cd7,U+6d5a,U+6dcc,U+6e44,U+6ea5,U+6f2f,U+6f8e,U+701a,U+7078,U+7095,U+7099,U+70af,U+70fd,U+714e,U+715e,U+71a0,U+71ce,U+7235,U+7239,U+7280,U+72d0,U+73ab,U+745c,U+7480,U+74a7-74a8,U+74e3,U+75f9,U+7693,U+76ce,U+7736,U+776b,U+778e,U+77e2-77e3,U+7852,U+789f,U+7948,U+7960,U+797a,U+79ba,U+79be,U+79f8,U+7a98,U+7aff,U+7b1b,U+7bc6,U+7cd9,U+7d0a,U+7d6e,U+7e82,U+800d,U+80fa,U+8116,U+8151,U+818a,U+81b3,U+81e7,U+8205,U+82db,U+832c,U+8335,U+8339,U+837b,U+8386,U+83cf,U+846b,U+8587,U+85c9,U+85dc,U+8611,U+868a,U+868c,U+8774,U+88d8,U+88f4,U+8912,U+8b6c,U+8c41,U+8c79,U+8dea,U+8e35,U+8e4a,U+8fe2,U+9017,U+914c,U+916f,U+9175-9176,U+918b,U+9640,U+9672,U+968b,U+9698,U+96cd,U+96ef,U+9713,U+9e93;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./10.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4e4d,U+4e5e,U+4ed5,U+4f51,U+5018,U+5026,U+508d,U+50da,U+50e7,U+515c,U+51a4,U+5203,U+5254,U+533e,U+5375,U+53ee,U+5435,U+543b,U+548b,U+54fa,U+5587,U+5598,U+55a7,U+560e,U+576f,U+5777,U+57ae,U+5830,U+58a9,U+5937,U+5962,U+59e8,U+5a23,U+5a3c,U+5a49,U+5b5a,U+5bb5,U+5bc5,U+5bde,U+5be1,U+5c09,U+5cb1,U+5cea,U+5d29,U+5d4c,U+5f57,U+5f87,U+5ff1,U+6016,U+6021,U+606d,U+614c,U+6177,U+625b,U+6296,U+62f1,U+634f,U+63a0,U+6467,U+6495,U+64bc,U+64c2,U+6577,U+6590,U+65a7,U+6627,U+6643,U+6687,U+66dd,U+6714,U+6795,U+67d1,U+67ff,U+68b3,U+68cd,U+68d5,U+68d8,U+68e0,U+6930,U+6960,U+6977,U+69bb,U+69d0,U+6bd7,U+6c2e-6c2f,U+6c72,U+6c7e,U+6c81,U+6cbc,U+6ce3,U+6de4,U+6df3,U+6e2d,U+6ec7,U+6ed5,U+6f33,U+6f62,U+6fa1,U+7011,U+707c,U+708a,U+70d8,U+70f9,U+711a,U+7130,U+716e,U+7194,U+71ac,U+71e5,U+7281,U+7316,U+7357,U+7384,U+73ca,U+7422,U+7426,U+742a,U+745b,U+745f,U+7578,U+77a7,U+77d7,U+77ee,U+780c,U+785d,U+78c5,U+7941,U+79e4,U+7a1a,U+7bf7,U+7c07,U+7c3f,U+7c9f,U+7ca5,U+7cb9,U+7cdf,U+7f38,U+7f9e,U+7fdf,U+7fe9,U+803d,U+80aa,U+80d6,U+813e,U+8155,U+817a,U+819d,U+81fb,U+821c,U+82ad,U+82b9,U+82df,U+82ef,U+8304,U+8354,U+8446,U+853d,U+8549,U+85af,U+85fb,U+8650,U+865e,U+86d9,U+8700,U+8862,U+88d4,U+88f8-88f9,U+895f,U+8a79,U+8dcb,U+8e29,U+8e44,U+8e72,U+8e81,U+8eac,U+9050,U+9091,U+914b,U+962e,U+9661,U+9699,U+9716,U+9761,U+97a0,U+97f6,U+9ae6;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./9.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4e19,U+4e38,U+4ea8,U+4f7c,U+4f83,U+4fd1,U+4ffa,U+502a,U+50fb,U+5154,U+5162,U+51f0,U+5256,U+52c9,U+5308,U+5319,U+5320,U+532a,U+5384,U+541f,U+5475,U+5496,U+54ac,U+54c0,U+54e8,U+5561,U+5589,U+561b,U+57e0,U+5885,U+5974,U+59ae,U+5a1f,U+5ab3,U+5acc,U+5b99,U+5b9b,U+5be5,U+5c6f,U+5c90,U+5d16,U+5dcd,U+5e37,U+5e9a,U+5f6a,U+5f8a,U+5f98,U+5fcc,U+6012,U+6068,U+6094,U+60bc,U+60d5,U+6109,U+611a,U+6254,U+626e-626f,U+6284,U+6292,U+62b9,U+62d0,U+62fe,U+6454,U+6674,U+66d9,U+66f0,U+673d,U+6749,U+67af,U+6854,U+68a7-68a8,U+68ad,U+68f5,U+6912,U+6986,U+69fd,U+6b47,U+6b49,U+6b6a,U+6c1f,U+6c28,U+6c5d,U+6cab,U+6cb8,U+6cf5,U+6d78,U+6dc4,U+6dcb,U+6e1d,U+6e23,U+6e9c,U+6eb6,U+6ed4,U+6f84,U+70ac,U+72fc,U+731c,U+7334,U+7470,U+7529,U+752b,U+75d5,U+7696,U+76ef,U+7720,U+7737,U+7766,U+77ac,U+77bb,U+7838,U+788c,U+78ca,U+7901,U+796d,U+79b9,U+79c9,U+79e7,U+7a3c-7a3d,U+7a57,U+7a74,U+7a84,U+7a9f,U+7b52,U+7c7d,U+7f69,U+7fc5,U+8018,U+803f,U+8086-8087,U+808c,U+809a,U+80a2,U+810a,U+8180,U+818f,U+81ed,U+820c,U+8292,U+82af,U+82bd,U+82d1,U+839e,U+83c7,U+83f1,U+8403,U+840c,U+840e,U+849c,U+84b2,U+84c9,U+8513,U+8517,U+851a,U+85e4,U+871c,U+8776,U+87ba,U+87f9,U+88d9,U+8a93,U+8d81,U+8d9f,U+8e22,U+8eb2,U+8eba,U+8fa8,U+8fed,U+901b,U+902e,U+9038,U+9042,U+904f,U+906e,U+90aa,U+90af,U+90dd,U+9102,U+9187,U+946b,U+964b-964c,U+96c0-96c1,U+971c,U+9756,U+99a8,U+9ad3,U+9b41,U+9e9f,U+9ed4;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./8.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4e52-4e53,U+4e7e,U+4e9f,U+4ed7,U+4ef0,U+4f50,U+4fcf,U+50ac,U+50b2,U+5112,U+5180,U+52df,U+52fe,U+5349,U+5378,U+537f,U+53c9,U+53d4,U+543e,U+5440,U+5565-5566,U+5580,U+55bb,U+56ca,U+572d,U+573e,U+574e,U+5764,U+576a,U+5782-5783,U+584c,U+5948,U+594e,U+5951,U+59a8,U+59fb,U+5a1c,U+5ae9,U+5b55,U+5b5c,U+5bb0,U+5bc2,U+5bd3,U+5bf8,U+5c39,U+5c3f,U+5c60,U+5d14,U+5df7,U+5dfe,U+5e06,U+5e62,U+5e7b,U+5e7d,U+5eb8,U+5ed6,U+5f6c,U+609f,U+6101,U+6127,U+6148,U+61be,U+6247,U+62d8,U+62da,U+632b,U+6349,U+6367,U+6380,U+638f,U+63a9,U+64b0,U+64e6,U+655e,U+6572,U+6591,U+65a5,U+65ed,U+660f,U+6691,U+66a8,U+674f,U+67d4,U+67ef,U+6850,U+6876,U+68d2,U+6905,U+6a0a,U+6a61,U+6b79,U+6bb7,U+6bbf,U+6bef,U+6c41,U+6c55,U+6c82-6c83,U+6c9b,U+6d74,U+6daf,U+6dd1,U+6dd8,U+6deb,U+6df9,U+6e24,U+6e5b,U+6ea2,U+6ef4,U+6f06,U+6f6d,U+70b3,U+70e4,U+70ef,U+710a,U+7199,U+722c,U+723d,U+725f,U+7261,U+72ac,U+7433,U+7538,U+754f,U+7554,U+75bc,U+7624,U+7626,U+76d2,U+7709,U+7779,U+7784,U+7802,U+780d,U+786b,U+7898,U+78a7,U+78b3,U+78cb,U+78f7,U+7aed,U+7c92,U+7c98,U+7cca,U+7f55,U+7fc1,U+7fd4,U+7fe0,U+7ff0,U+7ffc,U+804a,U+80ba,U+80c3,U+8102,U+8106,U+8154,U+81c2,U+8247,U+8258,U+8328,U+832b,U+8389,U+838e,U+83ca,U+845b,U+846c,U+84b8,U+857e,U+859b,U+86c7,U+8702,U+884d,U+8896,U+88b1,U+8944,U+8f9c,U+8fa3,U+8fb1,U+8fc4,U+9006,U+9063,U+90a2,U+90b1,U+90b5,U+9177,U+9189,U+961c,U+96a7,U+978d,U+97ad,U+9b3c,U+9b44-9b45,U+9b54,U+9f0e,U+9f3b;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./7.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4e08,U+4e18,U+4e32,U+4e59,U+4e73,U+4ead,U+4ed4,U+4ed9,U+4f0f,U+4faf,U+5076,U+5085,U+5144,U+5146,U+51fd,U+524a,U+526a,U+52ab,U+5306,U+5339,U+5353,U+5410,U+5439,U+54b1,U+54ed,U+5564,U+558a,U+5634,U+574a,U+5751,U+57cb,U+57d4,U+5806,U+5824,U+582a,U+5835,U+5858,U+5893,U+58e4,U+5915,U+5960,U+5999,U+59a5,U+59b9,U+59c6,U+59da,U+59ff,U+5a03,U+5a46,U+5ac1,U+5b5d,U+5b64,U+5bb4,U+5bfa,U+5c16,U+5c3a,U+5c3e,U+5c48,U+5cfb,U+5d1b,U+5de1,U+5e15,U+5e3d,U+5eca,U+5ef7,U+5f0a,U+5f17-5f18,U+5f7c,U+5fcd,U+6028,U+6084,U+60a0,U+60d1,U+614e,U+6155,U+6168,U+61c8,U+6208,U+6212,U+62ab,U+62f3,U+62fc,U+632a,U+633a,U+6398,U+63cf,U+63d2,U+642d,U+6492,U+649e,U+64c5,U+6500,U+659c,U+6602,U+6614,U+662d,U+6664,U+6670,U+6676,U+679d,U+67cf,U+682a,U+683d,U+6843,U+6846,U+684c,U+68af,U+68da,U+699c,U+6b3a,U+6b67,U+6c1b,U+6c27,U+6c5b,U+6c70,U+6cca,U+6ce1,U+6d3d,U+6d82,U+6db5,U+6e34,U+6e58,U+6f02,U+6f0f,U+6f58,U+7070,U+7092,U+718a,U+7238,U+7262,U+7272,U+72c2,U+72d7,U+72e0,U+73b2,U+751c,U+758f,U+75b2,U+764c,U+7686,U+76c6,U+76fc,U+775b,U+7761,U+788e,U+7891,U+7897,U+78b0,U+78c1,U+79bd,U+7a00,U+7a0d,U+7ae3,U+7bad,U+7d2b,U+7f50,U+7fbd,U+8036,U+809d,U+80a9,U+80ce,U+80f8,U+8170,U+8179,U+817f,U+819c,U+81e3,U+821f,U+8236,U+829d,U+82ac,U+8302,U+8305,U+83cc,U+8404,U+840d,U+8461,U+8482,U+84ec,U+8521,U+85aa,U+8679,U+886b,U+8870,U+8877,U+8881,U+88c2,U+8c6b,U+8dcc,U+8e48,U+8fb0,U+901d,U+9022,U+903c,U+90ce,U+916c,U+96d5,U+970d,U+971e,U+9738,U+9b42,U+9b4f,U+9e7f;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./6.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4e01,U+4e43,U+4ea6,U+4ef2,U+4f2f,U+4f38,U+4f69,U+4fd7,U+4ff1,U+5021,U+5141,U+51b6,U+51dd,U+5200,U+5237,U+523a,U+5272,U+52d8,U+5401,U+541b,U+5427,U+5448,U+554a,U+559d,U+5609,U+5740,U+57c3,U+5821,U+586b,U+58a8,U+58c1,U+594f,U+5976,U+59bb,U+59d0-59d1,U+59d3,U+5a92,U+5b54,U+5b5f,U+5b85,U+5b87,U+5bbf,U+5bc4,U+5bd2,U+5be8,U+5c65,U+5d07,U+5de7,U+5e1d,U+5e7c,U+5f04,U+5f1f,U+5f6d,U+5f70,U+5f79,U+5f92,U+5faa,U+5fbd,U+5ffd,U+602a,U+6050,U+6070,U+60a8,U+60b2,U+60dc,U+6162,U+6167,U+6170,U+61c2,U+622a,U+6234,U+626d,U+6291,U+62b1,U+62bc,U+62c6,U+62d2,U+62d4,U+62d6,U+6316,U+6355,U+6377,U+63ed,U+640f,U+642c,U+6458,U+6478,U+64a4,U+6566,U+658c,U+65c1,U+65e8,U+65ec,U+65f1,U+6628,U+6668,U+6696,U+66f9,U+66fc,U+66ff,U+6717,U+675c,U+676d,U+679a,U+67ec,U+67f1,U+67f3-67f4,U+6842,U+6851,U+695a,U+6b20,U+6b23,U+6b96,U+6bc5,U+6beb,U+6c0f,U+6c57,U+6c60,U+6c6a,U+6cf3,U+6d1e,U+6d66,U+6d69,U+6d6e,U+6db2,U+6de1,U+6dee,U+6dfb,U+6eaa,U+6ecb,U+6ed1,U+6f20,U+6f2b,U+704c,U+708e,U+70ad,U+70b8,U+7126,U+714c,U+71c3,U+71d5,U+7206,U+731b,U+73bb,U+741b,U+7434,U+7483,U+74dc,U+74f7,U+7532,U+755c,U+75ab,U+7687,U+76f2,U+78e8,U+79d2,U+79e6,U+79e9,U+7a3b,U+7a3f,U+7a46,U+7a97,U+7af9,U+7c4d,U+7c89,U+7c97,U+8000,U+8010,U+8017,U+8033,U+8096,U+80de,U+81a8,U+8212,U+827e,U+82b3,U+82d7,U+8377,U+83f2,U+84c4,U+8584,U+864e,U+86cb,U+888b,U+88d5,U+8986,U+8c46,U+8c6a,U+8c8c,U+8d64,U+8d6b,U+8e0f,U+8fea,U+8ff7,U+9003,U+906d,U+9075,U+90a6,U+90ca,U+9192,U+963b,U+966a,U+9675-9677,U+9694,U+9ece,U+9ed8;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./5.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4e39,U+4e4f,U+4e58,U+4e95,U+4ea1,U+4eab,U+4eae,U+4ec1,U+4f0a,U+4f10-4f11,U+4f30,U+4f34,U+4f3c,U+4f73,U+4fb5,U+5012,U+504f,U+5178,U+517c,U+5192,U+51a0,U+51b0,U+51b7,U+51e1,U+5211,U+52a3,U+52c3,U+52c7,U+52d2,U+52e4,U+5371,U+539a,U+53e5,U+53eb,U+5409,U+542b,U+5462,U+5473,U+547c,U+54c8,U+54e5,U+54ea,U+5510,U+552f,U+5531,U+5750,U+5761,U+5766,U+5802,U+5851,U+5854,U+585e,U+590f,U+591c,U+5949,U+5954,U+5a5a,U+5b63,U+5b88,U+5b8b,U+5b97,U+5b9c,U+5c01,U+5c04,U+5c0a,U+5c1a,U+5c24,U+5c4b,U+5cb8,U+5e55,U+5ec9,U+5ef6,U+5f31,U+5f90,U+5fae,U+5fd8-5fd9,U+5fe0,U+6015,U+6062,U+6069,U+6089,U+60a3,U+60e0,U+6276,U+6297,U+62bd,U+62d3,U+6311,U+6350,U+6389,U+638c,U+63e1,U+63f4,U+6469,U+64cd,U+653b,U+654f,U+6562-6563,U+656c,U+65e6,U+65fa,U+660c,U+667a,U+66b4,U+66f2,U+670b,U+672b,U+6790,U+67b6,U+67d3,U+6885,U+68b0,U+68ee,U+6b8a,U+6bcd,U+6bd2,U+6c89,U+6cc9,U+6cdb,U+6ce5,U+6cf0,U+6d17,U+6d1b,U+6d59,U+6d6a,U+6df7,U+6e20-6e21,U+6fb3,U+719f,U+7236,U+7259,U+725b,U+7267,U+73cd,U+73e0,U+745e,U+74e6,U+7518,U+7537,U+756a,U+7586,U+7591,U+75be,U+75db,U+76ae,U+76c8,U+76db,U+76df,U+76fe,U+77db,U+786c,U+7956,U+795d,U+7965,U+7981,U+79df,U+7a7f,U+7adf,U+7ae5,U+7aef,U+7b11,U+7b26,U+7b54,U+7bb1,U+7bc7,U+7f72,U+7f8a,U+7ffb,U+8015,U+8058,U+805a,U+8089,U+80a5,U+80af,U+80e1,U+8150,U+82e5,U+8336,U+8352,U+83ab,U+8463,U+8499,U+852c,U+8861,U+8863,U+88c1,U+8d74,U+8da3,U+8dd1,U+8ddd,U+8ddf,U+8de8,U+8df3,U+8f9b,U+8fd4,U+8feb,U+900f,U+9014,U+904d,U+907f-9080,U+90ed,U+91ce,U+9644,U+9686,U+969c,U+96c4-96c5,U+96e8,U+96ea,U+96f6-96f7,U+9707,U+9732,U+978b,U+9910,U+9aa8,U+9ebb,U+9f13;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./4.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+4e03,U+4e14,U+4e45,U+4e4e,U+4e5d,U+4e88,U+4e92,U+4ec0,U+4ecb,U+4ecd,U+4ed8,U+4ee4,U+4efd,U+4f0d,U+4f4e-4f4f,U+4f8b,U+4f9d,U+4fbf,U+4fc3-4fc4,U+500d,U+5019,U+5047,U+505c,U+5065,U+50cf,U+5145,U+514d,U+516b,U+516d,U+5175,U+5207,U+520a,U+521d,U+5224,U+5238,U+523b,U+52a9-52aa,U+5347-5348,U+534a,U+535a,U+5361,U+5370,U+53cb,U+53e4,U+53e6,U+53ec,U+53f2-53f3,U+5426,U+5438,U+5468,U+547d,U+552e,U+5584,U+559c,U+5668,U+56fa,U+5733,U+5747,U+57df,U+57f9,U+58eb,U+592a,U+592e,U+5931,U+5947,U+5957,U+59cb,U+5a01,U+5b57-5b58,U+5b69,U+5b8f,U+5b98,U+5ba2-5ba4,U+5bb3,U+5bb9,U+5bc6,U+5bcc,U+5bdf,U+5c3c,U+5c45,U+5ddd,U+5de6,U+5dee,U+5df4,U+5e0c,U+5e45,U+5e8f,U+5e95,U+5e97,U+5ea7,U+5ead,U+5eb7,U+5f80,U+5f85,U+600e,U+6025,U+606f,U+623f,U+627e-627f,U+6293,U+62cd,U+62db,U+62ec,U+62ff,U+6309,U+632f,U+6388,U+6392,U+63a2,U+63a7,U+63aa,U+641e,U+64ad,U+6545,U+6551,U+65a4,U+65c5,U+65e9,U+661f-6620,U+6625,U+665a,U+666e-666f,U+66fe,U+671d,U+6728,U+672a,U+6750,U+675f,U+67d0,U+6821,U+68c9,U+690d,U+6a21,U+6b4c,U+6b62,U+6b66,U+6b7b,U+6bb5,U+6bdb,U+6c38,U+6c7d,U+6c99,U+6cb9,U+6cbf,U+6ce2,U+6d0b,U+6d25,U+6d2a,U+6d32,U+6d3e,U+6e56,U+6f14,U+6f6e,U+6fc0,U+706b,U+70c8,U+7164,U+7167,U+7247-7248,U+724c,U+72af,U+7389,U+73ed,U+7403,U+751a,U+7530,U+7533,U+7559,U+7565,U+75c5,U+767b,U+767d,U+773c,U+7763,U+77ed,U+77f3,U+7834,U+793a,U+7968,U+798f,U+79c0,U+79fb,U+7a7a,U+7a81,U+7ad9,U+7ae0,U+7b97,U+7c73,U+7d20,U+7d22,U+7e41,U+7f3a,U+7f6a,U+7f6e,U+8003,U+821e,U+822a,U+822c,U+8239,U+826f,U+82e6,U+82f1,U+8349,U+83dc,U+843d,U+8457,U+85cf,U+878d,U+8840,U+8857,U+89d2,U+8a00,U+8b66,U+8c61,U+8d85,U+8d8a,U+8db3,U+8fc5,U+8fce,U+8ff0,U+8ffd,U+9000-9001,U+9010,U+9047,U+914d,U+9152,U+9632,U+963f,U+964d,U+9650,U+9664,U+9760,U+97f3,U+98df,U+9999;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./3.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+2014,U+2e3a-2e3b,U+3001-3002,U+3008-3011,U+3014-3017,U+4e00,U+4e09-4e0b,U+4e0d,U+4e16,U+4e2d,U+4e3b,U+4e4b,U+4e5f,U+4e8b-4e8c,U+4e94,U+4e9b,U+4ea4,U+4eac,U+4eba,U+4eca,U+4ed6,U+4ee3,U+4ee5,U+4ef6,U+4efb,U+4f01,U+4f46,U+4f4d,U+4f55,U+4f5c,U+4f7f,U+4f9b,U+4fdd,U+4fe1,U+503c,U+505a,U+5143,U+5148-5149,U+5165,U+5168,U+516c,U+5171,U+5176-5177,U+518d,U+5206,U+5217,U+5229,U+5230,U+524d,U+526f,U+529b,U+529f-52a0,U+5305,U+5316-5317,U+5341,U+5357,U+5382,U+539f,U+53bb,U+53c8,U+53ca,U+53cd,U+53d6-53d7,U+53e3,U+53ef-53f0,U+53f8,U+5404,U+540d,U+5411,U+544a,U+548c,U+54c1,U+5546,U+56db,U+56e0,U+571f,U+5728,U+5730,U+578b,U+57ce,U+57fa,U+5883,U+589e,U+5916,U+591a,U+5927,U+5929,U+5973,U+5979,U+597d,U+5982,U+59d4,U+5b50,U+5b89,U+5b8c,U+5b9a,U+5c0f,U+5c11,U+5c31,U+5c55,U+5c71,U+5dde,U+5de5,U+5df1-5df2,U+5e02,U+5e38,U+5e73-5e74,U+5e9c,U+5ea6,U+5efa,U+5f0f,U+5f15,U+5f62,U+5f71,U+5f88,U+5f8b,U+5f97,U+5fb7,U+5fc3,U+5fc5,U+5feb,U+601d,U+6027,U+60c5,U+60f3,U+610f,U+611f,U+6210-6211,U+6216,U+6240,U+624b,U+6253,U+6279,U+6280,U+628a,U+6295,U+62c9,U+6301,U+6307,U+63a5,U+63a8,U+63d0,U+652f,U+6536,U+6539,U+653e-653f,U+6548,U+6574,U+6587,U+6599,U+65af-65b0,U+65b9,U+65bd,U+65cf,U+65e5,U+660e,U+6613,U+662f,U+66f4,U+6700,U+6708-6709,U+670d,U+671b,U+671f,U+672c,U+674e,U+6751,U+6797,U+6839,U+683c,U+6848,U+6b21,U+6b3e,U+6b63-6b65,U+6bcf,U+6bd4,U+6c11,U+6c34,U+6c42,U+6c5f,U+6cb3,U+6cbb,U+6cd5,U+6d3b,U+6d41,U+6d77,U+6d88,U+6df1,U+6e05,U+6e2f,U+6e90,U+7136,U+7269,U+7279,U+7387,U+738b,U+7406,U+751f,U+7528,U+7531,U+754c,U+767e,U+7684,U+76ca,U+76ee,U+76f4,U+76f8,U+770b,U+77e5,U+7814,U+793e,U+795e,U+79d1,U+7a0b,U+7a76,U+7acb,U+7b2c,U+7b49,U+7b56,U+7ba1,U+7cbe,U+7cfb,U+7f8e,U+8001,U+8005,U+800c,U+80a1,U+80b2,U+80fd,U+81ea,U+81f3,U+8272,U+82b1,U+884c,U+88ab,U+897f,U+8981,U+89e3,U+8d70,U+8d77,U+8def,U+8eab,U+8fd1,U+901a,U+901f-9020,U+9053,U+90a3,U+90e8,U+90fd,U+91c7,U+91cd,U+91cf,U+91d1,U+9662,U+96c6,U+9700,U+9752,U+975e,U+9762,U+9769,U+9996,U+9ad8,U+fe10-fe19,U+fe30-fe31,U+fe33-fe44;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./0.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+2,U+20-7e,U+a0-24f,U+251,U+254,U+259-25b,U+28c,U+300-302,U+304,U+306,U+30a-30d,U+358,U+1e3e-1e3f,U+1e72-1e73,U+1e90-1e91,U+203c,U+2049,U+2100,U+2105,U+2116,U+2121,U+213b,U+3004,U+3371,U+3385-3389,U+338d-3390,U+3396-3398,U+339b-33a6,U+33b0-33b3,U+33c2,U+33c4,U+33c8,U+33cb-33cd,U+33d4,U+33d7-33d8,U+33da,U+ff0f,U+ff12-ff13,U+ff22,U+ff27-ff28,U+ff2b,U+ff2d-ff2e,U+ff30,U+ff32,U+ff41-ff43,U+ff45,U+ff47-ff49,U+ff4b,U+ff4d-ff50,U+ff53,U+ff5a,U+ffffd;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./1.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+370-377,U+37a-37f,U+384-38a,U+38c,U+38e-3a1,U+3a3-3e1,U+3f0-3ff,U+1f00-1f15,U+1f18-1f1d,U+1f20-1f45,U+1f48-1f4d,U+1f50-1f57,U+1f59,U+1f5b,U+1f5d,U+1f5f-1f7d,U+1f80-1fb4,U+1fb6-1fc4,U+1fc6-1fd3,U+1fd6-1fdb,U+1fdd-1fef,U+1ff2-1ff4,U+1ff6-1ffe;} +@font-face {font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url("./2.woff2") format("woff2");font-style: normal;font-weight: 400;font-display: swap;unicode-range:U+400-52f,U+2de0-2dff,U+a640-a69d,U+a69f;} \ No newline at end of file diff --git a/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/result.min.css b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/result.min.css new file mode 100644 index 00000000..db0c9cab --- /dev/null +++ b/internal/embedded/static/vendor/fonts/lxgw-wenkai-screen/regular/result.min.css @@ -0,0 +1 @@ +@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(242.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+310-357,U+359-36f,U+1e9d-1eff,U+2000-2013,U+2015-2027,U+202f-203b,U+203d-2048,U+204a-205f,U+2070-2071,U+2074-208e,U+2090-209c,U+20a0-20c1,U+20db-20de,U+20e8,U+20f0,U+2101,U+2103,U+2106,U+2109-210a,U+210e-210f,U+2113,U+2117,U+211e-2120,U+2122-2123,U+2125-2127,U+2129-212b,U+212e,U+2132,U+2135,U+2141-2144,U+214b,U+214d-218b,U+2190-2199,U+21b6-21b9,U+21c4-21c6,U+21cb-21d0,U+21d2,U+21d4,U+21e6-21ea,U+21f5,U+2200-220d,U+220f,U+2211-2213,U+2215-2216,U+2219-2220,U+2223-2230,U+2234-2237,U+223c-223e,U+2242-2243,U+2245,U+2248,U+224b-224c,U+2251-2253,U+225c,U+2260-2262,U+2264-226b,U+226e-226f,U+2272-2273,U+2276-2277,U+2282-228b,U+2295-2299,U+229c-229e,U+22a0,U+22a2-22a5,U+22bf-22c5,U+22da-22db,U+22ee-22f1,U+2300,U+2302-2303,U+2305-2307,U+2312,U+2318,U+2325-2326,U+2329-232c,U+2373-237b,U+2387,U+238b,U+2393,U+239b-23ad,U+23b0-23b1,U+23be-23cc,U+23ce,U+23da-23db,U+23e3,U+23e8,U+23fb-23fe,U+2400-2426,U+2460-24cb,U+16fe2-16fe3,U+16ff2}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(243.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+24cc-25ab,U+25b1-25b3,U+25b6-25b7,U+25bc-25bd,U+25c0-25c1,U+25c6-25c7,U+25c9-25cc,U+25ce-25d3,U+25e2-25e6,U+25ef,U+25fb-25fc,U+2600-2603,U+2605-2606,U+2609,U+260e-2612,U+2616-2617,U+261c-261f,U+262f-2637,U+2640-2642,U+2660-266f,U+2672-267d,U+2686-268f,U+26a0,U+26aa-26ab,U+26bd-26be,U+26cb,U+26e4-26e7,U+2702,U+16ff3}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(240.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+27f-280,U+f98e-fa42}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(241.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+281-28b,U+28d-2ff,U+303,U+305,U+307-309,U+30e-30f,U+1ab0-1abe,U+1d00-1df5,U+1dfc-1e3d,U+1e40-1e71,U+1e74-1e8f,U+1e92-1e9c,U+203c,U+2049,U+213b,U+3004,U+3386,U+33c8,U+fa43-fa6d,U+fa7f,U+fad4,U+fb00-fb06,U+fe20-fe2d,U+fe32,U+fe45-fe52,U+fe54-fe66,U+fe68-fe6b,U+ff01-ff0e,U+ff10-ff11,U+ff14-ff26,U+ff29-ff2a,U+ff2c-ff2d,U+ff2f,U+ff31,U+ff33-ff40,U+ff44,U+ff46,U+ff4a,U+ff4c,U+ff51-ff52,U+ff54-ff59,U+ff5b-ff9f,U+ffa1-ffbe,U+ffc2-ffc7,U+ffca-ffcf,U+ffd2-ffd7,U+ffda-ffdc,U+ffe0-ffe6,U+ffe8-ffee,U+fffc-fffd,U+107a5,U+11fb0}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(239.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+250,U+252-253,U+255-258,U+25c-27e,U+d78d-d78f,U+d791-d797,U+d79a,U+d79c,U+d79e-d7a3,U+e003,U+e500-e507,U+ee01-ee02,U+f061,U+f6c3,U+f900-f98d}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(238.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+d68a-d68b,U+d68e-d68f,U+d691-d693,U+d695-d69e,U+d6a0,U+d6a2-d6a7,U+d6a9-d6c3,U+d6c6-d6c7,U+d6c9-d6cb,U+d6cd-d6d0,U+d6d2-d6d3,U+d6d5-d6d6,U+d6d8,U+d6da-d6df,U+d6e1-d6e3,U+d6e5-d6e7,U+d6e9-d6ef,U+d6f1-d6fb,U+d6fe-d6ff,U+d701-d703,U+d705-d710,U+d712-d717,U+d71a-d71b,U+d71d-d71f,U+d721-d727,U+d72a,U+d72c-d733,U+d735-d737,U+d739-d73b,U+d73d-d743,U+d745-d748,U+d74a-d74f,U+d752-d753,U+d755-d756,U+d75a-d75f,U+d762-d764,U+d766-d768,U+d76a-d76b,U+d76d-d76f,U+d771-d773,U+d775-d77b,U+d77e-d787,U+d78a-d78b}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(237.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+d599-d5a4,U+d5a6-d5c7,U+d5ca-d5cb,U+d5cd-d5cf,U+d5d1-d5d7,U+d5da,U+d5dc,U+d5de-d5e3,U+d5e6-d5e7,U+d5e9-d5eb,U+d5ed-d5f3,U+d5f6,U+d5f8,U+d5fa-d5ff,U+d602-d603,U+d605-d607,U+d609-d60f,U+d612,U+d616-d61b,U+d61d-d637,U+d63a-d63b,U+d63d-d63f,U+d641-d647,U+d64a,U+d64c,U+d64e-d650,U+d652-d653,U+d656-d657,U+d659-d65b,U+d65d-d666,U+d668,U+d66a-d66f,U+d672-d682,U+d684-d689}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(236.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+d49e-d4a8,U+d4aa-d4cb,U+d4cd-d4cf,U+d4d1-d4e7,U+d4e9-d4ef,U+d4f1-d4f7,U+d4f9-d4fc,U+d4fe-d503,U+d505-d507,U+d509-d50b,U+d50d-d513,U+d516-d53b,U+d53e-d53f,U+d541-d543,U+d545-d54b,U+d54e,U+d550,U+d552-d557,U+d55a-d55b,U+d55d-d55f,U+d561-d564,U+d566-d567,U+d56a,U+d56c,U+d56e-d573,U+d576-d577,U+d579-d57b,U+d57d-d583,U+d586,U+d58a-d58f,U+d591-d598}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(235.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+d3ba-d3bb,U+d3bd-d3c3,U+d3c6-d3c7,U+d3ca-d3cf,U+d3d1-d3eb,U+d3ee-d3ef,U+d3f1-d3f3,U+d3f5-d3fb,U+d3fd-d3fe,U+d400,U+d402-d407,U+d409-d43f,U+d441-d443,U+d445-d45b,U+d45d-d45f,U+d461-d46e,U+d470-d477,U+d47a-d47b,U+d47d-d47f,U+d481,U+d483-d487,U+d489-d48a,U+d48c,U+d48e-d493,U+d495-d49d}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(234.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+d29e-d2a3,U+d2a5-d2ab,U+d2ad-d2b0,U+d2b2-d2b7,U+d2ba-d2bb,U+d2bd-d2be,U+d2c1,U+d2c3-d2c7,U+d2ca,U+d2cc-d2d3,U+d2d5-d2d7,U+d2d9-d2ef,U+d2f2-d2f3,U+d2f5-d2f7,U+d2f9-d2ff,U+d302-d304,U+d306-d30b,U+d30f,U+d311-d313,U+d315,U+d317-d31b,U+d31e,U+d322-d324,U+d326-d327,U+d32a-d32b,U+d32d-d32f,U+d331-d337,U+d33a,U+d33e-d343,U+d346-d37b,U+d37e-d37f,U+d381-d383,U+d385-d38b,U+d38d-d38e,U+d392-d397,U+d39a-d39b,U+d39d-d39f,U+d3a1-d3a7,U+d3aa,U+d3ac,U+d3ae-d3b3,U+d3b5-d3b7,U+d3b9}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(232.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+d092-d0a3,U+d0a6-d0a7,U+d0a9-d0ab,U+d0ad-d0b3,U+d0b6,U+d0b8,U+d0ba-d0bf,U+d0c2-d0c3,U+d0c5-d0c7,U+d0ca-d0cf,U+d0d2,U+d0d6-d0db,U+d0de-d0df,U+d0e1-d0e3,U+d0e5-d0eb,U+d0ee,U+d0f0,U+d0f2-d0f7,U+d0f9-d12f,U+d132-d133,U+d135-d137,U+d139-d13f,U+d142,U+d146-d14b,U+d14e-d14f,U+d151-d153,U+d155-d15b,U+d15e,U+d160,U+d162-d167,U+d169-d16b,U+d16d-d17b,U+d17d-d183,U+d185-d187,U+d189-d19f,U+d1a2-d1a3,U+d1a5-d1a7,U+d1a9-d1ac}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(233.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+d1ad-d1af,U+d1b2,U+d1b4,U+d1b6-d1b9,U+d1bb,U+d1bd-d1d7,U+d1d9-d1f3,U+d1f5-d206,U+d208-d20f,U+d211-d22b,U+d22e-d22f,U+d231-d233,U+d235-d23b,U+d23d-d23e,U+d240,U+d242-d247,U+d249-d25b,U+d25d-d263,U+d265-d27f,U+d281-d283,U+d285-d287,U+d289-d294,U+d296-d29b,U+d29d}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(230.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+ce7d-ce83,U+ce86,U+ce88,U+ce8a-ce8f,U+ce92-ce93,U+ce95-ce97,U+ce99-ce9f,U+cea2,U+cea6-ceab,U+cead-cee3,U+cee6-cee7,U+cee9-ceea,U+ceed-cef3,U+cef6,U+cefa-ceff,U+cf02-cf03,U+cf05-cf07,U+cf09-cf0f,U+cf12,U+cf14,U+cf16-cf1b,U+cf1d-cf1f,U+cf21-cf23,U+cf25-cf2b,U+cf2e,U+cf31-cf37,U+cf39-cf53,U+cf56-cf57,U+cf59-cf5b,U+cf5d-cf63,U+cf66,U+cf68,U+cf6a-cf6f,U+cf72-cf73,U+cf75-cf77,U+cf79-cf84,U+cf86-cf8b,U+cf8d-cf90}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(231.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+cf91-cfa0,U+cfa2-cfa7,U+cfa9-cfaf,U+cfb1-cfc3,U+cfc5-cfdf,U+cfe2-cfe3,U+cfe5-cfe7,U+cfe9-cfef,U+cff2,U+cff4,U+cff6-cffb,U+cffd-cfff,U+d001-d003,U+d005-d010,U+d012-d017,U+d019-d02c,U+d02e-d033,U+d036-d037,U+d039-d03b,U+d03d-d043,U+d045-d046,U+d048-d04f,U+d051-d057,U+d059-d05f,U+d061-d06b,U+d06e-d06f,U+d071-d073,U+d075-d07b,U+d07e-d080,U+d082-d091}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(229.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+cd85-cd93,U+cd96-cd97,U+cd99-cd9b,U+cd9d-cda3,U+cda6,U+cda8,U+cdaa-cdaf,U+cdb1-cdc3,U+cdc5-cdcb,U+cdcd-cde7,U+cde9-cdf8,U+cdfa,U+cdfc-ce03,U+ce05-ce0b,U+ce0d-ce18,U+ce1a-ce1f,U+ce22-ce23,U+ce25-ce27,U+ce29-ce2f,U+ce31-ce34,U+ce36-ce57,U+ce5a-ce5b,U+ce5d-ce5f,U+ce62-ce67,U+ce6a,U+ce6c,U+ce6e-ce73,U+ce76-ce77,U+ce79-ce7b}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(228.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+cc9f,U+cca1-cca7,U+ccaa,U+ccae-ccb3,U+ccb6-ccb7,U+ccb9-ccbb,U+ccbd-ccc3,U+ccc5-ccc6,U+ccc8,U+ccca-cccf,U+ccd1-ccd3,U+ccd5-cce3,U+cce5-cceb,U+cced-cd07,U+cd0a-cd0b,U+cd0d-cd0f,U+cd11-cd17,U+cd19-cd1a,U+cd1c,U+cd1e-cd23,U+cd25-cd27,U+cd29-cd2b,U+cd2d-cd5b,U+cd5d-cd63,U+cd65-cd77,U+cd79-cd84}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(226.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+cb04-cb0f,U+cb11-cb13,U+cb15-cb17,U+cb19-cb1f,U+cb21-cb40,U+cb42-cb47,U+cb4a-cb4b,U+cb4d-cb4f,U+cb51-cb57,U+cb5a-cb5c,U+cb5e-cb63,U+cb65-cbb5}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(227.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+cbb6-cbb7,U+cbb9-cbd3,U+cbd5-cbe3,U+cbe5-cbe6,U+cbe8-cc0b,U+cc0e-cc0f,U+cc11-cc13,U+cc15-cc1b,U+cc1e-cc20,U+cc23-cc26,U+cc2a-cc2b,U+cc2d,U+cc2f,U+cc31-cc37,U+cc3a,U+cc3f-cc43,U+cc46-cc47,U+cc49-cc4b,U+cc4d-cc53,U+cc56,U+cc5a-cc5f,U+cc61-cc63,U+cc65-cc67,U+cc69-cc74,U+cc76-cc97,U+cc9a-cc9b,U+cc9d-cc9e}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(225.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+ca48-ca4b,U+ca4e-ca4f,U+ca51-ca53,U+ca55-ca5b,U+ca5e-ca60,U+ca62-ca67,U+ca69-ca83,U+ca85-ca97,U+ca99-cabb,U+cabe-cabf,U+cac1-cac3,U+cac5-cace,U+cad0,U+cad2,U+cad4-cad7,U+cada-cb03}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(223.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+c84f-c853,U+c855-c86f,U+c872-c873,U+c875-c877,U+c879-c87f,U+c882,U+c884,U+c888-c88a,U+c88d-c89e,U+c8a0,U+c8a2-c8a7,U+c8a9-c8bc,U+c8be-c8c3,U+c8c5-c8c7,U+c8c9-c8cb,U+c8cd-c8d3,U+c8d5-c8df,U+c8e1-c8e3,U+c8e5-c8f4,U+c8f6-c8fb,U+c8fe-c8ff,U+c901-c903,U+c905-c90b,U+c90e,U+c910,U+c912-c917,U+c919-c92b,U+c92d-c933,U+c935-c947}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(222.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+c6fb-c703,U+c706-c707,U+c709-c70b,U+c70d-c713,U+c716,U+c718,U+c71a-c71f,U+c722-c723,U+c725-c727,U+c729-c72f,U+c732,U+c734,U+c736,U+c738-c73b,U+c73e-c73f,U+c741-c743,U+c745-c749,U+c74b,U+c74e,U+c750,U+c759-c75b,U+c75d-c75f,U+c761-c767,U+c769-c773,U+c776-c777,U+c779-c77b,U+c77e-c782,U+c786,U+c78b-c78d,U+c78f,U+c792-c793,U+c795,U+c799-c79f,U+c7a2,U+c7a7-c7ab,U+c7ae-c7af,U+c7b1-c7b3,U+c7b5-c7bb,U+c7be,U+c7c2-c7c7,U+c7c9-c7cb,U+c7cd,U+c7cf-c7dc,U+c7de-c7e3,U+c7e5-c7e7,U+c7e9-c7ff,U+c802-c803,U+c805-c807,U+c809,U+c80b-c80f,U+c812,U+c814,U+c817-c81b,U+c81e-c81f,U+c821-c823,U+c825-c82b,U+c82d-c82e,U+c830,U+c832-c837,U+c839-c83b,U+c83d-c83f,U+c841-c847,U+c849-c84b,U+c84e}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(224.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+c948-c94f,U+c952-c953,U+c955-c957,U+c959-c95f,U+c961-c96b,U+c96d-c96f,U+c971-c973,U+c975-c97b,U+c97d-c987,U+c98a-c98b,U+c98d-c98f,U+c991-c997,U+c99a-c99c,U+c99e-c9bf,U+c9c2-c9c3,U+c9c5-c9c6,U+c9c9,U+c9cb-c9cf,U+c9d2,U+c9d4,U+c9d7-c9d8,U+c9db,U+c9de-c9df,U+c9e1,U+c9e3,U+c9e5-c9e6,U+c9e8-c9eb,U+c9ee,U+c9f2-c9f7,U+c9fa-c9fb,U+c9fd-ca07,U+ca0a,U+ca0e-ca13,U+ca15-ca47}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(221.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+c5a7-c5b3,U+c5b6-c5b7,U+c5ba,U+c5be-c5c3,U+c5cb,U+c5cd,U+c5cf,U+c5d2-c5d3,U+c5d5-c5d7,U+c5d9-c5df,U+c5e2,U+c5e4,U+c5e6-c5eb,U+c5ef,U+c5f1-c5f3,U+c5f5,U+c5f8-c5fb,U+c602-c604,U+c609-c60b,U+c60d-c60f,U+c611-c617,U+c619-c61a,U+c61d-c623,U+c626-c627,U+c629-c62b,U+c62f,U+c631-c632,U+c636,U+c638,U+c63a,U+c63c-c63f,U+c642-c643,U+c645-c647,U+c649-c652,U+c656-c65b,U+c65e-c65f,U+c661-c66b,U+c66d-c670,U+c672-c677,U+c67a-c67b,U+c67d-c67f,U+c681-c687,U+c689-c693,U+c696-c697,U+c699-c69b,U+c69d-c6a3,U+c6a6,U+c6a8,U+c6aa-c6af,U+c6b2-c6b3,U+c6b5-c6b7,U+c6b9-c6bf,U+c6c2,U+c6c4,U+c6c6-c6cb,U+c6ce-c6cf,U+c6d1-c6d3,U+c6d5-c6db,U+c6de-c6df,U+c6e2-c6e7,U+c6ea-c6eb,U+c6ed-c6ef,U+c6f1-c6f8,U+c6fa}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(220.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+c490-c49b,U+c49d-c4b7,U+c4b9-c4bb,U+c4bd-c4e8,U+c4ea-c4ef,U+c4f2-c4f3,U+c4f5-c4f7,U+c4f9-c4fe,U+c502-c50b,U+c50d-c527,U+c52a-c52b,U+c52d-c52f,U+c531-c537,U+c53a,U+c53c,U+c53e-c543,U+c546-c547,U+c54b,U+c54d,U+c54f-c552,U+c556,U+c55a-c55c,U+c55f,U+c562-c563,U+c565-c567,U+c569-c56f,U+c572,U+c576-c57b,U+c57e-c57f,U+c581-c583,U+c585-c586,U+c588-c58b,U+c58e,U+c590,U+c592-c594,U+c596,U+c599-c59b,U+c59d-c5a6}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(219.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+c3b4-c3bf,U+c3c1-c3d7,U+c3da-c3db,U+c3dd-c3de,U+c3e1-c3e8,U+c3ea-c3ec,U+c3ee-c3f3,U+c3f5-c40f,U+c411-c42b,U+c42d-c42f,U+c431-c43b,U+c43d-c447,U+c449-c463,U+c466-c467,U+c469-c46b,U+c46d-c473,U+c475-c478,U+c47a-c47f,U+c481-c48f}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(218.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+c2a0-c2a3,U+c2a6-c2a7,U+c2a9-c2ab,U+c2ae-c2b3,U+c2b6,U+c2b8,U+c2ba-c2db,U+c2de-c2df,U+c2e1-c2e2,U+c2e5-c2ea,U+c2ee,U+c2f0,U+c2f2-c2f5,U+c2f7,U+c2fa,U+c2fd-c2ff,U+c301-c307,U+c30a-c30b,U+c30e-c312,U+c316-c317,U+c319-c31b,U+c31d-c323,U+c325-c328,U+c32a-c344,U+c346-c367,U+c36a-c36b,U+c36d-c36f,U+c371-c378,U+c37a-c37b,U+c37e-c383,U+c385-c387,U+c389-c38b,U+c38d-c3b3}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(216.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+c041-c057,U+c059-c05b,U+c05d-c05f,U+c061-c067,U+c06a-c08f,U+c092-c093,U+c095-c0a2,U+c0a4,U+c0a6-c0ab,U+c0ae,U+c0b1-c0b3,U+c0b7-c0bb,U+c0be,U+c0c2-c0c4,U+c0c6-c0c7,U+c0ca-c0cb,U+c0cd-c0cf,U+c0d1-c0d7,U+c0da,U+c0de-c0e3,U+c0e6-c0e7,U+c0e9-c0eb,U+c0ed-c0f3,U+c0f6,U+c0f8,U+c0fa-c0ff,U+c101-c11b,U+c11f,U+c121-c122,U+c125,U+c128-c12b,U+c12e,U+c132-c135,U+c137,U+c13a-c13b,U+c13d-c13f,U+c141-c147,U+c14a,U+c14e-c153,U+c155-c157,U+c159-c15b,U+c15d-c163,U+c165-c166,U+c16a-c16f,U+c171-c173,U+c175-c177,U+c179-c17b}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(217.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+c17c-c18b,U+c18f,U+c191-c193,U+c195-c19b,U+c19e,U+c1a0,U+c1a2-c1a4,U+c1a6-c1a7,U+c1a9-c1ab,U+c1ad-c1bc,U+c1be-c1c3,U+c1c5-c1df,U+c1e1-c1e3,U+c1e5-c1f2,U+c1f4-c1fb,U+c1fe-c1ff,U+c201-c203,U+c205-c20b,U+c20e,U+c210,U+c212-c217,U+c21a-c21b,U+c21d-c21e,U+c221-c227,U+c22a,U+c22c,U+c22e,U+c230,U+c233,U+c235-c247,U+c249-c24f,U+c251-c253,U+c255-c257,U+c259-c25f,U+c261-c264,U+c266-c26b,U+c26d-c26f,U+c271-c273,U+c275-c27b,U+c27e,U+c280,U+c282-c287,U+c289-c28f,U+c291-c297,U+c299-c29a,U+c29c,U+c29e-c29f}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(215.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+bf72-bfaf,U+bfb1-bfc4,U+bfc6-bfcb,U+bfce-bfcf,U+bfd1-bfd3,U+bfd5-bfdb,U+bfdd-c03b,U+c03d-c040}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(214.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+be8b,U+be8d-be8e,U+be92-be97,U+be99-bea7,U+bea9-becf,U+bed2-bed3,U+bed5-bed6,U+bed9-bedf,U+bee1-bee2,U+bee6-beeb,U+beed-bf00,U+bf02-bf07,U+bf0a-bf17,U+bf19-bf1a,U+bf1c,U+bf1e-bf3f,U+bf41-bf43,U+bf45-bf4f,U+bf52-bf54,U+bf56-bf71}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(212.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+bc2b-bc2c,U+bc2e-bc2f,U+bc32-bc33,U+bc35-bc37,U+bc39-bc3f,U+bc42,U+bc46-bc48,U+bc4a-bc4b,U+bc4e-bc4f,U+bc51-bc5c,U+bc5e-bc83,U+bc86-bc87,U+bc89-bc8a,U+bc8d-bc93,U+bc96,U+bc98,U+bc9b-bc9f,U+bca2-bca3,U+bca5-bca6,U+bca9-bcaf,U+bcb2,U+bcb6-bcbb,U+bcbe-bcbf,U+bcc1-bcc3,U+bcc5-bccc,U+bcce,U+bcd2-bcd4,U+bcd6-bcd7,U+bcd9-bcf3,U+bcf7,U+bcf9-bcfb,U+bcfd-bd03,U+bd06,U+bd08,U+bd0a-bd0f,U+bd11-bd23,U+bd25-bd2b,U+bd2d-bd3f,U+bd41-bd47,U+bd49-bd4b,U+bd4d-bd4f,U+bd51-bd57}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(213.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+bd5a-bd63,U+bd65-bd67,U+bd69-bd7f,U+bd82-bd83,U+bd85-bd86,U+bd8a-bd8f,U+bd92,U+bd94,U+bd96-bd98,U+bd9a-bd9b,U+bd9d-bdb7,U+bdb9-bdd3,U+bdd5-bddb,U+bddd-bdef,U+bdf1-bdf3,U+bdf5-bdf7,U+bdf9-bdff,U+be01-be0b,U+be0e-be0f,U+be11-be13,U+be15-be43,U+be46-be47,U+be49-be4b,U+be4d,U+be4f-be53,U+be56,U+be58,U+be5c-be5f,U+be62-be63,U+be65-be67,U+be69,U+be6b-be6f,U+be71-be72,U+be76-be7a,U+be7e-be7f,U+be81-be83,U+be85-be8a}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(211.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+baef-bafb,U+bafd-bb03,U+bb05-bb0e,U+bb10-bb17,U+bb19-bb1b,U+bb1d-bb33,U+bb37,U+bb39-bb3a,U+bb3e-bb43,U+bb46,U+bb48,U+bb4a-bb4c,U+bb4e,U+bb51-bb53,U+bb55-bb57,U+bb59-bb60,U+bb62,U+bb64-bb87,U+bb89-bb8b,U+bb8d-bb8f,U+bb91-bba3,U+bba5-bba7,U+bba9-bbab,U+bbad-bbb3,U+bbb5-bbbf,U+bbc1-bbc3,U+bbc5-bbc7,U+bbc9-bbcf,U+bbd1-bbd2,U+bbd4-bbf7,U+bbfa-bbfb,U+bbfd-bbfe,U+bc01-bc07,U+bc0a,U+bc0e,U+bc10,U+bc12-bc13,U+bc17,U+bc19-bc1a,U+bc1e,U+bc20-bc23,U+bc26,U+bc28,U+bc2a}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(210.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+b9b1-b9b3,U+b9b5-b9bb,U+b9be,U+b9c0,U+b9c2-b9c7,U+b9ca-b9cb,U+b9cd,U+b9d2-b9d7,U+b9da,U+b9dc,U+b9df-b9e0,U+b9e2,U+b9e6-b9e7,U+b9e9-b9eb,U+b9ed-b9f3,U+b9f6,U+b9fb-b9ff,U+ba01-ba07,U+ba09-ba14,U+ba16-ba37,U+ba3a-ba3b,U+ba3d-ba3f,U+ba41-ba47,U+ba4a,U+ba4c,U+ba4f-ba52,U+ba56-ba57,U+ba59-ba5b,U+ba5d-ba63,U+ba66,U+ba6a-ba6f,U+ba72-ba73,U+ba75-ba77,U+ba79-ba82,U+ba86,U+ba88-ba8b,U+ba8d-baa7,U+baaa,U+baad-baaf,U+bab1-bab7,U+baba,U+babc,U+babe-bac3,U+bac5-baee}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(209.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+b890-b8af,U+b8b1-b8b3,U+b8b5-b8b7,U+b8b9-b8bf,U+b8c1-b8cb,U+b8cd-b8cf,U+b8d1-b8d3,U+b8d5-b8e0,U+b8e2-b8e7,U+b8ea-b8eb,U+b8ed-b8ef,U+b8f1-b8f7,U+b8fa,U+b8fc,U+b8fe-b903,U+b905-b917,U+b919-b93b,U+b93e-b93f,U+b941-b943,U+b945-b957,U+b95a-b95b,U+b95d-b95f,U+b961-b967,U+b969-b96c,U+b96e-b973,U+b976-b977,U+b979-b97b,U+b97d-b983,U+b986,U+b988,U+b98a-b98d,U+b98f-b9ab,U+b9ae-b9af}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(207.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+b66d-b69b,U+b69e-b6a3,U+b6a5-b6aa,U+b6ac-b6b0,U+b6b2-b6ef,U+b6f1-b6f3,U+b6f5-b6f7,U+b6f9-b6ff,U+b702-b727,U+b72a-b72b,U+b72d-b72e,U+b731-b737,U+b73a,U+b73c-b743,U+b745-b747,U+b749-b74b,U+b74d-b750}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(208.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+b751-b753,U+b756-b75f,U+b761-b763,U+b765-b767,U+b769-b76f,U+b771-b774,U+b776-b77b,U+b77e-b77f,U+b781-b783,U+b785-b78b,U+b78e,U+b793-b795,U+b79a-b79b,U+b79d-b79f,U+b7a1-b7a7,U+b7aa,U+b7ae-b7b3,U+b7b6-b7b7,U+b7b9-b7c6,U+b7c8,U+b7ca-b7eb,U+b7ee-b7ef,U+b7f1-b7f3,U+b7f5-b7fb,U+b7fe,U+b802-b806,U+b80a-b80b,U+b80d-b80f,U+b811-b817,U+b81a,U+b81c,U+b81e-b823,U+b826-b827,U+b829-b82b,U+b82d-b833,U+b836,U+b83a-b83f,U+b841-b843,U+b845-b850,U+b852-b85b,U+b85e-b85f,U+b861-b863,U+b865-b86b,U+b86e,U+b870,U+b872-b877,U+b879-b87b,U+b87d-b88f}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(206.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+b58d-b59f,U+b5a2-b5a3,U+b5a5-b5a7,U+b5a9-b5aa,U+b5ac-b5b2,U+b5b6-b5ba,U+b5bd-b5bf,U+b5c1-b5c3,U+b5c5-b5cb,U+b5cd-b5ce,U+b5d2-b5d7,U+b5d9-b60f,U+b612-b613,U+b615-b617,U+b619-b624,U+b626-b62b,U+b62d-b647,U+b649-b663,U+b665-b66c}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(205.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+b46e-b47f,U+b481-b487,U+b489-b4a3,U+b4a5-b4ab,U+b4ad-b4b6,U+b4b8,U+b4ba-b4bf,U+b4c1-b4c7,U+b4c9-b4cf,U+b4d1-b4db,U+b4de-b4df,U+b4e1-b4e2,U+b4e5,U+b4e7-b4eb,U+b4ee,U+b4f0,U+b4f2-b4f7,U+b4f9-b513,U+b516-b517,U+b519-b51a,U+b51d-b523,U+b526,U+b52b-b52f,U+b532-b533,U+b535-b537,U+b539-b53f,U+b542,U+b546-b54a,U+b54d-b54f,U+b551-b553,U+b555-b55b,U+b55d-b55e,U+b562-b58c}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(204.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+b33d-b353,U+b357,U+b359-b35a,U+b35d-b35e,U+b360-b363,U+b366,U+b368,U+b36a,U+b36c-b36d,U+b36f,U+b372-b373,U+b375-b377,U+b379-b37f,U+b382,U+b384,U+b386-b38b,U+b38d-b38f,U+b391-b393,U+b395-b39f,U+b3a2-b3a7,U+b3a9-b3ab,U+b3ad-b3c3,U+b3c6-b3c7,U+b3c9-b3ca,U+b3cd,U+b3cf,U+b3d1-b3d3,U+b3d6,U+b3d8,U+b3da,U+b3dc,U+b3de-b3df,U+b3e1-b3e3,U+b3e5-b3e7,U+b3e9-b3fb,U+b3fd-b40f,U+b411-b417,U+b419-b41b,U+b41d-b41f,U+b421-b427,U+b42a,U+b42c-b433,U+b435-b44f,U+b452-b453,U+b455-b457,U+b459-b45f,U+b462,U+b464,U+b466-b46b,U+b46d}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(203.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+b1f6-b1fc,U+b1fe-b203,U+b206-b207,U+b209-b20a,U+b20d-b213,U+b216,U+b218,U+b21a-b21f,U+b221-b233,U+b235-b23b,U+b23d-b257,U+b259-b25b,U+b25d-b25f,U+b261-b267,U+b269-b273,U+b275-b27b,U+b27d-b283,U+b285-b288,U+b28a-b28f,U+b292-b293,U+b295-b297,U+b29b-b29f,U+b2a2-b2a4,U+b2a7-b2a9,U+b2ab,U+b2ad-b2c7,U+b2ca-b2cb,U+b2cd-b2cf,U+b2d1-b2d7,U+b2da,U+b2dc,U+b2de-b2e1,U+b2e3,U+b2e7,U+b2e9-b2ea,U+b2f0-b2f2,U+b2f6,U+b2f8,U+b2fc-b2fe,U+b302-b303,U+b305-b307,U+b309-b30f,U+b312,U+b316-b31b,U+b31d-b33c}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(202.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+b0ca-b0cf,U+b0d2-b0d3,U+b0d5-b0d7,U+b0d9-b0df,U+b0e1-b0e4,U+b0e6-b107,U+b10a,U+b10d-b10f,U+b111,U+b114-b117,U+b11a,U+b11e-b122,U+b126-b127,U+b129-b12b,U+b12d-b133,U+b136,U+b13a-b13f,U+b142-b143,U+b145-b147,U+b149-b14f,U+b152-b153,U+b156-b157,U+b159-b15b,U+b15d-b177,U+b17a-b17b,U+b17d-b17f,U+b181,U+b183-b187,U+b18a,U+b18c,U+b18e-b191,U+b195-b197,U+b199-b1a7,U+b1a9-b1cb,U+b1cd-b1cf,U+b1d1-b1d3,U+b1d5-b1db,U+b1dd-b1e7,U+b1ea-b1ef,U+b1f1-b1f5}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(201.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+afb2-afb7,U+afba-afbb,U+afbd-afbf,U+afc1-afc6,U+afca,U+afcc,U+afcf-afd3,U+afd5-afdb,U+afdd-afe7,U+afea-afef,U+aff1-aff3,U+aff5-b003,U+b005-b00b,U+b00d-b00f,U+b011-b013,U+b015-b01b,U+b01d-b027,U+b029-b043,U+b045-b047,U+b049,U+b04b,U+b04d-b052,U+b056,U+b058,U+b05a-b05c,U+b05e-b07b,U+b07e-b07f,U+b081-b083,U+b085-b08b,U+b08e,U+b090,U+b092-b097,U+b09b,U+b09d-b09e,U+b0a2-b0a7,U+b0aa,U+b0b0,U+b0b2,U+b0b6-b0b7,U+b0b9-b0bb,U+b0bd-b0c3,U+b0c6}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(200.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+aec8-aecb,U+aece,U+aed2-aed7,U+aed9-aedb,U+aedd-aeec,U+aeee-aef3,U+aef5-aef7,U+aef9-af06,U+af09-af0c,U+af0e-af0f,U+af11-af2b,U+af2e-af2f,U+af31-af33,U+af35-af3b,U+af3e,U+af40,U+af44-af47,U+af4a-af5c,U+af5e-af63,U+af66-af78,U+af7a-af7f,U+af81-af83,U+af85-af8f,U+af91-af94,U+af96-af9b,U+af9d-afb1}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(199.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+ada7-adbf,U+adc1-adc3,U+adc5-adc7,U+adc9-adcf,U+add1-add2,U+add4-addb,U+addd-addf,U+ade1-ade3,U+ade5-adf7,U+adfa-adfb,U+adfd-adfe,U+ae02-ae07,U+ae0a,U+ae0c,U+ae0e-ae13,U+ae15-ae2f,U+ae32-ae33,U+ae35-ae36,U+ae39-ae3f,U+ae42,U+ae44,U+ae47-ae49,U+ae4b,U+ae4f,U+ae51-ae53,U+ae55-ae5b,U+ae5e,U+ae62-ae64,U+ae66-ae67,U+ae6a-ae6b,U+ae6d-ae6f,U+ae71-ae7a,U+ae7e-ae83,U+ae86-aebb,U+aebf,U+aec1-aec3,U+aec5-aec7}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(197.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+9fb2-9fff,U+a4d0-a4ff,U+a700-a7b5,U+a7f1-a7f4,U+a7f7-a7ff,U+a92e,U+ab30-ab5f,U+ab64-ab65,U+ac02-ac03,U+ac05-ac06,U+ac0a-ac0f,U+ac18,U+ac1e-ac1f,U+ac21-ac23,U+ac25-ac2b,U+ac2e,U+ac32-ac37,U+ac3a-ac3f,U+ac41-ac4a,U+ac4c,U+ac4e-ac53,U+ac55-ac57,U+ac59-ac62}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(198.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+ac63-ac6f,U+ac72-ac73,U+ac75-ac76,U+ac79-ac7f,U+ac82,U+ac87-ac88,U+ac8d-ac8f,U+ac91-ac93,U+ac95-ac9b,U+ac9d-ac9e,U+aca2-aca7,U+acab,U+acad-acae,U+acb1-acb7,U+acba,U+acbe-acc0,U+acc2-acc3,U+acc5-accb,U+accd-acd6,U+acd8-acdf,U+ace2-ace3,U+ace5-ace6,U+ace9,U+aceb,U+aced-acee,U+acf2,U+acf4,U+acf7-acfb,U+acfe-acff,U+ad01-ad03,U+ad05-ad0b,U+ad0d-ad10,U+ad12-ad17,U+ad19-ad1b,U+ad1d-ad2c,U+ad2e-ad33,U+ad36-ad37,U+ad39-ad3b,U+ad3d-ad43,U+ad45-ad46,U+ad48,U+ad4a-ad4f,U+ad51-ad6b,U+ad6e-ad6f,U+ad71-ad72,U+ad77-ad7b,U+ad7e,U+ad80,U+ad83-ad87,U+ad8a-ad8b,U+ad8d-ad8f,U+ad91-ad9b,U+ad9d-ada3,U+ada5-ada6}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(195.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+9e13-9e14,U+9e16-9e19,U+9e1c,U+9e24,U+9e27,U+9e2e,U+9e30,U+9e34,U+9e3b-9e3c,U+9e40,U+9e4d,U+9e50,U+9e52-9e54,U+9e56,U+9e59,U+9e5d,U+9e5f-9e62,U+9e65,U+9e6e-9e6f,U+9e72,U+9e74-9e78,U+9e7b,U+9e80-9e81,U+9e83-9e84,U+9e86,U+9e89-9e8a,U+9e8c-9e91,U+9e94-9e96,U+9e98-9e9c,U+9e9e,U+9ea0-9ea4,U+9ea7-9ea8,U+9eaa-9eb3,U+9eb5-9eb7,U+9eb9-9eba,U+9ebf-9ec2,U+9ec5-9ec8,U+9eca-9ecb,U+9ed0,U+9ed3,U+9ed5-9ed7,U+9ed9-9eda,U+9ee1,U+9ee3-9ee4,U+9ee6,U+9eeb-9eee,U+9ef0-9ef1,U+9ef3,U+9ef5-9ef6,U+9ef8,U+9efa,U+9f00-9f06}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(196.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+9f07-9f08,U+9f0a,U+9f0c,U+9f0f,U+9f11-9f12,U+9f14,U+9f16,U+9f18,U+9f1a-9f1f,U+9f23-9f2b,U+9f2d-9f2e,U+9f30-9f33,U+9f35-9f36,U+9f38,U+9f3a,U+9f3c,U+9f3f-9f43,U+9f45-9f46,U+9f48-9f49,U+9f4c-9f4d,U+9f53,U+9f55-9f58,U+9f5a-9f5b,U+9f5d-9f5e,U+9f62,U+9f64-9f65,U+9f68-9f69,U+9f6b,U+9f6d-9f71,U+9f73-9f75,U+9f78-9f7e,U+9f81-9f82,U+9f8e-9f8f,U+9f91-9f93,U+9f96-9f98,U+9f9d-9f9e,U+9fa1-9fb1}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(193.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+9d01-9d05,U+9d08,U+9d0a-9d14,U+9d16-9d1a,U+9d1c,U+9d1e,U+9d20-9d22,U+9d24-9d25,U+9d27,U+9d29-9d2e,U+9d31-9d3a,U+9d3c-9d3e,U+9d40-9d41,U+9d43-9d50,U+9d54-9d5b,U+9d5e-9d5f,U+9d62-9d69,U+9d6b,U+9d6d-9d6e,U+9d70-9d71,U+9d73-9d86,U+9d88,U+9d8a-9d92,U+9d94-9d97}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(192.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+9c27,U+9c2a-9c2c,U+9c2e-9c30,U+9c34,U+9c36,U+9c38,U+9c3a,U+9c3c-9c3d,U+9c3f-9c44,U+9c46-9c47,U+9c4a-9c51,U+9c53,U+9c55,U+9c59-9c5c,U+9c5e,U+9c60-9c66,U+9c68-9c6c,U+9c6e-9c76,U+9c79,U+9c7b,U+9c7d-9c7e,U+9c80,U+9c83-9c84,U+9c89-9c8a,U+9c8c,U+9c8f,U+9c93,U+9c96-9c99,U+9c9d,U+9caa,U+9cac,U+9caf,U+9cb9,U+9cbe-9cc2,U+9cc8-9cc9,U+9cd1-9cd2,U+9cda-9cdb,U+9ce0-9ce1,U+9ce3-9ce4,U+9ce6,U+9ce8,U+9cea-9cf2,U+9cf5,U+9cf7-9d00}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(194.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+9d99,U+9d9b-9da4,U+9da6-9da8,U+9daa-9dae,U+9db0-9db3,U+9db5-9dba,U+9dbd-9dbf,U+9dc1,U+9dc3-9dd2,U+9dd4-9dd6,U+9dd8,U+9ddb-9de4,U+9de7-9dee,U+9df0-9df1,U+9df4-9df7,U+9dfb-9e0b,U+9e0d-9e12}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(190.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+9ae2-9ae5,U+9ae7-9aea,U+9aec,U+9aee,U+9af0-9af8,U+9afa,U+9afc-9b02,U+9b04-9b05,U+9b07,U+9b09-9b0e,U+9b10-9b12,U+9b14-9b1e,U+9b20-9b21,U+9b24,U+9b26,U+9b2a-9b2d,U+9b30,U+9b33-9b3a,U+9b3d-9b40,U+9b46,U+9b4a-9b4c,U+9b50,U+9b52-9b53,U+9b55-9b57,U+9b59,U+9b5b-9b6e,U+9b70-9b73,U+9b75-9b76,U+9b78-9b80,U+9b82,U+9b84-9b8a}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(189.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+99fb-99fe,U+9a00,U+9a02-9a04,U+9a06-9a0c,U+9a10-9a15,U+9a17-9a18,U+9a1a-9a2a,U+9a2c,U+9a2f,U+9a31-9a35,U+9a39-9a3d,U+9a3f,U+9a46-9a49,U+9a4b-9a4c,U+9a4e,U+9a50-9a54,U+9a56,U+9a58-9a59,U+9a5c-9a5e,U+9a60-9a61,U+9a63,U+9a66-9a69,U+9a6b,U+9a72,U+9a83,U+9a89,U+9a8d-9a8e,U+9a94-9a95,U+9a99,U+9aa6,U+9aa9-9aae,U+9ab2-9ab5,U+9ab9,U+9abb,U+9abd-9abf,U+9ac3-9ac4,U+9ac6-9aca,U+9acd-9ace,U+9ad0,U+9ad7,U+9ad9-9ade,U+9ae0}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(191.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+9b8b-9b8d,U+9b8f,U+9b93-9b99,U+9b9b-9b9d,U+9b9f-9ba9,U+9bac,U+9baf-9bbf,U+9bc2-9bc6,U+9bc8,U+9bcb-9bd3,U+9bd5,U+9bd8-9bda,U+9bdc,U+9bde-9be0,U+9be3,U+9be5-9be6,U+9be9,U+9bec-9bef,U+9bf1-9bf3,U+9bf5-9bfc,U+9bfe,U+9c00-9c07,U+9c0a-9c0c,U+9c0e-9c11,U+9c14-9c1f,U+9c21-9c22,U+9c24,U+9c26}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(188.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+990b,U+990e-990f,U+9914-9917,U+9919,U+991c-991d,U+991f-9920,U+9922-9927,U+9929-992b,U+992d,U+992f-9930,U+9932,U+9934,U+9936,U+9938-993a,U+993d,U+9940-9942,U+9944,U+9946-9947,U+994d-9951,U+9953,U+9956,U+9958-995b,U+995d,U+995f-9961,U+9964,U+9966,U+9973,U+9978-9979,U+997b,U+997e,U+9982-9983,U+9989,U+998c,U+998e,U+999a-99a4,U+99a6-99a7,U+99a9-99ab,U+99af-99b0,U+99b2,U+99b5-99c0,U+99c2-99cf,U+99d3,U+99d6-99d7,U+99da,U+99dc,U+99de,U+99e0-99e1,U+99e3-99ec,U+99ee-99f0,U+99f2-99fa}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(187.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+97fe,U+9800,U+9804,U+9809,U+980b,U+980d,U+9814-9816,U+9819-981b,U+981d-9820,U+9822-9823,U+9825,U+9827-982c,U+982e-982f,U+9831-9836,U+983a,U+983c-9845,U+9847-984b,U+9850-9852,U+9854-9855,U+9857,U+985a,U+985c-985d,U+985f-9861,U+9863-9864,U+9866,U+9868-986a,U+986d-986e,U+9872,U+988b,U+988e,U+9892,U+9895,U+9899,U+98a3,U+98a9-98ad,U+98b0-98b2,U+98b4-98b5,U+98b7-98bb,U+98bd-98c3,U+98c5,U+98c7,U+98c9-98cd,U+98cf-98d0,U+98d4,U+98d6-98d7,U+98dc-98dd,U+98e1,U+98e3-98e6,U+98ec,U+98ee,U+98f0,U+98f3,U+98f5-98fb,U+98ff-9902,U+9904,U+9906-9907}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(186.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+973b-973c,U+973f-9741,U+9743,U+9745-9747,U+9749-9751,U+9754-9755,U+9757-9758,U+975d,U+975f,U+9763-9764,U+9767,U+976a-9772,U+9775,U+9777-977b,U+977d-9784,U+9786-978a,U+978c,U+978e,U+9790,U+9793,U+9795-9797,U+9799-979c,U+979e-979f,U+97a1-97a2,U+97a4-97a5,U+97a7-97aa,U+97ac,U+97ae,U+97b0-97b1,U+97b3,U+97b5-97bc,U+97be-97c2,U+97c4-97c5,U+97c7-97c8,U+97ca,U+97cd-97d2,U+97d4-97d8,U+97da-97db,U+97df-97e5,U+97e8,U+97ee-97f2,U+97f4,U+97f7-97fa,U+97fc-97fd}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(184.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+943b-943d,U+9440-9443,U+9445-9449,U+944b,U+944d-9450,U+9452-9453,U+9455-945f,U+9461-9462,U+9464,U+9466-946a,U+946c,U+946e-946f,U+9471,U+9473-9476,U+9478,U+947a-947b,U+9480,U+9482-9484,U+9491,U+9496,U+9498,U+94c7,U+94cf,U+94d3-94d4,U+94da,U+94e6,U+94fb,U+951c,U+9520,U+9527,U+9533,U+953d,U+9543,U+9548,U+954b,U+9555,U+955a,U+9560,U+956e,U+9574-9575,U+9578-957e,U+9581,U+9584-9585,U+9587-9588,U+958a,U+958d,U+9590-9591,U+9595-9597,U+9599-95a0,U+95a2,U+95a6-95a7,U+95aa,U+95ae-95b0,U+95b2-95b5,U+95b7-95b8,U+95ba,U+95c0-95c2,U+95c4-95c5,U+95c9,U+95cd-95cf,U+95d1-95d2}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(185.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+95d3,U+95d7-95db,U+95dd,U+95df-95e0,U+95e3-95e4,U+95e6-95e7,U+95ec,U+95ff,U+9607,U+9613,U+9618,U+961b,U+961e,U+9620,U+9623-9629,U+962b-962d,U+962f-9630,U+9637-963a,U+963e,U+9641,U+9643,U+964a,U+964e-964f,U+9651-9653,U+9656-9657,U+9659-965a,U+965c,U+965e,U+9660,U+9665-9666,U+966b,U+966d-966f,U+9671,U+9679-967c,U+967e-9684,U+9687,U+968c,U+9691-9693,U+9696,U+969a,U+969d-96a6,U+96a9,U+96ab-96af,U+96b2,U+96b5,U+96b7,U+96ba,U+96bf,U+96c2-96c3,U+96ca,U+96d0-96d1,U+96d3-96d4,U+96d7-96d8,U+96da,U+96dd,U+96df,U+96e1,U+96e4-96e7,U+96eb-96ee,U+96f0-96f1,U+96f4-96f5,U+96f8,U+96fa,U+96fc-96fd,U+96ff,U+9702-9703,U+9705,U+970a-970c,U+9710,U+9712,U+9714-9715,U+9717-971b,U+971d,U+971f-9726,U+9728-9729,U+972b-972c,U+972e-972f,U+9731,U+9733-9737,U+973a}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(183.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+9392-9395,U+9397,U+9399-93a1,U+93a4-93a5,U+93a8,U+93ab,U+93ad,U+93af,U+93b1-93b2,U+93b4,U+93b6-93be,U+93c0-93c2,U+93c4-93c6,U+93c9,U+93cb,U+93ce-93d0,U+93d2-93d5,U+93d9-93db,U+93e0,U+93e3,U+93e5-93e7,U+93e9-93f4,U+93f6,U+93f8,U+93fa-93fc,U+93fe-9402,U+9404-940a,U+940c-940f,U+9411,U+9415-9418,U+941a-941f,U+9421-9425,U+9429-942a,U+942c-942d,U+942f-9431,U+9434,U+9436-9437,U+9439}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(182.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+92c9-92cb,U+92cd-92ce,U+92d0-92d1,U+92d3-92dc,U+92de,U+92e0-92e2,U+92e7,U+92e9,U+92eb-92ed,U+92f2-92f5,U+92f7,U+92f9-92fb,U+92fd-9300,U+9302-9303,U+9305,U+9309-930f,U+9311,U+9313-9314,U+9316-9317,U+931c-931e,U+9321,U+9323-9325,U+9327,U+9329-932a,U+932c-932d,U+9330-9332,U+9334-9335,U+9337,U+9339-933d,U+933f,U+9342,U+9344-9345,U+9348-934a,U+934c,U+934e-9353,U+9355-9357,U+9359-935a,U+935c-9363,U+9366-9368,U+936b,U+936d-936f,U+9371-9374,U+9377-9379,U+937b-937d,U+937f-9381,U+9383,U+9385-9386,U+9388-9389,U+938b-938e,U+9390-9391}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(181.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+91bb-91bf,U+91c2,U+91c4,U+91c6,U+91c8,U+91d6,U+91da-91db,U+91de-91e2,U+91e5,U+91e8,U+91ea-91f4,U+91f6,U+91f8,U+91fb-91ff,U+9202-9203,U+9205-9207,U+920a-920c,U+920e-920f,U+9212-9213,U+9216-921d,U+921f-9222,U+9224,U+9228-922d,U+922f,U+9231-9232,U+9235-9236,U+923b-923c,U+9241-9244,U+9246-9247,U+924a-924c,U+924e-9250,U+9252-9254,U+9256,U+9258-9259,U+925c-925d,U+925f-9261,U+9263,U+9265,U+9267-926b,U+926e-9273,U+9275-9277,U+9279,U+927c-927e,U+9281-9282,U+9284,U+9286-928d,U+928f-9290,U+9292,U+9294-9295,U+9297,U+9299,U+929b,U+929d-929f,U+92a1-92a2,U+92a4,U+92a7,U+92ad,U+92af-92b0,U+92b2,U+92b4-92b6,U+92b8-92ba,U+92bd-92c0,U+92c2,U+92c4,U+92c6}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(180.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+907b,U+907e,U+9085-9086,U+9089,U+908c-908e,U+9092,U+9094,U+9096,U+9098,U+909a,U+909c,U+909e-90a0,U+90a4-90a5,U+90a7-90a9,U+90ab,U+90ad,U+90b2,U+90b7,U+90bc-90bd,U+90bf-90c0,U+90c2-90c3,U+90c6,U+90c8-90c9,U+90cb-90cd,U+90d2,U+90d4-90d6,U+90d8-90da,U+90de,U+90e0,U+90e3,U+90e5,U+90e9-90ea,U+90ec,U+90ee,U+90f0-90f3,U+90f6-90f7,U+90f9-90fc,U+90ff-9101,U+9103,U+9105,U+9107-9108,U+910a-9111,U+9113,U+9115,U+9117-9118,U+911a-911d,U+911f-9121,U+9124-9126,U+9128-912c,U+912e,U+9133,U+9135,U+9137-9138,U+913b-9142,U+9144-9145,U+9147,U+9151,U+9153-9156,U+9158-9159,U+915b-915c,U+915f-9160,U+9166-9168,U+916b,U+916d,U+9173,U+917a-917c,U+9180-9182,U+9184,U+9186,U+9188,U+918a,U+918e-918f,U+9193-9199,U+919d,U+919f-91a1,U+91a4-91a9,U+91b0-91b3,U+91b6-91b9}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(179.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+8f0c-8f11,U+8f16-8f1a,U+8f20-8f24,U+8f27-8f28,U+8f2b-8f2e,U+8f30-8f32,U+8f34-8f37,U+8f39-8f3a,U+8f3c-8f3d,U+8f40-8f41,U+8f43,U+8f47-8f48,U+8f4a-8f4c,U+8f4f-8f53,U+8f55-8f5e,U+8f60,U+8f63,U+8f65,U+8f6a,U+8f80,U+8f8c,U+8f92,U+8f9d,U+8fa0-8fa2,U+8fa4-8fa5,U+8fa7,U+8faa,U+8fac,U+8fb3-8fb5,U+8fb7-8fb8,U+8fba-8fbc,U+8fbf-8fc0,U+8fc3,U+8fc6,U+8fc9-8fcd,U+8fcf,U+8fd2,U+8fd6-8fd7,U+8fda,U+8fe0-8fe1,U+8fe3,U+8fe7,U+8fec,U+8fef,U+8ff1-8ff2,U+8ff5-8ff6,U+8ffa-8ffc,U+8ffe-8fff,U+9007-9008,U+900c,U+900e,U+9013,U+9018,U+901c,U+9024-9025,U+9027-902b,U+9030-9031,U+9033-9034,U+9037,U+9039-903a,U+903d,U+903f-9040,U+9043,U+9045-9046,U+9048-9049,U+904c,U+9056,U+905a,U+905f,U+9061,U+9064,U+9066-9067,U+906a-906c,U+906f-9071,U+9073,U+9076,U+9079}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(178.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+8e27-8e28,U+8e2b,U+8e2d,U+8e32-8e33,U+8e36-8e38,U+8e3b-8e3c,U+8e3e-8e3f,U+8e43,U+8e45-8e46,U+8e4d-8e50,U+8e53-8e54,U+8e56-8e58,U+8e5a-8e5f,U+8e61-8e62,U+8e65,U+8e67-8e68,U+8e6a-8e6b,U+8e6e,U+8e71,U+8e73,U+8e75,U+8e77-8e79,U+8e7b,U+8e7d-8e7e,U+8e80,U+8e82-8e84,U+8e86,U+8e88,U+8e8c,U+8e8e,U+8e96-8e99,U+8e9b,U+8e9d,U+8e9f-8ea0,U+8ea2-8ea4,U+8ea7-8ea9,U+8ead-8eae,U+8eb0-8eb1,U+8eb3-8eb9,U+8ebb-8ebf,U+8ec1-8ec9,U+8ecf-8ed1,U+8ed3,U+8ed5-8eda,U+8edc-8ede,U+8ee0-8ee3,U+8ee5-8eea,U+8eec-8ef1,U+8ef3-8ef7,U+8efd,U+8eff-8f02,U+8f04,U+8f06,U+8f08,U+8f0b}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(177.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+8ce5,U+8ce8-8ce9,U+8ceb,U+8cee-8cf3,U+8cf5-8cf9,U+8cff-8d03,U+8d06-8d07,U+8d09,U+8d0b-8d0c,U+8d0e,U+8d11-8d12,U+8d14-8d15,U+8d18-8d1a,U+8d1c,U+8d20,U+8d51-8d52,U+8d57,U+8d5f,U+8d65,U+8d68-8d6a,U+8d6c,U+8d6e-8d6f,U+8d71-8d72,U+8d78-8d80,U+8d82-8d83,U+8d86-8d89,U+8d8c-8d90,U+8d92-8d93,U+8d96-8d98,U+8d9a-8d9e,U+8da0-8da2,U+8da4-8da7,U+8da9-8db0,U+8db6-8db7,U+8db9,U+8dbb,U+8dbd,U+8dc0-8dc2,U+8dc5,U+8dc7-8dca,U+8dcd,U+8dd0,U+8dd2-8dd5,U+8dd8-8dd9,U+8ddc,U+8de0,U+8de2,U+8de5-8de7,U+8de9,U+8ded-8dee,U+8df0-8df2,U+8df4,U+8df6,U+8dfc,U+8dfe-8e04,U+8e06-8e08,U+8e0b,U+8e0d-8e0e,U+8e11-8e13,U+8e15-8e1c,U+8e20-8e21,U+8e24-8e26}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(176.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+8b6a,U+8b6d-8b6e,U+8b71-8b73,U+8b75-8b76,U+8b78-8b7c,U+8b7f,U+8b81-8b89,U+8b8b-8b8d,U+8b8f-8b91,U+8b94,U+8b97-8b9b,U+8b9d,U+8b9f,U+8bac,U+8bb1,U+8bbb,U+8bc7,U+8bd0,U+8bea,U+8c09,U+8c1e,U+8c38-8c40,U+8c42-8c45,U+8c4a-8c4b,U+8c4d,U+8c4f,U+8c51-8c53,U+8c56-8c59,U+8c5b-8c60,U+8c63-8c69,U+8c6d-8c72,U+8c74-8c77,U+8c7b-8c81,U+8c83-8c84,U+8c86-8c88,U+8c8b,U+8c8e-8c92,U+8c95-8c97,U+8c99-8c9a,U+8c9c,U+8c9f,U+8ca3-8ca6,U+8cad-8cae,U+8cb1,U+8cb5,U+8cb9,U+8cbe,U+8cc6,U+8cc9,U+8ccb-8cd0,U+8cd4,U+8cd6-8cd9,U+8cdb,U+8cdd,U+8cdf}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(175.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+8a81-8a83,U+8a88,U+8a8b,U+8a8e-8a90,U+8a94,U+8a96-8a97,U+8a99,U+8a9b-8a9d,U+8a9f,U+8aa2,U+8aa7,U+8aa9,U+8aab-8aaf,U+8ab1,U+8ab3-8ab5,U+8ab7-8ab8,U+8aba-8abb,U+8abd-8abe,U+8ac0-8ac1,U+8ac3,U+8ac5-8ac6,U+8ac8,U+8aca,U+8acc,U+8ace,U+8ad0,U+8ad3-8ad5,U+8ad8-8ada,U+8add,U+8adf-8ae0,U+8ae3,U+8ae5,U+8ae8-8aea,U+8aec,U+8aef-8af0,U+8af2,U+8af4-8af5,U+8af9,U+8afb,U+8afd,U+8aff,U+8b03,U+8b06,U+8b08-8b09,U+8b0b-8b0d,U+8b0f,U+8b11-8b13,U+8b15,U+8b18,U+8b1a,U+8b1c,U+8b1e-8b1f,U+8b21-8b25,U+8b27,U+8b29-8b2a,U+8b2d-8b32,U+8b34-8b38,U+8b3a-8b3d,U+8b3f-8b40,U+8b42-8b48,U+8b4a-8b4d,U+8b50-8b55,U+8b57,U+8b5b,U+8b5d-8b5e,U+8b60-8b65,U+8b67-8b69}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(174.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+8975-897a,U+897c-897e,U+8980,U+8982,U+8984-8985,U+8987,U+8989-898a,U+898c-898e,U+8990-8992,U+8994-8995,U+8997,U+8999-89a0,U+89a2-89a5,U+89a7-89a9,U+89ab,U+89ad-89ae,U+89b0-89b1,U+89b3-89b6,U+89b8-89b9,U+89bb-89bc,U+89be,U+89c3,U+89cd,U+89d3,U+89d5,U+89d7-89d9,U+89db,U+89dd,U+89df-89e2,U+89e4,U+89e7-89ea,U+89ec-89ee,U+89f0-89f2,U+89f5,U+89f7,U+89f9-89ff,U+8a04-8a06,U+8a09,U+8a0b,U+8a0d,U+8a0f,U+8a11-8a12,U+8a14,U+8a19-8a1a,U+8a1c,U+8a1e,U+8a20-8a22,U+8a24,U+8a26-8a29,U+8a2b-8a2c,U+8a2e-8a30,U+8a32-8a33,U+8a35,U+8a37-8a39,U+8a3c-8a3d,U+8a3f-8a40,U+8a42-8a45,U+8a47,U+8a49-8a4d,U+8a4f,U+8a51,U+8a53,U+8a56-8a57,U+8a59-8a5a,U+8a5c-8a5d,U+8a5f,U+8a64-8a65,U+8a67-8a68,U+8a6a,U+8a6f,U+8a74,U+8a76-8a78,U+8a7a-8a7b,U+8a7d-8a7e,U+8a80}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(173.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+88a6-88aa,U+88ac,U+88ae-88b0,U+88b2-88b6,U+88b8-88bb,U+88bd-88c0,U+88c3-88c4,U+88c7-88c8,U+88ca-88cd,U+88d0-88d1,U+88d3,U+88d6-88d7,U+88da-88db,U+88de,U+88e0-88e1,U+88e6-88e7,U+88e9-88ef,U+88f2,U+88f5-88f7,U+88fa-88fb,U+88ff-8901,U+8903-8909,U+890b-890f,U+8911,U+8914-8918,U+891c-8920,U+8922-8924,U+8926-8929,U+892c-892f,U+8931,U+8935,U+8937,U+8939-893a,U+893c-8940,U+8942-8943,U+8945,U+8947-8948,U+894a-8955,U+8957-895c,U+8961-8963,U+8965,U+8967-8969,U+896b-896e,U+8970-8971,U+8973-8974}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(172.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+87c3,U+87c5,U+87c7,U+87c9,U+87cc-87cd,U+87cf-87d0,U+87d4-87da,U+87dc-87df,U+87e1-87e2,U+87e4,U+87e6-87e9,U+87eb,U+87ed,U+87f0-87f1,U+87f3-87f5,U+87f7-87f8,U+87fa,U+87fc-87fd,U+87ff-8802,U+8804,U+8807-8809,U+880b-880c,U+880e-880f,U+8812,U+8817-881a,U+881c-881e,U+8820,U+8824-8830,U+8833-8835,U+8837-8838,U+883a,U+883d-883f,U+8841-8843,U+8847-8849,U+884b,U+884e-8852,U+8856,U+8858,U+885a,U+885c,U+885e-8860,U+8866-8867,U+886a,U+886d,U+886f,U+8871,U+8873-8876,U+8878-887c,U+8880,U+8883,U+8886-8887,U+8889-888a,U+888c,U+888e-8891,U+8893-8895,U+8897-889b,U+889d,U+889f-88a1,U+88a3,U+88a5}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(171.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+86be-86bf,U+86c1-86c3,U+86c5,U+86c8,U+86cc-86cd,U+86d2-86d3,U+86d5-86d7,U+86da,U+86dc-86dd,U+86e0-86e3,U+86e5-86e8,U+86ea-86ec,U+86ef,U+86f5-86f7,U+86fc-86fd,U+86ff,U+8701,U+8704-8705,U+870b-870c,U+870e-8711,U+8714,U+8719,U+871b,U+871d,U+871f-8720,U+8724,U+8726-8728,U+872a-872d,U+872f-8730,U+8732-8733,U+8735-8736,U+8738-873a,U+873c-873d,U+8740-8746,U+874a-874b,U+874d,U+874f-8752,U+8754,U+8756,U+8758,U+875a-875e,U+8761-8762,U+8767,U+8769-876d,U+876f,U+8771-8773,U+8775,U+8777,U+8779-877a,U+877f-8781,U+8786-8787,U+8789-878a,U+878c,U+878e-8792,U+8794-8796,U+8798-879d,U+87a0-87a1,U+87a3-87a7,U+87a9-87aa,U+87ae,U+87b0-87b2,U+87b4,U+87b6-87b9,U+87bc,U+87be-87bf,U+87c1-87c2}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(170.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+85ef-85f5,U+85f7-85f8,U+85fc-85fe,U+8600-8603,U+8608-8609,U+860c-8610,U+8612-8615,U+8617-8619,U+861b-861d,U+861f-8621,U+8623-8626,U+8628,U+862a-862c,U+862e-8637,U+8639,U+863b,U+863d-863e,U+8640-864c,U+8652-8653,U+8656-8659,U+865d,U+8660-8661,U+8663-8666,U+8668-866a,U+866d,U+8670,U+8672-8678,U+8683-8689,U+868e-8692,U+8694,U+8696-869b,U+869e-86a2,U+86a5-86a6,U+86ab,U+86ad-86ae,U+86b2-86b3,U+86b7-86b9,U+86bb-86bd}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(169.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+851c-851d,U+8520,U+8522,U+8524,U+8527-852a,U+852e-8536,U+853e-8540,U+8542,U+8544-8545,U+8547,U+854b-854d,U+854f-8551,U+8554,U+8557,U+855a-855d,U+855f-8561,U+8563,U+8565-8567,U+856b-856c,U+856e-8571,U+8573,U+8575-8576,U+8578,U+857c-857d,U+857f-8583,U+8586,U+8589,U+858b,U+858d-858e,U+8590,U+8592-8593,U+8595-859a,U+859d-859e,U+85a0-85a3,U+85a5,U+85a7,U+85ab-85ad,U+85b1-85b6,U+85b8,U+85bb-85c0,U+85c2-85c8,U+85ca-85cc,U+85d1-85d2,U+85d4,U+85d6-85db,U+85de-85e3,U+85e6-85e8,U+85eb-85ee}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(167.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+826a,U+826c-826d,U+8275-8277,U+827b-827c,U+8280-8281,U+8283,U+8285-8287,U+8289,U+828c,U+8290,U+8293-8296,U+829a-829b,U+829e,U+82a0,U+82a2-82a3,U+82a7,U+82b2,U+82b5-82b6,U+82ba,U+82bc,U+82bf-82c0,U+82c2-82c3,U+82c5-82c6,U+82c9,U+82d0,U+82d6,U+82d9-82da,U+82dd,U+82e2,U+82e8-82ea,U+82ec-82ee,U+82f0,U+82f2-82f3,U+82f5-82f6,U+82f8,U+82fa,U+82fc-8300,U+830a-830b,U+830d,U+8310,U+8312-8313,U+8316,U+8318-8319,U+831d-8326,U+8329-832a,U+832e,U+8330,U+8337,U+833b,U+833d-833f,U+8341-8342,U+8344-8345,U+8348,U+834b-834e,U+8353,U+8355-8359,U+835d,U+8362,U+8370-8376,U+8379-837a,U+837e-8384,U+8387-8388,U+838b-838d,U+838f-8391,U+8394-8395,U+8397,U+8399-839a,U+839d,U+839f,U+83a1,U+83a3-83a6,U+83ac-83af,U+83b5,U+83bb,U+83be-83bf,U+83c2-83c4,U+83c6,U+83c8-83c9,U+83cb,U+83cd-83ce,U+83d0-83d2,U+83d5,U+83d7,U+83d9-83db,U+83de,U+83e2-83e4,U+83e6-83e8,U+83eb-83ee,U+83f3,U+83f5-83f7,U+83fa-83fc,U+83fe-8400,U+8402,U+8405,U+8408-8409,U+8410,U+8412-8417,U+8419-841b,U+841e-8421}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(168.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+8422-8423,U+8429-842b,U+842d-8430,U+8432-8434,U+8436-8437,U+8439-843b,U+843e-8445,U+8447-8448,U+844a-8450,U+8453-8456,U+8458,U+845d-8460,U+8462,U+8465,U+8467-8468,U+846a,U+846e-8470,U+8472,U+8474,U+8479,U+847b-8481,U+8483-8486,U+848a,U+848d,U+848f,U+8491-8493,U+8495-8496,U+8498,U+849a-849b,U+849d,U+849f-84a0,U+84a2-84ae,U+84b0-84b1,U+84b3,U+84b5-84b7,U+84bb,U+84be,U+84c2-84c3,U+84c5,U+84c7-84c8,U+84cc,U+84ce-84cf,U+84d2,U+84d4-84d5,U+84d7-84dc,U+84de,U+84e1-84e2,U+84e4,U+84e8-84eb,U+84ed,U+84f1-84f3,U+84f5-84fb,U+84fe,U+8500-850b,U+850d-8510,U+8512,U+8515-8516,U+8518-8519,U+851b}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(166.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+8163-8164,U+8168,U+816a,U+816c,U+816f,U+8172,U+8175-8177,U+8184-8187,U+8189,U+818b-818e,U+8190,U+8192-8197,U+8199,U+819e-819f,U+81a1-81a2,U+81a4-81a5,U+81a7,U+81ab-81b2,U+81b4-81b9,U+81bc,U+81c4-81c5,U+81c7-81c8,U+81cb,U+81ce,U+81d0-81d1,U+81d3-81d7,U+81d9,U+81db-81df,U+81e1-81e2,U+81e4,U+81e6,U+81e9,U+81eb,U+81ee-81f2,U+81f5-81fa,U+81fd,U+81ff,U+8203,U+820b,U+820e-820f,U+8211,U+8213,U+8215-821a,U+821d,U+8220,U+8224-8227,U+8229,U+822e,U+8232,U+823a,U+823c-823d,U+823f-8243,U+8245-8246,U+8248,U+824a,U+824c-824e,U+8250-8257,U+825b-825e,U+8260-8263,U+8265,U+8267,U+8269}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(165.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+7ff5-7ff8,U+7ffd-7fff,U+8002,U+8007-800a,U+800e-800f,U+8011,U+8013,U+801a-801b,U+801d-801f,U+8021,U+8023-8024,U+802b,U+802d,U+802f-8030,U+8032,U+8034,U+8039-803a,U+803c,U+803e,U+8040-8041,U+8044-8045,U+8047-8049,U+804e-8051,U+8053,U+8055,U+8057,U+8059,U+805b-805d,U+805f-8068,U+806b-806e,U+8074,U+8078,U+807a-807c,U+8081-8082,U+8088,U+808a,U+808d-8092,U+8094-8095,U+8097,U+8099,U+809e,U+80a3,U+80a6-80a8,U+80ac,U+80b0,U+80b3,U+80b5-80b6,U+80b8-80b9,U+80bb,U+80c5,U+80c7-80cb,U+80cf-80d5,U+80d8,U+80df-80e0,U+80e2-80e3,U+80e6,U+80ee,U+80f5,U+80f7,U+80f9,U+80fb,U+80fe-8101,U+8103-8104,U+8107,U+810b-810c,U+8115,U+8117,U+8119,U+811c-811d,U+811f-8122,U+8124-8128,U+812a,U+812d-812e,U+8130,U+8133-8135,U+8137,U+813a-813d,U+813f-8140,U+8142-8145,U+8147,U+8149,U+814d,U+814f,U+8152,U+8157-8158,U+815b-815f,U+8162}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(164.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+7e7f-7e81,U+7e83-7e87,U+7e89,U+7e8b,U+7e8e,U+7e90-7e92,U+7e95,U+7e97,U+7e99-7e9a,U+7e9d-7e9e,U+7eae,U+7eb4,U+7ebb-7ebc,U+7ed6,U+7ee4,U+7eec,U+7ef9,U+7f0a,U+7f10,U+7f1e,U+7f37,U+7f39,U+7f3b-7f41,U+7f43,U+7f46-7f4b,U+7f4d-7f4f,U+7f52-7f53,U+7f56,U+7f59,U+7f5b-7f5e,U+7f60,U+7f63-7f67,U+7f6b-7f6d,U+7f6f,U+7f73,U+7f76,U+7f78,U+7f7a-7f7d,U+7f7f-7f80,U+7f82-7f84,U+7f87,U+7f89,U+7f8d,U+7f8f-7f93,U+7f95-7f99,U+7f9b-7f9c,U+7fa0,U+7fa2,U+7fa6,U+7faa-7fae,U+7fb1,U+7fb3-7fb5,U+7fb7,U+7fba-7fbb,U+7fbe,U+7fc0,U+7fc2-7fc4,U+7fc6-7fc9,U+7fcb,U+7fcd,U+7fcf-7fd1,U+7fd3,U+7fd6-7fd7,U+7fd9-7fde,U+7fe2-7fe4,U+7fe7-7fe8,U+7fea,U+7fec-7fed,U+7fef,U+7ff2,U+7ff4}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(163.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+7dc1-7dc3,U+7dc5-7dc6,U+7dc8-7dc9,U+7dcc-7dd1,U+7dd3-7dd6,U+7dda-7ddc,U+7ddf,U+7de2,U+7de4-7de5,U+7de7,U+7dea-7deb,U+7ded-7dee,U+7df0,U+7df3,U+7df5,U+7df7-7df8,U+7dfa,U+7dfc-7e07,U+7e0c-7e0f,U+7e12-7e1a,U+7e1c,U+7e20-7e22,U+7e24-7e2a,U+7e2c,U+7e2f-7e30,U+7e33-7e34,U+7e38,U+7e3a,U+7e3c,U+7e3f-7e40,U+7e42,U+7e44,U+7e49-7e51,U+7e53,U+7e56-7e59,U+7e5b-7e5d,U+7e5f-7e60,U+7e63-7e68,U+7e6b-7e6c,U+7e71-7e72,U+7e74-7e78,U+7e7a-7e7b}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(162.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+7cbb,U+7cbf-7cc0,U+7cc2-7cc4,U+7cc6,U+7ccb,U+7cce-7cd4,U+7cd8,U+7cda-7cdb,U+7ce1-7ce6,U+7ce9-7cee,U+7cf0-7cf1,U+7cf3,U+7cf5,U+7cf7,U+7cfa,U+7cfc-7cfd,U+7cff,U+7d01,U+7d03,U+7d0c,U+7d0e-7d0f,U+7d11-7d12,U+7d16,U+7d18,U+7d1d-7d1f,U+7d23-7d26,U+7d28-7d2a,U+7d2c-7d2d,U+7d34-7d38,U+7d3b,U+7d3d-7d3e,U+7d41,U+7d45,U+7d47-7d4d,U+7d4f,U+7d51-7d54,U+7d56-7d5a,U+7d5c,U+7d5f-7d60,U+7d63-7d65,U+7d67,U+7d69-7d6d,U+7d6f-7d70,U+7d74-7d76,U+7d78,U+7d7a-7d80,U+7d82,U+7d84-7d85,U+7d87,U+7d89-7d8e,U+7d90,U+7d92,U+7d94-7d9b,U+7d9d,U+7d9f,U+7da1,U+7da4-7da5,U+7da7-7daa,U+7daf,U+7db3,U+7db6-7db7,U+7dbc,U+7dc0}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(161.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+7bfa-7bfb,U+7bfd,U+7bff,U+7c01-7c06,U+7c08-7c0a,U+7c0e,U+7c10,U+7c12-7c15,U+7c17-7c1d,U+7c20,U+7c22,U+7c24-7c25,U+7c28-7c29,U+7c2c-7c36,U+7c39-7c3d,U+7c42,U+7c44-7c4b,U+7c4e-7c5b,U+7c5d-7c5e,U+7c61-7c63,U+7c65-7c68,U+7c6b,U+7c6d,U+7c6f-7c72,U+7c75-7c7a,U+7c7e-7c88,U+7c8a-7c90,U+7c93-7c94,U+7c96,U+7c99-7c9b,U+7ca0-7ca1,U+7ca3,U+7ca6-7ca9,U+7cab-7cad,U+7caf-7cb0,U+7cb4,U+7cb6-7cb8,U+7cba}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(160.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+7aeb-7aec,U+7aee,U+7af0-7af5,U+7af7-7af8,U+7afb-7afc,U+7afe,U+7b00-7b02,U+7b05,U+7b07,U+7b09,U+7b0c-7b0e,U+7b10,U+7b12-7b13,U+7b16-7b18,U+7b1a,U+7b1c-7b1d,U+7b1f,U+7b21-7b23,U+7b27,U+7b29,U+7b2d,U+7b2f-7b30,U+7b32,U+7b34-7b37,U+7b39,U+7b3b,U+7b3d,U+7b3f-7b44,U+7b48,U+7b4a,U+7b4e,U+7b53,U+7b55,U+7b57,U+7b59,U+7b5c,U+7b5e-7b5f,U+7b61,U+7b63-7b66,U+7b68-7b6d,U+7b6f-7b70,U+7b73-7b74,U+7b76,U+7b78,U+7b7a,U+7b7c-7b7d,U+7b7f,U+7b81-7b84,U+7b86-7b8a,U+7b8c,U+7b8e,U+7b91-7b93,U+7b96,U+7b98-7b9b,U+7b9e-7ba0,U+7ba3-7ba5,U+7bae-7bb0,U+7bb2-7bb3,U+7bb5-7bb7,U+7bb9-7bbf,U+7bc2-7bc3,U+7bc5,U+7bc8,U+7bca,U+7bcd-7bd0,U+7bd2,U+7bd4-7bd8,U+7bdb-7bdc,U+7bde-7be0,U+7be2-7be3,U+7be7-7be8,U+7beb-7bed,U+7bef-7bf0,U+7bf2,U+7bf4-7bf6,U+7bf8-7bf9}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(158.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+78f1,U+78f3,U+78f5-78f6,U+78f8-78f9,U+78fb-78fc,U+78fe-7900,U+7902-7904,U+7907-790d,U+790f-7912,U+7914-7918,U+791a-791d,U+7920-7923,U+7925,U+7927-7929,U+792d-7930,U+7932-7933,U+7935-7939,U+793d,U+793f,U+7942-7945,U+7947,U+794a-7952,U+7954,U+7958-7959,U+7961,U+7963-7964,U+7966,U+7969-796c,U+796e,U+7970-7976,U+7979,U+797b-797e,U+7982-7983,U+7986-7989,U+798b-798c,U+7990-7999,U+799b-79a5,U+79a8-79a9,U+79ab-79ad,U+79af,U+79b2,U+79b4-79b8,U+79bc,U+79c2,U+79c4-79c5,U+79c7,U+79ca,U+79cc,U+79ce-79d0,U+79d3-79d4,U+79d6-79d7,U+79d9-79de,U+79e0-79e1}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(159.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+79e2,U+79e5,U+79e8,U+79ea,U+79ec,U+79ee,U+79f1-79f7,U+79f9-79fa,U+79fc,U+79fe-79ff,U+7a01,U+7a04,U+7a07,U+7a09-7a0a,U+7a0c,U+7a0f-7a13,U+7a15-7a16,U+7a18-7a19,U+7a1b,U+7a1d,U+7a21-7a22,U+7a24-7a2d,U+7a2f-7a30,U+7a32,U+7a34-7a36,U+7a38,U+7a3a,U+7a3e,U+7a41-7a45,U+7a47-7a4b,U+7a4f-7a50,U+7a52-7a56,U+7a58-7a60,U+7a63-7a68,U+7a6a-7a6c,U+7a6e-7a6f,U+7a71-7a73,U+7a75,U+7a7b-7a7e,U+7a82,U+7a85,U+7a87,U+7a89-7a8c,U+7a8e-7a90,U+7a93-7a94,U+7a99-7a9b,U+7a9e,U+7aa1-7aa4,U+7aa7,U+7aab,U+7ab0-7ab2,U+7ab4-7ab5,U+7ab7-7ab9,U+7abb-7abe,U+7ac0-7ac3,U+7ac6,U+7ac9,U+7acc-7ad5,U+7ad7-7ad8,U+7ada-7add,U+7ae1-7ae2,U+7ae4,U+7ae7-7aea}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(157.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+77c9-77cc,U+77ce-77d6,U+77d8-77d9,U+77dd-77e1,U+77e4,U+77e6,U+77e8,U+77ea,U+77f0-77f2,U+77f4-77f5,U+77f7,U+77f9-77fc,U+7803-7808,U+780a-780b,U+780e-7810,U+7813,U+7815,U+7819,U+781b,U+781e,U+7820-7822,U+7824,U+7828,U+782a-782b,U+782e-782f,U+7831-7833,U+7835-7836,U+783d,U+783f,U+7841-7842,U+7844,U+7846,U+7848-784b,U+784d,U+784f,U+7851,U+7853-7854,U+7858-785c,U+785e-7863,U+7865-7867,U+7869,U+7870-7876,U+7878-787b,U+787d-7886,U+7888,U+788a-788b,U+788f-7890,U+7892,U+7894-7896,U+7899,U+789d-789e,U+78a0,U+78a2,U+78a4,U+78a6,U+78a8,U+78aa-78ac,U+78ae-78af,U+78b5-78b7,U+78bb,U+78bd,U+78bf-78c0,U+78c2-78c4,U+78c6-78c8,U+78cc-78cf,U+78d1-78d3,U+78d6-78d8,U+78db-78e2,U+78e4-78e6,U+78e9-78eb,U+78ed-78ee,U+78f0}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(154.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+7461-7462,U+7465-7468,U+746b-746c,U+746e,U+7471-7475,U+7478-747d,U+747f,U+7482,U+7484-7486,U+7488,U+748a,U+748c-748d,U+748f,U+7491-749b,U+749d,U+749f-74a2,U+74a4-74a5,U+74aa-74af,U+74b1-74b9,U+74bb-74bc,U+74be,U+74c0-74c9,U+74cb-74ce,U+74d0-74d1,U+74d3,U+74d5-74d9,U+74db,U+74dd,U+74df,U+74e1,U+74e5,U+74e7-74ed,U+74f0-74f3,U+74f5,U+74f8-74fe,U+7500,U+7502-7503,U+7505-750b,U+750e,U+7510,U+7512,U+7514,U+7516-7517,U+751b,U+751d-751e,U+7520-7521,U+7523-7524,U+7526-7527,U+752a,U+752e,U+7534,U+7536,U+7539,U+753c-753d,U+753f,U+7541-7543}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(156.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+76a2-76a3,U+76a5-76ad,U+76af,U+76b3,U+76b5-76b7,U+76b9,U+76bb-76be,U+76c0-76c1,U+76c4,U+76c7,U+76c9,U+76cb-76cc,U+76d3,U+76d5,U+76d9-76da,U+76dd,U+76e0,U+76e2,U+76e6,U+76e8-76ed,U+76f0,U+76f3,U+76f5-76f7,U+76fa-76fb,U+76fd,U+76ff-7703,U+7705-7706,U+770a,U+770c,U+770e-7718,U+771b-771d,U+7721,U+7723-7724,U+7727,U+772a-772c,U+772e,U+7730-7734,U+7739,U+773b,U+773d-773f,U+7742,U+7744-7746,U+7748-774e,U+7752-7759,U+775d,U+775f-7760,U+7764,U+7767,U+7769-776a,U+776d-7778,U+777a-777c,U+7781-7783,U+7786,U+7788-778b,U+778f-7790,U+7793-7797,U+7799-779d,U+77a1,U+77a3-77a4,U+77a6,U+77a8,U+77ab,U+77ae-77af,U+77b1-77b2,U+77b4,U+77b6-77ba,U+77be,U+77c0-77c8}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(155.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+7544,U+7546-7547,U+7549-754a,U+754d,U+7550-7553,U+7555-7558,U+755e-7561,U+7563-7564,U+7567-7569,U+756c-756f,U+7571,U+7573,U+7575,U+7577,U+757a-757e,U+7580-7582,U+7584-7585,U+7588-7589,U+758c-758e,U+7590,U+7593,U+7595,U+7598,U+759b-759c,U+759e,U+75a2,U+75a6-75aa,U+75ad,U+75b6-75b7,U+75ba-75bb,U+75bf-75c1,U+75c6,U+75cb-75cc,U+75ce-75d1,U+75d3,U+75d7,U+75da,U+75dc-75dd,U+75df,U+75e1,U+75e5,U+75e9,U+75ec-75ef,U+75f2-75f3,U+75f5-75f8,U+75fa-75fb,U+75fd,U+7604,U+7606-7609,U+760e-760f,U+7611-7612,U+7614,U+7616,U+761a,U+761c-761d,U+7623,U+7628,U+762c,U+762e-762f,U+7631-7632,U+7636-7637,U+7639-763a,U+763d,U+7641,U+7644-7645,U+7648,U+764a-764b,U+764e-7651,U+7653,U+7655,U+7657,U+7659-765b,U+765d,U+7660,U+7666,U+7668,U+766a,U+7673-7677,U+7679-767a,U+767f-7680,U+7683,U+7685,U+7689-768a,U+768c-768d,U+768f-7690,U+7692,U+7694-7695,U+7697-7698,U+769b-76a1}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(153.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+7346-734c,U+734f,U+7351,U+7353-7356,U+7358-735f,U+7361-7367,U+7369,U+736e,U+7371,U+7373-7374,U+7376,U+7379,U+737d,U+737f,U+7381-7383,U+7385-7386,U+7388,U+738a,U+738c-738d,U+738f-7390,U+7392-7395,U+7397-739a,U+739c-739e,U+73a0-73a1,U+73a3-73a7,U+73aa,U+73ac-73ad,U+73b1,U+73b4-73b6,U+73b8-73b9,U+73bc-73bf,U+73c1,U+73c3-73c7,U+73cb-73cc,U+73ce,U+73d2-73d8,U+73da-73dd,U+73df,U+73e1-73e4,U+73e6,U+73e8,U+73ea-73ec,U+73ee-73f1,U+73f3-73fd,U+73ff-7402,U+7404,U+7407-7408,U+740b-740e,U+7411-7419,U+741c-7421,U+7423-7424,U+7427,U+7429,U+742b,U+742d,U+742f,U+7431-7432,U+7437-7439,U+743b,U+743d-743e,U+7440,U+7442-7448,U+744a,U+744c-7454,U+7456,U+7458,U+745d,U+7460}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(152.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+720e-720f,U+7211-721a,U+721c,U+721e-7227,U+7229,U+722b,U+722e-722f,U+7233-7234,U+723c,U+7241-7245,U+7249-724b,U+724e-7251,U+7253-7255,U+7257,U+725a,U+725c,U+725e,U+7263-7265,U+7268,U+726a-726d,U+7270-7271,U+7273,U+7276-7278,U+727b-727c,U+7282-7283,U+7285-7289,U+728c,U+728e,U+7290-7291,U+7293-7295,U+7297-729a,U+729c-729e,U+72a0-72a1,U+72a3-72a6,U+72a8-72ab,U+72ae,U+72b1-72b3,U+72b5,U+72ba-72bf,U+72c5-72c7,U+72c9-72cc,U+72cf,U+72d1,U+72d3-72d6,U+72d8,U+72da-72dd,U+72df,U+72e2-72e7,U+72ea-72eb,U+72f5-72f6,U+72fe-7300,U+7302,U+7304-7309,U+730b-730d,U+730f-7312,U+7314,U+7318,U+731a,U+731f-7320,U+7323-7324,U+7326-7328,U+732d,U+732f-7330,U+7332-7333,U+7335,U+733a,U+733c-733d,U+7340,U+7342}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(151.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+7135,U+7137-7144,U+7147-7148,U+714b,U+714d,U+714f-7151,U+7153-7158,U+715a-715b,U+715d,U+715f-7161,U+7163,U+716a-716b,U+716d,U+716f-7171,U+7174-7177,U+7179,U+717b-717c,U+717e-7183,U+7185-7189,U+718b-718e,U+7190-7191,U+7193,U+7195-7196,U+719a-719e,U+71a1-71a7,U+71a9-71ab,U+71ad-71b0,U+71b2,U+71b4,U+71b6-71b8,U+71ba-71bd,U+71bf-71c0,U+71c2,U+71c4-71c7,U+71ca-71cd,U+71cf-71d1,U+71d3,U+71d6-71d8,U+71da-71db,U+71dd-71de,U+71e1-71e4,U+71e8-71ec,U+71ef-71f3,U+71f5-71f8,U+71fa,U+71fd,U+71ff-7205,U+7207-720c}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(150.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+7030-7031,U+7033-7034,U+7036-7038,U+703a-703d,U+703f-7042,U+7045-704b,U+704d-704e,U+7050,U+7052-7054,U+7056-7057,U+7059-705c,U+705f-7062,U+7065-7068,U+706a,U+706e,U+7071-7074,U+7077,U+7079-707b,U+7081-7084,U+7086-7088,U+708b-708d,U+708f-7091,U+7093,U+7097-7098,U+709a-709b,U+709e-70aa,U+70b0,U+70b2,U+70b4-70b6,U+70ba,U+70be-70bf,U+70c4-70c7,U+70c9,U+70cb-70ce,U+70d0-70d7,U+70da,U+70dc-70de,U+70e0-70e3,U+70e5,U+70ea,U+70ee,U+70f0-70f3,U+70f5-70f6,U+70f8,U+70fa-70fc,U+70fe-7108,U+710b-710f,U+7111-7112,U+7114,U+7117,U+711b-7120,U+7122-7125,U+7127-712e,U+7132-7134}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(147.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+6c80,U+6c84,U+6c87,U+6c8a-6c8b,U+6c8d-6c8e,U+6c91,U+6c95-6c98,U+6c9a,U+6c9c-6c9e,U+6ca0,U+6ca2,U+6ca8,U+6cac,U+6caf-6cb0,U+6cb4-6cb7,U+6cba,U+6cc0,U+6cc2-6cc3,U+6cc6-6cc8,U+6ccb,U+6ccd-6ccf,U+6cd1-6cd2,U+6cd8-6cda,U+6cdc,U+6cdf,U+6ce4,U+6ce6-6ce7,U+6ce9,U+6cec-6ced,U+6cf2,U+6cf4,U+6cf9,U+6cff-6d00,U+6d02-6d03,U+6d05-6d06,U+6d08-6d0a,U+6d0d,U+6d0f-6d11,U+6d13-6d16,U+6d18,U+6d1c-6d1d,U+6d1f-6d24,U+6d26,U+6d28,U+6d2c-6d2d,U+6d2f-6d30,U+6d34,U+6d37-6d38,U+6d3a,U+6d3f-6d40,U+6d42,U+6d44,U+6d49,U+6d4c,U+6d50,U+6d55-6d58,U+6d5b,U+6d5d,U+6d5f,U+6d61-6d62,U+6d64-6d65,U+6d67-6d68,U+6d6b-6d6d,U+6d70-6d73,U+6d75-6d76,U+6d7a-6d7b,U+6d7d-6d81,U+6d83-6d84,U+6d86,U+6d8a-6d8b,U+6d8d,U+6d8f-6d90,U+6d92,U+6d96-6d9a,U+6d9c,U+6da2,U+6da5,U+6dac-6dad,U+6db0-6db1,U+6db3-6db4,U+6db6-6db7,U+6db9-6dbb,U+6dbd-6dbe,U+6dc1-6dc3,U+6dc8-6dca,U+6dcd-6dd0,U+6dd2-6dd5,U+6dd7,U+6ddb-6ddc,U+6ddf,U+6de2-6de3,U+6de7,U+6ded,U+6def-6df0,U+6df2,U+6df4,U+6df8,U+6dfd-6e04,U+6e06-6e08,U+6e0b,U+6e0f,U+6e12-6e13,U+6e15,U+6e18,U+6e1c,U+6e1e-6e1f,U+6e22,U+6e27-6e28,U+6e2a,U+6e2e,U+6e30-6e31,U+6e33,U+6e35-6e37,U+6e39,U+6e3b-6e3d,U+6e3f-6e42}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(149.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+6f5f-6f61,U+6f63,U+6f65,U+6f67-6f6c,U+6f71,U+6f73,U+6f75-6f76,U+6f79,U+6f7b,U+6f7d-6f7e,U+6f81-6f83,U+6f85,U+6f8a-6f8b,U+6f8f-6f96,U+6f98-6f9b,U+6f9d-6f9f,U+6fa2-6fa3,U+6fa5-6fa6,U+6fa8,U+6faa-6fad,U+6faf-6fb0,U+6fb2,U+6fb4-6fb5,U+6fb7-6fb8,U+6fba-6fbf,U+6fc4-6fc8,U+6fca-6fd0,U+6fd3-6fd7,U+6fd9-6fdd,U+6fe2-6fe3,U+6fe5-6fea,U+6fec-6fed,U+6ff2-6ff9,U+6ffb,U+6ffd,U+6fff-7004,U+7007-7008,U+700a,U+700c-700e,U+7010,U+7012-7014,U+7016-7017,U+7019,U+701c,U+701e,U+7021-7022,U+7024-7025,U+7029-702f}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(148.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+6e45-6e49,U+6e4b-6e4c,U+6e4f-6e52,U+6e55,U+6e57,U+6e59-6e5a,U+6e5c-6e5d,U+6e60-6e62,U+6e64-6e66,U+6e68-6e6a,U+6e6c-6e6d,U+6e70-6e7d,U+6e80-6e82,U+6e84,U+6e87-6e88,U+6e8a-6e8e,U+6e91-6e95,U+6e97,U+6e99-6e9b,U+6e9e,U+6ea0-6ea1,U+6ea3-6ea4,U+6ea6,U+6ea8-6ea9,U+6eac-6eae,U+6eb0,U+6eb3,U+6eb5,U+6eb8-6eb9,U+6ebe-6ec0,U+6ec3,U+6ec6,U+6ec8-6eca,U+6ecd,U+6ed0,U+6ed2,U+6ed6,U+6ed8-6ed9,U+6edb-6edd,U+6ee3,U+6ee7,U+6eea-6eeb,U+6eed-6eee,U+6ef0-6ef1,U+6ef3,U+6ef5-6ef6,U+6efa-6efd,U+6f00,U+6f03-6f05,U+6f07-6f08,U+6f0a-6f0e,U+6f10,U+6f12,U+6f16-6f19,U+6f1b-6f1f,U+6f21,U+6f25-6f28,U+6f2e,U+6f30,U+6f34,U+6f37,U+6f39-6f3d,U+6f40,U+6f42-6f45,U+6f48-6f4a,U+6f4c,U+6f4e-6f50,U+6f52-6f53,U+6f55-6f57,U+6f5a,U+6f5d}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(146.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+6b2a-6b31,U+6b33-6b36,U+6b38,U+6b3b-6b3c,U+6b3f-6b42,U+6b44-6b45,U+6b48,U+6b4a-6b4b,U+6b4d-6b4f,U+6b51-6b58,U+6b5a-6b5e,U+6b60,U+6b68-6b69,U+6b6b-6b71,U+6b73-6b76,U+6b7a,U+6b7d-6b7e,U+6b80,U+6b85,U+6b88,U+6b8c,U+6b8e-6b91,U+6b94-6b95,U+6b97,U+6b99,U+6b9c-6b9d,U+6b9f-6ba0,U+6ba2-6ba3,U+6ba5-6ba9,U+6bac,U+6bb0-6bb1,U+6bb6,U+6bb8-6bb9,U+6bbb,U+6bbd-6bbe,U+6bc3-6bc4,U+6bc7-6bca,U+6bcc,U+6bce,U+6bd0-6bd1,U+6bd8,U+6bda,U+6bdc-6be0,U+6be2-6be9,U+6bec-6bee,U+6bf0-6bf2,U+6bf4,U+6bf6-6bf8,U+6bfa-6bfc,U+6bfe,U+6c00-6c04,U+6c09-6c0b,U+6c0e,U+6c12,U+6c17,U+6c1c-6c1e,U+6c20,U+6c25,U+6c2d,U+6c31,U+6c36-6c37,U+6c3a-6c3c,U+6c3e-6c3f,U+6c43-6c45,U+6c48,U+6c4b-6c4f,U+6c51-6c53,U+6c56,U+6c58,U+6c5a,U+6c62-6c63,U+6c65-6c67,U+6c6b-6c6f,U+6c71,U+6c73,U+6c75,U+6c77-6c78,U+6c7b-6c7c,U+6c7f}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(145.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+6a87-6a88,U+6a8a-6a8d,U+6a8f,U+6a92-6a93,U+6a95-6a96,U+6a98-6a9b,U+6a9d-6a9f,U+6aa1,U+6aa4-6aa8,U+6aaa,U+6aad-6ab2,U+6ab4-6ab7,U+6ab9-6aba,U+6abc-6abd,U+6abf-6ac2,U+6ac4-6ad2,U+6ad4-6ad9,U+6adc,U+6ae0-6ae4,U+6ae6,U+6ae9,U+6aed-6af0,U+6af2,U+6af4-6af7,U+6af9-6afa,U+6afc-6b03,U+6b05-6b09,U+6b0b-6b0e,U+6b10-6b11,U+6b13-6b15,U+6b17-6b1d,U+6b1f,U+6b25-6b26,U+6b28-6b29}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(144.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+69b3,U+69b5-69b6,U+69b8-69ba,U+69bc-69be,U+69c0,U+69c2-69c9,U+69cf,U+69d1-69d2,U+69d5-69da,U+69dc-69de,U+69e1-69e6,U+69e9,U+69eb-69ec,U+69ee-69f1,U+69f4-69fc,U+69fe,U+6a00,U+6a03-6a04,U+6a06-6a09,U+6a0b-6a10,U+6a12,U+6a14-6a16,U+6a1a-6a1d,U+6a20,U+6a22,U+6a24-6a27,U+6a29,U+6a2b-6a2e,U+6a30,U+6a32-6a33,U+6a36-6a37,U+6a3b-6a3c,U+6a3f-6a43,U+6a45-6a46,U+6a49-6a4a,U+6a4c-6a4f,U+6a51-6a57,U+6a5a,U+6a5c-6a5e,U+6a60,U+6a63-6a64,U+6a66-6a6a,U+6a6c-6a70,U+6a72-6a78,U+6a7a-6a7b,U+6a7d-6a7f,U+6a82-6a83,U+6a85-6a86}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(143.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+68ab-68ac,U+68ae,U+68b1-68b2,U+68b4,U+68b6-68bf,U+68c1,U+68c3,U+68c5-68c8,U+68cc,U+68ce-68d1,U+68d3-68d4,U+68d9,U+68db-68de,U+68e1-68e2,U+68e4-68e6,U+68e8-68eb,U+68ed,U+68ef,U+68f3-68f4,U+68f6-68f8,U+68fb,U+68fd-6900,U+6902-6904,U+6906-690a,U+690c,U+6911,U+6913-691e,U+6921-6923,U+6925-692c,U+692e-692f,U+6931-6933,U+6935-6938,U+693a-693c,U+693e,U+6940-6941,U+6943-6949,U+694b-6952,U+6955-6956,U+6958-6959,U+695b-695c,U+695f,U+6961-6962,U+6964-6965,U+6967,U+6969-696a,U+696c,U+696f-6970,U+6972-6974,U+6976,U+697a-697b,U+697d-697f,U+6981,U+6983,U+6985,U+698a-698c,U+698e-6993,U+6996-6997,U+6999-699a,U+699d-69a6,U+69a9,U+69ac,U+69af-69b0,U+69b2}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(142.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+6712-6713,U+6716,U+6718-671a,U+671c,U+671e,U+6720-6725,U+6729,U+672e,U+6730,U+6732-6733,U+6737-6739,U+673b-673c,U+673e-673f,U+6741,U+6744-6745,U+6747,U+674a-674b,U+674d,U+6752,U+6754-6755,U+6757-675b,U+675d,U+6762-6764,U+6766-6767,U+676b-676c,U+676e,U+6774,U+6776,U+6778-677b,U+677d,U+6780,U+6782-6783,U+6785-6786,U+6788,U+678a,U+678c-678f,U+6791-6794,U+6796,U+6799,U+679b,U+679f-67a1,U+67a4,U+67a6,U+67a9,U+67ac,U+67ae,U+67b1-67b2,U+67b4,U+67b9-67c0,U+67c2,U+67c5-67ce,U+67d5-67d7,U+67db,U+67df,U+67e1,U+67e3-67e4,U+67e6-67e8,U+67ea-67eb,U+67ed-67ee,U+67f2,U+67f6-67fa,U+67fc,U+67fe,U+6801-6804,U+6806,U+680d,U+6810,U+6812,U+6814-6815,U+6818-681c,U+681e-6820,U+6822-6828,U+682b-6831,U+6834-6836,U+683a-683b,U+683f,U+6847,U+684b,U+684d,U+684f,U+6852,U+6856-685f,U+686a,U+686c-6873,U+6875,U+6878-687e,U+6880,U+6882,U+6884,U+6887-688e,U+6890-6892,U+6895-6896,U+6899-689c,U+689e,U+68a0-68a1,U+68a3-68a5,U+68a9-68aa}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(141.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+65dd-65df,U+65e1,U+65e4,U+65ea-65eb,U+65f2-65f5,U+65f8-65f9,U+65fb-65ff,U+6601,U+6604-6605,U+6607-6609,U+660b,U+660d,U+6610-6612,U+6616-6618,U+661a-661c,U+661e,U+6621-6624,U+6626,U+6629-662c,U+662e,U+6630,U+6632-6633,U+6637-663b,U+663d,U+663f-6640,U+6644-6648,U+664a,U+664d-664e,U+6650-6651,U+6658-6659,U+665b-665c,U+665e,U+6660,U+6662-6663,U+6665,U+6667,U+6669-666d,U+6671-6673,U+6675,U+6678-6679,U+667b-667d,U+667f-6681,U+6683,U+6685-6686,U+668a-668b,U+668d-6690,U+6692-6695,U+6698-669c,U+669e-66a1,U+66a3-66a6,U+66a9-66aa,U+66ac-66ad,U+66af-66b0,U+66b2-66b3,U+66b5-66b8,U+66ba-66bd,U+66bf-66c3,U+66c5-66c6,U+66c8,U+66ca-66d5,U+66d7-66d8,U+66da,U+66de-66df,U+66e1-66e5,U+66e7-66e8,U+66ea-66eb,U+66ed-66ef,U+66f1,U+66f5-66f6,U+66fa-66fb,U+66fd,U+6701-6702,U+6704-6707,U+670c,U+670e-670f,U+6711}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(138.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+61de,U+61e0-61e2,U+61e4-61e5,U+61e7,U+61e9-61f1,U+61f3-61f4,U+61f9,U+61fb,U+61fd,U+6201-6205,U+6209,U+6213,U+6219,U+621c-621e,U+6220,U+6223,U+6226,U+6228,U+622b,U+622d,U+622f,U+6231,U+6235,U+6238-623c,U+6242,U+6244-6246,U+624a,U+624f-6250,U+6255-6257,U+6259-625a,U+625c-6260,U+6262,U+6264-6265,U+6268,U+6271-6272,U+6274-6275,U+6277-6278,U+627a-627b,U+627d,U+6281-6283,U+6285-6288,U+628b-6290,U+6294,U+6299,U+629c-629e,U+62a3,U+62a6-62a7,U+62a9-62aa,U+62ad-62b0,U+62b2-62b4,U+62b6-62b8,U+62ba,U+62be,U+62c0-62c1,U+62c3,U+62cf,U+62d1,U+62d5,U+62de,U+62e0-62e1,U+62e4,U+62ea-62eb,U+62f0,U+62f2,U+62f5,U+62f8-62fb,U+6300,U+6303-6306,U+630a-630d,U+630f-6310,U+6312-6315,U+6317-6319,U+631c,U+6326-6327,U+6329,U+632c-632e,U+6330,U+6333-6338,U+633b-633c,U+633f-6341,U+6344,U+6347-6348,U+634a,U+6351-6354,U+6356-635d,U+6360,U+6364-6366,U+636a,U+636c,U+636f-6370,U+6373-6375,U+6378-6379,U+637c-637f,U+6381,U+6385-6386,U+638b,U+638d,U+6391,U+6393-6395,U+6397,U+639a,U+639c}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(139.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+639d-639f,U+63a1,U+63a4,U+63a6,U+63ab,U+63af,U+63b1-63b2,U+63b5-63b6,U+63b9,U+63bb,U+63bd,U+63bf,U+63c1-63c3,U+63c5,U+63c7-63c8,U+63ca-63cc,U+63d1,U+63d3-63d5,U+63d7-63d9,U+63dc-63dd,U+63df,U+63e2,U+63e4-63e8,U+63eb-63ec,U+63ef-63f1,U+63f3,U+63f5,U+63f7,U+63fa-63fc,U+63fe,U+6403-6404,U+6406-640a,U+640e,U+6411-6412,U+6415,U+6418-641a,U+641d,U+641f,U+6422-6424,U+6427-6429,U+642b,U+642e-6433,U+6435,U+6437-6439,U+643b-643c,U+643e,U+6442-6443,U+6449,U+644b-6450,U+6453,U+6455-6457,U+6459-645b,U+645d,U+6460-6462,U+6464-6466,U+6468,U+646a-646c,U+646e,U+6470-6472,U+6474-6475,U+6477,U+647c-6481,U+6483,U+6486,U+6489-648f,U+6494,U+6497-6498,U+649b-649d,U+64a0-64a2,U+64a6-64a8,U+64aa,U+64af,U+64b1,U+64b4,U+64b6,U+64b9,U+64bd,U+64c3,U+64c6,U+64c8-64c9,U+64cc,U+64cf,U+64d1}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(140.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+64d3,U+64d5-64d6,U+64d9,U+64db-64dd,U+64df,U+64e3,U+64e5,U+64e7-64eb,U+64ed-64ee,U+64f3,U+64f5-64f6,U+64f8-64f9,U+64fd,U+64ff,U+6501-6503,U+6505,U+6507-6508,U+650a-650e,U+6510-6511,U+6513,U+6515,U+6517,U+651a,U+651e-6521,U+6526-6529,U+652d,U+6530-6533,U+6537,U+653a,U+653c-653d,U+6540-6544,U+6546-6547,U+654a-654b,U+654d,U+6550,U+6552-6554,U+655a,U+655c,U+655f-6561,U+6564-6565,U+6567-656a,U+656d-656f,U+6571,U+6573,U+6576,U+6579-6581,U+6584-6586,U+6588-658a,U+658d-658f,U+6592,U+6594,U+6596,U+6598,U+659a,U+659d-659e,U+65a0,U+65a2-65a3,U+65a6,U+65a8,U+65aa,U+65ae,U+65b1-65b6,U+65b8,U+65ba-65bb,U+65be-65c0,U+65c7-65ca,U+65cd,U+65d0-65d1,U+65d3-65d5,U+65d8-65dc}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(136.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+5f3e-5f3f,U+5f41-5f47,U+5f49-5f4b,U+5f4d,U+5f4f,U+5f51,U+5f54,U+5f59-5f5c,U+5f5f-5f60,U+5f63,U+5f67-5f68,U+5f6b,U+5f6e-5f6f,U+5f72,U+5f74-5f76,U+5f78,U+5f7a,U+5f7d-5f7e,U+5f83,U+5f86,U+5f8d-5f8f,U+5f93-5f94,U+5f96,U+5f9a-5f9b,U+5f9d,U+5f9f,U+5fa2-5fa7,U+5fab-5fac,U+5faf-5fb4,U+5fb6,U+5fb8,U+5fba-5fbb,U+5fbe-5fc2,U+5fc7-5fc8,U+5fca-5fcb,U+5fce,U+5fd3-5fd5,U+5fda-5fdc,U+5fde-5fdf,U+5fe2-5fe3,U+5fe5-5fe6,U+5fe8-5fe9,U+5fec,U+5fef-5ff0,U+5ff2-5ff4,U+5ff6-5ff7,U+5ff9-5ffa,U+5ffc,U+6007-6009,U+600b-600c,U+6010-6011,U+6013,U+6017-6018,U+601a,U+601e-601f,U+6022-6024,U+602c-602e,U+6030-6034,U+6036-603a,U+603d-603e,U+6040,U+6044-6045,U+6047-604a,U+604c,U+604e-604f,U+6051,U+6053-6054,U+6056-6058,U+605b-605c,U+605e-6061,U+6066,U+606e,U+6071-6072,U+6074-6075,U+6077,U+607e,U+6080-6082,U+6086-6088,U+608a-608b,U+608e-6091,U+6093,U+6095,U+6097-6099,U+609c,U+609e,U+60a1-60a2,U+60a4-60a5,U+60a7,U+60a9-60aa,U+60ae,U+60b0,U+60b3,U+60b7,U+60b9-60ba,U+60be-60c4,U+60c7-60c9,U+60cc-60d0}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(137.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+60d2-60d4,U+60d6-60d7,U+60d9,U+60db,U+60de,U+60e2-60e5,U+60ea,U+60f5,U+60f7-60f8,U+60fc-60ff,U+6102-6105,U+6107,U+610a-610c,U+6110-6114,U+6116-6119,U+611d-611e,U+6121-6122,U+6125,U+6129-612a,U+612c-6133,U+6135-6136,U+6138-613d,U+6140-6141,U+6143,U+6145-6147,U+6149,U+614f-6150,U+6152-6154,U+6156-6157,U+6159,U+615b-615c,U+615e,U+6160-6161,U+6164-6166,U+6169,U+616c-616d,U+616f,U+6171-6172,U+6174,U+6178-617b,U+617d,U+617f-6181,U+6183-6189,U+618c-618d,U+618f,U+6193,U+6195-6199,U+619b-619c,U+619e-61a3,U+61a5-61a6,U+61aa,U+61ad,U+61af-61b1,U+61b3-61b5,U+61b8-61bd,U+61bf-61c1,U+61c3-61c6,U+61ce-61d0,U+61d3,U+61d5-61dd}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(135.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+5dc8-5dca,U+5dcc,U+5dce-5dd1,U+5dd3,U+5dd5,U+5dd7-5dda,U+5ddc,U+5ddf-5de0,U+5de4,U+5dea,U+5dec-5ded,U+5df5-5df6,U+5df8,U+5dfa-5dfc,U+5dff-5e00,U+5e04,U+5e07,U+5e09-5e0b,U+5e0d-5e0e,U+5e12-5e13,U+5e17,U+5e1e-5e24,U+5e28-5e2a,U+5e2c,U+5e2f-5e30,U+5e32,U+5e34-5e35,U+5e39-5e3a,U+5e3e-5e3f,U+5e41,U+5e46-5e4b,U+5e4d-5e53,U+5e56,U+5e59-5e5a,U+5e5c-5e5d,U+5e60,U+5e64-5e6a,U+5e6d-5e71,U+5e75,U+5e77,U+5e81-5e83,U+5e85,U+5e88-5e89,U+5e8c-5e8e,U+5e92,U+5e98,U+5e9b,U+5e9d,U+5ea1-5ea4,U+5ea8-5eaa,U+5eac,U+5eae-5eb2,U+5eb4,U+5eba-5ebd,U+5ebf-5ec0,U+5ec3,U+5ec5-5ec7,U+5ecb-5ed0,U+5ed4-5ed5,U+5ed7-5ed9,U+5edc,U+5ede,U+5ee0,U+5ee4-5ee7,U+5eeb,U+5eed-5ef2,U+5ef5,U+5ef8-5ef9,U+5efb-5efd,U+5f05-5f07,U+5f09,U+5f0c-5f0e,U+5f10,U+5f16,U+5f19-5f1a,U+5f1c-5f1e,U+5f21-5f24,U+5f28,U+5f2b-5f2c,U+5f2e,U+5f30,U+5f32,U+5f34,U+5f36,U+5f38,U+5f3b,U+5f3d}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(134.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+5ce2-5ce3,U+5ce7,U+5ceb-5cec,U+5cee,U+5cf1-5cf3,U+5cf5,U+5cf7-5cfa,U+5cfc,U+5cfe-5d01,U+5d04-5d05,U+5d08-5d0c,U+5d0f-5d10,U+5d12-5d13,U+5d15,U+5d18-5d1a,U+5d1c-5d1d,U+5d1f-5d21,U+5d23,U+5d25,U+5d28,U+5d2a-5d2b,U+5d2f-5d32,U+5d35-5d3c,U+5d3f-5d46,U+5d48-5d49,U+5d4d-5d4f,U+5d51-5d57,U+5d59-5d5a,U+5d5c,U+5d5e-5d68,U+5d6a,U+5d6d-5d6e,U+5d70-5d73,U+5d75-5d80,U+5d83,U+5d85-5d86,U+5d88-5d96,U+5d98,U+5d9a-5d9c,U+5d9e-5d9f,U+5da1-5da6,U+5da8-5db3,U+5db5-5db6,U+5db9,U+5dbb,U+5dbe-5dc4,U+5dc6-5dc7}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(133.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+5b3c-5b3f,U+5b41-5b42,U+5b44-5b4b,U+5b4d-5b4f,U+5b52,U+5b56,U+5b5e,U+5b60-5b61,U+5b67-5b68,U+5b6d-5b6f,U+5b72,U+5b74,U+5b77,U+5b79,U+5b7b-5b7c,U+5b7e,U+5b82,U+5b86,U+5b8a,U+5b8d-5b8e,U+5b90-5b92,U+5b94,U+5b96,U+5b9f,U+5ba7-5ba9,U+5bac-5bad,U+5baf,U+5bb1-5bb2,U+5bb7,U+5bba-5bbc,U+5bc0-5bc1,U+5bc3,U+5bc8-5bcb,U+5bcd-5bcf,U+5bd1,U+5bd4-5bdc,U+5be0,U+5be3,U+5bea,U+5bed,U+5bef,U+5bf1-5bf4,U+5bf7,U+5bfd-5bfe,U+5c00,U+5c02-5c03,U+5c05,U+5c0c,U+5c10,U+5c12-5c13,U+5c17,U+5c19,U+5c1b,U+5c1e-5c21,U+5c23,U+5c26,U+5c28-5c2b,U+5c2d-5c30,U+5c32-5c33,U+5c35-5c36,U+5c43-5c44,U+5c47,U+5c4c,U+5c52-5c54,U+5c56-5c58,U+5c5a,U+5c5d,U+5c5f,U+5c67,U+5c69-5c6b,U+5c6d,U+5c70,U+5c72-5c78,U+5c7b-5c7e,U+5c80,U+5c83-5c87,U+5c89-5c8b,U+5c8e-5c8f,U+5c92-5c93,U+5c95,U+5c9d-5ca0,U+5ca4-5ca8,U+5caa,U+5cae-5cb0,U+5cb2,U+5cb4,U+5cb6,U+5cb9-5cbc,U+5cbe,U+5cc0,U+5cc2-5cc3,U+5cc5-5cca,U+5ccc-5cd1,U+5cd3-5cd8,U+5cda-5ce0}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(132.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+5a70-5a73,U+5a78-5a79,U+5a7b-5a7e,U+5a80-5a91,U+5a93-5a99,U+5a9c-5aa6,U+5aa8-5aa9,U+5aab-5ab1,U+5ab4,U+5ab6-5ab7,U+5ab9-5abb,U+5abf-5ac0,U+5ac3-5ac8,U+5aca,U+5acd-5ad1,U+5ad3,U+5ad5,U+5ad9-5adb,U+5add-5adf,U+5ae2,U+5ae4-5ae5,U+5ae7-5ae8,U+5aea,U+5aec-5af0,U+5af2-5af4,U+5af6-5af9,U+5afb-5aff,U+5b01-5b07,U+5b0a,U+5b0d-5b15,U+5b18,U+5b1a-5b20,U+5b22-5b23,U+5b25-5b29,U+5b2b-5b2f,U+5b31,U+5b33,U+5b35-5b36,U+5b39-5b3b}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(131.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+590e,U+5910-5913,U+5917-5918,U+591b,U+591d-591e,U+5921,U+5923,U+5926,U+5928,U+592c,U+5930,U+5932-5933,U+5935-5936,U+593b,U+593d,U+593f-5940,U+5943,U+5945-5946,U+594a,U+594c-594d,U+5952-5953,U+5959,U+595b-595f,U+5961,U+5963-5964,U+5966,U+5968,U+596b-596d,U+596f-5972,U+5975,U+5977,U+597a-597b,U+597e-5980,U+5985,U+5989,U+598b-598c,U+598e-5991,U+5994-5995,U+5998,U+599a-599c,U+599f-59a2,U+59a6-59a7,U+59ac-59ad,U+59b0-59b1,U+59b4-59b8,U+59ba,U+59bc-59bd,U+59bf-59c5,U+59c7-59c9,U+59cc,U+59ce-59cf,U+59d5-59d6,U+59d9,U+59db,U+59de-59e2,U+59e4,U+59e7,U+59e9-59eb,U+59ed-59f8,U+59fa,U+59fc-59fe,U+5a00,U+5a02,U+5a0a-5a0b,U+5a0d-5a10,U+5a12,U+5a14-5a17,U+5a19-5a1a,U+5a1d-5a1e,U+5a21-5a22,U+5a24,U+5a26-5a28,U+5a2a-5a30,U+5a33,U+5a35,U+5a37-5a3b,U+5a3d-5a3f,U+5a42-5a45,U+5a47-5a48,U+5a4b-5a54,U+5a56-5a59,U+5a5b-5a61,U+5a63-5a65,U+5a68-5a69,U+5a6b-5a6c,U+5a6e-5a6f}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(130.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+581c,U+581f,U+5822-5823,U+5825-5829,U+582b-582e,U+5832-5833,U+5836-5843,U+5845-5849,U+584e,U+5850,U+5853,U+5855-5857,U+5859,U+585b-585d,U+585f-5861,U+5863-5864,U+5866-586a,U+586d-5874,U+5876-5878,U+587a-587d,U+587f,U+5882,U+5884,U+5886-5888,U+588b-5891,U+5894-5898,U+589b,U+589d,U+58a0-58a7,U+58aa-58ad,U+58af-58b2,U+58b4-58bb,U+58bd,U+58bf-58c0,U+58c2-58c4,U+58c6,U+58c8-58cd,U+58cf-58d0,U+58d2,U+58d4,U+58d6-58d7,U+58db-58dd,U+58e1,U+58e3,U+58e5-58e8,U+58ea,U+58ed,U+58f1-58f2,U+58f4-58f5,U+58f7-58f8,U+58fb-58fc,U+58fe-5901,U+5903,U+5905-5906,U+5908-590c}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(129.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+56ac-56ae,U+56b0-56b2,U+56b5,U+56b8-56bb,U+56bd-56bf,U+56c3-56c4,U+56c6-56c7,U+56c9,U+56cb-56d0,U+56d2-56d3,U+56d5-56d6,U+56d8-56d9,U+56dc,U+56e3,U+56e5-56e9,U+56ec,U+56ee-56ef,U+56f2-56f3,U+56f6-56f8,U+56fb-56fc,U+5700-5702,U+5705,U+570c,U+570e,U+5710-5711,U+5714-5715,U+5717,U+5719-571b,U+571d-571e,U+5720-5722,U+5724-5727,U+572b,U+5731-5732,U+5734-5738,U+573c-573d,U+573f,U+5741,U+5743-5746,U+5748-5749,U+574b,U+5752-5756,U+5758-5759,U+5762-5763,U+5765,U+5767,U+576c,U+576e,U+5771-5772,U+5774-5775,U+5778-577a,U+577d-5781,U+5787-578a,U+578d-5791,U+5794-579a,U+579d-579f,U+57a5,U+57a8,U+57aa,U+57ac,U+57af-57b1,U+57b3,U+57b6-57b7,U+57b9-57c1,U+57c4-57ca,U+57cc-57cd,U+57d0-57d1,U+57d3,U+57d6-57d7,U+57db-57dc,U+57de,U+57e2-57e3,U+57e5-57ec,U+57ee,U+57f0-57f3,U+57f5-57f6,U+57fb-57fc,U+57fe-57ff,U+5801,U+5803-5804,U+5808-5809,U+580c,U+580e-5810,U+5812-5814,U+5817-5818,U+581a-581b}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(128.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+5568-5569,U+556b,U+556f-5574,U+5579-557a,U+557d,U+557f,U+5585,U+558c-558e,U+5590,U+5592-5593,U+5595-5597,U+559b,U+55a0-55a6,U+55a8-55a9,U+55ad,U+55af-55b0,U+55b4,U+55b6,U+55b8,U+55ba,U+55bc,U+55bf-55c3,U+55c8,U+55ca-55cb,U+55cf-55d0,U+55d5,U+55d7-55d9,U+55db,U+55de,U+55e0,U+55e2,U+55e7,U+55ed-55ee,U+55f0-55f1,U+55f4,U+55f8-55fc,U+55ff,U+5602-5605,U+5607,U+560a-560b,U+5610-5613,U+5615,U+5619-561a,U+561d,U+5620-5622,U+5625-5626,U+5628-562b,U+5633,U+5637,U+563a,U+563c-563e,U+5640-5644,U+5646-564b,U+564f-5652,U+5655-5656,U+565a-565b,U+565e-565f,U+5661,U+5663,U+5667,U+566d-566e,U+5670,U+5673,U+5675,U+5677,U+5679-567a,U+567d-567f,U+5681-5684,U+5688-568b,U+568d,U+5690-5692,U+5696-56a2,U+56a4,U+56a7,U+56a9-56ab}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(127.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+531f,U+5322,U+5324-5325,U+5327-5329,U+532b-532c,U+5330,U+5332-5338,U+533c-533d,U+5342,U+5344,U+5346,U+534b-534d,U+5350,U+5358-5359,U+535b,U+535d,U+5365,U+5368,U+536a,U+536c-536d,U+5372,U+5376,U+537c,U+537e,U+5380-5381,U+5383,U+5387-5388,U+538a,U+538e-5394,U+5396-5397,U+539b-539c,U+539e,U+53a0-53a1,U+53a4,U+53a7,U+53aa-53ac,U+53af-53b1,U+53b3,U+53b5,U+53b7-53ba,U+53bc-53be,U+53c0,U+53c5-53c7,U+53ce-53d0,U+53d2-53d3,U+53d5,U+53da,U+53dc-53de,U+53e1,U+53e7,U+53f4,U+53fa,U+53fe-5400,U+5402,U+5405,U+5407,U+540b,U+5414,U+5418-541a,U+541c,U+5422,U+5424-5425,U+542a,U+5430,U+5437,U+543a,U+543d,U+543f,U+5441,U+5444-5445,U+5447,U+5449,U+544c-544f,U+545a,U+545d-5461,U+5463,U+5465,U+5467,U+5469-5470,U+5474,U+5479-547a,U+547e-547f,U+5481,U+5483,U+5485,U+5487-548a,U+548d,U+5491,U+5493,U+5497-5498,U+549c,U+549e-54a2,U+54a5,U+54ae,U+54b0,U+54b2,U+54b5-54b7,U+54b9-54ba,U+54be,U+54c3,U+54c5,U+54ca-54cb,U+54d6,U+54d8,U+54db,U+54e0,U+54e3-54e4,U+54eb-54ec,U+54ef-54f1,U+54f4-54f9,U+54fb,U+54fe,U+5500,U+5502-5503,U+5505,U+5508,U+550a-550e,U+5512-5513,U+5516-5519,U+551c-551f,U+5521,U+5525-5526,U+5528-5529,U+552b,U+552d,U+5532,U+5534-5536,U+5539-553b,U+553d,U+5540,U+5542,U+5545,U+5547-5548,U+554b-554e,U+5551-5552,U+5554,U+5557-555b,U+555d,U+555f-5560,U+5562-5563}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(126.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+5186-5187,U+518b,U+518e-5190,U+5193-5194,U+5198,U+519a,U+519d-519f,U+51a1,U+51a3,U+51a6-51a9,U+51ad-51ae,U+51b4,U+51b8-51ba,U+51be-51bf,U+51c1-51c3,U+51c5,U+51c8,U+51ca,U+51ce,U+51d0,U+51d2-51da,U+51de-51df,U+51e2-51e3,U+51e5-51ea,U+51ec,U+51ee,U+51f2,U+51f4,U+51f7,U+51fe,U+5204-5205,U+5209,U+520b-520c,U+520f-5210,U+5213-5215,U+521c,U+521e-521f,U+5221-5223,U+5226-5227,U+522c,U+522f,U+5231-5232,U+5234-5235,U+523c,U+523e,U+5245-5246,U+5248-5249,U+524f,U+5252-5253,U+5255,U+5257-525a,U+525f-5260,U+5262-5264,U+5266,U+5268,U+526b-526d,U+5271,U+5273,U+5276-527c,U+527e,U+5280,U+5285-5286,U+528b,U+528e-528f,U+5292,U+5294-529a,U+529c,U+52a4-52a7,U+52ae-52b0,U+52b4-52bd,U+52c0,U+52c2,U+52c4-52c6,U+52c8,U+52ca,U+52cc-52cf,U+52d1,U+52d3-52d4,U+52d7,U+52da-52dc,U+52e0-52e1,U+52e3,U+52e5-52ef,U+52f2,U+52f4,U+52f6-52f7,U+52fc-52fd,U+5301-5304,U+5307,U+5309-530c,U+530e,U+5311-5314,U+5318,U+531b-531c,U+531e,U+32f99,U+32f9d,U+33069,U+3312e,U+331eb,U+3321b,U+332e9,U+332ed-332ee,U+332f3,U+33398,U+33400,U+3340a}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(125.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+5072-5073,U+5079-507a,U+507c-507d,U+5081-5084,U+5086-5087,U+5089-508c,U+508e-5090,U+5092-5095,U+5097,U+509a-50a1,U+50a4,U+50a6,U+50aa-50ab,U+50ae,U+50b0-50b1,U+50b6,U+50b8-50b9,U+50bc-50bd,U+50bf-50c1,U+50c3-50c4,U+50c6-50c8,U+50ca-50ce,U+50d0,U+50d2-50d4,U+50d7-50d9,U+50db-50dd,U+50df-50e4,U+50e9-50eb,U+50ef-50f0,U+50f2,U+50f4,U+50f6-50f8,U+50fa,U+50fc-50ff,U+5103,U+5105,U+510a,U+510c,U+510e-510f,U+5111,U+5113,U+5116-511e,U+5120,U+5122-5129,U+512b-5131,U+5133-5136,U+5138-5139,U+513d-513e,U+5142,U+514a,U+514e-5150,U+5153,U+5158-5159,U+515b,U+515d-5161,U+5163-5164,U+5166,U+516f,U+5172,U+517a,U+517e-517f,U+5183-5184,U+324d6,U+324dc,U+32625,U+3263f,U+3277b,U+327f1,U+32800,U+3280d,U+329e4,U+32a14,U+32c39,U+32c3c,U+32db9-32dba,U+32dc7,U+32e30,U+32e8b,U+32f17}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(124.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4f02-4f08,U+4f0b-4f0c,U+4f12-4f14,U+4f16,U+4f1c-4f1d,U+4f21,U+4f23,U+4f28-4f29,U+4f2c-4f2e,U+4f31,U+4f33,U+4f35,U+4f37,U+4f39,U+4f3b,U+4f3e-4f42,U+4f44-4f45,U+4f49-4f4c,U+4f52,U+4f56,U+4f61-4f62,U+4f66,U+4f68,U+4f6a-4f6b,U+4f6d-4f6e,U+4f71-4f72,U+4f75,U+4f77-4f7a,U+4f7d,U+4f80-4f82,U+4f85,U+4f87,U+4f8a,U+4f8c,U+4f8e,U+4f90,U+4f92-4f93,U+4f95,U+4f98-4f9a,U+4f9c,U+4f9e-4f9f,U+4fa1-4fa2,U+4fa4,U+4fab,U+4fad,U+4fb0-4fb4,U+4fb8-4fbe,U+4fc0,U+4fc2,U+4fc6-4fc9,U+4fcb-4fcd,U+4fd2-4fd6,U+4fd9,U+4fdb,U+4fe2,U+4fe4-4fe5,U+4fe7,U+4feb,U+4ff0,U+4ff2,U+4ff4-4ff7,U+4ff9,U+4ffb-4ffd,U+4fff,U+5001-5005,U+5007-5008,U+500a,U+500e,U+5010,U+5013,U+5015,U+5017,U+501b,U+501d-501e,U+5020,U+5022-5024,U+5027,U+502f-5039,U+503b,U+503d,U+503f-5042,U+5044-5046,U+504a-504b,U+504d,U+5050-5054,U+5056-5059,U+505b,U+505d-5064,U+5066-506b,U+506d-5071,U+31677,U+316a6,U+316e5,U+3176b-3176c,U+317db,U+318c9,U+3190f,U+31ac9,U+31b92,U+31b9c,U+31bb8,U+31bc4,U+31bcd,U+31c17,U+31c1b,U+31c2e,U+31c3e,U+31c7f,U+31cea,U+31d1f,U+31d31,U+31e07,U+31e25,U+31e40,U+31e4d,U+31eb0,U+31f00,U+31f11,U+32003,U+32070,U+32084,U+3208d-3208e,U+32117,U+3211a,U+321f4,U+321fd,U+32217,U+32235,U+32239,U+32245,U+322e4,U+3234c,U+3235b,U+3236d,U+3237f,U+323bf,U+323c6,U+32402}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(123.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4de2-4dff,U+4e02,U+4e04-4e06,U+4e0f,U+4e12,U+4e17,U+4e20-4e21,U+4e23,U+4e29,U+4e2e-4e2f,U+4e31,U+4e33,U+4e35,U+4e37,U+4e3c,U+4e40-4e42,U+4e44,U+4e46,U+4e4a,U+4e51,U+4e55,U+4e57,U+4e5a-4e5b,U+4e62-4e65,U+4e67-4e68,U+4e6a-4e6f,U+4e72,U+4e74-4e7d,U+4e7f-4e81,U+4e83-4e85,U+4e87,U+4e8a,U+4e90,U+4e96-4e97,U+4e9c-4e9d,U+4ea3,U+4eaa,U+4eaf-4eb1,U+4eb4,U+4eb6-4eb9,U+4ebc-4ebe,U+4ec8,U+4ecc,U+4ecf-4ed0,U+4ed2,U+4eda-4edc,U+4ee0,U+4ee2,U+4ee6-4ee7,U+4ee9,U+4eed-4eef,U+4ef1,U+4ef4,U+4ef8-4efa,U+4efc,U+4efe,U+4f00,U+30afd-30afe,U+30b04,U+30b0a,U+30b14-30b15,U+30b18,U+30b2a,U+30b38,U+30b43,U+30b4b,U+30b5d,U+30b87,U+30ba4,U+30bf2,U+30bf6,U+30bfc,U+30c1f,U+30c21,U+30c24,U+30c28,U+30c2b-30c2c,U+30c53,U+30c5f,U+30c69,U+30c71-30c72,U+30cbd,U+30cc7,U+30d4b,U+30d55,U+30d5d-30d5f,U+30d63-30d64,U+30d66-30d67,U+30d69,U+30d74,U+30d7c,U+30d8a,U+30d8c,U+30ddf-30de0,U+30de3,U+30de5-30de6,U+30e01,U+30e04,U+30e6c,U+30e70,U+30e72,U+30e77,U+30e79,U+30edd-30ede,U+30f03,U+30f57,U+30f59-30f5a,U+30f5c,U+30f5f,U+30f62,U+30f64,U+30f66,U+30f6a,U+30f74,U+30f7c-30f7d,U+30f82,U+30f91,U+30f9b,U+30fa0,U+30fab,U+3106c,U+31076,U+31090,U+310a8-310aa,U+310b1,U+310ea,U+310f1,U+310fa,U+31148,U+3114b-3114c,U+31151,U+3115b,U+311a5,U+311cf,U+311d1-311d2,U+311dd,U+311e3,U+311eb,U+311ee,U+311f1,U+311f3,U+311f6,U+311fb,U+311fe,U+31203,U+3120c,U+3124d,U+31250,U+31254,U+31270,U+31275,U+3127b-3127c,U+31283,U+31288,U+3128a,U+3128c,U+312ac-312ad,U+312b3,U+312d0,U+3132e,U+31342,U+31357,U+313bc,U+313f1,U+313ff,U+3143f,U+31455,U+3145e,U+3154c,U+31587,U+3158e,U+31592,U+315e9}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(122.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4d70-4de1,U+3067d,U+306d1-306d3,U+306e6,U+306ec,U+306f4,U+30708,U+30729,U+30733,U+30776,U+30787,U+307d8,U+30828,U+30831,U+30842,U+30849,U+30853,U+30858,U+308ca,U+308f2,U+308fb,U+30915,U+3094c,U+3094f,U+30955,U+3095b,U+30969,U+30993,U+3099c,U+309aa-309ab,U+309c9,U+30a16,U+30a1b,U+30a62,U+30a67,U+30aa9,U+30ab1,U+30abf}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(120.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4caa-4d0d,U+30001-30002,U+30004-30006,U+30008-30009,U+30020-30022,U+30053,U+3005c,U+30061,U+3006c,U+30072,U+30078,U+3007c,U+3008e,U+300dd,U+300ee,U+300f7,U+3011d,U+30149-3014a,U+30170,U+30174,U+30179,U+3018a,U+30196,U+301b3,U+301bb,U+301db,U+301e0,U+301e2-301e3,U+301f0,U+30270}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(121.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4d0e-4d6f,U+302c0,U+302d9,U+302db-302dc,U+302de,U+302f7,U+302fb,U+30300,U+30302,U+30335,U+3033b,U+3034e,U+30367-30368,U+30370-30371,U+30396,U+303a0,U+30409,U+30414,U+3043a,U+3043f,U+3044a,U+3044c,U+30450,U+3045d-3045e,U+304bc,U+304ca,U+304cc,U+304d9,U+304e2-304e3,U+304e8,U+304ec-304ed,U+3057a,U+305d1,U+305d6,U+305dc-305dd,U+305e3,U+305f6}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(119.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4c3b-4ca9}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(118.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4bda-4c3a,U+2f804,U+2f80f,U+2f818,U+2f81a,U+2f822,U+2f828,U+2f82c,U+2f833,U+2f83b,U+2f83f,U+2f852,U+2f862,U+2f86d,U+2f873,U+2f877-2f878,U+2f884,U+2f89a-2f89b,U+2f8ac,U+2f8b2,U+2f8b6,U+2f8d2-2f8d3,U+2f8db-2f8dc,U+2f8e1,U+2f8ea,U+2f8ed,U+2f8fc,U+2f903,U+2f90b,U+2f90f,U+2f91a,U+2f920-2f921,U+2f945,U+2f947,U+2f96c,U+2f995,U+2f9d0,U+2f9de-2f9df,U+2f9f4}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(117.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4b5c-4bd9}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(116.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4ade-4b5b,U+2ecf4,U+2ecfc,U+2ed3f,U+2edcc-2edcd,U+2edf5,U+2ee5d}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(115.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4a6b-4add,U+2e8f2-2e8f7,U+2e932,U+2e9f4-2e9f5,U+2ea3b,U+2ea5b,U+2ea5d-2ea5e,U+2eaa5,U+2eac2,U+2eb1b-2eb24,U+2eb65-2eb66,U+2eb68,U+2eb6a,U+2eb70,U+2eb87,U+2ebd9,U+2ebf0,U+2ec35,U+2ec63,U+2ec7b,U+2ec93}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(114.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+49eb-4a6a,U+2e41a,U+2e428,U+2e502,U+2e505,U+2e50a,U+2e51a,U+2e569,U+2e581,U+2e5b1,U+2e5fb,U+2e64a-2e64b,U+2e6ea,U+2e774-2e775,U+2e777-2e77a,U+2e81e}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(113.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+495b-49ea,U+2ddd4,U+2de5c,U+2ded9,U+2defe,U+2e00e,U+2e014,U+2e0b9,U+2e0c4,U+2e18f,U+2e1d8,U+2e261-2e262,U+2e264,U+2e267-2e268,U+2e26a-2e26c,U+2e26f,U+2e278}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(111.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+483a-48da,U+2d25d,U+2d382,U+2d475,U+2d544,U+2d546,U+2d613,U+2d64f,U+2d655,U+2d6a6,U+2d70c,U+2d80d}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(112.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+48db-495a,U+2d8c7,U+2d8e7,U+2d930,U+2da5a,U+2da86,U+2daa4,U+2dc49-2dc4a,U+2dcff,U+2dd08,U+2dd0a}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(110.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+47c2-4839,U+2cd9f-2cda0,U+2cda7-2cda8,U+2cdad-2cdae,U+2cdd5,U+2ce01,U+2ce05,U+2ce08,U+2ce0a,U+2ce18,U+2ce1a,U+2ce22-2ce23,U+2ce26,U+2ce29-2ce2a,U+2ce31,U+2ce7c,U+2ce88,U+2ce93,U+2cea4,U+2cea8,U+2cead,U+2cf65,U+2d026,U+2d075,U+2d079,U+2d0c2,U+2d11b,U+2d139,U+2d208}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(109.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+475f-47c1,U+2c9b0-2c9b1,U+2c9bb,U+2c9c0,U+2ca02,U+2ca0e,U+2ca7d,U+2ca8d,U+2caa9,U+2cb29,U+2cb2b-2cb2e,U+2cb30-2cb32,U+2cb38-2cb3b,U+2cb3f,U+2cb41,U+2cb4a,U+2cb4d-2cb4e,U+2cb5a-2cb5b,U+2cb63-2cb64,U+2cb68-2cb69,U+2cb6c,U+2cb6f,U+2cb72-2cb74,U+2cb76,U+2cb78,U+2cb7c,U+2cba4-2cba6,U+2cbb1,U+2cbb4,U+2cbbf-2cbc0,U+2cbce,U+2cc56,U+2cc5f,U+2cc66,U+2cc6d,U+2ccb1,U+2ccbd,U+2ccc7,U+2ccf3,U+2ccf5-2ccf6,U+2ccfd,U+2ccff,U+2cd02-2cd03,U+2cd0a,U+2cd10,U+2cd68,U+2cd81,U+2cd8b-2cd8d,U+2cd8f-2cd90}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(108.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+46f3-475e,U+2c58b,U+2c591,U+2c598,U+2c59e,U+2c613,U+2c616,U+2c618,U+2c61c-2c61d,U+2c621-2c622,U+2c629,U+2c62b-2c62d,U+2c62f,U+2c635,U+2c642,U+2c646-2c647,U+2c64a-2c64b,U+2c65e,U+2c696,U+2c728,U+2c72c,U+2c72f,U+2c79f,U+2c7c1,U+2c7fd,U+2c805,U+2c816,U+2c842,U+2c88a-2c88b,U+2c8c0,U+2c8d9,U+2c8de,U+2c8e1,U+2c8f3,U+2c907,U+2c90a,U+2c910,U+2c916,U+2c91d,U+2c928,U+2c930,U+2c97a}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(107.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+466e-46f2,U+2c05f,U+2c080-2c081,U+2c089,U+2c09b,U+2c0a9,U+2c0ad,U+2c0c0,U+2c0ca,U+2c0d8,U+2c0eb,U+2c129,U+2c1ae,U+2c1d5,U+2c1d8-2c1d9,U+2c1de,U+2c1f9,U+2c227,U+2c267,U+2c27c,U+2c288,U+2c29c,U+2c2a4,U+2c2b6,U+2c317,U+2c35b,U+2c361,U+2c364,U+2c370,U+2c386,U+2c39e,U+2c3be,U+2c3df,U+2c457,U+2c47d,U+2c488,U+2c494,U+2c497,U+2c4e0,U+2c533,U+2c542}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(105.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4589-45f6,U+2b751,U+2b758,U+2b75b,U+2b777,U+2b77a-2b77b,U+2b789,U+2b78e,U+2b797,U+2b79a-2b79b,U+2b79d,U+2b7a9,U+2b7bc-2b7bd,U+2b7c2,U+2b7c5,U+2b7d8,U+2b7e6-2b7e7,U+2b7f7,U+2b7f9,U+2b7fc,U+2b7ff,U+2b803,U+2b806,U+2b80a,U+2b81a-2b81c,U+2b823-2b824,U+2b826,U+2b892,U+2b899,U+2b8b8,U+2b8c6,U+2b8ca,U+2b92d,U+2b94e,U+2b95e,U+2b9b3,U+2b9c3,U+2b9c7,U+2b9ef,U+2b9ff,U+2ba4f,U+2ba51,U+2ba5b,U+2ba65,U+2ba6b,U+2ba74,U+2ba81,U+2ba88,U+2ba98,U+2bac7,U+2bae6,U+2bafe,U+2bb37,U+2bb5f,U+2bb62,U+2bb6a,U+2bb72,U+2bb7c,U+2bb83,U+2bb85}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(106.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+45f7-466d,U+2bbdc,U+2bc02,U+2bc06,U+2bc0d,U+2bc1b,U+2bc21,U+2bc2a,U+2bc30,U+2bca6,U+2bca8,U+2bcb7,U+2bd52,U+2bd58,U+2bd71,U+2bd77,U+2bd7a,U+2bd7c,U+2bd87,U+2bda7,U+2bdac,U+2bdc0,U+2bdc9,U+2bdf7,U+2bdf9,U+2be29,U+2be6f,U+2be75,U+2bf17,U+2bf1d,U+2bf23,U+2bf4b,U+2bf67,U+2c029-2c02a}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(104.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4539-4588,U+2b461,U+2b4a2,U+2b4e7,U+2b4e9,U+2b4ef,U+2b4f1,U+2b4f4,U+2b4f6,U+2b4f9,U+2b502,U+2b507,U+2b50d-2b50e,U+2b52d,U+2b536,U+2b583,U+2b592,U+2b594,U+2b598,U+2b5ae-2b5af,U+2b5b3,U+2b5b9,U+2b5e0,U+2b5e6-2b5e7,U+2b5e9,U+2b5eb,U+2b5ee,U+2b5f0,U+2b5f4,U+2b61c-2b61d,U+2b624-2b628,U+2b62a,U+2b62c-2b62d,U+2b688-2b689,U+2b690,U+2b692,U+2b694-2b696,U+2b6a5,U+2b6aa,U+2b6ad,U+2b6da,U+2b6de-2b6df,U+2b6e3,U+2b6e9,U+2b6ed,U+2b6f3,U+2b6f6,U+2b6f8,U+2b728-2b729,U+2b72c,U+2b730,U+2b735-2b73d,U+2b746,U+2b74f}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(101.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+439a-441d,U+2a41e,U+2a434,U+2a46e,U+2a47e,U+2a49f-2a4a1,U+2a4b9,U+2a4d0,U+2a4db,U+2a4ec,U+2a4f9,U+2a4fd,U+2a4ff,U+2a54c-2a54d,U+2a56f,U+2a581,U+2a590,U+2a599,U+2a5a2,U+2a5a8,U+2a5b7,U+2a5cb,U+2a600,U+2a612,U+2a61a,U+2a64a,U+2a668,U+2a695,U+2a6a5,U+2a6ae,U+2a6b0,U+2a6d7-2a6df,U+2a703,U+2a736,U+2a79d,U+2a7dd,U+2a7e7,U+2a833,U+2a838,U+2a83d,U+2a848,U+2a8ae,U+2a8bc,U+2a8c8,U+2a8dd,U+2a8fb,U+2a917}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(103.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+44ae-4538,U+2aed0,U+2aeda,U+2af47,U+2af94,U+2afa2,U+2afa6,U+2afd6,U+2b042,U+2b061,U+2b088,U+2b0d1,U+2b11b,U+2b11f,U+2b124-2b125,U+2b127-2b128,U+2b12b,U+2b136-2b138,U+2b18f,U+2b1e6,U+2b1ed,U+2b209,U+2b21f,U+2b230,U+2b241,U+2b244,U+2b2a5,U+2b2bb,U+2b2cc,U+2b300,U+2b328,U+2b359-2b35a,U+2b35f,U+2b362-2b363,U+2b36f,U+2b372,U+2b37b,U+2b37d,U+2b393,U+2b3ab-2b3ac,U+2b3cb,U+2b3d0,U+2b404,U+2b410-2b411,U+2b413,U+2b416,U+2b418}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(102.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+441e-44ad,U+2a970,U+2a9e6,U+2a9f7,U+2aa07,U+2aa0a,U+2aa17,U+2aa27,U+2aa30,U+2aa36,U+2aa58,U+2aac6,U+2ab62,U+2ab75,U+2ab8b,U+2ab96,U+2abb6,U+2abc8,U+2abe1,U+2ac76-2ac77,U+2ac94,U+2adfd,U+2ae5a}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(99.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+42c9-4328,U+29bf0,U+29c1e,U+29c24,U+29ce4,U+29d06,U+29d3e,U+29d40,U+29d4b,U+29d56,U+29d5a,U+29d60,U+29d71,U+29d88,U+29d98,U+29da5,U+29dad,U+29daf,U+29dc0,U+29dd3,U+29dd5,U+29dda,U+29de9-29dea,U+29df6,U+29e00,U+29e04,U+29e0d-29e0e,U+29e19,U+29e36,U+29e3d,U+29e42,U+29e44,U+29e47,U+29e4e,U+29e7e,U+29eac-29ead,U+29edf,U+29ef8,U+29f08,U+29f27,U+29f30,U+29f48,U+29f4f,U+29f70,U+29f73,U+29f7c,U+29f7e,U+29f83,U+29f87,U+29f8c,U+29f97}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(100.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4329-4399,U+29f9a,U+29fbf,U+29fe3,U+29fe7,U+29ffa,U+2a001,U+2a00b,U+2a018,U+2a01a,U+2a049,U+2a04e-2a050,U+2a05c,U+2a05f,U+2a06a,U+2a084,U+2a086,U+2a0b4,U+2a0ba,U+2a0bf,U+2a0c8,U+2a0cf,U+2a0e7-2a0e8,U+2a106,U+2a133,U+2a136,U+2a14f,U+2a183,U+2a1a9,U+2a1bb,U+2a1c4,U+2a1c9,U+2a1d8,U+2a1e1,U+2a1f0-2a1f1,U+2a1f7,U+2a202,U+2a213,U+2a248,U+2a28d,U+2a291,U+2a2ee-2a2ef,U+2a318,U+2a32d,U+2a32f,U+2a333,U+2a351,U+2a353,U+2a35b,U+2a360,U+2a363,U+2a374,U+2a38a,U+2a3ad,U+2a3bd-2a3be}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(98.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4258-42c8,U+29781,U+297b0,U+2980c-2980d,U+29810,U+2981c,U+29869,U+2987a,U+298b0,U+298b2,U+298b7,U+298bc,U+298ca,U+298da,U+298e1,U+298f1,U+29944,U+29947,U+29949,U+299b1,U+299ba,U+299c6,U+299d0,U+29a02,U+29a1c,U+29a2c,U+29a33,U+29a38,U+29a8b,U+29af5,U+29af8,U+29afb,U+29b1e,U+29b4f,U+29b6a,U+29b9c,U+29bcb}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(97.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+41de-4257,U+29307-29308,U+2930a,U+2933d,U+2935c,U+2937f,U+29396,U+293f6-293f7,U+29405,U+29428,U+29454,U+2945d,U+2947e,U+294ba,U+294d0,U+294de,U+294e3,U+294e5,U+29508,U+29544,U+29573,U+295d7,U+29601,U+2961a,U+2963b,U+2967f,U+2969f,U+296a8,U+296c3,U+296de,U+296e9,U+296f2,U+296fd,U+29704,U+29707,U+29730,U+29736,U+2974e,U+29751,U+2976b}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(95.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+40da-415b,U+28891,U+288a2,U+288c8,U+288e7-288e8,U+28942,U+28948,U+28972,U+28987,U+289a1,U+289c0,U+289f1,U+28a0f,U+28a50,U+28b46,U+28b49,U+28b4e,U+28b5b,U+28c3b,U+28c3e,U+28c44,U+28c47,U+28c4d-28c4f,U+28c51,U+28c53-28c54,U+28c75,U+28c97,U+28ca0,U+28cca,U+28ccd,U+28cd2,U+28cdd,U+28d46,U+28d66,U+28d80,U+28d88,U+28d92}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(96.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+415c-41dd,U+28d99,U+28db2,U+28dc8,U+28df2,U+28dfa-28dfb,U+28e0f,U+28e14,U+28e17,U+28e1d,U+28e30,U+28e39,U+28e5d,U+28e93,U+28e99,U+28ead,U+28ee7,U+28ef6,U+28efb,U+28f4d,U+28f66,U+28f79,U+28f7b,U+28fcb,U+28fd8,U+2900e,U+290ce,U+290d9,U+290ec-290ed,U+290f1,U+29121,U+29166,U+2918a,U+29193,U+291d0,U+291d5,U+291eb,U+291ef,U+291f5,U+29259,U+2925c,U+29293,U+29299-2929a}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(94.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+405b-40d9,U+283a5,U+283aa,U+283b9,U+283d2,U+283e9,U+283f9,U+28408,U+28420-28421,U+28468,U+2846e,U+28473,U+28485,U+28487,U+28492,U+284ab,U+284c6,U+284c8,U+284da,U+284dc,U+284e6,U+28523,U+2853f,U+28595,U+2860c,U+2863b,U+2864a,U+28668,U+2866c,U+28676,U+28678,U+2867b,U+2868d,U+28693,U+28695,U+28697,U+286b2,U+286cb,U+286cd,U+286eb-286ed,U+286f3,U+28712,U+28714,U+2874d,U+28756,U+28778,U+287aa,U+287c9,U+287d6,U+287e0,U+287f9,U+287fb,U+28811,U+2886d}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(93.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+3fd4-405a,U+27e5e,U+27eaf,U+27ed9,U+27ede,U+27ef4,U+27f28,U+27f34,U+27f7b-27f7c,U+27fb1,U+27fb7,U+27fc1,U+27fd2,U+27fec,U+27ff3-27ff4,U+27ff9,U+28001,U+28042,U+2804f,U+28057,U+2805d,U+280bd-280bf,U+280c5,U+280de-280df,U+280e9,U+280f0,U+2810c,U+2812e,U+2814d,U+28154,U+2815d,U+2816c,U+2818d,U+281aa,U+281e4,U+28201,U+28207,U+28210,U+28256,U+28263,U+282b0,U+282b8,U+282bb,U+282cc-282cd,U+282e2,U+282f0,U+28308,U+28325,U+2834f,U+2837d,U+2838a,U+2838d}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(92.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+3f4c-3fd3,U+2790f,U+27916-27917,U+2793e,U+27944,U+27963,U+2797a,U+279a0,U+279a7,U+27a33,U+27a3e-27a3f,U+27a63,U+27a76,U+27ab0,U+27add,U+27af4,U+27b1e,U+27b28,U+27b2a,U+27b2f,U+27b48,U+27b53,U+27b88,U+27b99,U+27baa-27bab,U+27bc6,U+27bcb,U+27bf7,U+27c0e,U+27c19,U+27c28,U+27c35,U+27c49,U+27c53,U+27c82,U+27cb1,U+27cdc,U+27cdf,U+27cfd,U+27d03,U+27d06,U+27d10,U+27d2a,U+27d48,U+27d65,U+27d8a,U+27da0,U+27dba,U+27e18}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(91.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+3ed2-3f4b,U+2742f,U+27431,U+27445,U+27452,U+27486,U+27495,U+274bd,U+274fd,U+274ff,U+27548,U+2754d,U+2755b,U+2759a,U+275e9,U+275f9,U+27607-27608,U+2763d,U+27665,U+276d7,U+276fe,U+27700,U+27741,U+27743,U+27749,U+2774b,U+2774e,U+2775d,U+27764,U+2776c,U+27794,U+277a4,U+277c4,U+277c9,U+277cc,U+277f0,U+278b2,U+278d2,U+278e6,U+278ea}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(90.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+3e49-3ed1,U+26f09,U+26f4a,U+26f4f,U+26f8f,U+26f9b,U+26fae,U+26fb6,U+26fc9,U+26fda,U+2707e,U+27087,U+270d2,U+270fd,U+2711b-2711c,U+27138-27139,U+27141,U+27187,U+2718c,U+271e0,U+271fd,U+27222,U+27246,U+27248,U+27253,U+2725f,U+27267,U+2726a,U+2726e,U+2727e,U+27285,U+27288,U+27292,U+27294-27295,U+272b7,U+272d8,U+272e0-272e1,U+272e5,U+272f1,U+27304,U+2730f,U+27311,U+2733d,U+27355,U+27359,U+27367,U+2736a,U+27371-27372,U+27398,U+273a4-273a5,U+273be,U+273da,U+273e1,U+273fe,U+27410,U+27415,U+2741f}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(89.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+3dc7-3e48,U+269c8,U+269dd,U+269df,U+269e1,U+269f2,U+269f4,U+269fa,U+26a29,U+26a2d,U+26a34,U+26a3c,U+26a58,U+26a64,U+26a77,U+26a7a,U+26a87,U+26a99,U+26aad,U+26abd,U+26ac3,U+26af8,U+26b01,U+26b28,U+26b38,U+26b3a,U+26b3c,U+26b4c,U+26b5c,U+26bb4,U+26bbc,U+26c0f,U+26c21,U+26c47,U+26c4c,U+26c52,U+26c54,U+26cc6,U+26ccb,U+26cdc-26cdd,U+26cef,U+26d4f,U+26d67,U+26d78,U+26d7e,U+26d87,U+26d9f,U+26e05,U+26e08,U+26e87,U+26e96,U+26ed5,U+26ed8}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(87.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+3cbe-3d50,U+25f86,U+25f9d,U+25fba,U+25fc9-25fca,U+25fdd,U+25fee,U+26016,U+26021,U+26049,U+26050,U+26085,U+2608c-2608d,U+260b3,U+260c2,U+260c4,U+260c7,U+260cf,U+260e9,U+2613c,U+2614c,U+261d9,U+261e7,U+26203,U+26216,U+26220-26222,U+26246,U+2624e,U+26258,U+2626a-2626b,U+26270-26271,U+26279,U+26291,U+26293-26294,U+2629a,U+2629e,U+262b1,U+262c6,U+26309-2630a,U+2633e,U+2634b-2634c,U+26351,U+26355,U+26369,U+26393,U+263b9,U+263c6,U+263f4,U+26407,U+2640a,U+2640c,U+26447,U+26476,U+26483,U+2648d,U+26491,U+264b9,U+264d6,U+264fe,U+26529}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(88.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+3d51-3dc6,U+26548,U+26553,U+265d2,U+265f3,U+26614,U+26634,U+2664d,U+2666b,U+26676-26678,U+26690,U+2669f,U+266b0,U+266dd,U+266e8,U+26706,U+26760,U+26762,U+26769,U+2677c,U+26782,U+267a4,U+267a6,U+267cc,U+267d8,U+267ea,U+267ee,U+26806,U+2683f,U+26871,U+2688a,U+268c0,U+268dd-268de,U+26900,U+2690e,U+26919,U+26936,U+26951,U+26954,U+2696f,U+26999}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(86.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+3c3f-3cbd,U+25ab0,U+25ad7,U+25af1,U+25afd,U+25b1e,U+25b20,U+25b2f,U+25b98,U+25b9c,U+25bbe,U+25bd1,U+25bdb,U+25bdf,U+25be4-25be6,U+25be8,U+25c14,U+25c1f,U+25c2b-25c2d,U+25c67,U+25c7c,U+25c7f,U+25c8a,U+25c91,U+25ca4,U+25cbb,U+25cc7,U+25cce,U+25cd4,U+25ce0,U+25d0a,U+25d21,U+25d27,U+25d99,U+25dbd,U+25dd1,U+25dda,U+25de4,U+25de8,U+25e46,U+25e49,U+25e77,U+25e86,U+25ec5,U+25ed7,U+25ee6,U+25ee9,U+25ef5,U+25eff,U+25f1a,U+25f24,U+25f36}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(85.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+3bc8-3c3e,U+255d9,U+255ec,U+255fd,U+2560c,U+2561e,U+25629-2562a,U+2562e,U+2563d,U+25651,U+2567f,U+256c4,U+256f1,U+25712,U+25714,U+2574c,U+25762,U+25767,U+257a5,U+257c7,U+2583b,U+25871,U+25874,U+258a7,U+258b6,U+258db,U+258ec,U+2591a,U+2592e,U+25977,U+25997,U+259d1,U+259f2,U+25a0d-25a0e,U+25a10}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(84.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+3b3b-3bc7,U+25050,U+25055,U+2505e,U+25061-25062,U+2506b,U+25109,U+25128,U+2512b,U+25134,U+25148,U+25160-25161,U+25167,U+2517b,U+2517e,U+2519e,U+251a7,U+251db,U+251e2,U+25241-25242,U+25248-25249,U+2524c,U+25250,U+25273,U+2527b,U+2527f,U+25291,U+252dd,U+2531a,U+25320,U+25349,U+2538a,U+253dd,U+253ea,U+2541e,U+25435,U+2543b,U+2546a,U+2546e,U+254cd,U+254fc,U+25500,U+25532,U+2554d-2554e,U+25562,U+25566,U+25584,U+2559a,U+255a8,U+255aa}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(83.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+3aac-3b3a,U+24ac9,U+24af6,U+24b01,U+24b0f,U+24b1b,U+24b26,U+24b2a,U+24b5b,U+24b62,U+24b95,U+24ba6,U+24bd5,U+24be5,U+24c00,U+24c09,U+24c1a,U+24c1c,U+24c48,U+24c4a,U+24c59,U+24c5d,U+24c8d,U+24cb0,U+24cb6,U+24cc8,U+24d13-24d14,U+24d21,U+24d25,U+24d2f,U+24d50,U+24d52,U+24d78,U+24d80,U+24d83,U+24db8,U+24dcd,U+24dea,U+24e01,U+24e2a,U+24e31,U+24e37,U+24e85,U+24ea5,U+24ea7,U+24eaa,U+24eba,U+24eca,U+24ef2,U+24f42,U+24f49,U+24f93,U+24f95,U+24fa9,U+24fd0,U+2500f}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(81.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+399f-3a38,U+2406f,U+240d2,U+240eb-240ec,U+2410e,U+24136-24137,U+24182,U+2418a,U+241a2,U+241ac,U+241b5,U+241fe,U+2420e,U+24226,U+24259,U+242b6,U+242b9,U+242bb,U+242be-242bf,U+242ee,U+24307,U+2430d,U+24319,U+24350,U+24352,U+2435e,U+24364,U+243d0,U+243f0,U+243f6,U+24419,U+24423,U+24430,U+24436,U+2447a,U+2447e,U+2448a,U+244d3,U+244ef,U+24514,U+24595,U+24605,U+24626-24627,U+2462f}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(82.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+3a39-3aab,U+24656,U+2468e,U+246a9,U+246cb,U+246ce,U+246d1,U+246d8,U+246db,U+246df,U+246ed,U+24716,U+24722-24723,U+24737,U+2473b,U+2474c,U+24759,U+24771,U+2477b,U+2477d,U+2479a,U+2479e,U+247a4,U+247b6,U+247c7,U+247cc,U+247ce,U+247d1,U+247e4-247e5,U+247e7,U+247ef,U+24822,U+2482b,U+24873,U+2488a,U+248b9-248ba,U+248ce,U+248e5,U+248e9,U+24904,U+24934,U+24950,U+2496d,U+249db,U+249df,U+24a01,U+24a0f,U+24a12,U+24a6a,U+24a7d,U+24a8c,U+24aa4}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(80.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+390f-399e,U+23a95,U+23a98,U+23aa0,U+23b02,U+23b1b,U+23b20,U+23b36,U+23b3c,U+23b61,U+23b72,U+23b88,U+23bab,U+23bc8,U+23bcd,U+23bda,U+23be9,U+23bfe,U+23c07,U+23c0b,U+23c28,U+23c5d,U+23c76,U+23c7c,U+23c7e,U+23c97-23c98,U+23ca9,U+23cb5,U+23cb7,U+23cbe,U+23ce6,U+23cfe,U+23d13,U+23d18,U+23d66,U+23d7a,U+23d7d,U+23d82,U+23d88,U+23d8f-23d90,U+23d9e,U+23dfd,U+23e0e,U+23e23-23e24,U+23e70,U+23e8c,U+23eb0,U+23ecf-23ed0,U+23ef5,U+23ef8,U+23f0e,U+23f74,U+23f7d,U+24030}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(79.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+3869-390e,U+23439,U+2343f,U+234c1,U+23519,U+2353a,U+235be,U+235c4,U+235cb,U+235f6,U+23617,U+2361b,U+2363a-2363b,U+23657,U+2365c,U+23683,U+23698,U+236ba,U+236d2,U+236ee,U+23727,U+2372c,U+2373f,U+23749,U+2374b,U+2375b,U+23763,U+237c4,U+237f4,U+2385b,U+23936,U+23942,U+239d7,U+23a19,U+23a3c,U+23a81,U+23a8a-23a8b,U+23a8f}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(78.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+37dd-3868,U+22eb3,U+22f0c,U+22f1b,U+22f38,U+22f7e,U+22f96,U+22fba,U+22fdb,U+23066,U+23073-23074,U+23080,U+2308f-23090,U+230da,U+23119,U+23134,U+23138,U+23143,U+2319f,U+231c7,U+23206,U+23236,U+2329f,U+232ba,U+232c9,U+232de,U+23350,U+23385-23386,U+23397,U+2339c,U+233b2,U+233b4,U+233b7,U+233cc,U+233de,U+233e2,U+233fe,U+2340a,U+23415}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(77.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+373e-37dc,U+22871,U+2289e,U+228bd,U+22927,U+22931-22932,U+2294c,U+22958,U+2295e,U+22960,U+2298f,U+2299f,U+229b6,U+229f5,U+22a0b,U+22a41,U+22a73,U+22a83,U+22a87,U+22a8f,U+22a98,U+22ab1,U+22acf,U+22ad3,U+22ad5,U+22ae6,U+22aec,U+22b02,U+22b38,U+22b43,U+22ba5,U+22bca,U+22bed,U+22bf2,U+22bf9-22bfa,U+22bfe,U+22c49,U+22c4b,U+22c51,U+22c55,U+22c62-22c64,U+22cab,U+22cb4,U+22cb8,U+22cc0,U+22cc2,U+22cc6,U+22ccd,U+22cda,U+22cdf,U+22cea,U+22d08,U+22d32-22d33,U+22d4c,U+22d5e,U+22d67,U+22d80,U+22d89,U+22d8d,U+22d92,U+22da1,U+22dec,U+22e33,U+22e5d,U+22e72,U+22e83-22e84}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(75.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+3626-36b6,U+21d7b,U+21d84,U+21d8b,U+21d90,U+21da6,U+21dad,U+21dd1,U+21de0,U+21de8,U+21deb,U+21df8,U+21e03,U+21e16-21e17,U+21e1e,U+21e23,U+21e47,U+21e6c,U+21e8e,U+21e9f,U+21ea3,U+21eaf,U+21eb1-21eb2,U+21eca,U+21ed5,U+21eed,U+21eef,U+21f0f,U+21f15,U+21f31,U+21f3e-21f3f,U+21f57,U+21f71,U+21f7a,U+21f8b,U+21f9e,U+21fb0,U+21fb2,U+21fbc,U+21fd3,U+21fd6,U+21fe8,U+21ffa,U+21fff,U+22016,U+22049,U+22058,U+220b3,U+220c7,U+22110,U+2213c,U+221a1,U+221c7,U+221cd,U+221f2,U+221f7,U+22208,U+2223b,U+2231a}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(76.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+36b7-373d,U+2231e,U+22342,U+22399,U+2239e,U+223a5,U+223a8,U+22488-22489,U+224b0,U+224bc,U+224c1,U+224c9,U+224cc,U+224dc,U+224e1,U+224ed,U+224f2,U+22504,U+2251b,U+22521,U+22524,U+2256c,U+225a6,U+225a9,U+225b3,U+225bf,U+225d7,U+22609,U+2260d,U+2263f,U+22645,U+22650,U+2265d,U+226c1,U+226f3,U+2272d-2272f,U+22731,U+22736,U+22746,U+22775,U+227b5,U+22835,U+22838}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(74.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+3596-3625,U+217d3,U+217da,U+217e5,U+217ec,U+2180d,U+21824,U+21857,U+21883,U+218ea,U+2192b,U+21946,U+21948,U+21967,U+21976,U+2197c,U+21980,U+21982,U+219bc,U+219f3,U+21a18,U+21a1a,U+21a25,U+21a38,U+21a4b,U+21a61,U+21a7b,U+21acf,U+21b36,U+21b54,U+21b90,U+21bc1-21bc2,U+21c26,U+21c2a,U+21c48,U+21c52,U+21c95,U+21ca2,U+21cac,U+21cbe,U+21cde,U+21d2d,U+21d49,U+21d53,U+21d59-21d5a}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(71.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+337f-3384,U+338a-338c,U+3391-3395,U+3399-339a,U+33a7-33af,U+33b4-33c1,U+33c3,U+33c5-33c7,U+33c9-33ca,U+33ce-33d3,U+33d5-33d6,U+33d9,U+33db-3472,U+20302,U+20316,U+2032f,U+20350,U+203ae,U+203b7,U+203c0,U+203c5,U+2040d,U+2042d,U+20435,U+2043a,U+20469,U+20509,U+2050c,U+2052d,U+2053e-2053f,U+20541-20542,U+20545-20547,U+20584,U+20587,U+205c2,U+205c9,U+205cc,U+205fb,U+20611,U+20627-20628,U+20646,U+2064f,U+20674,U+20676,U+206a4,U+206e1,U+206f1,U+20705,U+2070e,U+20731-20732,U+20734,U+20736,U+2073a,U+2073e,U+20779,U+207a9,U+207ab,U+207ad,U+207b0,U+207cd,U+207fa,U+20803-20804,U+2081d,U+20895,U+208fe,U+20904,U+2090e,U+20929,U+20930,U+20984,U+2099d,U+209aa-209ab,U+209b3,U+209da,U+209e9,U+20a44-20a45,U+20a64,U+20a9a,U+20ab1-20ab2,U+20ae4,U+20b20,U+20b24,U+20b2a,U+20b36,U+20b56,U+20b6f,U+20b9f,U+20bb5-20bb7,U+20bbe-20bbf,U+20bd7-20bd8,U+20be5,U+20bea,U+20c34,U+20c41,U+20c53,U+20c5b,U+20c5e,U+20c78}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(72.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+3473-34e8,U+20c8e-20c8f,U+20c96,U+20cbf,U+20cc1,U+20cc3,U+20ccf-20cd0,U+20cd4-20cd5,U+20ced,U+20cfc,U+20d02,U+20d15,U+20d1f,U+20d2b,U+20d32,U+20d46-20d47,U+20d5d,U+20d71,U+20d7c,U+20d7f,U+20da7,U+20de1,U+20dfa,U+20dff,U+20e01,U+20e0e-20e0f,U+20e5a,U+20e76-20e77,U+20e95-20e96,U+20e98,U+20e9d,U+20ea2,U+20ed7-20ed8,U+20ef3,U+20ef9-20efa,U+20f1f,U+20f22,U+20f2d-20f2e,U+20f3b,U+20f4c,U+20f7e,U+20f90-20f91,U+20f96,U+20fb4,U+20fbc,U+20fd5,U+20fea,U+21014,U+21055,U+2105c,U+2106f,U+21075-21076,U+2107b,U+210a2,U+210ab,U+210bf,U+210c1,U+210c9,U+210e4,U+210f6}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(73.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+34e9-3595,U+21116,U+21123,U+21145,U+21155,U+211a5,U+211cc,U+211d9,U+211fc,U+2123c-2123d,U+21244,U+21251,U+21265,U+2126b,U+21284,U+212ef,U+21334,U+21336,U+2134c,U+2136a,U+21372,U+21375,U+21377,U+2137c,U+2139a,U+213cb,U+21413,U+21428,U+2144d,U+2145e,U+21483-21484,U+214da,U+21523,U+21562,U+215d7,U+215dc,U+215e6,U+21619,U+21681,U+216a6,U+216b1,U+216b4,U+216bd,U+216df,U+216e3,U+216f0,U+21757,U+2176d,U+217c8}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(70.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+3298-32ff,U+332c,U+3358-3370,U+3372-337e,U+1fa60-1fa6d,U+20003,U+2000b,U+2000e,U+20024,U+20027,U+2002a-2002b,U+2003e,U+2005e,U+20063,U+2006d,U+20086-20087,U+20089-2008a,U+20092,U+20094,U+200a2,U+200a4,U+200b0,U+200ca-200cd,U+200d1,U+200d3,U+200db-200dc,U+200e9,U+200f2,U+2010c,U+2010e-2010f,U+20114,U+2011e-20120,U+20122,U+20129,U+20136,U+2013b-2013c,U+20164,U+201a2-201a3,U+201a8-201a9,U+201be,U+201d4,U+201d7,U+201ee,U+20201,U+2020c,U+20235,U+20242,U+20263,U+2026e,U+2028e,U+2029f,U+202ac,U+202c2,U+202c6,U+202e4}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(69.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+31ba-31e5,U+31ef-321e,U+3220-3297,U+1f141-1f1ad,U+1f200-1f202,U+1f210-1f23b,U+1f240-1f248,U+1f250-1f251,U+1f260-1f265,U+1f79c}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(68.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+2f6f-2fd5,U+2ff0-3000,U+3003,U+3005-3007,U+3012-3013,U+3018-302d,U+3030,U+3033-303f,U+3105-312f,U+3131-318e,U+3190-31b9,U+1f100-1f140}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(67.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+2713,U+2717,U+271a,U+273d,U+273f-2740,U+2756,U+275b-2760,U+2772-2773,U+2776-2793,U+27a1,U+27e6-27ef,U+2934-2935,U+29bf,U+29c8-29c9,U+29fa-29fb,U+2a7d-2a7e,U+2acb-2acc,U+2afd,U+2b05-2b07,U+2b1a,U+2b25-2b26,U+2b29,U+2b4e-2b4f,U+2b58,U+2b5a-2b65,U+2b82-2b83,U+2b95,U+2b97,U+2bba,U+2c60-2c7f,U+2e00-2e39,U+2e3c-2e42,U+2e55-2e56,U+2e80-2e99,U+2e9b-2ef3,U+2f00-2f6e,U+1b132,U+1b155,U+1d300-1d356,U+1d360-1d376}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(63.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+ac4b,U+ac4d,U+ac58,U+acaf,U+accc,U+ad35,U+ad47,U+ad89,U+ae46,U+ae60,U+ae69,U+ae84,U+aedc,U+af95,U+b004,U+b028,U+b08f,U+b135,U+b139,U+b182,U+b198,U+b1d0,U+b1dc,U+b1e9,U+b20b,U+b260,U+b268,U+b29a,U+b2a1,U+b2fa,U+b35b,U+b381,U+b394,U+b3dd,U+b3e8,U+b4ac,U+b4f8,U+b528,U+b541,U+b5cc,U+b5d8,U+b701,U+b770,U+b792,U+b796,U+b7b8,U+b7c7,U+b851,U+b8b8,U+b8c0,U+b8d0,U+b8d4,U+b93d,U+b940,U+b944,U+ba08,U+ba68,U+ba83,U+ba8c,U+bac4,U+bb1c,U+bb45,U+bc0c,U+bc4d,U+bc50,U+bc5d,U+bcb1,U+bcb4,U+bd40,U+bd58,U+bd68,U+bd9c,U+bdb8,U+bddc,U+be0d,U+be4e,U+be6a,U+be98,U+bee0,U+bf1d,U+bfc5,U+c03c,U+c0b5,U+c0d9,U+c0e5,U+c126,U+c1bd,U+c260,U+c2fb,U+c31c,U+c324,U+c3c0,U+c3e9,U+c43c,U+c46c,U+c474,U+c480,U+c4bc,U+c4e9,U+c4ff,U+c5f6,U+c618,U+c630,U+c671,U+c679,U+c680,U+c688,U+c6e1,U+c715,U+c731,U+c768,U+c797,U+c7ce,U+c7dd,U+c7e8,U+c831,U+c840,U+c883,U+c886,U+c89f,U+c8a8,U+c8bd,U+c8f5,U+c934,U+c951,U+c960,U+c9ef,U+c9fc,U+ca08-ca09,U+ca14,U+cacf,U+cad8,U+cb41,U+cb4c,U+cb58,U+cbb8,U+cc55,U+cc75,U+ccac,U+cd64,U+cdfb,U+ce19,U+ce24,U+cea3,U+cf2d,U+cff1,U+cff3,U+d011,U+d044,U+d047,U+d060,U+d06d,U+d184,U+d1ba,U+d1bc,U+d1d8,U+d23f,U+d25c,U+d264,U+d2b1,U+d2c9,U+d2d8,U+d316,U+d345,U+d38f,U+d3c5,U+d408,U+d440,U+d460,U+d494,U+d4a9,U+d4fd,U+d671,U+d694,U+d6f0,U+d738,U+d77c,U+d79d}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(62.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+ac2c,U+ac30,U+ac54,U+ac84,U+ac86,U+ac9c,U+aca1,U+acd7,U+acef,U+ad3c,U+ad44,U+ad9c,U+adc8,U+add0,U+adff,U+ae14,U+ae31,U+ae37,U+ae7d,U+ae85,U+aec0,U+aeed,U+aef8,U+af0d,U+af65,U+af84,U+af90,U+af9c,U+afdc,U+aff4,U+b055,U+b08d,U+b091,U+b0b5,U+b0d1,U+b0d4,U+b0e0,U+b112,U+b11c,U+b138,U+b148,U+b151,U+b15c,U+b189,U+b1d4,U+b1f0,U+b219,U+b23c,U+b27c,U+b2ef,U+b31c,U+b356,U+b390,U+b3a1,U+b3a8,U+b3ac,U+b3ce,U+b3d0,U+b3e0,U+b3e4,U+b434,U+b488,U+b525,U+b543,U+b54b,U+b55f-b560,U+b5b5,U+b5d0-b5d1,U+b614,U+b62c,U+b664,U+b739,U+b74c,U+b755,U+b775,U+b844,U+b878,U+b87c,U+b8b4,U+ba00,U+ba15,U+ba49,U+ba53,U+bb04,U+bb0f,U+bb4d,U+bb61,U+bb90,U+bba8,U+bbc4,U+bbd3,U+bc41,U+bc44,U+bc4c,U+bc8b,U+bcd8,U+bd2c,U+bd4c,U+bd50,U+bd64,U+bd87,U+bd91,U+bdf4,U+bdf8,U+be00,U+be55,U+be70,U+be90,U+beec,U+bf01,U+bf44,U+c091,U+c094,U+c0a3,U+c0a5,U+c0dc,U+c0f5,U+c0f7,U+c127,U+c14c,U+c164,U+c169,U+c1a8,U+c1ac,U+c1e4,U+c1fd,U+c20c,U+c20f,U+c211,U+c229,U+c248,U+c254,U+c265,U+c27f,U+c29d,U+c309,U+c315,U+c318,U+c329,U+c345,U+c388,U+c38c,U+c3d9,U+c430,U+c448,U+c479,U+c49c,U+c4b8,U+c53d,U+c55d,U+c571,U+c58d,U+c59c,U+c5e1,U+c61c,U+c65d,U+c66c,U+c69c,U+c6a4-c6a5,U+c6a7,U+c6dd,U+c6e9,U+c6f9,U+c714,U+c730,U+c733,U+c74f,U+c752-c757,U+c75c,U+c760,U+c7c0,U+c7cc,U+c7e4,U+c82c,U+c848,U+c84d,U+c854,U+c8a1,U+c8c8,U+c8cc,U+c8d4,U+c8e4,U+c970,U+c97c,U+c9c7,U+c9ec,U+c9f0,U+c9f9,U+ca5c-ca5d,U+ca98,U+cac0,U+cac4,U+cad9,U+cb14,U+cb18,U+cb20,U+cb59,U+cb64,U+cc1d,U+cc64,U+cc68,U+ccb5,U+ccc4,U+ccc9,U+ccd4,U+ccec,U+cd24,U+cd28,U+cdf9,U+ce0c,U+ce28,U+ce87,U+ce91,U+cea4-cea5,U+cf01,U+cf11,U+cf15,U+cf2c,U+cf2f,U+cf38,U+cf71,U+cf74,U+cfa1,U+cfa8,U+cff0,U+d004,U+d02d,U+d03c,U+d081,U+d0f8,U+d15f,U+d161,U+d16c,U+d17c,U+d1b3,U+d207,U+d210,U+d284,U+d288,U+d2cb,U+d31f,U+d330,U+d338-d339,U+d33c,U+d344,U+d3a8,U+d444,U+d482,U+d4cc,U+d4d0,U+d4f8,U+d515,U+d585,U+d670,U+d690,U+d6d9,U+d6e0,U+d6fd,U+d700,U+d704,U+d711,U+d72b,U+d757,U+d774,U+d77d,U+d79b}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(66.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+fd5-fd6}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(65.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+e3f}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(64.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+feff}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(60.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+ac07,U+ac1a,U+ac20,U+ac24,U+ac2f,U+ac38,U+ac40,U+ac8a,U+ac94,U+acf6,U+ad18,U+ad1c,U+ad49,U+ad7f,U+ad82,U+ade4,U+ae01,U+ae41,U+ae45,U+ae4d,U+ae50,U+ae5c,U+ae61,U+aebd,U+aec4,U+aed1,U+af08,U+af3c,U+af41,U+af49,U+af64,U+afc7,U+afe9,U+aff0,U+b010,U+b014,U+b01c,U+b0a1,U+b0ab,U+b0af,U+b0c5,U+b0c7,U+b10b-b10c,U+b125,U+b128,U+b12c,U+b158,U+b215,U+b217,U+b220,U+b289,U+b291,U+b2a0,U+b2aa,U+b2db,U+b2f3,U+b301,U+b304,U+b308,U+b313-b315,U+b35f,U+b365,U+b371,U+b380,U+b3d4,U+b3d7,U+b3db,U+b460-b461,U+b46c,U+b4c0,U+b4d0,U+b515,U+b51b,U+b527,U+b55c,U+b625,U+b6a4,U+b6f4,U+b700,U+b729,U+b72c,U+b730,U+b797,U+b7a9,U+b7ff,U+b810,U+b818,U+b81b,U+b8f8,U+b8fb,U+b93c,U+b975,U+b9cf,U+b9d8-b9d9,U+b9f4-b9f5,U+b9f7,U+ba4e,U+ba64,U+ba67,U+ba71,U+bb3d,U+bb44,U+bb54,U+bb58,U+bbb4,U+bc09,U+bc0b,U+bc34,U+bc38,U+bc40,U+bc43,U+bc45,U+bc49,U+bc85,U+bc99-bc9a,U+bcb3,U+bccf,U+bcd5,U+bcf6,U+bd07,U+bd90,U+bdd4,U+be10,U+be45,U+be54,U+be64,U+be7d,U+be80,U+be84,U+be8f,U+bea8,U+bf55,U+bfb0,U+bfdc,U+c060,U+c068,U+c090,U+c0bf-c0c0,U+c0c5,U+c0cc,U+c0d0,U+c0ec,U+c0f4,U+c123,U+c139,U+c149,U+c15c,U+c167,U+c1a5,U+c22f,U+c231,U+c258,U+c270,U+c274,U+c290,U+c2ad,U+c2e3,U+c2ef,U+c308,U+c36c,U+c370,U+c379,U+c37d,U+c384,U+c3e0,U+c464-c465,U+c501,U+c539,U+c568,U+c570,U+c575,U+c584,U+c595,U+c597,U+c5ca,U+c5cc,U+c5ce,U+c5e0,U+c5e3,U+c5f7,U+c634-c635,U+c648,U+c6cd,U+c6f0,U+c70c,U+c73d,U+c74a,U+c7a3,U+c7bf,U+c82f,U+c83c,U+c887,U+c90d,U+c90f,U+c92c,U+c954,U+c96c,U+c974,U+c999,U+c9ca,U+c9e0,U+c9e4,U+c9f1,U+ca0c,U+ca50,U+ca61,U+cabc,U+cb10,U+cb48-cb49,U+cbd4,U+cc14,U+cc21-cc22,U+cc27,U+cc39,U+cc3c,U+cc54,U+ccbc,U+cd18,U+cd1b,U+cda5,U+cda7,U+cdcc,U+ce30,U+ce98,U+cea1,U+cef5,U+cf04,U+cf24,U+cf55,U+cf65,U+cf67,U+cfc4,U+cfe8,U+cff5,U+cffc,U+d0a5,U+d0d4,U+d0e0,U+d0e4,U+d0ec,U+d143,U+d15d,U+d1a1,U+d1b0,U+d22d,U+d230,U+d234,U+d23c,U+d241,U+d29c,U+d2ac,U+d2bf,U+d30d,U+d31c-d31d,U+d325,U+d32c,U+d37d,U+d380,U+d391,U+d3a0,U+d3a9,U+d3c8,U+d3fc,U+d401,U+d479,U+d48b,U+d578,U+d584,U+d5db,U+d5e5,U+d648-d649,U+d651,U+d69f,U+d6d1,U+d6d4,U+d6d7,U+d6e4,U+d720,U+d728,U+d769}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(61.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+ac09,U+ac17,U+ac1b,U+ac2d,U+ac39,U+ac85,U+ac8b,U+ac9f,U+acbb,U+acea,U+acec,U+ad0c,U+ad2d,U+ad38,U+ad7c,U+ad88,U+adc4,U+add3,U+ae5f,U+ae6c,U+ae70,U+ae7b-ae7c,U+aecc,U+aed0,U+af07,U+af10,U+af30,U+af3f,U+af48,U+af5d,U+af79,U+afb9,U+afc9,U+afcb,U+afcd-afce,U+afe8,U+b059,U+b07d,U+b09f,U+b0d8,U+b119,U+b11b,U+b11d,U+b134,U+b18b,U+b194,U+b1a8,U+b1fd,U+b205,U+b214,U+b234,U+b2e2,U+b2fb,U+b311,U+b36b,U+b383,U+b385,U+b38c,U+b3a0,U+b42b,U+b463,U+b480,U+b4b9,U+b4e6,U+b524,U+b544,U+b554,U+b561,U+b5ab,U+b5b4,U+b5c0,U+b5c4,U+b5cf,U+b618,U+b648,U+b6f8,U+b748,U+b754,U+b768,U+b78f,U+b7a0,U+b819,U+b81d,U+b8fd,U+b918,U+b9e3,U+b9ec,U+b9f8,U+ba65,U+ba69,U+ba84,U+bafc,U+bb4f,U+bb88,U+bb8c,U+bbc8,U+bbd0,U+bc08,U+bc27,U+bca7,U+bcb0,U+bcb5,U+bcd0,U+bd48,U+bd59,U+be61,U+be73-be74,U+be7b,U+be8c,U+be91,U+bed1,U+bed8,U+bee3-bee5,U+bf09,U+bf18,U+bf1b,U+bf40,U+bf50,U+bfcd,U+c069,U+c0af,U+c0db,U+c0e8,U+c0f9,U+c100,U+c136,U+c14d,U+c174,U+c178,U+c18e,U+c19d,U+c1f3,U+c200,U+c204,U+c20d,U+c21f,U+c234,U+c250,U+c27c,U+c281,U+c29b,U+c2a5,U+c30c,U+c314,U+c3dc,U+c3ed,U+c3f4,U+c410,U+c42c,U+c468,U+c4f1,U+c530,U+c538,U+c54e,U+c573-c574,U+c58c,U+c58f,U+c5e5,U+c5fe,U+c605,U+c607,U+c60c,U+c62d,U+c63b,U+c641,U+c653,U+c660,U+c698,U+c6c1,U+c6dc,U+c705,U+c719,U+c737,U+c7a4,U+c7b0,U+c7b4,U+c7bc-c7bd,U+c7c8,U+c958,U+c98c,U+c9e2,U+c9ed,U+ca0b,U+ca0d,U+ca68,U+ca84,U+cad1,U+cb50,U+cb5d,U+cbe7,U+cc10,U+cc1c,U+cc3b,U+cc48,U+cc4c,U+cc57-cc58,U+cc60,U+ccb8,U+ccc7,U+cd10,U+cd78,U+cdc4,U+ce04,U+ce61,U+ce75,U+ce85,U+ce89,U+ceac,U+cee5,U+cef9,U+cf10,U+cf20,U+cf70,U+cf78,U+cf85,U+cfb0,U+cfe1,U+cfe4,U+d000,U+d018,U+d035,U+d038,U+d058,U+d07d,U+d0b5,U+d0c9,U+d0ed,U+d0ef,U+d140-d141,U+d144,U+d168,U+d188,U+d248,U+d295,U+d2a4,U+d2c2,U+d2d4,U+d301,U+d320,U+d33b,U+d390,U+d3ab,U+d3ad,U+d3c4,U+d3ff,U+d46f,U+d4f0,U+d54c,U+d565,U+d57c,U+d590,U+d5c9,U+d5d9,U+d5f4-d5f5,U+d5f7,U+d5f9,U+d613,U+d64b,U+d667,U+d683,U+d6c5,U+d719,U+d71c,U+d73c,U+d744,U+d789,U+d799}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(59.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+ac13,U+ac31,U+ac77,U+ac81,U+ac89,U+ac90,U+acb8-acb9,U+acc1,U+acf0-acf1,U+acfd,U+ad04,U+ad75-ad76,U+ad7d,U+ad90,U+ada4,U+ae0b,U+ae0d,U+ae43,U+ae4e,U+ae5d,U+ae65,U+aebe,U+aecd,U+aecf,U+aef4,U+af34,U+af3d,U+af42,U+af80,U+afbc,U+afc0,U+afd4,U+b00c,U+b048,U+b04a,U+b053-b054,U+b057,U+b080,U+b084,U+b09a,U+b0b1,U+b0b3,U+b0c4,U+b109,U+b137,U+b141,U+b154-b155,U+b188,U+b1e8,U+b20c,U+b258,U+b25c,U+b299,U+b2ac,U+b2c9,U+b2d9,U+b2dd,U+b2e6,U+b2eb,U+b2ee,U+b2f7,U+b2ff,U+b310,U+b35c,U+b364,U+b367,U+b369,U+b36e,U+b374,U+b3cb,U+b3d5,U+b429,U+b451,U+b4c8,U+b518,U+b51c,U+b529-b52a,U+b531,U+b534,U+b540,U+b550,U+b5a1,U+b5b3,U+b5bc,U+b611,U+b69c-b69d,U+b6ab,U+b6b1,U+b72f,U+b738,U+b744,U+b760,U+b764,U+b799,U+b7ab-b7ad,U+b7b4,U+b7ed,U+b801,U+b809,U+b834,U+b837,U+b864,U+b86c,U+b871,U+b8e1,U+b8ec,U+b8f0,U+b904,U+b95c,U+b968,U+b96d,U+b985,U+b989,U+b98e,U+b9ad,U+b9bf,U+b9d1,U+b9e8,U+b9fa,U+ba48,U+ba4b,U+ba4d,U+ba55,U+ba58,U+ba5c,U+baab-baac,U+bab9,U+bb36,U+bb47,U+bb49,U+bb50,U+bb63,U+bba4,U+bbac,U+bbf9,U+bc0d,U+bc1f,U+bc2d,U+bca1,U+bca4,U+bccd,U+bd04,U+bd10,U+bd24,U+bd89,U+bd93,U+bdf0,U+be57,U+be59,U+be75,U+bed0,U+bed4,U+bed7,U+bf08,U+bf51,U+bfd4,U+c058,U+c05c,U+c0bd,U+c0d8,U+c0e4,U+c11e,U+c130,U+c140,U+c14b,U+c154,U+c170,U+c19c,U+c19f,U+c1fc,U+c22b,U+c22d,U+c232,U+c298,U+c2eb,U+c2f9,U+c2fc,U+c313,U+c369,U+c37c,U+c3d8,U+c3df,U+c500,U+c50c,U+c52c,U+c53b,U+c553,U+c557,U+c564,U+c580,U+c587,U+c598,U+c5b9,U+c5bd,U+c5c9,U+c5d1,U+c5ee,U+c5ff,U+c606,U+c610,U+c633,U+c639,U+c67c,U+c6ec,U+c708,U+c717,U+c789-c78a,U+c796,U+c7a6,U+c7ad,U+c813,U+c816,U+c81d,U+c820,U+c824,U+c881,U+c8e0,U+c90c,U+c918,U+c9d6,U+c9d9-c9da,U+c9e7,U+ca4c-ca4d,U+ca54,U+cad3,U+cc2e,U+cc59,U+cd2c,U+cda4,U+cdb0,U+ce69,U+ce6b,U+ce78,U+ce84,U+ce94,U+cea0,U+ceeb-ceec,U+cef7-cef8,U+cf08,U+cf13,U+cf64,U+cf8c,U+d034,U+d050,U+d0b4,U+d0b7,U+d0b9,U+d0d3,U+d0f1,U+d131,U+d138,U+d145,U+d14d,U+d150,U+d1a8,U+d280,U+d2c8,U+d2f1,U+d2f4,U+d2f8,U+d30e,U+d321,U+d329,U+d33d,U+d384,U+d38c,U+d399,U+d39c,U+d3bc,U+d3f0,U+d47c,U+d508,U+d514,U+d54d,U+d54f,U+d56b,U+d587,U+d5d0,U+d5dd,U+d5e8,U+d5ec,U+d6a1,U+d6cc,U+d6e8,U+d6fc,U+d729,U+d749,U+d759,U+d760,U+d770,U+d790}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(56.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+3041-3096,U+3099-30ff,U+3300-332b,U+332d-3357}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(58.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+ac11-ac12,U+ac14,U+ac1d,U+ac71,U+acaa,U+acbc,U+ace1,U+ace4,U+ace7-ace8,U+acf3,U+ad34,U+ad73-ad74,U+ad81,U+adc0,U+ae00,U+ae34,U+ae4a,U+ae54,U+ae68,U+aebc,U+af2c-af2d,U+af43,U+afb8,U+afc8,U+b044,U+b04c,U+b05d,U+b07c,U+b08c,U+b099,U+b0a9,U+b0ac-b0ae,U+b0b8,U+b0bc,U+b0c8-b0c9,U+b0d0,U+b0e5,U+b110,U+b113,U+b118,U+b123-b124,U+b140,U+b150,U+b179,U+b180,U+b1cc,U+b208,U+b284,U+b2a6,U+b2cc,U+b2d0,U+b2d8,U+b2e5,U+b2ed,U+b2f5,U+b355,U+b378,U+b3c8,U+b3fc,U+b410,U+b428,U+b454,U+b458,U+b465,U+b4a4,U+b4b7,U+b4dd,U+b4e3,U+b4ec-b4ed,U+b4ef,U+b538,U+b545,U+b5a0,U+b5a4,U+b5a8,U+b5bb,U+b6f0,U+b728,U+b73b,U+b77d,U+b784,U+b78d,U+b790,U+b79c,U+b7a8,U+b7b5,U+b7f4,U+b7fd,U+b800,U+b80c,U+b82c,U+b835,U+b838,U+b840,U+b86d,U+b86f,U+b8b0,U+b8e9,U+b8f9,U+b959,U+b960,U+b987,U+b9b4,U+b9c1,U+b9db,U+b9de,U+b9e1,U+b9e5,U+b9f9,U+ba39,U+ba3c,U+ba40,U+ba54,U+ba78,U+ba87,U+bab0,U+bab8,U+babd,U+bb18,U+bb35,U+bb3b,U+bbc0,U+bbff,U+bc11,U+bc16,U+bc24-bc25,U+bc97,U+bca0,U+bca8,U+bcbc-bcbd,U+bcfc,U+bd05,U+bd09,U+bd95,U+bd99,U+be0c,U+be14,U+be48,U+be4c,U+be5a-be5b,U+be60,U+be68,U+be7c,U+bfcc,U+bfd0,U+c0ad,U+c0b6,U+c12c-c12d,U+c12f,U+c13c,U+c148,U+c158,U+c168,U+c194,U+c1c4,U+c1e0,U+c219,U+c228,U+c26c,U+c27d,U+c288,U+c2a8,U+c2ac,U+c2b4,U+c2b7,U+c2ed,U+c2f1,U+c2f6,U+c2f8,U+c300,U+c30d,U+c4f4,U+c4f8,U+c529,U+c549,U+c554,U+c559,U+c560,U+c5bb-c5bc,U+c5c4,U+c5c7,U+c5d4,U+c5d8,U+c5fd,U+c61b,U+c625,U+c62e,U+c637,U+c654-c655,U+c65c,U+c695,U+c6b1,U+c6c0,U+c6c3,U+c6c5,U+c6e0,U+c6e8,U+c724,U+c735,U+c74d,U+c775,U+c77d,U+c783,U+c787,U+c78e,U+c794,U+c7a0,U+c80a,U+c84c,U+c878,U+c880,U+c88b-c88c,U+c8c4,U+c8fd,U+c950,U+c988-c989,U+c990,U+c998,U+c9d0,U+c9d3,U+c9d5,U+c9dc-c9dd,U+c9f8,U+cbe4,U+cc0c-cc0d,U+cc2c,U+cc3e,U+cc99,U+cca8-cca9,U+ccab,U+ccd0,U+cce4,U+cd09,U+cd0c,U+cd98,U+ce20,U+ce59,U+ce60,U+ce6d,U+ce7c,U+ce90,U+cee4,U+cee8,U+cef4,U+cf00,U+cf1c,U+cf30,U+cf58,U+cf5c,U+cf69,U+cfe0,U+d074,U+d07c,U+d0a8,U+d0ac,U+d0c1,U+d0c8,U+d0d0-d0d1,U+d0d5,U+d134,U+d14c,U+d154,U+d1a4,U+d1b1,U+d1f4,U+d2bc,U+d2c0,U+d2f0,U+d300,U+d305,U+d314,U+d328,U+d37c,U+d398,U+d3b4,U+d3d0,U+d3f4,U+d478,U+d480,U+d48d,U+d4e8,U+d50c,U+d53d,U+d540,U+d551,U+d5c8,U+d5cc,U+d5e4,U+d600-d601,U+d608,U+d610,U+d614,U+d61c,U+d639,U+d63c,U+d640,U+d64d,U+d6c8,U+d718,U+d734,U+d750-d751,U+d754,U+d758,U+d761,U+d765,U+d78c,U+d798}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(57.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+ac00-ac01,U+ac04,U+ac08,U+ac10,U+ac15-ac16,U+ac19,U+ac1c,U+ac70,U+ac74,U+ac78,U+ac80,U+ac83,U+ac8c,U+aca0,U+aca8-aca9,U+acac,U+acb0,U+acbd,U+acc4,U+ace0,U+acf5,U+acfc,U+ad00,U+ad11,U+ad50,U+ad6c-ad6d,U+ad70,U+ad8c,U+addc,U+ade0,U+adf8-adf9,U+adfc,U+ae08-ae09,U+ae30,U+ae38,U+ae40,U+ae4c,U+aed8,U+b098,U+b09c,U+b0a0,U+b0a8,U+b0b4,U+b108,U+b144,U+b178,U+b17c,U+b18d,U+b192-b193,U+b204,U+b274,U+b290,U+b294,U+b298,U+b2a5,U+b2c8,U+b2e4,U+b2e8,U+b2ec,U+b2f4,U+b2f9,U+b300,U+b354,U+b358,U+b370,U+b3c4-b3c5,U+b3cc,U+b3d9,U+b418,U+b41c,U+b420,U+b450,U+b4dc,U+b4e0,U+b4e4,U+b4f1,U+b514,U+b530,U+b54c,U+b610,U+b77c,U+b780,U+b78c,U+b791,U+b798,U+b7c9,U+b7ec,U+b7f0,U+b7fc,U+b807-b808,U+b824-b825,U+b828,U+b839,U+b85c-b85d,U+b860,U+b8cc,U+b8e8,U+b958,U+b974,U+b978,U+b97c,U+b984,U+b9ac,U+b9b0,U+b9bc-b9bd,U+b9c8-b9c9,U+b9cc,U+b9ce,U+b9d0,U+b9dd,U+b9e4,U+ba38,U+ba70,U+ba74,U+ba85,U+baa8-baa9,U+babb,U+bb34,U+bb38,U+bb3c,U+bbf8,U+bbfc,U+bc00,U+bc0f,U+bc14-bc15,U+bc18,U+bc1b-bc1d,U+bc29,U+bc30-bc31,U+bc84,U+bc88,U+bc8c,U+bc94-bc95,U+bcc0,U+bcc4,U+bcd1,U+bcf4-bcf5,U+bcf8,U+bd80-bd81,U+bd84,U+bd88,U+be44,U+c0ac,U+c0b0,U+c0b4,U+c0bc,U+c0c1,U+c0c8-c0c9,U+c0dd,U+c11c-c11d,U+c120,U+c124,U+c131,U+c138,U+c18c-c18d,U+c190,U+c1a1,U+c218,U+c21c,U+c220,U+c2a4,U+c2b5,U+c2b9,U+c2dc-c2dd,U+c2e0,U+c2e4,U+c2ec,U+c368,U+c4f0,U+c528,U+c544-c545,U+c548,U+c54a,U+c54c,U+c555,U+c558,U+c55e,U+c561,U+c57c-c57d,U+c591,U+c5b4-c5b5,U+c5b8,U+c5c5-c5c6,U+c5c8,U+c5d0,U+c5ec-c5ed,U+c5f0,U+c5f4,U+c5fc,U+c600-c601,U+c608,U+c624,U+c628,U+c62c,U+c640,U+c644,U+c678,U+c694,U+c6a9,U+c6b0,U+c6b4,U+c6b8,U+c6cc,U+c6d0,U+c6d4,U+c704,U+c720-c721,U+c728,U+c73c,U+c740,U+c744,U+c74c,U+c751,U+c758,U+c774,U+c778,U+c77c,U+c784-c785,U+c788,U+c790-c791,U+c798,U+c7a1,U+c7a5,U+c7ac,U+c7c1,U+c800-c801,U+c804,U+c808,U+c810-c811,U+c815,U+c81c,U+c838,U+c870-c871,U+c874,U+c885,U+c8fc,U+c900,U+c904,U+c911,U+c99d,U+c9c0-c9c1,U+c9c4,U+c9c8,U+c9d1,U+cabd,U+cc28-cc29,U+cc30,U+cc38,U+cc3d,U+cc44-cc45,U+cc98,U+cc9c,U+cca0,U+ccad,U+ccb4,U+cd08,U+cd1d,U+cd5c,U+cd94-cd95,U+cd9c,U+cda9,U+cde8,U+ce21,U+ce35,U+ce58,U+ce5c,U+ce68,U+ce74,U+cf54,U+d06c,U+d070,U+d0a4,U+d0c0,U+d0c4,U+d0dc-d0dd,U+d130,U+d15c,U+d1a0,U+d1b5,U+d22c,U+d2b8-d2b9,U+d30c,U+d310,U+d3b8,U+d3c9,U+d3ec-d3ed,U+d45c,U+d488,U+d504,U+d53c,U+d544,U+d558-d559,U+d55c,U+d560,U+d568-d569,U+d56d,U+d574-d575,U+d588-d589,U+d5a5,U+d5d8,U+d604,U+d611,U+d615,U+d638,U+d654-d655,U+d658,U+d65c,U+d669,U+d68c-d68d,U+d6a8,U+d6c4,U+d76c,U+d788}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(54.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+50e8,U+532d,U+53b4,U+54bc,U+551a,U+5645,U+5666,U+5672,U+56b3,U+56c5,U+5852,U+5b24,U+5b4c,U+5d2c,U+5df9,U+5e6c,U+5f12,U+6463,U+649f,U+6504,U+68d6,U+69bf,U+6aeb,U+6af3,U+6e5e,U+6e63,U+736a-736b,U+7380,U+7649,U+79b0,U+7a6d,U+7ab6,U+7c5c,U+7d06,U+7d32,U+7dd9,U+7de6,U+7df6,U+7df9,U+7e0b,U+7e11,U+7e36,U+7e52,U+7e62,U+7e6f,U+7e8a,U+7f8b,U+8156,U+8161,U+8181,U+8264,U+826b,U+8526,U+8546,U+8558,U+8577,U+85f6,U+86fa,U+87ef,U+8806,U+8946,U+89af,U+89bf,U+8a01,U+8a75,U+8a84,U+8ad7,U+8b7e,U+8b9e,U+8db2,U+8e60,U+8ee4,U+8efa,U+8f05,U+8f07,U+91d9,U+923d,U+9255,U+929a,U+92b1,U+92df,U+92e3,U+92e6,U+92f6,U+9306,U+9308,U+9364,U+9369,U+9370,U+9384,U+93bf,U+9414,U+9428,U+9479,U+95bd,U+95e5,U+9689,U+97bd,U+9859,U+98eb,U+9937,U+993c,U+99d4,U+99d8,U+9a0d,U+9a36,U+9a42,U+9b9e,U+9baa,U+9bdd,U+9c08,U+9c12,U+9c29,U+9c3e,U+9c5d,U+9c6d,U+9d1f,U+9d2f,U+9d42,U+9d6f,U+9d93,U+9dbc,U+9dda,U+9de5,U+9def,U+9e0c,U+9e7a,U+9ef2,U+9f09}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(52.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+50c9,U+5115,U+53c4,U+5635,U+5638,U+57b5,U+581d,U+5b00,U+5b19,U+5b2a,U+5d33,U+5e43,U+5ee1,U+616a,U+6173,U+645c,U+651b,U+6abe,U+6add-6ade,U+6ae8,U+6af8,U+6b7f,U+6c0c,U+7026,U+733b,U+74a6,U+74d4,U+766d,U+7725,U+7868,U+78b8,U+7bcb,U+7c00,U+7cf2,U+7d3c,U+7d4e,U+7d83,U+7da3,U+7db0,U+7dc7,U+7de1,U+7df1,U+7e35,U+7e7e,U+7e98,U+802c,U+8278,U+8494,U+84e7,U+84ef,U+84f4,U+84fd,U+87bb,U+889e,U+8a4e,U+8a58,U+8a7f,U+8a91,U+8a9a,U+8ac2,U+8acf,U+8ade,U+8ae1,U+8afc,U+8b59,U+8b92,U+8b96,U+8b9c,U+8c9b,U+8cb2,U+8cfb,U+8cfe,U+8d04,U+8edb,U+8f1c,U+90df,U+91d3,U+91d5,U+91e4,U+9227,U+9230,U+9248,U+9266,U+927f,U+9283,U+92a3,U+92a6,U+92aa,U+92f1,U+931b,U+9338,U+9340,U+93a6,U+93a9,U+93cc-93cd,U+93e8,U+9403,U+9413,U+943f,U+944c,U+9454,U+9582,U+95bc,U+95be,U+95c3,U+95c8,U+95d0,U+97c9,U+9807,U+9826,U+98ae,U+98bc,U+98e0,U+9908,U+99d1,U+99d9,U+9a05,U+9a44,U+9ad5,U+9b29,U+9b4e,U+9b90,U+9bc7,U+9bd6-9bd7,U+9be1,U+9c13,U+9c23,U+9d52,U+9df3,U+9df8,U+9efd,U+9eff,U+9f5c}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(55.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+5244,U+5515,U+568c,U+58da,U+5c68,U+5e58,U+5f33,U+61cd,U+6214,U+6516,U+68ec,U+69e7,U+6bff,U+7020,U+7044,U+7798,U+78fd,U+7e70,U+802e,U+8079,U+8183,U+8464,U+861e,U+8811,U+8a92,U+8b56,U+8cb0,U+8cd5,U+8ce7,U+8e93,U+8ea6,U+8f62,U+9233,U+92dd,U+9301,U+9307,U+9346,U+93aa,U+93f7,U+940b,U+9412,U+9426,U+958c,U+95ab,U+95bf,U+986c,U+9a2d,U+9a38,U+9b9a,U+9beb,U+9bf4,U+9c20,U+9c35,U+9c37,U+9d1d,U+9da5,U+9f47,U+9f60}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(53.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+50b4,U+5110,U+51aa,U+5274,U+528c,U+52f1,U+56a6,U+5969,U+5abc,U+5d81,U+5df0,U+6128,U+6192,U+61ae,U+61df,U+6207,U+6227,U+6451,U+6898,U+69aa,U+6a48,U+6ae7,U+6f59,U+6f77,U+6fa9,U+6ffc,U+7027,U+7197,U+7602,U+761e,U+7667,U+76b8,U+7c69-7c6a,U+7cdd,U+7cf4,U+7cf6,U+7cf9,U+7d07,U+7d86,U+7d88,U+7dc4,U+7e2d,U+7e32,U+7f86,U+81da,U+81e0,U+8452,U+851e,U+8552,U+8562,U+859f,U+863a,U+87e3,U+8810,U+8933,U+8949,U+895d,U+89a1,U+89f6,U+8a86,U+8ad1,U+8b6b,U+8d10,U+8e92,U+8ef9,U+8f0a,U+8f61,U+91c3,U+9201,U+9225,U+92a0,U+92a9,U+92cf,U+9312,U+931f,U+9343,U+9387,U+93dd,U+93f9,U+9420,U+944a,U+9465,U+946d,U+96c8,U+979d,U+97dd,U+980a,U+980f,U+9856,U+9862,U+98f1,U+9931,U+9933,U+994a,U+995c,U+9a4f,U+9b83,U+9b92,U+9bc0-9bc1,U+9bea,U+9c28,U+9c33,U+9c39,U+9c5f,U+9c67,U+9c7a,U+9d30,U+9d53,U+9d5c,U+9d87,U+9d98,U+9dd9,U+9de6,U+9ecc,U+9ef7,U+9f34,U+9f4e-9f4f,U+9f54,U+9f59}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(51.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4fc1,U+5000,U+5096,U+5114,U+526e,U+5399,U+55f6,U+5665,U+566f,U+56c0,U+56c8,U+5816,U+584f,U+58d9,U+58e2,U+5b21,U+5d0d,U+614d,U+61e8,U+6331,U+6476,U+64fc,U+6894,U+6a34,U+6a81,U+6a89,U+6aec,U+6b0f,U+6b5f,U+6ba4,U+6de5,U+6fae,U+7032,U+7162,U+7341,U+743a,U+74da,U+7646,U+7658,U+7669,U+7670,U+7864,U+78e7,U+7906,U+7a61,U+7b67,U+7bf3,U+7c1e,U+7d3f,U+7d5b,U+7d5d,U+7d9e,U+7db9,U+7e0a,U+7e1e-7e1f,U+7fb6,U+8141,U+8407,U+8435,U+8541,U+8555,U+85ce,U+85ea,U+87f6,U+8a0c,U+8a10,U+8a6c,U+8ab6,U+8ae2,U+8ae4,U+8b04-8b05,U+8b95,U+8cb3,U+8cba,U+8e55,U+8e91,U+8e95,U+8eeb,U+8f1e,U+8f26,U+8f33,U+8f54,U+90e4,U+9134,U+9136,U+91c5,U+91d4,U+91e7,U+91f7,U+9204,U+9239,U+926d,U+927a,U+92ab,U+92e8,U+92ee,U+93c3,U+9419,U+9477,U+958e,U+95b6,U+95b9,U+95cb,U+9768,U+97d9,U+980e,U+984e,U+9853,U+9873-9874,U+98ed,U+9949,U+99e2,U+9a43,U+9b2e,U+9b58,U+9b74,U+9b8e,U+9bab,U+9be2,U+9bff,U+9c09,U+9c45,U+9ce7,U+9d07,U+9dbb,U+9dc0,U+9dc2,U+9e15,U+9e1d,U+9f6a,U+9f76-9f77}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(50.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+50af,U+5108,U+513b,U+528a,U+559e,U+561c,U+565d,U+5694,U+56b6,U+56c1,U+5707,U+5770,U+584b,U+58ce,U+5950,U+5aa7,U+5b0b,U+5b76,U+5cf4,U+5da0,U+5ee9,U+613e,U+6229,U+6261,U+64a3,U+64c4,U+66d6,U+690f,U+69e8,U+6a05,U+6a9c,U+6aa3,U+6ad3,U+6af1,U+6b1e,U+6b9e,U+6bae,U+6c2c,U+6c33,U+6c39,U+6f35,U+6f7f,U+7028,U+7043,U+7069,U+7146,U+716c,U+7296,U+7319,U+74a3,U+75fe,U+7664,U+77bc,U+78e3,U+7c11,U+7d02,U+7d08,U+7d13,U+7d15,U+7d3a,U+7dbe,U+7e88,U+81cf,U+81d2,U+82bb,U+858c,U+8604,U+861a,U+8716,U+875f,U+8784,U+87c8,U+8960,U+8998,U+89b2,U+89f4,U+8a41,U+8aa5,U+8adb,U+8b16,U+8b2b,U+8cda,U+8e89,U+8e9a,U+8ea1,U+8ea5,U+8ed4,U+8f42,U+8f64,U+9015,U+9090,U+9106,U+91f9,U+9200,U+9210-9211,U+922e,U+9238,U+923f,U+924d,U+925e,U+9278,U+92bc,U+92c3,U+9319,U+9358,U+93a7,U+93b0,U+93b5,U+93d1,U+97c3,U+9865,U+993f,U+9948,U+994c,U+9962,U+9a16,U+9a41,U+9acf,U+9bad,U+9bdb,U+9be4,U+9be7,U+9c25,U+9c48,U+9c56,U+9c78,U+9cf6,U+9d06,U+9d9a,U+9e1b,U+9e85,U+9f5f,U+9f66-9f67,U+9f6c}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(49.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+50c2,U+5137,U+5660,U+5680,U+57e1,U+580a,U+58e0,U+5ad7,U+5b08,U+5b7f,U+5da7,U+5db4,U+5dcb,U+5ec4,U+60f2,U+60fb,U+6142,U+615f,U+616b,U+61cc,U+61e3,U+636b,U+64b3,U+64bb,U+64ef,U+689f,U+6adf,U+6aea,U+6df6,U+6f1a,U+6fa0,U+7005,U+71dc,U+71f4,U+7370,U+7449,U+763b,U+76b0,U+7931,U+7a1f,U+7a4c,U+7c23,U+7c5f,U+7d31,U+7d40,U+7dcb,U+7dd7-7dd8,U+7df2,U+7e39,U+7e48,U+7fa5,U+8075,U+83a2,U+83a7,U+8594,U+866f,U+8706,U+87c4,U+87ce,U+8814,U+8831,U+8938,U+893b,U+8964,U+89a6,U+89ac,U+8a03,U+8a15-8a16,U+8a36,U+8a46,U+8a52,U+8a5b,U+8a85,U+8acd,U+8aed,U+8af6,U+8b14,U+8b3e,U+8b4e,U+8cc5,U+8e4c,U+8eaa,U+8ef2,U+8efb,U+9148,U+91f5,U+92ef,U+9315,U+9341,U+9347,U+9398,U+93a3,U+93dc,U+93e4,U+9410,U+9427,U+9463,U+9481,U+95ac-95ad,U+95de,U+9658,U+973d,U+9744,U+97de,U+981c,U+9821,U+9837,U+9870,U+98b6,U+98c6,U+98e9,U+98f4,U+9909,U+9911,U+991e,U+9a0f,U+9a2e,U+9a64,U+9ad6,U+9bf0,U+9c0d,U+9c2d,U+9c31,U+9c52,U+9ce9,U+9d23,U+9d61,U+9d6a,U+9d89,U+9dd3,U+9df2,U+9ea9,U+9f95}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(48.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+513a,U+5191,U+54e2,U+5504,U+55c7,U+55e9,U+560d,U+562e,U+5630,U+5695,U+56a8,U+585a,U+5879,U+597c,U+5af5,U+5b38,U+5d97,U+5db8,U+60b5,U+611c,U+6134,U+619a,U+61ab,U+61fa,U+6384,U+6425,U+649a,U+64fb,U+6506,U+6523,U+66b1,U+66c4,U+66c7,U+6a62,U+6d79,U+6ece,U+6f6f,U+705d,U+70f4,U+71fc,U+71fe,U+7258,U+729b,U+72a2,U+72fd,U+73a8,U+7515,U+75d9,U+765f,U+769a,U+78ad,U+792b,U+79c8,U+7b8b,U+7c0d,U+7c2b,U+7c6e,U+7cc9,U+7dac,U+7e09,U+7e10,U+7e6e,U+7f4c,U+7ffa,U+8477,U+849e,U+84c0,U+854e,U+85ba,U+8622,U+8768,U+8778,U+87a2,U+8823,U+89b7,U+8a1b,U+8a54,U+8a61,U+8a70,U+8aeb,U+8b01,U+8cc1,U+8ce1,U+8d05,U+8d17,U+8e7a,U+8efe,U+8f45,U+8fae,U+913a,U+91c1,U+91d2,U+91e9,U+91fa,U+9208,U+9249,U+9251,U+925a,U+9262,U+926c,U+92a5,U+92bb,U+92c7,U+92e5,U+92f0,U+9354,U+9376,U+937a,U+93f5,U+942e,U+9432,U+943a,U+9460,U+947e,U+9586,U+958f,U+95a1,U+95cc,U+95d4,U+9742,U+975a,U+9766,U+9830,U+98af,U+98c8,U+991b,U+9957,U+995e,U+9a2b,U+9a4d,U+9aaf,U+9b81,U+9bca,U+9bfd,U+9c54,U+9d26,U+9e1a,U+9f72}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(47.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4e99,U+4f47,U+50e5,U+5102,U+513c,U+5157,U+55c6,U+5616,U+5653,U+56ea,U+579c,U+59cd,U+5acb,U+5c5c,U+5d22,U+5d87,U+5edd,U+6137,U+615a,U+6440,U+645f,U+6473,U+64f7,U+6519,U+6595,U+67f5,U+6ab3,U+6ab8,U+6abb,U+6ada,U+6b12,U+6bab,U+6ef7-6ef8,U+6f41,U+6f97,U+6fd8,U+6ffa,U+71c9,U+7377,U+737a,U+737c,U+744b,U+7489,U+74bd,U+74cf,U+750c,U+7627,U+766c,U+7787,U+792a,U+792c,U+79b1,U+7d46,U+7d73,U+7e1d,U+7e43,U+7e45,U+7e93,U+7f88,U+811b,U+81be-81bf,U+81cd,U+8396,U+858a,U+85fa,U+865c,U+86fb,U+880d,U+884a,U+8956,U+8a25,U+8a6b,U+8a6d-8a6e,U+8a7c,U+8ab9,U+8ac9,U+8afa,U+8b10,U+8b17,U+8b28,U+8b2c,U+8b4f,U+8cd2,U+8d16,U+8e63,U+8e8a,U+8efc,U+8f25,U+8f46,U+9114,U+9116,U+9183,U+920d,U+9226,U+9237,U+923e,U+927b,U+9291,U+9296,U+92ac,U+92cc,U+9310,U+932e,U+93a2,U+93ac,U+93d7-93d8,U+93de,U+93e2,U+95d5,U+9839,U+990c,U+9912,U+993e,U+9943,U+99b1,U+99df,U+99ed,U+9a3e,U+9a40,U+9a5b,U+9a6a,U+9b22,U+9b77,U+9bc9,U+9c58,U+9d15,U+9d1b,U+9d51,U+9d60,U+9da9,U+9dfa,U+9e1e}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(46.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4fb6,U+51dc,U+522a,U+5284,U+5436,U+55b2,U+55da,U+56c2,U+5862,U+58ae,U+5a41,U+5a6d,U+5afa,U+5be2,U+5dd2,U+5dd4,U+5e40,U+5fa0,U+60bd,U+618a,U+61fe,U+633e,U+6417,U+64f0,U+64f2,U+6582-6583,U+6727,U+68e7,U+6968,U+69f3,U+6a3a,U+6adb,U+6ae5,U+6c08,U+6d87,U+6e19,U+6e26,U+6f23,U+6f2c,U+7006,U+700f,U+7018,U+7064,U+7152,U+71be,U+71c1,U+71ed,U+743f,U+74bf,U+760d,U+7621,U+7647,U+7662,U+7672,U+76de,U+798e,U+79bf,U+7a08,U+7a1c,U+7aba,U+7ac5,U+7ac7,U+7be4,U+7c37,U+7c6c,U+7d1c,U+7d33,U+7d79,U+7dba-7dbb,U+7dbd,U+7dde,U+7e08,U+7e55,U+7e5a,U+7e7d,U+82e7,U+83f4,U+8553,U+85f9,U+87ec,U+8805,U+8a63,U+8aa3,U+8aa8,U+8ac4,U+8adc,U+8ae6,U+8af3,U+8af7,U+8b0a,U+8b33,U+8c8d,U+8cd1,U+8ce4,U+8cec,U+8d0d,U+8f12,U+8f3e,U+8f4d,U+902c,U+9087,U+9209,U+923a,U+9257,U+9293,U+92a8,U+92e4,U+92f8,U+9328,U+9333,U+9365,U+936c,U+93b3,U+942b,U+9433,U+9438,U+9594,U+95a8,U+9695,U+96cb,U+97dc,U+9824,U+9871,U+98ea,U+9903,U+9921,U+9945,U+99b4,U+99d2,U+9a01,U+9a62,U+9a65,U+9bd4,U+9be8,U+9c32,U+9c77,U+9d72,U+9daf,U+9dd7}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(45.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4fe0,U+50ad,U+52fb,U+5331,U+5379,U+5614,U+562f,U+589c,U+58b3,U+59e6,U+5b0c,U+5c37,U+5ce9,U+5dbc,U+5e57,U+5f5e,U+6065,U+6190,U+61f6,U+61fc,U+63c0,U+64be-64bf,U+64f1,U+6522,U+652a,U+65ac,U+6688-6689,U+66e0,U+68f2,U+6afb,U+6b16,U+6baf,U+6bb2,U+6bc6,U+6c2b,U+6cdd,U+6d36,U+6dea,U+6f70,U+6f80,U+6fc1,U+6ffe,U+7009,U+701d,U+7055,U+7192,U+71d9,U+720d,U+7463,U+7469,U+746f,U+7587,U+760b,U+7613,U+766e,U+7681,U+76ba,U+775c,U+779e,U+77ef,U+786f,U+78ef,U+79aa,U+7a62,U+7aaa,U+7ac4,U+7b8f,U+7c3e,U+7d09,U+7d5e,U+7d62,U+7d81,U+7d8f,U+7db4,U+7ddd,U+7e37,U+7e46,U+7e79,U+7ff9,U+807e,U+8123,U+81a9,U+8466,U+8588,U+863f,U+879e,U+883b,U+896a,U+8993,U+8a1d,U+8a23,U+8a60,U+8aa1,U+8aa6,U+8af1,U+8b20,U+8b41,U+8b8e,U+8c4e,U+8c9e,U+8cbd,U+8cca,U+8cdc,U+8ec0,U+8f1f,U+905d,U+9132,U+91d7,U+9215,U+9223,U+9240,U+92c5,U+9318,U+931a,U+9320,U+934d,U+9382,U+93df,U+9472,U+947f,U+95a5,U+96b4,U+96db,U+97cc,U+985b,U+986b,U+991a,U+99ad,U+99dd,U+99f1,U+99ff,U+9a4a,U+9c3b,U+9c49,U+9c57,U+9d09,U+9d3f,U+9f9c}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(44.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4f96,U+5098,U+50d5,U+510d,U+516a,U+524e,U+53ad,U+555e,U+5687,U+56a5,U+56d1,U+582f,U+588a,U+58d8,U+58fa,U+5bf5,U+5c4d,U+5ca1,U+5de3,U+5ec2,U+5eda,U+5eec,U+5f4e,U+60b6,U+60f1,U+6144,U+617c,U+61c7,U+646f,U+647b,U+6493,U+64cb,U+650f,U+6514,U+665d,U+66ec,U+6736,U+6953,U+69d3,U+6a01,U+6bad,U+6d29,U+6df5,U+6e3e,U+6e4a,U+6ecc,U+6f11,U+6f51,U+6f86-6f87,U+6ff0,U+7015,U+701f,U+703e,U+71fb,U+72f9,U+7345,U+7378,U+7464,U+758a,U+7661,U+7671,U+797f,U+798d,U+7ac8,U+7b4d,U+7be9,U+7cde,U+7d43,U+7d91,U+7db8,U+7def,U+7e1b,U+7e61,U+7e6d,U+7e8f,U+7f75,U+7fa8,U+8073,U+8076,U+814e,U+81d8,U+8259,U+834a,U+8514,U+8525,U+852d,U+856a,U+8606,U+8766,U+87fb,U+881f,U+8836,U+8ad2,U+8ae7,U+8b0e,U+8b5f,U+8b74,U+8c48,U+8caf,U+8cb6,U+8cc2,U+8d13,U+8e34,U+8e8b,U+8ed2,U+905c,U+908f,U+919c,U+919e,U+91ac,U+91d8,U+921e,U+925b,U+938a,U+93fd,U+9470,U+947c,U+9598,U+95a9,U+95bb,U+96b8,U+9711,U+97fb,U+980c,U+98e2,U+9913,U+9935,U+993b,U+994b,U+9952,U+99c1,U+9a37,U+9b28,U+9b91,U+9d5d,U+9df9,U+9ef4,U+9f4b,U+9f52}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(43.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4e1f,U+5006,U+5075,U+50f1,U+5109,U+5147,U+51f1,U+525d,U+52f3,U+52f8,U+53e2,U+5451,U+5674,U+58be,U+58df,U+593e,U+599d,U+5b30,U+5c62,U+5d84,U+5dbd,U+5e25,U+5e5f,U+5ec1,U+5edf,U+5f14,U+5f4c,U+5f65,U+6085,U+6158,U+61a4,U+61f8,U+6200,U+62cb,U+6399,U+6488,U+6490,U+64b2,U+64e1,U+652c,U+6558,U+687f,U+68d7,U+68df,U+6a1e,U+6bbc,U+6dfa,U+6ebc,U+6ec4,U+6eec,U+6ef2,U+6f3f,U+6fb1,U+7165,U+7169,U+71e6,U+723a,U+72a7,U+7343-7344,U+7375,U+746a,U+74ca,U+775e,U+77da,U+79a6,U+7aa9,U+7aaf,U+7aca,U+7c60,U+7cb5,U+7d0b,U+7d17,U+7dbf,U+7de0,U+7dec,U+7e2b,U+7e69,U+7e9c,U+7f77,U+8070,U+816b,U+8178,U+819a,U+81e5,U+8332,U+8490,U+84bc,U+84ee,U+856d,U+860a-860b,U+8755,U+8932,U+896f,U+89d4,U+8a1f,U+8a50,U+8a87,U+8b19,U+8b39,U+8b5a,U+8c93,U+8ced,U+8d1b,U+8ecb,U+8ef8,U+8f13,U+8f3b,U+91c0,U+91d0,U+91e3,U+9214,U+9234,U+9264,U+9298,U+929c,U+92b3,U+935b,U+93c8,U+95e1,U+9727,U+97cb,U+9803,U+9811,U+9838,U+984f,U+98b3,U+98c4,U+9905,U+992c,U+99b3,U+9a0e,U+9a55,U+9a5f,U+9ad2,U+9b31,U+9d28,U+9d3b,U+9db4,U+9e79,U+9e7c,U+9f21,U+9f90,U+9f94}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(42.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+5009,U+5074,U+5078,U+514c,U+51cd,U+5270,U+528d,U+53b2,U+5442,U+5586,U+559a,U+55aa,U+5606,U+5617,U+570f,U+5875,U+58e9,U+58fd,U+5a1b,U+5b43,U+5c5b,U+5d50,U+5dba,U+5dd6,U+6046,U+617e,U+61b6,U+61f2,U+62dd,U+6383,U+6416,U+64ab,U+64e0,U+64ec,U+64fe,U+651c,U+6575,U+6649,U+69cd,U+6a38,U+6ac3,U+6b04,U+6b3d,U+6bc0,U+6dbc,U+6dda,U+6de9,U+6e6f,U+6eef,U+6efe,U+6fc3,U+6fe4,U+6feb,U+7051,U+7058,U+7210,U+721b,U+7246,U+727d,U+7336,U+7501,U+75e0,U+7652,U+76dc,U+78a9,U+78da,U+7919,U+791f,U+7a4e,U+7d68,U+7da2,U+7db1,U+7dd2,U+7de3,U+7e31,U+7e96,U+8056,U+8105,U+8108,U+81c9,U+8266,U+8523,U+8569,U+8591,U+85a6,U+87f2,U+8972,U+8a3a,U+8a73,U+8a95,U+8a98,U+8b5c,U+8b6f,U+8c54,U+8ca9-8caa,U+8cc3-8cc4,U+8cc8,U+8ce2,U+8ce6,U+8cf4,U+8cfa,U+8d08,U+8e30,U+8e64,U+8f14,U+8f29,U+8f3f,U+8f44,U+8f5f,U+8faf,U+9059,U+905e,U+9072,U+9112,U+9130,U+9285,U+92c1,U+934b,U+9396,U+93c7,U+93e1,U+9444,U+947d,U+9583,U+9592,U+95a3,U+95b1,U+95c7,U+95d6,U+95e2,U+9670,U+96b1,U+978f,U+9801,U+9817,U+9846,U+98fc-98fd,U+99ae,U+99d5,U+99db,U+9a19,U+9a45,U+9b27,U+9ce5,U+9cf4}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(41.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+5016,U+502b,U+5091,U+50be,U+50d1,U+50de,U+5101,U+5291,U+52c1,U+55ac,U+55ce,U+5713,U+58c7,U+58de,U+58ef,U+5922,U+596a,U+5abd,U+5bae,U+5cef,U+5cfd,U+5d11,U+5e33,U+5ec8,U+5ee2,U+5f48,U+5f7f,U+5f91,U+60e1,U+6163,U+6182,U+6191,U+61b2,U+6232,U+6368,U+6372,U+63f9,U+6436,U+64a5,U+64fa,U+6524,U+65c2,U+66a2,U+66ab,U+66c9,U+68c4,U+68ca,U+69ea,U+6a11,U+6a6b,U+6bba,U+6de8,U+6e67,U+6e9d,U+6ec5,U+6f01,U+6f32,U+6f38,U+6f54,U+6f5b,U+6ff1,U+700b,U+70cf,U+7149,U+71c8,U+71d2,U+7240,U+7665,U+76c3,U+76e4,U+76e7,U+78bc,U+7a40,U+7aae,U+7c43,U+7cfe,U+7d10,U+7d14,U+7d2e,U+7d61,U+7d72,U+7de9,U+7e2e,U+7e5e,U+7e6a,U+7e73,U+7feb,U+8085,U+8139,U+8173,U+81a0,U+81bd,U+840a,U+84cb,U+85a9,U+85cd,U+865b,U+89bd,U+89f8,U+8a5e,U+8a62,U+8a69,U+8aa0,U+8aa4,U+8abc,U+8aee,U+8af8,U+8afe,U+8b00,U+8b02,U+8c6c,U+8c9d,U+8cbc,U+8cc0,U+8cde,U+8ce0,U+8d0f,U+8d95,U+8de1,U+8edf,U+8f09,U+8f2f,U+8f4e,U+8fad,U+9077,U+907a,U+907c,U+9081,U+912d,U+91cb,U+91e6,U+92d2,U+92ea,U+9326,U+932b,U+932f,U+9589,U+95ca,U+965d,U+9663,U+96de,U+975c,U+9802,U+9812,U+983b,U+98f2,U+98fe,U+9a30,U+9a5a,U+9cf3,U+9e7d,U+9ea5,U+9f15,U+9f61}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(39.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4f15,U+4f48,U+4f54,U+50c5,U+5152,U+5247,U+524b,U+5289,U+52de,U+532f,U+537b,U+537d,U+5538,U+5678,U+56b4,U+570d,U+5716,U+57f7,U+5805,U+59b3,U+5be7,U+5be9,U+5beb,U+5bf6,U+5c46,U+5c64,U+5c6c,U+5e2b,U+5fa9,U+611b,U+614b,U+6236,U+63db,U+63ee,U+640d,U+64d4,U+64f4,U+65b7,U+69ae,U+6a02,U+6aa2,U+6b50,U+6b77,U+6c23,U+6cc1,U+6e1b,U+6eff,U+6fa4,U+71b1,U+723e,U+7260,U+72c0,U+734e,U+7368,U+7372,U+737b,U+756b,U+76e1,U+76e3,U+774f,U+790e,U+7926,U+7a31,U+7a69,U+7af6,U+7bc0,U+7bc4,U+7ce7,U+7d00,U+7d04-7d05,U+7d0d,U+7d42,U+7d9c,U+7dab,U+7dad,U+7dca,U+7de8,U+7dfb,U+7e7c,U+7e8c,U+7f85,U+7fa3,U+7fd2,U+805e,U+8072,U+8129,U+81e8,U+8208,U+84c6,U+85dd,U+85e5,U+8607,U+862d,U+865f,U+885b,U+88dc,U+8988,U+89aa,U+8a0a,U+8a13,U+8a2a,U+8a31,U+8a3b,U+8a55,U+8a66,U+8acb,U+8b1b,U+8b58,U+8b77,U+8b93,U+8ca0-8ca1,U+8ca7-8ca8,U+8cb7,U+8ce3,U+8cfc-8cfd,U+8f03,U+8f15,U+9023,U+904a,U+9060,U+9069,U+908a,U+91ab,U+9280,U+92fc,U+9322,U+9435,U+9673,U+967d,U+96a8,U+96aa,U+96d9,U+96e2,U+96f2,U+97c6,U+97ff,U+9808,U+9810,U+984d,U+985e,U+9867,U+986f,U+98db,U+990a,U+9918,U+99ac,U+9a57,U+9b25,U+9ec3,U+9ed2,U+9f8d}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(40.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4e82,U+4fec,U+5049,U+50b5,U+50b7,U+5100,U+511f,U+5132,U+518a,U+525b,U+5287,U+52dd,U+52f5,U+5433,U+5553,U+55ab,U+5712,U+584a,U+58d3,U+5920,U+5967,U+596e,U+5a66,U+5b6b,U+5bec,U+5c0b,U+5cf6,U+5d17,U+5e63,U+5e6b,U+5eab,U+5ef3,U+5fb9,U+616e,U+6176,U+61f7,U+639b,U+63da,U+64c1,U+64c7,U+64ca,U+651d,U+6557,U+65e3,U+694a,U+6a13,U+6a39,U+6a4b,U+6a94,U+6b61,U+6b72,U+6b78,U+6b98,U+6c59,U+6e09,U+6e2c,U+6eab,U+6f22,U+6f64,U+7063,U+707d,U+7159,U+7274,U+755d,U+7562,U+7570,U+7642,U+7843,U+7955,U+79ae,U+7b46,U+7bc9,U+7c21,U+7c4c,U+7c64,U+7d19,U+7d1b,U+7d21,U+7d30,U+7d39,U+7d55,U+7da0,U+7db2,U+7db5,U+7df4,U+7e3e,U+7e8d,U+7f70,U+807d,U+812b,U+8166,U+820a,U+8271,U+838a,U+8449,U+8667,U+885d,U+89ba,U+8a02,U+8a0e,U+8a17,U+8a34,U+8a9e,U+8ab0,U+8ab2,U+8b1d,U+8b7d,U+8b80,U+8c50,U+8ca2,U+8cab,U+8cb4,U+8cb8,U+8cd3,U+8d0a,U+8d99,U+8da8,U+8e10,U+8e8d,U+8ecc,U+8f1b,U+8f1d,U+8f2a,U+8f38,U+9055,U+90f5,U+9127,U+91dd,U+9245,U+9304,U+9375,U+937e,U+9451,U+95c6,U+9678,U+968e,U+96d6,U+96dc,U+9748,U+97a6,U+97d3,U+9806,U+9813,U+9858,U+98ef,U+9928,U+99d0,U+9b06,U+9b5a,U+9b6f,U+9bae,U+9d6c,U+9e97,U+9f4a}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(38.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4e26,U+4e9e,U+4f86,U+4fb7,U+500b,U+5011,U+5099,U+50a2,U+50b3,U+50f9,U+5104,U+512a,U+5167,U+5169,U+5225,U+5275,U+5283,U+52d5,U+52d9,U+52e2,U+5340,U+5354,U+53c3,U+54e1,U+554f,U+55ae,U+570b,U+5718,U+5831,U+5834,U+5b78,U+5be6,U+5c07-5c08,U+5c0d-5c0e,U+5e36,U+5e79,U+5e7e,U+5ee3,U+5f35,U+5f37,U+5f9e,U+61c9,U+6230,U+64da,U+654e,U+6578,U+6642,U+66f8,U+6703,U+6771,U+67fb,U+689d,U+696d,U+6975,U+69cb,U+6a19,U+6a23,U+6a5f,U+6b0a,U+6c7a,U+6c92,U+6e96,U+6fdf,U+7121,U+71df,U+722d,U+7232,U+73fe,U+74b0,U+7522,U+7576,U+767c,U+771e,U+77ad,U+78ba,U+7a05,U+7a2e,U+7a4d,U+7d1a,U+7d44,U+7d50,U+7d66,U+7d71,U+7d93,U+7e23,U+7e3d,U+7e54,U+7e94,U+7fa9,U+806f,U+8077,U+8207,U+8209,U+83d3,U+83ef,U+842c,U+8655,U+8846,U+8853,U+8855,U+88cf,U+88dd,U+88fd,U+898b,U+898f,U+8996,U+89c0,U+8a08,U+8a18,U+8a2d,U+8a71-8a72,U+8a8c-8a8d,U+8aaa,U+8abf,U+8ac7,U+8ad6,U+8b49,U+8b70,U+8b8a,U+8cac,U+8cbb,U+8cbf,U+8cc7,U+8cea,U+8eca,U+8ecd,U+8f49,U+8fa6,U+8fb2,U+8ff4,U+9019,U+9032,U+904b,U+904e,U+9054,U+9078,U+9084,U+9109,U+92b7,U+9336,U+93ae,U+9577,U+9580,U+958b,U+9593,U+95a4,U+95dc,U+968a,U+969b,U+96bb,U+96e3,U+96fb,U+9805,U+9818,U+982d,U+984c,U+98a8,U+9ad4,U+9ebc,U+9ede,U+9ee8,U+9f63}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(36.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4f1b,U+507e,U+5181,U+523f,U+52a2,U+5326,U+537a,U+53a3,U+5423,U+5459,U+54b4,U+54d9,U+55be,U+57d8,U+5941,U+5a08,U+5b37,U+5cbd,U+5e31,U+5e5e,U+5f11,U+610d,U+6126,U+6206,U+6322,U+63b4,U+63f8,U+6445,U+6769,U+67a8,U+680a,U+6864,U+69e0,U+6a65,U+6d48,U+6e16,U+6ed7,U+7173,U+72ef,U+7303,U+7321,U+7605,U+78b9,U+7962,U+7a06,U+7aad,U+7ba8,U+7c16,U+7cc7,U+7d77,U+7ea1,U+7ea5,U+7ea9,U+7ec1,U+7ef2,U+7f02,U+7f07,U+7f0b-7f0c,U+7f0f,U+7f12,U+7f21,U+7f23,U+7f2f,U+7f74,U+80b7,U+80e8,U+80ea,U+8114,U+8136,U+8223,U+823b,U+8288,U+82c8,U+8311,U+835b,U+836d,U+83b6,U+8411,U+8487,U+84e3,U+866e,U+867f,U+86f1-86f2,U+88e5,U+89cb-89cc,U+89cf,U+89ef,U+8ba0,U+8bd4,U+8bdc,U+8c02,U+8c18,U+8c2b,U+8c33,U+8db1,U+8dd6,U+8f7a,U+8f7e,U+8f81-8f82,U+948b,U+94ac,U+94b7-94b8,U+94d8,U+94de,U+94eb,U+950d,U+9513-9514,U+9516,U+9518,U+9529,U+9538,U+953f,U+954e,U+9561,U+9565,U+9568-956a,U+956c,U+95fc,U+9667,U+9792,U+97b2,U+97b4,U+98a1,U+98e7,U+9967,U+9969,U+996b,U+9987,U+9a75,U+9a7a,U+9a80,U+9a92,U+9a96,U+9aa3,U+9c86,U+9c8e,U+9c94-9c95,U+9c9a,U+9ca0-9ca1,U+9ca3,U+9cb4,U+9cbd,U+9cd0,U+9cd4,U+9ce2,U+9e2b,U+9e31,U+9e36,U+9e38,U+9e3a,U+9e4b,U+9e4e,U+9e55,U+9e63,U+9e68-9e6a,U+9e71,U+9e7e,U+9ebd,U+9ec9,U+9eea,U+9f0d,U+9f51}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(35.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4f65,U+50a7,U+5240,U+5452,U+5456,U+54d3,U+56df,U+57ef,U+59ab,U+5aaa,U+5ad4,U+5af1,U+5d5b,U+5d5d,U+5d74,U+5def,U+5e0f,U+5e42,U+5e91,U+6003-6004,U+603c,U+60ab,U+60ad,U+61b7,U+6217,U+64ba,U+67a7,U+680c,U+6861,U+6a7c,U+6b81,U+6c07,U+6ca9,U+6cf6-6cf7,U+6cfa,U+6f74,U+709d,U+7198,U+72ad,U+72f2,U+737e,U+7477,U+748e,U+75ac,U+75d6,U+7617,U+763f,U+76b2,U+7726,U+7817,U+781c,U+7b3e,U+7ba7,U+7c74,U+7c9c-7c9d,U+7cc1,U+7e9f,U+7ee0-7ee1,U+7ee8,U+7ef1,U+7efe,U+7f01,U+7f11,U+7f17,U+7f26-7f27,U+7f31,U+8279,U+82c1,U+82d8,U+835c,U+836c,U+839c,U+83bc,U+8489,U+848c,U+84e0,U+86f4,U+886e,U+88e2-88e3,U+8bb5,U+8bce,U+8bd3,U+8bd6,U+8bf3,U+8bf9,U+8bfc,U+8c04,U+8c16-8c17,U+8c1d,U+8c25,U+8c35-8c36,U+8d40,U+8d46,U+8d4d,U+8d5c,U+8dde,U+8f6d,U+8f75,U+8f8e,U+8f94,U+90cf,U+917e,U+94aa-94ab,U+94c8,U+94ca,U+94d1,U+94d5,U+94d7,U+94df,U+94e5,U+94e9-94ea,U+94f3,U+94f7,U+94fc-94fd,U+9515,U+951d,U+952a,U+952c,U+9545,U+954f,U+9554,U+9558-9559,U+9566-9567,U+9571-9572,U+95f1,U+9608,U+960f,U+96e0,U+97af,U+9878,U+987c,U+9883,U+988f,U+989f,U+98d1,U+98d5,U+990d,U+9963,U+9993,U+9a93,U+9acc,U+9b49,U+9c8b,U+9c9e,U+9ca5,U+9ca7,U+9ca9,U+9cad-9cae,U+9cb1,U+9cce,U+9cd3,U+9e37,U+9e39,U+9e41,U+9e46-9e48,U+9ee9,U+9f39,U+9f80,U+9f85,U+9f87}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(37.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4e2c,U+522d,U+54d5,U+54dc,U+5523,U+5786,U+5c66,U+5e3b,U+5f2a,U+61d4,U+620b,U+6484,U+684a,U+6920,U+6bf5,U+6ee0,U+6f24,U+6f46,U+717a,U+770d,U+7857,U+7f32-7f33,U+8022,U+804d,U+817d,U+836e,U+8539,U+877e,U+8bf6,U+8c2e,U+8d33,U+8d47,U+8d55,U+8e2c,U+8e9c,U+8f77,U+8f79,U+9494,U+94b6,U+94f4,U+94f9,U+950a,U+950e,U+951e,U+952b,U+953c,U+953e,U+9544,U+9564,U+95f6,U+9603,U+960c-960d,U+98a5,U+9a98,U+9a9f,U+9c92,U+9ca6,U+9cb0,U+9cba,U+9cbc,U+9cc6,U+9ccb,U+9cd8,U+9e32,U+9e5b,U+9f44,U+9f86}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(34.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4f25,U+4f27,U+4faa,U+4fe3,U+4fe6,U+51eb,U+5250,U+538d,U+53c1,U+5453,U+54d4,U+54dd,U+556d,U+55f3,U+56af,U+5739,U+575c,U+57b2,U+57b4,U+57da,U+5ad2,U+5d03,U+6079,U+6120,U+629f,U+6332,U+63bc,U+64b8,U+679e,U+67b3,U+67fd,U+6800,U+691f,U+6924,U+6987,U+6989,U+6aa9,U+6b24,U+6b87,U+6d4d,U+6e0c,U+6f4b,U+72b8,U+73d0,U+74d2,U+75a0,U+75c8,U+75e8,U+765e,U+7856,U+7877,U+789b,U+7a51,U+7b15,U+7b5a,U+7ba6,U+7baa,U+7ccd,U+7ecb,U+7ed0,U+7ed4,U+7ed7,U+7ee6,U+7efa-7efb,U+7f0d,U+7f1b,U+7f1f,U+7f22,U+7f35,U+8027,U+80fc,U+816d,U+81bb,U+82cc,U+8315,U+8368-8369,U+83b3-83b4,U+83b8,U+85ae,U+86cf,U+877c,U+8a8a,U+8ba6-8ba7,U+8bcc,U+8bdf,U+8be8,U+8bee,U+8c00,U+8c07,U+8c14,U+8c20,U+8c2f-8c30,U+8d30,U+8d36,U+8d3d,U+8d59,U+8df8,U+8e2f,U+8e70,U+8f78,U+8f87,U+8f8b,U+8f8f,U+8f9a,U+90ba,U+90c4,U+90d0,U+917d,U+933e,U+9486-9487,U+948c-948d,U+948f-9490,U+94ad,U+94b2,U+94bd,U+94cd,U+94d2,U+94d6,U+94d9,U+94ef,U+9507,U+951b,U+9531,U+9546,U+954a,U+955e,U+956b,U+95e9,U+95f3,U+9604,U+9609-960b,U+9612,U+9615,U+9617,U+9765,U+97ea,U+9880,U+989a-989b,U+989e,U+98a7,U+996c,U+9980,U+9991,U+9a78,U+9a7d,U+9a88,U+9aa0,U+9aa2,U+9b47,U+9c82,U+9c87,U+9c90,U+9c9b,U+9cb5,U+9cc3,U+9cc7,U+9cca,U+9cd9,U+9e28,U+9e2c,U+9e42,U+9e58,U+9e5a,U+9e5e,U+9e6c,U+9efe,U+9f0b,U+9f88,U+9f8a,U+9f8c}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(33.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4fa9,U+506c,U+50a5,U+51fc,U+520d,U+523d,U+53a9,U+549d,U+551b,U+5527,U+556e,U+55eb-55ec,U+5624,U+568f,U+56f5,U+57a7,U+57d9,U+57dd,U+5942,U+5a32,U+5a75,U+5b73,U+5c98,U+5cbf,U+5cc4,U+5ce4,U+5eea,U+5ffe,U+607b,U+61d1,U+622c,U+6266,U+626a,U+63b3,U+63b8,U+63ff,U+66a7,U+67a5,U+6860,U+6867,U+68c2,U+6901,U+6a2f,U+6a79,U+6b92-6b93,U+6bc2,U+6c29,U+6c32,U+6ca3-6ca4,U+6da0,U+6e86,U+6edf,U+6fd1,U+7080,U+7116,U+7145,U+72cd,U+72de,U+72f0,U+732c,U+7391,U+7596,U+75b1,U+75b4,U+766f,U+7751,U+789c,U+7bd1,U+7ea3,U+7ea8,U+7eb0,U+7ebe,U+7ec0,U+7eeb,U+7eef,U+7f25,U+7f2c,U+8191,U+8297,U+8314,U+835a,U+8366,U+84d1,U+8572,U+85c1,U+85d3,U+8616,U+866c,U+86ac,U+86ca,U+86d4,U+86f3,U+8748,U+88c6,U+89c7,U+89ca,U+89ce,U+89d0,U+89de,U+8ba3,U+8baa-8bab,U+8bc2,U+8bdb,U+8be4,U+8bf0,U+8c15,U+8c21,U+8c2a,U+8d49,U+8db8,U+8dc4,U+8df9,U+8e51,U+8e7f,U+8f6b,U+8f73,U+8ff3,U+9026,U+90d3,U+9495,U+9497,U+949c,U+94a3-94a4,U+94af,U+94b9-94ba,U+94bf,U+94cb-94cc,U+94e0-94e1,U+94f0,U+9509,U+9512,U+951f,U+9534,U+9552-9553,U+9557,U+955d,U+9562,U+9791,U+9889,U+9894,U+98a2,U+9974,U+998a,U+9990,U+9994-9995,U+9a9b-9a9c,U+9aa7,U+9ac5,U+9c88,U+9c91,U+9ca2,U+9cb2-9cb3,U+9cb6-9cb7,U+9cc5,U+9ccf,U+9cd5,U+9cdc,U+9e22,U+9e29-9e2a,U+9e57,U+9e67,U+9e6b,U+9e73,U+9eb8,U+9f83,U+9f89,U+9f9b}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(31.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4e98,U+4f2b,U+4fa5,U+4fac,U+4fe8,U+5156,U+52d0,U+5364,U+53ae,U+53fd,U+545b,U+5494,U+54a4,U+5520,U+5567,U+5618,U+56f1,U+579b,U+5811,U+59a9,U+59d7,U+5a76,U+5c49,U+5c96,U+5ce5,U+5d02,U+5d58,U+6005,U+607a,U+60ec-60ee,U+62a0,U+6342,U+6376,U+6400,U+6402,U+64b7,U+64de,U+6593,U+6654,U+67e0,U+6805,U+6808,U+683e,U+692d,U+6988,U+69db,U+69df,U+6b9a,U+6cde,U+6d52,U+6da7,U+6e85,U+7096,U+70c3,U+7266,U+728a,U+72b7,U+7315,U+736d,U+73ae,U+73ba,U+73d1,U+740f,U+74ee-74ef,U+759f,U+7663,U+7691,U+772f,U+77fe,U+783a,U+783e,U+7977,U+7b3a,U+7bd3,U+7eca,U+7edb,U+7ef7,U+7f1c,U+7f28,U+7f2b,U+7f30,U+7f42,U+7f81,U+7ff1,U+80ae,U+80eb,U+810d,U+8110,U+8113,U+814c,U+82d4,U+830e,U+835e,U+8364,U+836a,U+83ba,U+84df,U+84e6,U+8511,U+853a,U+864f,U+8715,U+874e,U+8845,U+8884-8885,U+8ba5,U+8bb7,U+8bd9,U+8be0-8be1,U+8be7,U+8bfd,U+8bff,U+8c1a,U+8c1f,U+8c24,U+8c27,U+8c2c,U+8d4a,U+8d4e,U+8d58,U+8d61,U+8e0c,U+8e52,U+8f76,U+8f8a,U+8f98,U+8ff8,U+90ac,U+90e7,U+949a-949b,U+949d,U+94a8,U+94b4,U+94c0,U+94c2,U+94c6,U+94d0,U+94e2-94e4,U+94ec,U+94f1,U+94ff,U+9522,U+9525,U+9535,U+9550,U+9556,U+955b,U+956f-9570,U+95eb,U+95f0,U+9611,U+9619,U+988a,U+988d,U+9893,U+98e8,U+9975,U+9981,U+998d,U+998f,U+9a6e,U+9a77,U+9a7f,U+9a87,U+9a8a,U+9aa1,U+9b13,U+9c7f,U+9c9f,U+9ca4,U+9cdd,U+9e2f,U+9e33,U+9e35,U+9e3e,U+9e43-9e44,U+9e5c,U+9e6d}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(32.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4eb5,U+4fea,U+507b,U+50a9,U+51a2,U+5457,U+5499,U+549b,U+54d2,U+5522,U+556c,U+55bd,U+565c,U+567c,U+5785,U+57a9,U+57ad,U+59aa,U+59f9,U+5a06,U+5b6a,U+5c99,U+5fcf,U+6002,U+6006,U+603f,U+6078,U+607d,U+607f,U+60af,U+62a1,U+631b,U+631e,U+637b,U+6448,U+64b5,U+6619,U+6635,U+67ad,U+680e,U+6d43,U+6d54,U+6d9e,U+6e11,U+6ee2,U+704f,U+70e9,U+70ec,U+7118,U+724d,U+72c8,U+73c9,U+73cf,U+7572,U+75c9,U+7618,U+762a,U+7800,U+783b,U+7980,U+7a23,U+7ba9,U+7bab,U+7c41,U+7c7c,U+7cbd,U+7ec2,U+7ec9,U+7ecc,U+7ef6,U+7f03-7f04,U+7f08,U+7f19,U+7f9f,U+8069,U+80c4,U+817c,U+82cb,U+830f,U+8360,U+8365,U+8385,U+8424,U+84e5,U+8537,U+8671,U+869d,U+86ce,U+86f0,U+8717,U+87a8,U+891b,U+8934,U+8941,U+89d1,U+8bb9,U+8bc3,U+8bc5,U+8bcb,U+8bcf,U+8bd2,U+8bd8,U+8be9,U+8c0c,U+8c0f,U+8c11-8c12,U+8c29,U+8c32,U+8d32,U+8d45,U+8d53,U+8d5d,U+8df7,U+8e8f,U+8f71-8f72,U+8f7c,U+8f95,U+8fab,U+909d,U+90e6,U+92ae,U+9485,U+948e,U+9492,U+94a1,U+94b5,U+94bc,U+94c4,U+94c9,U+94db,U+94e7,U+9502-9503,U+9506,U+950f,U+9511,U+9517,U+9528,U+9536-9537,U+9542,U+9549,U+9563,U+9573,U+95fe,U+9602,U+9606,U+9616,U+961a,U+9649,U+96f3,U+9701,U+972d,U+9753,U+97eb,U+988c,U+98a6,U+98d2-98d3,U+98d9-98da,U+9968,U+996f,U+9977,U+997d,U+9984,U+998b,U+9a81,U+9a90,U+9a9d-9a9e,U+9acb,U+9c85,U+9ca8,U+9cab,U+9ccd,U+9cdf,U+9e20,U+9e49,U+9e4c,U+9e51,U+9e66,U+9f8b}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(30.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4fa3,U+51c4,U+51db,U+5220,U+532e,U+5450,U+5455,U+545c,U+54df,U+5507,U+5578,U+56a3,U+5742,U+575e,U+5815,U+5a04-5a05,U+5a34,U+5bdd,U+5c34,U+5ce6,U+5ce8,U+5dc5,U+5e27,U+5e3c,U+5eb5,U+5f95,U+6064,U+60eb,U+6123,U+6151,U+62e3,U+62e7,U+631f,U+6361,U+6363,U+63b7,U+6405,U+6512,U+655b,U+65f7,U+672d,U+6809,U+6862,U+6866,U+6868,U+68f1,U+6984,U+6a71,U+6a90,U+6ba1,U+6bd9,U+6be1,U+6c79,U+6c93,U+6ca6,U+6cf8,U+6cfe,U+6d4a,U+6d4f,U+6d9f,U+6da1,U+6da3,U+6da9,U+6e0d-6e0e,U+6eaf,U+6ee4,U+6ee6,U+6f13,U+709c,U+70bd,U+70db,U+70e8,U+72f8,U+73f2,U+7410,U+7487,U+75a1,U+75ae,U+75d2,U+75eb,U+766b,U+7682,U+76b1,U+76cf,U+77eb,U+781a,U+796f,U+79c3,U+79c6,U+7a8d,U+7a9c,U+7aa5-7aa6,U+7b03,U+7bf1,U+7eab,U+7ead,U+7ec5,U+7eda,U+7ede,U+7ee2,U+7eee,U+7ef0,U+7efd,U+7f00,U+7f0e,U+7f24,U+7f2d-7f2e,U+7fd8,U+80e7,U+82b8,U+82c7,U+82ce,U+8426,U+853c,U+8682,U+86ee,U+8747,U+8749,U+8bb4,U+8bbd,U+8be3,U+8bec,U+8bf2,U+8bf5,U+8c06,U+8c0d-8c0e,U+8c19,U+8c1b,U+8d26,U+8d31,U+8d3b-8d3c,U+8d48,U+8d50,U+8f84,U+8f8d,U+8f97,U+8f99,U+8fe9,U+94a0,U+94ae,U+94b0,U+94b3,U+94ce,U+94e8,U+94f2,U+94f5,U+9504,U+951a,U+952f-9530,U+9532,U+9539,U+9541,U+954c-954d,U+956d,U+95f5,U+95fa,U+9668,U+96bd,U+97ec,U+9885,U+9890,U+996a,U+997a,U+9985,U+9992,U+9a6d,U+9a6f,U+9a74,U+9a79,U+9a85,U+9a8b,U+9a8f,U+9aa5,U+9cb8,U+9cbb,U+9cc4,U+9ccc,U+9cd7,U+9cde,U+9e25-9e26,U+9e4a,U+9f9f}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(29.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4ec6-4ec7,U+4ed1,U+4f1e,U+4f63,U+4fa0,U+4fde,U+50bb,U+50f5,U+517d,U+51d1,U+51ff,U+5239,U+5300,U+535c,U+538c,U+53a2,U+53e0,U+5413,U+548f,U+54bd,U+54c4,U+54d1,U+54d7,U+5582,U+5631,U+566a,U+575f-5760,U+5792,U+57ab,U+58f6,U+5978,U+5a07,U+5ba0,U+5c27,U+5c38,U+5c7f,U+5c82,U+5de2,U+5e18,U+5e90,U+5f26,U+5f5d,U+601c,U+6073,U+607c,U+60e7,U+61d2,U+621a,U+62e2,U+62e6,U+631a,U+631d,U+6320,U+6328,U+6346,U+63ba,U+6401,U+658b,U+65a9,U+663c,U+6652,U+6655-6656,U+6760,U+67ab,U+6816-6817,U+6869,U+6a31,U+6b7c,U+6bb4,U+6c22,U+6ca5,U+6cbe,U+6cc4,U+6cfb,U+6d3c,U+6d47,U+6da4,U+6e0a,U+6e83,U+6f4d,U+6f9c,U+6fd2,U+7076,U+70c1,U+70eb,U+718f,U+72ed,U+7405,U+7476,U+7574,U+75af,U+75ea,U+75f4,U+762b,U+763e,U+7741,U+7792,U+77e9,U+77f6,U+7845,U+7978,U+7985,U+79fd,U+7ad6,U+7b0b,U+7b5b,U+7b5d,U+7caa,U+7cd5,U+7eac,U+7eb6,U+7ece,U+7ed1,U+7ee5,U+7f09,U+7f15,U+7f1a,U+7f20,U+7f2a,U+7fa1,U+8038,U+803b,U+804b,U+80b4,U+80be,U+817b,U+8231,U+829c,U+82a6,U+8327,U+8346,U+835f,U+8367,U+836b,U+83b9,U+841d,U+8471,U+8681,U+8721,U+889c,U+89c5,U+8bb3,U+8bb6,U+8bc0,U+8beb,U+8c05,U+8c1c,U+8c23,U+8c34,U+8d1e,U+8d2c,U+8d2e,U+8d42-8d43,U+8dfb,U+8e0a,U+8eaf,U+8f69,U+900a,U+90f8,U+915d,U+9171,U+9489-948a,U+9499,U+94a5,U+94a7,U+94be,U+94c5,U+94ee,U+9508,U+950c,U+9523-9524,U+952d,U+9540,U+9551,U+9576,U+95f7-95f8,U+95fd,U+9600,U+960e,U+9647,U+96b6,U+96cf,U+9709,U+97e7,U+98a0,U+98a4,U+9965,U+9976,U+997f,U+9988,U+9a73,U+9a7c,U+9a82,U+9a86,U+9a9a,U+9cd6,U+9e3d,U+9e70,U+9f7f}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(28.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4e11,U+4e1b,U+4e22,U+4e27,U+4fa6,U+4fe9,U+4fed,U+5179,U+5188,U+51bb,U+51c9,U+51ef,U+51f6,U+522e,U+5265,U+529d,U+52cb,U+5367,U+5395,U+5398,U+53a8,U+53d9,U+53f9,U+540a,U+5415,U+541e,U+5446,U+54b8,U+5524,U+55b7,U+575d,U+5784,U+57a6,U+58f3,U+5938-5939,U+5986,U+5a74,U+5c18,U+5c4f,U+5c61,U+5c9a,U+5cb3,U+5d2d,U+5e05,U+5e1c,U+5e99,U+5e9e,U+5f25,U+5f2f,U+5f66,U+5fa1,U+604b,U+6052,U+60a6,U+60ac,U+60e8,U+6124,U+6251,U+629a-629b,U+62ac,U+6321,U+6323,U+633d,U+635e,U+63fd,U+641c,U+643a,U+6491,U+6735,U+6746,U+67a2-67a3,U+680b,U+6c64,U+6ca7,U+6caa,U+6cfc,U+6d12,U+6d45-6d46,U+6d51,U+6d9d,U+6dc0,U+6e17,U+6e7f,U+6e89,U+6ee5,U+6f47,U+707f,U+70c2,U+70e6,U+7115,U+7237,U+727a,U+72b9,U+72ee,U+72f1,U+730e,U+732b,U+739b,U+743c,U+7750,U+77a9,U+7816,U+7855,U+78b1,U+7984,U+7a83,U+7a91,U+7a9d,U+7b3c,U+7b4b,U+7ca4,U+7eb1,U+7eb9,U+7ed2,U+7ee3,U+7eea,U+7ef3,U+7ef5,U+7ef8,U+7f05-7f06,U+7f14,U+7f1d,U+7f62,U+8042,U+806a,U+80a0,U+80a4,U+80bf,U+80c1,U+8109,U+810f,U+814a,U+8230,U+8273,U+82cd,U+82f9,U+8350,U+83b2,U+8427,U+8574,U+867e,U+8680,U+8695,U+8854,U+886c,U+88e4,U+8bbc,U+8bc8,U+8bd1,U+8be6,U+8bf1,U+8c10,U+8c26,U+8c28,U+8c2d,U+8c31,U+8d3f,U+8d41,U+8d4b-8d4c,U+8d63,U+8e2a,U+8f67,U+8f74,U+8f90,U+8fa9,U+903b,U+903e,U+9065,U+90c1,U+917f,U+9493,U+949e,U+94a9,U+94c3,U+94dd,U+94ed,U+94f8,U+94fe,U+9510,U+953b,U+95ea,U+9601,U+9610,U+96c7,U+96fe,U+97e6,U+97f5,U+9875,U+9877,U+987d,U+9882,U+9888,U+989c,U+98d8,U+997c,U+9a70,U+9a84,U+9a91,U+9aa4,U+9c8d,U+9e2d,U+9e3f,U+9e45,U+9e64,U+9f20,U+9f9a}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(25.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4e07,U+4e0e,U+4e13,U+4e1a,U+4e1c,U+4e24-4e25,U+4e2a,U+4e3a,U+4e3e,U+4e48-4e49,U+4e50,U+4e61,U+4e66,U+4e70,U+4e86,U+4e89,U+4e8e,U+4e9a,U+4ea7,U+4eb2,U+4ebf,U+4ec5,U+4ece,U+4eec,U+4ef7,U+4f17-4f18,U+4f1a,U+4f20,U+4f53,U+4f59,U+4f60,U+4fee,U+513f,U+514b,U+515a,U+5173-5174,U+517b,U+5185,U+519b-519c,U+51b3,U+51b5,U+51c6,U+51e0,U+51fa,U+5212,U+5218-5219,U+521b,U+522b,U+5236,U+529e,U+52a1,U+52a8,U+52b3,U+52bf,U+533a-533b,U+5343,U+534e-534f,U+5355-5356,U+5360,U+5373-5374,U+5386,U+53bf,U+53c2,U+53cc,U+53d1,U+53d8,U+53ea,U+53f7,U+5408,U+540c,U+540e,U+5458,U+54cd,U+56de,U+56e2,U+56f0,U+56fd-56fe,U+573a,U+575a,U+58f0,U+5904,U+5907,U+590d,U+5934,U+5956,U+5b66,U+5b83,U+5b9e,U+5ba1,U+5bb6,U+5bf9,U+5bfc,U+5c06,U+5c14,U+5c3d,U+5c40,U+5c42,U+5c4a,U+5e03,U+5e08,U+5e26,U+5e2d,U+5e72,U+5e76,U+5e7f,U+5e94,U+5f00,U+5f20,U+5f3a,U+5f53,U+5fd7,U+603b,U+6218,U+6237,U+624d,U+6267,U+62a4-62a5,U+62c5,U+6325,U+636e,U+6559,U+6570,U+65ad,U+65e0,U+65f6,U+663e,U+672f,U+673a,U+6743,U+6761,U+6765,U+6781,U+6784,U+679c,U+67e5,U+6807,U+6837,U+68c0,U+6c14,U+6ca1,U+6ce8,U+6d4e,U+6e38,U+6ee1,U+70b9,U+70ed,U+7231,U+73af-73b0,U+7535,U+76d1,U+771f,U+7740,U+7840,U+786e,U+79cd,U+79ef-79f0,U+7a0e,U+7a33,U+7ade,U+7c7b,U+7cae,U+7d27,U+7ea2,U+7ea6-7ea7,U+7eaa,U+7ebf,U+7ec4,U+7ec7,U+7ecf,U+7ed3,U+7ed9,U+7edf,U+7ee7,U+7eed,U+7ef4,U+7fa4,U+804c,U+8054,U+81f4,U+827a,U+8282,U+8303,U+836f,U+83b7,U+8425,U+8868,U+88c5,U+89c1-89c2,U+89c4,U+89c6,U+8ba1,U+8ba4,U+8ba9,U+8bae-8bb0,U+8bb2,U+8bb8,U+8bba,U+8bbe-8bbf,U+8bc1,U+8bc4,U+8bc6,U+8bd5,U+8bdd,U+8be5,U+8bf4,U+8bf7,U+8c03,U+8c08,U+8d1f,U+8d22-8d23,U+8d27-8d28,U+8d2d,U+8d38-8d39,U+8d44,U+8d5b,U+8f66,U+8f6c,U+8f83,U+8fb9,U+8fbe,U+8fc7,U+8fd0,U+8fd8-8fd9,U+8fdb-8fdc,U+8fde,U+9002,U+9009,U+91cc,U+94b1,U+94c1,U+94f6,U+9500,U+9547,U+957f,U+95e8,U+95ee,U+95f4,U+95fb,U+961f,U+9633,U+9645,U+9648,U+968f,U+96be,U+9879,U+987b,U+9884,U+9886,U+9898,U+989d,U+98ce,U+9a6c,U+9a8c,U+9ec4}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(26.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4e1d,U+4e30,U+4e34,U+4e3d,U+4e4c,U+4e60,U+4e71,U+4e8f,U+4e91,U+4ea9,U+4eea,U+4f1f,U+4f24,U+501f,U+503a,U+503e,U+507f,U+50a8,U+5170,U+518c,U+5199,U+51b2,U+51cf,U+51fb,U+521a,U+5267,U+52b1,U+536b,U+5377,U+5385,U+538b,U+53a6,U+53f6,U+5403,U+5428,U+542c,U+542f,U+5434,U+56ed,U+56f4,U+574f,U+5757,U+58ee,U+591f,U+592b,U+593a,U+594b,U+5965,U+5987,U+5b59,U+5b81,U+5b9d,U+5bbd-5bbe,U+5bfb,U+5c5e,U+5c81,U+5c97,U+5c9b,U+5ce1,U+5cf0,U+5de8,U+5e01,U+5e2e,U+5e84,U+5e86,U+5e93,U+5f02,U+5f52,U+5f55,U+5f69,U+5f7b,U+5f81,U+5f84,U+5ff5,U+6000-6001,U+60ca,U+613f,U+620f,U+624e,U+6258,U+6269,U+626c,U+62a2,U+62b5,U+62e5,U+62e9,U+6302,U+635f,U+6362,U+6444,U+6446,U+6597,U+65d7,U+65e2,U+65e7,U+6653,U+6731,U+6742,U+6768,U+6770,U+677e-677f,U+6811,U+6838,U+6863,U+6865,U+6881,U+697c,U+6b22,U+6b27,U+6b8b,U+6bd5,U+6c47,U+6c49,U+6c61,U+6c88,U+6cfd,U+6d4b,U+6d89,U+6da6,U+6da8,U+6e10,U+6e29,U+6e7e,U+6f5c,U+7075,U+707e,U+70df,U+72b6,U+72ec,U+732e,U+753b,U+7597,U+76d6,U+76d8,U+77ff,U+793c,U+79bb,U+79c1,U+79cb,U+79d8,U+7b14,U+7b51,U+7b79,U+7b7e,U+7b80,U+7d2f,U+7eaf,U+7eb3,U+7eb7-7eb8,U+7eba,U+7ec3,U+7ec6,U+7ec8,U+7ecd,U+7edd,U+7ee9,U+7efc,U+7eff,U+7f16,U+7f51,U+7f57,U+7f5a,U+80cc,U+80dc,U+8111,U+8131,U+8270,U+82cf,U+8363,U+8428,U+8651,U+867d,U+8865,U+89c8-89c9,U+8a89,U+8ba2,U+8ba8,U+8bad,U+8bc9,U+8bcd,U+8bd7,U+8bed,U+8bef,U+8bfb,U+8bfe,U+8c01,U+8c22,U+8d21,U+8d25,U+8d2b,U+8d2f,U+8d35,U+8d37,U+8d5e,U+8d75-8d76,U+8d8b,U+8dc3,U+8df5,U+8f68,U+8f6e-8f6f,U+8f7b,U+8f7d,U+8f86,U+8f89,U+8f93,U+8fbd,U+8fdd,U+8ff9,U+9057,U+9093,U+90ae,U+90d1,U+9274,U+9488,U+949f,U+94a2,U+9519,U+9526,U+952e,U+9636,U+9646,U+9669,U+97e9,U+987a,U+987e-987f,U+98de,U+996d-996e,U+9986,U+9a7b,U+9c7c,U+9c81,U+9c9c,U+9e4f,U+9ed1,U+9f50,U+9f99}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(27.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4e54,U+4ed3,U+4eff,U+4f19,U+4f26,U+4f2a,U+4f5b,U+4fa7-4fa8,U+4fca,U+5077,U+5151,U+51ac,U+51af,U+51c0,U+51cc,U+51e4,U+51ed,U+5242,U+5251,U+5269,U+52b2,U+5362,U+5389,U+5417,U+54a8,U+54f2,U+5706,U+5708,U+5723,U+575b,U+5899,U+5988,U+59dc,U+5a18,U+5a31,U+5baa-5bab,U+5bff,U+5c1d,U+5ca9,U+5cad,U+5de9,U+5e10,U+5e78,U+5e8a,U+5e9f,U+5f03,U+5f39,U+5fc6,U+5fe7,U+6076,U+60e9,U+60ef,U+6108,U+6263,U+626b,U+6270,U+6298,U+62dc,U+62df,U+62e8,U+6324,U+6447,U+644a,U+654c,U+65cb,U+6606,U+664b,U+6682,U+6697,U+6734,U+6740,U+676f,U+67aa,U+67dc,U+680f,U+68a6,U+68cb,U+6982,U+6a2a,U+6b32,U+6bc1,U+6c9f,U+6cea,U+6d01,U+6d53,U+6d8c,U+6d9b,U+6e14,U+6eda,U+6ede,U+6ee8-6ee9,U+706d,U+706f,U+7089,U+70ae,U+70bc,U+70e7,U+7275,U+732a,U+73a9,U+74f6,U+7545,U+75c7,U+76d0,U+76d7,U+7801,U+788d,U+7a77,U+7bee,U+7cd6,U+7ea0,U+7ea4,U+7eb2,U+7eb5,U+7ebd,U+7ed5,U+7ed8,U+7edc,U+7f13,U+7f18,U+7f29,U+7f34,U+8083,U+80c0,U+80c6,U+80f6,U+811a,U+8138,U+817e,U+8206,U+820d,U+8361,U+83b1,U+848b,U+84dd,U+865a,U+866b,U+88ad,U+89e6,U+8bca,U+8bda,U+8bde,U+8be2,U+8bf8,U+8bfa,U+8c0a-8c0b,U+8c13,U+8c37,U+8d1d,U+8d24,U+8d29-8d2a,U+8d34,U+8d3a,U+8d3e,U+8d4f,U+8d54,U+8d56,U+8d5a,U+8d60,U+8d62,U+8f70,U+8f7f,U+8f85,U+8f88,U+8f91,U+8f96,U+8f9e-8f9f,U+8fc1,U+8fc8,U+8fdf,U+9012,U+90b9,U+90bb,U+9178,U+91ca,U+94a6,U+94bb,U+94dc,U+94fa,U+9501,U+9505,U+950b,U+9521,U+955c,U+95ed,U+95ef,U+95f2,U+95f9,U+9605,U+9614,U+9634-9635,U+9655,U+9690,U+9759,U+9876,U+9881,U+9887,U+9891,U+9896-9897,U+9970-9972,U+9a71,U+9a76,U+9a7e,U+9a97,U+9e1f,U+9e21,U+9e23,U+9ea6,U+9f84}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(24.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4e3f,U+5107,U+5155,U+5216,U+5281,U+5293,U+53b6,U+54f3,U+553c,U+570a,U+5776,U+5819,U+5adc,U+5b32,U+5b65,U+5c88,U+5c8d,U+5f61,U+5fee,U+6067,U+614a,U+615d,U+62f6,U+63ad,U+63be,U+6420,U+6434,U+6499,U+652e,U+67d9,U+67dd,U+6a8e,U+6aa0,U+6b43,U+6bea,U+6c15,U+6d5e,U+71e0,U+72c1,U+72c3,U+72e8,U+730a,U+73e7,U+746d,U+752f,U+754e,U+75b0,U+7603,U+7722,U+778d,U+77e7,U+7809,U+7811,U+78c9,U+78f2,U+7946,U+7967,U+799a,U+7b45,U+7b9d,U+7ba2,U+7cd7,U+8014,U+8028,U+8080,U+80c2,U+80d9,U+80ec,U+810e,U+8159,U+81a3,U+81aa,U+8201,U+833c,U+83e5,U+8459,U+848e,U+84cd,U+84d0,U+84f0,U+85b7,U+871e,U+8723,U+8729,U+8753,U+878b,U+8793,U+87d3,U+88d2,U+8966,U+89dc,U+89eb,U+8b26,U+8e9e,U+8ece,U+8fee,U+9139,U+914f,U+9174,U+9191,U+928e,U+9622,U+9674,U+9b48,U+9e88,U+9eb4,U+9f3d}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(22.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4ef3,U+4f74,U+50d6,U+50ec,U+51ab,U+51b1,U+52d6,U+536e,U+54a9,U+54da,U+55cd,U+564d,U+572f,U+574c,U+576b,U+57fd,U+5844,U+59d2,U+5ae0,U+5b16,U+5b5b,U+5b80,U+5b84,U+5cb5,U+5d1e,U+5d6b,U+5efe,U+5f56,U+5f58,U+5f73,U+5f82,U+5f8c,U+5fc4,U+5fc9,U+5fe4,U+600a,U+602b,U+60dd,U+6106,U+63de,U+641b,U+643f,U+64e4,U+6634,U+676a,U+67b5,U+681d,U+6883,U+69b1,U+69d4,U+6b37,U+6b9b,U+6c46,U+6d7c,U+6eb7,U+6f36,U+6f72,U+6f89,U+6f8c,U+7035,U+7039,U+7113,U+7178,U+71d4,U+7228,U+727f,U+728f,U+72b4,U+72f4,U+7331,U+7481,U+74de,U+74e0,U+7540,U+755b,U+75c3,U+75e6,U+760a,U+761b,U+7625,U+7635,U+763c,U+764d,U+76cd,U+7704,U+7743,U+7747,U+7780,U+7847,U+786a,U+78a5,U+7a02-7a03,U+7aac,U+7ab3,U+7b0a,U+7b4c,U+7b7b,U+7bfc,U+7c0f,U+7c40,U+7ca2,U+7cf8,U+7e3b,U+7f9d,U+7fbc,U+8016,U+8020,U+811e,U+812c,U+8182,U+822f,U+8233,U+825f,U+8268,U+8284,U+828f,U+8291,U+8308,U+831b,U+83a9,U+83dd,U+8406,U+840f,U+845c,U+84b4,U+850c,U+855e,U+863c,U+864d,U+86ba,U+86c4,U+86de,U+873e,U+87ac-87ad,U+87bd,U+87db,U+880a,U+883c,U+887f,U+88bc,U+88f0,U+890a,U+892b,U+895e,U+8a48,U+8c94,U+8dcf,U+8de3,U+8e6f,U+8e90,U+8fb6,U+902d,U+90be,U+90db,U+9164,U+91ad,U+91af,U+936a,U+953a,U+963c,U+9654,U+966c,U+9688,U+96b3,U+9998,U+9aba,U+9adf,U+9aed,U+9b08,U+9b43,U+9f2c,U+9f37}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(21.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4e69,U+4f67,U+4f7e,U+4fdc,U+50e6,U+5196,U+5202,U+5233,U+5363,U+5432,U+5476,U+54ad,U+54cf,U+5537,U+5575,U+5581,U+55cc,U+55fe,U+5601,U+561e,U+56dd,U+5709,U+572c,U+57cf,U+57f8,U+580d,U+5881,U+589a,U+5981,U+59b2,U+5c25,U+5d24,U+5e8b,U+5eb3,U+5ed2,U+5ef4,U+5fad,U+601b,U+6083,U+6092,U+6100,U+62ca,U+6369,U+638e,U+6426,U+646d,U+6535,U+65c4,U+6661,U+66db,U+6715,U+6798,U+67c3,U+68f9,U+698d,U+69ca,U+69ed,U+69f2,U+69ff,U+6a18,U+6b39,U+6bb3,U+6bf9,U+6c05,U+6c0d,U+6cb2,U+6cd6,U+6d33,U+6dab,U+6e53-6e54,U+6ebb,U+6fb6,U+71b5,U+7256,U+725d,U+727e,U+72f7,U+72fb,U+7313,U+739f,U+73e5,U+74ba,U+750f,U+754b,U+758b,U+7630,U+7640,U+76a4,U+775a,U+77bd,U+781f,U+78a1,U+7905,U+79b3,U+7b2b,U+7b2e,U+7b31,U+7b62,U+7b6e,U+7b85,U+7b9c,U+7bcc,U+7bea,U+7c0b,U+7c9e,U+7ce8,U+7e47,U+7f7e,U+7fb0,U+802a,U+8031,U+8071,U+8112,U+8160,U+8169,U+81a6,U+81c1,U+8234,U+829f,U+82a4,U+82e1,U+82fb,U+831a,U+8333,U+83c0,U+83f8,U+841c,U+845a,U+84bd,U+8548,U+85a4,U+8627,U+8629,U+86b5,U+86e9,U+86f8,U+872e,U+8731,U+877b,U+877d,U+8785,U+87ab,U+87ea,U+8813,U+8816,U+8864,U+88ce,U+897b,U+89da,U+89f3,U+8dba,U+8e3a,U+8fd3,U+9161,U+9179,U+91a3,U+961d,U+972a,U+9730,U+9ac0,U+9ae1,U+9aeb,U+9af9,U+9b51,U+9e87,U+9ee2,U+9f17,U+9f19,U+9f2f}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(23.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4e0c,U+4e28,U+4e36,U+4ea0,U+4ec2,U+4f91,U+4f94,U+4fc5,U+502e,U+50ba,U+50ed,U+5182,U+51f5,U+525e,U+5282,U+5290,U+52f9,U+5369,U+54ff,U+552a,U+5588,U+55b5,U+55c9,U+5686,U+57a4,U+57f4,U+580b,U+5820,U+5865,U+58bc,U+5902,U+5925,U+5ab5,U+5be4,U+5c1c,U+5c22,U+5c6e,U+5d3e,U+5ddb,U+5e80,U+5ee8,U+5f50,U+5fed,U+605d,U+609b,U+609d,U+619d,U+6224-6225,U+6243,U+6343,U+63ce,U+63f2,U+640b-640c,U+6496,U+64d0,U+64d7,U+6509,U+6534,U+6549,U+656b,U+6603,U+674c,U+6833,U+6844,U+6957,U+6971,U+6a91,U+6c2a,U+6c5c,U+6cd0,U+6d0e,U+6e2b,U+6eb2,U+6f2d,U+706c,U+70b1,U+70c0,U+721d,U+728b,U+72f3,U+7338-7339,U+734d,U+736c,U+736f,U+74a9,U+750d,U+7513,U+7592,U+75c4,U+762d,U+7643,U+7707,U+7735,U+77a2,U+77b5,U+7839,U+784e,U+786d,U+791e,U+7924,U+793b,U+7953,U+798a,U+7a78,U+7a80,U+7b58,U+7bda,U+7be5,U+7cc8,U+7f68,U+8025,U+8029,U+8035,U+809c,U+80ad,U+80e9,U+80f2,U+8204,U+8221,U+822d,U+824b,U+825a,U+8274,U+827d,U+827f,U+82b0,U+82e0,U+8307,U+8347,U+837d,U+839b,U+83b0,U+83f9,U+8488,U+84b9,U+8579-857a,U+85a8,U+867c,U+86b0,U+86d1,U+86d8,U+8764,U+8770,U+8788,U+8797,U+87b5,U+8803,U+881b,U+8844,U+88fc,U+8930,U+89d6,U+8c85,U+8c8a,U+8c98,U+8dbc,U+8e23,U+8e40,U+8e94,U+8fd5,U+9058,U+90b6,U+914e,U+91a2,U+91b5,U+943e,U+955f,U+963d,U+9794,U+97ab,U+9ab1,U+9ad1,U+9b0f,U+9b2f,U+9ee5,U+9ef9,U+9efb-9efc,U+9fa0}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(18.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4e93,U+4ebb,U+4ec4,U+4ef5,U+4f7b,U+502c,U+5080,U+5121,U+51c7,U+5208,U+52f0,U+530f,U+53f5,U+5464,U+5466,U+54a3,U+54bf,U+54d0,U+5549,U+555c,U+5576,U+558f,U+55b1,U+55f2,U+55f5,U+564c,U+5685,U+56e1,U+571c,U+57a1,U+5807,U+58c5,U+59a4,U+59af,U+59d8,U+5a09,U+5a0c,U+5a4a,U+5a67,U+5b6c,U+5c50,U+5c7a,U+5ca2,U+5d27,U+5d6c,U+5df3,U+5e19,U+5ea0,U+5eb9,U+5ebe,U+5fea,U+6042,U+6175,U+6215,U+6221,U+62bb,U+6308,U+6339,U+643d,U+6441,U+64e2,U+6555,U+659b,U+6677,U+6775,U+678b,U+6832,U+6840,U+68f0,U+6910,U+6934,U+6966,U+6998,U+69ce,U+6a3d,U+6a84,U+6bd6,U+6bfd,U+6c16,U+6c18,U+6cd4,U+6d0c,U+6d60,U+6ddd,U+6ecf,U+6ed3,U+6fb9,U+7023,U+70b7,U+70ca,U+712f,U+7168,U+7284,U+72d9,U+7352,U+73c8,U+740a,U+7441,U+7457,U+75a3,U+75d8,U+75e3-75e4,U+75ff,U+7610,U+7622,U+7688,U+76b4,U+76e5,U+772d,U+7812,U+7818,U+784c,U+7850,U+7887,U+789a,U+78b2,U+78f4,U+7b1e,U+7b24,U+7bb8,U+7bc1,U+7bd9,U+7ccc,U+7f71,U+7fa7,U+7fe6,U+7ff3,U+8052,U+8084,U+8093,U+80b1,U+80e4,U+80ef,U+80f4,U+81ec,U+8202,U+8210,U+828a,U+828e,U+82a8,U+82e3,U+8331,U+83a8,U+83aa,U+83e1,U+84ca,U+84fc,U+853b,U+857b,U+8605,U+8662,U+86b1,U+86b4,U+86c9,U+86ed,U+8725,U+874c,U+8763,U+879f,U+87b3,U+887d,U+88fe,U+89e5,U+8c47,U+8c49,U+8c7a,U+8dd7,U+8e59,U+8e69,U+8e85,U+902f,U+9099,U+909b,U+90c7,U+9143,U+914a,U+91ae,U+91ba,U+975b,U+977c,U+9ab6-9ab7,U+9afb,U+9ecd,U+9edc}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(20.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4e47,U+4f89,U+5261,U+52ac,U+531a,U+5416,U+5454,U+5472,U+5478,U+54bb,U+54c2,U+54de,U+553f,U+55e5,U+560c,U+566b,U+572e,U+5769,U+5793,U+57d2,U+57e4,U+581e,U+5924,U+593c,U+5997,U+59a3,U+5ab8,U+5ad8,U+5b34,U+5b53,U+5ba5,U+5c59,U+5c63,U+5e11,U+5e14,U+5ed1,U+5f40,U+5fbc,U+600d,U+6019,U+605a,U+610e,U+623d,U+624c,U+634c,U+65d2,U+65f0,U+66f7,U+670a,U+6753,U+67e2,U+67f0,U+6855,U+686b,U+6874,U+6939,U+696e,U+6980,U+6a17,U+6aab,U+6b82,U+6b84,U+6bf3,U+6c06,U+6c19-6c1a,U+6d07,U+6d1a,U+6d27,U+6d2b,U+6d91,U+6e6b,U+6e8f,U+6fde,U+7085,U+70bb,U+723b,U+726e,U+72b0,U+72ce,U+72fa,U+7301,U+731e,U+7322,U+738e,U+755a,U+7594,U+75b3,U+760c,U+7615,U+7654,U+771a,U+7765,U+7768,U+77ec,U+78d4,U+78d9,U+7913,U+7957,U+79d5,U+79eb,U+7a70,U+7a86,U+7b25,U+7b2a,U+7b38,U+7b47,U+7b72,U+7c26,U+7dae,U+7e9b,U+7f36,U+7fee,U+801c,U+8043,U+809f,U+80ab,U+80cd,U+80d7,U+8118,U+8188,U+81cc,U+823e,U+8298,U+82ca,U+82e4,U+82f4,U+8306,U+833a,U+83d4,U+83df,U+8401,U+8451,U+846d,U+8476,U+8478,U+84ba,U+851f,U+8556,U+8585,U+867a,U+868b,U+868d,U+8734,U+8765,U+87ca,U+87ee,U+8832,U+8872,U+887e,U+88a2,U+88b7,U+88c9,U+8c55,U+8c73,U+8c78,U+8d67,U+8d91,U+8deb-8dec,U+8dfd,U+8e14,U+8e41,U+8fe8,U+900b,U+9011,U+915e,U+9162,U+9172,U+9185,U+918c,U+9190,U+92c8,U+96ce,U+96e9,U+9785,U+992e,U+9954-9955,U+9ab0,U+9ac1,U+9b1f,U+9b32,U+9b4d,U+9ee7,U+9f22}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(19.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4e5c,U+4e8d,U+4edf,U+4f32,U+4f5e,U+4f76,U+5028,U+5048,U+50ee,U+520e,U+535f,U+5412,U+5443,U+54a6,U+5533,U+5541,U+5550,U+5556,U+5577,U+5591,U+55dd,U+560f,U+5627,U+562c,U+5657-5658,U+5664,U+567b,U+56d4,U+577c,U+578c,U+5800,U+5889,U+5a62,U+5aeb,U+5c3b,U+5ca3,U+5cac,U+5d26,U+5d9d,U+5db7,U+5edb,U+5f01,U+5f2d,U+5fb5,U+5fdd,U+5ff8,U+6029,U+6041,U+60b1,U+6222,U+623e,U+638a,U+63e0,U+647a,U+6485,U+65ab,U+65c3,U+65c6,U+6600,U+668c,U+669d,U+66be,U+66e9,U+67c1,U+67d2,U+6877,U+68fc,U+690b,U+6978,U+69a7,U+69c1,U+6a3e,U+6a50,U+6a5b,U+6a97,U+6b8d,U+6baa,U+6c10,U+6c3d,U+6c54,U+6ceb,U+6cee,U+6d04,U+6de0,U+6eb1,U+6ebd,U+7110,U+71b3,U+71f9,U+7230,U+728d,U+7292,U+72d2,U+7360,U+73a2,U+73b3,U+74ff,U+7511,U+75a5,U+75e7,U+7619,U+7633,U+779f,U+7826,U+7829,U+782c,U+7a39,U+7aa8,U+7ae6,U+7b04,U+7b0f,U+7bac,U+7c1f,U+7f45,U+7f5f,U+7faf,U+7fbf,U+7fd5,U+7fe5,U+80bc,U+80db,U+80dd,U+8132,U+815a,U+8167,U+81ca,U+8228,U+8244,U+8249,U+824f,U+82a1,U+82a9,U+82ab,U+82b4,U+8351,U+8378,U+83d8,U+83ea,U+83f0,U+8497,U+84c1,U+8538,U+858f,U+859c,U+85ff,U+867b,U+86a8-86a9,U+870a,U+8722,U+876e,U+87e5,U+8888,U+88df,U+8919,U+8921,U+8db5,U+8dbf,U+8e05,U+8e1f,U+9021,U+9044,U+9062,U+908b,U+90b4,U+90eb,U+90fe,U+9123,U+9146,U+918d,U+91aa,U+93ca,U+96b9,U+96d2,U+9708,U+9ac2,U+9b23,U+9b3b,U+9ecf}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(16.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4ee8,U+4f09,U+4f22,U+4f43,U+4f57,U+4f5d,U+4f6f,U+4fce,U+4ff3,U+4ff8,U+500c,U+500f,U+502d,U+504e,U+5088,U+5345,U+53fb,U+5482,U+54a7,U+54cc,U+550f,U+5544,U+558b,U+5594,U+559f,U+55d6,U+55e8,U+55ef,U+564e,U+5704,U+57ed,U+5914,U+5958,U+599e,U+5a40,U+5ae1,U+5ae6,U+5b40,U+5b93,U+5c9c,U+5ccb,U+5d2e,U+5d47,U+5d4b,U+5d99,U+5e54,U+5e61,U+6014,U+608c,U+609a,U+60f4,U+60fa,U+61ff,U+621b,U+622e,U+63ae,U+63cd,U+6410,U+6414,U+64d8,U+6710,U+6748,U+6772,U+67b0,U+67b7,U+6954,U+695d,U+69ab,U+6c68,U+6c8f,U+6d2e,U+6dd9,U+6dec,U+6e4e,U+6e98,U+6ec2,U+6f66,U+6f8d,U+6fc9,U+6fe0,U+7094,U+7119,U+723f,U+729f,U+73de,U+7430,U+74e4,U+753e,U+7548,U+75bd,U+75cd,U+7634,U+76c5,U+76f1,U+7708,U+778c,U+7791,U+77b3,U+77dc,U+781d,U+7823,U+7827,U+782d,U+7830,U+783c,U+7893,U+78a3,U+78ec,U+7949,U+79e3,U+7a14,U+7a95,U+7aa0,U+7afd,U+7b90,U+7b95,U+7bfe,U+7c0c,U+7c91,U+7cc5,U+7da6,U+7f61,U+7fca,U+8006,U+807f,U+80bd,U+814b,U+8174,U+8198,U+8200,U+828d,U+82c4,U+82d2,U+82d5,U+82f7,U+832d,U+834f,U+840b,U+8438,U+847a,U+84d6,U+852b,U+85d0,U+86a4,U+86f9,U+8703,U+8707,U+8737,U+873b,U+8782,U+87d2,U+87e0,U+8839,U+8913,U+8a07,U+8c4c,U+8dce,U+8ddb,U+8dfa,U+8e09,U+8e1d,U+8e31,U+8e39,U+8e42,U+8e49,U+8e6d,U+8e76,U+9004,U+9036,U+9097,U+90d7,U+90dc,U+90e2,U+90ef,U+9104,U+9169,U+919a,U+91b4,U+938f,U+970e,U+973e,U+9798,U+97a3,U+9997,U+9f3e}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(17.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4edd-4ede,U+4ee1,U+4eeb,U+4fda,U+4ffe,U+5025,U+50f3,U+5106,U+5241,U+525c,U+52ad,U+530d,U+5310,U+539d,U+53df,U+53fc,U+5421,U+544b,U+5477,U+54e7,U+5514,U+5530,U+5555,U+557e,U+5599,U+55b9,U+55c4,U+55d1,U+55d4,U+55df,U+55e4,U+55ea,U+5623,U+562d,U+5654,U+5671,U+56d7,U+56eb,U+56f9,U+576d,U+57d5,U+584d,U+5880,U+58ec,U+59be,U+59dd,U+5a55,U+5abe,U+5b51,U+5b71,U+5bee,U+5cd2,U+5d06,U+5d6f,U+5dfd,U+5e5b,U+5e96,U+5fd2,U+600f,U+606b,U+62bf,U+634b,U+636d,U+6371,U+6387,U+63c4,U+63c6,U+63d6,U+63f6,U+6421,U+64c0,U+661d,U+6657,U+66dc,U+6841,U+6849,U+699b,U+6a28,U+6a47,U+6b46,U+6c21,U+6c24,U+6c35,U+6c4a,U+6c86,U+6c94,U+6cc5,U+6d39,U+6d63,U+6d6f,U+6d94,U+6fef,U+705e,U+71e7,U+726f,U+7325,U+7350,U+73d9,U+741a,U+757f,U+7583,U+759d,U+75b8,U+75c2,U+75f1,U+7699,U+7719,U+777e,U+7889,U+795c,U+7a17,U+7a88,U+7b08,U+7b33,U+7be6,U+7c2a,U+7cb2,U+7f58,U+7fb8,U+8012,U+8026,U+8037,U+8153,U+8171,U+8214,U+821b,U+8222,U+826e,U+82be,U+82dc,U+82eb,U+830c,U+8334,U+83c5,U+83d6,U+83fd,U+8418,U+843c,U+8473,U+84a1,U+84ff,U+8564,U+8693,U+86a3,U+86a7,U+86aa,U+86af,U+86b6,U+86c6,U+86d0,U+8708-8709,U+870d,U+8759,U+8760,U+87af,U+87c6,U+87d1,U+8869,U+8a3e,U+8b07,U+8c62,U+8c89,U+8d6d,U+8d84,U+8d94,U+8dc6,U+8e2e,U+8e3d,U+8e47,U+8e4b,U+9005,U+9016,U+9051,U+907d,U+9082,U+9088,U+90b0,U+9150,U+965f,U+9697,U+96b0,U+96bc,U+9aef,U+9e82,U+9edf-9ee0}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(15.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4e2b,U+4eb3,U+4ec9,U+4f0e,U+4f5a,U+4f64,U+4f8f,U+4fdf,U+501c,U+510b,U+51bc,U+527d,U+52be,U+5420,U+5429,U+542e,U+5486,U+54af,U+54c6,U+5506,U+5511,U+552c,U+55b3,U+55d2,U+55e6,U+55fd,U+5639,U+5659,U+5662,U+568e,U+5693,U+572a,U+5768,U+577b,U+5892,U+598a,U+5992,U+5a11,U+5a20,U+5ae3,U+5b17,U+5b7d,U+5bb8,U+5c15,U+5cc1,U+5d34,U+5d3d,U+5d4a,U+5d82,U+5e1a-5e1b,U+5ea5,U+5f77,U+5fd0-5fd1,U+5fd6,U+5fff,U+6035,U+6063,U+60b4,U+60bb,U+60c6,U+60da,U+612b,U+6194,U+61ca,U+61e6,U+61f5,U+620a,U+621f,U+6248,U+62c8,U+62d7,U+63e9,U+655d,U+65bc,U+65cc,U+65ce,U+65d6,U+6641,U+664c,U+665f,U+66b9,U+6773,U+6777,U+6787,U+67e9,U+6845,U+684e,U+688f,U+693d,U+696b,U+6994,U+69b7,U+6a35,U+6a58,U+6c26,U+6d35,U+6d5c,U+6d8e,U+6dd6,U+6e6e,U+6e9f,U+6ef9,U+6f09,U+6f2a,U+6f78,U+6fc2,U+714a,U+71b9,U+7337,U+733e,U+73b7,U+7428,U+742c,U+74f4,U+7525,U+753a,U+7566,U+7579,U+75e2,U+75fc,U+7638,U+7678,U+768e,U+76c2,U+76f9,U+7762,U+77cd,U+77fd,U+7825,U+7837,U+78b4,U+795f,U+7a1e,U+7b06,U+7b20,U+7bdd,U+7cb3,U+7cdc,U+7f44,U+7f54,U+7f94,U+8004,U+800b,U+8019,U+809b,U+80ed,U+80f1,U+8146,U+816e,U+81c0,U+81fc,U+81fe,U+832f,U+8340,U+8392,U+83a0,U+84af,U+869c,U+8713,U+8718,U+87c0,U+87cb,U+87fe,U+8815,U+8821,U+8902,U+8936,U+8d73,U+8fe4,U+9041,U+9052,U+905b,U+9095,U+90c5,U+911e,U+9122,U+916a,U+919b,U+9621,U+9631,U+96c9,U+9739,U+99a5,U+9b03,U+9ebe,U+9f10}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(13.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4e56,U+4f58,U+4f6c,U+4f70,U+4fd0,U+5014,U+5197,U+51bd,U+524c,U+5315,U+5323,U+53e8,U+5406,U+540f,U+542d,U+548e,U+549a,U+54ab,U+54e6,U+54ee,U+54fc,U+556a,U+5583,U+55e3,U+5600,U+5669,U+56ff,U+573b,U+574d,U+586c,U+58f9,U+592f,U+5944,U+595a,U+598d,U+5993,U+5996,U+59ca,U+5a7f,U+5b7a,U+5ba6,U+5c4e,U+5e4c,U+5eb6,U+5f08,U+5f1b,U+602f,U+6059,U+606c,U+608d,U+60cb,U+61a9,U+620c,U+6233,U+6249,U+62a8,U+62c4,U+62ed,U+62f4,U+62f7,U+62fd,U+6345,U+6382,U+6396,U+63c9,U+6413,U+642a,U+645e,U+6487,U+64a9,U+64ac,U+6556,U+659f,U+65a1,U+6615,U+667e,U+6a80,U+6aac,U+6b83,U+6b86,U+6c30,U+6c50,U+6c5e,U+6c76,U+6c85,U+6cad,U+6d19,U+6d31,U+6d93,U+6dae,U+6dbf,U+6e25,U+6e4d,U+6e5f,U+6ec1,U+6f31,U+6f5e,U+6f7a,U+6f7c,U+6fa7,U+701b,U+70ab,U+70f7,U+717d,U+71a8,U+7252,U+72c4,U+72e1,U+72e9,U+73c0,U+73c2,U+745a,U+74e2,U+752d,U+7599,U+75a4,U+75f0,U+7600-7601,U+7629,U+768b,U+76bf,U+76d4,U+776c,U+77a0,U+77b0,U+78fa,U+7940,U+7a37,U+7a92,U+7afa,U+7b19,U+7b71,U+7b94,U+7cb1,U+7ce0,U+7cef,U+7fe1,U+80e5,U+812f,U+8148,U+819b,U+81ba,U+81c3,U+8235,U+828b,U+82ae,U+82b7,U+8309,U+8338,U+837c,U+8393,U+83c1,U+8431,U+8469,U+84bf,U+84d3,U+86db,U+86fe,U+8712,U+873f,U+8757,U+8783,U+8822,U+8859,U+8882,U+8892,U+88a4,U+88f3,U+892a,U+8d66,U+8dda,U+8e74,U+8fc2,U+8fe5-8fe6,U+900d,U+9068,U+90b3,U+90b8,U+9119,U+9131,U+915a,U+9163,U+9170,U+965b,U+96cc,U+96f9,U+9774,U+9ab8,U+9e8b,U+9e92,U+9eef}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(14.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4e15,U+4e1e,U+4f3d,U+5043,U+5055,U+5140,U+51cb,U+5243,U+531d,U+535e,U+536f,U+53a5,U+53f1,U+541d,U+5431,U+547b,U+5492,U+54aa,U+54ce,U+54fd,U+5509,U+553e,U+557b,U+55c5,U+55e1,U+55f7,U+5608,U+561f,U+5636,U+563b,U+563f,U+5773,U+57a0,U+57b8,U+57c2,U+587e,U+58d5,U+59e3,U+5a29,U+5a6a,U+5a7a,U+5ac9,U+5b62,U+5b95,U+5c8c,U+5cab,U+5cb7,U+5e44,U+5e7a,U+5eff,U+5f0b,U+5f29,U+5f89,U+5f99,U+5f9c,U+5fa8,U+6026,U+6043,U+60b8,U+60d8,U+60f0,U+6115,U+618e,U+630e,U+637a,U+6390,U+63a3,U+63ac,U+63b0,U+64ae,U+6525,U+652b,U+6538,U+65ee-65ef,U+6631,U+6636,U+6666,U+6684,U+66f3,U+677c,U+67b8,U+67d8,U+67de,U+6886,U+68b5,U+6963,U+6979,U+6b59,U+6c69,U+6c74,U+6c8c,U+6cae,U+6ce0,U+6cef,U+6d95,U+6db8,U+6dc5,U+6dde,U+6de6,U+6dfc,U+6e1a,U+6ea7,U+6eb4,U+6f15,U+6f29,U+6fe1,U+7131,U+715c,U+7166,U+7172,U+7317,U+731d,U+7329,U+7396,U+73e9,U+7425,U+742e,U+7455,U+7490,U+7519,U+75b5,U+75b9,U+75d4,U+75de,U+7656,U+765c,U+7728-7729,U+777d,U+77f8,U+787c,U+78d0,U+795a,U+79ed,U+7a79,U+7abf,U+7b4f,U+7b60,U+7b75,U+7b8d,U+7bb4,U+7be1,U+7cbc,U+7f8c,U+7fb2,U+7fb9,U+7fce,U+808b,U+81c6,U+822b,U+82a5,U+82aa,U+82de,U+8317,U+8343,U+8543,U+854a,U+8559,U+8568,U+85b0,U+85b9,U+8638,U+86c0,U+86e4,U+88e8,U+88f1,U+8983,U+8c5a,U+8c82,U+8dbe,U+8e7c,U+8e87,U+9035,U+9074,U+90a1,U+9149,U+9157,U+916e,U+93d6,U+9642,U+968d,U+9706,U+970f,U+97ed,U+9abc,U+9e9d,U+9edb,U+9edd}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(12.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4e10,U+4ea2,U+4ea5,U+4ec3,U+4f36,U+4f3a,U+4f5f,U+4f84,U+4f88,U+4f8d,U+4f97,U+501a,U+5029,U+504c,U+51a5,U+51f8,U+5201,U+52fa,U+5321,U+5352,U+5366,U+53e9,U+543c,U+5471,U+5480,U+5495,U+54b3,U+54c7,U+557c,U+55dc,U+5632,U+566c,U+5676,U+56b7,U+56da,U+56e4,U+5703,U+57a2-57a3,U+58d1,U+5919,U+592d,U+5955,U+5983,U+59e5,U+5a13,U+5b09,U+5b70,U+5b75,U+5bd0,U+5bf0,U+5c41,U+5c91,U+5c94,U+5ced,U+5d69,U+5e16,U+5f3c,U+6020,U+604d,U+6055,U+60e6,U+618b,U+61a7,U+61ac,U+61cb,U+62ce,U+62d9,U+62ee,U+634e,U+63ea,U+6452,U+6479,U+6482,U+64ce,U+64d2,U+660a,U+664f,U+66e6,U+675e,U+67c4,U+67da,U+6853,U+68a2,U+68fa,U+693f,U+6942,U+695e,U+69ad,U+69b4,U+6b89,U+6bcb,U+6c40,U+6cb1,U+6cf1,U+6d85,U+6daa,U+6dc6-6dc7,U+6e32,U+6e3a,U+6e43,U+6eba,U+6f3e,U+6f88,U+6fee,U+70d9,U+7109,U+7184,U+71ee,U+722a,U+733f,U+7409,U+7435-7436,U+7459,U+747e,U+748b,U+749c,U+749e,U+7504,U+752c,U+759a,U+75ca,U+761f-7620,U+7738,U+773a,U+777f,U+7785,U+77a5,U+77aa,U+77bf,U+78be,U+78d5,U+7934,U+795b,U+79a7,U+7a20,U+7a96,U+7b28,U+7b50,U+7b77,U+7c27,U+7c38,U+7c95,U+7f79,U+7f9a,U+7fcc,U+8046,U+8098,U+80da,U+80f0,U+80f3,U+8165,U+8237-8238,U+8299,U+82d3,U+8301,U+831c,U+8398,U+83bd,U+83e0,U+83e9,U+8475,U+85d5,U+85e9,U+8654,U+86df,U+871a,U+888d,U+8910,U+891a,U+8925,U+8db4,U+8de4,U+8e1e,U+8e66,U+8e6c,U+901e,U+9083,U+90e1,U+90f4,U+912f,U+9165,U+91c9,U+91dc,U+962a,U+9685,U+9704,U+9773,U+9776}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(11.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4fae,U+4fd8,U+4fef,U+50a3,U+516e,U+5189,U+5195,U+51f3,U+51f9,U+5228,U+527f,U+5288,U+52ff,U+533f,U+5351,U+53db,U+53ed,U+5484,U+5490,U+54c9,U+54e9,U+5501,U+5543,U+55d3,U+56bc,U+5729,U+589f,U+5984,U+59ec,U+5a25,U+5a36,U+5a77,U+5a9a-5a9b,U+5ab2,U+5ac2,U+5ad6,U+5bc7,U+5c2c,U+5c51,U+5c79,U+5cd9,U+5d0e,U+5deb,U+5e87,U+5ed3,U+5f13,U+5f27,U+5f64,U+5fe1,U+5ffb,U+606a,U+6096,U+60df,U+60f6,U+60f9,U+61a8,U+620d-620e,U+6241,U+6252,U+6273,U+627c,U+6289,U+62c2,U+62c7,U+62cc,U+62ef,U+634d,U+63e3,U+6518,U+66ae,U+6726,U+6756,U+6789,U+6813,U+6829,U+6893,U+6897,U+68e3,U+690e,U+6995,U+69a8,U+69cc,U+6a1f,U+6a44,U+6a59,U+6bd3,U+6c13,U+6c90,U+6cbd,U+6ccc,U+6cd3,U+6cd7,U+6d5a,U+6dcc,U+6e44,U+6ea5,U+6f2f,U+6f8e,U+701a,U+7078,U+7095,U+7099,U+70af,U+70fd,U+714e,U+715e,U+71a0,U+71ce,U+7235,U+7239,U+7280,U+72d0,U+73ab,U+745c,U+7480,U+74a7-74a8,U+74e3,U+75f9,U+7693,U+76ce,U+7736,U+776b,U+778e,U+77e2-77e3,U+7852,U+789f,U+7948,U+7960,U+797a,U+79ba,U+79be,U+79f8,U+7a98,U+7aff,U+7b1b,U+7bc6,U+7cd9,U+7d0a,U+7d6e,U+7e82,U+800d,U+80fa,U+8116,U+8151,U+818a,U+81b3,U+81e7,U+8205,U+82db,U+832c,U+8335,U+8339,U+837b,U+8386,U+83cf,U+846b,U+8587,U+85c9,U+85dc,U+8611,U+868a,U+868c,U+8774,U+88d8,U+88f4,U+8912,U+8b6c,U+8c41,U+8c79,U+8dea,U+8e35,U+8e4a,U+8fe2,U+9017,U+914c,U+916f,U+9175-9176,U+918b,U+9640,U+9672,U+968b,U+9698,U+96cd,U+96ef,U+9713,U+9e93}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(10.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4e4d,U+4e5e,U+4ed5,U+4f51,U+5018,U+5026,U+508d,U+50da,U+50e7,U+515c,U+51a4,U+5203,U+5254,U+533e,U+5375,U+53ee,U+5435,U+543b,U+548b,U+54fa,U+5587,U+5598,U+55a7,U+560e,U+576f,U+5777,U+57ae,U+5830,U+58a9,U+5937,U+5962,U+59e8,U+5a23,U+5a3c,U+5a49,U+5b5a,U+5bb5,U+5bc5,U+5bde,U+5be1,U+5c09,U+5cb1,U+5cea,U+5d29,U+5d4c,U+5f57,U+5f87,U+5ff1,U+6016,U+6021,U+606d,U+614c,U+6177,U+625b,U+6296,U+62f1,U+634f,U+63a0,U+6467,U+6495,U+64bc,U+64c2,U+6577,U+6590,U+65a7,U+6627,U+6643,U+6687,U+66dd,U+6714,U+6795,U+67d1,U+67ff,U+68b3,U+68cd,U+68d5,U+68d8,U+68e0,U+6930,U+6960,U+6977,U+69bb,U+69d0,U+6bd7,U+6c2e-6c2f,U+6c72,U+6c7e,U+6c81,U+6cbc,U+6ce3,U+6de4,U+6df3,U+6e2d,U+6ec7,U+6ed5,U+6f33,U+6f62,U+6fa1,U+7011,U+707c,U+708a,U+70d8,U+70f9,U+711a,U+7130,U+716e,U+7194,U+71ac,U+71e5,U+7281,U+7316,U+7357,U+7384,U+73ca,U+7422,U+7426,U+742a,U+745b,U+745f,U+7578,U+77a7,U+77d7,U+77ee,U+780c,U+785d,U+78c5,U+7941,U+79e4,U+7a1a,U+7bf7,U+7c07,U+7c3f,U+7c9f,U+7ca5,U+7cb9,U+7cdf,U+7f38,U+7f9e,U+7fdf,U+7fe9,U+803d,U+80aa,U+80d6,U+813e,U+8155,U+817a,U+819d,U+81fb,U+821c,U+82ad,U+82b9,U+82df,U+82ef,U+8304,U+8354,U+8446,U+853d,U+8549,U+85af,U+85fb,U+8650,U+865e,U+86d9,U+8700,U+8862,U+88d4,U+88f8-88f9,U+895f,U+8a79,U+8dcb,U+8e29,U+8e44,U+8e72,U+8e81,U+8eac,U+9050,U+9091,U+914b,U+962e,U+9661,U+9699,U+9716,U+9761,U+97a0,U+97f6,U+9ae6}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(9.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4e19,U+4e38,U+4ea8,U+4f7c,U+4f83,U+4fd1,U+4ffa,U+502a,U+50fb,U+5154,U+5162,U+51f0,U+5256,U+52c9,U+5308,U+5319,U+5320,U+532a,U+5384,U+541f,U+5475,U+5496,U+54ac,U+54c0,U+54e8,U+5561,U+5589,U+561b,U+57e0,U+5885,U+5974,U+59ae,U+5a1f,U+5ab3,U+5acc,U+5b99,U+5b9b,U+5be5,U+5c6f,U+5c90,U+5d16,U+5dcd,U+5e37,U+5e9a,U+5f6a,U+5f8a,U+5f98,U+5fcc,U+6012,U+6068,U+6094,U+60bc,U+60d5,U+6109,U+611a,U+6254,U+626e-626f,U+6284,U+6292,U+62b9,U+62d0,U+62fe,U+6454,U+6674,U+66d9,U+66f0,U+673d,U+6749,U+67af,U+6854,U+68a7-68a8,U+68ad,U+68f5,U+6912,U+6986,U+69fd,U+6b47,U+6b49,U+6b6a,U+6c1f,U+6c28,U+6c5d,U+6cab,U+6cb8,U+6cf5,U+6d78,U+6dc4,U+6dcb,U+6e1d,U+6e23,U+6e9c,U+6eb6,U+6ed4,U+6f84,U+70ac,U+72fc,U+731c,U+7334,U+7470,U+7529,U+752b,U+75d5,U+7696,U+76ef,U+7720,U+7737,U+7766,U+77ac,U+77bb,U+7838,U+788c,U+78ca,U+7901,U+796d,U+79b9,U+79c9,U+79e7,U+7a3c-7a3d,U+7a57,U+7a74,U+7a84,U+7a9f,U+7b52,U+7c7d,U+7f69,U+7fc5,U+8018,U+803f,U+8086-8087,U+808c,U+809a,U+80a2,U+810a,U+8180,U+818f,U+81ed,U+820c,U+8292,U+82af,U+82bd,U+82d1,U+839e,U+83c7,U+83f1,U+8403,U+840c,U+840e,U+849c,U+84b2,U+84c9,U+8513,U+8517,U+851a,U+85e4,U+871c,U+8776,U+87ba,U+87f9,U+88d9,U+8a93,U+8d81,U+8d9f,U+8e22,U+8eb2,U+8eba,U+8fa8,U+8fed,U+901b,U+902e,U+9038,U+9042,U+904f,U+906e,U+90aa,U+90af,U+90dd,U+9102,U+9187,U+946b,U+964b-964c,U+96c0-96c1,U+971c,U+9756,U+99a8,U+9ad3,U+9b41,U+9e9f,U+9ed4}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(8.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4e52-4e53,U+4e7e,U+4e9f,U+4ed7,U+4ef0,U+4f50,U+4fcf,U+50ac,U+50b2,U+5112,U+5180,U+52df,U+52fe,U+5349,U+5378,U+537f,U+53c9,U+53d4,U+543e,U+5440,U+5565-5566,U+5580,U+55bb,U+56ca,U+572d,U+573e,U+574e,U+5764,U+576a,U+5782-5783,U+584c,U+5948,U+594e,U+5951,U+59a8,U+59fb,U+5a1c,U+5ae9,U+5b55,U+5b5c,U+5bb0,U+5bc2,U+5bd3,U+5bf8,U+5c39,U+5c3f,U+5c60,U+5d14,U+5df7,U+5dfe,U+5e06,U+5e62,U+5e7b,U+5e7d,U+5eb8,U+5ed6,U+5f6c,U+609f,U+6101,U+6127,U+6148,U+61be,U+6247,U+62d8,U+62da,U+632b,U+6349,U+6367,U+6380,U+638f,U+63a9,U+64b0,U+64e6,U+655e,U+6572,U+6591,U+65a5,U+65ed,U+660f,U+6691,U+66a8,U+674f,U+67d4,U+67ef,U+6850,U+6876,U+68d2,U+6905,U+6a0a,U+6a61,U+6b79,U+6bb7,U+6bbf,U+6bef,U+6c41,U+6c55,U+6c82-6c83,U+6c9b,U+6d74,U+6daf,U+6dd1,U+6dd8,U+6deb,U+6df9,U+6e24,U+6e5b,U+6ea2,U+6ef4,U+6f06,U+6f6d,U+70b3,U+70e4,U+70ef,U+710a,U+7199,U+722c,U+723d,U+725f,U+7261,U+72ac,U+7433,U+7538,U+754f,U+7554,U+75bc,U+7624,U+7626,U+76d2,U+7709,U+7779,U+7784,U+7802,U+780d,U+786b,U+7898,U+78a7,U+78b3,U+78cb,U+78f7,U+7aed,U+7c92,U+7c98,U+7cca,U+7f55,U+7fc1,U+7fd4,U+7fe0,U+7ff0,U+7ffc,U+804a,U+80ba,U+80c3,U+8102,U+8106,U+8154,U+81c2,U+8247,U+8258,U+8328,U+832b,U+8389,U+838e,U+83ca,U+845b,U+846c,U+84b8,U+857e,U+859b,U+86c7,U+8702,U+884d,U+8896,U+88b1,U+8944,U+8f9c,U+8fa3,U+8fb1,U+8fc4,U+9006,U+9063,U+90a2,U+90b1,U+90b5,U+9177,U+9189,U+961c,U+96a7,U+978d,U+97ad,U+9b3c,U+9b44-9b45,U+9b54,U+9f0e,U+9f3b}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(7.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4e08,U+4e18,U+4e32,U+4e59,U+4e73,U+4ead,U+4ed4,U+4ed9,U+4f0f,U+4faf,U+5076,U+5085,U+5144,U+5146,U+51fd,U+524a,U+526a,U+52ab,U+5306,U+5339,U+5353,U+5410,U+5439,U+54b1,U+54ed,U+5564,U+558a,U+5634,U+574a,U+5751,U+57cb,U+57d4,U+5806,U+5824,U+582a,U+5835,U+5858,U+5893,U+58e4,U+5915,U+5960,U+5999,U+59a5,U+59b9,U+59c6,U+59da,U+59ff,U+5a03,U+5a46,U+5ac1,U+5b5d,U+5b64,U+5bb4,U+5bfa,U+5c16,U+5c3a,U+5c3e,U+5c48,U+5cfb,U+5d1b,U+5de1,U+5e15,U+5e3d,U+5eca,U+5ef7,U+5f0a,U+5f17-5f18,U+5f7c,U+5fcd,U+6028,U+6084,U+60a0,U+60d1,U+614e,U+6155,U+6168,U+61c8,U+6208,U+6212,U+62ab,U+62f3,U+62fc,U+632a,U+633a,U+6398,U+63cf,U+63d2,U+642d,U+6492,U+649e,U+64c5,U+6500,U+659c,U+6602,U+6614,U+662d,U+6664,U+6670,U+6676,U+679d,U+67cf,U+682a,U+683d,U+6843,U+6846,U+684c,U+68af,U+68da,U+699c,U+6b3a,U+6b67,U+6c1b,U+6c27,U+6c5b,U+6c70,U+6cca,U+6ce1,U+6d3d,U+6d82,U+6db5,U+6e34,U+6e58,U+6f02,U+6f0f,U+6f58,U+7070,U+7092,U+718a,U+7238,U+7262,U+7272,U+72c2,U+72d7,U+72e0,U+73b2,U+751c,U+758f,U+75b2,U+764c,U+7686,U+76c6,U+76fc,U+775b,U+7761,U+788e,U+7891,U+7897,U+78b0,U+78c1,U+79bd,U+7a00,U+7a0d,U+7ae3,U+7bad,U+7d2b,U+7f50,U+7fbd,U+8036,U+809d,U+80a9,U+80ce,U+80f8,U+8170,U+8179,U+817f,U+819c,U+81e3,U+821f,U+8236,U+829d,U+82ac,U+8302,U+8305,U+83cc,U+8404,U+840d,U+8461,U+8482,U+84ec,U+8521,U+85aa,U+8679,U+886b,U+8870,U+8877,U+8881,U+88c2,U+8c6b,U+8dcc,U+8e48,U+8fb0,U+901d,U+9022,U+903c,U+90ce,U+916c,U+96d5,U+970d,U+971e,U+9738,U+9b42,U+9b4f,U+9e7f}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(6.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4e01,U+4e43,U+4ea6,U+4ef2,U+4f2f,U+4f38,U+4f69,U+4fd7,U+4ff1,U+5021,U+5141,U+51b6,U+51dd,U+5200,U+5237,U+523a,U+5272,U+52d8,U+5401,U+541b,U+5427,U+5448,U+554a,U+559d,U+5609,U+5740,U+57c3,U+5821,U+586b,U+58a8,U+58c1,U+594f,U+5976,U+59bb,U+59d0-59d1,U+59d3,U+5a92,U+5b54,U+5b5f,U+5b85,U+5b87,U+5bbf,U+5bc4,U+5bd2,U+5be8,U+5c65,U+5d07,U+5de7,U+5e1d,U+5e7c,U+5f04,U+5f1f,U+5f6d,U+5f70,U+5f79,U+5f92,U+5faa,U+5fbd,U+5ffd,U+602a,U+6050,U+6070,U+60a8,U+60b2,U+60dc,U+6162,U+6167,U+6170,U+61c2,U+622a,U+6234,U+626d,U+6291,U+62b1,U+62bc,U+62c6,U+62d2,U+62d4,U+62d6,U+6316,U+6355,U+6377,U+63ed,U+640f,U+642c,U+6458,U+6478,U+64a4,U+6566,U+658c,U+65c1,U+65e8,U+65ec,U+65f1,U+6628,U+6668,U+6696,U+66f9,U+66fc,U+66ff,U+6717,U+675c,U+676d,U+679a,U+67ec,U+67f1,U+67f3-67f4,U+6842,U+6851,U+695a,U+6b20,U+6b23,U+6b96,U+6bc5,U+6beb,U+6c0f,U+6c57,U+6c60,U+6c6a,U+6cf3,U+6d1e,U+6d66,U+6d69,U+6d6e,U+6db2,U+6de1,U+6dee,U+6dfb,U+6eaa,U+6ecb,U+6ed1,U+6f20,U+6f2b,U+704c,U+708e,U+70ad,U+70b8,U+7126,U+714c,U+71c3,U+71d5,U+7206,U+731b,U+73bb,U+741b,U+7434,U+7483,U+74dc,U+74f7,U+7532,U+755c,U+75ab,U+7687,U+76f2,U+78e8,U+79d2,U+79e6,U+79e9,U+7a3b,U+7a3f,U+7a46,U+7a97,U+7af9,U+7c4d,U+7c89,U+7c97,U+8000,U+8010,U+8017,U+8033,U+8096,U+80de,U+81a8,U+8212,U+827e,U+82b3,U+82d7,U+8377,U+83f2,U+84c4,U+8584,U+864e,U+86cb,U+888b,U+88d5,U+8986,U+8c46,U+8c6a,U+8c8c,U+8d64,U+8d6b,U+8e0f,U+8fea,U+8ff7,U+9003,U+906d,U+9075,U+90a6,U+90ca,U+9192,U+963b,U+966a,U+9675-9677,U+9694,U+9ece,U+9ed8}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(5.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4e39,U+4e4f,U+4e58,U+4e95,U+4ea1,U+4eab,U+4eae,U+4ec1,U+4f0a,U+4f10-4f11,U+4f30,U+4f34,U+4f3c,U+4f73,U+4fb5,U+5012,U+504f,U+5178,U+517c,U+5192,U+51a0,U+51b0,U+51b7,U+51e1,U+5211,U+52a3,U+52c3,U+52c7,U+52d2,U+52e4,U+5371,U+539a,U+53e5,U+53eb,U+5409,U+542b,U+5462,U+5473,U+547c,U+54c8,U+54e5,U+54ea,U+5510,U+552f,U+5531,U+5750,U+5761,U+5766,U+5802,U+5851,U+5854,U+585e,U+590f,U+591c,U+5949,U+5954,U+5a5a,U+5b63,U+5b88,U+5b8b,U+5b97,U+5b9c,U+5c01,U+5c04,U+5c0a,U+5c1a,U+5c24,U+5c4b,U+5cb8,U+5e55,U+5ec9,U+5ef6,U+5f31,U+5f90,U+5fae,U+5fd8-5fd9,U+5fe0,U+6015,U+6062,U+6069,U+6089,U+60a3,U+60e0,U+6276,U+6297,U+62bd,U+62d3,U+6311,U+6350,U+6389,U+638c,U+63e1,U+63f4,U+6469,U+64cd,U+653b,U+654f,U+6562-6563,U+656c,U+65e6,U+65fa,U+660c,U+667a,U+66b4,U+66f2,U+670b,U+672b,U+6790,U+67b6,U+67d3,U+6885,U+68b0,U+68ee,U+6b8a,U+6bcd,U+6bd2,U+6c89,U+6cc9,U+6cdb,U+6ce5,U+6cf0,U+6d17,U+6d1b,U+6d59,U+6d6a,U+6df7,U+6e20-6e21,U+6fb3,U+719f,U+7236,U+7259,U+725b,U+7267,U+73cd,U+73e0,U+745e,U+74e6,U+7518,U+7537,U+756a,U+7586,U+7591,U+75be,U+75db,U+76ae,U+76c8,U+76db,U+76df,U+76fe,U+77db,U+786c,U+7956,U+795d,U+7965,U+7981,U+79df,U+7a7f,U+7adf,U+7ae5,U+7aef,U+7b11,U+7b26,U+7b54,U+7bb1,U+7bc7,U+7f72,U+7f8a,U+7ffb,U+8015,U+8058,U+805a,U+8089,U+80a5,U+80af,U+80e1,U+8150,U+82e5,U+8336,U+8352,U+83ab,U+8463,U+8499,U+852c,U+8861,U+8863,U+88c1,U+8d74,U+8da3,U+8dd1,U+8ddd,U+8ddf,U+8de8,U+8df3,U+8f9b,U+8fd4,U+8feb,U+900f,U+9014,U+904d,U+907f-9080,U+90ed,U+91ce,U+9644,U+9686,U+969c,U+96c4-96c5,U+96e8,U+96ea,U+96f6-96f7,U+9707,U+9732,U+978b,U+9910,U+9aa8,U+9ebb,U+9f13}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(4.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+4e03,U+4e14,U+4e45,U+4e4e,U+4e5d,U+4e88,U+4e92,U+4ec0,U+4ecb,U+4ecd,U+4ed8,U+4ee4,U+4efd,U+4f0d,U+4f4e-4f4f,U+4f8b,U+4f9d,U+4fbf,U+4fc3-4fc4,U+500d,U+5019,U+5047,U+505c,U+5065,U+50cf,U+5145,U+514d,U+516b,U+516d,U+5175,U+5207,U+520a,U+521d,U+5224,U+5238,U+523b,U+52a9-52aa,U+5347-5348,U+534a,U+535a,U+5361,U+5370,U+53cb,U+53e4,U+53e6,U+53ec,U+53f2-53f3,U+5426,U+5438,U+5468,U+547d,U+552e,U+5584,U+559c,U+5668,U+56fa,U+5733,U+5747,U+57df,U+57f9,U+58eb,U+592a,U+592e,U+5931,U+5947,U+5957,U+59cb,U+5a01,U+5b57-5b58,U+5b69,U+5b8f,U+5b98,U+5ba2-5ba4,U+5bb3,U+5bb9,U+5bc6,U+5bcc,U+5bdf,U+5c3c,U+5c45,U+5ddd,U+5de6,U+5dee,U+5df4,U+5e0c,U+5e45,U+5e8f,U+5e95,U+5e97,U+5ea7,U+5ead,U+5eb7,U+5f80,U+5f85,U+600e,U+6025,U+606f,U+623f,U+627e-627f,U+6293,U+62cd,U+62db,U+62ec,U+62ff,U+6309,U+632f,U+6388,U+6392,U+63a2,U+63a7,U+63aa,U+641e,U+64ad,U+6545,U+6551,U+65a4,U+65c5,U+65e9,U+661f-6620,U+6625,U+665a,U+666e-666f,U+66fe,U+671d,U+6728,U+672a,U+6750,U+675f,U+67d0,U+6821,U+68c9,U+690d,U+6a21,U+6b4c,U+6b62,U+6b66,U+6b7b,U+6bb5,U+6bdb,U+6c38,U+6c7d,U+6c99,U+6cb9,U+6cbf,U+6ce2,U+6d0b,U+6d25,U+6d2a,U+6d32,U+6d3e,U+6e56,U+6f14,U+6f6e,U+6fc0,U+706b,U+70c8,U+7164,U+7167,U+7247-7248,U+724c,U+72af,U+7389,U+73ed,U+7403,U+751a,U+7530,U+7533,U+7559,U+7565,U+75c5,U+767b,U+767d,U+773c,U+7763,U+77ed,U+77f3,U+7834,U+793a,U+7968,U+798f,U+79c0,U+79fb,U+7a7a,U+7a81,U+7ad9,U+7ae0,U+7b97,U+7c73,U+7d20,U+7d22,U+7e41,U+7f3a,U+7f6a,U+7f6e,U+8003,U+821e,U+822a,U+822c,U+8239,U+826f,U+82e6,U+82f1,U+8349,U+83dc,U+843d,U+8457,U+85cf,U+878d,U+8840,U+8857,U+89d2,U+8a00,U+8b66,U+8c61,U+8d85,U+8d8a,U+8db3,U+8fc5,U+8fce,U+8ff0,U+8ffd,U+9000-9001,U+9010,U+9047,U+914d,U+9152,U+9632,U+963f,U+964d,U+9650,U+9664,U+9760,U+97f3,U+98df,U+9999}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(3.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+2014,U+2e3a-2e3b,U+3001-3002,U+3008-3011,U+3014-3017,U+4e00,U+4e09-4e0b,U+4e0d,U+4e16,U+4e2d,U+4e3b,U+4e4b,U+4e5f,U+4e8b-4e8c,U+4e94,U+4e9b,U+4ea4,U+4eac,U+4eba,U+4eca,U+4ed6,U+4ee3,U+4ee5,U+4ef6,U+4efb,U+4f01,U+4f46,U+4f4d,U+4f55,U+4f5c,U+4f7f,U+4f9b,U+4fdd,U+4fe1,U+503c,U+505a,U+5143,U+5148-5149,U+5165,U+5168,U+516c,U+5171,U+5176-5177,U+518d,U+5206,U+5217,U+5229,U+5230,U+524d,U+526f,U+529b,U+529f-52a0,U+5305,U+5316-5317,U+5341,U+5357,U+5382,U+539f,U+53bb,U+53c8,U+53ca,U+53cd,U+53d6-53d7,U+53e3,U+53ef-53f0,U+53f8,U+5404,U+540d,U+5411,U+544a,U+548c,U+54c1,U+5546,U+56db,U+56e0,U+571f,U+5728,U+5730,U+578b,U+57ce,U+57fa,U+5883,U+589e,U+5916,U+591a,U+5927,U+5929,U+5973,U+5979,U+597d,U+5982,U+59d4,U+5b50,U+5b89,U+5b8c,U+5b9a,U+5c0f,U+5c11,U+5c31,U+5c55,U+5c71,U+5dde,U+5de5,U+5df1-5df2,U+5e02,U+5e38,U+5e73-5e74,U+5e9c,U+5ea6,U+5efa,U+5f0f,U+5f15,U+5f62,U+5f71,U+5f88,U+5f8b,U+5f97,U+5fb7,U+5fc3,U+5fc5,U+5feb,U+601d,U+6027,U+60c5,U+60f3,U+610f,U+611f,U+6210-6211,U+6216,U+6240,U+624b,U+6253,U+6279,U+6280,U+628a,U+6295,U+62c9,U+6301,U+6307,U+63a5,U+63a8,U+63d0,U+652f,U+6536,U+6539,U+653e-653f,U+6548,U+6574,U+6587,U+6599,U+65af-65b0,U+65b9,U+65bd,U+65cf,U+65e5,U+660e,U+6613,U+662f,U+66f4,U+6700,U+6708-6709,U+670d,U+671b,U+671f,U+672c,U+674e,U+6751,U+6797,U+6839,U+683c,U+6848,U+6b21,U+6b3e,U+6b63-6b65,U+6bcf,U+6bd4,U+6c11,U+6c34,U+6c42,U+6c5f,U+6cb3,U+6cbb,U+6cd5,U+6d3b,U+6d41,U+6d77,U+6d88,U+6df1,U+6e05,U+6e2f,U+6e90,U+7136,U+7269,U+7279,U+7387,U+738b,U+7406,U+751f,U+7528,U+7531,U+754c,U+767e,U+7684,U+76ca,U+76ee,U+76f4,U+76f8,U+770b,U+77e5,U+7814,U+793e,U+795e,U+79d1,U+7a0b,U+7a76,U+7acb,U+7b2c,U+7b49,U+7b56,U+7ba1,U+7cbe,U+7cfb,U+7f8e,U+8001,U+8005,U+800c,U+80a1,U+80b2,U+80fd,U+81ea,U+81f3,U+8272,U+82b1,U+884c,U+88ab,U+897f,U+8981,U+89e3,U+8d70,U+8d77,U+8def,U+8eab,U+8fd1,U+901a,U+901f-9020,U+9053,U+90a3,U+90e8,U+90fd,U+91c7,U+91cd,U+91cf,U+91d1,U+9662,U+96c6,U+9700,U+9752,U+975e,U+9762,U+9769,U+9996,U+9ad8,U+fe10-fe19,U+fe30-fe31,U+fe33-fe44}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(0.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+2,U+20-7e,U+a0-24f,U+251,U+254,U+259-25b,U+28c,U+300-302,U+304,U+306,U+30a-30d,U+358,U+1e3e-1e3f,U+1e72-1e73,U+1e90-1e91,U+203c,U+2049,U+2100,U+2105,U+2116,U+2121,U+213b,U+3004,U+3371,U+3385-3389,U+338d-3390,U+3396-3398,U+339b-33a6,U+33b0-33b3,U+33c2,U+33c4,U+33c8,U+33cb-33cd,U+33d4,U+33d7-33d8,U+33da,U+ff0f,U+ff12-ff13,U+ff22,U+ff27-ff28,U+ff2b,U+ff2d-ff2e,U+ff30,U+ff32,U+ff41-ff43,U+ff45,U+ff47-ff49,U+ff4b,U+ff4d-ff50,U+ff53,U+ff5a,U+ffffd}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(1.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+370-377,U+37a-37f,U+384-38a,U+38c,U+38e-3a1,U+3a3-3e1,U+3f0-3ff,U+1f00-1f15,U+1f18-1f1d,U+1f20-1f45,U+1f48-1f4d,U+1f50-1f57,U+1f59,U+1f5b,U+1f5d,U+1f5f-1f7d,U+1f80-1fb4,U+1fb6-1fc4,U+1fc6-1fd3,U+1fd6-1fdb,U+1fdd-1fef,U+1ff2-1ff4,U+1ff6-1ffe}@font-face{font-family:"LXGW WenKai Screen";src:local("LXGW WenKai Screen"),url(2.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+400-52f,U+2de0-2dff,U+a640-a69d,U+a69f} \ No newline at end of file diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/00f60007d29d6368a1f30960608f5f1b.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/00f60007d29d6368a1f30960608f5f1b.woff2 new file mode 100644 index 00000000..7258b768 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/00f60007d29d6368a1f30960608f5f1b.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/01e66586185308c3e1b096dcb64699c3.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/01e66586185308c3e1b096dcb64699c3.woff2 new file mode 100644 index 00000000..98009b6d Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/01e66586185308c3e1b096dcb64699c3.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/0272ed49b7c47a330d535353dd30e2fb.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/0272ed49b7c47a330d535353dd30e2fb.woff2 new file mode 100644 index 00000000..ade1d2c0 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/0272ed49b7c47a330d535353dd30e2fb.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/047b7f549e219ed01e0eed27c6cb4fb0.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/047b7f549e219ed01e0eed27c6cb4fb0.woff2 new file mode 100644 index 00000000..c4a4fb38 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/047b7f549e219ed01e0eed27c6cb4fb0.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/04d2482312ead637c7909b29bf1c3db0.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/04d2482312ead637c7909b29bf1c3db0.woff2 new file mode 100644 index 00000000..27eb2fb2 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/04d2482312ead637c7909b29bf1c3db0.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/057517f32b0459f124469d101296267c.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/057517f32b0459f124469d101296267c.woff2 new file mode 100644 index 00000000..1a3ce1c3 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/057517f32b0459f124469d101296267c.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/074336720702051357fd5598bd3a1202.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/074336720702051357fd5598bd3a1202.woff2 new file mode 100644 index 00000000..c0a7fbe6 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/074336720702051357fd5598bd3a1202.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/07841f0b7e244a231e1f7183d81700fe.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/07841f0b7e244a231e1f7183d81700fe.woff2 new file mode 100644 index 00000000..a260cf6f Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/07841f0b7e244a231e1f7183d81700fe.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/09c64609faed9bb9ba7514e25e728a34.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/09c64609faed9bb9ba7514e25e728a34.woff2 new file mode 100644 index 00000000..3c9152a3 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/09c64609faed9bb9ba7514e25e728a34.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/0ce6c7d642775c2c0dbefe5b4cb92839.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/0ce6c7d642775c2c0dbefe5b4cb92839.woff2 new file mode 100644 index 00000000..6201c94a Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/0ce6c7d642775c2c0dbefe5b4cb92839.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/11794fc02845e3ddb6ba7f8dbb2f269e.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/11794fc02845e3ddb6ba7f8dbb2f269e.woff2 new file mode 100644 index 00000000..6361c411 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/11794fc02845e3ddb6ba7f8dbb2f269e.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/13954fc954dab5f15971476847acd844.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/13954fc954dab5f15971476847acd844.woff2 new file mode 100644 index 00000000..75a9aa79 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/13954fc954dab5f15971476847acd844.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/13cfaade5fa9750c4ff81dcaf4b95016.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/13cfaade5fa9750c4ff81dcaf4b95016.woff2 new file mode 100644 index 00000000..135fbfd1 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/13cfaade5fa9750c4ff81dcaf4b95016.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/14074038f09f2992506652c41793a12a.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/14074038f09f2992506652c41793a12a.woff2 new file mode 100644 index 00000000..0a29028e Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/14074038f09f2992506652c41793a12a.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/140d7c3f82c5d83fa5ebc83b0ed53361.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/140d7c3f82c5d83fa5ebc83b0ed53361.woff2 new file mode 100644 index 00000000..0bd213fa Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/140d7c3f82c5d83fa5ebc83b0ed53361.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/16a9afea3d4bb12e3de9b3ffb3a2bf1a.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/16a9afea3d4bb12e3de9b3ffb3a2bf1a.woff2 new file mode 100644 index 00000000..020acc05 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/16a9afea3d4bb12e3de9b3ffb3a2bf1a.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/1a984dfaa0c7ab923b4e9a1b1cff0856.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/1a984dfaa0c7ab923b4e9a1b1cff0856.woff2 new file mode 100644 index 00000000..c4a63318 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/1a984dfaa0c7ab923b4e9a1b1cff0856.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/1ae17181e46d1b797bc6c40bec2bbd6c.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/1ae17181e46d1b797bc6c40bec2bbd6c.woff2 new file mode 100644 index 00000000..95e1bc88 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/1ae17181e46d1b797bc6c40bec2bbd6c.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/1be694dbf439efb92b682b25ddfe194a.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/1be694dbf439efb92b682b25ddfe194a.woff2 new file mode 100644 index 00000000..9fd89fec Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/1be694dbf439efb92b682b25ddfe194a.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/1c5465001206a4d36758c768f963b83d.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/1c5465001206a4d36758c768f963b83d.woff2 new file mode 100644 index 00000000..bd3a80ed Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/1c5465001206a4d36758c768f963b83d.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/1c80137f3f196f5ca269fa915fa1179d.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/1c80137f3f196f5ca269fa915fa1179d.woff2 new file mode 100644 index 00000000..2405ceb5 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/1c80137f3f196f5ca269fa915fa1179d.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/1cd6774e0ac5ded3e1cc29fa407324b1.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/1cd6774e0ac5ded3e1cc29fa407324b1.woff2 new file mode 100644 index 00000000..b552b1b9 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/1cd6774e0ac5ded3e1cc29fa407324b1.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/213e90fe3a3ca970cb822522e2145072.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/213e90fe3a3ca970cb822522e2145072.woff2 new file mode 100644 index 00000000..48e65a5f Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/213e90fe3a3ca970cb822522e2145072.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/24b4f5c3eae0af88b27cee04e6290085.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/24b4f5c3eae0af88b27cee04e6290085.woff2 new file mode 100644 index 00000000..a0d421ab Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/24b4f5c3eae0af88b27cee04e6290085.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/24e5b6f0788f1e83f4a9d74d40b20288.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/24e5b6f0788f1e83f4a9d74d40b20288.woff2 new file mode 100644 index 00000000..4d8c0d8f Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/24e5b6f0788f1e83f4a9d74d40b20288.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/26a0979c576b411afbd5e763f7b6991d.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/26a0979c576b411afbd5e763f7b6991d.woff2 new file mode 100644 index 00000000..6c33aff7 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/26a0979c576b411afbd5e763f7b6991d.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/274cf4d6f6408907b7e2f818c54c5e1b.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/274cf4d6f6408907b7e2f818c54c5e1b.woff2 new file mode 100644 index 00000000..7f49a0c8 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/274cf4d6f6408907b7e2f818c54c5e1b.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/2782db8a46e04926a92725156c786035.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/2782db8a46e04926a92725156c786035.woff2 new file mode 100644 index 00000000..b51c7aa1 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/2782db8a46e04926a92725156c786035.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/2870a2e2db969583bc5a852bea30f659.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/2870a2e2db969583bc5a852bea30f659.woff2 new file mode 100644 index 00000000..c35e2a08 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/2870a2e2db969583bc5a852bea30f659.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/28c6cba5fe14e5e1a4071b87a50a5538.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/28c6cba5fe14e5e1a4071b87a50a5538.woff2 new file mode 100644 index 00000000..0a6c8235 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/28c6cba5fe14e5e1a4071b87a50a5538.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/28de601bbef4be64518c407ec97210e4.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/28de601bbef4be64518c407ec97210e4.woff2 new file mode 100644 index 00000000..fbdc5af3 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/28de601bbef4be64518c407ec97210e4.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/28f586a6b90bc5e84f81274e15dbe2cf.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/28f586a6b90bc5e84f81274e15dbe2cf.woff2 new file mode 100644 index 00000000..5e0014dc Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/28f586a6b90bc5e84f81274e15dbe2cf.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/294af16d685644e581e333d1f072d420.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/294af16d685644e581e333d1f072d420.woff2 new file mode 100644 index 00000000..54638326 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/294af16d685644e581e333d1f072d420.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/2964e054ee1212397558b075ba5e5a7b.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/2964e054ee1212397558b075ba5e5a7b.woff2 new file mode 100644 index 00000000..cc8fe2d9 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/2964e054ee1212397558b075ba5e5a7b.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/2af87fa7cc2da7a655fa1bb708c73ebe.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/2af87fa7cc2da7a655fa1bb708c73ebe.woff2 new file mode 100644 index 00000000..2670e80a Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/2af87fa7cc2da7a655fa1bb708c73ebe.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/2b213022d7ec30fb36e467132037044b.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/2b213022d7ec30fb36e467132037044b.woff2 new file mode 100644 index 00000000..722a9e92 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/2b213022d7ec30fb36e467132037044b.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/2b55cbe47724c78e657923dfb3390cbc.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/2b55cbe47724c78e657923dfb3390cbc.woff2 new file mode 100644 index 00000000..93909a65 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/2b55cbe47724c78e657923dfb3390cbc.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/2b90e29fec783fad2b0d57e46f4d9012.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/2b90e29fec783fad2b0d57e46f4d9012.woff2 new file mode 100644 index 00000000..07f976f3 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/2b90e29fec783fad2b0d57e46f4d9012.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/2bcc55d56180a92455f9e8339783fabd.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/2bcc55d56180a92455f9e8339783fabd.woff2 new file mode 100644 index 00000000..9fba0ef0 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/2bcc55d56180a92455f9e8339783fabd.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/2ccb4b1a097116cf3b2a737ef2cfeb2d.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/2ccb4b1a097116cf3b2a737ef2cfeb2d.woff2 new file mode 100644 index 00000000..4548aa3b Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/2ccb4b1a097116cf3b2a737ef2cfeb2d.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/2e73c13d8516165a3f3093033128c931.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/2e73c13d8516165a3f3093033128c931.woff2 new file mode 100644 index 00000000..9cdf2f5a Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/2e73c13d8516165a3f3093033128c931.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/2f4c971d2b9a9a20a80cd4c5d3df8852.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/2f4c971d2b9a9a20a80cd4c5d3df8852.woff2 new file mode 100644 index 00000000..24e31206 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/2f4c971d2b9a9a20a80cd4c5d3df8852.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/2f717e8fa82e90cb410492b84d9b439b.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/2f717e8fa82e90cb410492b84d9b439b.woff2 new file mode 100644 index 00000000..662a0545 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/2f717e8fa82e90cb410492b84d9b439b.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/3084b5ed216f58266b350fb1cf8f20a8.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/3084b5ed216f58266b350fb1cf8f20a8.woff2 new file mode 100644 index 00000000..92b25f9f Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/3084b5ed216f58266b350fb1cf8f20a8.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/31058b014fe147a3c1a3fda11ce6b0b6.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/31058b014fe147a3c1a3fda11ce6b0b6.woff2 new file mode 100644 index 00000000..57997a58 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/31058b014fe147a3c1a3fda11ce6b0b6.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/319fe728346b646e7603e9485a490f94.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/319fe728346b646e7603e9485a490f94.woff2 new file mode 100644 index 00000000..5dbc3184 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/319fe728346b646e7603e9485a490f94.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/31a507c2ef3971b49519260e3910db8c.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/31a507c2ef3971b49519260e3910db8c.woff2 new file mode 100644 index 00000000..6c969902 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/31a507c2ef3971b49519260e3910db8c.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/3262b4a18db436acd016a3bf7e2889f5.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/3262b4a18db436acd016a3bf7e2889f5.woff2 new file mode 100644 index 00000000..aaa91815 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/3262b4a18db436acd016a3bf7e2889f5.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/32ec7cc5b00865689322ef41ecb04fae.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/32ec7cc5b00865689322ef41ecb04fae.woff2 new file mode 100644 index 00000000..4acb1176 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/32ec7cc5b00865689322ef41ecb04fae.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/3611e891f3c790e7f5a0f55144372201.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/3611e891f3c790e7f5a0f55144372201.woff2 new file mode 100644 index 00000000..5dbe9844 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/3611e891f3c790e7f5a0f55144372201.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/36f3cf4b102578ab6d4dbf23580aec45.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/36f3cf4b102578ab6d4dbf23580aec45.woff2 new file mode 100644 index 00000000..dfac502f Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/36f3cf4b102578ab6d4dbf23580aec45.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/37b2b4c4f322af9d49ec6d69fb9d46be.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/37b2b4c4f322af9d49ec6d69fb9d46be.woff2 new file mode 100644 index 00000000..23ec078b Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/37b2b4c4f322af9d49ec6d69fb9d46be.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/38455b6861aa4cbb6396832af53ef1c1.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/38455b6861aa4cbb6396832af53ef1c1.woff2 new file mode 100644 index 00000000..af6aa23f Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/38455b6861aa4cbb6396832af53ef1c1.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/395311e15f7a603e8cfde5a2e200759d.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/395311e15f7a603e8cfde5a2e200759d.woff2 new file mode 100644 index 00000000..2302ad42 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/395311e15f7a603e8cfde5a2e200759d.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/39b62ffec4644d0a9b53165cfc23ff6a.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/39b62ffec4644d0a9b53165cfc23ff6a.woff2 new file mode 100644 index 00000000..a337847a Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/39b62ffec4644d0a9b53165cfc23ff6a.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/3a064ae3aff4e57a33d1b232d0abc1d1.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/3a064ae3aff4e57a33d1b232d0abc1d1.woff2 new file mode 100644 index 00000000..4ad6c02f Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/3a064ae3aff4e57a33d1b232d0abc1d1.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/3aef0a138d95ad5b9c9032d316fc6f6d.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/3aef0a138d95ad5b9c9032d316fc6f6d.woff2 new file mode 100644 index 00000000..d15d1086 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/3aef0a138d95ad5b9c9032d316fc6f6d.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/3bb2fcffaac49346377c64b354681ee8.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/3bb2fcffaac49346377c64b354681ee8.woff2 new file mode 100644 index 00000000..6a224af9 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/3bb2fcffaac49346377c64b354681ee8.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/3bb49223f0d61de1d6576a0e4eaab536.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/3bb49223f0d61de1d6576a0e4eaab536.woff2 new file mode 100644 index 00000000..125cd83e Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/3bb49223f0d61de1d6576a0e4eaab536.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/3cf21bf489a799f50ab2eeb40d40e50a.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/3cf21bf489a799f50ab2eeb40d40e50a.woff2 new file mode 100644 index 00000000..4caaaa7d Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/3cf21bf489a799f50ab2eeb40d40e50a.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/4068825d49e4a2b838b38c93689beb82.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/4068825d49e4a2b838b38c93689beb82.woff2 new file mode 100644 index 00000000..8ffe677e Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/4068825d49e4a2b838b38c93689beb82.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/40b52a7bb96d11446caddf09e9a1793a.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/40b52a7bb96d11446caddf09e9a1793a.woff2 new file mode 100644 index 00000000..36969b79 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/40b52a7bb96d11446caddf09e9a1793a.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/4142cbb924aba7fa51056bd80d1ec6a5.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/4142cbb924aba7fa51056bd80d1ec6a5.woff2 new file mode 100644 index 00000000..354bd84d Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/4142cbb924aba7fa51056bd80d1ec6a5.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/41a425a04efc019ce9a3305a416142d4.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/41a425a04efc019ce9a3305a416142d4.woff2 new file mode 100644 index 00000000..62a02bc0 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/41a425a04efc019ce9a3305a416142d4.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/422eabf71b7848729fbd0bffd3d257d5.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/422eabf71b7848729fbd0bffd3d257d5.woff2 new file mode 100644 index 00000000..13404f29 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/422eabf71b7848729fbd0bffd3d257d5.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/423539fefd434588b54fc2a4e40dba44.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/423539fefd434588b54fc2a4e40dba44.woff2 new file mode 100644 index 00000000..eec28537 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/423539fefd434588b54fc2a4e40dba44.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/43e90fb3a4c0e76c942669a3a2bdc623.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/43e90fb3a4c0e76c942669a3a2bdc623.woff2 new file mode 100644 index 00000000..c0a618fc Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/43e90fb3a4c0e76c942669a3a2bdc623.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/45ac11d19469e45d2900d377f4c9d339.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/45ac11d19469e45d2900d377f4c9d339.woff2 new file mode 100644 index 00000000..1d60daa7 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/45ac11d19469e45d2900d377f4c9d339.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/45ef6c160c008691f954e734a96f53a7.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/45ef6c160c008691f954e734a96f53a7.woff2 new file mode 100644 index 00000000..b7b8cbe7 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/45ef6c160c008691f954e734a96f53a7.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/46524f7fa2ae6d7b5e5e849c820e5e2c.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/46524f7fa2ae6d7b5e5e849c820e5e2c.woff2 new file mode 100644 index 00000000..e920d315 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/46524f7fa2ae6d7b5e5e849c820e5e2c.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/48367d09ab0faa3fd7d1ff9e8a1d7199.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/48367d09ab0faa3fd7d1ff9e8a1d7199.woff2 new file mode 100644 index 00000000..52d43377 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/48367d09ab0faa3fd7d1ff9e8a1d7199.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/49be1538eff29b63d05de592dccebc7a.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/49be1538eff29b63d05de592dccebc7a.woff2 new file mode 100644 index 00000000..9e3c89da Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/49be1538eff29b63d05de592dccebc7a.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/49f6b328dfd49ecd0eb193fe9ff1ed0e.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/49f6b328dfd49ecd0eb193fe9ff1ed0e.woff2 new file mode 100644 index 00000000..b7329960 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/49f6b328dfd49ecd0eb193fe9ff1ed0e.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/4a533c220ce820bb6a6cecc347d3e2e4.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/4a533c220ce820bb6a6cecc347d3e2e4.woff2 new file mode 100644 index 00000000..002ddf45 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/4a533c220ce820bb6a6cecc347d3e2e4.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/4acc02207f1ed977e176cbb0744fccbf.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/4acc02207f1ed977e176cbb0744fccbf.woff2 new file mode 100644 index 00000000..19c89991 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/4acc02207f1ed977e176cbb0744fccbf.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/4b322588125dc09d1d09f6ceef3ca730.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/4b322588125dc09d1d09f6ceef3ca730.woff2 new file mode 100644 index 00000000..522202f9 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/4b322588125dc09d1d09f6ceef3ca730.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/4c6b68e1c9dbfe7809ee5aecec547741.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/4c6b68e1c9dbfe7809ee5aecec547741.woff2 new file mode 100644 index 00000000..ba08013e Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/4c6b68e1c9dbfe7809ee5aecec547741.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/4cb089f4407e4ad9257b4de9d1a2b63a.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/4cb089f4407e4ad9257b4de9d1a2b63a.woff2 new file mode 100644 index 00000000..c28bc5b0 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/4cb089f4407e4ad9257b4de9d1a2b63a.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/4cbd36dfdc3058d6636f50a9281d1f8c.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/4cbd36dfdc3058d6636f50a9281d1f8c.woff2 new file mode 100644 index 00000000..0e3c9a4b Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/4cbd36dfdc3058d6636f50a9281d1f8c.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/4db528eac80b9c5097646b3e014af3d9.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/4db528eac80b9c5097646b3e014af3d9.woff2 new file mode 100644 index 00000000..d8823d83 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/4db528eac80b9c5097646b3e014af3d9.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/4e1667302f163eb042e05baa74b98445.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/4e1667302f163eb042e05baa74b98445.woff2 new file mode 100644 index 00000000..8a29af96 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/4e1667302f163eb042e05baa74b98445.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/4ed87646fc3e9f43f121eb50da4bb9fa.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/4ed87646fc3e9f43f121eb50da4bb9fa.woff2 new file mode 100644 index 00000000..ca1d4188 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/4ed87646fc3e9f43f121eb50da4bb9fa.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/523021c2d4bec1e49288b22250a18abd.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/523021c2d4bec1e49288b22250a18abd.woff2 new file mode 100644 index 00000000..a2b836b3 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/523021c2d4bec1e49288b22250a18abd.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/523dde3429382902abbb8c87b6348ae3.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/523dde3429382902abbb8c87b6348ae3.woff2 new file mode 100644 index 00000000..8838e3a3 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/523dde3429382902abbb8c87b6348ae3.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/53c7132cb0e13d9d5d4dfcfb22551820.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/53c7132cb0e13d9d5d4dfcfb22551820.woff2 new file mode 100644 index 00000000..2858f8d8 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/53c7132cb0e13d9d5d4dfcfb22551820.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/555b3d8ef206ac3411090208f834815c.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/555b3d8ef206ac3411090208f834815c.woff2 new file mode 100644 index 00000000..6d7823bb Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/555b3d8ef206ac3411090208f834815c.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/5af43d566732f148c3731c8825a69d86.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/5af43d566732f148c3731c8825a69d86.woff2 new file mode 100644 index 00000000..160ccd94 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/5af43d566732f148c3731c8825a69d86.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/5c3ee9dea53a9d7b01438db18b7d9ee3.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/5c3ee9dea53a9d7b01438db18b7d9ee3.woff2 new file mode 100644 index 00000000..830be65f Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/5c3ee9dea53a9d7b01438db18b7d9ee3.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/5ce8598519ca9dcb769b08c086676414.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/5ce8598519ca9dcb769b08c086676414.woff2 new file mode 100644 index 00000000..3fb44125 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/5ce8598519ca9dcb769b08c086676414.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/5dbd8695a588f61d521215e596dcc0a8.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/5dbd8695a588f61d521215e596dcc0a8.woff2 new file mode 100644 index 00000000..ed44c6a5 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/5dbd8695a588f61d521215e596dcc0a8.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/5e416d8880bd460ed59aded9450a1988.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/5e416d8880bd460ed59aded9450a1988.woff2 new file mode 100644 index 00000000..4305f965 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/5e416d8880bd460ed59aded9450a1988.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/5f31fb39efc33e88b8af763cbb5f8874.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/5f31fb39efc33e88b8af763cbb5f8874.woff2 new file mode 100644 index 00000000..ec115108 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/5f31fb39efc33e88b8af763cbb5f8874.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/5fbfc8b7d5c1642962d419b90ae36dc0.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/5fbfc8b7d5c1642962d419b90ae36dc0.woff2 new file mode 100644 index 00000000..31b072d0 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/5fbfc8b7d5c1642962d419b90ae36dc0.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/62171cad72de2677f61f441e065fc01d.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/62171cad72de2677f61f441e065fc01d.woff2 new file mode 100644 index 00000000..9d8d118a Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/62171cad72de2677f61f441e065fc01d.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/624e50d75694e5197f228894ed92b1a1.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/624e50d75694e5197f228894ed92b1a1.woff2 new file mode 100644 index 00000000..73d9f945 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/624e50d75694e5197f228894ed92b1a1.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/6368c28fbb075cdcefdc4fcd366f2596.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/6368c28fbb075cdcefdc4fcd366f2596.woff2 new file mode 100644 index 00000000..56475a1b Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/6368c28fbb075cdcefdc4fcd366f2596.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/63e983c4f3a8314e2ce15b8c7fe4dbec.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/63e983c4f3a8314e2ce15b8c7fe4dbec.woff2 new file mode 100644 index 00000000..6e9b4a05 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/63e983c4f3a8314e2ce15b8c7fe4dbec.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/65497ba805531dd7d0a5349caead373e.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/65497ba805531dd7d0a5349caead373e.woff2 new file mode 100644 index 00000000..1e6a58f4 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/65497ba805531dd7d0a5349caead373e.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/658c70111918afb2ed3dd4da876d44f8.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/658c70111918afb2ed3dd4da876d44f8.woff2 new file mode 100644 index 00000000..4eb7da63 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/658c70111918afb2ed3dd4da876d44f8.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/66a4ab265ac7c98d56146d2036465deb.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/66a4ab265ac7c98d56146d2036465deb.woff2 new file mode 100644 index 00000000..41b667a3 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/66a4ab265ac7c98d56146d2036465deb.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/66aa62ca7d17d34ee9f5b2dcf6390f6a.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/66aa62ca7d17d34ee9f5b2dcf6390f6a.woff2 new file mode 100644 index 00000000..980b7fcb Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/66aa62ca7d17d34ee9f5b2dcf6390f6a.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/67089b7ce254605784678f76feeb45e6.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/67089b7ce254605784678f76feeb45e6.woff2 new file mode 100644 index 00000000..e5426796 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/67089b7ce254605784678f76feeb45e6.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/67b024cffa650240804b44b0bacb17b6.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/67b024cffa650240804b44b0bacb17b6.woff2 new file mode 100644 index 00000000..cd89783c Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/67b024cffa650240804b44b0bacb17b6.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/67cc89bb1a84552b002953998db5c93e.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/67cc89bb1a84552b002953998db5c93e.woff2 new file mode 100644 index 00000000..c0de8c70 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/67cc89bb1a84552b002953998db5c93e.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/682ac772448d941fc7d8c7eb3bcdb4f2.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/682ac772448d941fc7d8c7eb3bcdb4f2.woff2 new file mode 100644 index 00000000..9f1e110c Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/682ac772448d941fc7d8c7eb3bcdb4f2.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/6ada6d691877454e16616d059de86ac0.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/6ada6d691877454e16616d059de86ac0.woff2 new file mode 100644 index 00000000..0b06757e Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/6ada6d691877454e16616d059de86ac0.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/6c423687c18cd6be5b169633ff9d2da6.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/6c423687c18cd6be5b169633ff9d2da6.woff2 new file mode 100644 index 00000000..b68c9883 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/6c423687c18cd6be5b169633ff9d2da6.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/6ea7acb90a8d87b7ff1ad0c3112e3838.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/6ea7acb90a8d87b7ff1ad0c3112e3838.woff2 new file mode 100644 index 00000000..0ff3375a Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/6ea7acb90a8d87b7ff1ad0c3112e3838.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/6f601f95d01a12d27fc47a5a7ab5bcaa.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/6f601f95d01a12d27fc47a5a7ab5bcaa.woff2 new file mode 100644 index 00000000..3c2e855d Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/6f601f95d01a12d27fc47a5a7ab5bcaa.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/706123e76cc5a4c8c931906231205cf8.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/706123e76cc5a4c8c931906231205cf8.woff2 new file mode 100644 index 00000000..b74a169e Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/706123e76cc5a4c8c931906231205cf8.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/71f70a587e85fd408a09f026c54cad68.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/71f70a587e85fd408a09f026c54cad68.woff2 new file mode 100644 index 00000000..3faf88c7 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/71f70a587e85fd408a09f026c54cad68.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/72f4ffe9d8585f8291c4eb2db93c005a.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/72f4ffe9d8585f8291c4eb2db93c005a.woff2 new file mode 100644 index 00000000..dbbbb757 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/72f4ffe9d8585f8291c4eb2db93c005a.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/72f63d038ac2aa1750785d199df7b527.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/72f63d038ac2aa1750785d199df7b527.woff2 new file mode 100644 index 00000000..4227fd91 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/72f63d038ac2aa1750785d199df7b527.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/74aa4903be1779277b5cfac259433130.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/74aa4903be1779277b5cfac259433130.woff2 new file mode 100644 index 00000000..f8cc4b58 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/74aa4903be1779277b5cfac259433130.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/752cfa51b1b6a30d8cd7a67c57918f85.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/752cfa51b1b6a30d8cd7a67c57918f85.woff2 new file mode 100644 index 00000000..894fa963 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/752cfa51b1b6a30d8cd7a67c57918f85.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/7583406177e3f57c555ac5cc95344b7f.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/7583406177e3f57c555ac5cc95344b7f.woff2 new file mode 100644 index 00000000..067a5074 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/7583406177e3f57c555ac5cc95344b7f.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/76a2df9c284d898d40347168939fa644.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/76a2df9c284d898d40347168939fa644.woff2 new file mode 100644 index 00000000..9bb57a0b Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/76a2df9c284d898d40347168939fa644.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/7992c7ca98a5631d37cf01842527c8c6.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/7992c7ca98a5631d37cf01842527c8c6.woff2 new file mode 100644 index 00000000..8aa462d1 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/7992c7ca98a5631d37cf01842527c8c6.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/7a6db27961b27c1704b9ee30c8ac9b2c.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/7a6db27961b27c1704b9ee30c8ac9b2c.woff2 new file mode 100644 index 00000000..84d6f8a8 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/7a6db27961b27c1704b9ee30c8ac9b2c.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/7bf97388c9701476a5266dd975bb9a48.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/7bf97388c9701476a5266dd975bb9a48.woff2 new file mode 100644 index 00000000..812b3b1a Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/7bf97388c9701476a5266dd975bb9a48.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/7c8ba46493768e445461c297880cd295.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/7c8ba46493768e445461c297880cd295.woff2 new file mode 100644 index 00000000..67a77b4c Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/7c8ba46493768e445461c297880cd295.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/7cd3aa2d4165277435b6f8b23036e6e2.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/7cd3aa2d4165277435b6f8b23036e6e2.woff2 new file mode 100644 index 00000000..33fb3891 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/7cd3aa2d4165277435b6f8b23036e6e2.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/7d942c509d15d23b50bd243575c4eae6.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/7d942c509d15d23b50bd243575c4eae6.woff2 new file mode 100644 index 00000000..b959d593 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/7d942c509d15d23b50bd243575c4eae6.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/807ba1cc19d7d0024e72e61cf0ebf44c.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/807ba1cc19d7d0024e72e61cf0ebf44c.woff2 new file mode 100644 index 00000000..216ab07c Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/807ba1cc19d7d0024e72e61cf0ebf44c.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/8278bb5d35b72a2e6e3b683f5846d5d2.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/8278bb5d35b72a2e6e3b683f5846d5d2.woff2 new file mode 100644 index 00000000..02354f52 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/8278bb5d35b72a2e6e3b683f5846d5d2.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/831b14cd6cca288814c1686193d8a8e7.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/831b14cd6cca288814c1686193d8a8e7.woff2 new file mode 100644 index 00000000..27f9cc9b Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/831b14cd6cca288814c1686193d8a8e7.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/83914620f3cf28409388adb38f8c80a8.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/83914620f3cf28409388adb38f8c80a8.woff2 new file mode 100644 index 00000000..a8b4f27f Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/83914620f3cf28409388adb38f8c80a8.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/85470da5a88f93296bc6df159cf4e070.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/85470da5a88f93296bc6df159cf4e070.woff2 new file mode 100644 index 00000000..248bcbb1 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/85470da5a88f93296bc6df159cf4e070.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/8755b83d33e82d8c5ee33dea60b0cc64.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/8755b83d33e82d8c5ee33dea60b0cc64.woff2 new file mode 100644 index 00000000..2e64504b Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/8755b83d33e82d8c5ee33dea60b0cc64.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/8807f5753ef313b33db8a0814b596fd5.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/8807f5753ef313b33db8a0814b596fd5.woff2 new file mode 100644 index 00000000..5966311a Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/8807f5753ef313b33db8a0814b596fd5.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/8846f4a6d40d34da3f843410072f9f6b.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/8846f4a6d40d34da3f843410072f9f6b.woff2 new file mode 100644 index 00000000..a6a7348b Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/8846f4a6d40d34da3f843410072f9f6b.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/885d81a73e6ef06ad8a7b09bccd3fd1e.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/885d81a73e6ef06ad8a7b09bccd3fd1e.woff2 new file mode 100644 index 00000000..7de664c3 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/885d81a73e6ef06ad8a7b09bccd3fd1e.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/88ce7912d2f85d7088083285d666fe36.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/88ce7912d2f85d7088083285d666fe36.woff2 new file mode 100644 index 00000000..687154f7 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/88ce7912d2f85d7088083285d666fe36.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/8970029b1a12d9776aae72e5a611377b.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/8970029b1a12d9776aae72e5a611377b.woff2 new file mode 100644 index 00000000..fa554df9 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/8970029b1a12d9776aae72e5a611377b.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/89bb3380fe11c8b22ceebc16b4fe2a5b.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/89bb3380fe11c8b22ceebc16b4fe2a5b.woff2 new file mode 100644 index 00000000..cd7df7eb Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/89bb3380fe11c8b22ceebc16b4fe2a5b.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/89f4f3e277f3df922082c00521b9ba1b.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/89f4f3e277f3df922082c00521b9ba1b.woff2 new file mode 100644 index 00000000..e72e130a Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/89f4f3e277f3df922082c00521b9ba1b.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/8c07e7f812cf702d22c24a8af27a14ca.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/8c07e7f812cf702d22c24a8af27a14ca.woff2 new file mode 100644 index 00000000..9753ca22 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/8c07e7f812cf702d22c24a8af27a14ca.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/8dfe8e2f2de777d5ccb7ec9b364c4cc4.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/8dfe8e2f2de777d5ccb7ec9b364c4cc4.woff2 new file mode 100644 index 00000000..381070cd Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/8dfe8e2f2de777d5ccb7ec9b364c4cc4.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/91008d10234eb993f1c8e5896e366a2d.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/91008d10234eb993f1c8e5896e366a2d.woff2 new file mode 100644 index 00000000..f741388f Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/91008d10234eb993f1c8e5896e366a2d.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/959e95f5804146cf9def6c672e89cedd.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/959e95f5804146cf9def6c672e89cedd.woff2 new file mode 100644 index 00000000..cfff94cb Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/959e95f5804146cf9def6c672e89cedd.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/96193c323465f076999a371b135decb1.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/96193c323465f076999a371b135decb1.woff2 new file mode 100644 index 00000000..523125d4 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/96193c323465f076999a371b135decb1.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/96f4e7dcf6c58f5ee1baf9a70debbcb3.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/96f4e7dcf6c58f5ee1baf9a70debbcb3.woff2 new file mode 100644 index 00000000..b21c83d1 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/96f4e7dcf6c58f5ee1baf9a70debbcb3.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/990987f863a7b98a9ddcdb294680cd3d.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/990987f863a7b98a9ddcdb294680cd3d.woff2 new file mode 100644 index 00000000..754cfa4e Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/990987f863a7b98a9ddcdb294680cd3d.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/9d067bc04035e1ba03f5a54acc21f5e6.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/9d067bc04035e1ba03f5a54acc21f5e6.woff2 new file mode 100644 index 00000000..24c65ec1 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/9d067bc04035e1ba03f5a54acc21f5e6.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/a0b7843f0031b62bfe5cd132534a9def.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/a0b7843f0031b62bfe5cd132534a9def.woff2 new file mode 100644 index 00000000..fc0b8dc7 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/a0b7843f0031b62bfe5cd132534a9def.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/a1540a8f808c0ab7197e20a9147018a7.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/a1540a8f808c0ab7197e20a9147018a7.woff2 new file mode 100644 index 00000000..8d2dd9ff Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/a1540a8f808c0ab7197e20a9147018a7.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/a1a9732d15b75ffb346fa7024d3bfab3.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/a1a9732d15b75ffb346fa7024d3bfab3.woff2 new file mode 100644 index 00000000..2373f816 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/a1a9732d15b75ffb346fa7024d3bfab3.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/a3e1e78a2196253cf0d5e1ac9c1c30f8.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/a3e1e78a2196253cf0d5e1ac9c1c30f8.woff2 new file mode 100644 index 00000000..9d53fa66 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/a3e1e78a2196253cf0d5e1ac9c1c30f8.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/a4fa4d4fb04c38e3da37e00bca79745d.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/a4fa4d4fb04c38e3da37e00bca79745d.woff2 new file mode 100644 index 00000000..def624f1 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/a4fa4d4fb04c38e3da37e00bca79745d.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/a6233194f2fc573d519b463d3f36ff23.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/a6233194f2fc573d519b463d3f36ff23.woff2 new file mode 100644 index 00000000..1499750f Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/a6233194f2fc573d519b463d3f36ff23.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/a823619ec0b7c4de017bd79369c65f11.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/a823619ec0b7c4de017bd79369c65f11.woff2 new file mode 100644 index 00000000..ebbc7089 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/a823619ec0b7c4de017bd79369c65f11.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/a9714bd5ccfe4580a4ac6bd0ee5a3b68.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/a9714bd5ccfe4580a4ac6bd0ee5a3b68.woff2 new file mode 100644 index 00000000..628f3de6 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/a9714bd5ccfe4580a4ac6bd0ee5a3b68.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/a9ea2c76ae4a0b7fc4bacf5abb16f573.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/a9ea2c76ae4a0b7fc4bacf5abb16f573.woff2 new file mode 100644 index 00000000..6f550996 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/a9ea2c76ae4a0b7fc4bacf5abb16f573.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/aa4638441dd86aeb35eda2a9e688e05f.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/aa4638441dd86aeb35eda2a9e688e05f.woff2 new file mode 100644 index 00000000..0369b755 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/aa4638441dd86aeb35eda2a9e688e05f.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/ab4213392d084ab0ebc642d8c77a6d8d.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/ab4213392d084ab0ebc642d8c77a6d8d.woff2 new file mode 100644 index 00000000..48da0db7 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/ab4213392d084ab0ebc642d8c77a6d8d.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/ac8055bb6d749eef9ee873fdec5355ac.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/ac8055bb6d749eef9ee873fdec5355ac.woff2 new file mode 100644 index 00000000..681de303 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/ac8055bb6d749eef9ee873fdec5355ac.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/ac87e5a737769b5fe793019cb91fe13f.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/ac87e5a737769b5fe793019cb91fe13f.woff2 new file mode 100644 index 00000000..61aa41cb Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/ac87e5a737769b5fe793019cb91fe13f.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/acd0a4c1a9858fd3c492dc332b763bd0.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/acd0a4c1a9858fd3c492dc332b763bd0.woff2 new file mode 100644 index 00000000..815d799e Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/acd0a4c1a9858fd3c492dc332b763bd0.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/ad3639eff5bb395e94ee621f3464f15e.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/ad3639eff5bb395e94ee621f3464f15e.woff2 new file mode 100644 index 00000000..d248688f Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/ad3639eff5bb395e94ee621f3464f15e.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/adc6605ce20eaa2eb86036670fd612b7.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/adc6605ce20eaa2eb86036670fd612b7.woff2 new file mode 100644 index 00000000..14fc372c Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/adc6605ce20eaa2eb86036670fd612b7.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/b13f934309d533c2ece2b5386d237a9c.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/b13f934309d533c2ece2b5386d237a9c.woff2 new file mode 100644 index 00000000..25a6f9c7 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/b13f934309d533c2ece2b5386d237a9c.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/b148a1ee427107bf9fa5339a1abace47.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/b148a1ee427107bf9fa5339a1abace47.woff2 new file mode 100644 index 00000000..8732127b Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/b148a1ee427107bf9fa5339a1abace47.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/b19c9bd6f7bd62a63ed7e30761824cc5.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/b19c9bd6f7bd62a63ed7e30761824cc5.woff2 new file mode 100644 index 00000000..f2ee566f Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/b19c9bd6f7bd62a63ed7e30761824cc5.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/b24f29eee88718d1c5c8dfdfcd0a74af.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/b24f29eee88718d1c5c8dfdfcd0a74af.woff2 new file mode 100644 index 00000000..269b727b Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/b24f29eee88718d1c5c8dfdfcd0a74af.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/b2ec7049f16c64f8a3df23ab1764b1fa.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/b2ec7049f16c64f8a3df23ab1764b1fa.woff2 new file mode 100644 index 00000000..d6b133fd Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/b2ec7049f16c64f8a3df23ab1764b1fa.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/b3363542c3058751c70fbe58659d3b9f.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/b3363542c3058751c70fbe58659d3b9f.woff2 new file mode 100644 index 00000000..bc53da02 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/b3363542c3058751c70fbe58659d3b9f.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/b41e97f92f2b49042a14c593fe4df4c3.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/b41e97f92f2b49042a14c593fe4df4c3.woff2 new file mode 100644 index 00000000..6c8739ff Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/b41e97f92f2b49042a14c593fe4df4c3.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/b4c18ec0480289e8b78602bf5421f184.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/b4c18ec0480289e8b78602bf5421f184.woff2 new file mode 100644 index 00000000..c5f2e3df Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/b4c18ec0480289e8b78602bf5421f184.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/b54aa282fd4a533bbb2fe1f03813e542.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/b54aa282fd4a533bbb2fe1f03813e542.woff2 new file mode 100644 index 00000000..aa62064b Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/b54aa282fd4a533bbb2fe1f03813e542.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/b58ec0c51524ae3a1a14731a9cd885e5.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/b58ec0c51524ae3a1a14731a9cd885e5.woff2 new file mode 100644 index 00000000..f2b7b7f6 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/b58ec0c51524ae3a1a14731a9cd885e5.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/b7d2da9786088eb8e7112198ea74a3fe.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/b7d2da9786088eb8e7112198ea74a3fe.woff2 new file mode 100644 index 00000000..7d3c13d4 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/b7d2da9786088eb8e7112198ea74a3fe.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/b86aea3c77fed71f6b2082ae352b414e.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/b86aea3c77fed71f6b2082ae352b414e.woff2 new file mode 100644 index 00000000..96cb7810 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/b86aea3c77fed71f6b2082ae352b414e.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/b9c89633741af9ed2fea7924c944a196.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/b9c89633741af9ed2fea7924c944a196.woff2 new file mode 100644 index 00000000..a0adad99 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/b9c89633741af9ed2fea7924c944a196.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/ba439de345bc64582f8560f3363cffa7.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/ba439de345bc64582f8560f3363cffa7.woff2 new file mode 100644 index 00000000..c74b2d13 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/ba439de345bc64582f8560f3363cffa7.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/ba970ca4b5a4a9f045d3d4520d0a95a8.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/ba970ca4b5a4a9f045d3d4520d0a95a8.woff2 new file mode 100644 index 00000000..f1902229 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/ba970ca4b5a4a9f045d3d4520d0a95a8.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/bade2e66ef234064ce5d0b7a59c3cab6.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/bade2e66ef234064ce5d0b7a59c3cab6.woff2 new file mode 100644 index 00000000..b837922f Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/bade2e66ef234064ce5d0b7a59c3cab6.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/bb70dfa25ebf4f4324f201490c2a8748.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/bb70dfa25ebf4f4324f201490c2a8748.woff2 new file mode 100644 index 00000000..73f34293 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/bb70dfa25ebf4f4324f201490c2a8748.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/bbe8c7f0f4551bb519e859bea56d0b41.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/bbe8c7f0f4551bb519e859bea56d0b41.woff2 new file mode 100644 index 00000000..72300896 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/bbe8c7f0f4551bb519e859bea56d0b41.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/c0d265da6ef3f46b5644bd1cdda226ac.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/c0d265da6ef3f46b5644bd1cdda226ac.woff2 new file mode 100644 index 00000000..51d26f51 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/c0d265da6ef3f46b5644bd1cdda226ac.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/c0fcbfbc865336c21e3bcde140532549.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/c0fcbfbc865336c21e3bcde140532549.woff2 new file mode 100644 index 00000000..3e0cded0 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/c0fcbfbc865336c21e3bcde140532549.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/c2c5dad7cebe52c61d11b250772f6226.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/c2c5dad7cebe52c61d11b250772f6226.woff2 new file mode 100644 index 00000000..8f10867e Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/c2c5dad7cebe52c61d11b250772f6226.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/c3ee94f4f2321d8798cad64af7371e5e.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/c3ee94f4f2321d8798cad64af7371e5e.woff2 new file mode 100644 index 00000000..b150c0f5 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/c3ee94f4f2321d8798cad64af7371e5e.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/c5146b13f1bf80941841348cca7d0dac.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/c5146b13f1bf80941841348cca7d0dac.woff2 new file mode 100644 index 00000000..cbd55487 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/c5146b13f1bf80941841348cca7d0dac.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/c57e73db4be1a0884c26fb7c7311599e.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/c57e73db4be1a0884c26fb7c7311599e.woff2 new file mode 100644 index 00000000..4d1413fc Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/c57e73db4be1a0884c26fb7c7311599e.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/c6404b1d423412f3da3624d8c0544829.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/c6404b1d423412f3da3624d8c0544829.woff2 new file mode 100644 index 00000000..7beba6f9 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/c6404b1d423412f3da3624d8c0544829.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/c6408d7fe430990b79311682be378c14.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/c6408d7fe430990b79311682be378c14.woff2 new file mode 100644 index 00000000..3543ae22 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/c6408d7fe430990b79311682be378c14.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/c6ee1db235bc088ae842a42966f32047.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/c6ee1db235bc088ae842a42966f32047.woff2 new file mode 100644 index 00000000..f24d01c5 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/c6ee1db235bc088ae842a42966f32047.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/c759554bb4164f24a0787886b81713ef.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/c759554bb4164f24a0787886b81713ef.woff2 new file mode 100644 index 00000000..87defae0 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/c759554bb4164f24a0787886b81713ef.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/c9998b777f0ff25f5dc8eec44f259f8e.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/c9998b777f0ff25f5dc8eec44f259f8e.woff2 new file mode 100644 index 00000000..ae357495 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/c9998b777f0ff25f5dc8eec44f259f8e.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/ca0766a943d8f64bf064608bff8b5110.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/ca0766a943d8f64bf064608bff8b5110.woff2 new file mode 100644 index 00000000..fb251092 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/ca0766a943d8f64bf064608bff8b5110.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/cbb52751a158592bcabbeabcba4ece01.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/cbb52751a158592bcabbeabcba4ece01.woff2 new file mode 100644 index 00000000..5b2f9549 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/cbb52751a158592bcabbeabcba4ece01.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/cc532cd3c760b1aaeb15f52712257d6b.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/cc532cd3c760b1aaeb15f52712257d6b.woff2 new file mode 100644 index 00000000..627776fe Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/cc532cd3c760b1aaeb15f52712257d6b.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/d078d39549ff5f5c4580977579eb0da0.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/d078d39549ff5f5c4580977579eb0da0.woff2 new file mode 100644 index 00000000..04ca0b4d Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/d078d39549ff5f5c4580977579eb0da0.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/d249b0dbd93377f42fa2b22ba7e8c8b5.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/d249b0dbd93377f42fa2b22ba7e8c8b5.woff2 new file mode 100644 index 00000000..16cf0c17 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/d249b0dbd93377f42fa2b22ba7e8c8b5.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/d58510b3833343d369d5fee718434d2b.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/d58510b3833343d369d5fee718434d2b.woff2 new file mode 100644 index 00000000..f6d4b93b Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/d58510b3833343d369d5fee718434d2b.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/d64cbbb81e72087058d342c0037a8338.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/d64cbbb81e72087058d342c0037a8338.woff2 new file mode 100644 index 00000000..df1b6527 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/d64cbbb81e72087058d342c0037a8338.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/d64fb4d87198450bdff12a83ab6e1285.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/d64fb4d87198450bdff12a83ab6e1285.woff2 new file mode 100644 index 00000000..9bbc5144 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/d64fb4d87198450bdff12a83ab6e1285.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/d6dd12d8c75af4411fdd29eef80e1929.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/d6dd12d8c75af4411fdd29eef80e1929.woff2 new file mode 100644 index 00000000..f3b8a49a Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/d6dd12d8c75af4411fdd29eef80e1929.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/d7075fbb054c3a549d2037b0d020e803.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/d7075fbb054c3a549d2037b0d020e803.woff2 new file mode 100644 index 00000000..99289893 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/d7075fbb054c3a549d2037b0d020e803.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/d75a9bebd3ed45c222ec2706e5aa17f4.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/d75a9bebd3ed45c222ec2706e5aa17f4.woff2 new file mode 100644 index 00000000..670fa709 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/d75a9bebd3ed45c222ec2706e5aa17f4.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/d8da784bd0a8feeaae441c43721e7ac4.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/d8da784bd0a8feeaae441c43721e7ac4.woff2 new file mode 100644 index 00000000..d13bf961 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/d8da784bd0a8feeaae441c43721e7ac4.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/d9d2fd026d6d2af2a98dcde16e6a2f18.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/d9d2fd026d6d2af2a98dcde16e6a2f18.woff2 new file mode 100644 index 00000000..acd494e7 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/d9d2fd026d6d2af2a98dcde16e6a2f18.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/da02de9f042b50c10035c9e37bffda42.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/da02de9f042b50c10035c9e37bffda42.woff2 new file mode 100644 index 00000000..9f99a670 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/da02de9f042b50c10035c9e37bffda42.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/daab430f002ab4e78185fadce2eab87d.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/daab430f002ab4e78185fadce2eab87d.woff2 new file mode 100644 index 00000000..4dff8420 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/daab430f002ab4e78185fadce2eab87d.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/dc14d74a2d47edb38b2b6b57fc4f0913.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/dc14d74a2d47edb38b2b6b57fc4f0913.woff2 new file mode 100644 index 00000000..7cc02f9a Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/dc14d74a2d47edb38b2b6b57fc4f0913.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/de4ed50bf5f87359918e27db2a7f013d.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/de4ed50bf5f87359918e27db2a7f013d.woff2 new file mode 100644 index 00000000..1aee8123 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/de4ed50bf5f87359918e27db2a7f013d.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/de91c1b6ebb5830d91bf358e28ede88e.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/de91c1b6ebb5830d91bf358e28ede88e.woff2 new file mode 100644 index 00000000..a016f4ea Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/de91c1b6ebb5830d91bf358e28ede88e.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/e26aedda2c726ffbcfd8403480615f66.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/e26aedda2c726ffbcfd8403480615f66.woff2 new file mode 100644 index 00000000..8412ba14 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/e26aedda2c726ffbcfd8403480615f66.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/e38337627a20b4dffbb049815a78a634.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/e38337627a20b4dffbb049815a78a634.woff2 new file mode 100644 index 00000000..33450ef3 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/e38337627a20b4dffbb049815a78a634.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/e4f5a1e71029dbb38eef5f8b2a5555e9.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/e4f5a1e71029dbb38eef5f8b2a5555e9.woff2 new file mode 100644 index 00000000..31c4c314 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/e4f5a1e71029dbb38eef5f8b2a5555e9.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/e57a912ee13d598bfb2883b8755a6de6.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/e57a912ee13d598bfb2883b8755a6de6.woff2 new file mode 100644 index 00000000..7879e923 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/e57a912ee13d598bfb2883b8755a6de6.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/e5857488f4cd10e545f93e373841de9a.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/e5857488f4cd10e545f93e373841de9a.woff2 new file mode 100644 index 00000000..f17ceabc Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/e5857488f4cd10e545f93e373841de9a.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/e5ef59ab598fb2a14568d875c55f202e.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/e5ef59ab598fb2a14568d875c55f202e.woff2 new file mode 100644 index 00000000..c017d897 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/e5ef59ab598fb2a14568d875c55f202e.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/e72395f7e1af89c8cd0fd06723de642e.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/e72395f7e1af89c8cd0fd06723de642e.woff2 new file mode 100644 index 00000000..d8fcb6a8 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/e72395f7e1af89c8cd0fd06723de642e.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/e724dbf14a0dbe058f8ffaeb2d4dc149.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/e724dbf14a0dbe058f8ffaeb2d4dc149.woff2 new file mode 100644 index 00000000..87c23bff Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/e724dbf14a0dbe058f8ffaeb2d4dc149.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/e9b5e71504f7b303d4350c57372fbc5e.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/e9b5e71504f7b303d4350c57372fbc5e.woff2 new file mode 100644 index 00000000..4e936d18 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/e9b5e71504f7b303d4350c57372fbc5e.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/eab90c6f727501c5c13285ba67c30ca6.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/eab90c6f727501c5c13285ba67c30ca6.woff2 new file mode 100644 index 00000000..88f9bdd7 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/eab90c6f727501c5c13285ba67c30ca6.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/eab94c73f993d5d02281c283b0dd9063.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/eab94c73f993d5d02281c283b0dd9063.woff2 new file mode 100644 index 00000000..662b8f5f Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/eab94c73f993d5d02281c283b0dd9063.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/eb5b1cb9e68b62530de880b98bed6d37.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/eb5b1cb9e68b62530de880b98bed6d37.woff2 new file mode 100644 index 00000000..4827184d Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/eb5b1cb9e68b62530de880b98bed6d37.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/ec6195e2450f892361bd20d44bb6e549.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/ec6195e2450f892361bd20d44bb6e549.woff2 new file mode 100644 index 00000000..146a89b9 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/ec6195e2450f892361bd20d44bb6e549.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/ec68fc96c581aa30d454d2ee153539be.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/ec68fc96c581aa30d454d2ee153539be.woff2 new file mode 100644 index 00000000..e1db55e9 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/ec68fc96c581aa30d454d2ee153539be.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/ecc3a96b08f4505e87c10b3b0ad84174.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/ecc3a96b08f4505e87c10b3b0ad84174.woff2 new file mode 100644 index 00000000..df512167 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/ecc3a96b08f4505e87c10b3b0ad84174.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/ed613af6b5d661cdce32ba2d54401f46.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/ed613af6b5d661cdce32ba2d54401f46.woff2 new file mode 100644 index 00000000..0bf4f791 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/ed613af6b5d661cdce32ba2d54401f46.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/ed8b3a7b104cab4293448aafc4ac9860.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/ed8b3a7b104cab4293448aafc4ac9860.woff2 new file mode 100644 index 00000000..13552342 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/ed8b3a7b104cab4293448aafc4ac9860.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/ef4b80fb0267b97fa2abeca9f3e9ca17.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/ef4b80fb0267b97fa2abeca9f3e9ca17.woff2 new file mode 100644 index 00000000..9c1cc2fb Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/ef4b80fb0267b97fa2abeca9f3e9ca17.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/ef59eff97a89eade577a159034314dc8.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/ef59eff97a89eade577a159034314dc8.woff2 new file mode 100644 index 00000000..c875b82f Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/ef59eff97a89eade577a159034314dc8.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/f03d7fdfaf8cb3f2c6dd9da175692bb0.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/f03d7fdfaf8cb3f2c6dd9da175692bb0.woff2 new file mode 100644 index 00000000..7b37fdc5 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/f03d7fdfaf8cb3f2c6dd9da175692bb0.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/f185e629f014974bd39ec305ceda4af9.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/f185e629f014974bd39ec305ceda4af9.woff2 new file mode 100644 index 00000000..af1a935d Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/f185e629f014974bd39ec305ceda4af9.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/f5e8bdcdf12c71607bf4a552d2d4793d.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/f5e8bdcdf12c71607bf4a552d2d4793d.woff2 new file mode 100644 index 00000000..8329e4a7 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/f5e8bdcdf12c71607bf4a552d2d4793d.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/f6894fc971d259d1e45d635def19bd05.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/f6894fc971d259d1e45d635def19bd05.woff2 new file mode 100644 index 00000000..a7e882e2 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/f6894fc971d259d1e45d635def19bd05.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/f6db837b7039ac5feb8d49f72da011a6.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/f6db837b7039ac5feb8d49f72da011a6.woff2 new file mode 100644 index 00000000..5994c2a7 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/f6db837b7039ac5feb8d49f72da011a6.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/f71a02a1361c8056f178c23751acea61.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/f71a02a1361c8056f178c23751acea61.woff2 new file mode 100644 index 00000000..2da20f50 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/f71a02a1361c8056f178c23751acea61.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/f7b00ccfdc98f0c5cdaa062fd05a33ed.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/f7b00ccfdc98f0c5cdaa062fd05a33ed.woff2 new file mode 100644 index 00000000..35b6d7df Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/f7b00ccfdc98f0c5cdaa062fd05a33ed.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/f865b68d22f634d91f0696a5a920d095.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/f865b68d22f634d91f0696a5a920d095.woff2 new file mode 100644 index 00000000..d5d0d62f Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/f865b68d22f634d91f0696a5a920d095.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/f9654d875c11a34437490dd6c2407bea.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/f9654d875c11a34437490dd6c2407bea.woff2 new file mode 100644 index 00000000..2126be0c Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/f9654d875c11a34437490dd6c2407bea.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/fb9c1ebf50bdcbb2d51286bf2b1da2c8.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/fb9c1ebf50bdcbb2d51286bf2b1da2c8.woff2 new file mode 100644 index 00000000..3edaeb06 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/fb9c1ebf50bdcbb2d51286bf2b1da2c8.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/fbac96c2b9a53a2faa7b9a13d337d33a.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/fbac96c2b9a53a2faa7b9a13d337d33a.woff2 new file mode 100644 index 00000000..270c825b Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/fbac96c2b9a53a2faa7b9a13d337d33a.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/fbde197ff6ac27e027a89459a02100c4.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/fbde197ff6ac27e027a89459a02100c4.woff2 new file mode 100644 index 00000000..f1389a31 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/fbde197ff6ac27e027a89459a02100c4.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/fbecc23dd4c048e879ceeda9bde72d95.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/fbecc23dd4c048e879ceeda9bde72d95.woff2 new file mode 100644 index 00000000..af9621eb Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/fbecc23dd4c048e879ceeda9bde72d95.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/fc665f2559f5abf030f00d0ebfa4d1b9.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/fc665f2559f5abf030f00d0ebfa4d1b9.woff2 new file mode 100644 index 00000000..0724f0b5 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/fc665f2559f5abf030f00d0ebfa4d1b9.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/fd4dcdbf2ce22ecad804c9ed8ecf5584.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/fd4dcdbf2ce22ecad804c9ed8ecf5584.woff2 new file mode 100644 index 00000000..28d54031 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/fd4dcdbf2ce22ecad804c9ed8ecf5584.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/fde916f1e4b33ad8cf5f2d48c091a12e.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/fde916f1e4b33ad8cf5f2d48c091a12e.woff2 new file mode 100644 index 00000000..ee460683 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/fde916f1e4b33ad8cf5f2d48c091a12e.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/index.html b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/index.html new file mode 100644 index 00000000..81296fa9 --- /dev/null +++ b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/index.html @@ -0,0 +1,455 @@ + + + + + 字体分包构建报告 + + + + + + + +

    + +
    加载中
    +
    加载错误
    + +
    + + + + + + + + + + +
    + 中文网字计划 + cn-font-split 生� +
    +
    + + + + 汇总 + 字体信� + 分包 + +
    + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/index.proto b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/index.proto new file mode 100644 index 00000000..50a3fcbc --- /dev/null +++ b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/index.proto @@ -0,0 +1,117 @@ +syntax = "proto3"; + +package api_interface; + +message InputTemplate { + bytes input = 1; // ttf/woff2 文件的 buffer + optional string out_dir = 2; // 切割å�Žæ”¾ç½®æ–‡ä»¶çš„æ–‡ä»¶å¤¹ + + // ====== 构建产物é…�ç½® ====== + + optional CssProperties css = 5; // CSS é…�ç½® + optional string target_type = 6; // 目标类型 + repeated bytes subsets = 7; // å­�集 + optional int32 chunk_size = 9; // 包大å°� + optional float chunk_size_tolerance = 10; // 包大å°�容差 + optional int32 max_allow_subsets_count = 11; // 最大å…�许å­�集数é‡� + + optional bool test_html = 13; // 是å�¦ç”Ÿæˆ�测试 HTML + optional bool reporter = 14; // 是å�¦ç”Ÿæˆ� reporter.bin + optional PreviewImage preview_image = 15; // 预览图åƒ� + + optional string rename_output_font = 18; // é‡�命å��输出字体 + optional string build_mode = 20; // TODO 构建模å¼� + + // ====== 预分包优化项é…�ç½® ======= + + optional bool language_areas = 8; // 是å�¦è¿›è¡Œè¯­è¨€åŒºåŸŸä¼˜åŒ– + optional bool multi_threads = 21; // TODO 是å�¦ä½¿ç”¨å¤šçº¿ç¨‹ + optional bool font_feature = 22; // 是å�¦å�¯ç”¨å­—体特性 + optional bool reduce_mins = 23; // 是å�¦å‡�少最å°�分包, + optional bool auto_subset = 24; // 是å�¦è‡ªåЍå­�集化 + optional bool subset_remain_chars = 25; // 是å�¦è‡ªåŠ¨æ·»åŠ æ²¡æœ‰å£°æ˜Žçš„å­—ç¬¦ + + // CSS 属性é…�ç½® + message CssProperties { + optional string font_family = 1; // 字体家æ—�å��ç§° + optional string font_weight = 2; // 字体粗细 + optional string font_style = 3; // 字体样å¼� + optional string font_display = 4; // 字体显示方å¼� + repeated string local_family = 5; // 本地字体家æ—�å��ç§° + repeated PolyfillType polyfill = 6; // Polyfill 类型 + + // 注释属性 + + optional bool comment_base = 11; // 基础注释 + optional bool comment_name_table = 12; // å��称表注释 + optional bool comment_unicodes = 13; // Unicode 注释 + optional bool compress = 8; // 是å�¦åŽ‹ç¼© + optional string file_name = 9; // 文件å�� + } + + // Polyfill 类型 + message PolyfillType { + string name = 1; // å��ç§° + string format = 2; // æ ¼å¼� + } + + // 预览图åƒ� + message PreviewImage { + string text = 1; // 会显示在 svg 中的文本 + string name = 2; // svg 文件的å��ç§° + } +} + +enum EventName { + UNSPECIFIED = 0; + OUTPUT_DATA = 1; // "output_data" + END = 2; // "end" +} + +message EventMessage { + EventName event = 1; + string message = 2; + optional bytes data = 3; +} +message MultiMessages { + repeated EventMessage messages = 1; +} +message OutputReport { + string version = 1; // 版本å�· + Css css = 2; // CSS相关信æ�¯ï¼Œå�¯ä»¥ç›´æŽ¥ç”¨ + string platform = 3; // å¹³å�°ä¿¡æ�¯ï¼Œrust 的构建平å�° + + BundleMessage bundle_message = 24; // 构建消æ�¯ + repeated NameTable name_table = 25; // name 表信æ�¯ + repeated SubsetDetail subset_detail = 26; // å­�集详情 + + message NameTable { + string platform = 1; // å¹³å�° + string language = 2; // 语言 + string name = 3; // å��ç§° + string value = 4; // 值 + } + + message SubsetDetail { + uint32 id = 1; // ID + string hash = 2; // 哈希值 + string file_name = 6; // 文件å��ç§° + uint32 bytes = 3; // 字节数 + repeated uint32 chars = 4; // 字符数组 + uint32 duration = 5; // 构建时间 + } + + message BundleMessage { + uint32 origin_size = 1; // 原始大å°� + uint32 bundled_size = 2; // 产物大å°� + uint32 origin_bytes = 3; // 原始字节数 + uint32 bundled_bytes = 4; // 产物字节数 + } + + message Css { + string family = 1; // 字体家æ—� + string style = 2; // æ ·å¼� + string weight = 3; // å­—é‡� + string display = 4; // 显示方å¼� + } +} diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/preview.svg b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/preview.svg new file mode 100644 index 00000000..c0ea6e9c --- /dev/null +++ b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/preview.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/reporter.bin b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/reporter.bin new file mode 100644 index 00000000..934ec126 --- /dev/null +++ b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/reporter.bin @@ -0,0 +1,32 @@ + +7.6.6" + Maple Mono CNitalic400"swapx86_64-unknown-linux-gnu¤®¤®ÜÑý ø�´Ê. + MacintoshenFontFamilyName" Maple Mono CNÊ* + MacintoshenFontSubfamilyName"ItalicÊX + Macintoshen UniqueFontID"9Version 7.000-beta36;SUBF;MapleMono-CN-Italic;2024;FL830;Ê3 + Macintoshen FullFontName"Maple Mono CN ItalicÊ- + Macintoshen VersionString" Version 7.000Ê8 + MacintoshenPostScriptFontName"MapleMono-CN-ItalicÊz +WindowsenCopyrightNotice"ZCopyright 2022 The Maple Mono Project Authors (https://github.com/subframe7536/maple-font)Ê, +WindowsenFontFamilyName" Maple Mono CNÊ( +WindowsenFontSubfamilyName"ItalicÊV +Windowsen UniqueFontID"9Version 7.000-beta36;SUBF;MapleMono-CN-Italic;2024;FL830;Ê1 +Windowsen FullFontName"Maple Mono CN ItalicÊ+ +Windowsen VersionString" Version 7.000Ê6 +WindowsenPostScriptFontName"MapleMono-CN-ItalicÊ) +Windowsen DesignerName" subframe7536ÊL +Windowsen Description"0A monospace font with round corner and ligaturesÊ9 +Windowsen VendorURL"https://github.com/subframe7536Ê; +Windowsen DesignerURL"https://github.com/subframe7536ʵ +WindowsenLicenseDescription"‘This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is available with a FAQ at: https://openfontlicense.orgÊ6 +Windowsen +LicenseURL"https://openfontlicense.orgÊ- +WindowsenOther"Broken equals ligaturesÊ8 +WindowsenOther""Broken compare and equal ligaturesÊ* +WindowsenOther"Enable arbitrary tagÊ0 +WindowsenOther"Break multiple underscoresÊJ +WindowsenOther"4Restore the thickness of backslash in escape lettersÊD +WindowsenOther".Break connected strokes between italic lettersÊJ +WindowsenOther"4Relax the conditions for multiple greaters ligaturesÊD +WindowsenOther".Enable double headed arrows and reverse arrowsÒ~ d58510b3833343d369d5fee718434d2bð»"* !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGo(2&d58510b3833343d369d5fee718434d2b.woff2Ò† 14074038f09f2992506652c41793a12a¼u"3HIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnpqrstuvwxyz{(2&14074038f09f2992506652c41793a12a.woff2ÒT d249b0dbd93377f42fa2b22ba7e8c8b5ø"|}~2&d249b0dbd93377f42fa2b22ba7e8c8b5.woff2Ò£ 807ba1cc19d7d0024e72e61cf0ebf44cà%"R ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉ2&807ba1cc19d7d0024e72e61cf0ebf44c.woff2Ò¹ 3084b5ed216f58266b350fb1cf8f20a8ˆ#"hÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüý2&3084b5ed216f58266b350fb1cf8f20a8.woff2ÒU 523dde3429382902abbb8c87b6348ae3Ü"þÿ2&523dde3429382902abbb8c87b6348ae3.woff2Ò£ 45ac11d19469e45d2900d377f4c9d339¼"R€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨2&45ac11d19469e45d2900d377f4c9d339.woff2Ò¹ b4c18ec0480289e8b78602bf5421f184ì'"h©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜ2&b4c18ec0480289e8b78602bf5421f184.woff2Ò—  13cfaade5fa9750c4ff81dcaf4b95016”"FÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ2&13cfaade5fa9750c4ff81dcaf4b95016.woff2Ò› + d078d39549ff5f5c4580977579eb0da0Ô%"J��’› ¡¯°ÍÎÏÐÑÒÓÔÖØÚÜæçêëôõüýþÿ˜™š›²³·2&d078d39549ff5f5c4580977579eb0da0.woff2Òq  c6404b1d423412f3da3624d8c0544829Ø" ÙÛ¹º¼ÆÇÉØÙÚÛÜÝó÷2&c6404b1d423412f3da3624d8c0544829.woff2Ò£  7992c7ca98a5631d37cf01842527c8c6¸"Rôõþ„…†‡ˆ‰ŠŒŽ��‘’“”•–—˜™š›œ�žŸ ¡£¤¥¦§¨©ª«¬2&7992c7ca98a5631d37cf01842527c8c6.woff2Ò�  4ed87646fc3e9f43f121eb50da4bb9faô "L­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÕÖ×2&4ed87646fc3e9f43f121eb50da4bb9fa.woff2Ò£ 72f4ffe9d8585f8291c4eb2db93c005aÔ"R�‚ƒ„…†‡ˆ‰Š‹ŒŽ��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª2&72f4ffe9d8585f8291c4eb2db93c005a.woff2Ò¹ d75a9bebd3ed45c222ec2706e5aa17f4ä+"h«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÑÒÓÔÕÖרÙÚÛÜÞß� 2&d75a9bebd3ed45c222ec2706e5aa17f4.woff2Ò— 7d942c509d15d23b50bd243575c4eae6Œ"F‘ ’ “ – — š › ¢ £ ® ¯ ° ± ² ³ ¶ · º » Ô Õ Ø Ù Ü Ý Þ ß ä å æ ç è é ô õ 2&7d942c509d15d23b50bd243575c4eae6.woff2Òª 4db528eac80b9c5097646b3e014af3d9°!"Y‚`Œþ�`šþ›þ�þ¼@Ÿþ”@¦@Þþ“@Œ`�`Ž`�`œ@�@˜@™@ˆþ‰þŠ`‹`ˆ`‰`�`‘`–`—`”`•`ÛþÝþÏK¢@Üþ˜`™`2&4db528eac80b9c5097646b3e014af3d9.woff2ÒÎ 831b14cd6cca288814c1686193d8a8e7˜P"{„퀜¯Ì¨®‰Îº�­œŒ©�œºœæ¶ý­å�Ÿê†�§²�“ѧ¨êšœªœý�Ì�ÜžöËù·ô¼Šœ†èšž�ÄÙŸï§ÕÙŽ�¹Ë°®ú£ž·å»–¦(2&831b14cd6cca288814c1686193d8a8e7.woff2Òð ad3639eff5bb395e94ee621f3464f15eÈ{"œ†¤°¤š·¨¥°çÓžåÎÛŸÏý‘ÄŽœÇŸ›¥§À§�ꃈ¨Éöصš²Œ¨è¢»œËœ¶¤‹œ¬Îö¢¶·ލ”½ó¢‡Ë±¸Í£ì�Œ€â®…€°Ëߜո¦½è¡ºÎÙÊì¢ÀÄú½‚³ÍóÐÇ(2&ad3639eff5bb395e94ee621f3464f15e.woff2Ò‰ 1cd6774e0ac5ded3e1cc29fa407324b1ø�"´ðÊÖ�жš ¡¥Ä𑨀¾…£ûù¡÷¾—Ï£‹� ¥¿Êéä‹ôÝŸÿʧ‚¼–Ä—¿Ó¾¬öú¯øíã�à­ͤ¹áô«ŸÎÄ“ÿª˜±´ØŽÌîíµêÎ�ö¼Á©�¸º¦ÅÁ‰œó¼ý²ô—è�€Î墡—ÿžáŸ�¾îÆý¡(2&1cd6774e0ac5ded3e1cc29fa407324b1.woff2Ò› e72395f7e1af89c8cd0fd06723de642eÐ�"Ɔ¸Óý�–²ã“ßýÍž©¤»Ú€Åùä¾òåËÑó¯ÎôÍÑ£Œ�º¾àËب⾸¼î«¶â‡ÐœÏ¨šäֱꀮÔׯžº®ãÖ›�‰·Ëõا”ð²��žÓ ˆÎö�ü·÷šØŸûø©²»ÙÀîÁ¦Äý„Ï�ÆÈÊÂØàœ„¨åáΡÖÃ΄²(2&e72395f7e1af89c8cd0fd06723de642e.woff2Òª f9654d875c11a34437490dd6c2407bea¼¶"ÕÁÚû�‘¨ƒ˜¥Ç¤�‡Æ·ÐÕ¦�Ξ±«‘朤—º—÷¢îðÑþ›¤Éœ¹Êñ¢ù°Žÿƒ€�ÝÆ—â¬ÎÚÈœ ž‹î  öôÚ ¶ÊÅë”Ø½Ë‹¯¤œø§ˆ¼“œ�¨Пˆ¿Á—Æ£÷�â§ýÌ£×§óÁƒŸè«¨Ç¯ç¡Ù‚…�À»ÀαŸÂÈ¢ƪÖ§ôÊò»œ£(2&f9654d875c11a34437490dd6c2407bea.woff2Ò¶ 85470da5a88f93296bc6df159cf4e070¸º"áïÀ¯Ê¥Åìž›Ÿñ»Û­†±™¤Œ·“ï›ͧض«�‘¸«¤�Àê§¹·ºòËľʿýί³£¾Ÿ–œóƒ°—ƒ±Ô€»¦¡Ô‡çã§ò„å—»§ŒµÈСИļÐè¬Æ­àžÚ¢¹šû¢©—¤Å¹Ð‰ æž•¾åÖ�²�€…¦Þ®ÿ’ÍÄ¥ˆí—ôíñ¾ŬèÙƒ·åχ²×¶ úœœ(2&85470da5a88f93296bc6df159cf4e070.woff2Ò fb9c1ebf50bdcbb2d51286bf2b1da2c8øÉ"íΞ•ÅÙý¼ Å¿Ï×Õž÷ÚÌꇜµ£Ÿ¥ÑŸ£šþ­¾ù…ÜÌ€‹Ÿ˜žñÛצ­Ë𧃆é¬Á““ÌËÚŠÅÑΗ÷É¢™Ëþ—ò§Þ­§Ç£¡‹¿²¬Ñí—¦ñ¸߯¦¼úôᘞ¥�ÏǦÿ¼ÞòˆÛ§ªÎ·Äôƒíýôý®—¶å†§ïó¾­Öö’¤�£Í©ÀÑÕ—”�€”¿¢¦ý󦸵ן (2&fb9c1ebf50bdcbb2d51286bf2b1da2c8.woff2ÒË eab94c73f993d5d02281c283b0dd9063üÔ"öƓǣœ½Æýƒ¼Ä—Çýß±îþ��ò¼À��Ÿ›£�îŸîÊ�ÓÄ´²Êí¸Ð™£Ô³ý¨À¸ȧ„±ðóʨ©¥Š›¾ÌŸ®ä¬—ëë¿é®—ž‚ ù¯�Ïà£˳û—¿¥¤ÿ·¿÷§‰Æçâ÷—¥œÀðϦýìŽô±²Å‘€¿ï†è¨�­”œΦíá¡·Í¢À�Ý—Ь‹§³›¿Äƒè„«ͬõ¿»óé¶—¤’�‰�(2&eab94c73f993d5d02281c283b0dd9063.woff2Ò× 5c3ee9dea53a9d7b01438db18b7d9ee3Ôß"‚ÐÎÞ¸ìÅô­‹çþì…›Ÿ²ä§û°ÿÄ–³¾ÖÏ£Ú®ÏËÅ�±…�½¢šŸš¸—’Çàõì´ÅÊ¢·úÌÐϽˆ·‡îŸÅ¢�¿ó¯ðŸ ¾å Çäâ­³¥‡¤ï̸ÜÜýçĪ²áœŸ¬ÜŸÆ·¦¨ô¢áÝ�¤ÈýߨÇ®¡�³·Ë¢ðšñ…€ªóïîÌÓÏÍ¢€÷—Ï·½²—Ï¡ë±Ò“¿ŸÏžМéÅÞ»™ ú„í¢ßóø£Á(2&5c3ee9dea53a9d7b01438db18b7d9ee3.woff2Òà 04d2482312ead637c7909b29bf1c3db0Èì"‹¯Ëœ­åêð±�õ׿ÞŸå�­—´ðö©¿§î»Àßìå�±Í—ùĪýŸ”¸˜·í­¬„¸¨Ùõ¹Ÿ‚¾߯É“–þÌ·«¨¬�Ò®Ë�³Ù®¿ó²Õ¾¾œ³¬©ÜéËâÖþ³ô³ýÅÅÉ—«ë¤·»ê½¸̧ûóß·“ŸĽý�à¦ëà­š¤¤ë¢¢ý§š¢Çæ§´œë¦¹Ù®²ú­›Î±ä³êÙêÔöÇëÒ׿�¶¬•½õ›ïõíçÈä(2&04d2482312ead637c7909b29bf1c3db0.woff2Òé a1a9732d15b75ffb346fa7024d3bfab3ì�"”âÆˆ�ûÖûž¢úØ�çýýžÿÎÙžãîÎμî—Åô¦×—ñ¦íï‚Óä�…¿ªÇð¦�ÎÑöšêÍ×ø¢ƒœÍɤžâÙˆ©®ªÞ�š�ØÄ«�Í�üýʦû£Ýý®ª¦ö‘�áØð­§ú¥Æ� ”Þ�ÒŸÌ­½Éز�¬¨ÃýéÄê©Ê£êþǪðœÝŸþÄÉÅæÖ»¤¼žæ� �¼¥ÀþÍÜ º € ‘ЈDޏø¢þ©ÝœÂÎå…Ú€£·²Û׈‘‚(2&a1a9732d15b75ffb346fa7024d3bfab3.woff2Òï 422eabf71b7848729fbd0bffd3d257d5ô„"š“½Ç ‘±®¼ÿ ŽÀòͤǠ‰Û¾ëü¼�·×þÿý™ª¥ÌýŒÞ±�¹ÞõáÇ�ð­ÉÑŒ‚°ˆ˜à®Ÿ æ»ãÊÌ��óýØ”öûìÚ¦ˆ·ó¨¨¡âËÏ…°œâ¨èò姌ǫšÚŒ—Ë™³¿ÂÅËĬ×®°ž®íɆ±¥ª„× åõýŸ™¿—·˧ƒ¨·š‘¤þöæ–󧱩ŸãÒ¾¨µÍý¶ÏÛëïžÁ©ײ¨—²ÚΜú°¶ä�¼„¿®æá¦ù²¯å±‚(2&422eabf71b7848729fbd0bffd3d257d5.woff2Òø cbb52751a158592bcabbeabcba4ece01Œ�"£ö½«²²êѽÇØéý»ÊŒ¼¸š�ܧÖÙ®Öí¨ÎÏ‹‚§ï¤²£ð¢á�¢—Ç÷è»…¬ï—ÿ ¾Ú¯ÜÑʘ¤£›�ªÅœÒ¢ÚþÌä§Ø©þõ¢þÎ�¸ÖÜõàÛŤ¸·£� ¯¨ç¤§Ÿþ°‘žö§¯úнȬØíâÂŽá�ÄÝ›àØ‹Úã¶Á‘Ö²æ…�­Ö¦±¾‹›Œ£—¨ß›“þÛÙîžżåÅßóÛ×÷Ûö­î²œƒ§½ßÎÁó†³ë§¿—Ê—“¾½·°ê¸¤Ȩ(2&cbb52751a158592bcabbeabcba4ece01.woff2Òþ 555b3d8ef206ac3411090208f834815c„š"©Ìì�´Ï®ÏÇìðDzê�ÜÞ” ßŪ¥‘Ÿô»Ô¶Š× Ì™Ùâ—¯š‰Ù¿¬œ·Öùš¤³ñ¢©µÅÁü‰�ª¿¹„ã묶†‹·Ûžæ“¨Áè›ïÁµšš§ÿÅ÷¦¡�‰‚܇“˜ÌÖ㆓Åü¸̇Џ¥�Ïœ´žû·¸Øø—ÿôþà˸ÀóÄ­«·—€Õ×Ï ·ýË�¦�Öòœ«¦â�óü¨ƬÈá¢ÖåÐÛäç˘Åû« £Ÿ©üÒ‡í¼òé¾ô¤оÚÌŸ½š¸Ú´²®ë°(2&555b3d8ef206ac3411090208f834815c.woff2Ò‡  c2c5dad7cebe52c61d11b250772f6226̦"²’µµŸ‘ëÃãßá‘ÆÓ³†“�Øܪ‹×¼¸º��·¥š¸ýòþöÀ� ìÄÚÒÛšÄÈû¾çÂÍ €À¦Û­¼¯ÆÕýŸÙè­¹¾Ý»öīΆ®Ý£ñœËóÁŸÔšœ¹À£÷­ʸ¿Ù¦š´š—¹„¿—½Ü�¨Ûž„Ÿžÿï�²ö°œ²´¬‰ç›¹þÜ´ÍÏÊÀΉùùöן×…ûÿþ´ö´¼—¿¸å¸º¤®�õ°í«¿� �Ùä˲À®·êÛíÑ—�ñÙœ´þ‹Î…Ÿíàì§ÓÅÅŸ�Úêýü¢(2&c2c5dad7cebe52c61d11b250772f6226.woff2Ò�! e5857488f4cd10e545f93e373841de9aÌ·"¸ ýØœ¬£ÿÜæË ÜÄŸ’ àÁ©çÐ퇮ã�½œ†Ÿ¯ýÔ°å²ÁñΣç»ú—äâ²Ö�‚Ú—¢˜çá¤ìÓÚÿÍЮ˜þ‘Éø¼Ù¶Ç¥ï௪Øýþíâä¶Ýë×—Ú›¨•ÀÆ¿–×óžóœ’£×�áîЂØóõ ð¹™‰÷†’ ƒ¾½ÅãļÅùŸ°Ñ”­Ѱ¯žÍŇ·��îÞõšÛï®ùîÑñ´œ±�˜¨¨÷¬í£’ù‘¦ÑåÙâÀèÎ×Ë�œò©ÑÝš‚�ž—µ¥Ú‚Íú‚…§�Ñ‚‚Íø(2&e5857488f4cd10e545f93e373841de9a.woff2Ò“" 8846f4a6d40d34da3f843410072f9f6b€Ÿ"¾¸ž¼á£®‘Å» ³€ÖšýÙΟ¡šæ—„½µÛ±˜�²ÔŸá£¦ž�žßíÐÀ�¹¾ ‹˜ÏšŒ�¯…댤ýà¿�œÁ�†äˆ³Á±ªÄò�æóÒ·ó›—±‰¨›Úö�°£ñϱÎËÌ럙ž·˜�¿œÈ—Í�€‰ÁÃ�Фý¿ÎÄؽÈ©„‹žÚ´¨¾¸Æ�¯�Þ°‰Ç‚ÛêÚ–ÆæéîÚ�˜ˆ®¨©¯—‡³ý£¨±’¿Šž¡ÜáÙ©¹Á¢ÙÚÌœí ˜êáÛàç™±‰•殇ºªÔî±ÿ�†í«‡Ü¸¹µý(2&8846f4a6d40d34da3f843410072f9f6b.woff2Ò™# 49be1538eff29b63d05de592dccebc7a¼¹"ÄÔÅ»½Ëš©ŸÊÁ�ëù‚ö²ð̱÷³ßâÊ•€Œ™ãˆ�ÞìÊÆÐÂÃÑ›І¾�ãƒϲŸ¾Ø¿�·•�ôžé¯í²éÈÔ‚˜Ç¹œÜÎÒÅð²È—䥖Ÿ—ÎÛÍçßõùõƒ�ø�õ¬ò«±ªðà݉ç䆽ƒ Ò¥ðÄôÇá�ËËÓ�–Í‹ªȦõ¦¦¡† èžùÍ·¤”¬éÀÆÅªÚèñðÙûÛ—õߟ�„ê­ÌàÎÂÌ›…ÑëÄö¬ƒ¯¾®´Ä†­ˆÂº¸Ü©�ª�¸’£ð�…·ÿ°öÌå©À�—ùù¾ÆÎÁ×(2&49be1538eff29b63d05de592dccebc7a.woff2ÒŸ$ ab4213392d084ab0ebc642d8c77a6d8dÐË"ʤ�›Ÿ‰¬ÿ·¢Å¢Ø϶ÌÊðÍú©ì¢’„Î�™·È“ÒÇäÝ–¸Ƙä±ϸ‰áÆÈÅÚ‚Æ‘öᮘ§Ÿ¼Þšä¶ª‹§¨µ¬¤µõäɽɲ±Å˜ùíÇ¡ û´ò¤Å­¸äð�­È™³ð„‚¯÷ŸªæŸÁ�š´è†°²ÁÒÀ«úèË»³é»ˆ±ŒÌ÷Æ�Ï€¤¬Š¹ý™©ÉٗܨŸü¾Ù§ª·«ÞÕ¶¸‰ñ—”ÜÉ£÷½é¤¾·öéÑ¡ú·Þè î⚦½¿ôØÈÕÆðÀðÎÄ·¨˜ö¢®¡º²¤É�ž˜¸²ý§œàšÊ­(2&ab4213392d084ab0ebc642d8c77a6d8d.woff2Ò¥% 140d7c3f82c5d83fa5ebc83b0ed53361ôØ"Ðռ䨻ª£ÖŽñ¼ëÛ®�«ÜŨØÓÌÅê³®»¾žÉÃ¥ ¾‡£¡¼�¬ªÏ’Ä©�¯Ñ³…ôÝÈí¡¿�ô¯ŸÁË�±Ѳ‰Ÿ’¢ê¤ÞÝ»¡×íÙ¿ÌÙ�ŸÁšÙ�ȸ†ëé󪜛؊ÿ¿·ö Õ¬øÚ­áð‚ÕðÁ�öšº�¹¦Ëö¬¡ÇȲœê˜Ø€ç¿“±ÎŒô´½¿ŒÛ²¥á†üÿƳá»ÄÙ°ñ�þ·«»ôžÈ†Ìó±üÅæáäšÃКÅèň³±ñ€ôïΰÉÅð¸ážŸôô–ðüÍËÛÔ�»£¸‚¬Áí¡€�Ô�ÿ‚(2&140d7c3f82c5d83fa5ebc83b0ed53361.woff2Ò«& 319fe728346b646e7603e9485a490f94”Ò"Öý¢¹²ÆÚÿ³ªž£¼¨ˆ�¬ÔÏ¥³û³ݶ÷ôÈŸŒ„­‘Òóɧߥ�Ðø·Í¿ Ö ÞЍÁ¡ëð¢�ÈÂÑÁ„¾ÿ¾Âåïá‘Ëõ¯òíéÁåãýӛ氄ÝòÀÛÛꬽý¤š‡±¯¾�¨Æíéï˯þ‚à§²ë̵çÖ×åõÙˆÙéžÕ‘ñËìˆÌ¿áˆÑ¢®ØÔ²ªÐ¯Ø¥¾Ò†»«ʪƒúˬÈר⻩�Ÿ„Õ­óÏÜêù§Š‚ ¤êê ½Ÿ­÷ÂÐø©ëšŠâ¨ƒñŸÊ®¶­“¡ò‡ñ²ž½÷éþ„ËÝ„ˆªšïÐÆ(2&319fe728346b646e7603e9485a490f94.woff2Ò®' 67cc89bb1a84552b002953998db5c93eø×"Ù‚Žà²´¬íòÄ¢»çÊ‚‚ð™œ޾Üéʤß¶ŽÒ‰£‘ñ˜œ™­ÉÑ»©êŸï£€¦Ѥ‘µ¶ƒéþ­å €¡Ì£½ÿ¹å¾ œËœÓĉ€ÊçÁÝ®ú�ð¾Ó¦û¼´ÎªÀ­¹ˆŸËÀåÝ…ªíƒÑÐöЃٺÈ⦱‡ÚݽМêéþôÏÊùÝ©¡Æê«ªÝ¦ª‹‰ºÖ©Ç¼ ‰î÷ñÇ„ê¬ØÅ†‚åòذ›œν¼¶…ó‹‘Åɾ¨øÈ䣸£õ—г�¼®áÚѤËÐþ€¬½¼ãïéÚò²�� ©™½¸²Ø¥¹¨¡°áªæÊ«ÅƒÝþœ(2&67cc89bb1a84552b002953998db5c93e.woff2Ò´( 6ada6d691877454e16616d059de86ac0ìì"ßÖÅ‚Þ�œ�‘�õӷ禦Áî÷¨À«æª�òäá¹·äÕãæÉ–©�…“ÐÆ¢¢ ÷ ì‰íåŠãÅ×ÎÉøò˜¾†þ±„Ûö„çÞ—Ïêô²½…Èœ¯²‰ÂÜÁæÚîÄèÝÇ­¡ª„¯ËѦ§Ͻ„õÜÏá¡�¥‹­·²ÔœÖ¤í©íÎÁØíõ³¹¬ä¯Ý毾‚ۈ榛Ŋ ’áÍ�«Ù¸ ’ÅŸŸŠÜ‘ÍŽæð´ã麚篶€¿×¦¾£¥±¬ê€’À³©‰®«Æà⇂ª†„ð�ÒÑÓµìËö®¦Ÿ¨³ñåƒõ­�¿¼ºýȲöàÕþÊ€óýª°(2&6ada6d691877454e16616d059de86ac0.woff2Òº) b86aea3c77fed71f6b2082ae352b414eäè"å�ªüíêÙÔ¶ôŠ–‘üÀ‚«•²¶„³ÑØÞÊÙè̳ƒ±´Ö®ã ŶÂᬚ¬…’Ù ±ûÙ¤°ކ½Šôꃴ–�õý÷«‹Ð�̤ÆÍ… Á¢œ„óÈÃœŽ‚ÌÏÏóÅðë̺½©Û§ØÛ‚µ¸½œæâþòÊö£…¡ú©áԢϕ¼¹ÅÒ̰·žš¬ÅÑ®ž¨ó„¯ÏêØΡܳÒÃ’ÉÏÚ¨§úäښ夈ěۡŠôš¥ËºÆÌâØ„̬ÇÚ¤ªðÂÑÄÀ¨†ÞÌÐÕë�®“ŠàòèÀÊÈù…ʇù«ï…µÎÐåí¾Ö�ð¼û¹õ¡�ƒ‰§�ÂÊÚý¼‹¯(2&b86aea3c77fed71f6b2082ae352b414e.woff2Ò½* 39b62ffec4644d0a9b53165cfc23ff6aäñ"è¬ï—ñÏ ÿ¦éݫꥩ¦…£ÜŒ§¼öšâˆœðžÖõó´û‹Ô§–ÀÆ´’¯€€—Ñø¦îÛŒˆ¹ùªùÐŒì�·ÑÚøêܦœ®‰©ƨ»¨ÁÿùŒ€£Ô¢£Æœ¼¨†üåóÙëïÿ¥ù¢—¾À¬šÏ†³öŽé‹¨Ÿ€ƒ½ž˜ñ伤ù£Ÿ¯Ûý°©©»ïżþÅ›ºôëä‹èÁÑ�þŒ•¨¹³«¯´·±ýþ¥ØŸë»÷»Ì­èÂø«¹ëù£¢ÝÒí ¦ˆ£½óéЪ¡¬ý§ˆÁµ½ô×�‘œõ¢ï¢ÅñҦ硖¼Áª§ñ̰ðØÚ�øýíÄÔÿÆôÊ¡”þÌÂ(2&39b62ffec4644d0a9b53165cfc23ff6a.woff2ÒÃ+ 3cf21bf489a799f50ab2eeb40d40e50a¸÷"îÛÓá¸ÉƘ´ùÛ£˜™ãÓ½ˆª®šž®ô̸®é‡LJ’Ú®ëâ²ê®…†ÌŰŸíÀÔ‘Àò‰Ýر”ÌÉó¤Â÷¢Ѧ¸¸îâ¬åÇ�÷�½Ú¸©’Ò¶£Òöÿ¼Æ÷šþ´Ü±ŸŽˆßÁÐÅî¢ÞÆ¡Ž�Èæª½� ·„³ÝðˆÐ¼Ù›‹Õ̷ׇª¾šÕÁо…¼ÇĔ『ڳšÄ¨Ñ¡Û¾©ø‘ïÏ� ÿ¢�ƒÕÂÇ�ƒ¤ªÙÏ—§¾”Á¸œ¾®¦€ѸÊŸà¸�¨“•¦Ù…Òñ�À©Œð�ŸÞ¹„Å¥ù÷áÕ¨¯‹ÕѦ˜ð¢ðÿ÷°î�Þýš�–ÐÁ­ì©Ÿ�ÿ£(2&3cf21bf489a799f50ab2eeb40d40e50a.woff2ÒÆ, 37b2b4c4f322af9d49ec6d69fb9d46beèŒ"ñªÆŸ¨Š«‚±ŒË‚†�蓾ڢàåì¬�ãÛʽƭ¼ÁÄžž‰âÎâƆ²ÜØá똇�»€á·üÙï¸ü²Ä’¦¯Îý®¤��©ºÑý­Ì¦ ¹óšµœ˜ì–œ´å²ÿ²�ˆ¦©Åÿ½äÕ��±ÉŠåªˆ¦…±ŠÄÑ£û‚ýÇÀ—›çâÅÊñŠ˜гðèÿîÆ�ʽí©ý«›©ØÜî –±Òýõ¨ŽÄŸ¿ÏŒÕùŸØÇÖ¥¤ Àžœ…ȸلߧ­®©§ø‹ËØÔ®¦¦ì澬©šÂ‚ý‚‰‡Íè·õ¶��К€þãý�’¸êôÚ¿¦ÀªОÄ£›Ùë—©Ë‘õ„ÁË£‰‡ϼ(2&37b2b4c4f322af9d49ec6d69fb9d46be.woff2ÒË- 423539fefd434588b54fc2a4e40dba44¸ñ"ö ´À­ÄÏù˜Œª¼Ë«çÐнΧÙÉ‹¨Óãõßù¦õ•Ïœ¬¹¤©œÖÌù”€ì“‚´æ­Ñ Ç­¯©šý«¥ªŸÿ�©²�–ºì³éβˆ¾ˬÚ­£Ÿ¯£ôŽñ¢øàþ»â北ɎŸ´¼µ�¨„µŠúœ„–żèÄŸ‰«ÝØ„§ãÙùëß®°ªõÑß’ÓМߩ۲‰‚¢ѳퟀJ§¼±©÷ųĈ¬—£æÅÿž¨ÌìϹ¡›èï«¿šš¹äª«¥Ô¯©ï�ˆ²çë�•âä̆¦ÛØÒœÑÛÿౡϟÚÅ­®•§ù־íºÌš”º…þ­˜Ëñ£Ï⼆¼éŸßä“©¤ÜÕØ(2&423539fefd434588b54fc2a4e40dba44.woff2ÒÏ. d7075fbb054c3a549d2037b0d020e803 Š"ú±‘éµ€ÇáäãšíŸŠÔì¾€«Ë¥çžíÞ¢¡ž©äáÖ½ή«†ëÛÐîùî䑚¿²¡�¯àÿɦîå³è•�çÆ³á�Ç€ܶĶÞʧÂ�ÛÛÜ‚Ù�¹ÇÞÓœ¹¸µ¡š¨ÍíËþŠ¤Û„ïÏÎÔêއœŸެ�ðä®ïת Å©öèóÀÄ©ïíÒßÉ¥…±¨Æ’…ö²¢§Á¶û›·¼ð£Ä۬៽‚¹ª¦çóö±…˜è©�¹†�ñ‡ê¾º�ÔȸðÉÎÔМ…ù�›¬ÞŸæî¨³Ý¡§©éžÚ‹öÉÖêÖÍ»ƒˆŸõ¢œ£ª�½ýø©êÑ…ž‡«ì þ¼Ì௮ â¢Ÿ›®³(2&d7075fbb054c3a549d2037b0d020e803.woff2ÒÕ/ aa4638441dd86aeb35eda2a9e688e05f„Ÿ"€ÑŸÔÄñˆ�òºÇ¼ÁšÆšŠ«Ïš½ƒŸÆÆœ‰œÝ»¡—Š¾Ù¿€Ô½“¨—Ð놆Ӗ튿û¡ɉÔÝ¡ÿ§¸úŸ˜¿ѪÙͶý™¦üžïÄŠœÝ¢ Æ›·§†×ôë¨�›Ù‘˜€ŒñÍÞ¼ô§Ñ·îÑ©› ´˜¯¡å·¸€³µ¨��Üö¯°â‰¸Êçù‘¦èýó Ÿø²�ÆÝÍÍÑÉ´öª¬ã�¡†µÃ̽¼¯ë¢èË€ßèåý®¯¼ÉãžÕÝäÛòœÁî߆熭…ûƒ­ª˜ ˜«‘¡¤ªÔ†××Å“îï¸þ§ï¤±Ñž¡À¾ìùáçÈàѪþÏ­‡«Ü¢ï®÷®‰þ˜¼–æ¼Ú§«ü´ëá(2&aa4638441dd86aeb35eda2a9e688e05f.woff2ÒØ0 fd4dcdbf2ce22ecad804c9ed8ecf5584ðœ"ƒ°Ò¥ÙþØ–®ØÑÛÄ×¾’ïǬ�Ë·¿øäó§ËÂÉÔ¤¤£³—Å·³ÞÖ¹…èŸùóÛÑÏ•þÁáªè®¬´×ÞŒŠá�Èà®ÿ¸æµË¢¯�µ¨РÞ·šôÚ¡àÒöïÝöݾî§ÐÓâÞ¹…ø¡¾¦‹©á¬שœÀñÅ÷Âêë˛ڶ깊©ÇÝß…©±žÿÍœ¶—÷Ê´�¹‡â�ÿϔΜ‘üÖ±Ôßÿ°°‡´׿òØÙ�á®�ÙÞœè³éÿެ�µÚýœõ×ï‚í÷ÒÕ‚÷÷‡¿½€¼´�å»Ó„†ùØè¹Äœ§ÌüàãÅ÷ˇø’ʓ٫ý­Ü¡ß•É“Þƈ�ŸÁò ¯ÏÆ£´±¹‘à(2&fd4dcdbf2ce22ecad804c9ed8ecf5584.woff2ÒÞ1 2f717e8fa82e90cb410492b84d9b439b œ"‰øª¦¼Ûè¬�ñ¿äÀ嚵µÓ«Š�¬†í´±íó£‚�ÒÄÖµê›ãǬ¸´¸Á˜¡×ÌÛí§êØ‘ïÅá¿Îíµ†–‚ÂÅ…µëˆâŸ‡‹¶î�Ù£¡…„ÚÚ˜õ›ö„ÓùÁò©ŸñáÆêÀšð¼š ã“½“ØÇ…µœÿõ‘ŒØÿ“Ñ»š×¹¼¼‰£ÓÙŸÛŽº�õÜè½—— Ω·Ç€é×Ùò¬‹£Û…˜Ê§éšà驮͌�–ÁüįÞÛ៱‡½øóãÆœá¯á侚ª¾ó®ŸÆóîý£­ŸÔ�©‰ÏæÐÇ·É©øå�€’³ù´•£„©Ù¹„´¥ÝÑ‚©ÐÙùæÝШ»¹¶´úò¨¤’’ÙÔ¹†(2&2f717e8fa82e90cb410492b84d9b439b.woff2Òá2 b58ec0c51524ae3a1a14731a9cd885e5à²"ŒŽ˜‰ÅÑ›µÄÔéŸï­¨éÍ­öÁóÄâГ®•áô‘ì¯ÖΤþ½ÙÎãÞ♟µä­þˆ¥èáÌÓ²µÛ£†‡¯ªŽßÞ®÷´îúÌ¢�ªÃóºóŠƒãѸ…û¿½á¨Ã�Ä©®¹äʜ겱šëîÇŽëÁÇÅÈšþÙÏíÿ¤ÒðÓדíχÄÜ™áû†ÍƼ­¦Îù¸Ü‹ô´Ý·î¢˜­Èò•ÓçƒâýŽïõ«̹¥´…´ýáÂÒÒÈ„ãé§ŽÜó�¡¦�‘½‡© øÙՋ謗Ÿ‹µí¹ú²¢�ƒ®ÒÉõ©Ĺ£Âœé°©ÙÅ ìó®½­ùþ‘¹íª´ÓÕÀË×ä­ÀØýý–õ÷ö¿æò—¾ñ­²Ðöƒ¡ì—(2&b58ec0c51524ae3a1a14731a9cd885e5.woff2Òä3 0272ed49b7c47a330d535353dd30e2fbÈž"�™…Ç©£¯ç�‰×Ù×ѱðý‹Ã¥�…ÛÁ¸žé®þš  ôúÑñÑõˆã—¨öñÔ𷢯•¿ºî†˜¥õ„®‰Ð¸„朮ªïòçɣ䛟ƄŸ˜�²¬�¤Žþ·­ÒëÛòÅýð¶ëëú«¿Òö¬ÍÀ¶žæ¹å¢¦ˆÎ…ëìªÛ²ªšŽÎÅ麊̴´£ÛÙá‹éƒöïòñ÷´—·„­ý„ªÅ»ùȸ„Ÿš’ÃÜ™²•°”¹æÁšë�˜Õ²šÿˆßîßÎÆ¾Þ¼¨´›¸øÃ�­Î™˜•©èЀ©ô¡ܨß�çŘ‡ï´µ½¼¾ž ìœå³‚ÉͪÏÌ¡ëªä¥µÞÒ³©ËÃзÇÛ‰èÞÎà‡è©Ìÿ—ŸÙè(2&0272ed49b7c47a330d535353dd30e2fb.woff2Òê4 8c07e7f812cf702d22c24a8af27a14caì´"•…³�œÊë“´ˆŸÓ…ƀ̠ܣæÍîãß©þè¿ï‡éîŬÃʼú¥§ÃÜ«üª�ÕÚÏñ¨�Ü̪ƒ³ºÝ¥¼•ù±Ù­Ó…­á×§ó…︹ÆÛª¬�†ºÜ¥ïœ†Ÿì´òºž›˜¹ª¼ŠÔŒº‡øŸÕñášñÙ„êЪ Å‰¶ÿ—¬êÊýõ²¬˜¢Ñ�±êǶ襒ߞ傊Ÿ…ݵ询ôŃ«™ö±ù䦮…›ƒ“ËüÞµ¼¥Ÿ·—ÿ´†¨�ÿã«’Ž…Ð™ëÛª·…¿ŽÀ©ÞÈã¢ü†ÎŽʳâéºç›¾·å橸†ÿ¸÷ýËÁ˜�Ñ瓇‚Ç埤¹ƒ×©ì觃�IJÈ‚Ÿë­Ù¨©•̺ƒ¿Ûàù°ØÉÇéå(2&8c07e7f812cf702d22c24a8af27a14ca.woff2Òí5 2b90e29fec783fad2b0d57e46f4d9012è²"˜€Õ�Á«þî©Ù�ÚèÞÞ¤˜€È±Ú“Û¤‘Öœ‹…­ê¸µ̼®ÛèŸÖÊÄåÒäúÀù­Κ¶½¨ãÛ�ðžæ‰±¢ýâ̂、딠̤¡Ëý—µªñö�³–Çÿ©�‚ÅÆ¸¡ßÜ¯îæšÄÅꪮçöžþ�‹½«áÊšô®”÷Á‡¬Éó‘ŒÄ¨þ׎‡ÉÚ²›à鬯ÀÓ‰•¦š©°ïìžÞÙÉÄ‹íþÌ’½׳Ú›™¢•æíÅŸ¹÷ò¯‚ºðÿ´Û¬�ì“ȵ„ÞØü©ë�À笡úñ�³�³â©ç—§ÛÔ…úÞ³¡ÿ­ŸËÁ݆×áåú¶ìÀ…ÙÍÜçªñ­¿‰üàϱÞå�–³™ÚÂ牆Ҝ»®“¶‚ÈéˆØž¥Ü(2&2b90e29fec783fad2b0d57e46f4d9012.woff2Òð6 7cd3aa2d4165277435b6f8b23036e6e2œ½"›Ù—’‘ÂÆ ï“³Щ§ß‚‘�³ÐØ£¦� š˜’õ‘ŠïùöØù±–¹Ô혬Ÿ€¬¢ª¥—­¨¨Åθíæª’«©·ô柬Õì°¢�߉Ž©¿íî´ПÍ®íÁ›¯í¼¾¼ôœ©Éà—ÙÀÃè ìÒÚªÈç¡úõáÿ¦·½£©Ã±ˆýÅÞ¦ßÓ‡�¸Œ‹�Û¨áߨî®Éøï¸¯À�Û½¸Û™¿·ÉóÍ幚ÜÖª´©е…‘Ðñ£ÇŒÙ¯¿¬�èãÒژᗸÁ�½æâþï²ÿ‰ª§Ýû¨ƒ“Ö¢±¨ðÁ¹ÿ�©¸Ï㳓±ã©†Ñ‡µÅÛâ¶ñ§§˜ïÙŸ˜ÃÀ¹‹õöÖ§¾Ðܼý©¬Ç˜Ÿ—†ïéÛýàöä©„‘(2&7cd3aa2d4165277435b6f8b23036e6e2.woff2Òó7 3611e891f3c790e7f5a0f55144372201¬¹"žš×µÑŽÆô ˆÓ•Žãì ¯®§ļÕ ±â¥Êè‘–áîËïËºŠ¡µ©´«ž�æ¿õɸœþ’©Ïö�éä•Û—æüÛ¬Ÿ™¬Å«³¼ˆ¬�®éç®ÙúÆüðÆ÷´©Þ»¬©î°Ç�‚ê´ÜâļÕ±‚ºÎÿÞëÀ¢ú´¯¼ùÒ¤©œ¿ɵÓ÷Ãᩪ©�Ç�¦üÎÊ�÷䆾𶬑핷ê†ΩôØ‚™¡¡æÛÙŠ©¾‘°ìÁà‰¿´÷Øšûªùô×¢ŽÃ¥…¾ªë«ÔÌÞ…¶Ì™êºö�¨ÊŠݹÅ�©æ°‹±Ì¾›ÞÛó®…ÀñÿéØ¥èŒ¹‘¬¼ùŒÿ†®á÷þ°É¢ñ‘í¯ ªÿ½ð«¸Êݽä�¥§Þ†ÕèØÏÚò(2&3611e891f3c790e7f5a0f55144372201.woff2Òù8 5fbfc8b7d5c1642962d419b90ae36dc0¨Á"¤µë•ÂèŠæäè±÷«Ö쪅•Þ�­¨¿µ àÙغá««¹·¹ÞÉ¬б”©ï¦ö´­ÒØÁÙÖú¼ƃý§°þýîÐ¥„Í‹¾Ôëíóòâ®èŸ¬Šå–ç¦À•œ´ÝÂþîéîÁÜìæÌ«ÊðªïªÞÏ«„Æ©üœ©³¹ãñ©‚’«œ†ö’³â¬Ù¬¬è¼£À†þ�öÆÒ«ºêãµ®�ŽíÖËãÀš©¥ð©¨¯†¥³Ž©¥êæ«—ŽÔÚ’˜«Ÿ³�÷¾Ï篩ÖÛ䞷繬´º•Ÿ²šÈÄŽžÎËý¶™€¢£÷›·ð˜â”ÿª®„€¼©»Á冑ªžô�¡…‡÷Λ£†ª×Å´ñ‹³¨è�†ÜùæÃžµ˜Ž“­µÀ¡Å¢ªÆ‚ŽÛÏàüƒ’±(2&5fbfc8b7d5c1642962d419b90ae36dc0.woff2Òü9 a3e1e78a2196253cf0d5e1ac9c1c30f8ðÓ"§¹Í½ÒÍä’©¾æ”ÓõÇϵԶªüø«÷ªÞš¼µ©ÓšûÆÅ¡‹¢ìáý¤‘ª¢¢ž¢þƒ³«Ä�‹€±¬ öôéìªóΤˆ ‡‚»ÜÚ©¡Ò üžâýïÉ�¬ªÌËê¢ü‚Äþ—¶òêßòÅдÁ¹—”Ë¿ʺöý•¡Ö¿©÷†©Ì̫·曼¾½’‡Ñ“®¨Ë�¥½Ê¬¯‰¡¬î‚øÞßÌÀ�ÀƒÔþ�µ½ºÉý½ùÿ¿›�¡�Û “ŽÊâœ�û®ùÝ®¥¯Á�¾µÉü¬пîÜ�Ÿ³ùÍïÄ©è®É©Âí—ª–¬ŸÝߟѿݚƒ¶Ýʸ·Æ©Ó®éǸ셹Ý÷¦ØŽ­ÃÚ™þÚ±·ªøìéÏÎ�Âß·Ó¨¹¡©ùí«¹Ø—(2&a3e1e78a2196253cf0d5e1ac9c1c30f8.woff2Òÿ: f6db837b7039ac5feb8d49f72da011a6ÀÁ"ªé—äŸÎÐÁ •¸�ÑëÒóšÒ±ƒªÉ­†Àüë¾¥â뽫¹®™Ìùêí�ÚžÈåªìù³ ¨ç©�˜ó­™©æêà†‘´¶’Ï¿ÚÁÉë‰ÞרÁÌÆÁ€ð„³ŸÄÁ¹µÌÈÅ•�ñŒµÚæ¼ù�Û©›Æ� �ßÉß…©ܬ›©óŸìñ·ŽŽ®¼ðÿ€”À­ðŒ˜•÷öœê¶·ŠÅùžÆè²ôÁ€óÙÛÒ©·ÏÝÒþ«»ŽÖ«ìÛ©¯Üïס¤�测«ɪï²˵æÞªŒøΠɼ™¹±œ×Áø“·˜ƒÙ±žÛ†€φ‘Ü̘°èΟÌýí¯á¼Åš†ª®º£ñÞçË‚âÝÖ‰‰ž—³é€Ô¼¨ªå‰Ѽ�ð颰Ϙ¯Ë…‘ù휌 Ÿåꟙ»(2&f6db837b7039ac5feb8d49f72da011a6.woff2Ò‚; 36f3cf4b102578ab6d4dbf23580aec45èÒ"­»ð˺ÂÝúˆÒ…­ÏÊÿÀ´Ó±š¬Ÿ«ˆ¡ЋƒŽ‚À£ôµ�Ò—‡Žœ¹�®Œï�ÙŦ€„̼øŸǺÒ�èØ°ð£¯�ªɬïžÿÀýõ´ìÉò™âË—àß‚�û§…¯©˜�Δô�…³ïúÁ¸ˆÅíĪˆîû ¿äà�”á­¯άð�ØÉ�ª­†ŒÁ”«‘˜˹ª³ýÀ믓’óªý²ÈΛĠ¼‹ˆÁ’«Ó­®Ä…ú›òÎè«ÉçÌ©†´À¶øÀ„þ”²מ÷²÷…Ü¡¾¾Œ±‡”²˜˜Ý§©›’„ ¦±®Ú¶ áµ¹�“ñéá´£ŽÐ�§ä颞«Š¿À¾êÈÈÈê㪨�ãó”ÈñíÍë�ÈÉœÞÂý½ë�µšÁƒþÿ©زñž—¡��˜ì(2&36f3cf4b102578ab6d4dbf23580aec45.woff2Ò…< 885d81a73e6ef06ad8a7b09bccd3fd1eØË"°š£ÎÜ‘ï®Çè�£ðâ¡§ðß¹Û›�œòž õ桉œ��®Äþ÷�µ͹œï¡Λ­ Å—„¢´’†¬ˆþ﫞³¤ÙÄ›�÷Õ…•õÔÒô²Ĺô‚„®•˜ÍǹœáþÝž”±Ê“Ñ÷¢¹¦û¾³תÕª¬�ˆõÖÇ™îÑ�Û——©ïý£—þî¾µì«Üòâªù­Ü…í®Ð�ﵡÈß§ËœΓñƉñ˨Øþچ뼿¹î·êÄ–âÞåŹÄ«ä«ÀÉÂëß«‰±§�†¢´ª›¿Ñ«ŸªÚŸ¥ÏÑë—ÇÔê«ìŒÆ›§µ߬ÞàûÀ”ÛТª¼ï䜩˜ˆ¶¹¥þÜÍ“�ä—Õ¯€±¸½àŽÊ�Ñ ©§„›”Ù±ë�¦ÿǯ�ª—°ª”„÷¨ÿ‰ç¼‘ƒ(2&885d81a73e6ef06ad8a7b09bccd3fd1e.woff2Òˆ= 395311e15f7a603e8cfde5a2e200759døØ"³�¤·€‘¯Æ‘¸›Ѷ²¹ëýݯ­¬¢„¢¼¯�¡¨Ùޏë�¦ÁÐ੸ÿˆ¹õ­›ªë�–½­¥Ó¡œµ²ùÒ¹Ó‚ó¼ܹ¶�ë­´†ä¹Æ�–Œïì¾ýó¡™í°­¬þ�³ª˜íÆÊØœñͰî„ÑîÍåë…æ÷�މª£Ùð—×Ì™«‚½‡–ÇœГþª½œˆ¡ì±çã²´¥æÆÖÒª”†�Ìíšðåó¶ç©›„Ԭ׼£�… ¹Úñ‚’ª°ýÆ�äŠݳ°¡£ý£¬¹©é�õ´ñ¶ÿœ·¹¼ˆ�ÒãÚÓªý Éš”›òŠܤ‚¡á�¤ØÐæÛ¼þŸË©Ô«Œ†¡Ø—â˜çÐÿê¥ ËÆÞ�Ò¿ƒëïÚˆŽ›Óì —ôÖ‡³¹�§®œü§ñ뉙‘çÕ´šè(2&395311e15f7a603e8cfde5a2e200759d.woff2Ò‹> f03d7fdfaf8cb3f2c6dd9da175692bb0ô×"¶´ë³Ç¤©§¯µØà½ù›�ÀÄDzØá©ïß¾…ˆö†º•©ý‡¼­¥¡Ý�×­—…Ù¯ªø§ÍÉÐݪª�‰ŽÁ‹³öŇƒ¿¹«ùÔ¿ÅîªÑœ– ”ª¨Ôý»öÇß½¾”£©ïºü£ëÀ‡ÇÁ¤Ùç†Ùñ¬ÆÇ’€Ì©ÅÙ�ëóˆ—­ß݉¿º©’ס‰Ç“ܽ¹ßÊ¢¡¯²ÈçÑß•³г�­ÿ똹©Ø±†Óݯâ»ÅɘÕʸDzñÛ®ÁÈÝÛϹåíˆí‘¹¢±„åæÿð©�Òï�ú¸›¡¹½¬æʉ›µàÚàÐä�©¼ãëí�̬õÎܪü®öªÅâ‹Ïå“Â×½¤ÈŽ…Œ¨…¬Ä®£–ëþ¿·µŒÚ䍿†Þ“¡˜£àãŽÌù¬ šñÙœØë˜ðÀýâŒ(2&f03d7fdfaf8cb3f2c6dd9da175692bb0.woff2ÒŽ? b9c89633741af9ed2fea7924c944a196”Þ"¹ûŠ“�Ô�§ªÀÐÌŽ©ŸÂѯԈÆëžó»§ºщÓ‹Õ¹×虼”³ú˜äëÇ¡“×ŵ󞯠뫕ą­ó�Šè¤¬£ë±�¯©¿©‡ñ£©ý×󟱫¦ ê½™¡á­�¦æÄ»��©Ç£¨ý Û ½†Ýº£€áÊá„�ˆ¿€˜±ª¢ìžÏ´í°š÷Ìó«›Ëи¦—ç´ã…»ŠúýŒÜÁèŸ�õ§€±Ñô»ƒ§ÿ³�æýŠ•¥ŽæÒÂÀ宿©óÿÒé³Ïíª½Ôҵʴ½ÈÒ©×›ë£á‡Á÷ûµþ‘²ÐÞìü‰–Øì¶�«’ðسý�›þ캹ƢþõÂæ¨¸÷éœÎÓ‡Ó‚„ò«ô�”˜¢¹¹®Œ´ËÞÉ�âµ¹‡¹‰´“�›ñŠ…ê¿‡˜¤öê¯ð¥Ó¨ãŸ(2&b9c89633741af9ed2fea7924c944a196.woff2Ò‘@ dc14d74a2d47edb38b2b6b57fc4f0913¤ã"¼œ® ÂÄ�·áÖ×Úö§žðÑôñÏÝÙ÷±�•ö‡°‘³é†˜ÓЩ€¡ƒºñþèë¡¢¼©Õ´¯õ�„ÕŽ…‰¬ˆ¤ű€³¾½¯³…�ÒæЬžöì²�©Ðð´ÒÔÙÌðؼǹǘÙå¡Ä¨‡ɪ‡Ÿìƒ‡×�„ͽ®‹­îûžõ«èâ´‡´�¤³�ìâÉÏ�𜊿�ŸÐý˜Ø¶µª‡ÐçŸþÒ€§—¬¹Û�÷а˜¾Ä¸É¬¼Ò­§¬Ô­Í©ˆµŠÇ•†û¬ï©ÁÏÉ„Œ¿ÖðÅþǶý¢¦©·»¿ÿøžµ›ø†œ‹Ÿœ³çÖª¸ŠÁÓ›¹¥ë¬ð³ª­¾éÍʪîÙˆ®àÛÒϧ±™ìç닟ġùãëÙþ¡Þ¼‡©ª×Èë‘ꯜåÿâ´—ÕýÏЪê‡�»í‚Ý«(2&dc14d74a2d47edb38b2b6b57fc4f0913.woff2Ò—A ef59eff97a89eade577a159034314dc8ôæ"ÂФ�öå�¢Ä„¬ج…É»¸¶ššŸ¢Žž±ø¿ü�•¬æõ�âàǺ¡Ù¹Áª¹ôµ¿Ì—¹­¨„Ô©ߦ¥žÌ…Ú¼ª÷�þ‡ªîŽß—„ÚÍÚè—�å÷ð䬲¯С¤Òëµ²ž²‚�×׬±Ý¬÷�§½©�©ùÀ»¶°ä¦ðÁ‰Ý�›±™’ʹ´¡Ö©ëªÚ‚­©š±‚¹±ÁÒåöžÈ €°Ôýª£Ü® ë‹Ò¸å�ÍޞݩŸï膩…¡ ½Ýß‘²ÆŸÅ¾Í¦º«…ц�‹¸‡¤Ö€Ð«Ëު󫨼ø› µæŸ ˜ŸøüÑø´¼Ç¨ ÛÔ’å‹¡§€üŽûŒÙ©ë¡ÔØî—øÒ’¬ûýÁ§ʃ�©ç‚é«؇—¬Ý¿ÐÔÕÿ‹¬…œ¨õ켋¾¾Ô¾¦’¨ÃË�¾ªŸü®©�(2&ef59eff97a89eade577a159034314dc8.woff2ÒšB 074336720702051357fd5598bd3a1202Ôý"Ŭ¬Íù¢µ�Øè§Ó¢çËý¨�†©£¹ð‡ßþ�¬Ú¯×ý¯­ÿ‹„öˆ‘¯ÿ¼�ŒÍ÷ª—‰ŠŽà棶³ãþ½Üœƪ©Àý´ÆËµß�¡…¯˜ÁÀùÄ„³‡Ï„¿›â �¹�£î¡½Øޤ´…‘«‰±€Ì¦÷£¢úȲ©½šµþʧ›ªÿéÛ½³ì��Ä ¡’Œ¯ŸÒÆ¢©ðôÐÙšé®̃÷Íý›ë܉Óç½�挩Ϫ¦þ�×çšä¯­Á±þþ�­¹é©žæšîÈ©¥˜œ€Õ±Õ²®²°µÇœþýǼž¹»ä´Žñªß©œ‡×òÞßÔª‹ „˜¶˜ò¢º†—Էü‡ºÉâÏ�¬œð“¯ðË«³î�å«Ï¡¯¯¼¿Ó¶ª©‰Ÿ¼²ì›ü©صÊ�††èî„ÀÁœ�˜Œ¬®ûñµ(2&074336720702051357fd5598bd3a1202.woff2Ò�C acd0a4c1a9858fd3c492dc332b763bd0¤Þ"ÈÇö°åðô÷©òö©»áÕ˜ëó¥ö‘ÛÊ©�¼ñ«È¥¾„ã¸Îåө묎éÕ©¥·ø˜ŽŸ‘›‡¿ÌÆÕó܆ŽÂ†õòª—˜”œÁ…â¢Ô¨ÀæªÙ¸±¹²¶ˆƒê©�£þ橹úŒíˆîä“òô…µ—�±É‘ó—ŒÐ‡ØÙªÞ©ðÏ¢‘”¼åîä…Ôµ¸ö†Øåž§÷뛋�¥¹ÌÄòåëÐ�Ýý©„ט‚§ÚŸ�áý»©«ÚÔì‡ÚÛºÔñ×�«�Àš¦î–¨÷èï¯Úꣳѱó˜̵—ðó©îÒŸŠó×�ªž°”ëш¶þÔ‡³ëÀ¾Í�Ùñø°…‹îÿ¢æ™Àº‰ѽ—³ÁµŒ£�ùɶÒË厗þò�ø¨…£˜…��®®€Ó�ˆØ…‘ Η¬¥ÖŠŠÎá¤î�¹Òã²Þ¢‘¼(2&acd0a4c1a9858fd3c492dc332b763bd0.woff2Ò D 3aef0a138d95ad5b9c9032d316fc6f6d¨ˆ"Ëöˆ߇Ͷ‘½øˆ™Ø–˜…¯ú夲´¶¿ìÔ²é­ƼüÔÜšôÞ“µ�þù—�ÀÓÎù„«Õ¸µšØò¨‚×ìïªö蟛ý¦øŽçÊ…ížš¦¢¾Ò¨‘þÖ—…á§¹¿ª½ÄŸ¶ÚÀ·‘•ì§ÏšÚÕÐέ²�À¤Ó—ŒìçªÑ©Ó¹à‰Ö¨Þ›â‘ã‘Ò¯éÆ®¹˜ãݺ°ìت’‚é‚âöª€”ŸÝä�¬ô�—Äé�ﻫÁÚˆµãñýø�«�ù×�³Ÿýþ«ιèýœùÀ‡©Ù¯¾þä…�ü°öÙÈŠ¹¾Çüá…’Áô½²¨�«ã¦Öä®ö´„þþùÑ·¼¡ñ•ªÌ«ªµ…¿�ê…÷§¡õªÁ¼áÌ…ØѶê÷›Àôø…ò½‰åç«©àýÚ“¹¼«Ûƒ±Ì÷ªª–�霭©ÍšôºשÔÜ(2&3aef0a138d95ad5b9c9032d316fc6f6d.woff2Ò£E ec6195e2450f892361bd20d44bb6e549´”"Îÿӯ𿡲íçžœ÷‰‰§þù¢ž¬¬ëÁƒ¦ƒ÷ÙŒ‰úÙ솟±ÄËÖÙŪ“�–£¼±€û’™¾µÊ�á€Â§Œ�Ø­å³óáÐÁù“³þ¢ÊÓû嬪°ÿ—¾ȼËê뵜ˆ�°ºéƒÀ¤ºß­ÚîÖëø‡�²­¿—ì·ª‰®®ŽŸðµ˜¶ß•ÎíÈõžü—«öÒ½ñ€³½Àµ¾ö€¿Αà­ýŽà‚²³‚¤å©é½¼À²Ù©Œº›û…ÊÅ�¬‹¹†Ä¥ýÏ© ¹±ö½ï‹½‹ø¿¤´Ç“æµ�òÓ󓑈Àìê�¬©îŒŽÇ£¹Ý­å‘ºœ³†èùê¼÷函¤…³¤¦ÂᵃÁ¡þ¡¹â¹Á²š±¥¸ÃÏê�媔‚é΢¥�±ŸçûŽö¨¦ÈÓÜôþ±ŽÜŸ†¹¤íèªíÓêªâ½³Ú˜Ï(2&ec6195e2450f892361bd20d44bb6e549.woff2Ò¦F 4cbd36dfdc3058d6636f50a9281d1f8c˜�"ÑŸ…ϯ–Üîö³×ç±»Ý粘ԣ£á¢¬®žùË“¶‡°®�Ó¤‹ùµÛÍ‹ëÓŸä�¹Öþžø¯ª®š†¬¾›žµì£µÛêî¦þžؾª¾¡àÓ˜˜ëºíµÞŠ´å´¯Àê×ÝøâŠ’«£Û¶¼ÿ–€«’ó¾ß„¶Ÿˆ†�é¨ä±Ó�ˆë®«¼ü÷–øð‘کà«ÀÔ¬ûöþ½Ä�òýžº¾ŽÍíí†ɽÇùºµŒ¿޹óâÕ¼±£àé­ ¶Þ €ìªѾ›×š¹Ï›ñ�›È£þã¼ì¡ͬÿ�‚þ¾«ïå©ý�ÐÞ�‚ôİàµÈ”Š�é¼��è¼�ø‚ƒ¶‚·¶´Ì€ïüÚè„âò»ü¼Œˆ…øù€·„î˼êΩ©�½½¼ìê¦Çð±æ‘†¬‚Û�”™ó��å‹©‘…܈†Â“ª¼�(2&4cbd36dfdc3058d6636f50a9281d1f8c.woff2Ò¦G 4c6b68e1c9dbfe7809ee5aecec547741¬‹"ÑÌöˆ¶º�Û†ý¯òÞÜ—د‘¾Í«´‰¶¼ŒþŒßÒ³ŒŠÃî‡þƒÑÖ¾�¾„…ˆ­”¹êðä¿æë·ÖÖ¡¯£·¾ã›µÏÄ¿äÉÖ¥Ãë¹ñ³˜úžØ©¯®¡ý¬õ³õë²ã‰¹à±›õ´¯þøÇŠö÷úÖ›¯„½�Àø³„¢ùú´ì¬¼¬ÞÇ݇öÍìμÌ®ô冈–¶Þ’¥ñßµÔ¹­£¬�‡³ÿŒ¥ìÝÁŠÀ±¼­�›ì±¼‚¿ÆØž‚…ìÉ¿�ÿÇîÞé½¹½¹è��…ôžÔãþ ƒôÛ¡©‡Þ¼‰ßÔÓ¼‘¿È›†²¯Ï“ä¢ÿä´¹„·¦¦Ù¨˜³“âŠìÍŒµ¹ñ¼´©³­‹þ·Ý¥²Þ¤ŽÚÝÀ¹‰«˜í¡ý„¢ÆëÊú¦‚£ÃÄ”ª­õ©ªÖ“‚¥ªØ’µÙ©�ÁðŽÔ—È…å÷(2&4c6b68e1c9dbfe7809ee5aecec547741.woff2Ò©H 706123e76cc5a4c8c931906231205cf8ôû"Ôˆ´µï�ªŠÐÃ컄‚Ÿ†ô¡æÑ��êË„Éʇî›�”ŸΪ­�ÿ„ò�’ëç¬Ä�˜ª‹°€½×É“êµ�·©´Êäа’õ£·�–ª’¯£¨å½ÅŸäŽ©é›Á�Ÿœ�¡±‚˜»òÅÈÜØ²ÝÉ«ý†ü«€µ±á—�¥€ü‘ë©›‡ �¨÷ùŠÕŸÌÎä·øô鲄„ŠóƒæÁý«Üè½ìæÎðdžº¼…™ÈùÎÇߪïæ —£§èþØ�й¾º£„µµ¢¸°�‘Ÿóåˆ� ¿ƒÌÄëŒÈÈÚô¯‚²ù½΢åÔ¶œ’þ€õù‡¿ª¹ð‡†ù¥¶¡¾¨­„í¿�þìà­ì£œ¸©¤ò–µê½Ú„¸ª¹æáª”�‡‰�£¯¶î¸¨Ïµîº¡‹ÈÛ»¡„ñÒéªþ¼¥ÄÌ“½¬Þ©¤¯òÇÀœµ€ѵ�ø¼(2&706123e76cc5a4c8c931906231205cf8.woff2Ò¬I 523021c2d4bec1e49288b22250a18abdä—"ו¹Ú÷μ¹ªªÓòô„û½ü½ƹœ¸¤Äå°ÿ©üŒØ ÄШœò�¢£–Ɇ­¨‹ °Àá÷ž¾ª³þÐÉÕ©�¬�¥‰ÊŒœ¼±úŠо°…Ü©‹Ä¼›×Ò©€ˆ«é¦’¹±µ­¤ª¾Íæ�¶«¯‹å渵£ÊÐ�äÃÆé�Žªˆ‰°‡ö«¶©žª�îØöƒ¬¤Þù©³Ð¢€Â�ÐÙ‘Õùž¹ŠÔÆ¯Šª® ƒ�”¯íð­Þ¸æÛ¼”©¢ïžòµ«à…عŠ™˜™ê×ö®®ÊŠæ²¶€�Í€¯êÃ娀å¶ì�çÀމ«ªô¬•Ø¿œÒ‘䪞Ž�¹´È�÷Ê ңŽ×ð�¥²þŽÕ“�Š® Õ¦–Ž¥Çš½¾×ù´½²¼òñÎêèåþŽ·‹æ’¥±ЉŽ‚õ×Éñ˹¼ªÃÖᾟµàÝçïÂ�͉º¹(2&523021c2d4bec1e49288b22250a18abd.woff2ÒËJ 3bb2fcffaac49346377c64b354681ee8Œ�"ö³š È¶§Õ¢¼ª‹��ïë“Õšô©íèÝ­Ççò†¿©Ž¦¹¼†ô¢úâÝÏý‚Î�Œ¬¢¬ö—å‡ð‰ÙÏÆòÅöÙˆÓ�ȶž�‰ð‘£‡¢ˆ¹‘ðççÏ¢“¥™°„ÉÆÞ�„ÓŽàã¢î¢÷¾Ç–¤ÁåöÅ£ªîŸ»¼®˜ó©ľªƒܵµ£ƒ¬œî†ƒìˆ½°ë¬œÞÚšóÜ“”€Ù‚¹¢°¹œ�™ÉÙ�(2&3bb2fcffaac49346377c64b354681ee8.woff2Ò�K 63e983c4f3a8314e2ce15b8c7fe4dbecìJ"<²äø¶‹®üìíÒ‹ ÂÌ�¸ƒÎ™ æ·Õ¥þçÔµ†Ÿ² “û‡„Π¢ê(2&63e983c4f3a8314e2ce15b8c7fe4dbec.woff2Ò¡L ca0766a943d8f64bf064608bff8b5110À]"NÉÃÜ«‘ ßÔ®ôøÊ٥Ǚ‹«ç¢­”öêÞ½“«�“÷ª̰û­ž¿¦œÀ¦ª•ˆ”Úɇ¸Ðú(2&ca0766a943d8f64bf064608bff8b5110.woff2ÒªM a6233194f2fc573d519b463d3f36ff23Èn"WñúÓ�·¾¡âá©Ϫ™Ôê™´°Š—ޏ„¡Þ°ÄúËÓÒÿ�ÑŠÖÕŒ¿•£Ô®«øÍ�•Ö•ºñ²ûõ¤©ÿ(2&a6233194f2fc573d519b463d3f36ff23.woff2Ò³N 24b4f5c3eae0af88b27cee04e6290085Œx"`…°Ø–ßß¼½³¡£Øé¢«¼ˆ¸Ë É––Ýù¡šúÏ‘ƒž€«°éÀ÷½ü¨±²Ÿ±°Éž˜°ǤÀ“ËÂÚûúØÔ ˜”(2&24b4f5c3eae0af88b27cee04e6290085.woff2Ò½O b2ec7049f16c64f8a3df23ab1764b1faŒ‡"i£ò”×´°Äè½»™в“—÷–ø Ê�©¿ßãž•›­™¡ñÎæú¬ˆÁÙ¬™–®÷€ª¢·ËúƒÄ÷ª­‹“¬Ü²•ãí¶¼¦Ÿ(2&b2ec7049f16c64f8a3df23ab1764b1fa.woff2ÒÃP f71a02a1361c8056f178c23751acea61´�"oõÒã½ç¶ÄŒý­ûð–Àå÷ÖÍôã­ƒ¥ÿ¯¢Õæ”Ò¢„ú世“¡Ç°úÕ”Ôüù¼Í�­°ë·�°±ôï°ÂìÆ�é þ¼€—⥣ÿ(2&f71a02a1361c8056f178c23751acea61.woff2ÒÉQ 5ce8598519ca9dcb769b08c086676414Œ”"uߌË•´­ŽòÔ¦…ôݑ勨­ï‡±ãé·ñ”ӱ⭭äì¸�® ²ˆ°›Ü…°Å¡¡™ ™±”¬³òæµ¾˜®Þ¥Ê áú÷¯‰¢Š­à ˆ„ÿÝ(2&5ce8598519ca9dcb769b08c086676414.woff2ÒÌR 8807f5753ef313b33db8a0814b596fd5¬˜"xÂú·¥¡ø›–‚ÔÇÉÝ‹ò€£ Ü‘“”€¥£üèæͰÞ”€ú¾ä’®Š¡ðê�Ⱥ“èû„¦‰„ý¬«Ýéô�úÔÉ´”ëêáíÙ­¸žýÔžü™…ú(2&8807f5753ef313b33db8a0814b596fd5.woff2ÒÒS 91008d10234eb993f1c8e5896e366a2d´¦"~¨™èƒÛ�›Â„¢Ž­�œÛÇ•žüü‰ž˜²û¦é”É÷·¡Ý£õ¦ž�—”œûÊÉÕúò­ÊûîÇ¢Þª“ý€ôûôÉË£®§·™Õ ã¼µ¡¹ÔȧÜ­æ‚«½(2&91008d10234eb993f1c8e5896e366a2d.woff2ÒÙT 8970029b1a12d9776aae72e5a611377bܬ"„»°ë¼‘¥ö·…ÿ û¯¦Ö­Û±òÖöõ¼ñîÂÇ•Æö²¢‡ŒИ§™ÛŒ¥¶ذʰõ¥ú �¿««¸™äø¢¦øÖ¹úß�µ¨Ž”†°‘¿ûæ«‚¯¦¾ü¿™¸ÞÐÖ(2&8970029b1a12d9776aae72e5a611377b.woff2ÒÜU 62171cad72de2677f61f441e065fc01dŒ­"‡Ü®ˉà½Ý�­Œ‚”±«¤•Ÿ¢‰¥ðþ®üȮӪ‡¥ô ç°ɈÀäó¬äí²ÄÎæ±­ã™¨›Š£ΫéûªžÁÉò±¨²ª”º”ì·Þ±€¢ÛÞìɯžâ”«™Û¤ü¥(2&62171cad72de2677f61f441e065fc01d.woff2ÒßV c6ee1db235bc088ae842a42966f32047ô±"Дո“ã´™ˆ‚‚–®ÓÚ¶‹¸ø•ýà®·âê›úø¬áÖËÔŠ„Þ€þ¦“Ô®óѨʾâ½Ùâ᧘×ç·×Ê™úáÁÚÇý™�ʹ¿÷ÃäÞÞü�ÝȾ“®‚�÷ à™®·(2&c6ee1db235bc088ae842a42966f32047.woff2ÒåW 01e66586185308c3e1b096dcb64699c3€Â"�èÛƸ왼™—ºá¾Ý¥²ÞÉ ¦ò‚°ð¬ö¹ãàº×ÌøÕ³Û³Ÿ”�°‰«ë‚ø‚î²ï–™òóü”žÅÝÔÞÒûþù¼ÝÞ ý¼—½›ž”úç²þ•Òµ •�–ÒãÃßãû�Éë¶(2&01e66586185308c3e1b096dcb64699c3.woff2ÒèX f865b68d22f634d91f0696a5a920d095ܸ"“Èãêü¶ÃÕòï¹ÄÑá›™›çùÅ´ϰ°•ø¬‘â²ÊÒòúó‚™´«Íó½ÉâÖ€�¡ô™¤ß¢™ó”ЇÜ–« ï¶¾¡€–Þ™ò�–ý½µư ƒÉ̳¨½ƒ×°ç•”æ´Ö»(2&f865b68d22f634d91f0696a5a920d095.woff2ÒëY c57e73db4be1a0884c26fb7c7311599eÔÁ"–ÏáÆäý–ëÔï±±ü景ŸÚ´¦‹΂ø�Ó¯ï±þ±ДÄž��…�’«Í‹öÂþɉ Ò¥Ì�Ê«ò ƒÇ…¥–§—¬“°¹‚Àךƒý±¶È«ØõÊ꥽“þß�äúÉúÛ›ÇУ幊š(2&c57e73db4be1a0884c26fb7c7311599e.woff2ÒîZ 2ccb4b1a097116cf3b2a737ef2cfeb2dˆÃ"™ã¬ß´ýäгñ„ì˜�™ÆÀ�¯¸°‹ú£¤òÝØÊ²Ã˜•�Þ¼ÛÓ™­¢�𥽑¡¹–õ¡ê²õ°±ûª«ˆšïÜÛ¦DZÉÍ¢ÍÞ­á«ÍÓÝê’°�žïݰ¢Üí»žÙäœݬ©ñ…‚•›(2&2ccb4b1a097116cf3b2a737ef2cfeb2d.woff2Òñ[ 294af16d685644e581e333d1f072d420Èä"œ–Ȃð¶çÜÁ¥éŠ«üô¬¼×éâ«É¥É˲ü¼­ŸÚñœ¥Í£ɃøÃÕŽøæ¾²¿ÞÞ¡ô¹©‹£«®õ�¡ò’„Ö±¶Ò¾û¯òÃæ„±ß�úâ™—°ξ°´ŠëÌ¢̾†¬ª¤ü Ĩ¸­§¢(2&294af16d685644e581e333d1f072d420.woff2Òô\ 4e1667302f163eb042e05baa74b98445ŒÕ"Ÿý±�¿ª™؃ý¨ñ£û¥�¥Ž´§®Ù ¶æüÃ鱸Ժ»©ž€Äëß˦œÊç튈þÝÁ¥ËɃ«¦¦£Šâ§ªó󹦕³¼¥«ü±çŒ‰¤ß½‡•ðÞ©õ僅ÁÃø“™ý¹ºäùå�óœýÙ„é÷(2&4e1667302f163eb042e05baa74b98445.woff2Ò÷] 26a0979c576b411afbd5e763f7b6991døÝ"¢••ñßñ¡«¦ß±ȽÃÕø¥¬«˜¥½»˯ËÅÜ â«õÛõæ³³À™̯Ñ­ð€ô½ÓÓî‰ð¥¿žõ ÄæÊõ»º¡úÈõéü³¥ÚÛŠŒñÁ›´›ä¶™Û°‰à–‡‡ë¿û¶ÁßÑàɼ‰Ÿœÿòõþ÷þ(2&26a0979c576b411afbd5e763f7b6991d.woff2Òú^ c5146b13f1bf80941841348cca7d0dac„ß"¥Ç¢žÔìÍž™Ô˜öÃ�àÚ½§åú™ݤä߆ߚ«²É¤Ê‹Œ§¶ù»²§Áߨà𨆌­§àøßžΘÁ³رÞùï’¾ÜØ£™Çß¼ïﲆ�³Ñ¡´»µù‘°ä¤ݺáìØÂ–ŸæŽ¨б—ú˜«¡¹�Ô(2&c5146b13f1bf80941841348cca7d0dac.woff2Òý_ b19c9bd6f7bd62a63ed7e30761824cc5Ðê"¨ïû튜£‚§¢ûàû»Õ⸠–ý§¯™Ñà¡ìı¤Ã͸ù¼›üˆÉŸ�õ·çшͣ‚È™¥¼¦ÜÀ¤À£ìÝÔ”êÛ׸”¬™–ƒ°»�ÞúòÑû¤ÿ¨Œ°ãèûã‚˨º˜¡ʆåÀÑÞ…²¾±ùüû��û·´(2&b19c9bd6f7bd62a63ed7e30761824cc5.woff2Ò€` 65497ba805531dd7d0a5349caead373eÔê"«Ž–ⱓ²¿Œ½Ö¤°ñ°ÊÜ©ƒ¬Ê£”êè�ʼ•Õ¡©«¦¤Îôèúœ¿ÜŒªÊ•¤˾±¦å¾Ü™´ûáüͦ½Á¡•¬Ë¯õìºÅ¥ÄÝÇõΤ‰Í¿ƒ©™�¦¥ÿà”´¤¶Ÿ®³¬£ì�òøÕ´Êé³±³¦¾à€ß(2&65497ba805531dd7d0a5349caead373e.woff2Ò€a e4f5a1e71029dbb38eef5f8b2a5555e9Äç"«À¼¾«”ÊΞ’¢Ö«Ä™кÚïåâæãÁ½„»í™ìûÚ–×ц ã£›š‰¢ó¥Ë�”¤Þî²’”¿Åæ¶�ö€‡ß‘·Ÿà™ÌÝ»«Û¤äèÇÕàÒ²½‹�Șú±Ò•ꊞ¤Ò�“šÍöü¨ì½ñì�ýÝÌ¥Š(2&e4f5a1e71029dbb38eef5f8b2a5555e9.woff2Òƒb 3a064ae3aff4e57a33d1b232d0abc1d1ˆû"®ûÈïÈÓÒ‡­­Š¨ÿ¯°Ч¸ûž£“ÉíüðßÞªô–ó€âôàŸ¾Éò¨ñ³¿º‹ìþ€�û­¡Ü’ã ¦˜¦““ë°îìÆüÛ­Ýû¾øªõݳÙã�àžï´­š¦ñ•ɸ·ü�äÆ×ñÉœ±¼»À�ïñ�÷²¢Á–(2&3a064ae3aff4e57a33d1b232d0abc1d1.woff2Ò†c 83914620f3cf28409388adb38f8c80a8€ù"±�Óì×£�”š²éèê’²×ûÕŒ¶ÿ³âúÄõ�í¶ÚÀÇà͢ʉúŸž¯¬‰º­³ºíž�·¸¯×Ê´–Öß§¿ÉïðÊ™æˆùÿ½™»¸×¼£ÞÅõ÷•¸¨òÉíã—ÈÒ⨦ˆôºû­ºÔŲÒ³Á´äà¶¨Ô·Š–þÃ(2&83914620f3cf28409388adb38f8c80a8.woff2Ò‰d 752cfa51b1b6a30d8cd7a67c57918f85˜ù"´‡¡èÒܯýüÍžÚüÁãÜ£ø¥â°¿ó¾ãê±ä™…�ŠÃÑ™‡ÛÞíâ´â·ùú”«²¸í´†à˜à•­¾ž�´ƒ²¨¥÷¸º¤Ë­³¨»û¨•£•§ÎƒË½ûÕüã”åÕ ¿Ä•ºõÛÕ¿è¾ÆÞûâì³úÇ쨫һˆüç…òì(2&752cfa51b1b6a30d8cd7a67c57918f85.woff2Ò‰e 4b322588125dc09d1d09f6ceef3ca730èú"´å¦úµ™Üä÷Žóìø³–œúä¥Ô»’ž®±Ü•ó•óÓÚ«ðÉ´³³§�ìå´פ“¥¡²²«òº¬Þ«¨×»ˆØè·æ•ì¦ù‹¯»�š¬§óÈÉ•ÆúŒ²¬–ÁÞ¥žúß÷ݕ˕ºå¡¥”ˆÿõÏÞ§¾¤��½é÷æ÷¶Ãü™�(2&4b322588125dc09d1d09f6ceef3ca730.woff2ÒŒf 8278bb5d35b72a2e6e3b683f5846d5d2è…"·ÏéÉ·§ì¢§Åü—–™Ê¼¢·Â–šÀ´ƒ£¹•ا×§̓Ëèü�Ò™“ýØßͳüæظ±óªòÛ´›‚”¢¾²ò–¥ë”—ß–¬ê­Ѻ¸Õ㜢¶ßÈü”¬¥’²ú•‡»Ó¬®¦Ï–ú抋±³ÚÂú»ž¼î”Š�øÝ–¢³ÕÆ«(2&8278bb5d35b72a2e6e3b683f5846d5d2.woff2Ò�g 5dbd8695a588f61d521215e596dcc0a8èÿ"º÷É¢ºâ§·¤ê´˵‰é픬ò×¢�¤¹°‘¥í³�–¨–’Ö©»ÆžŒêóúÌ¥Ö’«×ÚÕû�ììݽÉãú‹¾´Çžܸ�ü‚¢Õ«›ºß³¾ƒàº—»¦º�øôáѤ÷ˆ«òšíÀ‰ù°œÂ…š†«ÄÍ‹÷Ô¸Á£µÁÌ«®¬�«Ί(2&5dbd8695a588f61d521215e596dcc0a8.woff2Ò’h e26aedda2c726ffbcfd8403480615f66°‘"½›åײ¸»ûɰ°¸¶âÔ°¬îü¢åÌþ•êšÃ®¨²¨Ú¤õµ¥¥¯µˆ¤ú£øŽïÞ�–®ŸÅžÁ™úœþãì¤Îݺ¢ž‰Þ²¢Œ«´„Çé«ÝàØäé£ö¦Èó«øâ¤á™ü㻥ǫ¢�º¢þ�æ®›”ò¾¬ûîø·“¡«Í´�üÉùþ¨(2&e26aedda2c726ffbcfd8403480615f66.woff2Ò’i b7d2da9786088eb8e7112198ea74a3feìƒ"½«Ã†Êà¨ɤú¦Ô«—šÚ®�·ùÚ‰üȱÔ¦£�Ê·Ç¥ý·ð”ᔯ±å¥´Â�¬ÇÍýåßìü²õ§ë•®¨­º‹úÃÙ넪­ñ›²±Í莚¼º¨£ÊÒ£•­€­ö•ÿ¶”‹»É鱟ôଭ«а˜§ž²Öµä§áº¶”ßøƱöÛ(2&b7d2da9786088eb8e7112198ea74a3fe.woff2Ò•j ac8055bb6d749eef9ee873fdec5355ac€�"À ßÀúř聾àõ€Á¦£§‰»§‡·¢±òŸÑ¶±Þ«ëÂÌô»’Ò”½®êºجƔ౾–¡á¯Ä�§¨”–×µòÁޯ㨑²é¹Ä®ˆ¶ßÂØû‰²œ°Ζ¸’ð°ôãßÕÌÃïÉ�¨Î�±ú®´×ûò�”�»ìÒ¸û�È¢ª��´­¸Û”(2&ac8055bb6d749eef9ee873fdec5355ac.woff2Ò˜k 6368c28fbb075cdcefdc4fcd366f2596à‘"Ãä’¬«òûšÞÌœô±§»í•·°¬“£ø±¸ܧ†Ž…•õ£Ëûƒ”�©¦“¢‡ò»Ë»ëÆÜãðæ�¸¡°Ǧ•¿•¦êÕãÖ”ïŒä´ûÁ£ºŤð·¹üÍ•©½±�Ľ°í³É•”Ó»σ»…ïà’‰�ä·¾ûö¹§§ø¸‡®œ¬†¢Á´›¼Ö¸(2&6368c28fbb075cdcefdc4fcd366f2596.woff2Ò˜l a0b7843f0031b62bfe5cd132534a9defð’"à»ñÕ“úˆýȲ«–ãñ¼ï¼¥Ãॕ²“§µ°§˰™æš»Ã¥•ú‚ú¸¤‹¶¥�Û·èÓµ§Ú™„ŒͤÁ”œÕ¯¡ç·£éþëÄÉ�¤š�³Øئù£»¢Œ‹αÖÍѧß¾ÓÕ羡�‘¤®¤éàì¾Þ¤ž×˜“в¨àⲿ²ô¹¬Ø£É¥¸(2&a0b7843f0031b62bfe5cd132534a9def.woff2Ò›m f5e8bdcdf12c71607bf4a552d2d4793d¬–"Æ­·å°ø¤ߎ–´�Ò†ºžŠ¥È�©Ääì¾Â–åô“––ºúˆ¢žÖ£ÕÔ�šŒȸ̲®×ϵäžÁ­„�¶­€¤¿¤• �¡é½ݬˆúÿÞµÞìâæ¾Û•™¦…Ô³™Ž«�”¹ûåÛްáô¶ÿÛú„–è®ÚéÀ­¡¶ú¤ç¹éìŸüŠüìÕä•Ù±(2&f5e8bdcdf12c71607bf4a552d2d4793d.woff2Òžn 057517f32b0459f124469d101296267cЛ"ɲàâ·Ž·çñ¶•ٯȭÁŸÍÂó÷–¡çöɲ΋�ºÆì�¼�Õ–°¹«¶«í±ç£»»‰¸¦ž¤×ꋵˆö�•�ê¾³ž¿úºèžüŒ”•—üÉ•¼¹¤â³ââ«¥÷¾äðضÅ£ë�«·÷¨ô°žž»Ô£ðì‘�‰Õö¾î¤®¶º™Ôžó°Ë«´¢Ÿ(2&057517f32b0459f124469d101296267c.woff2Òžo 7c8ba46493768e445461c297880cd295œŽ"É…–ö«€ ‡ˆÀ»žøžûè¥ì”®ß╆òϰ¶¢�Ö™§í¤÷£èÃÓ°ÿ·î¥™¨„¤ΰô¶Ýúâ±ØìÁæå¬ÁŠöÈÕŠßÖ”Ñç﬇ºÕœô”¢œ—Ù³ÜȬ€»�ƒ¨š•ë£ûħ䣂«Ы©¶ø»ÿ½è§•¢ˆ²Ä´¼úÓ£�°Îúý½(2&7c8ba46493768e445461c297880cd295.woff2Ò¡p 1ae17181e46d1b797bc6c40bec2bbd6cÔ£"Ì̧ѳÙ–“¸”‰�·€øæ¤„š˜ý›¦ÝÕû™øÕÕ£¦§µüÿÖóÂþüÖ·©§°¤á•¼±°ûó»×·¿¨¦¥̨•–—ô‰›Ê¼«¸ñ€¶ž‘ß¡ɯ§¤¸¦êÂÞ•™¶£¥ȤüÈ«µ¬Ô骥œžܾý‰Ô¨’—¨á·ÿ¤Ç·Δ¦°‘•èÕŒØ(2&1ae17181e46d1b797bc6c40bec2bbd6c.woff2Ò¡q 4068825d49e4a2b838b38c93689beb82€ª"Ìͧª¶É¡Ë÷£¸»æñ¥ƒû²™¥î¦é®±Õµèðƒ¥À¦‡°òùζáûØ”à±á½ü•íìÒºÞÕþ™¦à…´ÇûÏ•Û�¸¬ñûÿ”À·˜Ñô¤†•í¨ ¥³¸ºŒ¦­’�³’Ý’ê·�»ݧáž��§Äð»¨Â�¯ùù¨¸ˆûöùÙÞа©ß´¾Ù»’¦¼µ(2&4068825d49e4a2b838b38c93689beb82.woff2Ò¤r 274cf4d6f6408907b7e2f818c54c5e1bÀ»"ÏÙ¾�¢Óºôù�¤†û°º�°æξÏ¥�š¸í⊲üçì§àžŠüßÒŠâ°‡§ª£—ãÈÔÝùʲ㟦ܺ®Ã‚ìܲžìë–ù�Ñ•éøÔ¾Ž—©¥÷½ßÃ’·‡Ä‡úÁ·Œ¥ÑÈ¥¤ã�¹¸É’滒íüú¸ç¸é²Úƒå¨àƒªÓñ¥†ÿƒ· ¨ù§‹à(2&274cf4d6f6408907b7e2f818c54c5e1b.woff2Ò¤s 5f31fb39efc33e88b8af763cbb5f8874´²"ϳ²¡“Ÿ‹´¡Ï´Šžö“çÕ÷Þ‡»êøÄûÒˆ̽±²߸˜»ʨϾí¸ú�‘ü¼»Ùû³­êæŠýï»Ú»á‚¤¶°ó‹ÿ“»¦ŠÙ£ߥØŠõ”Ò°’¾å»æûùû‰¾ª·ž—ú�㥆úë±÷в›Ô³Òü¶üàœ¶´ïº¾¸·²†�Ÿºì¼É숸¬ºÖ‚è¡(2&5f31fb39efc33e88b8af763cbb5f8874.woff2Ò§t d6dd12d8c75af4411fdd29eef80e1929 °"Òݯ¯“Ý·­¦¼©Œ¼âüþ–ŸÉù»æ¥¶õˆ¦�´ò¬„•ö‹̶ö¥óÕë„…žíô€ç¿§ï�‰­é¦Õ¤¿Ó†¦½¯‡žÙ°ו„Êå«سš¥Üø¼²ëæ²úºǧ�”´§©¸ä„ÞÜëÕ‹ü„§öû½¤´ò½ä¦”¨ÆŠÅ­ÖÑù¨ú¼¿“±¥¯ºž·¨¨ݸ(2&d6dd12d8c75af4411fdd29eef80e1929.woff2ÒŒu 8755b83d33e82d8c5ee33dea60b0cc64È�"·’¸ä�ð¦ïü欽«Œ­”Äš·Ĥ³¾è¸¦¨Œ«³¤�¦˜ï««’¨®€âžžŒÍÃڱݥ¥»Ʀµ¸ù€‡¦÷§çÓýñðüÕ™�º‘�ì°ÿ× ¸¸´Äàô·°™ª§ç™‹¨à¾·¸ƒƒ¿«’•–Ê àؼÖ–­´“�äˆë·¦�(2&8755b83d33e82d8c5ee33dea60b0cc64.woff2Ò¥v e5ef59ab598fb2a14568d875c55f202eØQ"RÁ`Â`Ã`Ä`Å`Æ`Ç`È`É`Ê`Ë`Ì`Í`Î`Ï`Ð`Ñ`Ò`Ó`Ô`Õ`Ö`×`Ø`Ù`Ú`Û`Ü`Ý`Þ`ß`à`á`â`ã`ä`å`æ`ç`è`é`(2&e5ef59ab598fb2a14568d875c55f202e.woff2Ò»w ec68fc96c581aa30d454d2ee153539be˜e"hê`ë`ì`í`î`ï`ð`ñ`ò`ó`ô`õ`ö`÷`ø`ù`ú`û`ü`ý`þ`ÿ`€a�a‚aƒa„a…a†a‡aˆa‰aŠa‹aŒa�aŽa�a�a‘a’a“a”a•a–a™aša›a�ažaŸa a(2&ec68fc96c581aa30d454d2ee153539be.woff2ÒËx 658c70111918afb2ed3dd4da876d44f8ÐW"x¡a¢a£a¤a¥a¦a§a¨a©aªa«a¬a­a®a¯a°a±a²a³a´aµa¶a·a¸a¹aºa»a¼a½a¾a¿aÀaÁaÂaÃaÄaÅaÆaÇaÈaÉaÊaËaÌaÍaÎaÏaÐaÑaÒaÓaÔaÕaÖa×aØaÙaÚaÛaÜa(2&658c70111918afb2ed3dd4da876d44f8.woff2Ò•y 28de601bbef4be64518c407ec97210e4Ð1"DÝaÞaßaàaáaâaãaäaåaæaçaèaéaêaëaìaíaîaïaðañaòaóaôaõaöa÷aøaùaúaüaýaþaÿa2&28de601bbef4be64518c407ec97210e4.woff2ÒTz 2964e054ee1212397558b075ba5e5a7bÜ"ÿý2&2964e054ee1212397558b075ba5e5a7b.woff2Òˆ{ ac87e5a737769b5fe793019cb91fe13f˜"7€�‚ƒ„†‡ˆ‰Š‹Œ�’›£¥¦§¨¶·¸ê€=�=‚=2&ac87e5a737769b5fe793019cb91fe13f.woff2Ò™| 46524f7fa2ae6d7b5e5e849c820e5e2cì"Hƒ=„=…=ž= =¡=¢=£=¤=¥=¦=§=¨=©=ª=«=¬=­=®=¯=°=±=²=³=´=µ=¶=·=¸=¹=º=»=¼=½=¾=¿=2&46524f7fa2ae6d7b5e5e849c820e5e2c.woff2Ò£} e9b5e71504f7b303d4350c57372fbc5eÄ"RÀ=Á=Â=Ã=Ä=Å=Æ=Ç=È=É=Ê=Ë=Ì=Í=Î=Ï=Ð=Ñ=Ò=Ó=Ô=Õ=Ö=×=Ø=Ù=Ú=Û=Ü=Ý=Þ=ß=à=á=â=ã=ä=å=æ=ç=è=2&e9b5e71504f7b303d4350c57372fbc5e.woff2Ò«~ ef4b80fb0267b97fa2abeca9f3e9ca17è"Zé=ê=ë=ì=í=î=ï=ð=ñ=ò=ó=ô=õ=ö=÷=ø=ù=�@‹@�@–@š@›@ž@Ÿ@ @¡@¤@°@²@³@´@¹@º@½@¾@¿@Ä@Å@Æ@ð@ô@õ@ö@÷@2&ef4b80fb0267b97fa2abeca9f3e9ca17.woff2Ò± bb70dfa25ebf4f4324f201490c2a8748ä$"`ø@ù@ú@ü@€A�A‚AƒA„A…A†A‡AˆA‰A¬A¹AºA½A¿AƒB‰B“B–B¢B®BÀBŠC‹C�C‘C’C“C”C•C–C—C˜C™C�CžC C¢C£C¤C¥C¦C§C©C2&bb70dfa25ebf4f4324f201490c2a8748.woff2Ò¸€ de91c1b6ebb5830d91bf358e28ede88e˜"fªC­C°C±C²C³C¾CÄCÆCÉCÐCÑCÒCÓCÔCÚCÛCÞCßCäCåCæCçCèCéCêC’D�J‚JƒJ„J…J†J‡JˆJ‰JŠJ‹JŒJ�JŽJ�J�J‘J’J“J”J•J–J—J˜J2&de91c1b6ebb5830d91bf358e28ede88e.woff2Ò¾� daab430f002ab4e78185fadce2eab87d° "l™JšJ›JœJ�JžJŸJ J¡J¢J£J¤J¥J¦J§J¨J©JªJ«J¬J­J®J¯J°J±J²J³J´JµJ¶J·J¸J¹JºJ»J¼J½J¾J¿JÀJÁJÂJÃJÄJÅJÆJÇJÈJÉJÊJËJÌJÍJÎJ2&daab430f002ab4e78185fadce2eab87d.woff2Ò‚ 89f4f3e277f3df922082c00521b9ba1b„ "pÏJÐJÑJÒJÓJÔJÕJÖJ×JØJÙJÚJÛJÜJÝJÞJßJàJáJâJãJäJåJæJçJèJéJêJëJìJíJîJïJðJñJòJóJôJõJöJ÷JøJùJúJûJüJýJþJÿJ€K�K‚KƒK„K…K†K2&89f4f3e277f3df922082c00521b9ba1b.woff2Òȃ 2e73c13d8516165a3f3093033128c931¨"v‡KˆK‰KŠK‹KŒK�KŽK�K�K‘K’K“K”K•K–K—K˜K™KšK›KœK�KžKŸK K¡KªK«K²K³K´KµK¶K·K¸K¹KºK»K¼K½K¾K¿KÀKÁKÂKÃKÄKÅKÆKÇKÈKÉKÊKËKÌKÎKÔKÕK2&2e73c13d8516165a3f3093033128c931.woff2ÒÌ„ b3363542c3058751c70fbe58659d3b9fœ'"zæKçKèKéKêKëKïKöKíLïL M¡M“N•N—N¶NîNïNðNñN”OœO�OžOÅOÆOÜOæOçOèOéOêOëOõOöO÷O–RÊR‡SˆS€T…T†TØVƒ`…`†`‡`š`›`œ`¡`¢`£`¤`¥`¦`§`¨`©`±`2&b3363542c3058751c70fbe58659d3b9f.woff2Òˆ… 45ef6c160c008691f954e734a96f53a7ðv"³²`³`´`µ`¶`·`¸`¹`º`»`‚œ„œ…œ†œ�œ’œ—œ œ¡œ£œ©œ®œ¯œ±œ³œµœ·œ¼œÀœÁœœÄœÆœÊœÑœÕœלڜۜâœãœäœåœçœèœêœëœìœíœîœïœòœôœõœöœ÷œøœùœúœûœüœýœÿœ(2&45ef6c160c008691f954e734a96f53a7.woff2Ò™† 2bcc55d56180a92455f9e8339783fabdȃ"À���ƒ�„�…�‡�Š���–�—�œ���£�ª�¯�°�±�´�¶�·�¸�¹�¼�½�¾�È�Ì�Ï�Ð�Ò�Ú�Û�Ü�à�â�æ�ç�é�í�î�ï�ñ�ô�ø�ù�ú�ü�þ�€ž‚žƒž„ž…ž†ž‡žˆž‹žŒž’ž“ž”ž•ž–žœž�ž(2&2bcc55d56180a92455f9e8339783fabd.woff2Òœ‡ 0ce6c7d642775c2c0dbefe5b4cb92839à‹"Æ¡ž£ž¨ž©ž¬ž­ž®ž±ž³žµž·ž¹ž»ž¾ž¿žÀžÁžžÄžÅžÈžÉžÊžËžÌžÒžÖžážâžæžèžêžëžížîžñžòžõž÷žøžùžúžýž€Ÿ�Ÿ‚Ÿ…Ÿ‡ŸŠŸŒŸŽŸ�Ÿ’Ÿ“Ÿ•Ÿ˜Ÿ™ŸšŸœŸžŸŸŸ¡Ÿ¢Ÿ¤Ÿ«Ÿ­Ÿ(2&0ce6c7d642775c2c0dbefe5b4cb92839.woff2Ò¢ˆ 67b024cffa650240804b44b0bacb17b6˜´"̰Ÿ±Ÿ²Ÿ³Ÿ´Ÿ·Ÿ¸Ÿ¹ŸºŸ»Ÿ¼Ÿ½Ÿ¾ŸÀŸŸÆŸÇŸÈŸÉŸËŸÌŸÍŸÒŸÓŸÔŸÕŸÖŸÙŸÛŸâŸäŸåŸçŸëŸìŸðŸòŸôŸõŸöŸ÷ŸùŸûŸüŸýŸÿŸ� ‚ ƒ „ … ‡ ˆ Š Ž � “ • – — › � ž   ¢ £ ¤ § (2&67b024cffa650240804b44b0bacb17b6.woff2Ò¨‰ c759554bb4164f24a0787886b81713efèÄ"Ò¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ » ½ ¿ À Á  Ä Å Æ Ê Ë Í РѠҠӠԠ֠נؠ٠۠ݠޠߠà á â ã ä æ ç è é ê ë í î ï ð ñ ò ó ø ù ú ü ý �¡‚¡ƒ¡„¡†¡‡¡‰¡Š¡‹¡Œ¡Ž¡(2&c759554bb4164f24a0787886b81713ef.woff2Ò«Š 682ac772448d941fc7d8c7eb3bcdb4f2„ö"Õ�¡�¡’¡“¡”¡•¡—¡š¡›¡œ¡�¡ž¡Ÿ¡ ¡¡¡¢¡¤¡¦¡ª¡«¡®¡°¡±¡¶¡¸¡¹¡¼¡½¡¿¡À¡Á¡áġơǡȡʡˡ̡͡ΡСÒ¡Ó¡Ô¡סء١ۡܡݡߡà¡á¡â¡ã¡ä¡é¡ê¡ë¡ï¡ð¡ò¡ô¡ö¡÷¡ø¡ú¡ü¡ý¡þ¡(2&682ac772448d941fc7d8c7eb3bcdb4f2.woff2Ò®‹ d9d2fd026d6d2af2a98dcde16e6a2f18Ìÿ"Øÿ¡�¢ƒ¢…¢Š¢Œ¢�¢Ž¢�¢‘¢“¢–¢—¢˜¢™¢š¢›¢œ¢�¢ž¢ ¢¢¢£¢¤¢¥¢¦¢§¢¨¢©¢«¢¬¢­¢®¢¯¢°¢±¢³¢´¢µ¢¶¢¸¢¹¢½¢¾¢¢Ê¢΢Ï¢ТӢآ٢ۢݢޢߢà¢á¢ã¢ä¢æ¢ê¢ï¢ò¢ú¢þ¢ÿ¢ƒ£„£†£‡£‹£(2&d9d2fd026d6d2af2a98dcde16e6a2f18.woff2Ò´Œ 11794fc02845e3ddb6ba7f8dbb2f269eܲ"ÞŽ£�£�£‘£“£”£˜£š£�£ž£Ÿ£¡£££¦£§£¨£©£­£®£´£¸£¹£º£¾£¿£Á££ãţȣʣΣУңӣԣգ֣ףأ٣ڣޣߣâ£ã£å£æ£ç£è£é£ê£ì£î£ò£ô£÷£þ£„¤…¤‰¤‹¤Œ¤�¤�¤“¤”¤•¤œ¤ž¤Ÿ¤¡¤¢¤£¤(2&11794fc02845e3ddb6ba7f8dbb2f269e.woff2Ò·� 32ec7cc5b00865689322ef41ecb04fae¨î"ᦤ§¤¬¤¯¤±¤²¤´¤µ¤¼¤¾¤ŤƤȤɤˤϤÒ¤Ó¤Õ¤פؤÙ¤Ú¤ߤà¤â¤ã¤ä¤æ¤è¤ë¤ì¤í¤ð¤ñ¤ó¤ö¤÷¤ø¤ù¤ú¤û¤ü¤þ¤€¥„¥…¥†¥‹¥Ž¥�¥’¥”¥•¥–¥—¥˜¥™¥š¥œ¥¤¥¥¥¦¥§¥®¥¯¥°¥´¥µ¥¶¥·¥¸¥¹¥º¥»¥(2&32ec7cc5b00865689322ef41ecb04fae.woff2Ò½Ž 28c6cba5fe14e5e1a4071b87a50a5538¬ð"ç¼¥½¥À¥Â¥Ä¥Å¥Æ¥È¥Ê¥Ì¥Í¥Î¥Ï¥Ñ¥Ó¥Ô¥×¥Ú¥Û¥Ü¥à¥á¥ã¥å¥æ¥ç¥è¥é¥ê¥ë¥ì¥í¥î¥ï¥ò¥ô¥ö¥÷¥ü¥ý¥�¦‚¦ƒ¦„¦‡¦‰¦Ц‹¦Œ¦ަ‘¦’¦“¦”¦˜¦›¦œ¦ž¦Ÿ¦¢¦¤¦¥¦§¦¨¦©¦«¦¬¦°¦²¦³¦´¦µ¦¶¦·¦¸¦¼¦½¦(2&28c6cba5fe14e5e1a4071b87a50a5538.woff2ÒÀ� ed8b3a7b104cab4293448aafc4ac9860ˆÒ"ê¦ĦƦ˦̦ͦЦئÙ¦Û¦ݦå¦è¦ê¦ì¦í¦ò¦ö¦ù¦ü¦ý¦þ¦€§�§ƒ§‡§ˆ§Чާ�§�§‘§’§“§”§–§—§›§œ§ž§ §¡§¤§§§ª§«§¬§¯§°§±§³§µ§·§¸§¹§º§¼§½§¾§À§ŧƧǧΧϧЧÒ§Ó§Õ§Ú§ܧݧÞ§á§ç§ô§ú§þ§(2&ed8b3a7b104cab4293448aafc4ac9860.woff2ÒÃ� 66a4ab265ac7c98d56146d2036465debð¤"íÿ§€¨‚¨…¨‡¨‹¨”¨˜¨™¨š¨œ¨¢¨¤¨¥¨ª¨°¨·¨º¨½¨¿¨Á¨ĨŨǨɨ̨ͨΨϨѨÚ¨ݨÞ¨ߨà¨á¨ã¨å¨ç¨é¨ê¨ë¨ì¨í¨î¨ï¨ð¨ô¨ù¨ú¨þ¨ÿ¨�©ƒ©…©‡©ˆ©‰©Š©�©‘©“©—©˜©œ©ž©Ÿ© ©¡©¢©¥©®©°©²©µ©¶©·©¹©º©(2&66a4ab265ac7c98d56146d2036465deb.woff2ÒÆ‘ 66aa62ca7d17d34ee9f5b2dcf6390f6aÌÖ"ð¾©éũʩ˩֩ة۩à©â©ã©ä©ë©ì©ï©ð©ñ©ô©õ©ö©÷©ø©ù©û©þ©€ª‚ªƒª…ªˆªŠª‹ªŒª�ªŽª’ª“ª•ª–ª—ª˜ª™ªšªœª�ªžªŸª¡ª¥ª¦ª¨ª©ª«ª­ª²ª´ªµª¶ª¸ª¹ªºª»ª½ªÀªªŪǪȪ˪̪ͪΪѪÒªÔªתتÙªÚªÛª(2&66aa62ca7d17d34ee9f5b2dcf6390f6a.woff2ÒÉ’ bade2e66ef234064ce5d0b7a59c3cab6ôó"óݪߪàªâªãªèªéªëªïªðªñªòªóªôªùªúªýªÿª…«†«Œ«�«Ž«�«’«“«•«–«—«›«ž« «¡«¢«£«¤«¥«¦«¨«©«­«¯«°«´«¶«¸«º«¼«¿«À«Á««ëȫʫ˫ϫЫÕ«׫ث٫۫ޫà«â«ç«í«î«ð«ñ«ô«ø«ù«ú«û«ü«ÿ«‚¬ƒ¬„¬(2&bade2e66ef234064ce5d0b7a59c3cab6.woff2ÒÌ“ d8da784bd0a8feeaae441c43721e7ac4è¬"ö…¬‡¬Ь‹¬�¬‘¬’¬“¬•¬™¬š¬�¬ ¬¡¬¢¬¥¬¦¬¨¬©¬ª¬«¬³¬·¬º¬¼¬½¬¾¬À¬Á¬¬ìĬŬƬǬȬɬʬˬϬЬѬÒ¬Õ¬Ö¬Ú¬Û¬Þ¬߬á¬ã¬ç¬í¬î¬ð¬ó¬õ¬÷¬ù¬ú¬ý¬þ¬ÿ¬�­‚­ƒ­„­ˆ­‰­Š­‹­�­�­‘­’­”­–­—­˜­™­š­›­(2&d8da784bd0a8feeaae441c43721e7ac4.woff2ÒÏ” da02de9f042b50c10035c9e37bffda42ø›"ùœ­�­ž­Ÿ­ ­¡­¢­¤­¥­§­©­ª­«­¬­­­®­°­±­²­µ­¸­¹­º­»­½­¾­¿­íÄ­Æ­Ç­É­Ë­Ì­Í­έÏ­Эҭӭխ֭ح٭ܭã­å­æ­ç­è­é­ì­î­ï­ò­ó­ö­÷­ø­û­ü­€®�®‚®…®Œ®Ž®�®�®‘®”®•®—®™®š®›®�®ž® ®¡®¢®¤®¥®(2&da02de9f042b50c10035c9e37bffda42.woff2ÒÒ• 24e5b6f0788f1e83f4a9d74d40b20288ôÀ"ü¦®§®«®±®²®´®µ®¶®·®¸®¼®½®¿®Á®îĮŮƮȮɮˮҮӮԮծ֮خٮâ®ã®å®ç®ì®î®ð®ñ®ò®ô®õ®ø®ù®ú®ý®þ®ÿ®€¯�¯‡¯ˆ¯‰¯Н�¯ޝ�¯�¯‘¯”¯•¯–¯—¯˜¯™¯š¯œ¯�¯ž¯Ÿ¯¥¯¨¯ª¯¬¯¯¯°¯±¯³¯µ¯¶¯·¯¹¯º¯»¯¼¯½¯¾¯(2&24e5b6f0788f1e83f4a9d74d40b20288.woff2ÒØ– c0d265da6ef3f46b5644bd1cdda226acøþ"‚¿¯À¯Á¯įůƯǯȯɯʯ̯ͯЯѯÓ¯Ö¯ׯÛ¯ܯÞ¯â¯ã¯å¯æ¯ç¯è¯é¯ê¯ë¯ì¯î¯ð¯ñ¯ò¯ó¯õ¯ö¯û¯ü¯þ¯ÿ¯�°ƒ°„°ˆ°‰°Œ°ް�°�°’°“°”°—°˜°š°›°œ°Ÿ°¢°£°¥°¦°§°¨°©°«°¬°­°®°²°³°¶°·°¸°¹°º°»°¼°½°¾°¿°À°Á°°ð(2&c0d265da6ef3f46b5644bd1cdda226ac.woff2ÒÛ— 3bb49223f0d61de1d6576a0e4eaab536À®"…ŰưǰȰɰΰаÓ°Õ°Ö°Ù°Ú°Û°ܰݰß°à°á°ã°ä°æ°ç°è°é°ê°í°î°ï°ð°ñ°ò°ó°ô°ö°÷°ø°ú°û°ü°ý°ÿ°‚±„±†±‡±ˆ±‹±Œ±�±ޱ�±�±‘±”±•±–±—±˜±›±�± ±¡±¢±£±¤±¥±¦±§±ª±«±¬±­±¯±°±±±²±´±µ±¶±·±¸±¹±º±»±½±¿±À±(2&3bb49223f0d61de1d6576a0e4eaab536.woff2ÒÞ˜ 71f70a587e85fd408a09f026c54cad68ˆ™"ˆ±ñıƱȱɱʱ˱̱ͱϱбÒ±Ô±Ö±×±Û±ܱݱá±ã±å±æ±ç±è±ê±í±ñ±ò±ô±õ±÷±ø±û±ü±þ±ÿ±€²�²ƒ²…²†²ˆ²‰²в‹²Œ²޲�²‘²’²“²—²˜²›²�²ž²¡²£²¦²¨²¬²°²²²³²µ²¶²»²½²¿²À²òŲƲʲ̲ͲÒ²Ó²Ù²Û²ܲݲ޲߲á²ã²ä²(2&71f70a587e85fd408a09f026c54cad68.woff2ÒÞ™ 38455b6861aa4cbb6396832af53ef1c1І"ˆæ²è²ë²ì²í²ï²ð²ñ²ò²õ²÷²ú²û²þ²ÿ²€³…³‰³‹³Œ³޳�³�³‘³”³•³˜³š³›³œ³Ÿ³ ³¡³¢³¦³§³¬³­³°³±³³³´³µ³¶³·³¸³º³¼³½³¿³À³Á³³óijųdzȳɳ̳γϳճֳٳ۳޳߳à³á³â³ä³æ³ç³é³ê³ë³í³î³ï³ð³ñ³ò³ó³ô³õ³ö³÷³(2&38455b6861aa4cbb6396832af53ef1c1.woff2Òáš a9ea2c76ae4a0b7fc4bacf5abb16f573à²"‹ø³ú³ü³ý³þ³€´‚´Š´‹´�´Ž´�´�´’´”´•´–´—´™´š´�´ž´¡´¢´¤´¦´§´¨´ª´«´¬´­´®´¯´°´³´µ´·´¸´¹´º´»´½´¾´¿´´ôÄ´Å´Ç´È´Ë´Ì´Í´δÏ´дѴҴӴԴִ״شٴ۴ܴݴ޴ߴà´á´ã´ä´å´è´é´ë´ì´î´ï´ð´ñ´ò´ó´ø´ù´û´ü´(2&a9ea2c76ae4a0b7fc4bacf5abb16f573.woff2Òä› b41e97f92f2b49042a14c593fe4df4c3ÀØ"Žý´þ´€µ�µ‚µƒµ„µ…µ†µ‡µˆµ‰µе‹µŒµ�µ޵�µ�µ‘µ“µ”µ•µ–µ—µ˜µ™µœµ�µžµŸµ µ¡µ¢µ£µ¤µ¥µ¦µ¨µ©µ«µ¬µ­µ®µ¯µ°µ±µ´µ¶µ·µ¹µºµ»µ¿µÀµõĵŵƵǵȵʵ͵εϵеѵÓµÕµÙµÚµÛµݵ޵ߵâµäµåµçµèµêµìµíµîµïµðµòµóµôµöµ(2&b41e97f92f2b49042a14c593fe4df4c3.woff2Òçœ 990987f863a7b98a9ddcdb294680cd3dÜú"‘÷µøµùµûµüµýµþµÿµ�¶‚¶ƒ¶„¶…¶†¶‡¶ж�¶޶�¶�¶‘¶’¶“¶”¶•¶˜¶š¶›¶œ¶�¶ž¶Ÿ¶ ¶¢¶£¶¥¶¦¶§¶¨¶©¶«¶¬¶­¶®¶¯¶±¶³¶µ¶¶¶¹¶º¶»¶¼¶½¶¾¶¿¶Á¶¶öĶŶƶǶȶɶʶ˶Ͷζ϶Ò¶Ö¶Þ¶à¶á¶ç¶è¶í¶î¶ï¶ò¶ô¶ö¶÷¶ù¶û¶ü¶þ¶‚·†·Š·(2&990987f863a7b98a9ddcdb294680cd3d.woff2Òê� 07841f0b7e244a231e1f7183d81700feŒŠ"”�·Ž·�·‘·’·”·–·Ÿ·§·¨·©·¬·­·¯·±·²···º·»·¼·À·Á·÷È·É·Ê·Ë·Í·ηϷѷԷշַ׷طٷڷ۷ܷà·ã·ê·í·ï·ñ·ò·ó·ô·÷·ý·þ·€¸‚¸ƒ¸…¸Œ¸�¸’¸“¸—¸™¸›¸ž¸Ÿ¸ ¸¡¸£¸¦¸¨¸©¸ª¸«¸­¸®¸¯¸°¸²¸³¸µ¸¶¸øĸǸ̸Ò¸Ó¸Ô¸Ö¸׸ظÚ¸(2&07841f0b7e244a231e1f7183d81700fe.woff2Òíž 3262b4a18db436acd016a3bf7e2889f5�Þ"—Û¸ݸ߸ç¸é¸ê¸ë¸í¸ð¸ò¸ó¸ô¸õ¸ö¸÷¸ø¸û¸ü¸ý¸þ¸€¹ƒ¹„¹…¹†¹‡¹‰¹й‹¹޹�¹’¹“¹•¹�¹ž¹Ÿ¹ ¹¤¹¥¹¦¹§¹¨¹ª¹®¹¯¹°¹²¹´¹¶¹¹¹º¹»¹¼¹¾¹À¹¹ùŹƹǹȹɹʹ̹͹ιϹйѹÓ¹Ô¹Õ¹Ö¹×¹عÚ¹Û¹ܹݹ޹߹à¹â¹ã¹ç¹é¹ë¹ì¹î¹ñ¹ò¹ó¹(2&3262b4a18db436acd016a3bf7e2889f5.woff2ÒðŸ 7a6db27961b27c1704b9ee30c8ac9b2c •"šõ¹÷¹ø¹ù¹ú¹ü¹þ¹ÿ¹€º�º„º…ºˆº‰ºŠº‹ºŒº�º�º‘º’º“º•º˜º™ºšºœº�ºŸº º¡º£º¥º¨ºªº«º¯º°º±º²º³ºµº¶º·º¸º¹ººº»º¼º¿ºÀºÁººúĺźƺȺɺͺκϺѺÒºÓºÔºÕºÖº׺ÙºÚºܺÞºߺàºáºâºãºäºåºæºçºèºêºíºîºðºñºòºóºõºöº÷ºøº(2&7a6db27961b27c1704b9ee30c8ac9b2c.woff2Òó  eb5b1cb9e68b62530de880b98bed6d37œÙ"�ùºúºûºüºýºþºÿº€»ƒ»…»†»ˆ»‰»Š»‹»Œ»�»Ž»�»�»‘»’»“»”»•»–»˜»š»›»œ»ž»Ÿ»¡»¢»£»¤»¥»¦»¨»©»ª»«»¬»­»®»¯»°»±»²»³»´»µ»¶»¹»»»¾»¿»À»Á»»ûĻƻǻȻɻʻ̻λÏ»лѻӻջ׻ػٻڻܻ߻à»ã»ä»ê»ì»í»õ»ö»ø»ú»û»ü»ÿ»€¼„¼(2&eb5b1cb9e68b62530de880b98bed6d37.woff2Òó¡ f7b00ccfdc98f0c5cdaa062fd05a33ed€™"�‡¼‰¼м‹¼�¼޼’¼“¼—¼ž¼Ÿ¼ ¼¡¼¢¼£¼¤¼¨¼©¼ª¼¬¼¯¼°¼²¼´¼µ¼¹¼º¼¾¼¿¼Á¼ƼǼȼɼʼ˼ͼμϼмѼÒ¼Ó¼Ö¼Ù¼Ú¼ܼݼà¼ä¼å¼æ¼ç¼è¼é¼ê¼í¼î¼ï¼ð¼ñ¼õ¼÷¼�½‚½ƒ½…½ˆ½‰½Œ½�½޽’½˜½›½�½¡½¢½£½¤½¨½©½ª½¬½®½¯½°½±½²½´½º½»½¼½½½¿½(2&f7b00ccfdc98f0c5cdaa062fd05a33ed.woff2Òö¢ 2f4c971d2b9a9a20a80cd4c5d3df8852ŒÀ" À½ýŽƽǽ˽̽ͽνϽнÔ½Õ½×½ؽÙ½ܽÞ½ä½å½æ½ç½ë½í½î½ï½ð½ñ½ò½õ½ø½ù½û½ü½ý½…¾†¾‡¾‰¾Œ¾�¾޾�¾”¾–¾™¾š¾œ¾�¾ž¾¡¾¢¾£¾¤¾¨¾«¾¬¾®¾°¾²¾´¾¶¾¸¾»¾½¾¾¾¿¾Á¾¾þľžƾǾɾʾ˾;ϾѾÔ¾Ù¾Ú¾Û¾ܾ޾߾à¾ã¾ç¾è¾ë¾î¾ï¾ò¾ô¾(2&2f4c971d2b9a9a20a80cd4c5d3df8852.woff2Òù£ a823619ec0b7c4de017bd79369c65f11Ìþ"£õ¾ö¾ø¾ú¾ý¾þ¾ÿ¾ƒ¿†¿�¿Ž¿�¿“¿”¿–¿š¿›¿�¿Ÿ¿¢¿£¿¤¿¥¿¦¿§¿«¿¬¿¯¿°¿±¿²¿³¿´¿¶¿¸¿º¿»¿¾¿¿¿À¿Á¿¿Ç¿È¿Ê¿Ë¿οӿԿտڿۿܿ޿߿â¿ã¿å¿æ¿è¿é¿ì¿ï¿ð¿ò¿ó¿ô¿ö¿÷¿ù¿ú¿ü¿‡ÀˆÀ‰À‹ÀŒÀ�À‘À“À—À˜ÀšÀžÀŸÀ¢À£À¤À¬À­À®À°À±À²À³À´À¶À(2&a823619ec0b7c4de017bd79369c65f11.woff2Òü¤ 1be694dbf439efb92b682b25ddfe194a„�"¦·À¸À¹ÀºÀ½À¾ÀÀÀÄÀÅÀÇÀÈÀÉÀÊÀÌÀÎÀÏÀÑÀÓÀÔÀÖÀ×ÀØÀÛÀÜÀÞÀßÀàÀáÀæÀîÀñÀòÀôÀõÀ÷ÀþÀ€Á�Á‚Á†Á‡ÁˆÁŠÁ‹ÁŽÁ�Á�Á‘Á“Á•Á—Á˜Á™ÁœÁžÁ¡Á¢Á¤Á¥Á§Á©ÁªÁ®Á°Á³Á·Á¹ÁºÁ¾Á¿ÁÀÁÁÁÂÁÃÁÄÁÇÁÈÁÉÁÌÁÍÁÎÁÏÁÐÁÒÁÓÁÔÁÖÁ×ÁÙÁÛÁÞÁâÁãÁäÁåÁêÁõÁ÷Á(2&1be694dbf439efb92b682b25ddfe194a.woff2Òÿ¥ 5af43d566732f148c3731c8825a69d86”ß"©øÁüÁýÁþÁÿÁ‚ƒ„…‡Š‹ŒÂ�‘’“”–—˜™Â�ž¡¢¥©ª¬­®¯°±²³µ¶¸¹º»¼½ÂÀÂÁÂÂÂÃÂÄÂÅÂÆÂÇÂÉÂÏÂÐÂÒÂÓÂÔÂÖÂ×ÂÙÂÛÂÜÂÞÂàÂáÂäÂåÂæÂéÂìÂíÂïÂñÂòÂôÂøÂùÂúÂûÂüÂýÂþÂÿ€Ã�ÃÄÅÆÇÈÉÌÃ�Ã�ÓÕÃ(2&5af43d566732f148c3731c8825a69d86.woff2Òÿ¦ 67089b7ce254605784678f76feeb45e6Èý"©–רÙÛÜÞßàáâãåæêíïðñóôõøùúûüýÿÃÀÃÁÃÃÃÄÃÅÃÆÃÎÃÏÃÐÃÓÃÕÃÖÃ×ÃØÃÙÃÚÃÛÃÜÃÝÃÞÃàÃáÃâÃäÃåÃçÃéÃêÃëÃìÃíÃîÃïÃðÃñÃóÃôÃùÃûÃýÃ�Ă㥹ĉēęĜÄ�ĞĠģĦĨīĭįıĵĸĹĺĻļÄÂÄÄÄÅÄÆÄÊÄ(2&67089b7ce254605784678f76feeb45e6.woff2Ò‚§ b13f934309d533c2ece2b5386d237a9c„ã"¬ÏÄÐÄÕÄÖÄ×ÄÙÄÚÄÜÄÝÄÞÄßÄàÄáÄâÄäÄåÄèÄñÄòÄôÄõÄ÷ÄøÄúÄûÄýÄ�łŃŅņŇňŋŌÅ�ÅŽÅ�Å�ŔřŜÅ�ŞţŦŧũŪŭŮůŰŲųŴŶŷŸźžÅÀÅÁÅÃÅÏÅÑÅÕÅÝÅÞÅàÅáÅäÅêÅëÅðÅòÅõÅøÅùÅúÅûŀƃƄƅƆƊƋƌÆ�Æ�Æ�ƒƓƔƕƗƘƙƜÆ(2&b13f934309d533c2ece2b5386d237a9c.woff2Ò…¨ 6c423687c18cd6be5b169633ff9d2da6À¥"¯¦Æ§Æ©Æ¬Æ­Æ®Æ°Æ±Æ³Æ´ÆµÆ¶Æ·Æ¸Æ»Æ¼Æ¿ÆÀÆÁÆÄÆÇÆÈÆÊÆÑÆÒÆÓÆÔÆÖÆׯØÆÙÆÚÆÛÆÜÆÝÆàÆäÆåÆæÆèÆêÆìÆïÆðÆòÆóÆôÆõÆøÆùÆüÆýÆþÆÿÆ�DždžNjÇ�ǑǓǔǕǗǚǜÇ�ǞǟǤǦǫǯDZDzǵǶǹǻǽǿÇÁÇÂÇÃÇÅÇÇÇÈÇÊÇËÇÌÇÑÇÓÇÔÇÕÇ×ÇØÇÙÇÜÇÝÇßÇâÇ(2&6c423687c18cd6be5b169633ff9d2da6.woff2Òˆ© c6408d7fe430990b79311682be378c14Ðæ"²äÇåÇæÇçÇèÇëÇìÇïÇðÇñÇóÇõÇ÷ÇùÇúÇûÇüÇþǃȄȆȇȈȉȊȎȑȒȕȘșȚÈ�ȟȢȣȤȥȧȨȩȫȮȯȰȱȲȳȵȷȸȹȻȼȾÈÀÈÂÈÃÈÉÈËÈÌÈÍÈÎÈÏÈÐÈÓÈÕÈÖÈ×ÈÙÈÚÈÛÈÝÈàÈáÈâÈãÈäÈåÈæÈèÈêÈëÈìÈîÈðÈñÈòÈôÈõÈ÷ÈüÈýÈþÈÿÈ€É�ɃɆɉɊɋÉ(2&c6408d7fe430990b79311682be378c14.woff2Òˆª 16a9afea3d4bb12e3de9b3ffb3a2bf1a˜”"²ŒÉ�ÉŽÉ�ɔɗɘɚɛɜÉ�ɠɡɢɦɧɨɪɯɱɴɶɹɽÉÃÉÆÉÈÉÉÉÌÉÏÉÑÉÓÉÕÉÖÉÙÉÛÉÜÉÝÉßÉáÉãÉåÉçÉèÉéÉêÉëÉíÉîÉóÉõÉöÉøÉùÉýÉÿÉ�ʂʃʅʇʈʊʋʌÊ�ÊŽÊ�ʑʓʕʗʚʞʟʠʡʦʧʨʩʭʰʱʲʳʷʺʼʽÊÀÊÁÊÂÊÃÊÄÊÆÊÇÊÊÊËÊÍÊÎÊÐÊ(2&16a9afea3d4bb12e3de9b3ffb3a2bf1a.woff2Ò‹« 48367d09ab0faa3fd7d1ff9e8a1d7199¸Þ"µÒÊÓÊÔÊÚÊÜÊßÊàÊáÊäÊåÊçÊèÊéÊêÊíÊîÊïÊñÊóÊöÊùÊúÊûÊüÊýÊþÊÿÊ€Ë�˄˅ˆˈˉˊË�ËŽË�˒˔˖˘˚Ë�˞ˠˢˣ˦˨˪ˮ˱˲˳˴˵˶˸˺˻˾˿ËÀËÂËÇËÈËÉËÊËÍËÐËÑËÓËÔËÕËØËÙËÚËÛËÜËÝËÞËßËáËãËäËêËëËòËóËôËõËøËùËûËüËýËþËÿË�̄̅̇Ì(2&48367d09ab0faa3fd7d1ff9e8a1d7199.woff2ÒŽ¬ 4acc02207f1ed977e176cbb0744fccbf�˜"¸ˆÌ‰Ì‹Ì�Ì�̷̸̡̢̛̖̗̘̜̞̣̤̦̩̪̫̬̮̰̲̳̹̺̻̑̒̽̿̚ÌÀÌÄÌÅÌÆÌÇÌÈÌÊÌÍÌÎÌÐÌÑÌØÌÙÌÛÌÜÌÞÌàÌâÌãÌåÌçÌéÌêÌëÌìÌíÌñÌòÌóÌõÌøÌùÌûÌüÌýÌÿÌ€Í�̓͆͊͋ͅÍ�ÍŽÍ�Í�͓͔͕͙͚͒͛ͣͤͥͦͩͪͬͭͯ͘͜͟͞͠͡ͰÍ(2&4acc02207f1ed977e176cbb0744fccbf.woff2ÒŽ­ bbe8c7f0f4551bb519e859bea56d0b41äÄ"¸²Í³ÍµÍ¶Í·Í¸ÍºÍ»Í¼Í½Í¿ÍÀÍÁÍÂÍÃÍÅÍÆÍÈÍÊÍËÍÌÍÍÍÎÍÏÍÐÍÑÍÒÍÓÍÔÍÕÍ×ÍØÍÚÍÞÍßÍáÍâÍãÍäÍåÍçÍèÍêÍëÍíÍîÍïÍñÍõÍöÍúÍûÍýÍ�΂΄΅Ά·ΌΎÎ�ΑΒΓΖΘΙΚΜΞΠΡ΢ΣΤΥΩήΰβγζηθιλμξοÎÁÎÄÎÅÎÇÎÊÎËÎÍÎÒÎÔÎÕÎ×ÎØÎÙÎÚÎ(2&bbe8c7f0f4551bb519e859bea56d0b41.woff2Ò‘® 96f4e7dcf6c58f5ee1baf9a70debbcb3ôý"»ÛÎÝÎâÎãÎäÎæÎçÎëÎìÎîÎôÎöÎøÎùÎúÎûÎý΀ςσυφψϊόÏ�ÏŽÏ�ϑϒϓϔϖϙϛϟϠϡϤϦϩϬϮϱϲϴϹϺϻϼϽϾϿÏÀÏÂÏÅÏÆÏÇÏÈÏÉÏÊÏËÏÌÏÍÏÎÏÕÏÖÏ×ÏÛÏßÏáÏãÏäÏæÏçÏèÏêÏëÏíÏîÏòÏöÏ÷ÏøÏùÏúÏûÏüÏþÏ�ЂЃЄІÐ�Ð�ВДЕИЙКЛМОÐ(2&96f4e7dcf6c58f5ee1baf9a70debbcb3.woff2Ò”¯ a4fa4d4fb04c38e3da37e00bca79745dÀ¯"¾ŸÐ Ð¢Ð£Ð¤Ð¥Ð¦Ð§Ð¨Ð«Ð¬Ð­Ð®Ð¯Ð°Ð±Ð´ÐµÐ¶ÐºÐ»Ð¿ÐÇÐËÐÍÐÏÐÒÐÖÐ×ÐØÐÙÐÚÐÛÐÜÐÝÐÞÐßÐêÐìÐíÐîÐïÐðÐñÐòÐóÐõÐøÐùÐúÐûÐüÐýÐþÐÿЀтфчшщъыьÑ�ÑŽÑ�ёђѕіљњћќўѠѡѣѤѥѩѪѫѬѮѱѲѴѶѷѸѹѺѻѼѽѾѿÑÁÑÃÑÅÑÆÑÇÑÈÑÊÑ(2&a4fa4d4fb04c38e3da37e00bca79745d.woff2Ò”° 213e90fe3a3ca970cb822522e2145072èÔ"¾ÌÑÎÑÏÑÐÑÑÑÓÑÔÑÙÑÛÑÜÑÝÑÞÑáÑâÑäÑåÑæÑèÑéÑêÑëÑìÑíÑïÑóÑôÑöÑ÷ÑøÑûÑýÑþÑÿр҂҃҄҆҇҈҉ҊҌґғҔҕҖҗҘҙҚқҜÒ�ÒžÒ¡Ò¢Ò£Ò¥Ò¦Ò§Ò¨Ò©ÒªÒ«Ò¬Ò®Ò¯Ò±Ò²Ò³ÒµÒ¶Ò·Ò¸ÒºÒ»Ò¼Ò¾ÒÀÒÁÒÃÒÄÒÅÒÆÒÇÒÈÒÉÒËÒÌÒÍÒÎÒÏÒÐÒÑÒÒÒÕÒÖÒØÒÙÒÛÒÜÒßÒáÒâÒ(2&213e90fe3a3ca970cb822522e2145072.woff2Ò—± 09c64609faed9bb9ba7514e25e728a34ˆ�"ÁäÒåÒçÒéÒêÒìÒïÒðÒòÒóÒôÒöÒúÒûÒýÒþÒÿÒ�ӃӅӊӋӌӎÓ�Ó�Ó‘Ó’Ó“Ó–Ó—Ó™ÓšÓ�ÓžÓŸÓ Ó¡Ó¢Ó£Ó¤Ó¥Ó¦Ó©Ó¬Ó¯Ó°Ó²Ó³ÓµÓ¶Ó¸Ó¹ÓºÓ¼Ó½Ó¾ÓÀÓÂÓÃÓÄÓÅÓÆÓÇÓÈÓÉÓÏÓÑÓÒÓÕÓÖÓ×ÓØÓÙÓÚÓÜÓÝÓÞÓáÓâÓãÓäÓåÓæÓéÓêÓëÓìÓîÓïÓðÓñÓôÓõÓöÓ÷ÓøÓùÓúÓûÓüÓþÓ€ÔƒÔ„Ô†Ô‡Ô(2&09c64609faed9bb9ba7514e25e728a34.woff2Òš² 9d067bc04035e1ba03f5a54acc21f5e6À›"ĈԉԋԌÔ�ÔŽÔ�Ô�Ô‘Ô’Ô”Ô•Ô–ÔšÔ›ÔœÔ�Ô Ô¢Ô¤Ô¥Ô¦Ô§Ô©Ô«Ô¬Ô­Ô®Ô°Ô²Ô³Ô´Ô¶Ô·Ô»Ô¼Ô¿ÔÀÔÁÔÂÔÃÔÅÔÆÔÉÔÊÔÌÔÍÔÎÔÏÔÑÔÒÔÓÔÔÔÕÔÖÔ×ÔÚÔÜÔÝÔÞÔàÔãÔäÔæÔçÔèÔéÔêÔìÔíÔîÔïÔðÔòÔóÔôÔõÔöÔ÷ÔøÔúÔûÔýÔþÔÿÔ‚ÕƒÕ…Õ†Õ‡ÕˆÕŠÕ‹ÕŒÕ�Õ�Õ’Õ“Õ•Õ–Õ˜Õ™ÕšÕ›Õ�ÕžÕŸÕ¡Õ(2&9d067bc04035e1ba03f5a54acc21f5e6.woff2Òš³ 43e90fb3a4c0e76c942669a3a2bdc623ÀÜ"ĤեզէըժխծկհձղմյնշչպռսվտÕÀÕÁÕÂÕÄÕÅÕÆÕÇÕÈÕÉÕÊÕËÕÌÕÍÕÎÕÏÕÐÕÑÕÒÕÔÕÕÕÖÕ×ÕØÕÙÕÜÕàÕáÕâÕãÕäÕæÕéÕíÕîÕïÕðÕòÕôÕõÕöÕ÷ÕùÕúÕüÕýÕþÕÿÕ€Ö�Ö‚ÖƒÖ…Ö†Ö‡ÖˆÖ‰Ö‹ÖŒÖ�ÖŽÖ�Ö‘Ö“Ö”Ö•Ö—Ö˜Ö™ÖšÖ›ÖœÖ�ÖŸÖ¥Ö¦Ö¨Ö©ÖªÖ«Ö¬Ö­Ö®Ö¯Ö°Ö±Ö³Ö(2&43e90fb3a4c0e76c942669a3a2bdc623.woff2Ò�´ d64cbbb81e72087058d342c0037a8338¬û"Ç´ÖµÖ¶Ö¸Ö»Ö¼Ö¿ÖÀÖÁÖÂÖÄÖÅÖÈÖÊÖËÖÍÖÎÖÏÖÑÖÒÖÓÖÔÖÕÖÖÖ×ÖØÖÚÖÛÖÜÖÝÖÞÖàÖèÖéÖëÖìÖíÖîÖïÖðÖñÖóÖôÖõÖöÖúÖýÖþրׅ׈׌׎×�×�בהוחיל×�ןנעףץצקרש׬׭װױ׶׸׹׻׽׾×Ã×Ä×Ç×È×É×Ê×Ì×Î×Ð×Ñר×Ú×Ü×Ý×Þ×ß×à×â×ã×ä×å׿×ç×è×é×ì×í×î×(2&d64cbbb81e72087058d342c0037a8338.woff2Ò µ fde916f1e4b33ad8cf5f2d48c091a12eܘ"Êð×ñ×ò×ô×ö×÷×ø×ú×û×ü×þ×€Ø�؂؃؄؉؊؋؎ؒؗ؜Ø�؞ؠإحرضطعغػؼؾؿØÃØÄØÅØÈØËØÌØÍØÎØÏØÑØÒØÓØÖØØØÙØÚØâØãØåØæØçØëØìØíØîØïØñØóØõØ÷ØøØûØüØÿ؀لهيًÙ�َّٕٖٜٗ٘ٚÙ�ٞ٠٢٨٬ٯٰٴٵٶٷٺÙÀÙÂÙÃÙÆÙÇÙÈÙËÙÍÙÎÙÏÙÑÙÒÙ(2&fde916f1e4b33ad8cf5f2d48c091a12e.woff2Ò ¶ 49f6b328dfd49ecd0eb193fe9ff1ed0eì¨"ÊØÙÙÙÚÙÜÙÝÙßÙäÙæÙçÙéÙìÙíÙòÙôÙùÙÿÙ€Ú‚ÚƒÚ…Ú†ÚˆÚ‰ÚŠÚ�Ú�Ú�Ú‘Ú“Ú”Ú•Ú–Ú˜ÚœÚ�ÚŸÚ Ú¡Ú¢Ú£Ú¤Ú¦Ú¨Ú©Ú¬Ú­Ú¯Ú°Ú´Ú·Ú¸ÚºÚ¿ÚÀÚÂÚÄÚÉÚÌÚÐÚÕÚÖÚ×ÚØÚÛÚÝÚßÚáÚâÚäÚåÚçÚèÚëÚìÚíÚðÚñÚòÚóÚõÚöÚúÚûÚýÚþÚÿÚ€Û�ÛƒÛ„Û†ÛŠÛ‹Û�Û�Û�ےۖۗۘۙۚۜۢۥۭ۬۰۱۳Û(2&49f6b328dfd49ecd0eb193fe9ff1ed0e.woff2Ò£· 74aa4903be1779277b5cfac259433130ÐÔ"Í´Û¶Û·Û¹ÛºÛ»Û½Û¾ÛÁÛÂÛÃÛÈÛÉÛÊÛÍÛÎÛÏÛÐÛÒÛÓÛÔÛÕÛ×ÛÛÛÜÛßÛâÛãÛçÛéÛíÛïÛðÛòÛôÛøÛýÛþÛÿÛ€Ü�܂܃܄܆܇܈܉܋Ü�ܒܓܕܘܜܞܟܢܧܨܪܮܱܷܹܻܼܰܳܵܶܽܿÜÀÜÁÜÂÜÅÜÆÜÇÜÈÜÉÜËÜÌÜÏÜÐÜÑÜÒÜÕÜ×ÜÙÜÚÜÜÜÝÜàÜáÜâÜãÜäÜåÜæÜèÜéÜêÜìÜíÜðÜñÜòÜóÜôÜõÜ(2&74aa4903be1779277b5cfac259433130.woff2Ò£¸ ed613af6b5d661cdce32ba2d54401f46ôˆ"ÍöÜ÷ÜøÜùÜúÜûÜüÜýÜ€Ý�݂݄݈݇݊݋݌Ý�ݎݑݒݓݔݕݗݙݚݛݞݠݡݣݤݦݨݩݬݭݮݰݳݵݸݹݾݿÝÀÝÃÝÆÝÈÝÉÝÊÝÍÝÐÝÒÝÖÝØÝÙÝÛÝÜÝÝÝãÝçÝêÝëÝíÝîÝðÝñÝóÝõÝöÝúÝûÝüÝýÝ€ÞƒÞ„Þ…Þ‡ÞˆÞŠÞ‹ÞŒÞ�ÞŽÞ�Þ‘Þ’Þ–Þ—Þ˜Þ™Þ›ÞœÞ�ÞžÞŸÞ¡Þ¥Þ¦Þ§Þ¨Þ®Þ°Þ´Þ·Þ¹ÞºÞ»Þ(2&ed613af6b5d661cdce32ba2d54401f46.woff2Ò¦¹ 13954fc954dab5f15971476847acd844€©"м޽ÞÀÞÂÞÃÞÄÞÅÞÈÞÉÞÊÞÌÞÎÞÏÞÐÞÒÞÓÞÕÞÖÞ×ÞÚÞÝÞßÞàÞáÞãÞåÞçÞèÞéÞêÞëÞìÞñÞóÞõÞöÞùÞûÞýÞþÞ�߂߃߅ߊߋß�ß�ߑߒߓߔߕߖߘߙߚߛß�ߞߟߢߣߥߦߨߪ߲߫߬߭߯߰ߴߵ߷߸ߺ߻߼߽߾߿ßÄßÅ߯ßÇßÈßÊßËßÌßÍßÎßÏßÐßÓßÔßÕßÖß×ßÙßÚßÛßÜßÝßâßãßåßæßçßèßéß(2&13954fc954dab5f15971476847acd844.woff2Ò¦º f6894fc971d259d1e45d635def19bd05èß"Ðêßìßíßòßóßôßõßöß÷ßøßùßûßýßÿ߀à�à‚àƒà„à‡àˆàŠàŒà�àŽà�à’à“à”à–à—à™àœàžà¡à¢à¤à¥à©àªà«à¬à­à®à¯à°à±à³à´à¶à·à¸àºà»à¼à½à¿àÀàÁàÂàÅàÆàÇàÈàÉàÊàËàÍàÎàÐàÒàÓàÔàÕàÖà×àÙàÚàÛàÜàßàààáàâàåàæàçàèàêàîàñàòàóàôà÷àùàúàûà�á‚áƒá„á†á‡áˆá‹áŒá�á�á�á‘á“á(2&f6894fc971d259d1e45d635def19bd05.woff2Ò©» 4142cbb924aba7fa51056bd80d1ec6a5Ä×"Ó—á˜ášá›ážáŸá á¡á¢á£á¤á¥á¦á§á¨á©áªá°á²á´áµá¶áºá¾á¿áÄáÅáÆáÇáÉáËáÌáÍáÎáÐáÑáÒáÓáÔáÕáÖá×áÚáÜáÝáÞáàáááâáãáåáêáîáðáñáòáóáõáöáøáúáûáüáþáÿá€â�â‚âƒâ„â…â†â‡âˆâ‹âŒâ�âŽâ�â‘â’â”â—â›âœâ�âžâŸâ â¢â£â¤â¥â§â¨â©âªâ«â¬â­â®â²â³â´âµâ·â¸â¹âºâ»â¼â½â¾â(2&4142cbb924aba7fa51056bd80d1ec6a5.woff2Ò¬¼ f185e629f014974bd39ec305ceda4af9К"Ö¿âÀâÁâÂâÃâÄâÆâÇâÈâËâÍâÏâÐâÑâÓâÔâÕâÖâ×âØâÚâÛâÝâßâàâáâãâêâëâíâïâðâñâôâõâöâ÷âùâûâüâþâÿâ€ã�ã‚ãƒã…ã†ã‡ãˆã‰ã‹ãŒã�ãŽã�ã‘ã“ã•ã–ãšã›ãœã�ãžã¡ã¢ã£ã¤ã¥ã¦ã§ã©ãªã«ã­ã®ã¯ã°ã²ã´ã¶ã·ã¸ãºã»ã¼ã½ã¿ãÀãÂãÄãÅãÆãÇãÊãËãÌãÍãÏãÐãÑãÓãÖã×ãØãÚãÛãÝãÞãáãâãããäã(2&f185e629f014974bd39ec305ceda4af9.woff2Ò¬½ 31058b014fe147a3c1a3fda11ce6b0b6Ô·"Öèãéãêãëãìãïãðãñãòãóãõãöã÷ãøãúãýãÿã€ä�ä‚äƒä„ä…ä‡äˆä‰äŠä‹äŒäŽä�ä‘ä’ä“ä”ä•ä–ä—ä˜ä™äšäœäžäŸä ä¡ä¢ä£ä¤ä¥ä¦ä§ä©ä«ä®ä¯ä³ä´ä¼äÁäÂäÃäÄäÅäÉäÊäËäÎäÏäÐäÑäÓäÔäÕä×äÚäÜäÞäàäãäääåäèäêäëäìäíäðäñäóäôäöä÷äøäûäüä‚åƒå…å†å‡åˆå‰åŒåŽå�å‘å“å”å•å—å˜å™åšå(2&31058b014fe147a3c1a3fda11ce6b0b6.woff2Ò¯¾ adc6605ce20eaa2eb86036670fd612b7ˆõ"Ùœå�åžå å¡å£å¤å¥å¦å¨å©åªå«å®å±å²å³åµåºå»å¼å½å¾å¿åÅåÆåÇåÉåÊåËåÌåÏåÑåÓåÔåÕåÖåØåÚåÛåÜåÝåßåâåãåäåååæåçåêåëåõåöåþåÿ倿‚æ„æ…æ†æ‡æˆæ‰æ‹æŒæ�æ�æ�æ‘æ’æ”æ˜æšæŸæ æ£æ¤æ¦æ§æ¨æ­æ¯æ°æ²æ³æµæºæ¼æ½æÀæÂæÃæÆæÇæÈæÉæÊæËæÌæÏæÑæÓæÔæÕæÖæØæÙæÚæÛæÜæÝæÞæßæáæâæ(2&adc6605ce20eaa2eb86036670fd612b7.woff2Ò¯¿ e38337627a20b4dffbb049815a78a634ÀÌ"Ùãæäæåæææçæéæîæñæóæôæöæùæýæÿæ�ç‚çƒç…ç†çˆçŠçŒç�ç�ç�ç’ç“ç”ç•ç—ç˜ç™çšçœç�çžç ç¡ç£ç¤ç¥ç¦ç§ç¨çªç¬ç­ç±ç´çµç¶ç¸ç¹ç¼ç½ç¾ç¿çÁçÃçÄçÅçÆçÇçËçÌçÎçÒçÓçÔçÕçÖç×çØçÚçÛçÜçÝçßçáçâçãçäçæçèçêçëçìçîçïçðçñçóçôçõçöç÷çøçùçúçûçüçýçÿç€è�è‚è„è‡èˆè‹èŒè�èŽè‘è’è(2&e38337627a20b4dffbb049815a78a634.woff2Ò²À b24f29eee88718d1c5c8dfdfcd0a74afØþ"Ü“è”è•è–è—è˜è™èœè�èžèŸè è¡è£è¤è§è©è«è­è¯è±è²è·è¸è¹è»è½è¾èÀèÂèÃèÄèÅèÆèÇèÈèÉèÊèÌèÍèÎèÏèÐèÑèÒèÓèÔèÖèØèÝèàèáèâèåèæèçèèèëèìèîèïèñèòèóèôèõèøèùèúèûèüèýèÿè‚é„é…é†éˆéŠéŒé�é�é‘é’é“é”é•é–é—é˜é™éšé›é�éŸé é¡é¢é¤é¥éªé«é¬é­é®é¯é±é²é³é´éµé¶é·é¸é¹é»é(2&b24f29eee88718d1c5c8dfdfcd0a74af.woff2Ò²Á 4cb089f4407e4ad9257b4de9d1a2b63aüŽ"ܼé¾é¿éÀéÁéÂéÃéÄéÅéÆéÇéÈéÉéËéÌéÍéÎéÐéÑéÓéÕéÖé×éØéÙéÛéÝéßéáéåéçéèéééêéëéìéíéðéñéòéóéõéøéùéúéûéüéýéþé€ê�ê‚êƒê…ê†ê‡êˆê‰êŠê‹êŽê�ê’ê”ê–ê—ê›ê�êžê ê¡ê£ê¤ê¦ê§êªê®ê´ê¶ê¹ê¼ê½ê¿êÁêÂêÃêÄêÆêÇêÉêÊêÍêÐêÑêÒêÓêÕêÖê×êØêÞêßêàêáêãêäêçêèêéêìêíêîêïêñêóêõê(2&4cb089f4407e4ad9257b4de9d1a2b63a.woff2ҵ fc665f2559f5abf030f00d0ebfa4d1b9Ü�"ß÷êúêûêüêýêþê€ë�ë‚ë„ë…ëˆë‰ëŒë�ëŽë�ë“ë•ë˜ë›ëœëžë¢ë¦ë§ë¨ë©ëªë­ë¶ë·ëºë»ë¿ëÀëÁëÆëËëÌëÎëÏëÐëÑëÓë×ëÚëÜëÝëßëàëáëåëéëìëíëîëïëòëóëõëöë÷ëøëúëûëýë„ì†ì‡ìˆì‰ìŽì�ì‘ì’ì”ì–ìšìœì�ì£ì¨ì¬ì®ì¯ì±ì²ì¶ì·ì¹ìºì½ìÁìÄìÅìÈìÊìËìÎìÏìÐìÑìÒìÓìÕì×ìÙìÚìÛìÝìàìåìæìèìêìóì(2&fc665f2559f5abf030f00d0ebfa4d1b9.woff2Ҹà c3ee94f4f2321d8798cad64af7371e5eüÚ"âôìõìöì÷ìùìúìÿì€íƒí…í‰íŠíŒí�í�í�í’í”í•í—í˜í›íœí�ížíŸí í¡í¢í£í¥í¦í§í¨í©íªí«í¬í­í¯í³íµí¶í·í¹í»í¼í½í¾íÀíÁíÃíÄíÇíÉíËíÌíÓíÕíÙíÚíÝíàíâíæíèíéíêíëíìíííðíóíõíöí÷íúíûíýíÿí€î‚îƒî…î†îŠîŒîŽî�î�î‘î’î“î”î•î–î—î˜î›îœî�îžî¡î£î¤î§îªî«î¬î®î°î±î²î³î´î¹î»î½î(2&c3ee94f4f2321d8798cad64af7371e5e.woff2Ò¸Ä 76a2df9c284d898d40347168939fa644ø�"â¾î¿îÂîÄîÅîÆîÈîÉîÊîËîÌîÍîÎîÏîÒîÓîÔîÕîÖî×îØîÙîÝîßîàîäîçîéîêîíîîîïîðîñîòîóîôîõîöî÷îøîúîûîüî�ï‚ïƒï†ï‡ïˆï‰ïŠï‹ï�ï�ï“ï”ï•ï–ï—ï™ïšï›ïœï�ï¡ï£ï¤ï¦ï¨ï«ï­ï®ï¯ï±ï²ï´ï¶ï·ï¸ï¹ïºï¾ïÀïÁïÂïÃïÄïÅïÆïÇïÈïÉïÊïËïÌïÎïÏïÐïÑïÒïÓïÔïÕïÖïØïÙïÝïÞïßïàïáïäïæïèïêïðïñï(2&76a2df9c284d898d40347168939fa644.woff2һŠ1a984dfaa0c7ab923b4e9a1b1cff0856ü¿"åòïôïõï÷ïùïúïûïüïƒð„ð…ð†ð‡ðˆðŠð‹ðŽð�ð�ð“ð•ð™ð›ðžð ð¡ð¢ð¤ð¨ðªð«ð®ð¯ð±ð²ð³ðµð¶ð½ð¿ðÁðÂðÃðÄðÆðÈðÉðÊðËðÍðÏðÑðÓðÔðØðÙðÚðÛðÜðÞðßðàðáðâðãðåðæðçðéðððñðòðóðôðõðöðøðùðúðûðýðþðÿð€ñ�ñ‚ñƒñ„ñ…ñ†ñˆñŠñ‹ñ�ñ�ñ’ñ”ñ•ñ–ñ™ñ�ñžñ ñ¢ñ¤ñ¦ñ¨ñªñ«ñ¬ñ®ñ¯ñµñ¶ñ·ñ»ñ½ñ¿ñÀñ(2&1a984dfaa0c7ab923b4e9a1b1cff0856.woff2Ò»Æ 2b55cbe47724c78e657923dfb3390cbcÜ "åÂñÃñÄñÆñÇñÈñÌñÍñÎñÏñÑñÒñÓñÖñ×ñØñÛñÜñÝñÞñßñàñáñâñäñåñæñéñêñëñíñîñðñññóñõñöñøñùñûñüñþñÿñ€ò‚òƒò„ò‡òˆò‰òŠò‹òŒò�ò�ò�ò‘ò’ò”ò•ò–ò—ò˜òšò›òœò�òŸò ò¡ò¢ò£ò¥ò§ò¨ò©ò­ò®ò¯ò°ò²ò³òµò¶ò·ò¸ò¹ò½ò¿òÂòÃòÄòÅòÇòÊòËòÌòÍòÎòÏòÐòÑòÒòÔòØòÙòáòãòäòæòéòêòëòìòîòðòñòòòóò(2&2b55cbe47724c78e657923dfb3390cbc.woff2Ò¾Ç 88ce7912d2f85d7088083285d666fe36À÷"èôòõòöòùòûòüòýòþò‚óƒó†ó‡óˆó‰ó‹óŒó�ó‘ó’ó“ó”ó•ó–ó—ó˜ó™ó›óœó�óžóŸó ó¡ó¢ó£ó¤ó¥ó¦ó¨ó©ó«ó¬ó­ó¯ó²ó´óµó¶ó·ó¸ó¼óÂóÄóÅóÇóÊóÌóÎóÏóÐóÓóÔóÖó×óÙóÚóÛóÜóÝóÞóàóáóâóåóèóêóìóîóñóòóóóôóõóöó÷óùóúóüóþóÿó�ô„ô‡ô‰ôŠôŒô�ô�ô‘ô’ô“ô•ô–ô˜ô™ô›ôœô�ô¡ô¢ô¤ô¥ô¦ô§ô¨ô©ôªô«ô¬ô­ô(2&88ce7912d2f85d7088083285d666fe36.woff2Ò¾È 2b213022d7ec30fb36e467132037044bÌ·"è¯ô°ô²ô´ôµô¶ô¸ôºô¾ôÀôÁôÂôÃôÄôÅôÇôÈôÉôÊôËôÏôÐôÒôÓôÔôÕôÖôØôÙôÚôÛôÜôÝôÞôßôàôãôäôåôæôçôèôêôëôìôîôïôñôòôóôõôûôüôýôþô‚õ…õ‡õ‰õŠõ‹õŒõŽõ�õ�õ“õ”õ™õšõ›õžõ¡õ¢õ£õ¤õ§õ«õ°õ±õ²õ´õµõ·õ¸õ¹õ»õ¼õ½õ¾õÀõÁõÂõÃõÆõÉõÌõÍõÎõÏõÐõÑõÒõÓõÔõÕõ×õØõÚõÛõÜõÝõáõâõäõçõèõéõêõëõìõ(2&2b213022d7ec30fb36e467132037044b.woff2ÒÁÉ 7bf97388c9701476a5266dd975bb9a48¼Š"ëîõðõñõòõóõôõõõ÷õøõûõüõþõ€ö�ö‚ö…ö‡ö‰öŒö�öŽö�ö’ö“ö–ö—ö˜öšöœö�öŸö¡ö¢ö£ö§ö©ö­ö¯ö°ö²ö´öµö¶ö·ö¹ö»ö½ö¿öÀöÁöÂöÃöÄöÈöÊöÎöÓöÕö×öÙöÜöÞößöáöãöäöåöæöèöéöêöëöìöíöïöðöóöôöööøöúöüöýöÿö�÷‚÷ƒ÷„÷†÷‡÷ˆ÷‰÷Š÷Œ÷Ž÷‘÷’÷“÷–÷˜÷™÷š÷›÷ž÷Ÿ÷ ÷£÷¤÷¥÷®÷¯÷°÷²÷³÷µ÷¶÷·÷¹÷º÷»÷¼÷(2&7bf97388c9701476a5266dd975bb9a48.woff2ÒÁÊ a9714bd5ccfe4580a4ac6bd0ee5a3b68˜ê"ë½÷¾÷¿÷Â÷Ã÷Å÷È÷Ê÷Í÷Î÷Ï÷Ð÷Ò÷Ô÷Õ÷Ö÷×÷Ø÷Û÷Ü÷Þ÷ß÷à÷â÷ã÷ç÷è÷ë÷ì÷í÷ï÷ð÷ò÷ô÷õ÷ö÷ø÷ù÷ú÷û÷ý÷ÿ÷�ø‚øƒø„ø…ø†øˆø‰øŠøŽø�ø‘ø’ø“ø”ø•ø—ø˜ø™øšø›øœø�ø ø¢ø¤ø¥ø¨ø©ø¬ø­ø®ø¯ø°ø±ø²ø³ø´øµø¶ø·ø¹øºø»ø¼ø½øÂøÄøÅøÆøÇøÈøÉøÊøËøÎøÏøÐøÑøÒøÓøÔøÕøÖø×øØøÙøÚøÛøÝøÞøáøâøãøåøæøçøèøëø(2&a9714bd5ccfe4580a4ac6bd0ee5a3b68.woff2ÒÄË 2870a2e2db969583bc5a852bea30f659¨Ÿ"îíøïøðøñøõøöø÷øøøùøúøþøÿø€ù�ù‚ùƒù„ù…ù†ù‡ùˆùŠù‹ùŒù�ùŽù�ù�ù“ù”ù–ù™ùšù›ù ù¡ù£ù¦ù§ù¨ù©ù«ù¬ù­ù¯ù°ù´ù¶ù·ù¸ùºù»ù¿ùÀùÂùÃùÄùÆùËùÎùÏùÐùÑùÒùÓùÔùØùÚùÛùáùâùãùäùåùæùéùêùëùìùíùîùðùñùóùõù÷ùúùüùýùÿù�úƒúŒúŽú�ú‘ú’ú–ú˜ú�úžúŸú£ú¤ú¥ú¦ú¨ú©úªú¬ú­ú®ú´úµú¶ú·ú¸ú»ú½ú¾úÁúÃú(2&2870a2e2db969583bc5a852bea30f659.woff2ÒÄÌ c0fcbfbc865336c21e3bcde140532549Üä"îÅúÇúÈúÉúÊúËúÌúÍúÏúÑúÒúÓúÔúÖú×úØúÙúÚúÜúßúàúãúäúåúçúéúêúëúìúíúïúðúôúõúöúøúúúûúüúýúþúÿú€û‚û„û…û‡û‰ûŠû‹ûŒû�ûŽû�û‘û’û”û•û–û—û˜û™ûšû›û�ûŸû¡û¤û¥û§û¨û©ûªû«û¯û³ûµû¶û·û¼ûÀûÁûÂûÃûÅûÆûÈûÉûÌûÍûÎûÏûÐûÑûÓûÔûÕûÖûÛûÜûßûâûäûåûçûêûëûíûîûðûóûõû÷ûøûúûûûüûýûþûÿû€ü�ü(2&c0fcbfbc865336c21e3bcde140532549.woff2ÒÇÍ c9998b777f0ff25f5dc8eec44f259f8eø¿"ñ‚üƒü„ü…ü†ü‡üŒü�üŽü�ü’ü“ü”ü•ü–ü—ü˜ü™üšüœü ü¡ü¢ü¤ü¥ü¦ü§ü¨ü©üªü¬ü¯ü°ü³ü´ü¸üºü¼ü¿üÀüÂüÄüÈüÉüÊüËüÌüÍüÎüÏüÐüÑüÓüÖü×üØüÙüÛüÜüÝüßüàüãüäüåüæüçüèüëüìüñüòüôüõüöü÷üøüúüûüÿü€ý�ýƒý„ý…ý†ý‡ý‰ý‹ý�ýŽý�ý‘ý’ý”ý•ý—ý™ýšý�ýžý®ý´ý»ý¼ýÖýäýìýùýŠþ�þžþ·þ¹þ»þ¼þ½þ¾þ¿þÀþÁþÃþÆþ(2&c9998b777f0ff25f5dc8eec44f259f8e.woff2ÒÇÎ 40b52a7bb96d11446caddf09e9a1793a„«"ñÇþÈþÉþÊþËþÍþÎþÏþÒþÓþÖþÙþÛþÜþÝþÞþàþãþäþåþæþçþëþìþíþïþóþöþøþúþûþüþýþÿþ€ÿ‚ÿƒÿ„ÿ‡ÿ‰ÿ�ÿ�ÿ�ÿ‘ÿ’ÿ“ÿ•ÿ–ÿ—ÿ˜ÿ™ÿ›ÿœÿ ÿ¢ÿ¦ÿªÿ«ÿ¬ÿ­ÿ®ÿ±ÿ³ÿ´ÿµÿ·ÿºÿ»ÿ¾ÿÀÿÂÿÃÿÄÿÆÿÇÿÈÿÉÿËÿÍÿÏÿÐÿÑÿÓÿÖÿ×ÿÙÿÚÿÛÿÜÿÝÿÞÿâÿãÿäÿçÿèÿêÿëÿìÿíÿïÿòÿôÿõÿöÿ÷ÿøÿúÿýÿþÿÿÿ‚€‡€ˆ€‰€Š€Ž€�€‘€“€š€›€�€(2&40b52a7bb96d11446caddf09e9a1793a.woff2ÒÊÏ e57a912ee13d598bfb2883b8755a6de6¸ý"ôž€Ÿ€¡€£€¤€«€­€¯€°€²€´€¹€º€¼€¾€À€Á€Ä€Å€Ç€È€É€΀Ï€ЀрӀՀ׀ـۀ܀݀߀à€á€â€ã€ä€å€æ€ç€è€ë€ì€í€î€ô€ø€ú€û€ü€��‚�ˆ�Š���Ž�����‘�’�”�•�—�™�ž�£�¦�§�¨�¬�°�³�µ�¶�¸�¹�»�Å�Ç�È�É�Ê�Ë�Ï�Ð�Ñ�Ò�Ó�Ô�Õ�Ø�ß�à�â�ã�æ�î�õ�÷�ù�û�þ�ÿ�€‚�‚ƒ‚„‚‡‚‹‚Œ‚•‚—‚™‚œ‚�‚Ÿ‚ ‚¡‚¢‚¤‚¥‚¦‚(2&e57a912ee13d598bfb2883b8755a6de6.woff2ÒÊÐ 6f601f95d01a12d27fc47a5a7ab5bcaaغ"ô§‚¨‚©‚ª‚­‚®‚°‚³‚´‚µ‚·‚º‚»‚¼‚½‚¿‚À‚Á‚‚ÂĂłǂɂ͂ς҂ׂ؂ۂ܂݂ނ߂â‚ã‚ä‚è‚ê‚ì‚ï‚ò‚õ‚ö‚÷‚�ƒ„ƒ…ƒ†ƒ‡ƒ‰ƒ‹ƒŒƒ�ƒŽƒ�ƒ’ƒ“ƒ”ƒ•ƒ–ƒ—ƒ™ƒžƒŸƒ¡ƒ¢ƒ¤ƒ¥ƒ§ƒ«ƒ¬ƒ­ƒ®ƒ¯ƒ°ƒ±ƒ²ƒ´ƒµƒ¶ƒ·ƒ¸ƒ¹ƒ¼ƒăŃǃȃ˃΃ЃуÒƒÓƒÔƒÕƒÖƒ׃ÙƒÛƒ܃݃Þƒ߃áƒâƒäƒæƒéƒëƒîƒïƒðƒñƒòƒõƒöƒ÷ƒøƒùƒýƒÿƒƒ„(2&6f601f95d01a12d27fc47a5a7ab5bcaa.woff2ÒÍÑ ba439de345bc64582f8560f3363cffa7ô÷"÷‹„Ž„�„‘„“„•„–„—„˜„™„š„�„ „¤„¥„¦„§„©„®„²„º„¼„½„¿„À„Á„„ÄńƄȄʄ̄̈́΄ЄÑ„Ò„Ó„Ô„Õ„Ö„ׄۄ܄݄ބà„á„â„ã„å„ç„é„ê„ì„í„õ„ö„÷„ø„û„ü„€…�…ƒ………†…‡…‰…Œ…�…“…”…•…–…š…›…ž… …¢…£…§…²…µ…¶…º…¼…¿…À…Â…Ã…Å…Æ…É…Ð…Ö…Ù…Ú…Ý…â…è…é…ê…ì…í…î…ð…ò…ó…õ…ö…ø…ú…ü…ý…þ…ÿ…€†І‹†�†�†’†“†(2&ba439de345bc64582f8560f3363cffa7.woff2ÒÍÒ b148a1ee427107bf9fa5339a1abace47 Ú"÷–†˜†™†�†ž†Ÿ† †¡†¢†£†¤†¥†¦†©†ª†®†°†·†»†½†¾†¿†Á††ĆņȆˆ̆͆ΆÓ†Õ†Ö†׆؆Ù†݆â†ð†ñ†ò†ó†ô†õ†ö†ù†ú†þ†ÿ†€‡�‡‚‡ƒ‡„‡‡‡ˆ‡‹‡Œ‡�‡�‡�‡‘‡”‡•‡—‡™‡š‡�‡Ÿ‡¡‡£‡¤‡¥‡¦‡¬‡­‡®‡¯‡µ‡»‡¾‡¿‡‡ÇćƇȇɇˇ͇·ЇчÒ‡Ó‡Õ‡ׇÙ‡Ú‡Û‡Þ‡â‡ã‡ä‡æ‡ç‡è‡ë‡ì‡í‡î‡ó‡ô‡õ‡ö‡÷‡ú‡û‡ü‡þ‡ÿ‡€ˆ‚ˆ…ˆ(2&b148a1ee427107bf9fa5339a1abace47.woff2ÒÐÓ 6ea7acb90a8d87b7ff1ad0c3112e3838À�"úˆˆ‰ˆ�ˆ’ˆ“ˆ”ˆ•ˆ–ˆ—ˆ™ˆšˆ›ˆžˆŸˆ ˆ¡ˆ¢ˆ£ˆ©ˆªˆ«ˆ­ˆ®ˆ¯ˆ°ˆ²ˆ³ˆ´ˆ¶ˆ·ˆ¹ˆºˆ»ˆ¾ˆ¿ˆÀˆÁˆˆÈĈňLjȈʈˈ͈̈ΈψЈÓˆÔˆÕˆÖˆ؈݈Þˆ߈àˆâˆåˆçˆèˆêˆîˆïˆðˆòˆôˆùˆûˆüˆýˆþˆÿˆ€‰�‰ƒ‰„‰…‰†‰Љ�‰�‰�‰‘‰’‰“‰•‰–‰˜‰š‰›‰�‰Ÿ‰ ‰¢‰£‰¤‰¥‰¦‰§‰¨‰©‰ª‰«‰¬‰­‰®‰°‰±‰³‰µ‰¶‰·‰»‰¾‰‰ÉʼnƉljȉ̉Ήω(2&6ea7acb90a8d87b7ff1ad0c3112e3838.woff2ÒÐÔ fbac96c2b9a53a2faa7b9a13d337d33aàÉ"úÒ‰Ô‰Õ‰׉؉Ù‰Ú‰Û‰܉Þ‰á‰â‰ä‰ç‰è‰é‰ê‰ë‰í‰ñ‰ò‰ó‰õ‰ö‰÷‰ø‰ù‰ú‰û‰þ‰€Š�Š‚ŠƒŠ„Š…Š†Š‡ŠˆŠ‰ŠŠŠ‹Š�ŠŽŠ�Š�Š’Š”Š•Š–Š˜Š™Š›ŠœŠ�Š Š¢Š¤Š§Š¨Š©ŠªŠ®Š¯Š°Š±Š²Š³Š´ŠµŠ¶Š¾Š¿ŠÀŠŠÄŠÅŠÇŠËŠÌŠÍŠÏŠЊÑŠÓŠÔŠ׊ÚŠÛŠÜŠÝŠߊàŠáŠãŠåŠæŠçŠëŠìŠîŠïŠðŠñŠóŠõŠöŠøŠüŠýŠÿŠ€‹�‹‚‹ƒ‹†‹‰‹‹‹�‹Ž‹�‹‘‹’‹“‹•‹–‹(2&fbac96c2b9a53a2faa7b9a13d337d33a.woff2ÒÐÕ fbde197ff6ac27e027a89459a02100c4¨’"ú—‹˜‹™‹š‹�‹ž‹ ‹¡‹¢‹£‹¥‹§‹«‹¬‹­‹±‹²‹³‹´‹µ‹¶‹¸‹»‹¼‹½‹¾‹¿‹À‹‹ËċŋƋNjȋʋˋ̋ыҋԋ֋׋؋ًڋۋދߋà‹á‹â‹ã‹æ‹ç‹è‹ë‹ì‹í‹î‹ï‹ð‹ñ‹ò‹ó‹ô‹õ‹÷‹ø‹ü‹ý‹þ‹€Œ�Œ‚ŒƒŒˆŒ‰ŒŒŒ�ŒŽŒ�Œ�Œ’Œ“Œ”Œ•Œ—Œ˜Œ™Œ›ŒœŒ�ŒŸŒ Œ¡Œ£Œ¤Œ¥Œ¦Œ¨ŒªŒ«Œ¬Œ®Œ¯Œ°Œ±Œ²Œ³Œ´ŒµŒ¶Œ·Œ¹Œ»Œ½Œ¾ŒÀŒÁŒÂŒÃŒÄŒÅŒÆŒÇŒ(2&fbde197ff6ac27e027a89459a02100c4.woff2ÒÓÖ 2af87fa7cc2da7a655fa1bb708c73ebe˜¥"ýȌɌʌˌ̌Ҍӌ֌׌،ٌ݌àŒáŒãŒäŒåŒæŒèŒéŒêŒíŒðŒòŒóŒôŒõŒöŒ÷ŒøŒƒ�„�…�†�‡�ˆ�‰�Ž�����‘�’�”�–�—�˜�™�š�›�ž�Ÿ� �¡�¢�¥�¦�«�­�®�²�³�·�¸�¹�»�¼�½�¾�¿�Á�Â�Ã�Å�È�Ì�Í�Ò�Ó�Õ�Ö�×�Ú�Ü�Ý�à�á�â�ã�å�æ�ç�è�ê�ë�ì�ï�õ�ö�÷�ü�ý�ÿ��Ž„Ž…Ž‹ŽŒŽŽŽ�Ž�ޑޔޖޙޛŽ�ŽŸŽ Ž¤Ž¦Ž§Ž¨ŽªŽ«Ž¬Ž­Ž¯Ž(2&2af87fa7cc2da7a655fa1bb708c73ebe.woff2ÒÓ× ba970ca4b5a4a9f045d3d4520d0a95a8èâ"ý°Ž²Ž³ŽµŽ¶Ž¸Ž¹ŽºŽ¼Ž½ŽÀŽÁŽÂŽÃŽÄŽÅŽÆŽÊŽËŽÍŽÏŽÐŽÑŽÒŽÔŽÖŽØŽÚŽÛŽÜŽÝŽÞŽáŽâŽçŽéŽêŽëŽìŽíŽïŽñŽòŽóŽõŽ÷ŽùŽúŽÿŽ€���†�‡�‰�Š�Œ�Ž�����‘�’�”�•�–�˜�™�š�›�œ��� �¡�£�¤�¥�¦�§�©�ª�®�°�±�²�´�¶�·�¸�¹�¼�¾�¿�Á�Â�Ã�Å�Ç�É�Ì�Í�Ï�Ð�Ô�Õ�Ö�×�Ø�Ù�Ú�Ü�Ý�Þ�ß�á�â�ä�æ�ç�è�é�ë�í�ð�ñ�ó�ô�õ�÷�(2&ba970ca4b5a4a9f045d3d4520d0a95a8.woff2ÒÖØ d64fb4d87198450bdff12a83ab6e1285ìÐ"€ø�ú�ü�ý�ÿ�€���‚�„�‡�ˆ�‰�‹�Œ�Ž���’�—�˜�™�š�œ���ž� �¤�¥�¦�§�¨�©�ª�«�¬�­�®�¯�°�³�´�µ�·�¸�º�½�¾�¿�Á�Â�Ã�Ç�È�É�Ê�Ë�Î�Ï�Ð�Ñ�Ò�Õ�Ö�Ø�Ú�Ü�Þ�ß�à�æ�ç�ê�í�ï�ñ�ó�ô�õ�ö�ø�ù�ú�û�ü�€‘ƒ‘†‘‡‘‰‘Š‘Œ‘Ž‘�‘�‘‘‘“‘”‘•‘—‘˜‘™‘š‘›‘�‘Ÿ‘ ‘¡‘£‘¥‘¦‘§‘¨‘©‘ª‘¬‘®‘¯‘°‘²‘³‘´‘µ‘¶‘¸‘¹‘º‘»‘½‘¾‘(2&d64fb4d87198450bdff12a83ab6e1285.woff2ÒÖÙ 00f60007d29d6368a1f30960608f5f1b˜å"€¿‘À‘ÑđǑȑʑˑ̑͑Бёӑ֑בÚ‘Û‘Þ‘à‘á‘æ‘ç‘é‘ê‘ë‘ì‘í‘î‘ï‘ò‘õ‘ö‘÷‘ú‘û‘ý‘ÿ‘€’�’ƒ’„’…’†’‡’ˆ’‰’‹’Œ’�’Ž’�’‘’”’•’–’—’˜’œ’�’ž’Ÿ’ ’¢’£’¤’¦’§’¨’©’¬’­’®’¯’±’µ’·’¹’º’¼’½’¾’¿’À’’ÒŒƒǒȒʒ˒̒͒ΒϒВђҒӒԒՒגْؒڒےܒá’â’ã’å’ç’è’é’ë’ì’í’î’ð’ñ’ó’ô’õ’ö’÷’ø’ù’ú’(2&00f60007d29d6368a1f30960608f5f1b.woff2ÒÙÚ 624e50d75694e5197f228894ed92b1a1¬®"ƒü’ý’þ’€“‚“„“…“‡“ˆ“‰“Š“Œ“�“Ž“�“‘“’“”“•“—“™“š“›“œ“�“ž“Ÿ“ “¢“£“¤“¥“§“¨“©“«“­“®“°“±“³“´“µ“¶“¸“¹“»“¼“¾“Ó͓ӓԓՓדؓٓۓݓߓà“á“â“ä“ç“è“é“ê“ì“í“î“ð“ñ“ò“õ“÷“ù“ú“û“ü“ý“þ“ÿ“„”…”†”‰”‹”�”�”‘”’”””™”š”œ”ž” ”¡”¢”¤”¦”§”¨”©”«”¬”®”¯”°”²”³”µ”·”¸”¹”»”¼”½”¿”À””ÔĔŔǔɔʔ˔(2&624e50d75694e5197f228894ed92b1a1.woff2ÒÙÛ e724dbf14a0dbe058f8ffaeb2d4dc149øž"ƒÌ”͔ϔєӔ֔הٔڔܔݔߔä”å”ç”è”ê”ï”ô”ö”÷”ø”ú”û”ý”þ”€•�•‚•ƒ•ˆ•‹•Œ•Ž•�•�•”•–•—•™•›•œ•�•Ÿ•¢•§•©•«•¬•­•®•¯•±•³•´•µ•·•¸•º•»•½•¾•À•Á•Õŕƕȕʕ̕ΕЕӕԕՕٕؕڕݕߕà•ã•å•è•é•ê•ì•ï•ð•ò•ô•õ•ù•û•ý•ÿ•ƒ–†–ˆ–‰–‹–Œ–�–�–‘–’–“–•–˜–š–œ–ž–Ÿ–¡–¢–£–¤–¥–§–©–ª–­–®–¯–°–±–²–´–µ–(2&e724dbf14a0dbe058f8ffaeb2d4dc149.woff2ÒÜÜ 31a507c2ef3971b49519260e3910db8cüŒ"†¶–·–¸–º–»–¼–½–¿–À––ÖÄ–Å–Æ–Ç–È–Ê–Ë–Ì–Í–ЖÑ–Ò–Ó–Ô–Õ–×–Û–Ý–Þ–ß–à–á–â–ã–ä–å–ç–è–é–ê–í–î–ñ–ò–ó–õ–ö–ø–ù–ú–û–ü–ÿ–�—‚—ƒ—„—…—†—‡—ˆ—‰—‹—Œ—�—�—�—‘—”———˜—™—š—›—�—Ÿ—¬—±—»—Ç—Зê—‰˜ž˜¸˜¹˜º˜»˜¼˜½˜¾˜¿˜À˜˜ØĘŘʘ˘͘ϘјÒ˜Ó˜Ö˜טؘÙ˜Û˜ܘݘÞ˜ߘà˜ã˜ä˜å˜æ˜ç˜è˜é˜í˜î˜ï˜ð˜ñ˜ò˜ô˜õ˜(2&31a507c2ef3971b49519260e3910db8c.woff2ÒÜÝ 5e416d8880bd460ed59aded9450a1988¬º"†ö˜÷˜û˜ü˜ý˜þ˜ÿ˜€™�™ƒ™„™†™‡™ˆ™‹™�™Ž™�™�™‘™’™•™–™—™™™š™›™œ™Ÿ™£™¤™¥™¦™­™®™±™µ™¹™¾™Æ™É™Ë™Ì™Í™ΙÏ™Йԙ֙יؙٙۙݙߙå™è™é™ë™î™ï™ð™ñ™ò™ó™õ™ö™÷™ø™ù™ÿ™€š�š‚šƒš†š‡š‰š‹šŒšŽš‘š’š”š•š˜š™šššœš šÑšÒšךßšåšèšéšêšìšîšïšñšòšøšùšúšûšüšýšþšÿš€›‚›ƒ›†›‡›ˆ›‰›Œ›�›Ž›�›�›’›“›–›—›˜›š›››(2&5e416d8880bd460ed59aded9450a1988.woff2ÒÜÞ 53c7132cb0e13d9d5d4dfcfb22551820¬£"†œ›�›ž› ›¡›¢›¤›¥›¦›§›©›ª›«›¬›­›®›¯›°›¶›·›¹›»›½›À›Á››Å›Ç›È›É›Ê›Í›Лқӛԛ՛؛ٛܛà›â›å›æ›ç›é›í›î›ð›ñ›ò›ô›ö›ü›þ›ÿ›€œ�œ‚œƒœ„œ†œ‡œˆœ‹œ�œŽœ‘œ’œ“œ•œ–œ—œ˜œ™œšœ›œœœ œ¡œ¤œ¥œ¦œ§œ¨œ«œ­œ°œ²œ³œ´œ¶œ·œ¸œ»œ¼œ¾œ¿œÜŜƜ͜ΜÏœМӜԜ֜ל؜ڜۜܜݜޜߜáœâœåœçœèœêœëœîœñœóœõœ÷œøœùœ(2&53c7132cb0e13d9d5d4dfcfb22551820.woff2Òßß cc532cd3c760b1aaeb15f52712257d6bèÁ"‰ûœýœþœ€�‚�ƒ�„�†�ˆ�Œ�Ž�–�—�˜�™�›���Ÿ� �¢�£�¤�§�¨�©�­�®�°�±�³�´�µ�¶�·�¸�¹�»�¼�½�¾�¿�Á�Â�Ã�Ä�Å�Æ�Ç�È�É�Ï�Ð�Ñ�Ó�Õ�Ö�×�Ø�Ù�Ú�Ü�Ý�Þ�à�á�â�ã�å�æ�ç�è�é�ê�ì�í�î�ï�ð�ñ�ó�ô�õ�ö�÷�ý�ÿ�€ž�ž‚ž„ž†žˆž‹žŒž�žŽž�ž�ž‘ž“ž–ž—ž˜ž™žšž ž¡ž¢ž£ž¤ž§ž¨ž«ž¬ž­ž®ž°ž±ž²ž´žµž¶ž·ž¹žºž¼ž½žÀžÁžÞÇž(2&cc532cd3c760b1aaeb15f52712257d6b.woff2Òßà 4a533c220ce820bb6a6cecc347d3e2e4 “"‰ÈžÊžËžÌžÏžОÑžÒžÓžÕžÖžמ؞ٞڞ۞ܞݞޞàžãžåžêž€ŸŒŸ’Ÿ�Ÿ Ÿ¡Ÿ¢Ÿ¤Ÿ¥Ÿ§ŸªŸ¬Ÿ³Ÿ´ŸµŸ·Ÿ¸ŸºŸ»Ÿ¼Ÿ¿ŸÀŸßÆŸÉŸÊŸËŸÌŸÍŸÏŸÒŸÖŸןÚŸàŸáŸãŸçŸìŸïŸñŸòŸôŸõŸöŸúŸûŸüŸþŸÿŸ‡ ˆ Œ Ž “ ˜ œ ¤ ¥ § ¨ © ª « ¬ ° ± ³ ´ · ¹ º ½ ¿ À àÅ Æ È É Ì Ö Ú Ý ß á ä æ ç ê ë ì ï ð ñ ó ö ù û þ …¡†¡‰¡Œ¡�¡Ž¡’¡”¡(2&4a533c220ce820bb6a6cecc347d3e2e4.woff2Òâá eab90c6f727501c5c13285ba67c30ca6ä²"Œ–¡˜¡š¡œ¡ž¡Ÿ¡ ¡¤¡¥¡§¡¨¡©¡«¡­¡²¡·¡¼¡½¡¿¡À¡¡áơȡɡˡ̡͡ҡԡա֡ء١ڡޡà¡ã¡ä¡å¡é¡ê¡ì¡î¡ð¡ñ¡ò¡ó¡ö¡÷¡ù¡ú¡û¡ü¡ÿ¡€¢�¢ƒ¢…¢‡¢ˆ¢Š¢‹¢Œ¢�¢Ž¢�¢�¢‘¢“¢•¢—¢˜¢š¢›¢œ¢�¢Ÿ¢ ¢¡¢¤¢¥¢¦¢¨¢©¢ª¢«¢¬¢®¢³¢µ¢·¢¸¢»¢¼¢½¢¾¢¿¢À¢Á¢¢Ä¢Å¢Ç¢Ñ¢Ó¢Ô¢Õ¢Ö¢Ø¢Ù¢Û¢Ü¢ߢà¢æ¢ç¢è¢ë¢í¢ó¢ú¢û¢ü¢€£�£‚£„£†£ˆ£Š£Ž£(2&eab90c6f727501c5c13285ba67c30ca6.woff2Òââ fbecc23dd4c048e879ceeda9bde72d95Ìž"Œ�£“£”£•£–£—£˜£™£�£Ÿ£ £¡£¤£¥£¦£§£¨£©£°£±£²£³£¶£·£¸£¹£»£¼£½£¾£¿££Ä£Æ£È£Ö£Ú£Û£Þ£ߣà£á£â£å£æ£è£ê£ë£ì£í£î£ï£ð£ñ£ò£ó£ô£ö£ø£û£ü£ý£þ£ÿ£‚¤ƒ¤…¤†¤‡¤Ф‹¤Œ¤ޤ�¤’¤“¤–¤—¤˜¤™¤š¤›¤œ¤�¤Ÿ¤ ¤¡¤¢¤¤¤¨¤©¤ª¤«¤¬¤­¤¯¤±¤²¤µ¤¶¤»¤¼¤Á¤¤äĤƤǤʤˤ̤ΤϤФÒ¤Ó¤Ô¤Ö¤ؤÙ¤ܤݤߤà¤á¤ã¤å¤ç¤è¤é¤ê¤ë¤(2&fbecc23dd4c048e879ceeda9bde72d95.woff2Òåã ecc3a96b08f4505e87c10b3b0ad84174ôÈ"�î¤ï¤ð¤ñ¤ò¤ó¤õ¤ö¤÷¤ù¤ü¤ý¤þ¤�¥‚¥„¥†¥‡¥ˆ¥‰¥Š¥‹¥Œ¥�¥�¥�¥’¥”¥•¥—¥™¥›¥�¥ž¥Ÿ¥¡¥¢¥¤¥§¥­¥¯¥°¥²¥´¥µ¥¶¥¸¥¹¥º¥½¥¾¥¿¥À¥Â¥Ä¥Æ¥É¥Ê¥Ë¥Í¥Î¥Ð¥Ñ¥Ó¥Ô¥Õ¥Ö¥×¥Ø¥Ù¥Ú¥Û¥Ü¥Þ¥à¥á¥â¥ç¥é¥ë¥ì¥í¥ò¥ó¥ô¥õ¥÷¥ù¥ú¥û¥ý¥þ¥ÿ¥€¦‚¦ƒ¦…¦‰¦Ц‹¦Œ¦�¦ަ�¦‘¦“¦”¦–¦—¦œ¦�¦ž¦¡¦£¦¤¦¥¦§¦©¦ª¦¬¦­¦°¦±¦²¦´¦µ¦¶¦·¦¹¦º¦»¦¼¦½¦(2&ecc3a96b08f4505e87c10b3b0ad84174.woff2Òåä 047b7f549e219ed01e0eed27c6cb4fb0ô™"�¿¦¦ĦŦȦɦʦ̦ΦϦЦѦÒ¦Ó¦Õ¦Ö¦צÙ¦Ú¦ܦݦÞ¦ߦà¦á¦â¦ã¦æ¦ç¦è¦ë¦í¦î¦ï¦ñ¦ò¦ó¦ô¦÷¦ø¦ù¦û¦ü¦ý¦ÿ¦€§�§ƒ§…§†§ˆ§‰§‹§Œ§�§ާ�§‘§’§“§”§•§—§™§š§›§œ§�§ž§Ÿ§ §¡§¤§¥§¨§«§­§¯§±§²§´§¶§·§¸§¹§º§»§¼§½§¾§À§Á§§ħŧƧɧ˧ΧϧЧÒ§Ó§Ô§Õ§Ù§Ú§Û§à§ã§å§æ§ç§é§ê§ë§ì§í§î§ï§ð§ñ§ò§ó§ô§ö§ø§ú§û§ü§þ§ÿ§€¨(2&047b7f549e219ed01e0eed27c6cb4fb0.woff2Òåå 7583406177e3f57c555ac5cc95344b7fðÄ"��¨‚¨„¨…¨†¨‡¨ˆ¨‰¨ЍŒ¨�¨ލ�¨‘¨•¨–¨—¨˜¨š¨›¨œ¨�¨ž¨Ÿ¨¡¨¢¨£¨¤¨¥¨©¨ª¨¬¨­¨¯¨°¨±¨´¨¶¨·¨¹¨»¨¼¨½¨À¨Á¨¨èŨƨǨȨɨ˨ͨΨϨШÒ¨Ó¨Õ¨Ö¨רبÙ¨Ú¨Û¨ܨݨÞ¨ߨá¨â¨ä¨æ¨ç¨è¨é¨ê¨ì¨î¨ï¨ñ¨ó¨ô¨õ¨ö¨ø¨ú¨û¨€©‚©ƒ©„©‘©–©˜©Ç©Ï©Ó©Ô©Ú©æ©û©œª ª§ª³ª½ªêȪ˪ÕªÚªàªîªôªõªøªùªúªûªüªýªþª�«„«…«‡«ˆ«Š«�«�«‘«(2&7583406177e3f57c555ac5cc95344b7f.woff2Òèæ 41a425a04efc019ce9a3305a416142d4üŒ"’•«–«—«™«š«›«œ«�«ž«Ÿ« «¢«¤«¦«§«ª«®«¯«°«²«³«´«µ«·«¸«º«À«Á««Ä«Å«Æ«Ç«É«Í«Ϋϫѫҫӫ׫ث٫ګ۫ݫ߫à«ã«ä«æ«ç«ì«ÿ«‡¬“¬˜¬›¬ž¬ ¬£¬¤¬¥¬¦¬§¬¨¬©¬«¬¬¬­¬¯¬°¬·¬¸¬¹¬º¬¾¬Á¬ìʬάϬѬÒ¬Ó¬Ö¬׬Ù¬Ú¬ܬÞ¬à¬å¬æ¬ë¬í¬î¬ï¬ñ¬ù¬ú¬û¬ü¬þ¬ÿ¬€­�­‚­ƒ­„­‡­Œ­‘­’­“­–­š­�­ž­Ÿ­ ­¡­¢­£­¤­¥­¦­©­«­¬­­­®­¯­²­(2&41a425a04efc019ce9a3305a416142d4.woff2Òèç 96193c323465f076999a371b135decb1üâ"’µ­·­º­»­¿­­íÈ­Ê­ЭÑ­Ó­Ô­×­Ø­Ú­Ý­ß­á­ä­å­æ­ç­ë­ì­í­î­ð­ñ­ô­õ­ø­ú­ü­ý­ÿ­‚®ƒ®…®Š®‹®Œ®�®‘®’®”®•®—®˜®™®š®›®�®Ÿ® ®¡®¢®£®¤®¥®¦®¨®©®«®¬®®®¯®±®³®´®µ®¶®·®º®»®¼®¿®À®Á®îŮƮǮɮʮˮ̮ͮήÏ®ЮѮԮծ׮خݮ߮ã®ä®ç®ê®ë®ì®í®î®ï®ð®ñ®ò®õ®÷®ø®ù®ú®û®ý®þ®ÿ®€¯�¯‚¯ƒ¯„¯†¯‡¯ˆ¯‰¯НŒ¯ޝ�¯“¯•¯(2&96193c323465f076999a371b135decb1.woff2Òëè 2782db8a46e04926a92725156c786035¨õ"•–¯—¯™¯š¯›¯œ¯ž¯Ÿ¯¡¯¢¯¤¯¥¯¦¯§¯¨¯©¯ª¯¬¯®¯°¯±¯³¯µ¯¶¯·¯¸¯¹¯º¯»¯¼¯¾¯¿¯À¯Á¯¯įůƯǯȯʯͯίϯЯѯÒ¯Ô¯Õ¯Ö¯ׯدÚ¯Û¯߯à¯á¯â¯ã¯ä¯å¯è¯î¯ï¯ð¯ñ¯ò¯ô¯÷¯ø¯ù¯ú¯ü¯ý¯þ¯€°„°‰°‹°�°”°•°–°™°š°›°�°ž°Ÿ° °¢°£°¥°§°¨°©°ª°«°¬°®°¯°±°²°³°´°µ°¶°º°¼°½°¾°¿°À°Á°°ðİŰǰȰɰʰ˰аѰÒ°Ô°Õ°Ö°×°Ú°ܰݰß°à°(2&2782db8a46e04926a92725156c786035.woff2Òëé 959e95f5804146cf9def6c672e89ceddä˜"•á°ã°ä°æ°è°é°ê°í°î°ò°‹±ޱ’±•±™±£±©±ª±«±¬±­±°±±±²±³±´±µ±·±¸±¹±º±»±½±¾±¿±À±Á±±ñűDZɱʱ˱̱ͱϱбÔ±Ö±×±ܱݱá±ã±ä±å±æ±ì±î±ð±ñ±ó±õ±ö±÷±ø±ù±ú±û±ÿ±€²�²‚²„²†²‡²‹²޲�²”²•²–²—²™²œ²�²Ÿ² ²¢²£²¤²¥²¦²§²©²ª²«²¬²­²¯²°²²²´²µ²¶²¸²¹²º²»²½²À²Á²²IJƲDzͲβϲвѲÓ²Ö²زÙ²Ú²Û²ݲß²à²á²ä²æ²ó²(2&959e95f5804146cf9def6c672e89cedd.woff2Òëê 8dfe8e2f2de777d5ccb7ec9b364c4cc4Ìò"•ø²ù²û²þ²‚³ƒ³‰³Œ³޳š³›³œ³�³ž³Ÿ³ ³¡³¢³£³¤³¦³§³©³ª³«³¯³°³²³µ³¶³·³¸³¹³º³»³¼³½³¾³¿³À³³óijųƳdzȳɳʳ˳̳ͳγϳÓ³Ö³׳Ú³ܳÞ³à³á³ã³ä³å³æ³ç³è³é³ê³ë³ì³î³ï³ð³ò³ó³ô³õ³ö³÷³ø³ù³ú³û³ü³ý³þ³€´‚´ƒ´„´†´‡´ˆ´‰´Š´‹´Œ´�´‘´’´“´”´•´—´˜´š´›´œ´�´ž´Ÿ´ ´¡´¢´£´¤´¥´¦´§´¨´©´ª´¬´¯´±´²´³´´´µ´¹´º´»´¼´(2&8dfe8e2f2de777d5ccb7ec9b364c4cc4.woff2Òîë a1540a8f808c0ab7197e20a9147018a7ŒÀ"˜½´¿´Æ´Ç´È´É´Ë´Ì´δдѴҴӴԴִشٴܴݴ޴à´á´ã´æ´ç´è´é´ë´ò´ƒµ‰µ�µ޵”µ•µ™µ¦µ©µªµ«µ¬µ­µ®µ²µ³µ´µµµ¹µ»µ½µ¾µ¿µõĵƵǵȵɵʵ͵εе×µÙµÚµÛµܵݵÞµàµâµãµäµåµçµèµéµêµìµîµðµñµòµóµôµõµöµ÷µøµúµüµýµþµÿµ€¶�¶‚¶„¶…¶†¶‡¶‰¶ж‹¶Œ¶�¶޶�¶‘¶’¶”¶•¶–¶—¶˜¶™¶š¶›¶œ¶�¶ž¶ ¶¡¶¤¶¦¶¨¶ª¶«¶¬¶­¶°¶³¶´¶µ¶¶¶·¶(2&a1540a8f808c0ab7197e20a9147018a7.woff2Òîì 89bb3380fe11c8b22ceebc16b4fe2a5bÀÝ"˜¸¶¹¶º¶½¶¾¶¿¶À¶ƶʶ˶̶жÒ¶Ó¶Õ¶Ö¶×¶Ù¶Û¶ܶݶÞ¶ß¶à¶á¶â¶ã¶ä¶å¶æ¶ç¶è¶é¶ê¶ë¶ì¶í¶î¶ð¶ñ¶ò¶ó¶õ¶ö¶ø¶ù¶ú¶û¶ü¶ý¶þ¶ÿ¶€·‚·„·…·†·‡·ˆ·‰·Š·‹·Œ·�·�·“·”·•·–·—·˜·™·›·œ·�·Ÿ· ·¡·¢·£·¤·¥·¦·§·¨·©·¬·¯·°·±·²·³·´·µ·¶···¸·¹·º·»·¼·½·¾·¿··÷Ä·Å·Æ·È·Ë·Ì·Í·ηÏ·зѷҷӷշطٷڷܷ޷߷à·ã·å·æ·é·ì·í·î·ï·ñ·(2&89bb3380fe11c8b22ceebc16b4fe2a5b.woff2Òñí 28f586a6b90bc5e84f81274e15dbe2cf¤À"›ò·ó·õ·ö·÷·ø·ù·ú·û·ü·þ·€¸�¸‚¸ƒ¸„¸…¸†¸‡¸Џ‹¸Œ¸ޏ�¸�¸‘¸”¸•¸–¸—¸˜¸™¸š¸›¸œ¸�¸ž¸Ÿ¸¡¸¢¸¤¸¦¸§¸ª¸«¸¬¸®¸¯¸°¸´¸¶¸¸¸º¸¼¸½¸¿¸À¸Á¸¸øĸƸǸʸ˸̸͸θϸиѸÓ¸Õ¸Ù¸Ú¸Û¸ܸÞ¸à¸á¸â¸ã¸ä¸å¸æ¸è¸é¸ê¸ë¸ì¸î¸ï¸ð¸ñ¸ò¸ó¸ô¸õ¸ö¸ù¸û¸ý¸þ¸€¹ƒ¹„¹‰¹йŒ¹�¹“¹–¹—¹˜¹™¹�¹ª¹¬¹¯¹¹¹¾¹¿¹À¹Á¹¹ȹɹѹÒ¹Ú¹Û¹à¹á¹ã¹ä¹æ¹è¹(2&28f586a6b90bc5e84f81274e15dbe2cf.woff2Òñî b54aa282fd4a533bbb2fe1f03813e542Äø"›ê¹ë¹ì¹í¹î¹ï¹ð¹ñ¹ò¹õ¹÷¹ø¹ù¹ú¹û¹ü¹ý¹þ¹ÿ¹€º�º‚ºƒº„º…ºˆºŠº‹ºŒº�ºŽº�º�º‘º’º“º”º–º—º˜º™ºšºœºžº º¡º¢º¤º¥º§º©ºªº«º¬º­º®º±º²º³º´ºµº¶º·º¸º¹ººº¼º½º¾ºÀºÁºúĺźƺǺȺɺʺ˺̺ͺκϺкÔºÕºÖº׺غÙºÚºÛºÞºߺâºãºäºåºæºçºèºéºëºíºîºðºñºóºôºõºöº÷ºøºùºúºûºüºýºþºÿº€»�»‚»ƒ»„»…»†»ˆ»Š»‹»Œ»�»Ž»�»�»‘»(2&b54aa282fd4a533bbb2fe1f03813e542.woff2Òñï 1c80137f3f196f5ca269fa915fa1179dÐæ"›’»”»•»–»—»™»›»œ»�»ž»Ÿ» »¡»¢»£»¤»¦»§»¨»ª»«»¬»­»®»°»±»²»³»µ»¶»·»¸»¹»º»½»¾»¿»Á»ûĻŻƻǻȻɻʻ˻̻ͻλÏ»лѻһԻջֻػۻܻݻ޻߻à»á»â»ã»ä»ç»è»é»ê»ë»ì»í»î»ð»ñ»ô»õ»ö»÷»û»ü»ý»þ»ÿ»€¼�¼‚¼ƒ¼„¼…¼†¼‡¼ˆ¼‰¼м‹¼�¼޼�¼�¼‘¼’¼“¼”¼–¼—¼˜¼™¼œ¼¤¼§¼®¼°¼´¼»¼¼¼À¼ͼмÒ¼Ó¼Ô¼Ö¼Ù¼ݼß¼à¼á¼â¼å¼î¼ï¼ò¼ô¼(2&1c80137f3f196f5ca269fa915fa1179d.woff2Òôð de4ed50bf5f87359918e27db2a7f013dØÝ"žõ¼ö¼÷¼ø¼û¼€½�½ƒ½„½…½†½‰½нŒ½�½޽�½�½‘½”½•½–½˜½™½š½›½œ½ž½ ½¡½¢½£½¤½§½¨½ª½«½¬½­½®½¯½°½±½²½³½µ½¶½·½¹½º½¿½À½Á½½ŽƽǽȽʽ˽нÒ½Ó½Õ½Ö½×½Ù½Ú½á½ã½ä½æ½ë½ì½í½î½ð½ñ½ó½õ½ö½ø½ú½€¾�¾‚¾ƒ¾„¾…¾†¾‡¾ˆ¾оŒ¾�¾‘¾’¾”¾•¾–¾˜¾š¾›¾œ¾�¾ž¾Ÿ¾¡¾£¾¤¾¥¾¦¾§¾¨¾©¾ª¾«¾­¾®¾°¾±¾²¾³¾µ¾¶¾¸¾º¾¼¾¿¾À¾Á¾¾þžƾǾȾɾ(2&de4ed50bf5f87359918e27db2a7f013d.woff2Òôñ 72f63d038ac2aa1750785d199df7b527¸é"ž̾;Ó¾Õ¾Ö¾×¾ؾÚ¾Û¾ݾÞ¾â¾ã¾ä¾å¾è¾é¾ë¾í¾î¾ï¾ð¾ñ¾ó¾ô¾õ¾ø¾ù¾ú¾û¾ü¾ý¾þ¾�¿‚¿Ž¿�¿‘¿’¿“¿–¿—¿˜¿�¿ž¿¡¿¢¿£¿¤¿¥¿¦¿§¿¨¿©¿ª¿«¿¬¿­¿®¿¯¿°¿±¿²¿³¿´¿µ¿¶¿·¿¸¿¹¿º¿»¿¼¿½¿¾¿¿¿À¿Á¿¿ÿĿſƿǿȿɿʿ˿̿ͿοÏ¿пѿҿӿԿտֿ׿ؿٿڿۿܿݿ޿߿à¿á¿â¿ã¿ä¿å¿æ¿ç¿è¿é¿ê¿ë¿ì¿í¿î¿ï¿ Á¡Á¢Á°Á±Á²Á³Á´ÁµÁ¶Á·Á€Ü�Ü‚Ü(2&72f63d038ac2aa1750785d199df7b527.woff2Ò”ò 1c5465001206a4d36758c768f963b83dÀ"BƒÜ„܅܆܇܈܉܊܋܀öâüýÿÐðÑðÒðÓðÔðÕðÖð×ðØðÙð2&1c5465001206a4d36758c768f963b83d.woff2 \ No newline at end of file diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/result.css b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/result.css new file mode 100644 index 00000000..e158b0fe --- /dev/null +++ b/internal/embedded/static/vendor/fonts/maple-mono-cn/italic/result.css @@ -0,0 +1,32 @@ +/* Generated By cn-font-split@7.6.6 https://www.npmjs.com/package/cn-font-split +CreateTime: 2025-08-17T03:35:16.893289334+00:00; +Macintosh en FontFamilyName Maple Mono CN +Macintosh en FontSubfamilyName Italic +Macintosh en UniqueFontID Version 7.000-beta36;SUBF;MapleMono-CN-Italic;2024;FL830; +Macintosh en FullFontName Maple Mono CN Italic +Macintosh en VersionString Version 7.000 +Macintosh en PostScriptFontName MapleMono-CN-Italic +Windows en CopyrightNotice Copyright 2022 The Maple Mono Project Authors (https://github.com/subframe7536/maple-font) +Windows en FontFamilyName Maple Mono CN +Windows en FontSubfamilyName Italic +Windows en UniqueFontID Version 7.000-beta36;SUBF;MapleMono-CN-Italic;2024;FL830; +Windows en FullFontName Maple Mono CN Italic +Windows en VersionString Version 7.000 +Windows en PostScriptFontName MapleMono-CN-Italic +Windows en DesignerName subframe7536 +Windows en Description A monospace font with round corner and ligatures +Windows en VendorURL https://github.com/subframe7536 +Windows en DesignerURL https://github.com/subframe7536 +Windows en LicenseDescription This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is available with a FAQ at: https://openfontlicense.org +Windows en LicenseURL https://openfontlicense.org +Windows en Other Broken equals ligatures +Windows en Other Broken compare and equal ligatures +Windows en Other Enable arbitrary tag +Windows en Other Break multiple underscores +Windows en Other Restore the thickness of backslash in escape letters +Windows en Other Break connected strokes between italic letters +Windows en Other Relax the conditions for multiple greaters ligatures +Windows en Other Enable double headed arrows and reverse arrows + */ + +@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./1c5465001206a4d36758c768f963b83d.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+EE03-EE0B,U+FB00,U+FE62,U+FFFD,U+1F850-1F859;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./72f63d038ac2aa1750785d199df7b527.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+9F4C-9F4D,U+9F53,U+9F55-9F58,U+9F5A-9F5B,U+9F5D-9F5E,U+9F62-9F65,U+9F68-9F69,U+9F6B,U+9F6D-9F71,U+9F73-9F75,U+9F78-9F7E,U+9F81-9F82,U+9F8E-9F8F,U+9F91-9F93,U+9F96-9F98,U+9F9D-9F9E,U+9FA1-9FEF,U+E0A0-E0A2,U+E0B0-E0B7,U+EE00-EE02;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./de4ed50bf5f87359918e27db2a7f013d.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+9E75-9E78,U+9E7B,U+9E80-9E81,U+9E83-9E86,U+9E89-9E8A,U+9E8C-9E91,U+9E94-9E96,U+9E98-9E9C,U+9E9E,U+9EA0-9EA4,U+9EA7-9EA8,U+9EAA-9EB3,U+9EB5-9EB7,U+9EB9-9EBA,U+9EBF-9EC2,U+9EC5-9EC8,U+9ECA-9ECB,U+9ED0,U+9ED2-9ED3,U+9ED5-9ED7,U+9ED9-9EDA,U+9EE1,U+9EE3-9EE4,U+9EE6,U+9EEB-9EEE,U+9EF0-9EF1,U+9EF3,U+9EF5-9EF6,U+9EF8,U+9EFA,U+9F00-9F08,U+9F0A,U+9F0C,U+9F0F,U+9F11-9F12,U+9F14-9F16,U+9F18,U+9F1A-9F1F,U+9F21,U+9F23-9F2B,U+9F2D-9F2E,U+9F30-9F33,U+9F35-9F36,U+9F38,U+9F3A,U+9F3C,U+9F3F-9F43,U+9F45-9F49;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./1c80137f3f196f5ca269fa915fa1179d.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+9D92,U+9D94-9D97,U+9D99,U+9D9B-9DA4,U+9DA6-9DA8,U+9DAA-9DAE,U+9DB0-9DB3,U+9DB5-9DBA,U+9DBD-9DBF,U+9DC1,U+9DC3-9DD2,U+9DD4-9DD6,U+9DD8,U+9DDB-9DE4,U+9DE7-9DEE,U+9DF0-9DF1,U+9DF4-9DF7,U+9DFB-9E0B,U+9E0D-9E14,U+9E16-9E19,U+9E1C,U+9E24,U+9E27,U+9E2E,U+9E30,U+9E34,U+9E3B-9E3C,U+9E40,U+9E4D,U+9E50,U+9E52-9E54,U+9E56,U+9E59,U+9E5D,U+9E5F-9E62,U+9E65,U+9E6E-9E6F,U+9E72,U+9E74;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./b54aa282fd4a533bbb2fe1f03813e542.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+9CEA-9CF2,U+9CF5,U+9CF7-9D05,U+9D08,U+9D0A-9D14,U+9D16-9D1A,U+9D1C,U+9D1E,U+9D20-9D22,U+9D24-9D25,U+9D27,U+9D29-9D2E,U+9D31-9D3A,U+9D3C-9D3E,U+9D40-9D41,U+9D43-9D50,U+9D54-9D5B,U+9D5E-9D5F,U+9D62-9D69,U+9D6B,U+9D6D-9D6E,U+9D70-9D71,U+9D73-9D86,U+9D88,U+9D8A-9D91;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./28f586a6b90bc5e84f81274e15dbe2cf.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+9BF2-9BF3,U+9BF5-9BFC,U+9BFE,U+9C00-9C07,U+9C0A-9C0C,U+9C0E-9C11,U+9C14-9C1F,U+9C21-9C22,U+9C24,U+9C26-9C27,U+9C2A-9C2C,U+9C2E-9C30,U+9C34,U+9C36,U+9C38,U+9C3A,U+9C3C-9C3D,U+9C3F-9C44,U+9C46-9C47,U+9C4A-9C51,U+9C53,U+9C55,U+9C59-9C5C,U+9C5E,U+9C60-9C66,U+9C68-9C6C,U+9C6E-9C76,U+9C79,U+9C7B,U+9C7D-9C7E,U+9C80,U+9C83-9C84,U+9C89-9C8A,U+9C8C,U+9C8F,U+9C93,U+9C96-9C99,U+9C9D,U+9CAA,U+9CAC,U+9CAF,U+9CB9,U+9CBE-9CC2,U+9CC8-9CC9,U+9CD1-9CD2,U+9CDA-9CDB,U+9CE0-9CE1,U+9CE3-9CE4,U+9CE6,U+9CE8;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./89bb3380fe11c8b22ceebc16b4fe2a5b.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+9B38-9B3A,U+9B3D-9B40,U+9B46,U+9B4A-9B4C,U+9B50,U+9B52-9B53,U+9B55-9B57,U+9B59,U+9B5B-9B6E,U+9B70-9B73,U+9B75-9B76,U+9B78-9B80,U+9B82,U+9B84-9B8D,U+9B8F,U+9B93-9B99,U+9B9B-9B9D,U+9B9F-9BA9,U+9BAC,U+9BAF-9BBF,U+9BC2-9BC6,U+9BC8,U+9BCB-9BD3,U+9BD5,U+9BD8-9BDA,U+9BDC,U+9BDE-9BE0,U+9BE3,U+9BE5-9BE6,U+9BE9,U+9BEC-9BEF,U+9BF1;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./a1540a8f808c0ab7197e20a9147018a7.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+9A3D,U+9A3F,U+9A46-9A49,U+9A4B-9A4C,U+9A4E,U+9A50-9A54,U+9A56,U+9A58-9A59,U+9A5C-9A5E,U+9A60-9A61,U+9A63,U+9A66-9A69,U+9A6B,U+9A72,U+9A83,U+9A89,U+9A8D-9A8E,U+9A94-9A95,U+9A99,U+9AA6,U+9AA9-9AAE,U+9AB2-9AB5,U+9AB9,U+9ABB,U+9ABD-9ABF,U+9AC3-9AC4,U+9AC6-9ACA,U+9ACD-9ACE,U+9AD0,U+9AD7,U+9AD9-9ADE,U+9AE0,U+9AE2-9AE5,U+9AE7-9AEA,U+9AEC,U+9AEE,U+9AF0-9AF8,U+9AFA,U+9AFC-9B02,U+9B04-9B07,U+9B09-9B0E,U+9B10-9B12,U+9B14-9B1E,U+9B20-9B21,U+9B24,U+9B26,U+9B28,U+9B2A-9B2D,U+9B30,U+9B33-9B37;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./8dfe8e2f2de777d5ccb7ec9b364c4cc4.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+9978-9979,U+997B,U+997E,U+9982-9983,U+9989,U+998C,U+998E,U+999A-99A4,U+99A6-99A7,U+99A9-99AB,U+99AF-99B0,U+99B2,U+99B5-99C0,U+99C2-99CF,U+99D3,U+99D6-99D7,U+99DA,U+99DC,U+99DE,U+99E0-99E1,U+99E3-99EC,U+99EE-99F0,U+99F2-99FE,U+9A00,U+9A02-9A04,U+9A06-9A0C,U+9A10-9A15,U+9A17-9A18,U+9A1A-9A2A,U+9A2C,U+9A2F,U+9A31-9A35,U+9A39-9A3C;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./959e95f5804146cf9def6c672e89cedd.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+9861,U+9863-9864,U+9866,U+9868-986A,U+986D-986E,U+9872,U+988B,U+988E,U+9892,U+9895,U+9899,U+98A3,U+98A9-98AD,U+98B0-98B5,U+98B7-98BB,U+98BD-98C3,U+98C5,U+98C7,U+98C9-98CD,U+98CF-98D0,U+98D4,U+98D6-98D7,U+98DC-98DD,U+98E1,U+98E3-98E6,U+98EC,U+98EE,U+98F0-98F1,U+98F3,U+98F5-98FB,U+98FF-9902,U+9904,U+9906-9907,U+990B,U+990E-990F,U+9914-9917,U+9919,U+991C-991D,U+991F-9920,U+9922-9927,U+9929-992D,U+992F-9930,U+9932,U+9934-9936,U+9938-993B,U+993D,U+9940-9942,U+9944,U+9946-9947,U+994D-9951,U+9953,U+9956,U+9958-995B,U+995D,U+995F-9961,U+9964,U+9966,U+9973;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./2782db8a46e04926a92725156c786035.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+9796-9797,U+9799-979C,U+979E-979F,U+97A1-97A2,U+97A4-97AA,U+97AC,U+97AE,U+97B0-97B1,U+97B3,U+97B5-97BC,U+97BE-97C2,U+97C4-97C8,U+97CA,U+97CD-97D2,U+97D4-97D8,U+97DA-97DB,U+97DF-97E5,U+97E8,U+97EE-97F2,U+97F4,U+97F7-97FA,U+97FC-97FE,U+9800,U+9804,U+9809,U+980B,U+980D,U+9814-9816,U+9819-981B,U+981D-9820,U+9822-9823,U+9825,U+9827-982C,U+982E-982F,U+9831-9836,U+983A,U+983C-9845,U+9847-984B,U+9850-9852,U+9854-9857,U+985A,U+985C-985D,U+985F-9860;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./96193c323465f076999a371b135decb1.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+96B5,U+96B7,U+96BA-96BB,U+96BF,U+96C2-96C3,U+96C8,U+96CA,U+96D0-96D1,U+96D3-96D4,U+96D7-96D8,U+96DA,U+96DD,U+96DF,U+96E1,U+96E4-96E7,U+96EB-96EE,U+96F0-96F1,U+96F4-96F5,U+96F8,U+96FA,U+96FC-96FD,U+96FF,U+9702-9703,U+9705,U+970A-970C,U+9710-9712,U+9714-9715,U+9717-971B,U+971D,U+971F-9726,U+9728-9729,U+972B-972C,U+972E-972F,U+9731,U+9733-9737,U+973A-973C,U+973F-9741,U+9743,U+9745-9747,U+9749-9751,U+9754-9755,U+9757-9758,U+975D,U+975F,U+9763-9764,U+9767,U+976A-9772,U+9775,U+9777-977B,U+977D-9784,U+9786-978A,U+978C,U+978E,U+9790,U+9793,U+9795;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./41a425a04efc019ce9a3305a416142d4.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+9595-9597,U+9599-95A0,U+95A2,U+95A4,U+95A6-95A7,U+95AA,U+95AE-95B0,U+95B2-95B5,U+95B7-95B8,U+95BA,U+95C0-95C2,U+95C4-95C7,U+95C9,U+95CD-95CF,U+95D1-95D3,U+95D7-95DB,U+95DD,U+95DF-95E0,U+95E3-95E4,U+95E6-95E7,U+95EC,U+95FF,U+9607,U+9613,U+9618,U+961B,U+961E,U+9620,U+9623-9629,U+962B-962D,U+962F-9630,U+9637-963A,U+963E,U+9641,U+9643,U+964A,U+964E-964F,U+9651-9653,U+9656-9657,U+9659-965A,U+965C,U+965E,U+9660,U+9665-9666,U+966B,U+966D-966F,U+9671,U+9679-967C,U+967E-9684,U+9687,U+968C,U+9691-9693,U+9696,U+969A,U+969D-96A6,U+96A9,U+96AB-96AF,U+96B2;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./7583406177e3f57c555ac5cc95344b7f.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+9401-9402,U+9404-940A,U+940C-940F,U+9411,U+9415-9418,U+941A-941F,U+9421-9425,U+9429-942A,U+942C-942D,U+942F-9431,U+9434,U+9436-9437,U+9439,U+943B-943D,U+9440-9443,U+9445-9449,U+944B,U+944D-9450,U+9452-9453,U+9455-945F,U+9461-9462,U+9464,U+9466-946A,U+946C,U+946E-946F,U+9471,U+9473-9476,U+9478,U+947A-947B,U+9480,U+9482-9484,U+9491,U+9496,U+9498,U+94C7,U+94CF,U+94D3-94D4,U+94DA,U+94E6,U+94FB,U+951C,U+9520,U+9527,U+9533,U+953D,U+9543,U+9548,U+954B,U+9555,U+955A,U+9560,U+956E,U+9574-9575,U+9578-957E,U+9581,U+9584-9585,U+9587-9588,U+958A,U+958D,U+9590-9591;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./047b7f549e219ed01e0eed27c6cb4fb0.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+933F,U+9342,U+9344-9345,U+9348-934A,U+934C,U+934E-9353,U+9355-9357,U+9359-935A,U+935C-9363,U+9366-9368,U+936B,U+936D-936F,U+9371-9374,U+9377-9379,U+937B-937D,U+937F-9381,U+9383,U+9385-9386,U+9388-9389,U+938B-938E,U+9390-9395,U+9397,U+9399-93A1,U+93A4-93A5,U+93A8,U+93AB,U+93AD,U+93AF,U+93B1-93B2,U+93B4,U+93B6-93BE,U+93C0-93C2,U+93C4-93C6,U+93C9,U+93CB,U+93CE-93D0,U+93D2-93D5,U+93D9-93DB,U+93E0,U+93E3,U+93E5-93E7,U+93E9-93F4,U+93F6,U+93F8,U+93FA-93FC,U+93FE-9400;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./ecc3a96b08f4505e87c10b3b0ad84174.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+926E-9273,U+9275-9277,U+9279,U+927C-927E,U+9281-9282,U+9284,U+9286-928D,U+928F-9290,U+9292,U+9294-9295,U+9297,U+9299,U+929B,U+929D-929F,U+92A1-92A2,U+92A4,U+92A7,U+92AD,U+92AF-92B0,U+92B2,U+92B4-92B6,U+92B8-92BA,U+92BD-92C0,U+92C2,U+92C4,U+92C6,U+92C9-92CB,U+92CD-92CE,U+92D0-92D1,U+92D3-92DC,U+92DE,U+92E0-92E2,U+92E7,U+92E9,U+92EB-92ED,U+92F2-92F5,U+92F7,U+92F9-92FB,U+92FD-9300,U+9302-9303,U+9305,U+9309-930F,U+9311,U+9313-9314,U+9316-9317,U+931C-931E,U+9321,U+9323-9325,U+9327,U+9329-932A,U+932C-932D,U+9330-9332,U+9334-9337,U+9339-933D;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./fbecc23dd4c048e879ceeda9bde72d95.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+918F,U+9193-9199,U+919D,U+919F-91A1,U+91A4-91A9,U+91B0-91B3,U+91B6-91B9,U+91BB-91BF,U+91C2,U+91C4,U+91C6,U+91C8,U+91D6,U+91DA-91DB,U+91DE-91E2,U+91E5-91E6,U+91E8,U+91EA-91F4,U+91F6,U+91F8,U+91FB-91FF,U+9202-9203,U+9205-9207,U+920A-920C,U+920E-920F,U+9212-9213,U+9216-921D,U+921F-9222,U+9224,U+9228-922D,U+922F,U+9231-9232,U+9235-9236,U+923B-923C,U+9241-9244,U+9246-9247,U+924A-924C,U+924E-9250,U+9252-9254,U+9256,U+9258-9259,U+925C-925D,U+925F-9261,U+9263,U+9265,U+9267-926B;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./eab90c6f727501c5c13285ba67c30ca6.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+9096,U+9098,U+909A,U+909C,U+909E-90A0,U+90A4-90A5,U+90A7-90A9,U+90AB,U+90AD,U+90B2,U+90B7,U+90BC-90BD,U+90BF-90C0,U+90C2-90C3,U+90C6,U+90C8-90C9,U+90CB-90CD,U+90D2,U+90D4-90D6,U+90D8-90DA,U+90DE,U+90E0,U+90E3-90E5,U+90E9-90EA,U+90EC,U+90EE,U+90F0-90F3,U+90F6-90F7,U+90F9-90FC,U+90FF-9101,U+9103,U+9105,U+9107-9108,U+910A-9111,U+9113,U+9115,U+9117-9118,U+911A-911D,U+911F-9121,U+9124-9126,U+9128-912C,U+912E,U+9133,U+9135,U+9137-9138,U+913B-9142,U+9144-9145,U+9147,U+9151,U+9153-9156,U+9158-9159,U+915B-915C,U+915F-9160,U+9166-9168,U+916B,U+916D,U+9173,U+917A-917C,U+9180-9182,U+9184,U+9186,U+9188,U+918A,U+918E;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./4a533c220ce820bb6a6cecc347d3e2e4.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+8F48,U+8F4A-8F4C,U+8F4F-8F53,U+8F55-8F5E,U+8F60,U+8F63,U+8F65,U+8F6A,U+8F80,U+8F8C,U+8F92,U+8F9D,U+8FA0-8FA2,U+8FA4-8FA5,U+8FA7,U+8FAA,U+8FAC,U+8FB3-8FB5,U+8FB7-8FB8,U+8FBA-8FBC,U+8FBF-8FC0,U+8FC3,U+8FC6,U+8FC9-8FCD,U+8FCF,U+8FD2,U+8FD6-8FD7,U+8FDA,U+8FE0-8FE1,U+8FE3,U+8FE7,U+8FEC,U+8FEF,U+8FF1-8FF2,U+8FF4-8FF6,U+8FFA-8FFC,U+8FFE-8FFF,U+9007-9008,U+900C,U+900E,U+9013,U+9018,U+901C,U+9024-9025,U+9027-902C,U+9030-9031,U+9033-9034,U+9037,U+9039-903A,U+903D,U+903F-9040,U+9043,U+9045-9046,U+9048-9049,U+904C,U+9056,U+905A,U+905D,U+905F,U+9061,U+9064,U+9066-9067,U+906A-906C,U+906F-9071,U+9073,U+9076,U+9079,U+907B,U+907E,U+9085-9086,U+9089,U+908C-908E,U+9092,U+9094;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./cc532cd3c760b1aaeb15f52712257d6b.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+8E7B,U+8E7D-8E7E,U+8E80,U+8E82-8E84,U+8E86,U+8E88,U+8E8C,U+8E8E,U+8E96-8E99,U+8E9B,U+8E9D,U+8E9F-8EA0,U+8EA2-8EA4,U+8EA7-8EA9,U+8EAD-8EAE,U+8EB0-8EB1,U+8EB3-8EB9,U+8EBB-8EBF,U+8EC1-8EC9,U+8ECF-8ED1,U+8ED3,U+8ED5-8EDA,U+8EDC-8EDE,U+8EE0-8EE3,U+8EE5-8EEA,U+8EEC-8EF1,U+8EF3-8EF7,U+8EFD,U+8EFF-8F02,U+8F04,U+8F06,U+8F08,U+8F0B-8F11,U+8F13,U+8F16-8F1A,U+8F20-8F24,U+8F27-8F28,U+8F2B-8F2E,U+8F30-8F32,U+8F34-8F37,U+8F39-8F3A,U+8F3C-8F3D,U+8F40-8F41,U+8F43,U+8F47;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./53c7132cb0e13d9d5d4dfcfb22551820.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+8D9C-8D9E,U+8DA0-8DA2,U+8DA4-8DA7,U+8DA9-8DB0,U+8DB6-8DB7,U+8DB9,U+8DBB,U+8DBD,U+8DC0-8DC2,U+8DC5,U+8DC7-8DCA,U+8DCD,U+8DD0,U+8DD2-8DD5,U+8DD8-8DD9,U+8DDC,U+8DE0,U+8DE2,U+8DE5-8DE7,U+8DE9,U+8DED-8DEE,U+8DF0-8DF2,U+8DF4,U+8DF6,U+8DFC,U+8DFE-8E04,U+8E06-8E08,U+8E0B,U+8E0D-8E0E,U+8E11-8E13,U+8E15-8E1C,U+8E20-8E21,U+8E24-8E28,U+8E2B,U+8E2D,U+8E30,U+8E32-8E34,U+8E36-8E38,U+8E3B-8E3C,U+8E3E-8E3F,U+8E43,U+8E45-8E46,U+8E4D-8E50,U+8E53-8E54,U+8E56-8E58,U+8E5A-8E5F,U+8E61-8E62,U+8E65,U+8E67-8E68,U+8E6A-8E6B,U+8E6E,U+8E71,U+8E73,U+8E75,U+8E77-8E79;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./5e416d8880bd460ed59aded9450a1988.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+8C76-8C77,U+8C7B-8C81,U+8C83-8C84,U+8C86-8C88,U+8C8B,U+8C8D-8C92,U+8C95-8C97,U+8C99-8C9C,U+8C9F,U+8CA3-8CA6,U+8CAD-8CAE,U+8CB1,U+8CB5,U+8CB9,U+8CBE,U+8CC6,U+8CC9,U+8CCB-8CD0,U+8CD4,U+8CD6-8CD9,U+8CDB,U+8CDD,U+8CDF,U+8CE5,U+8CE8-8CE9,U+8CEB,U+8CEE-8CF3,U+8CF5-8CF9,U+8CFF-8D03,U+8D06-8D07,U+8D09,U+8D0B-8D0C,U+8D0E,U+8D11-8D12,U+8D14-8D15,U+8D18-8D1A,U+8D1C,U+8D20,U+8D51-8D52,U+8D57,U+8D5F,U+8D65,U+8D68-8D6A,U+8D6C,U+8D6E-8D6F,U+8D71-8D72,U+8D78-8D80,U+8D82-8D83,U+8D86-8D89,U+8D8C-8D90,U+8D92-8D93,U+8D96-8D98,U+8D9A-8D9B;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./31a507c2ef3971b49519260e3910db8c.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+8B36-8B38,U+8B3A-8B3D,U+8B3F-8B40,U+8B42-8B48,U+8B4A-8B4D,U+8B50-8B55,U+8B57,U+8B5B,U+8B5D-8B65,U+8B67-8B6A,U+8B6D-8B6E,U+8B71-8B73,U+8B75-8B76,U+8B78-8B7C,U+8B7F,U+8B81-8B89,U+8B8B-8B8D,U+8B8F-8B91,U+8B94,U+8B97-8B9B,U+8B9D,U+8B9F,U+8BAC,U+8BB1,U+8BBB,U+8BC7,U+8BD0,U+8BEA,U+8C09,U+8C1E,U+8C38-8C40,U+8C42-8C45,U+8C4A-8C4B,U+8C4D,U+8C4F,U+8C51-8C53,U+8C56-8C59,U+8C5B-8C60,U+8C63-8C69,U+8C6D-8C72,U+8C74-8C75;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./e724dbf14a0dbe058f8ffaeb2d4dc149.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+8A4C-8A4D,U+8A4F,U+8A51,U+8A53,U+8A56-8A57,U+8A59-8A5A,U+8A5C-8A5D,U+8A5F,U+8A64-8A65,U+8A67-8A68,U+8A6A,U+8A6F,U+8A74,U+8A76-8A78,U+8A7A-8A7B,U+8A7D-8A7E,U+8A80-8A83,U+8A88,U+8A8B-8A8C,U+8A8E-8A90,U+8A94,U+8A96-8A97,U+8A99,U+8A9B-8A9D,U+8A9F,U+8AA2,U+8AA7,U+8AA9,U+8AAB-8AAF,U+8AB1,U+8AB3-8AB5,U+8AB7-8AB8,U+8ABA-8ABB,U+8ABD-8ABE,U+8AC0-8AC1,U+8AC3,U+8AC5-8AC6,U+8AC8,U+8ACA,U+8ACC,U+8ACE,U+8AD0,U+8AD3-8AD5,U+8AD8-8ADA,U+8ADD,U+8ADF-8AE0,U+8AE3,U+8AE5,U+8AE8-8AEA,U+8AEC,U+8AEF-8AF0,U+8AF2,U+8AF4-8AF5,U+8AF9,U+8AFB,U+8AFD,U+8AFF,U+8B03,U+8B06,U+8B08-8B09,U+8B0B-8B0D,U+8B0F,U+8B11-8B13,U+8B15,U+8B18,U+8B1A,U+8B1C,U+8B1E-8B1F,U+8B21-8B25,U+8B27,U+8B29-8B2A,U+8B2D-8B32,U+8B34-8B35;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./624e50d75694e5197f228894ed92b1a1.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+897C-897E,U+8980,U+8982,U+8984-8985,U+8987-898A,U+898C-898E,U+8990-8992,U+8994-8995,U+8997,U+8999-89A0,U+89A2-89A5,U+89A7-89A9,U+89AB,U+89AD-89AE,U+89B0-89B1,U+89B3-89B6,U+89B8-89B9,U+89BB-89BC,U+89BE,U+89C3,U+89CD,U+89D3-89D5,U+89D7-89D9,U+89DB,U+89DD,U+89DF-89E2,U+89E4,U+89E7-89EA,U+89EC-89EE,U+89F0-89F2,U+89F5,U+89F7,U+89F9-89FF,U+8A04-8A06,U+8A09,U+8A0B,U+8A0D,U+8A0F,U+8A11-8A12,U+8A14,U+8A19-8A1A,U+8A1C,U+8A1E,U+8A20-8A22,U+8A24,U+8A26-8A29,U+8A2B-8A2C,U+8A2E-8A30,U+8A32-8A33,U+8A35,U+8A37-8A39,U+8A3B-8A3D,U+8A3F-8A40,U+8A42-8A45,U+8A47,U+8A49-8A4B;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./00f60007d29d6368a1f30960608f5f1b.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+88BF-88C0,U+88C3-88C4,U+88C7-88C8,U+88CA-88CD,U+88D0-88D1,U+88D3,U+88D6-88D7,U+88DA-88DB,U+88DE,U+88E0-88E1,U+88E6-88E7,U+88E9-88EF,U+88F2,U+88F5-88F7,U+88FA-88FB,U+88FD,U+88FF-8901,U+8903-8909,U+890B-890F,U+8911,U+8914-8918,U+891C-8920,U+8922-8924,U+8926-8929,U+892C-892F,U+8931,U+8935,U+8937,U+8939-893A,U+893C-8940,U+8942-8943,U+8945-8948,U+894A-8955,U+8957-895C,U+8961-8963,U+8965,U+8967-8969,U+896B-896E,U+8970-8971,U+8973-897A;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./d64fb4d87198450bdff12a83ab6e1285.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+87F8,U+87FA,U+87FC-87FD,U+87FF-8802,U+8804,U+8807-8809,U+880B-880C,U+880E-880F,U+8812,U+8817-881A,U+881C-881E,U+8820,U+8824-8830,U+8833-8835,U+8837-8838,U+883A,U+883D-883F,U+8841-8843,U+8847-884B,U+884E-8852,U+8855-8856,U+8858,U+885A,U+885C,U+885E-8860,U+8866-8867,U+886A,U+886D,U+886F,U+8871,U+8873-8876,U+8878-887C,U+8880,U+8883,U+8886-8887,U+8889-888A,U+888C,U+888E-8891,U+8893-8895,U+8897-889B,U+889D,U+889F-88A1,U+88A3,U+88A5-88AA,U+88AC,U+88AE-88B0,U+88B2-88B6,U+88B8-88BB,U+88BD-88BE;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./ba970ca4b5a4a9f045d3d4520d0a95a8.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+8730,U+8732-8733,U+8735-8736,U+8738-873A,U+873C-873D,U+8740-8746,U+874A-874B,U+874D,U+874F-8752,U+8754,U+8756,U+8758,U+875A-875E,U+8761-8762,U+8767,U+8769-876D,U+876F,U+8771-8773,U+8775,U+8777,U+8779-877A,U+877F-8781,U+8786-8787,U+8789-878A,U+878C,U+878E-8792,U+8794-8796,U+8798-879D,U+87A0-87A1,U+87A3-87A7,U+87A9-87AA,U+87AE,U+87B0-87B2,U+87B4,U+87B6-87B9,U+87BC,U+87BE-87BF,U+87C1-87C3,U+87C5,U+87C7,U+87C9,U+87CC-87CD,U+87CF-87D0,U+87D4-87DA,U+87DC-87DF,U+87E1-87E2,U+87E4,U+87E6-87E9,U+87EB,U+87ED,U+87F0-87F1,U+87F3-87F5,U+87F7;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./2af87fa7cc2da7a655fa1bb708c73ebe.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+8648-864C,U+8652-8653,U+8656-8659,U+865D,U+8660-8661,U+8663-8666,U+8668-866A,U+866D,U+8670,U+8672-8678,U+8683-8689,U+868E-8692,U+8694,U+8696-869B,U+869E-86A2,U+86A5-86A6,U+86AB,U+86AD-86AE,U+86B2-86B3,U+86B7-86B9,U+86BB-86BF,U+86C1-86C3,U+86C5,U+86C8,U+86CC-86CD,U+86D2-86D3,U+86D5-86D7,U+86DA,U+86DC-86DD,U+86E0-86E3,U+86E5-86E8,U+86EA-86EC,U+86EF,U+86F5-86F7,U+86FC-86FD,U+86FF,U+8701,U+8704-8705,U+870B-870C,U+870E-8711,U+8714,U+8716,U+8719,U+871B,U+871D,U+871F-8720,U+8724,U+8726-8728,U+872A-872D,U+872F;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./fbde197ff6ac27e027a89459a02100c4.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+8597-859A,U+859D-859E,U+85A0-85A3,U+85A5,U+85A7,U+85AB-85AD,U+85B1-85B6,U+85B8,U+85BB-85C0,U+85C2-85C8,U+85CA-85CC,U+85D1-85D2,U+85D4,U+85D6-85DB,U+85DE-85E3,U+85E6-85E8,U+85EB-85F5,U+85F7-85F8,U+85FC-85FE,U+8600-8603,U+8608-8609,U+860C-8610,U+8612-8615,U+8617-8619,U+861B-861D,U+861F-8621,U+8623-8626,U+8628,U+862A-862C,U+862E-8637,U+8639,U+863B,U+863D-863E,U+8640-8647;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./fbac96c2b9a53a2faa7b9a13d337d33a.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+84D2,U+84D4-84D5,U+84D7-84DC,U+84DE,U+84E1-84E2,U+84E4,U+84E7-84EB,U+84ED,U+84F1-84F3,U+84F5-84FB,U+84FE,U+8500-850B,U+850D-8510,U+8512,U+8514-8516,U+8518-8519,U+851B-851D,U+8520,U+8522,U+8524,U+8527-852A,U+852E-8536,U+853E-8540,U+8542,U+8544-8545,U+8547,U+854B-854D,U+854F-8551,U+8553-8554,U+8557,U+855A-855D,U+855F-8561,U+8563,U+8565-8567,U+856B-856C,U+856E-8571,U+8573,U+8575-8576,U+8578,U+857C-857D,U+857F-8583,U+8586,U+8589,U+858B,U+858D-858E,U+8590-8593,U+8595-8596;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./6ea7acb90a8d87b7ff1ad0c3112e3838.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+8408-8409,U+8410,U+8412-8417,U+8419-841B,U+841E-8423,U+8429-842B,U+842D-8430,U+8432-8434,U+8436-8437,U+8439-843B,U+843E-8445,U+8447-8448,U+844A-8450,U+8453-8456,U+8458,U+845D-8460,U+8462,U+8465,U+8467-8468,U+846A,U+846E-8470,U+8472,U+8474,U+8479,U+847B-8481,U+8483-8486,U+848A,U+848D,U+848F-8493,U+8495-8496,U+8498,U+849A-849B,U+849D,U+849F-84A0,U+84A2-84AE,U+84B0-84B1,U+84B3,U+84B5-84B7,U+84BB,U+84BE,U+84C2-84C3,U+84C5-84C8,U+84CC,U+84CE-84CF;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./b148a1ee427107bf9fa5339a1abace47.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+8316,U+8318-8319,U+831D-8326,U+8329-832A,U+832E,U+8330,U+8337,U+833B,U+833D-833F,U+8341-8342,U+8344-8345,U+8348,U+834B-834E,U+8353,U+8355-8359,U+835D,U+8362,U+8370-8376,U+8379-837A,U+837E-8384,U+8387-8388,U+838B-838D,U+838F-8391,U+8394-8395,U+8397,U+8399-839A,U+839D,U+839F,U+83A1,U+83A3-83A6,U+83AC-83AF,U+83B5,U+83BB,U+83BE-83BF,U+83C2-83C4,U+83C6,U+83C8-83C9,U+83CB,U+83CD-83CE,U+83D0-83D3,U+83D5,U+83D7,U+83D9-83DB,U+83DE,U+83E2-83E4,U+83E6-83E8,U+83EB-83EE,U+83F3-83F7,U+83FA-83FC,U+83FE-8400,U+8402,U+8405;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./ba439de345bc64582f8560f3363cffa7.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+820B,U+820E-820F,U+8211,U+8213,U+8215-821A,U+821D,U+8220,U+8224-8227,U+8229,U+822E,U+8232,U+823A,U+823C-823D,U+823F-8243,U+8245-8246,U+8248,U+824A,U+824C-824E,U+8250-8257,U+825B-825E,U+8260-8263,U+8265,U+8267,U+8269-826A,U+826C-826D,U+8275-8278,U+827B-827C,U+8280-8281,U+8283,U+8285-8287,U+8289,U+828C,U+8290,U+8293-8296,U+829A-829B,U+829E,U+82A0,U+82A2-82A3,U+82A7,U+82B2,U+82B5-82B6,U+82BA,U+82BC,U+82BF-82C0,U+82C2-82C3,U+82C5-82C6,U+82C9,U+82D0,U+82D6,U+82D9-82DA,U+82DD,U+82E2,U+82E8-82EA,U+82EC-82EE,U+82F0,U+82F2-82F3,U+82F5-82F6,U+82F8,U+82FA,U+82FC-8300,U+830A-830B,U+830D,U+8310,U+8312-8313;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./6f601f95d01a12d27fc47a5a7ab5bcaa.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+8127-812A,U+812D-812E,U+8130,U+8133-8135,U+8137,U+813A-813D,U+813F-8145,U+8147,U+8149,U+814D,U+814F,U+8152,U+8157-8158,U+815B-815F,U+8162-8164,U+8168,U+816A,U+816C,U+816F,U+8172,U+8175-8177,U+8181,U+8184-8187,U+8189,U+818B-818E,U+8190,U+8192-8197,U+8199,U+819E-819F,U+81A1-81A2,U+81A4-81A5,U+81A7,U+81AB-81B2,U+81B4-81B9,U+81BC,U+81C4-81C5,U+81C7-81C8,U+81CB,U+81CE,U+81D0-81D7,U+81D9,U+81DB-81DF,U+81E1-81E2,U+81E4,U+81E6,U+81E9,U+81EB,U+81EE-81F2,U+81F5-81F9,U+81FD,U+81FF,U+8203;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./e57a912ee13d598bfb2883b8755a6de6.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+801E-801F,U+8021,U+8023-8024,U+802B,U+802D,U+802F-8030,U+8032,U+8034,U+8039-803A,U+803C,U+803E,U+8040-8041,U+8044-8045,U+8047-8049,U+804E-8051,U+8053,U+8055,U+8057,U+8059,U+805B-805D,U+805F-8068,U+806B-806E,U+8074,U+8078,U+807A-807C,U+8081-8082,U+8088,U+808A,U+808D-8092,U+8094-8095,U+8097,U+8099,U+809E,U+80A3,U+80A6-80A8,U+80AC,U+80B0,U+80B3,U+80B5-80B6,U+80B8-80B9,U+80BB,U+80C5,U+80C7-80CB,U+80CF-80D5,U+80D8,U+80DF-80E0,U+80E2-80E3,U+80E6,U+80EE,U+80F5,U+80F7,U+80F9,U+80FB,U+80FE-8101,U+8103-8104,U+8107,U+810B-810C,U+8115,U+8117,U+8119,U+811C-811D,U+811F-8122,U+8124-8126;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./40b52a7bb96d11446caddf09e9a1793a.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+7F47-7F4B,U+7F4D-7F4F,U+7F52-7F53,U+7F56,U+7F59,U+7F5B-7F5E,U+7F60,U+7F63-7F67,U+7F6B-7F6D,U+7F6F,U+7F73,U+7F76,U+7F78,U+7F7A-7F7D,U+7F7F-7F80,U+7F82-7F84,U+7F87,U+7F89,U+7F8D,U+7F8F-7F93,U+7F95-7F99,U+7F9B-7F9C,U+7FA0,U+7FA2,U+7FA6,U+7FAA-7FAE,U+7FB1,U+7FB3-7FB5,U+7FB7,U+7FBA-7FBB,U+7FBE,U+7FC0,U+7FC2-7FC4,U+7FC6-7FC9,U+7FCB,U+7FCD,U+7FCF-7FD1,U+7FD3,U+7FD6-7FD7,U+7FD9-7FDE,U+7FE2-7FE4,U+7FE7-7FE8,U+7FEA-7FED,U+7FEF,U+7FF2,U+7FF4-7FF8,U+7FFA,U+7FFD-7FFF,U+8002,U+8007-800A,U+800E-800F,U+8011,U+8013,U+801A-801B,U+801D;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./c9998b777f0ff25f5dc8eec44f259f8e.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+7E02-7E07,U+7E0C-7E0F,U+7E12-7E1A,U+7E1C,U+7E20-7E22,U+7E24-7E2A,U+7E2C,U+7E2F-7E30,U+7E33-7E34,U+7E38,U+7E3A,U+7E3C,U+7E3F-7E40,U+7E42,U+7E44,U+7E48-7E51,U+7E53,U+7E56-7E59,U+7E5B-7E5D,U+7E5F-7E60,U+7E63-7E68,U+7E6B-7E6C,U+7E71-7E72,U+7E74-7E78,U+7E7A-7E7B,U+7E7F-7E81,U+7E83-7E87,U+7E89,U+7E8B,U+7E8D-7E8E,U+7E90-7E92,U+7E94-7E95,U+7E97,U+7E99-7E9A,U+7E9D-7E9E,U+7EAE,U+7EB4,U+7EBB-7EBC,U+7ED6,U+7EE4,U+7EEC,U+7EF9,U+7F0A,U+7F10,U+7F1E,U+7F37,U+7F39,U+7F3B-7F41,U+7F43,U+7F46;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./c0fcbfbc865336c21e3bcde140532549.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+7D45,U+7D47-7D4D,U+7D4F,U+7D51-7D54,U+7D56-7D5A,U+7D5C,U+7D5F-7D60,U+7D63-7D65,U+7D67,U+7D69-7D6D,U+7D6F-7D70,U+7D74-7D76,U+7D78,U+7D7A-7D80,U+7D82,U+7D84-7D85,U+7D87,U+7D89-7D8E,U+7D90-7D92,U+7D94-7D9B,U+7D9D,U+7D9F,U+7DA1,U+7DA4-7DA5,U+7DA7-7DAB,U+7DAF,U+7DB3,U+7DB5-7DB7,U+7DBC,U+7DC0-7DC3,U+7DC5-7DC6,U+7DC8-7DC9,U+7DCC-7DD1,U+7DD3-7DD6,U+7DDB-7DDC,U+7DDF,U+7DE2,U+7DE4-7DE5,U+7DE7,U+7DEA-7DEB,U+7DED-7DEE,U+7DF0,U+7DF3,U+7DF5,U+7DF7-7DF8,U+7DFA-7E01;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./2870a2e2db969583bc5a852bea30f659.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+7C6D,U+7C6F-7C71,U+7C75-7C7A,U+7C7E-7C88,U+7C8A-7C90,U+7C93-7C94,U+7C96,U+7C99-7C9B,U+7CA0-7CA1,U+7CA3,U+7CA6-7CA9,U+7CAB-7CAD,U+7CAF-7CB0,U+7CB4,U+7CB6-7CB8,U+7CBA-7CBB,U+7CBF-7CC0,U+7CC2-7CC4,U+7CC6,U+7CCB,U+7CCE-7CD4,U+7CD8,U+7CDA-7CDB,U+7CE1-7CE6,U+7CE9-7CEE,U+7CF0-7CF1,U+7CF3,U+7CF5,U+7CF7,U+7CFA,U+7CFC-7CFD,U+7CFF,U+7D01,U+7D03,U+7D0C,U+7D0E-7D0F,U+7D11-7D12,U+7D16,U+7D18,U+7D1D-7D1F,U+7D23-7D26,U+7D28-7D2A,U+7D2C-7D2E,U+7D34-7D38,U+7D3B,U+7D3D-7D3E,U+7D41,U+7D43;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./a9714bd5ccfe4580a4ac6bd0ee5a3b68.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+7BBD-7BBF,U+7BC2-7BC3,U+7BC5,U+7BC8,U+7BCA,U+7BCD-7BD0,U+7BD2,U+7BD4-7BD8,U+7BDB-7BDC,U+7BDE-7BE0,U+7BE2-7BE3,U+7BE7-7BE8,U+7BEB-7BED,U+7BEF-7BF0,U+7BF2,U+7BF4-7BF6,U+7BF8-7BFB,U+7BFD,U+7BFF,U+7C01-7C06,U+7C08-7C0A,U+7C0E,U+7C10-7C15,U+7C17-7C1D,U+7C20,U+7C22,U+7C24-7C25,U+7C28-7C29,U+7C2C-7C37,U+7C39-7C3D,U+7C42,U+7C44-7C4B,U+7C4E-7C5B,U+7C5D-7C5E,U+7C61-7C63,U+7C65-7C68,U+7C6B;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./7bf97388c9701476a5266dd975bb9a48.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+7AEE,U+7AF0-7AF5,U+7AF7-7AF8,U+7AFB-7AFC,U+7AFE,U+7B00-7B02,U+7B05,U+7B07,U+7B09,U+7B0C-7B0E,U+7B10,U+7B12-7B13,U+7B16-7B18,U+7B1A,U+7B1C-7B1D,U+7B1F,U+7B21-7B23,U+7B27,U+7B29,U+7B2D,U+7B2F-7B30,U+7B32,U+7B34-7B37,U+7B39,U+7B3B,U+7B3D,U+7B3F-7B44,U+7B48,U+7B4A,U+7B4E,U+7B53,U+7B55,U+7B57,U+7B59,U+7B5C,U+7B5E-7B5F,U+7B61,U+7B63-7B66,U+7B68-7B6D,U+7B6F-7B70,U+7B73-7B74,U+7B76,U+7B78,U+7B7A,U+7B7C-7B7D,U+7B7F,U+7B81-7B84,U+7B86-7B8A,U+7B8C,U+7B8E,U+7B91-7B93,U+7B96,U+7B98-7B9B,U+7B9E-7BA0,U+7BA3-7BA5,U+7BAE-7BB0,U+7BB2-7BB3,U+7BB5-7BB7,U+7BB9-7BBC;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./2b213022d7ec30fb36e467132037044b.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+7A2F-7A30,U+7A32,U+7A34-7A36,U+7A38,U+7A3A,U+7A3E,U+7A40-7A45,U+7A47-7A4B,U+7A4F-7A50,U+7A52-7A56,U+7A58-7A60,U+7A63-7A68,U+7A6A-7A6C,U+7A6E-7A6F,U+7A71-7A73,U+7A75,U+7A7B-7A7E,U+7A82,U+7A85,U+7A87,U+7A89-7A8C,U+7A8E-7A90,U+7A93-7A94,U+7A99-7A9B,U+7A9E,U+7AA1-7AA4,U+7AA7,U+7AAB,U+7AB0-7AB2,U+7AB4-7AB5,U+7AB7-7AB9,U+7ABB-7ABE,U+7AC0-7AC3,U+7AC6,U+7AC9,U+7ACC-7AD5,U+7AD7-7AD8,U+7ADA-7ADD,U+7AE1-7AE2,U+7AE4,U+7AE7-7AEC;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./88ce7912d2f85d7088083285d666fe36.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+7974-7976,U+7979,U+797B-797E,U+7982-7983,U+7986-7989,U+798B-798C,U+7990-7999,U+799B-79A6,U+79A8-79A9,U+79AB-79AD,U+79AF,U+79B2,U+79B4-79B8,U+79BC,U+79C2,U+79C4-79C5,U+79C7,U+79CA,U+79CC,U+79CE-79D0,U+79D3-79D4,U+79D6-79D7,U+79D9-79DE,U+79E0-79E2,U+79E5,U+79E8,U+79EA,U+79EC,U+79EE,U+79F1-79F7,U+79F9-79FA,U+79FC,U+79FE-79FF,U+7A01,U+7A04,U+7A07,U+7A09-7A0A,U+7A0C,U+7A0F-7A13,U+7A15-7A16,U+7A18-7A19,U+7A1B-7A1D,U+7A21-7A22,U+7A24-7A2D;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./2b55cbe47724c78e657923dfb3390cbc.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+78C2-78C4,U+78C6-78C8,U+78CC-78CF,U+78D1-78D3,U+78D6-78D8,U+78DB-78E2,U+78E4-78E6,U+78E9-78EB,U+78ED-78EE,U+78F0-78F1,U+78F3,U+78F5-78F6,U+78F8-78F9,U+78FB-78FC,U+78FE-7900,U+7902-7904,U+7907-790D,U+790F-7912,U+7914-7918,U+791A-791D,U+791F-7923,U+7925,U+7927-7929,U+792D-7930,U+7932-7933,U+7935-7939,U+793D,U+793F,U+7942-7945,U+7947,U+794A-7952,U+7954,U+7958-7959,U+7961,U+7963-7964,U+7966,U+7969-796C,U+796E,U+7970-7973;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./1a984dfaa0c7ab923b4e9a1b1cff0856.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+77F2,U+77F4-77F5,U+77F7,U+77F9-77FC,U+7803-7808,U+780A-780B,U+780E-7810,U+7813,U+7815,U+7819,U+781B,U+781E,U+7820-7822,U+7824,U+7828,U+782A-782B,U+782E-782F,U+7831-7833,U+7835-7836,U+783D,U+783F,U+7841-7844,U+7846,U+7848-784B,U+784D,U+784F,U+7851,U+7853-7854,U+7858-785C,U+785E-7863,U+7865-7867,U+7869,U+7870-7876,U+7878-787B,U+787D-7886,U+7888,U+788A-788B,U+788F-7890,U+7892,U+7894-7896,U+7899,U+789D-789E,U+78A0,U+78A2,U+78A4,U+78A6,U+78A8,U+78AA-78AC,U+78AE-78AF,U+78B5-78B7,U+78BB,U+78BD,U+78BF-78C0;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./76a2df9c284d898d40347168939fa644.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+773E-773F,U+7742,U+7744-7746,U+7748-774F,U+7752-7759,U+775D,U+775F-7760,U+7764,U+7767,U+7769-776A,U+776D-7778,U+777A-777C,U+7781-7783,U+7786-778B,U+778F-7790,U+7793-7797,U+7799-779D,U+77A1,U+77A3-77A4,U+77A6,U+77A8,U+77AB,U+77AD-77AF,U+77B1-77B2,U+77B4,U+77B6-77BA,U+77BE,U+77C0-77CC,U+77CE-77D6,U+77D8-77D9,U+77DD-77E1,U+77E4,U+77E6,U+77E8,U+77EA,U+77F0-77F1;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./c3ee94f4f2321d8798cad64af7371e5e.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+7674-7677,U+7679-767A,U+767F-7680,U+7683,U+7685,U+7689-768A,U+768C-768D,U+768F-7690,U+7692,U+7694-7695,U+7697-7698,U+769B-76A3,U+76A5-76AD,U+76AF,U+76B3,U+76B5-76B7,U+76B9,U+76BB-76BE,U+76C0-76C1,U+76C3-76C4,U+76C7,U+76C9,U+76CB-76CC,U+76D3,U+76D5,U+76D9-76DA,U+76DD,U+76E0,U+76E2,U+76E6,U+76E8-76ED,U+76F0,U+76F3,U+76F5-76F7,U+76FA-76FB,U+76FD,U+76FF-7700,U+7702-7703,U+7705-7706,U+770A,U+770C,U+770E-7718,U+771B-771E,U+7721,U+7723-7724,U+7727,U+772A-772C,U+772E,U+7730-7734,U+7739,U+773B,U+773D;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./fc665f2559f5abf030f00d0ebfa4d1b9.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+7577,U+757A-757E,U+7580-7582,U+7584-7585,U+7588-7589,U+758C-758E,U+7590,U+7593,U+7595,U+7598,U+759B-759C,U+759E,U+75A2,U+75A6-75AA,U+75AD,U+75B6-75B7,U+75BA-75BB,U+75BF-75C1,U+75C6,U+75CB-75CC,U+75CE-75D1,U+75D3,U+75D7,U+75DA,U+75DC-75DD,U+75DF-75E1,U+75E5,U+75E9,U+75EC-75EF,U+75F2-75F3,U+75F5-75F8,U+75FA-75FB,U+75FD,U+7604,U+7606-7609,U+760E-760F,U+7611-7612,U+7614,U+7616,U+761A,U+761C-761D,U+7623,U+7628,U+762C,U+762E-762F,U+7631-7632,U+7636-7637,U+7639-763A,U+763D,U+7641,U+7644-7645,U+7648,U+764A-764B,U+764E-7653,U+7655,U+7657,U+7659-765B,U+765D,U+7660,U+7665-7666,U+7668,U+766A,U+7673;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./4cb089f4407e4ad9257b4de9d1a2b63a.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+74BC,U+74BE-74C9,U+74CB-74CE,U+74D0-74D1,U+74D3,U+74D5-74D9,U+74DB,U+74DD,U+74DF,U+74E1,U+74E5,U+74E7-74ED,U+74F0-74F3,U+74F5,U+74F8-74FE,U+7500-7503,U+7505-750B,U+750E,U+7510,U+7512,U+7514,U+7516-7517,U+751B,U+751D-751E,U+7520-7521,U+7523-7524,U+7526-7527,U+752A,U+752E,U+7534,U+7536,U+7539,U+753C-753D,U+753F,U+7541-7544,U+7546-7547,U+7549-754A,U+754D,U+7550-7553,U+7555-7558,U+755E-7561,U+7563-7564,U+7567-7569,U+756C-756F,U+7571,U+7573,U+7575;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./b24f29eee88718d1c5c8dfdfcd0a74af.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+7413-7419,U+741C-7421,U+7423-7424,U+7427,U+7429,U+742B,U+742D,U+742F,U+7431-7432,U+7437-7439,U+743B,U+743D-743E,U+7440,U+7442-744A,U+744C-7454,U+7456,U+7458,U+745D,U+7460-7462,U+7465-7468,U+746B-746C,U+746E-746F,U+7471-7475,U+7478-747D,U+747F,U+7482,U+7484-7486,U+7488,U+748A,U+748C-748D,U+748F,U+7491-749B,U+749D,U+749F-74A2,U+74A4-74A5,U+74AA-74AF,U+74B1-74B9,U+74BB;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./e38337627a20b4dffbb049815a78a634.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+7363-7367,U+7369,U+736E,U+7371,U+7373-7374,U+7376,U+7379,U+737D,U+737F,U+7381-7383,U+7385-7386,U+7388,U+738A,U+738C-738D,U+738F-7390,U+7392-7395,U+7397-739A,U+739C-739E,U+73A0-73A1,U+73A3-73A8,U+73AA,U+73AC-73AD,U+73B1,U+73B4-73B6,U+73B8-73B9,U+73BC-73BF,U+73C1,U+73C3-73C7,U+73CB-73CC,U+73CE,U+73D2-73D8,U+73DA-73DD,U+73DF,U+73E1-73E4,U+73E6,U+73E8,U+73EA-73EC,U+73EE-73F1,U+73F3-73FD,U+73FF-7402,U+7404,U+7407-7408,U+740B-740E,U+7411-7412;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./adc6605ce20eaa2eb86036670fd612b7.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+729C-729E,U+72A0-72A1,U+72A3-72A6,U+72A8-72AB,U+72AE,U+72B1-72B3,U+72B5,U+72BA-72BF,U+72C5-72C7,U+72C9-72CC,U+72CF,U+72D1,U+72D3-72D6,U+72D8,U+72DA-72DD,U+72DF,U+72E2-72E7,U+72EA-72EB,U+72F5-72F6,U+72FE-7300,U+7302,U+7304-7309,U+730B-730D,U+730F-7312,U+7314,U+7318,U+731A,U+731F-7320,U+7323-7324,U+7326-7328,U+732D,U+732F-7330,U+7332-7333,U+7335,U+733A,U+733C-733D,U+7340,U+7342-7343,U+7346-734C,U+734F,U+7351,U+7353-7356,U+7358-735F,U+7361-7362;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./31058b014fe147a3c1a3fda11ce6b0b6.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+71E8-71EC,U+71EF-71F3,U+71F5-71F8,U+71FA,U+71FD,U+71FF-7205,U+7207-720C,U+720E-720F,U+7211-721A,U+721C,U+721E-7227,U+7229,U+722B,U+722E-722F,U+7233-7234,U+723C,U+7241-7245,U+7249-724B,U+724E-7251,U+7253-7255,U+7257,U+725A,U+725C,U+725E,U+7260,U+7263-7265,U+7268,U+726A-726D,U+7270-7271,U+7273-7274,U+7276-7278,U+727B-727C,U+7282-7283,U+7285-7289,U+728C,U+728E,U+7290-7291,U+7293-7295,U+7297-729A;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./f185e629f014974bd39ec305ceda4af9.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+713F-7144,U+7146-7148,U+714B,U+714D,U+714F-7151,U+7153-7158,U+715A-715B,U+715D,U+715F-7161,U+7163,U+716A-716B,U+716D,U+716F-7171,U+7174-7177,U+7179,U+717B-717C,U+717E-7183,U+7185-7189,U+718B-718E,U+7190-7191,U+7193,U+7195-7196,U+719A-719E,U+71A1-71A7,U+71A9-71AB,U+71AD-71B0,U+71B2,U+71B4,U+71B6-71B8,U+71BA-71BD,U+71BF-71C0,U+71C2,U+71C4-71C7,U+71CA-71CD,U+71CF-71D1,U+71D3,U+71D6-71D8,U+71DA-71DB,U+71DD-71DE,U+71E1-71E4;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./4142cbb924aba7fa51056bd80d1ec6a5.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+7097-7098,U+709A-709B,U+709E-70AA,U+70B0,U+70B2,U+70B4-70B6,U+70BA,U+70BE-70BF,U+70C4-70C7,U+70C9,U+70CB-70CE,U+70D0-70D7,U+70DA,U+70DC-70DE,U+70E0-70E3,U+70E5,U+70EA,U+70EE,U+70F0-70F3,U+70F5-70F6,U+70F8,U+70FA-70FC,U+70FE-7108,U+710B-710F,U+7111-7112,U+7114,U+7117,U+711B-7120,U+7122-7125,U+7127-712E,U+7132-7135,U+7137-713E;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./f6894fc971d259d1e45d635def19bd05.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+6FEA,U+6FEC-6FED,U+6FF2-6FF9,U+6FFB,U+6FFD,U+6FFF-7004,U+7007-7008,U+700A,U+700C-700E,U+7010,U+7012-7014,U+7016-7017,U+7019,U+701C,U+701E,U+7021-7022,U+7024-7025,U+7029-7031,U+7033-7034,U+7036-7038,U+703A-703D,U+703F-7042,U+7045-704B,U+704D-704E,U+7050,U+7052-7057,U+7059-705C,U+705F-7062,U+7065-7068,U+706A,U+706E,U+7071-7074,U+7077,U+7079-707B,U+7081-7084,U+7086-7088,U+708B-708D,U+708F-7091,U+7093;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./13954fc954dab5f15971476847acd844.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+6F3C-6F3D,U+6F40,U+6F42-6F45,U+6F48-6F4A,U+6F4C,U+6F4E-6F50,U+6F52-6F53,U+6F55-6F57,U+6F5A,U+6F5D,U+6F5F-6F61,U+6F63,U+6F65,U+6F67-6F6C,U+6F71,U+6F73,U+6F75-6F76,U+6F79,U+6F7B,U+6F7D-6F7E,U+6F81-6F83,U+6F85,U+6F8A-6F8B,U+6F8F-6F96,U+6F98-6F9B,U+6F9D-6F9F,U+6FA2-6FA3,U+6FA5-6FA6,U+6FA8,U+6FAA-6FAD,U+6FAF-6FB0,U+6FB2,U+6FB4-6FB5,U+6FB7-6FB8,U+6FBA-6FBF,U+6FC4-6FC8,U+6FCA-6FD0,U+6FD3-6FD7,U+6FD9-6FDD,U+6FE2-6FE3,U+6FE5-6FE9;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./ed613af6b5d661cdce32ba2d54401f46.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+6E76-6E7D,U+6E80-6E82,U+6E84,U+6E87-6E88,U+6E8A-6E8E,U+6E91-6E95,U+6E97,U+6E99-6E9B,U+6E9E,U+6EA0-6EA1,U+6EA3-6EA4,U+6EA6,U+6EA8-6EA9,U+6EAC-6EAE,U+6EB0,U+6EB3,U+6EB5,U+6EB8-6EB9,U+6EBE-6EC0,U+6EC3,U+6EC6,U+6EC8-6ECA,U+6ECD,U+6ED0,U+6ED2,U+6ED6,U+6ED8-6ED9,U+6EDB-6EDD,U+6EE3,U+6EE7,U+6EEA-6EEB,U+6EED-6EEE,U+6EF0-6EF1,U+6EF3,U+6EF5-6EF6,U+6EFA-6EFD,U+6F00,U+6F03-6F05,U+6F07-6F08,U+6F0A-6F0E,U+6F10-6F12,U+6F16-6F19,U+6F1B-6F1F,U+6F21,U+6F25-6F28,U+6F2E,U+6F30,U+6F34,U+6F37,U+6F39-6F3B;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./74aa4903be1779277b5cfac259433130.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+6DB4,U+6DB6-6DB7,U+6DB9-6DBB,U+6DBD-6DBE,U+6DC1-6DC3,U+6DC8-6DCA,U+6DCD-6DD0,U+6DD2-6DD5,U+6DD7,U+6DDB-6DDC,U+6DDF,U+6DE2-6DE3,U+6DE7,U+6DE9,U+6DED,U+6DEF-6DF0,U+6DF2,U+6DF4,U+6DF8,U+6DFD-6E04,U+6E06-6E09,U+6E0B,U+6E0F,U+6E12-6E13,U+6E15,U+6E18,U+6E1C,U+6E1E-6E1F,U+6E22,U+6E27-6E28,U+6E2A,U+6E2E,U+6E30-6E31,U+6E33,U+6E35-6E37,U+6E39,U+6E3B-6E3D,U+6E3F-6E42,U+6E45-6E49,U+6E4B-6E4C,U+6E4F-6E52,U+6E55,U+6E57,U+6E59-6E5A,U+6E5C-6E5D,U+6E60-6E66,U+6E68-6E6A,U+6E6C-6E6D,U+6E70-6E75;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./49f6b328dfd49ecd0eb193fe9ff1ed0e.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+6CD8-6CDA,U+6CDC-6CDD,U+6CDF,U+6CE4,U+6CE6-6CE7,U+6CE9,U+6CEC-6CED,U+6CF2,U+6CF4,U+6CF9,U+6CFF-6D00,U+6D02-6D03,U+6D05-6D06,U+6D08-6D0A,U+6D0D,U+6D0F-6D11,U+6D13-6D16,U+6D18,U+6D1C-6D1D,U+6D1F-6D24,U+6D26,U+6D28-6D29,U+6D2C-6D2D,U+6D2F-6D30,U+6D34,U+6D37-6D38,U+6D3A,U+6D3F-6D40,U+6D42,U+6D44,U+6D49,U+6D4C,U+6D50,U+6D55-6D58,U+6D5B,U+6D5D,U+6D5F,U+6D61-6D62,U+6D64-6D65,U+6D67-6D68,U+6D6B-6D6D,U+6D70-6D73,U+6D75-6D76,U+6D7A-6D7B,U+6D7D-6D81,U+6D83-6D84,U+6D86,U+6D8A-6D8B,U+6D8D,U+6D8F-6D90,U+6D92,U+6D96-6D9A,U+6D9C,U+6DA2,U+6DA5,U+6DAC-6DAD,U+6DB0-6DB1,U+6DB3;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./fde916f1e4b33ad8cf5f2d48c091a12e.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+6BF0-6BF2,U+6BF4,U+6BF6-6BF8,U+6BFA-6BFC,U+6BFE,U+6C00-6C04,U+6C09-6C0B,U+6C0E,U+6C12,U+6C17,U+6C1C-6C1E,U+6C20,U+6C25,U+6C2D,U+6C31,U+6C36-6C37,U+6C39-6C3C,U+6C3E-6C3F,U+6C43-6C45,U+6C48,U+6C4B-6C4F,U+6C51-6C53,U+6C56,U+6C58-6C5A,U+6C62-6C63,U+6C65-6C67,U+6C6B-6C6F,U+6C71,U+6C73,U+6C75,U+6C77-6C78,U+6C7B-6C7C,U+6C7F-6C80,U+6C84,U+6C87,U+6C8A-6C8B,U+6C8D-6C8E,U+6C91,U+6C95-6C98,U+6C9A,U+6C9C-6C9E,U+6CA0,U+6CA2,U+6CA8,U+6CAC,U+6CAF-6CB0,U+6CB4-6CB7,U+6CBA,U+6CC0,U+6CC2-6CC3,U+6CC6-6CC8,U+6CCB,U+6CCD-6CCF,U+6CD1-6CD2;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./d64cbbb81e72087058d342c0037a8338.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+6B34-6B36,U+6B38,U+6B3B-6B3C,U+6B3F-6B42,U+6B44-6B45,U+6B48,U+6B4A-6B4B,U+6B4D-6B4F,U+6B51-6B58,U+6B5A-6B5E,U+6B60,U+6B68-6B69,U+6B6B-6B71,U+6B73-6B76,U+6B7A,U+6B7D-6B7E,U+6B80,U+6B85,U+6B88,U+6B8C,U+6B8E-6B91,U+6B94-6B95,U+6B97,U+6B99,U+6B9C-6B9D,U+6B9F-6BA0,U+6BA2-6BA3,U+6BA5-6BA9,U+6BAC-6BAD,U+6BB0-6BB1,U+6BB6,U+6BB8-6BB9,U+6BBB,U+6BBD-6BBE,U+6BC3-6BC4,U+6BC7-6BCA,U+6BCC,U+6BCE,U+6BD0-6BD1,U+6BD8,U+6BDA,U+6BDC-6BE0,U+6BE2-6BE9,U+6BEC-6BEE;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./43e90fb3a4c0e76c942669a3a2bdc623.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+6AA4-6AA8,U+6AAA,U+6AAD-6AB2,U+6AB4-6AB7,U+6AB9-6ABA,U+6ABC-6AC2,U+6AC4-6AD2,U+6AD4-6AD9,U+6ADC,U+6AE0-6AE4,U+6AE6,U+6AE9,U+6AED-6AF0,U+6AF2,U+6AF4-6AF7,U+6AF9-6AFA,U+6AFC-6B03,U+6B05-6B09,U+6B0B-6B0E,U+6B10-6B11,U+6B13-6B15,U+6B17-6B1D,U+6B1F,U+6B25-6B26,U+6B28-6B31,U+6B33;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./9d067bc04035e1ba03f5a54acc21f5e6.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+6A08-6A09,U+6A0B-6A12,U+6A14-6A16,U+6A1A-6A1D,U+6A20,U+6A22,U+6A24-6A27,U+6A29,U+6A2B-6A2E,U+6A30,U+6A32-6A34,U+6A36-6A37,U+6A3B-6A3C,U+6A3F-6A43,U+6A45-6A46,U+6A49-6A4A,U+6A4C-6A4F,U+6A51-6A57,U+6A5A,U+6A5C-6A5E,U+6A60,U+6A63-6A64,U+6A66-6A6A,U+6A6C-6A70,U+6A72-6A78,U+6A7A-6A7B,U+6A7D-6A7F,U+6A82-6A83,U+6A85-6A88,U+6A8A-6A8D,U+6A8F,U+6A92-6A93,U+6A95-6A96,U+6A98-6A9B,U+6A9D-6A9F,U+6AA1;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./09c64609faed9bb9ba7514e25e728a34.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+6964-6965,U+6967,U+6969-696A,U+696C,U+696F-6970,U+6972-6974,U+6976,U+697A-697B,U+697D-697F,U+6981,U+6983,U+6985,U+698A-698C,U+698E-6993,U+6996-6997,U+6999-699A,U+699D-69A6,U+69A9,U+69AC,U+69AF-69B0,U+69B2-69B3,U+69B5-69B6,U+69B8-69BA,U+69BC-69BE,U+69C0,U+69C2-69C9,U+69CF,U+69D1-69D2,U+69D5-69DA,U+69DC-69DE,U+69E1-69E6,U+69E9-69EC,U+69EE-69F1,U+69F4-69FC,U+69FE,U+6A00,U+6A03-6A04,U+6A06-6A07;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./213e90fe3a3ca970cb822522e2145072.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+68CC,U+68CE-68D1,U+68D3-68D4,U+68D9,U+68DB-68DE,U+68E1-68E2,U+68E4-68E6,U+68E8-68ED,U+68EF,U+68F3-68F4,U+68F6-68F8,U+68FB,U+68FD-6900,U+6902-6904,U+6906-690A,U+690C,U+6911,U+6913-691E,U+6921-6923,U+6925-692C,U+692E-692F,U+6931-6933,U+6935-6938,U+693A-693C,U+693E,U+6940-6941,U+6943-6949,U+694B-6952,U+6955-6956,U+6958-6959,U+695B-695C,U+695F,U+6961-6962;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./a4fa4d4fb04c38e3da37e00bca79745d.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+681F-6820,U+6822-6828,U+682B-6831,U+6834-6836,U+683A-683B,U+683F,U+6847,U+684B,U+684D,U+684F,U+6852,U+6856-685F,U+686A,U+686C-6873,U+6875,U+6878-6880,U+6882,U+6884,U+6887-688E,U+6890-6892,U+6895-6896,U+6899-689C,U+689E,U+68A0-68A1,U+68A3-68A5,U+68A9-68AC,U+68AE,U+68B1-68B2,U+68B4,U+68B6-68BF,U+68C1,U+68C3,U+68C5-68C8,U+68CA;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./96f4e7dcf6c58f5ee1baf9a70debbcb3.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+675B,U+675D,U+6762-6764,U+6766-6767,U+676B-676C,U+676E,U+6774,U+6776,U+6778-677B,U+677D,U+6780,U+6782-6783,U+6785-6786,U+6788,U+678A,U+678C-678F,U+6791-6794,U+6796,U+6799,U+679B,U+679F-67A1,U+67A4,U+67A6,U+67A9,U+67AC,U+67AE,U+67B1-67B2,U+67B4,U+67B9-67C0,U+67C2,U+67C5-67CE,U+67D5-67D7,U+67DB,U+67DF,U+67E1,U+67E3-67E4,U+67E6-67E8,U+67EA-67EB,U+67ED-67EE,U+67F2,U+67F6-67FC,U+67FE,U+6801-6804,U+6806,U+680D,U+6810,U+6812,U+6814-6815,U+6818-681C,U+681E;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./bbe8c7f0f4551bb519e859bea56d0b41.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+66B2-66B3,U+66B5-66B8,U+66BA-66BD,U+66BF-66C3,U+66C5-66C6,U+66C8,U+66CA-66D5,U+66D7-66D8,U+66DA,U+66DE-66DF,U+66E1-66E5,U+66E7-66E8,U+66EA-66EB,U+66ED-66EF,U+66F1,U+66F5-66F6,U+66FA-66FB,U+66FD,U+6701-6702,U+6704-6707,U+670C,U+670E-670F,U+6711-6713,U+6716,U+6718-671A,U+671C,U+671E,U+6720-6725,U+6729,U+672E,U+6730,U+6732-6733,U+6736-6739,U+673B-673C,U+673E-673F,U+6741,U+6744-6745,U+6747,U+674A-674B,U+674D,U+6752,U+6754-6755,U+6757-675A;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./4acc02207f1ed977e176cbb0744fccbf.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+6608-6609,U+660B,U+660D,U+6610-6612,U+6616-6618,U+661A-661C,U+661E,U+6621-6624,U+6626,U+6629-662C,U+662E,U+6630,U+6632-6633,U+6637-663B,U+663D,U+663F-6640,U+6644-6648,U+664A,U+664D-664E,U+6650-6651,U+6658-6659,U+665B-665C,U+665E,U+6660,U+6662-6663,U+6665,U+6667,U+6669-666D,U+6671-6673,U+6675,U+6678-6679,U+667B-667D,U+667F-6681,U+6683,U+6685-6686,U+668A-668B,U+668D-6690,U+6692-6695,U+6698-669C,U+669E-66A1,U+66A3-66A6,U+66A9-66AA,U+66AC-66AD,U+66AF-66B0;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./48367d09ab0faa3fd7d1ff9e8a1d7199.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+6552-6554,U+655A,U+655C,U+655F-6561,U+6564-6565,U+6567-656A,U+656D-656F,U+6571,U+6573,U+6576,U+6579-6581,U+6584-6586,U+6588-658A,U+658D-658F,U+6592,U+6594,U+6596,U+6598,U+659A,U+659D-659E,U+65A0,U+65A2-65A3,U+65A6,U+65A8,U+65AA,U+65AE,U+65B1-65B6,U+65B8,U+65BA-65BB,U+65BE-65C0,U+65C2,U+65C7-65CA,U+65CD,U+65D0-65D1,U+65D3-65D5,U+65D8-65DF,U+65E1,U+65E3-65E4,U+65EA-65EB,U+65F2-65F5,U+65F8-65F9,U+65FB-65FF,U+6601,U+6604-6605,U+6607;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./16a9afea3d4bb12e3de9b3ffb3a2bf1a.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+648C-648F,U+6494,U+6497-6498,U+649A-649D,U+64A0-64A2,U+64A6-64A8,U+64AA,U+64AF,U+64B1,U+64B4,U+64B6,U+64B9,U+64BD,U+64C3,U+64C6,U+64C8-64C9,U+64CC,U+64CF,U+64D1,U+64D3,U+64D5-64D6,U+64D9,U+64DB-64DD,U+64DF,U+64E1,U+64E3,U+64E5,U+64E7-64EB,U+64ED-64EE,U+64F3,U+64F5-64F6,U+64F8-64F9,U+64FD,U+64FF,U+6501-6503,U+6505,U+6507-6508,U+650A-650E,U+6510-6511,U+6513,U+6515,U+6517,U+651A,U+651E-6521,U+6526-6529,U+652D,U+6530-6533,U+6537,U+653A,U+653C-653D,U+6540-6544,U+6546-6547,U+654A-654B,U+654D-654E,U+6550;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./c6408d7fe430990b79311682be378c14.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+63E4-63E8,U+63EB-63EC,U+63EF-63F1,U+63F3,U+63F5,U+63F7,U+63F9-63FC,U+63FE,U+6403-6404,U+6406-640A,U+640E,U+6411-6412,U+6415,U+6418-641A,U+641D,U+641F,U+6422-6425,U+6427-6429,U+642B,U+642E-6433,U+6435,U+6437-6439,U+643B-643C,U+643E,U+6440,U+6442-6443,U+6449,U+644B-6450,U+6453,U+6455-6457,U+6459-645B,U+645D,U+6460-6466,U+6468,U+646A-646C,U+646E,U+6470-6472,U+6474-6475,U+6477,U+647C-6481,U+6483,U+6486,U+6489-648B;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./6c423687c18cd6be5b169633ff9d2da6.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+6326-6327,U+6329,U+632C-632E,U+6330-6331,U+6333-6338,U+633B-633C,U+633F-6341,U+6344,U+6347-6348,U+634A,U+6351-6354,U+6356-635D,U+6360,U+6364-6366,U+6368,U+636A,U+636C,U+636F-6370,U+6372-6375,U+6378-6379,U+637C-637F,U+6381,U+6385-6386,U+638B,U+638D,U+6391,U+6393-6395,U+6397,U+639A,U+639C-639F,U+63A4,U+63A6,U+63AB,U+63AF,U+63B1-63B2,U+63B5-63B6,U+63B9,U+63BB,U+63BD,U+63BF,U+63C1-63C3,U+63C5,U+63C7-63C8,U+63CA-63CC,U+63D1,U+63D3-63D5,U+63D7-63D9,U+63DC-63DD,U+63DF,U+63E2;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./b13f934309d533c2ece2b5386d237a9c.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+624F-6250,U+6255-6257,U+6259-625A,U+625C-6262,U+6264-6265,U+6268,U+6271-6272,U+6274-6275,U+6277-6278,U+627A-627B,U+627D,U+6281-6283,U+6285-6288,U+628B-6290,U+6294,U+6299,U+629C-629E,U+62A3,U+62A6-62A7,U+62A9-62AA,U+62AD-62B0,U+62B2-62B4,U+62B6-62B8,U+62BA,U+62BE,U+62C0-62C1,U+62C3,U+62CF,U+62D1,U+62D5,U+62DD-62DE,U+62E0-62E1,U+62E4,U+62EA-62EB,U+62F0,U+62F2,U+62F5,U+62F8-62FB,U+6300,U+6303-6306,U+630A-630D,U+630F-6310,U+6312-6315,U+6317-6319,U+631C;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./67089b7ce254605784678f76feeb45e6.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+6196-6199,U+619B-619C,U+619E-61A3,U+61A5-61A6,U+61AA,U+61AD,U+61AF-61B1,U+61B3-61B5,U+61B8-61BD,U+61BF-61C1,U+61C3-61C6,U+61CE-61D0,U+61D3,U+61D5-61DE,U+61E0-61E2,U+61E4-61E5,U+61E7,U+61E9-61F1,U+61F3-61F4,U+61F9,U+61FB,U+61FD,U+6201-6205,U+6209,U+6213,U+6219,U+621C-621E,U+6220,U+6223,U+6226,U+6228,U+622B,U+622D,U+622F,U+6231,U+6235,U+6238-623C,U+6242,U+6244-6246,U+624A;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./5af43d566732f148c3731c8825a69d86.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+60F8,U+60FC-60FF,U+6102-6105,U+6107,U+610A-610C,U+6110-6114,U+6116-6119,U+611D-611E,U+6121-6122,U+6125,U+6129-612A,U+612C-6133,U+6135-6136,U+6138-613D,U+6140-6147,U+6149,U+614F-6150,U+6152-6154,U+6156-6157,U+6159,U+615B-615C,U+615E,U+6160-6161,U+6164-6166,U+6169,U+616C-616D,U+616F,U+6171-6172,U+6174,U+6178-6181,U+6183-6189,U+618C-618D,U+618F,U+6193,U+6195;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./1be694dbf439efb92b682b25ddfe194a.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+6037-603A,U+603D-603E,U+6040,U+6044-6045,U+6047-604A,U+604C,U+604E-604F,U+6051,U+6053-6054,U+6056-6058,U+605B-605C,U+605E-6061,U+6066,U+606E,U+6071-6072,U+6074-6075,U+6077,U+607E,U+6080-6082,U+6086-6088,U+608A-608B,U+608E-6091,U+6093,U+6095,U+6097-6099,U+609C,U+609E,U+60A1-60A2,U+60A4-60A5,U+60A7,U+60A9-60AA,U+60AE,U+60B0,U+60B3,U+60B7,U+60B9-60BA,U+60BE-60C4,U+60C7-60C9,U+60CC-60D0,U+60D2-60D4,U+60D6-60D7,U+60D9,U+60DB,U+60DE,U+60E2-60E5,U+60EA,U+60F5,U+60F7;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./a823619ec0b7c4de017bd79369c65f11.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+5F75-5F76,U+5F78,U+5F7A,U+5F7D-5F7F,U+5F83,U+5F86,U+5F8D-5F8F,U+5F93-5F94,U+5F96,U+5F9A-5F9B,U+5F9D,U+5F9F,U+5FA2-5FA7,U+5FAB-5FAC,U+5FAF-5FB4,U+5FB6,U+5FB8,U+5FBA-5FBB,U+5FBE-5FC2,U+5FC7-5FC8,U+5FCA-5FCB,U+5FCE,U+5FD3-5FD5,U+5FDA-5FDC,U+5FDE-5FDF,U+5FE2-5FE3,U+5FE5-5FE6,U+5FE8-5FE9,U+5FEC,U+5FEF-5FF0,U+5FF2-5FF4,U+5FF6-5FF7,U+5FF9-5FFA,U+5FFC,U+6007-6009,U+600B-600C,U+6010-6011,U+6013,U+6017-6018,U+601A,U+601E-601F,U+6022-6024,U+602C-602E,U+6030-6034,U+6036;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./2f4c971d2b9a9a20a80cd4c5d3df8852.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+5EC0,U+5EC3,U+5EC5-5EC7,U+5ECB-5ED0,U+5ED4-5ED5,U+5ED7-5ED9,U+5EDC,U+5EDE,U+5EE4-5EE7,U+5EEB,U+5EED-5EF2,U+5EF5,U+5EF8-5EF9,U+5EFB-5EFD,U+5F05-5F07,U+5F09,U+5F0C-5F0E,U+5F10,U+5F14,U+5F16,U+5F19-5F1A,U+5F1C-5F1E,U+5F21-5F24,U+5F28,U+5F2B-5F2C,U+5F2E,U+5F30,U+5F32,U+5F34,U+5F36,U+5F38,U+5F3B,U+5F3D-5F3F,U+5F41-5F47,U+5F49-5F4B,U+5F4D,U+5F4F,U+5F51,U+5F54,U+5F59-5F5C,U+5F5E-5F60,U+5F63,U+5F67-5F68,U+5F6B,U+5F6E-5F6F,U+5F72,U+5F74;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./f7b00ccfdc98f0c5cdaa062fd05a33ed.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+5E07,U+5E09-5E0B,U+5E0D-5E0E,U+5E12-5E13,U+5E17,U+5E1E-5E24,U+5E28-5E2A,U+5E2C,U+5E2F-5E30,U+5E32,U+5E34-5E35,U+5E39-5E3A,U+5E3E-5E3F,U+5E41,U+5E46-5E4B,U+5E4D-5E53,U+5E56,U+5E59-5E5A,U+5E5C-5E5D,U+5E60,U+5E64-5E6A,U+5E6D-5E71,U+5E75,U+5E77,U+5E81-5E83,U+5E85,U+5E88-5E89,U+5E8C-5E8E,U+5E92,U+5E98,U+5E9B,U+5E9D,U+5EA1-5EA4,U+5EA8-5EAA,U+5EAC,U+5EAE-5EB2,U+5EB4,U+5EBA-5EBD,U+5EBF;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./eb5b1cb9e68b62530de880b98bed6d37.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+5D79-5D80,U+5D83,U+5D85-5D86,U+5D88-5D96,U+5D98,U+5D9A-5D9C,U+5D9E-5D9F,U+5DA1-5DA6,U+5DA8-5DB6,U+5DB9,U+5DBB,U+5DBE-5DC4,U+5DC6-5DCA,U+5DCC,U+5DCE-5DD1,U+5DD3,U+5DD5,U+5DD7-5DDA,U+5DDC,U+5DDF-5DE0,U+5DE3-5DE4,U+5DEA,U+5DEC-5DED,U+5DF5-5DF6,U+5DF8,U+5DFA-5DFC,U+5DFF-5E00,U+5E04;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./7a6db27961b27c1704b9ee30c8ac9b2c.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+5CF5,U+5CF7-5CFA,U+5CFC,U+5CFE-5D01,U+5D04-5D05,U+5D08-5D0C,U+5D0F-5D13,U+5D15,U+5D18-5D1A,U+5D1C-5D1D,U+5D1F-5D21,U+5D23,U+5D25,U+5D28,U+5D2A-5D2B,U+5D2F-5D33,U+5D35-5D3C,U+5D3F-5D46,U+5D48-5D49,U+5D4D-5D4F,U+5D51-5D57,U+5D59-5D5A,U+5D5C,U+5D5E-5D68,U+5D6A,U+5D6D-5D6E,U+5D70-5D73,U+5D75-5D78;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./3262b4a18db436acd016a3bf7e2889f5.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+5C5B,U+5C5D,U+5C5F,U+5C67,U+5C69-5C6B,U+5C6D,U+5C70,U+5C72-5C78,U+5C7B-5C7E,U+5C80,U+5C83-5C87,U+5C89-5C8B,U+5C8E-5C8F,U+5C92-5C93,U+5C95,U+5C9D-5CA0,U+5CA4-5CA8,U+5CAA,U+5CAE-5CB0,U+5CB2,U+5CB4,U+5CB6,U+5CB9-5CBC,U+5CBE,U+5CC0,U+5CC2-5CC3,U+5CC5-5CCA,U+5CCC-5CD1,U+5CD3-5CD8,U+5CDA-5CE0,U+5CE2-5CE3,U+5CE7,U+5CE9,U+5CEB-5CEC,U+5CEE,U+5CF1-5CF3;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./07841f0b7e244a231e1f7183d81700fe.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+5B8D-5B8E,U+5B90-5B92,U+5B94,U+5B96,U+5B9F,U+5BA7-5BA9,U+5BAC-5BAD,U+5BAF,U+5BB1-5BB2,U+5BB7,U+5BBA-5BBC,U+5BC0-5BC1,U+5BC3,U+5BC8-5BCB,U+5BCD-5BCF,U+5BD1,U+5BD4-5BDC,U+5BE0,U+5BE3,U+5BEA,U+5BED,U+5BEF,U+5BF1-5BF4,U+5BF7,U+5BFD-5BFE,U+5C00,U+5C02-5C03,U+5C05,U+5C0C,U+5C10,U+5C12-5C13,U+5C17,U+5C19,U+5C1B,U+5C1E-5C21,U+5C23,U+5C26,U+5C28-5C2B,U+5C2D-5C30,U+5C32-5C33,U+5C35-5C36,U+5C43-5C44,U+5C47,U+5C4C,U+5C52-5C54,U+5C56-5C58,U+5C5A;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./990987f863a7b98a9ddcdb294680cd3d.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+5AF7-5AF9,U+5AFB-5AFF,U+5B01-5B07,U+5B0A,U+5B0D-5B15,U+5B18,U+5B1A-5B20,U+5B22-5B23,U+5B25-5B29,U+5B2B-5B2F,U+5B31,U+5B33,U+5B35-5B36,U+5B39-5B3F,U+5B41-5B4B,U+5B4D-5B4F,U+5B52,U+5B56,U+5B5E,U+5B60-5B61,U+5B67-5B68,U+5B6D-5B6F,U+5B72,U+5B74,U+5B76-5B77,U+5B79,U+5B7B-5B7C,U+5B7E,U+5B82,U+5B86,U+5B8A;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./b41e97f92f2b49042a14c593fe4df4c3.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+5A7D-5A7E,U+5A80-5A91,U+5A93-5A99,U+5A9C-5AA6,U+5AA8-5AA9,U+5AAB-5AB1,U+5AB4,U+5AB6-5AB7,U+5AB9-5ABB,U+5ABF-5AC0,U+5AC3-5AC8,U+5ACA,U+5ACD-5AD1,U+5AD3,U+5AD5,U+5AD9-5ADB,U+5ADD-5ADF,U+5AE2,U+5AE4-5AE5,U+5AE7-5AE8,U+5AEA,U+5AEC-5AF0,U+5AF2-5AF4,U+5AF6;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./a9ea2c76ae4a0b7fc4bacf5abb16f573.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+59F8,U+59FA,U+59FC-59FE,U+5A00,U+5A02,U+5A0A-5A0B,U+5A0D-5A10,U+5A12,U+5A14-5A17,U+5A19-5A1A,U+5A1D-5A1E,U+5A21-5A22,U+5A24,U+5A26-5A28,U+5A2A-5A30,U+5A33,U+5A35,U+5A37-5A3B,U+5A3D-5A3F,U+5A42-5A45,U+5A47-5A48,U+5A4B-5A54,U+5A56-5A59,U+5A5B-5A61,U+5A63-5A65,U+5A68-5A69,U+5A6B-5A6C,U+5A6E-5A73,U+5A78-5A79,U+5A7B-5A7C;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./38455b6861aa4cbb6396832af53ef1c1.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+5966,U+5968,U+596B-596D,U+596F-5972,U+5975,U+5977,U+597A-597B,U+597E-5980,U+5985,U+5989,U+598B-598C,U+598E-5991,U+5994-5995,U+5998,U+599A-599C,U+599F-59A2,U+59A6-59A7,U+59AC-59AD,U+59B0-59B1,U+59B3-59B8,U+59BA,U+59BC-59BD,U+59BF-59C5,U+59C7-59C9,U+59CC,U+59CE-59CF,U+59D5-59D6,U+59D9,U+59DB,U+59DE-59E2,U+59E4,U+59E6-59E7,U+59E9-59EB,U+59ED-59F7;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./71f70a587e85fd408a09f026c54cad68.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+58C2-58C4,U+58C6,U+58C8-58CD,U+58CF-58D0,U+58D2,U+58D4,U+58D6-58D7,U+58DB-58DD,U+58E1,U+58E3,U+58E5-58E8,U+58EA,U+58ED,U+58F1-58F2,U+58F4-58F5,U+58F7-58F8,U+58FB-58FC,U+58FE-5901,U+5903,U+5905-5906,U+5908-590C,U+590E,U+5910-5913,U+5917-5918,U+591B,U+591D-591E,U+5921,U+5923,U+5926,U+5928,U+592C,U+5930,U+5932-5933,U+5935-5936,U+593B,U+593D,U+593F-5940,U+5943,U+5945-5946,U+594A,U+594C-594D,U+5952-5953,U+5959,U+595B-595F,U+5961,U+5963-5964;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./3bb49223f0d61de1d6576a0e4eaab536.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+5845-5849,U+584E,U+5850,U+5853,U+5855-5856,U+5859-585D,U+585F-5861,U+5863-5864,U+5866-586A,U+586D-5874,U+5876-5878,U+587A-587D,U+587F,U+5882,U+5884,U+5886-5888,U+588B-5891,U+5894-5898,U+589B,U+589D,U+58A0-58A7,U+58AA-58AD,U+58AF-58B2,U+58B4-58BB,U+58BD,U+58BF-58C0;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./c0d265da6ef3f46b5644bd1cdda226ac.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+57BF-57C1,U+57C4-57CA,U+57CC-57CD,U+57D0-57D1,U+57D3,U+57D6-57D7,U+57DB-57DC,U+57DE,U+57E2-57E3,U+57E5-57EC,U+57EE,U+57F0-57F3,U+57F5-57F6,U+57FB-57FC,U+57FE-57FF,U+5801,U+5803-5804,U+5808-5809,U+580C,U+580E-5810,U+5812-5814,U+5817-5818,U+581A-581C,U+581F,U+5822-5823,U+5825-5829,U+582B-582E,U+5832-5833,U+5836-5843;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./24e5b6f0788f1e83f4a9d74d40b20288.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+5726-5727,U+572B,U+5731-5732,U+5734-5738,U+573C-573D,U+573F,U+5741,U+5743-5746,U+5748-5749,U+574B,U+5752-5756,U+5758-5759,U+5762-5763,U+5765,U+5767,U+576C,U+576E,U+5770-5772,U+5774-5775,U+5778-577A,U+577D-5781,U+5787-578A,U+578D-5791,U+5794-579A,U+579C-579F,U+57A5,U+57A8,U+57AA,U+57AC,U+57AF-57B1,U+57B3,U+57B5-57B7,U+57B9-57BE;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./da02de9f042b50c10035c9e37bffda42.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+569C-56A2,U+56A4-56A5,U+56A7,U+56A9-56AE,U+56B0-56B2,U+56B5,U+56B8-56BB,U+56BD-56BF,U+56C3-56C4,U+56C6-56C7,U+56C9,U+56CB-56D0,U+56D2-56D3,U+56D5-56D6,U+56D8-56D9,U+56DC,U+56E3,U+56E5-56E9,U+56EC,U+56EE-56EF,U+56F2-56F3,U+56F6-56F8,U+56FB-56FC,U+5700-5702,U+5705,U+570C,U+570E-5711,U+5714-5715,U+5717,U+5719-571B,U+571D-571E,U+5720-5722,U+5724-5725;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./d8da784bd0a8feeaae441c43721e7ac4.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+5605,U+5607,U+560A-560B,U+5610-5613,U+5615,U+5619-561A,U+561D,U+5620-5622,U+5625-5626,U+5628-562B,U+5633,U+5637,U+563A,U+563C-563E,U+5640-564B,U+564F-5652,U+5655-5656,U+565A-565B,U+565E-565F,U+5661,U+5663,U+5667,U+566D-566E,U+5670,U+5673,U+5675,U+5677,U+5679-567A,U+567D-567F,U+5681-5684,U+5688-568B,U+568D,U+5690-5692,U+5694,U+5696-569B;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./bade2e66ef234064ce5d0b7a59c3cab6.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+555D,U+555F-5560,U+5562-5563,U+5568-5569,U+556B,U+556F-5574,U+5579-557A,U+557D,U+557F,U+5585-5586,U+558C-558E,U+5590,U+5592-5593,U+5595-5597,U+559B,U+559E,U+55A0-55A6,U+55A8-55A9,U+55AD,U+55AF-55B0,U+55B4,U+55B6,U+55B8,U+55BA,U+55BC,U+55BF-55C3,U+55C8,U+55CA-55CB,U+55CF-55D0,U+55D5,U+55D7-55D9,U+55DB,U+55DE,U+55E0,U+55E2,U+55E7,U+55ED-55EE,U+55F0-55F1,U+55F4,U+55F8-55FC,U+55FF,U+5602-5604;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./66aa62ca7d17d34ee9f5b2dcf6390f6a.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+54BE,U+54C3,U+54C5,U+54CA-54CB,U+54D6,U+54D8,U+54DB,U+54E0,U+54E2-54E4,U+54EB-54EC,U+54EF-54F1,U+54F4-54F9,U+54FB,U+54FE,U+5500,U+5502-5503,U+5505,U+5508,U+550A-550E,U+5512-5513,U+5515-551A,U+551C-551F,U+5521,U+5525-5526,U+5528-5529,U+552B,U+552D,U+5532,U+5534-5536,U+5538-553B,U+553D,U+5540,U+5542,U+5545,U+5547-5548,U+554B-554E,U+5551-5552,U+5554,U+5557-555B;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./66a4ab265ac7c98d56146d2036465deb.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+53FF-5400,U+5402,U+5405,U+5407,U+540B,U+5414,U+5418-541A,U+541C,U+5422,U+5424-5425,U+542A,U+5430,U+5437,U+543A,U+543D,U+543F,U+5441,U+5444-5445,U+5447,U+5449,U+544C-544F,U+5451,U+545A,U+545D-5461,U+5463,U+5465,U+5467,U+5469-5470,U+5474,U+5479-547A,U+547E-547F,U+5481,U+5483,U+5485,U+5487-548A,U+548D,U+5491,U+5493,U+5497-5498,U+549C,U+549E-54A2,U+54A5,U+54AE,U+54B0,U+54B2,U+54B5-54B7,U+54B9-54BA;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./ed8b3a7b104cab4293448aafc4ac9860.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+5342,U+5344,U+5346,U+534B-534D,U+5350,U+5358-5359,U+535B,U+535D,U+5365,U+5368,U+536A,U+536C-536D,U+5372,U+5376,U+5379,U+537C-537E,U+5380-5381,U+5383,U+5387-5388,U+538A,U+538E-5394,U+5396-5397,U+539B-539C,U+539E,U+53A0-53A1,U+53A4,U+53A7,U+53AA-53AC,U+53AF-53B1,U+53B3,U+53B5,U+53B7-53BA,U+53BC-53BE,U+53C0,U+53C5-53C7,U+53CE-53D0,U+53D2-53D3,U+53D5,U+53DA,U+53DC-53DE,U+53E1,U+53E7,U+53F4,U+53FA,U+53FE;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./28c6cba5fe14e5e1a4071b87a50a5538.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+52BC-52BD,U+52C0,U+52C2,U+52C4-52C6,U+52C8,U+52CA,U+52CC-52CF,U+52D1,U+52D3-52D4,U+52D7,U+52DA-52DC,U+52E0-52E1,U+52E3,U+52E5-52EF,U+52F2,U+52F4,U+52F6-52F7,U+52FC-52FD,U+5301-5304,U+5307,U+5309-530C,U+530E,U+5311-5314,U+5318,U+531B-531C,U+531E-531F,U+5322,U+5324-5325,U+5327-5329,U+532B-532C,U+5330,U+5332-5338,U+533C-533D;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./32ec7cc5b00865689322ef41ecb04fae.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+5226-5227,U+522C,U+522F,U+5231-5232,U+5234-5235,U+523C,U+523E,U+5245-5246,U+5248-5249,U+524B,U+524F,U+5252-5253,U+5255,U+5257-525A,U+525F-5260,U+5262-5264,U+5266,U+5268,U+526B-526D,U+5270-5271,U+5273,U+5276-527C,U+527E,U+5280,U+5284-5286,U+528B,U+528E-528F,U+5292,U+5294-529A,U+529C,U+52A4-52A7,U+52AE-52B0,U+52B4-52BB;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./11794fc02845e3ddb6ba7f8dbb2f269e.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+518E-5191,U+5193-5194,U+5198,U+519A,U+519D-519F,U+51A1,U+51A3,U+51A6-51A9,U+51AD-51AE,U+51B4,U+51B8-51BA,U+51BE-51BF,U+51C1-51C3,U+51C5,U+51C8,U+51CA,U+51CE,U+51D0,U+51D2-51DA,U+51DE-51DF,U+51E2-51E3,U+51E5-51EA,U+51EC,U+51EE,U+51F2,U+51F4,U+51F7,U+51FE,U+5204-5205,U+5209,U+520B-520C,U+520F-5210,U+5213-5215,U+521C,U+521E-521F,U+5221-5223;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./d9d2fd026d6d2af2a98dcde16e6a2f18.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+50FF,U+5101,U+5103,U+5105,U+510A,U+510C-510F,U+5111,U+5113,U+5116-511E,U+5120,U+5122-5129,U+512B-5131,U+5133-5136,U+5138-5139,U+513D-513E,U+5142,U+514A,U+514E-5150,U+5153,U+5158-5159,U+515B,U+515D-5161,U+5163-5164,U+5166,U+516A,U+516F,U+5172,U+517A,U+517E-517F,U+5183-5184,U+5186-5187,U+518B;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./682ac772448d941fc7d8c7eb3bcdb4f2.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+508F-5090,U+5092-5095,U+5097,U+509A-50A2,U+50A4,U+50A6,U+50AA-50AB,U+50AE,U+50B0-50B1,U+50B6,U+50B8-50B9,U+50BC-50BD,U+50BF-50C1,U+50C3-50C4,U+50C6-50C8,U+50CA-50CE,U+50D0,U+50D2-50D4,U+50D7-50D9,U+50DB-50DD,U+50DF-50E4,U+50E9-50EB,U+50EF-50F0,U+50F2,U+50F4,U+50F6-50F8,U+50FA,U+50FC-50FE;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./c759554bb4164f24a0787886b81713ef.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+502F-5039,U+503B,U+503D,U+503F-5042,U+5044-5046,U+504A-504B,U+504D,U+5050-5054,U+5056-5059,U+505B,U+505D-5064,U+5066-506B,U+506D-5073,U+5078-507A,U+507C-507D,U+5081-5084,U+5086-5087,U+5089-508C,U+508E;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./67b024cffa650240804b44b0bacb17b6.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4FB0-4FB4,U+4FB7-4FBE,U+4FC0,U+4FC2,U+4FC6-4FC9,U+4FCB-4FCD,U+4FD2-4FD6,U+4FD9,U+4FDB,U+4FE2,U+4FE4-4FE5,U+4FE7,U+4FEB-4FEC,U+4FF0,U+4FF2,U+4FF4-4FF7,U+4FF9,U+4FFB-4FFD,U+4FFF,U+5001-5005,U+5007-5008,U+500A,U+500E,U+5010,U+5013,U+5015-5017,U+501B,U+501D-501E,U+5020,U+5022-5024,U+5027;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./0ce6c7d642775c2c0dbefe5b4cb92839.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4F21,U+4F23,U+4F28-4F29,U+4F2C-4F2E,U+4F31,U+4F33,U+4F35,U+4F37,U+4F39,U+4F3B,U+4F3E-4F42,U+4F44-4F45,U+4F48-4F4C,U+4F52,U+4F56,U+4F61-4F62,U+4F66,U+4F68,U+4F6A-4F6B,U+4F6D-4F6E,U+4F71-4F72,U+4F75,U+4F77-4F7A,U+4F7D,U+4F80-4F82,U+4F85,U+4F87,U+4F8A,U+4F8C,U+4F8E,U+4F90,U+4F92-4F93,U+4F95,U+4F98-4F9A,U+4F9C,U+4F9E-4F9F,U+4FA1-4FA2,U+4FA4,U+4FAB,U+4FAD;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./2bcc55d56180a92455f9e8339783fabd.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4E80-4E81,U+4E83-4E85,U+4E87,U+4E8A,U+4E90,U+4E96-4E97,U+4E9C-4E9D,U+4EA3,U+4EAA,U+4EAF-4EB1,U+4EB4,U+4EB6-4EB9,U+4EBC-4EBE,U+4EC8,U+4ECC,U+4ECF-4ED0,U+4ED2,U+4EDA-4EDC,U+4EE0,U+4EE2,U+4EE6-4EE7,U+4EE9,U+4EED-4EEF,U+4EF1,U+4EF4,U+4EF8-4EFA,U+4EFC,U+4EFE,U+4F00,U+4F02-4F08,U+4F0B-4F0C,U+4F12-4F16,U+4F1C-4F1D;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./45ef6c160c008691f954e734a96f53a7.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+3032-303B,U+4E02,U+4E04-4E06,U+4E0F,U+4E12,U+4E17,U+4E20-4E21,U+4E23,U+4E29,U+4E2E-4E2F,U+4E31,U+4E33,U+4E35,U+4E37,U+4E3C,U+4E40-4E42,U+4E44,U+4E46,U+4E4A,U+4E51,U+4E55,U+4E57,U+4E5A-4E5B,U+4E62-4E65,U+4E67-4E68,U+4E6A-4E6F,U+4E72,U+4E74-4E7D,U+4E7F;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./b3363542c3058751c70fbe58659d3b9f.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+25E6-25EB,U+25EF,U+25F6,U+266D,U+266F,U+26A0-26A1,U+2713,U+2715,U+2717,U+2736,U+276E-2771,U+2794,U+279C-279E,U+27C5-27C6,U+27DC,U+27E6-27EB,U+27F5-27F7,U+2916,U+294A,U+2987-2988,U+2A00,U+2A05-2A06,U+2B58,U+3003,U+3005-3007,U+301A-301C,U+3021-3029,U+3031;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./2e73c13d8516165a3f3093033128c931.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+2587-25A1,U+25AA-25AB,U+25B2-25CC,U+25CE,U+25D4-25D5;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./89f4f3e277f3df922082c00521b9ba1b.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+254F-2586;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./daab430f002ab4e78185fadce2eab87d.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+2519-254E;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./de91c1b6ebb5830d91bf358e28ede88e.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+21AA,U+21AD,U+21B0-21B3,U+21BE,U+21C4,U+21C6,U+21C9,U+21D0-21D4,U+21DA-21DB,U+21DE-21DF,U+21E4-21EA,U+2212,U+2501-2518;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./bb70dfa25ebf4f4324f201490c2a8748.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+2078-207A,U+207C,U+2080-2089,U+20AC,U+20B9-20BA,U+20BD,U+20BF,U+2103,U+2109,U+2113,U+2116,U+2122,U+212E,U+2140,U+218A-218B,U+2190-2199,U+219D-219E,U+21A0,U+21A2-21A7,U+21A9;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./ef4b80fb0267b97fa2abeca9f3e9ca17.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+1EE9-1EF9,U+2001,U+200B,U+2010,U+2016,U+201A-201B,U+201E-2021,U+2024,U+2030,U+2032-2034,U+2039-203A,U+203D-203F,U+2044-2046,U+2070,U+2074-2077;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./e9b5e71504f7b303d4350c57372fbc5e.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+1EC0-1EE8;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./46524f7fa2ae6d7b5e5e849c820e5e2c.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+1E83-1E85,U+1E9E,U+1EA0-1EBF;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./ac87e5a737769b5fe793019cb91fe13f.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+0,U+300-304,U+306-30C,U+30F,U+312,U+31B,U+323,U+325-328,U+336-338,U+AEA,U+1E80-1E82;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./2964e054ee1212397558b075ba5e5a7b.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+FEFF;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./28de601bbef4be64518c407ec97210e4.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+30DD-30FA,U+30FC-30FF;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./658c70111918afb2ed3dd4da876d44f8.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+30A1-30DC;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./ec68fc96c581aa30d454d2ee153539be.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+306A-3096,U+3099-309B,U+309D-30A0;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./e5ef59ab598fb2a14568d875c55f202e.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+3041-3069;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./8755b83d33e82d8c5ee33dea60b0cc64.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+5244,U+5666,U+568C,U+58DA,U+5C68,U+5E58,U+5F33,U+61CD,U+6214,U+6516,U+69E7,U+6BFF,U+7020,U+7044,U+7798,U+78FD,U+7E6F-7E70,U+802E,U+8079,U+8183,U+8464,U+861E,U+8811,U+8A92,U+8B56,U+8CB0,U+8CD5,U+8CE7,U+8E93,U+8EA6,U+8EE4,U+8F62,U+9233,U+92DD,U+9301,U+9307,U+9346,U+9370,U+93AA,U+93F7,U+940B,U+9412,U+9426,U+958C,U+95AB,U+95BD,U+95BF,U+986C,U+9A2D,U+9A38,U+9B9A,U+9BEB,U+9BF4,U+9C12,U+9C20,U+9C35,U+9C37,U+9D1D,U+9DA5,U+9F60;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./d6dd12d8c75af4411fdd29eef80e1929.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+532D,U+53B4,U+54BC,U+5672,U+56C5,U+5B4C,U+5DF9,U+649F,U+6504,U+68D6,U+69BF,U+6AEB,U+6AF3,U+6E5E,U+736B,U+7380,U+7A6D,U+7AB6,U+7C5C,U+7D32,U+7DF6,U+7E0B,U+7E62,U+8264,U+826B,U+8546,U+85F6,U+87EF,U+89AF,U+89BF,U+8A01,U+8A84,U+8AD7,U+8B7E,U+8F05,U+8F07,U+923D,U+9255,U+929A,U+92B1,U+92E6,U+92F6,U+9306,U+9308,U+9364,U+9369,U+9384,U+93BF,U+93C7,U+9414,U+9428,U+9479,U+95E5,U+9689,U+97BD,U+97DD,U+9859,U+993C,U+99D8,U+9A0D,U+9A42,U+9B9E,U+9BDD,U+9C29,U+9C5D,U+9D2F,U+9D42,U+9E0C,U+9E7A,U+9EF2;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./5f31fb39efc33e88b8af763cbb5f8874.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+50B4,U+50E8,U+56B3,U+5852,U+5B24,U+5D2C,U+5E6C,U+5F12,U+6AE7,U+6F77,U+736A,U+7649,U+79B0,U+7C6A,U+7D06,U+7DC4,U+7DD9,U+7DE6,U+7DF9,U+7E11,U+7E36,U+7E52,U+7E8A,U+7F8B,U+8156,U+8161,U+8452,U+8526,U+8558,U+8577,U+859F,U+86FA,U+8806,U+89A1,U+89F6,U+8A75,U+8B9E,U+8DB2,U+8E60,U+8EFA,U+8F0A,U+91D9,U+92DF,U+92E3,U+944A,U+98EB,U+9931,U+9933,U+9937,U+99D4,U+9A36,U+9A4F,U+9BAA,U+9C08,U+9C3E,U+9C5F,U+9C6D,U+9D1F,U+9D6F,U+9D87,U+9D93,U+9D98,U+9DBC,U+9DDA,U+9DE5,U+9DEF,U+9ECC,U+9F09,U+9F4F;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./274cf4d6f6408907b7e2f818c54c5e1b.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+5110,U+51AA,U+528C,U+52F1,U+5969,U+6192,U+61AE,U+61DF,U+6207,U+6451,U+69AA,U+6A48,U+6FFC,U+700B,U+7027,U+7197,U+7602,U+761E,U+7667,U+76B8,U+7C69,U+7CDD,U+7CF4,U+7D07,U+7D86,U+7E2D,U+7E32,U+7F86,U+81DA,U+81E0,U+851E,U+8552,U+8562,U+87E3,U+8949,U+8AD1,U+8B6B,U+8B8E,U+8D10,U+8EF9,U+91C3,U+9201,U+9225,U+92A9,U+92CF,U+931F,U+9343,U+9387,U+93F9,U+9420,U+9465,U+980F,U+9862,U+994A,U+995C,U+9B83,U+9B92,U+9BC1,U+9C39,U+9C67,U+9C7A,U+9D30,U+9D53,U+9D5C,U+9DE6,U+9EF7,U+9F4E,U+9F54,U+9F59;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./4068825d49e4a2b838b38c93689beb82.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+50C9,U+5274,U+5638,U+56A6,U+5ABC,U+5B2A,U+5D81,U+5DF0,U+5EE1,U+6128,U+6227,U+6898,U+6ADE,U+6F59,U+6FA9,U+7026,U+733B,U+74A6,U+766D,U+7725,U+7868,U+7BCB,U+7CF2,U+7CF6,U+7CF9,U+7D83,U+7D88,U+7DC7,U+7DE1,U+7DF1,U+863A,U+8810,U+8933,U+895D,U+8A58,U+8A7F,U+8A86,U+8ACF,U+8AFC,U+8CB2,U+8CFE,U+8E92,U+8EDB,U+8F61,U+9283,U+92A0,U+92F1,U+9312,U+9340,U+93CD,U+93DD,U+946D,U+979D,U+9807,U+980A,U+98AE,U+98E0,U+9A05,U+9AD5,U+9B4E,U+9BC0,U+9BEA,U+9C23,U+9C28,U+9C33,U+9D52,U+9DD9,U+9F34;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./1ae17181e46d1b797bc6c40bec2bbd6c.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+5635,U+5B00,U+5B19,U+5E43,U+616A,U+6173,U+651B,U+6ADD,U+6AE8,U+6AF8,U+6B7F,U+6C0C,U+74D4,U+78B8,U+7C00,U+7DB0,U+7E35,U+7E7E,U+7E98,U+8494,U+84EF,U+84F4,U+84FD,U+889E,U+8A4E,U+8A91,U+8AC2,U+8ADE,U+8AE1,U+8B59,U+8B92,U+8B96,U+8CFB,U+8D04,U+8F1C,U+90DF,U+91D5,U+9227,U+9230,U+9248,U+9266,U+927F,U+92A3,U+92A6,U+92AA,U+931B,U+9338,U+93A6,U+93A9,U+93CC,U+9413,U+943F,U+944C,U+9454,U+95BC,U+95C8,U+97C9,U+9826,U+98BC,U+99D1,U+9B90,U+9BC7,U+9BD6-9BD7,U+9BE1,U+9C13,U+9DF3,U+9F5C;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./7c8ba46493768e445461c297880cd295.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+5000,U+5114-5115,U+5399,U+53C4,U+55F6,U+5665,U+566F,U+581D,U+584F,U+58E2,U+61E8,U+645C,U+6476,U+6894,U+6B0F,U+6B5F,U+6FAE,U+7341,U+7658,U+7906,U+7C1E,U+7D3C,U+7D4E,U+7D5D,U+7D9E,U+7DA3,U+802C,U+8407,U+8541,U+8555,U+87BB,U+8A6C,U+8A9A,U+8AE2,U+8B05,U+8B9C,U+8E55,U+9136,U+91D3,U+91E4,U+91F7,U+9204,U+926D,U+92E8,U+92EE,U+93C3,U+93E8,U+9403,U+9419,U+9582,U+95C3,U+95D0,U+984E,U+9853,U+9908,U+99D9,U+9A43-9A44,U+9B29,U+9B74,U+9BFF,U+9D07,U+9DC0,U+9DF8,U+9EFD,U+9EFF;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./057517f32b0459f124469d101296267c.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4FC1,U+5096,U+526E,U+56C8,U+5816,U+5D0D,U+614D,U+64FC,U+6A81,U+6A89,U+6BA4,U+7032,U+7162,U+743A,U+7646,U+7670,U+7864,U+78E7,U+7B67,U+7BF3,U+7D3F,U+7E1E,U+8435,U+85CE,U+85EA,U+87F6,U+8A0C,U+8AB6,U+8B95,U+8CBA,U+8E91,U+8E95,U+8EEB,U+8F1E,U+8F26,U+8F33,U+8F54,U+9134,U+91C5,U+91D4,U+91E7,U+9239,U+92AB,U+9477,U+95B6,U+95B9,U+95CB,U+97D9,U+9873-9874,U+98ED,U+9949,U+99E2,U+9B2E,U+9B58,U+9B8E,U+9BAB,U+9BE2,U+9C09,U+9C45,U+9DBB,U+9DC2,U+9E15,U+9E1D,U+9F6A,U+9F76-9F77;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./f5e8bdcdf12c71607bf4a552d2d4793d.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+5108,U+528A,U+565D,U+56B6,U+56C0-56C1,U+58D9,U+5B21,U+5EE9,U+613E,U+6229,U+690F,U+6A05,U+6AA3,U+6AEC,U+6B1E,U+6BAE,U+6DE5,U+6F35,U+6F7F,U+716C,U+7296,U+74DA,U+7664,U+7669,U+7A61,U+7D08,U+7D3A,U+7D5B,U+7DB9,U+7E0A,U+7E1F,U+7FB6,U+861A,U+875F,U+8784,U+87C8,U+89F4,U+8A10,U+8ADB,U+8AE4,U+8B04,U+8B16,U+8CB3,U+8ED4,U+8F42,U+8F64,U+9015,U+9090,U+9200,U+923F,U+9278,U+927A,U+9319,U+958E,U+9768,U+980E,U+9865,U+994C,U+9A16,U+9ACF,U+9BAD,U+9C48,U+9CE7,U+9D06,U+9F66;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./a0b7843f0031b62bfe5cd132534a9def.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+50AF,U+513B,U+584B,U+58CE,U+5950,U+5AA7,U+5B0B,U+5CF4,U+5DA0,U+64A3,U+64C4,U+66D6,U+69E8,U+6A9C,U+6AD3,U+6AF1,U+6B9E,U+6C2C,U+6C33,U+7028,U+7043,U+7069,U+7319,U+74A3,U+75FE,U+77BC,U+78E3,U+7D02,U+7D13,U+7D15,U+7E88,U+858C,U+8604,U+8998,U+89B2,U+8A41,U+8AA5,U+8B2B,U+8CDA,U+8E9A,U+8EA1,U+8EA5,U+91F9,U+9210-9211,U+922E,U+9238,U+924D,U+925E,U+92BC,U+92C3,U+9358,U+93B0,U+93B5,U+93D1,U+993F,U+9948,U+9962,U+9BDB,U+9BE7,U+9C25,U+9D9A,U+9F5F,U+9F67,U+9F6C;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./6368c28fbb075cdcefdc4fcd366f2596.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+561C,U+5707,U+5DA7,U+5DCB,U+5EC4,U+60FB,U+61E3,U+636B,U+64B3,U+6AEA,U+6F1A,U+71DC,U+7370,U+76B0,U+7C23,U+7DBE,U+7DCB,U+7DF2,U+7E39,U+81CF,U+82BB,U+83A2,U+866F,U+8706,U+8831,U+8960,U+8964,U+89A6,U+89AC,U+8A03,U+8A15-8A16,U+8A85,U+8ACD,U+8AED,U+8E4C,U+8E89,U+9106,U+91F5,U+9245,U+9315,U+9347,U+93A7,U+93DC,U+9481,U+95AC,U+97C3,U+9821,U+9837,U+98F4,U+9A41,U+9A64,U+9BE4,U+9BF0,U+9C0D,U+9C31,U+9C56,U+9C78,U+9CF6,U+9D23,U+9DD3,U+9DF2,U+9E1B,U+9EA9,U+9F95;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./ac8055bb6d749eef9ee873fdec5355ac.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+50C2,U+5137,U+57E1,U+58E0,U+5AD7,U+5B08,U+60F2,U+615F,U+616B,U+61CC,U+64EF,U+689F,U+6ADF,U+6FA0,U+7005,U+71F4,U+763B,U+7931,U+7A4C,U+7D31,U+7D40,U+7DD7-7DD8,U+8075,U+83A7,U+87C4,U+87CE,U+8814,U+8938,U+893B,U+8A46,U+8A52,U+8A5B,U+8B14,U+8B3E,U+8B4E,U+8CC5,U+8EAA,U+8EF2,U+8EFB,U+9148,U+92EF,U+9341,U+93A3,U+9410,U+9427,U+9463,U+95DE,U+9658,U+973D,U+9744,U+97DE,U+981C,U+9870,U+98B6,U+9909,U+9911,U+9A0F,U+9A2E,U+9C2D,U+9C52,U+9CE9,U+9D6A,U+9D89;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./b7d2da9786088eb8e7112198ea74a3fe.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+5504,U+560D,U+5660,U+5680,U+5695,U+56A8,U+580A,U+597C,U+5B7F,U+6134,U+61AB,U+61FA,U+64BB,U+6506,U+6523,U+66B1,U+66C7,U+6D79,U+6DF6,U+72FD,U+75D9,U+765F,U+78AD,U+7A1F,U+7C5F,U+7E09,U+8594,U+85BA,U+8768,U+8823,U+8A36,U+8A61,U+8A70,U+8AEB,U+8AF6,U+8D17,U+91D2,U+9249,U+92C7,U+92E5,U+9354,U+937A,U+9398,U+93E4,U+93F5,U+943A,U+9460,U+95AD,U+95D4,U+9742,U+975A,U+98AF,U+98C6,U+98C8,U+98E9,U+991B,U+991E,U+9AD6,U+9B81,U+9BCA,U+9BFD,U+9D61,U+9E1A;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./e26aedda2c726ffbcfd8403480615f66.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+513A,U+55C7,U+55E9,U+5630,U+5AF5,U+5B38,U+5DB8,U+619A,U+6384,U+64FB,U+6A62,U+6ECE,U+6F6F,U+705D,U+71FC,U+71FE,U+7258,U+729B,U+72A2,U+7515,U+79C8,U+7C2B,U+7C6E,U+7CC9,U+7DAC,U+7E10,U+7E6E,U+7F4C,U+849E,U+8622,U+8778,U+87A2,U+89B7,U+8A1B,U+8B01,U+8CC1,U+8CE1,U+8E7A,U+8EFE,U+8F45,U+8FAE,U+913A,U+91E9,U+91FA,U+9208,U+925A,U+9262,U+926C,U+92A5,U+92BB,U+9376,U+942E,U+9432,U+947E,U+95A1,U+9766,U+9830,U+9957,U+995E,U+9A2B,U+9A4D,U+9AAF,U+9F72;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./5dbd8695a588f61d521215e596dcc0a8.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4F47,U+5102,U+5157,U+562E,U+5879,U+5ACB,U+5C5C,U+5D22,U+5D97,U+5EDD,U+60B5,U+611C,U+64F7,U+66C4,U+6ADA,U+6B12,U+6BAB,U+70F4,U+71C9,U+7489,U+750C,U+766C,U+769A,U+792B-792C,U+7B8B,U+7C0D,U+7D73,U+7E1D,U+81BE,U+8477,U+84C0,U+854E,U+85FA,U+86FB,U+8956,U+8A6D,U+8B10,U+8B28,U+8D05,U+8F46,U+91C1,U+920D,U+9237,U+9251,U+9291,U+92CC,U+93E2,U+9586,U+958F,U+95CC,U+95D5,U+9839,U+99DF,U+99ED,U+9A3E,U+9A6A,U+9C54,U+9D1B,U+9D26,U+9D60,U+9DA9;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./8278bb5d35b72a2e6e3b683f5846d5d2.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+513C,U+55C6,U+5616,U+5653,U+56EA,U+59CD,U+5D87,U+6137,U+615A,U+645F,U+6519,U+6AB3,U+6AB8,U+6EF8,U+6F97,U+6FD8,U+737A,U+737C,U+744B,U+74CF,U+7627,U+792A,U+79B1,U+7E45,U+7E93,U+811B,U+81CD,U+858A,U+8A6B,U+8A6E,U+8A7C,U+8AB9,U+8AFA,U+8B17,U+8B4F,U+8CD2,U+8D16,U+8E63,U+8E8A,U+8EFC,U+9114,U+9116,U+9183,U+9296,U+92AC,U+932E,U+93A2,U+93D7-93D8,U+9912,U+993E,U+9943,U+99B1,U+9A40,U+9A5B,U+9B22,U+9BC9,U+9C58,U+9D51,U+9DFA,U+9E1E;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./4b322588125dc09d1d09f6ceef3ca730.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4E99,U+50E5,U+55B2,U+55DA,U+58AE,U+5AFA,U+5DD4,U+6473,U+64F0,U+6595,U+67F5,U+69F3,U+6C08,U+6E19,U+6EF7,U+6F2C,U+6F41,U+6FFA,U+7377,U+74BD,U+760D,U+798E,U+7BE4,U+7C6C,U+7D1C,U+7D46,U+7E43,U+7F88,U+85F9,U+880D,U+8A25,U+8AC9,U+8ADC,U+8AE6,U+8AF3,U+8B2C,U+8B33,U+8D0D,U+8F12,U+8F25,U+923E,U+9257,U+9293,U+92E4,U+9365,U+936C,U+93AC,U+93B3,U+93DE,U+942B,U+990C,U+9921,U+99B4,U+9A65,U+9B77,U+9BE8,U+9D15,U+9D72,U+9DAF,U+9DD7;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./752cfa51b1b6a30d8cd7a67c57918f85.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+51DC,U+5862,U+5A6D,U+5BE2,U+5DD2,U+5FA0,U+618A,U+633E,U+6583,U+6727,U+6968,U+6ADB,U+6AE5,U+6D87,U+7006,U+7018,U+71BE,U+71C1,U+743F,U+7647,U+7662,U+7672,U+76DE,U+79BF,U+7ABA,U+7D33,U+7D79,U+7DBB,U+7DBD,U+7DDE,U+7E08,U+7E55,U+7E5A,U+7E7D,U+82E7,U+8805,U+8A63,U+8AA3,U+8AA8,U+8AC4,U+8CD1,U+8CE4,U+8F3E,U+8F4D,U+9087,U+923A,U+92A8,U+92F8,U+9433,U+9594,U+95A8,U+9695,U+96CB,U+97DC,U+98EA,U+9903,U+9A01,U+9A62,U+9C32,U+9C77;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./83914620f3cf28409388adb38f8c80a8.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+5436,U+562F,U+56C2,U+5A41,U+5B0C,U+5C37,U+5E57,U+6190,U+61FE,U+63C0,U+6417,U+64BF,U+64F2,U+6522,U+66E0,U+6A3A,U+6AFB,U+6B16,U+6BAF,U+6BB2,U+6D36,U+6F23,U+7064,U+7152,U+71ED,U+7469,U+7613,U+7681,U+76BA,U+786F,U+7A08,U+7AC4-7AC5,U+7D09,U+7D62,U+7DBA,U+7FF9,U+8466,U+879E,U+896A,U+8A1D,U+8AF7,U+8B0A,U+8CBD,U+8CCA,U+8F1F,U+91D7,U+9328,U+93DF,U+9438,U+991A,U+9945,U+99AD,U+99D2,U+99FF,U+9A4A,U+9BD4,U+9C3B,U+9D09;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./3a064ae3aff4e57a33d1b232d0abc1d1.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4FE0,U+50AD,U+555E,U+5687,U+582F,U+589C,U+5DBC,U+646F,U+647B,U+6493,U+64BE,U+64F1,U+6953,U+6BC6,U+6FF0,U+701D,U+7192,U+71D9,U+720D,U+760B,U+766E,U+775C,U+779E,U+78EF,U+7A62,U+7AAA,U+7B8F,U+7C3E,U+7D8F,U+7DB8,U+7DDD,U+7E37,U+7E46,U+7E6D,U+7FA8,U+8073,U+807E,U+852D,U+8588,U+8993,U+8AF1,U+8B41,U+8B74,U+8EC0,U+9132,U+919E,U+9318,U+931A,U+9320,U+938A,U+9472,U+96B4,U+96DB,U+986B,U+99DD,U+99F1,U+9C49,U+9D3F;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./e4f5a1e71029dbb38eef5f8b2a5555e9.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+5006,U+5109,U+52F3,U+58FA,U+5D50,U+5D84,U+5E40,U+5EC1-5EC2,U+5EEC,U+61C7,U+6514,U+665D,U+68D7,U+6ECC,U+6F87,U+7015,U+701F,U+7165,U+71E6,U+7345,U+7464,U+7671,U+775E,U+77DA,U+7B4D,U+7DEC,U+7E8F,U+8076,U+8525,U+856A,U+8836,U+8932,U+8AD2,U+8B5A,U+8C48,U+8CC2,U+8CC4,U+8CED,U+8D13,U+8D1B,U+8E8B,U+8ECB,U+8ED2,U+8F4E,U+9112,U+91E3,U+9214,U+921E,U+925B,U+947C,U+95BB,U+95BE,U+95D6,U+9952,U+9B91,U+9F94;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./65497ba805531dd7d0a5349caead373e.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4FB6,U+50D5,U+524E,U+5331,U+58B3,U+5F65,U+60BD,U+650F,U+652A,U+652C,U+65AC,U+6689,U+6B3D,U+6E4A,U+6EC4,U+6F80,U+703E,U+746A,U+74CA,U+7A4E,U+7AAF,U+7AC7,U+7C72,U+7D68,U+7DB4,U+7E61,U+7FA5,U+81A9,U+81BF,U+863F,U+865C,U+87EC,U+8A23,U+8A60,U+8AA1,U+8ABC,U+8B0E,U+8CA9,U+8CDC,U+91AC,U+9215,U+9226,U+9234,U+92C5,U+9310,U+9333,U+934D,U+95A9,U+9824,U+9871,U+98E2,U+9913,U+99AE,U+9A55,U+9D6C,U+9F4B,U+9F9C;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./b19c9bd6f7bd62a63ed7e30761824cc5.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+5098,U+5614,U+58BE,U+5BF5,U+5C4D,U+5C62,U+5E25,U+6065,U+61A4,U+6488,U+6582,U+6688,U+68E7,U+68F2,U+6ABB,U+6DEA,U+6E26,U+6EEC,U+6F51,U+7051,U+71FB,U+7463,U+7621,U+7D5E,U+7D81,U+7DA2,U+7DE0,U+7DEF,U+7E1B,U+7E79,U+8123,U+834A,U+856D,U+87FB,U+881F,U+883B,U+8A54,U+8B19,U+8B20,U+8CAF,U+8CC8,U+919C,U+91C0,U+9240,U+927B,U+9382,U+93FD,U+947F,U+9803,U+980C,U+98C4,U+9905,U+9A37,U+9C57,U+9D28,U+9E79;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./c5146b13f1bf80941841348cca7d0dac.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4F96,U+50D1,U+5147,U+525D,U+53AD,U+53B2,U+5442,U+559A,U+588A,U+58D8,U+599D,U+5CA1,U+5E5F,U+5EDA,U+6158,U+61F6,U+6399,U+64B2,U+6524,U+66EC,U+6A01,U+6A1E,U+6E3E,U+6F86,U+6FC1,U+6FE4,U+700F,U+7058,U+72A7,U+7661,U+77EF,U+7C60,U+7CB5,U+7CDE,U+7D17,U+8332,U+8606,U+860B,U+8766,U+896F,U+8C4E,U+8C54,U+8C9E,U+8CFA,U+8F5F,U+91D8,U+9264,U+9470,U+9598,U+9811,U+99C1,U+9B27,U+9D5D,U+9DB4,U+9DF9;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./26a0979c576b411afbd5e763f7b6991d.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4E1F,U+5075,U+50F1,U+52F8,U+55AC,U+56D1,U+58DF,U+5A1B,U+5DBD,U+5EC8,U+60B6,U+60F1,U+62CB,U+64E0,U+68DF,U+69D3,U+6AC3,U+6DDA,U+6DF5,U+6FF1,U+7009,U+721B,U+7344,U+7375,U+7587,U+797F,U+7AC8,U+7ACA,U+7D21,U+7DBF,U+7E69,U+7F75,U+7F77,U+8070,U+8396,U+84BC,U+84EE,U+860A,U+8A95,U+8CB6,U+8CC0,U+8F3F,U+905C,U+9298,U+92B3,U+92F0,U+932B,U+95E2,U+97CB-97CC,U+985B,U+99B3,U+9D3B,U+9EF4;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./4e1667302f163eb042e05baa74b98445.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+51F1,U+528D,U+52FB,U+53E2,U+58E9,U+5CFD,U+5DBA,U+5E33,U+5EDF,U+6085,U+61FC,U+6200,U+64CB,U+651C,U+6A38,U+6EFE,U+6F70,U+6FEB,U+723A,U+72F9,U+7336,U+76E7,U+798D,U+79AA,U+7AA9,U+7BE9,U+7C43,U+7E9C,U+81D8,U+81E5,U+8259,U+840A,U+8523,U+8667,U+8A87,U+8AA6,U+8C93,U+8CAA,U+8F29,U+9059,U+9209,U+92C1,U+9326,U+934B,U+947D,U+9583,U+95A5,U+9727,U+98FC-98FD,U+9A0E,U+9CF3,U+9F90;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./294af16d685644e581e333d1f072d420.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+50DE,U+514C,U+51CD,U+522A,U+52C1,U+5606,U+5674,U+593E,U+5B30,U+5F4C,U+5F4E,U+6182,U+61F2,U+61F8,U+6416,U+64A5,U+64AB,U+6B04,U+6BBC,U+6E67,U+6F3F,U+6FB1,U+7169,U+7378,U+758A,U+78DA,U+7AAE,U+7D10,U+7E2B,U+81C9,U+8266,U+8569,U+85A9,U+8755,U+8972,U+8CE2,U+8FAD,U+907C,U+9081,U+9127,U+929C,U+9444,U+95A3,U+96B8,U+97FB,U+9817,U+994B,U+9A30,U+9B31,U+9CF4,U+9E7C,U+9F52;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./2ccb4b1a097116cf3b2a737ef2cfeb2d.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+5091,U+55AA,U+5875,U+58C7,U+596A,U+6046,U+61B2,U+6558,U+66A2,U+66C9,U+69CD,U+6DBC,U+6E6F,U+6EEF,U+6EF2,U+6F01,U+727D,U+755D,U+76DC,U+78A9,U+7D0B,U+7DB1,U+8105,U+8271,U+8A98,U+8B39,U+8C6C,U+8C9D,U+8CC3,U+8CD3,U+8D08,U+8D0F,U+8D95,U+8E64,U+8F1D,U+8F3B,U+90F5,U+912D,U+9130,U+9223,U+935B,U+95E1,U+965D,U+9663,U+96DE,U+978F,U+9812,U+9838,U+99D0,U+9A5F,U+9EA5;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./c57e73db4be1a0884c26fb7c7311599e.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+5009,U+5617,U+58EF,U+58FD,U+6176,U+6383,U+639B,U+6436,U+64FA,U+64FE,U+6575,U+6A6B,U+6BC0,U+6C2B,U+6DFA,U+6FFE,U+70CF,U+7210,U+7246,U+7E31,U+8085,U+8139,U+814E,U+819A,U+85A6,U+85CD,U+89BD,U+8A50,U+8B7D,U+8CE6,U+8D0A,U+8E8D,U+8ECC,U+8EF8,U+8F44,U+8FAF,U+9072,U+91D0,U+9285,U+92D2,U+92EA,U+9396,U+9592,U+95CA,U+97D3,U+9813,U+98EF,U+98FE,U+9A5A,U+9CE5;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./f865b68d22f634d91f0696a5a920d095.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+502B,U+50BE,U+5433,U+5678,U+5857,U+5922,U+5A66,U+5ABD,U+5CEF,U+5DD6,U+5EF3,U+6191,U+61B6,U+6649,U+66AB,U+68C4,U+694A,U+6FA4,U+7149,U+71C8,U+7955,U+7CE7,U+7D72,U+7E6A,U+7E96,U+8056,U+8173,U+81A0,U+81BD,U+838A,U+87F2,U+8A0A,U+8A73,U+8AB0,U+8AE7,U+8AEE,U+8B00,U+8B5C,U+8CA2,U+8CDE,U+8CF4,U+8D99,U+8DE1,U+908F,U+9846,U+984F,U+9A19,U+9A45,U+9B6F;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./01e66586185308c3e1b096dcb64699c3.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+5049,U+52DD,U+5967,U+596E,U+5B6B,U+5C46,U+5CF6,U+5D17,U+6490,U+6BBA,U+6DE8,U+6EBC,U+6EC5,U+6F32,U+6F54,U+6FC3,U+7063,U+71D2,U+7919,U+7926,U+7C4C,U+7CFE,U+7D14,U+7DD2,U+7DE3,U+7E73,U+816B,U+8178,U+8A1F,U+8AA0,U+8AFE,U+8B1D,U+8B6F,U+8CBC,U+8CEC,U+8F14,U+8F1B,U+905E,U+9589,U+9670,U+9801-9802,U+99D5,U+99DB,U+9AD2,U+9E7D,U+9E97,U+9F61;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./c6ee1db235bc088ae842a42966f32047.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4E82,U+5713,U+5BAE,U+5BE7,U+5C0B,U+5EE2,U+5F48,U+5FB9,U+60E1,U+6163,U+61F7,U+63DA,U+651D,U+6557,U+69AE,U+6A13,U+6A4B,U+6A94,U+6B61,U+6B98,U+6E9D,U+6F64,U+707D,U+7159,U+7562,U+79AE,U+7D19,U+7D1B,U+7E5E,U+805E,U+8108,U+820A,U+89F8,U+8AF8,U+8B02,U+8CB4,U+8CE0,U+8CFD,U+9077,U+937E,U+93E1,U+9451,U+9678,U+9B5A,U+9BAE,U+9F4A;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./62171cad72de2677f61f441e065fc01d.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+5074,U+5100,U+511F,U+518A,U+525B,U+5287,U+5289,U+5553,U+55CE,U+58DE,U+5BEC,U+5EE0,U+6232,U+64C1,U+64EC,U+6F5B,U+7240,U+734E,U+76E4,U+7DE9,U+7E2E,U+7F70,U+8449,U+84CB,U+862D,U+885D,U+8A02,U+8A2A,U+8A3A,U+8A62,U+8AA4,U+8CAB,U+8CE3,U+8DA8,U+8F2A,U+8F2F,U+92FC,U+95B1,U+9673,U+96B1,U+9748,U+975C,U+9867,U+98F2,U+9928;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./8970029b1a12d9776aae72e5a611377b.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+5132,U+5291,U+52F5,U+532F,U+55AB,U+584A,U+5BF6,U+5E6B,U+5F91,U+616E,U+6B50,U+6B72,U+6B78,U+6F38,U+737B,U+78BC,U+7AF6,U+7B46,U+7C64,U+7D39,U+7DA0,U+7E3E,U+7F85,U+812B,U+8607,U+865B,U+8A0E,U+8AC7,U+8C50,U+8CA7,U+8CB8,U+8CBF,U+8EDF,U+907A,U+9322,U+932F,U+9435,U+96D6,U+9806,U+983B,U+9858,U+98DB,U+9B25,U+9F8D;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./91008d10234eb993f1c8e5896e366a2d.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4E9E,U+50B5,U+50B7,U+5104,U+537B,U+5E63,U+5EAB,U+611B,U+63DB,U+63EE,U+64CA,U+64F4,U+6A39,U+6F22,U+7BC9,U+7D55,U+7D9C,U+7DCA,U+7DF4,U+7E7C,U+807D,U+8166,U+81E8,U+885B,U+89AA,U+8A17,U+8A69,U+8CA8,U+8CB7,U+8E10,U+8F09,U+8F15,U+9055,U+91CB,U+91DD,U+9375,U+93AE,U+93C8,U+968E,U+96DC,U+96F2,U+9918;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./8807f5753ef313b33db8a0814b596fd5.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4F54,U+5712,U+640D,U+64C7,U+64D4,U+6A02,U+6EAB,U+723E,U+7368,U+756B,U+7570,U+76E1,U+7A69,U+7C21,U+7D00,U+7D05,U+7D0D,U+7D42,U+7DE8,U+7E23,U+8072,U+8209,U+85DD,U+88DC,U+89BA,U+8A13,U+8A34,U+8A5E,U+8B1B,U+8CFC,U+8F38,U+9023,U+908A,U+9280,U+92B7,U+9304,U+967D,U+96D9,U+984D,U+9EC3;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./5ce8598519ca9dcb769b08c086676414.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+50C5,U+52DE,U+5354,U+56B4,U+570D,U+5718,U+57F7,U+5805,U+58D3,U+5920,U+5BE9,U+5C6C,U+5F35,U+6E1B,U+6EFF,U+71B1,U+722D,U+7372,U+790E,U+7A05,U+7D61,U+8208,U+83EF,U+85E5,U+865F,U+88DD,U+8A31,U+8A71,U+8ACB,U+8CA0-8CA1,U+904A,U+9060,U+9109,U+968A,U+96A8,U+96E2,U+9808,U+99AC;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./f71a02a1361c8056f178c23751acea61.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+5152,U+5283,U+52E2,U+53C3,U+5BEB,U+5C64,U+5E79,U+5E7E,U+5EE3,U+6236,U+63A1,U+6975,U+6AA2,U+6B77,U+72C0,U+7642,U+7A31,U+7A4D,U+7D04,U+7D30,U+7DAD,U+7E54,U+7E8C,U+7FA3,U+8846,U+8996,U+8A55,U+8A66,U+8B70,U+8B80,U+8ECD,U+9069,U+96E3,U+97FF,U+9810,U+982D,U+986F;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./b2ec7049f16c64f8a3df23ab1764b1fa.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+5099,U+512A,U+5716,U+5E36,U+5FA9,U+6230,U+65B7,U+6771,U+6CC1,U+6E2C,U+71DF,U+76E3,U+7BC4,U+7D66,U+806F,U+8077,U+81FA,U+842C,U+898B,U+8A72,U+8A9E,U+8AB2,U+8B77,U+8B93,U+8CAC,U+8CBB,U+8ECA,U+8FA6,U+9078,U+91AB,U+969B,U+96AA,U+990A,U+9A57,U+9EE8;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./24b4f5c3eae0af88b27cee04e6290085.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+50B3,U+50F9,U+5169,U+5247,U+5831,U+5C08,U+5E2B,U+614B,U+6C23,U+6C7A,U+6E96,U+6FDF,U+74B0,U+7BC0,U+7D1A,U+7DDA,U+7E3D,U+88CF,U+89C0,U+8A18,U+8B49,U+8B58,U+8F03,U+8F49,U+8FB2,U+904B,U+9054,U+9580,U+9805,U+9818,U+98A8,U+9EBC;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./a6233194f2fc573d519b463d3f36ff23.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+5275,U+54E1,U+554F,U+55AE,U+5834,U+5C0E,U+5F37,U+66F8,U+689D,U+69CB,U+6A19,U+6A23,U+6B0A,U+7121,U+78BA,U+7D44,U+7D71,U+7DB2,U+7FA9,U+7FD2,U+8655,U+8853,U+8A8D,U+8ABF,U+8AD6,U+8B8A,U+8CEA,U+9084,U+985E;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./ca0766a943d8f64bf064608bff8b5110.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4E26,U+5011,U+5167,U+52D9,U+5340,U+5C07,U+5F9E,U+61C9,U+64DA,U+6578,U+6A5F,U+7576,U+7A2E,U+7D50,U+898F,U+8A08,U+8A2D,U+8AAA,U+8CC7,U+9577,U+958B,U+9593,U+95DC,U+96FB,U+984C,U+9EDE;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./63e983c4f3a8314e2ce15b8c7fe4dbec.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4F86,U+500B,U+52D5,U+570B,U+5B78,U+5BE6,U+5C0D,U+6642,U+6703,U+696D,U+7232,U+73FE,U+7522,U+767C,U+7D93,U+8207,U+9019,U+9032,U+904E,U+9AD4;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./3bb2fcffaac49346377c64b354681ee8.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4E2C,U+5107,U+5155,U+5216,U+5293,U+53B6,U+54F3,U+5523,U+5819,U+5ADC,U+5C88,U+5E3B,U+5FEE,U+615D,U+62F6,U+63AD,U+63BE,U+6420,U+6484,U+6499,U+67D9,U+67DD,U+6D5E,U+6F46,U+717A,U+71E0,U+72C1,U+73E7,U+746D,U+75B0,U+7603,U+7722,U+778D,U+7809,U+7811,U+7946,U+7967,U+799A,U+7B45,U+7BA2,U+8014,U+80D9,U+8159,U+817D,U+81A3,U+81AA,U+8201,U+833C,U+836E,U+83E5,U+8459,U+84F0,U+8729,U+8753,U+878B,U+87D3,U+89DC,U+89EB,U+8BF6,U+8C2E,U+8D33,U+8D55,U+8E2C,U+8E9C,U+8E9E,U+8ECE,U+8FEE,U+9139,U+914F,U+9174,U+9191,U+94F4,U+953C,U+960C,U+9622,U+9A98,U+9B48,U+9CA6,U+9CB0,U+9E88,U+9F44,U+9F86;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./523021c2d4bec1e49288b22250a18abd.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4E0C,U+4E28,U+4E3F,U+4EC2,U+502E,U+522D,U+5281,U+5290,U+5369,U+54D5,U+54DC,U+54FF,U+552A,U+553C,U+5588,U+55B5,U+5686,U+570A,U+5776,U+5786,U+5820,U+5865,U+58BC,U+5B32,U+5B65,U+5C1C,U+5C66,U+5C8D,U+5F2A,U+5F50,U+5F61,U+6067,U+614A,U+61D4,U+620B,U+6224,U+6343,U+6434,U+6496,U+64D0,U+6509,U+652E,U+6833,U+6844,U+684A,U+6920,U+6957,U+6A8E,U+6A91,U+6AA0,U+6B43,U+6BEA,U+6BF5,U+6C15,U+6CD0,U+6EE0,U+6F24,U+6F2D,U+70C0,U+721D,U+728B,U+72C3,U+72E8,U+730A,U+7338,U+734D,U+752F,U+754E,U+770D,U+77A2,U+77E7,U+7857,U+786D,U+78C9,U+78F2,U+791E,U+7953,U+7B58,U+7B9D,U+7BDA,U+7CD7,U+7F32-7F33,U+8022,U+8028-8029,U+804D,U+8080,U+80C2,U+80E9,U+80EC,U+80F2,U+810E,U+8274,U+82B0,U+82E0,U+83B0,U+8488,U+848E,U+84CD,U+84D0,U+8539,U+857A,U+85A8,U+85B7,U+867C,U+871E,U+8723,U+877E,U+8793,U+8803,U+88D2,U+8966,U+8B26,U+8C8A,U+8C98,U+8D47,U+8DBC,U+8F77,U+8F79,U+9058,U+91A2,U+91B5,U+928E,U+9494,U+94B6,U+94F9,U+950A,U+950E,U+951E,U+952B,U+953E,U+9544,U+9564,U+95F6,U+9603,U+960D,U+9674,U+9794,U+97AB,U+98A5,U+9A9F,U+9AB1,U+9B0F,U+9C92,U+9C95,U+9CBA,U+9CBC,U+9CC6,U+9CCB,U+9CD8,U+9E32,U+9E5B,U+9EB4,U+9EFB-9EFC,U+9F3D;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./706123e76cc5a4c8c931906231205cf8.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4E36,U+4EA0,U+4F91,U+4F94,U+4FC5,U+50BA,U+5181,U+51F5,U+52F9,U+53A3,U+5423,U+55C9,U+57A4,U+57F4,U+580B,U+5902,U+5A08,U+5AB5,U+5BE4,U+5C22,U+5C6E,U+5D3E,U+5DDB,U+5E80,U+5EE8,U+5FED,U+609B,U+619D,U+6225,U+63CE,U+63F2,U+640B-640C,U+6445,U+64D7,U+6534,U+6549,U+6603,U+674C,U+67A8,U+680A,U+6864,U+6971,U+6A65,U+6C5C,U+6D48,U+6E2B,U+6EB2,U+706C,U+70B1,U+72F3,U+7303,U+7321,U+7339,U+736C,U+736F,U+74A9,U+750D,U+7513,U+7592,U+75C4,U+762D,U+7643,U+7707,U+7735,U+77B5,U+7839,U+784E,U+7924,U+793B,U+798A,U+7A06,U+7A78,U+7A80,U+7BA8,U+7CC8,U+7EC1,U+7F0F,U+7F12,U+7F68,U+8025,U+8035,U+809C,U+80AD,U+80B7,U+8204,U+8221,U+8223,U+822D,U+823B,U+824B,U+825A,U+827F,U+8307,U+8347,U+837D,U+839B,U+83F9,U+8487,U+8579,U+86B0,U+86D1,U+86D8,U+86F2,U+8764,U+8788,U+8797,U+87B5,U+881B,U+8844,U+88FC,U+8930,U+89CC,U+8BA0,U+8C02,U+8C85,U+8E23,U+8E40,U+8E94,U+8F81-8F82,U+8FD5,U+90B6,U+914E,U+943E,U+94B7-94B8,U+94DE,U+94EB,U+950D,U+9516,U+9518,U+9538,U+953F,U+954E,U+955F,U+9561,U+9569,U+95FC,U+963D,U+9667,U+9792,U+98A1,U+9969,U+9A80,U+9A96,U+9AD1,U+9B2F,U+9CD0,U+9E38,U+9E3A,U+9E7E,U+9EE5,U+9EEA,U+9EF9,U+9FA0;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./4c6b68e1c9dbfe7809ee5aecec547741.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4F74,U+507E,U+50D6,U+50ED,U+5182,U+525E,U+5282,U+52D6,U+5326,U+537A,U+5459,U+54B4,U+54D9,U+55CD,U+572F,U+574C,U+57D8,U+57FD,U+5925,U+59D2,U+5B16,U+5B84,U+5CB5,U+5CBD,U+5E31,U+5E5E,U+5F11,U+5F56,U+5F82,U+5FC4,U+5FC9,U+5FE4,U+600A,U+605D,U+609D,U+60DD,U+6243,U+6322,U+63DE,U+63F8,U+643F,U+64E4,U+656B,U+67B5,U+6883,U+69D4,U+6B37,U+6C2A,U+6C46,U+6D0E,U+6EB7,U+6F72,U+6F89,U+6F8C,U+7039,U+7113,U+71D4,U+727F,U+72F4,U+74DE,U+75C3,U+75E6,U+7605,U+760A,U+761B,U+7625,U+764D,U+7743,U+7747,U+786A,U+78A5,U+78B9,U+7A03,U+7AAC-7AAD,U+7AB3,U+7B0A,U+7B4C,U+7BE5,U+7C40,U+7CA2,U+7D77,U+7EA1,U+7F07,U+7F0B-7F0C,U+7F2F,U+7F9D,U+80E8,U+811E,U+822F,U+8233,U+827D,U+8284,U+828F,U+82C8,U+831B,U+835B,U+83A9,U+83DD,U+8406,U+84B4,U+84B9,U+84E3,U+850C,U+864D,U+867F,U+86BA,U+8770,U+87AC-87AD,U+87BD,U+88BC,U+895E,U+89CF,U+89D6,U+8BD4,U+8BDC,U+8C2B,U+8C33,U+8DB1,U+8DD6,U+8DE3,U+8F7A,U+90DB,U+9164,U+91AD,U+91AF,U+94D8,U+9514,U+9529,U+963C,U+966C,U+9688,U+96B3,U+97B2,U+996B,U+9987,U+9998,U+9A75,U+9A7A,U+9A92,U+9ADF,U+9B08,U+9B43,U+9C94,U+9CB4,U+9CBD,U+9CD4,U+9E31,U+9E36,U+9E4E,U+9E71,U+9F0D,U+9F37;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./4cbd36dfdc3058d6636f50a9281d1f8c.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4EF3,U+4F1B,U+4F7E,U+50EC,U+51AB,U+51B1,U+536E,U+54A9,U+54DA,U+55BE,U+564D,U+572C,U+576B,U+57CF,U+57F8,U+5844,U+5AE0,U+5B37,U+5B5B,U+5B80,U+5D1E,U+5D6B,U+5EFE,U+5F58,U+5F73,U+5F8C,U+602B,U+6106,U+610D,U+641B,U+6634,U+66DB,U+676A,U+681D,U+698D,U+69B1,U+69E0,U+6A18,U+6B39,U+6B9B,U+6BB3,U+6D7C,U+6E16,U+6EBB,U+6ED7,U+6F36,U+7035,U+7173,U+7178,U+7228,U+728F,U+72B4,U+72EF,U+7331,U+7481,U+74E0,U+7540,U+755B,U+758B,U+7635,U+763C,U+76CD,U+7704,U+7780,U+7847,U+7962,U+7A02,U+7B6E,U+7B7B,U+7BFC,U+7C0F,U+7C16,U+7C9E,U+7CC7,U+7CF8,U+7E3B,U+7EA9,U+7EF2,U+7F02,U+7F23,U+7FBC,U+8016,U+8020,U+812C,U+8136,U+8182,U+825F,U+8268,U+8288,U+8291,U+829F,U+8308,U+8311,U+831A,U+836D,U+83B6,U+840F,U+845C,U+855E,U+85A4,U+863C,U+86C4,U+86DE,U+86F1,U+873E,U+87DB,U+880A,U+883C,U+8864,U+887F,U+88F0,U+890A,U+892B,U+89CB,U+89EF,U+8A48,U+8C18,U+8C94,U+8DCF,U+8E6F,U+8E90,U+8F7E,U+8FB6,U+8FD3,U+902D,U+90BE,U+9161,U+91A3,U+936A,U+948B,U+9513,U+953A,U+956C,U+9654,U+972A,U+9730,U+97B4,U+98E7,U+9967,U+9AA3,U+9ABA,U+9AED,U+9AF9,U+9C8E,U+9C9A,U+9E2B,U+9E4B,U+9E55,U+9E63,U+9E68-9E69,U+9EBD,U+9EC9,U+9F2C,U+9F51;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./ec6195e2450f892361bd20d44bb6e549.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4F67,U+4FDC,U+50E6,U+5196,U+5202,U+5233,U+523F,U+52A2,U+5476,U+54CF,U+5537,U+561E,U+56DD,U+56DF,U+5709,U+580D,U+5881,U+589A,U+5941,U+59B2,U+5C25,U+5D24,U+5E42,U+5E8B,U+5EB3,U+5ED2,U+5FAD,U+6003,U+603C,U+6083,U+6100,U+6126,U+6206,U+62CA,U+638E,U+63B4,U+6426,U+646D,U+6535,U+65C4,U+6715,U+6769,U+6798,U+67C3,U+6861,U+69CA,U+69ED,U+69F2,U+69FF,U+6C0D,U+6CB2,U+6CD6,U+6CF7,U+6CFA,U+6D33,U+6E53,U+6FB6,U+709D,U+72AD,U+72F7,U+72FB,U+7313,U+739F,U+74BA,U+754B,U+75AC,U+75D6,U+7617,U+7640,U+76A4,U+76B2,U+775A,U+77BD,U+781F,U+79B3,U+7B2B,U+7B31,U+7B3E,U+7B9C,U+7C0B,U+7CC1,U+7CE8,U+7EA5,U+7F21,U+7F27,U+7F74,U+7FB0,U+8031,U+8071,U+80EA,U+8114,U+8160,U+81A6,U+81C1,U+82A4,U+82FB,U+8333,U+836C,U+83F8,U+8411,U+841C,U+8489,U+848C,U+8627,U+8629,U+866E,U+86B5,U+872E,U+8731,U+877B,U+877D,U+87EA,U+8813,U+88CE,U+88E5,U+897B,U+89F3,U+8BFC,U+8C35,U+8D46,U+8DBA,U+8E3A,U+8F75,U+9179,U+917E,U+94AC,U+94E5,U+952C,U+9545,U+9565,U+9568,U+956A,U+961D,U+96E0,U+989F,U+990D,U+9993,U+9AC0,U+9AE1,U+9AEB,U+9C86,U+9C8B,U+9CA0-9CA1,U+9CA3,U+9CE2,U+9E48,U+9E6A,U+9E87,U+9EE2,U+9EE9,U+9F17,U+9F19,U+9F80;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./3aef0a138d95ad5b9c9032d316fc6f6d.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4E69,U+50A7,U+5240,U+531A,U+5363,U+5432,U+5452,U+5456,U+5472,U+54AD,U+553F,U+5575,U+5581,U+55CC,U+55FE,U+5601,U+57D2,U+5924,U+5981,U+5AAA,U+5AB8,U+5B34,U+5D5D,U+5D74,U+5DEF,U+5E91,U+5EF4,U+600D,U+601B,U+605A,U+6092,U+60AB,U+6217,U+623D,U+6369,U+6661,U+6753,U+67A7,U+6855,U+68F9,U+6A7C,U+6AAB,U+6B82,U+6BF9,U+6C05,U+6C19-6C1A,U+6CA9,U+6CF6,U+6D1A,U+6DAB,U+6E54,U+6F74,U+7085,U+7198,U+71B5,U+7256,U+725D,U+727E,U+72FA,U+738E,U+73E5,U+750F,U+760C,U+7615,U+7630,U+763F,U+77EC,U+78A1,U+7905,U+7B2A,U+7B2E,U+7B62,U+7B85,U+7BCC,U+7BEA,U+7C26,U+7C74,U+7C9C,U+7E47,U+7E9B,U+7E9F,U+7EE0,U+7EE8,U+7EF1,U+7F01,U+7F11,U+7F7E,U+802A,U+8112,U+8169,U+8234,U+8279,U+82CA,U+82E1,U+83C0,U+83DF,U+845A,U+8476,U+8478,U+84BD,U+84E0,U+8548,U+86E9,U+86F4,U+86F8,U+8785,U+87AB,U+8816,U+8832,U+88B7,U+88E2-88E3,U+89DA,U+8BD3,U+8BD6,U+8BF9,U+8C16,U+8D4D,U+8D5C,U+8DDE,U+8F6D,U+8F94,U+8FE8,U+94AB,U+94D1,U+94D7,U+9515,U+952A,U+9558,U+9567,U+96CE,U+96E9,U+9785,U+987C,U+9883,U+9954,U+9A93,U+9B1F,U+9B4D,U+9B51,U+9CA7,U+9CAE,U+9CCE,U+9CD3,U+9E37,U+9E39,U+9E41,U+9E46,U+9F22,U+9F2F,U+9F39,U+9F85;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./acd0a4c1a9858fd3c492dc332b763bd0.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4F65,U+5261,U+52AC,U+5416,U+5454,U+5478,U+54BB,U+54C2,U+54D3,U+54DE,U+566B,U+572E,U+57EF,U+581E,U+5997,U+59A3,U+5AD4,U+5BA5,U+5C59,U+5C63,U+5D5B,U+5E0F,U+5E11,U+5E14,U+5ED1,U+5F40,U+6019,U+610E,U+624C,U+634C,U+65D2,U+670A,U+67F0,U+680C,U+686B,U+6939,U+696E,U+6980,U+6B84,U+6BF3,U+6C06-6C07,U+6D07,U+6D27,U+6D2B,U+6D91,U+6E8F,U+70BB,U+726E,U+72B0,U+72CE,U+72F2,U+7322,U+737E,U+7477,U+748E,U+755A,U+7594,U+75B3,U+7654,U+7726,U+7765,U+7817,U+78D4,U+78D9,U+7913,U+79D5,U+79EB,U+7A70,U+7A86,U+7B25,U+7B38,U+7B47,U+7B72,U+7BA7,U+7C9D,U+7EE1,U+7F17,U+7F36,U+7FEE,U+8043,U+809F,U+80AB,U+80CD,U+80D7,U+8118,U+8188,U+823E,U+8298,U+82C1,U+82D8,U+82E4,U+82F4,U+835C,U+83D4,U+8401,U+8451,U+846D,U+84BA,U+851F,U+8556,U+8585,U+867A,U+868B,U+868D,U+8765,U+87EE,U+8872,U+88A2,U+88C9,U+8BB5,U+8BCE,U+8BF3,U+8C17,U+8C55,U+8C73,U+8C78,U+8D40,U+8D91,U+8DEB,U+8E14,U+8F8E,U+9011,U+915E,U+9162,U+9185,U+918C,U+9190,U+92C8,U+94CA,U+94D5,U+94EA,U+94F3,U+94F7,U+94FD,U+951D,U+9559,U+9566,U+9572,U+95F1,U+9878,U+988F,U+98D1,U+9963,U+9AC1,U+9ACC,U+9B32,U+9B49,U+9CA5,U+9CA9,U+9CB1,U+9F87;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./074336720702051357fd5598bd3a1202.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4E47,U+4E5C,U+4E8D,U+4EDF,U+4F89,U+50EE,U+520E,U+5443,U+5577,U+5591,U+55E5,U+560C,U+560F,U+562C,U+56AF,U+5769,U+578C,U+5793,U+57DA,U+57E4,U+5889,U+593C,U+59AB,U+5AD8,U+5AF1,U+5B53,U+5CA3,U+5EDB,U+5FBC,U+6004,U+6029,U+6041,U+60AD,U+61B7,U+647A,U+64BA,U+65C6,U+65F0,U+6600,U+668C,U+66F7,U+67E2,U+6874,U+691F,U+6989,U+69A7,U+6A17,U+6B81,U+6C10,U+6C3D,U+6E6B,U+6FDE,U+71B3,U+723B,U+7301,U+731E,U+7360,U+73A2,U+74FF,U+7633,U+771A,U+7768,U+781C,U+7829,U+7957,U+7B04,U+7BA6,U+7CCD,U+7DAE,U+7ECB,U+7ED7,U+7EFE,U+7F26,U+7F31,U+7F35,U+7F5F,U+7FAF,U+801C,U+80BC,U+81CC,U+8244,U+824F,U+82A1,U+82B4,U+8306,U+833A,U+839C,U+83B3,U+83BC,U+83F0,U+8497,U+85FF,U+86A8,U+870A,U+8734,U+87CA,U+886E,U+887E,U+8888,U+8921,U+8C04,U+8C1D,U+8C25,U+8C2F,U+8C36,U+8D3D,U+8D59,U+8D67,U+8DBF,U+8DEC,U+8DFD,U+8E41,U+900B,U+9044,U+9062,U+90CF,U+9123,U+9146,U+9172,U+918D,U+93CA,U+9486,U+948C,U+94AA,U+94B2,U+94C8,U+94DF,U+94E9,U+94FC,U+951B,U+9546,U+954F,U+9554,U+9571,U+960F,U+97AF,U+98D5,U+992E,U+9955,U+9A7D,U+9AA2,U+9AB0,U+9AC2,U+9B23,U+9C90,U+9C9E,U+9CAD,U+9CC3,U+9E47,U+9EE7,U+9EFE;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./ef59eff97a89eade577a159034314dc8.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4F25,U+4F32,U+4F5E,U+4F76,U+4FAA,U+4FE6,U+5028,U+5048,U+5250,U+535F,U+538D,U+53C1,U+5412,U+54D4,U+54DD,U+5541,U+55F3,U+5657-5658,U+5664,U+575C,U+577C,U+57B2,U+5800,U+5AEB,U+5C3B,U+5D26,U+5F01,U+5FB5,U+5FDD,U+5FF8,U+6079,U+60B1,U+6222,U+629F,U+6332,U+63BC,U+63E0,U+6485,U+65AB,U+65C3,U+669D,U+66BE,U+6800,U+68FC,U+690B,U+6924,U+6978,U+6A3E,U+6A50,U+6A5B,U+6B24,U+6B8D,U+6C54,U+6D04,U+6D4D,U+6EB1,U+6EBD,U+7110,U+7230,U+728D,U+7292,U+72B8,U+72D2,U+75A0,U+779F,U+7826,U+7877,U+7A39,U+7AA8,U+7AE6,U+7B0F,U+7BAA,U+7BAC,U+7C1F,U+7ED4,U+7EFB,U+7F0D,U+7FD5,U+8027,U+80DD,U+80FC,U+8132,U+815A,U+8167,U+81CA,U+8228,U+82A9,U+82AB,U+82CC,U+8351,U+8368,U+83B8,U+83D8,U+84C1,U+858F,U+867B,U+86A9,U+8722,U+876E,U+877C,U+87E5,U+88DF,U+8919,U+8BCC,U+8BDF,U+8BE8,U+8BEE,U+8C20,U+8D36,U+8DF8,U+8E05,U+8F9A,U+9021,U+908B,U+90B4,U+90BA,U+90D0,U+90EB,U+91AA,U+933E,U+948D,U+9490,U+94AD,U+94BD,U+94D6,U+94D9,U+9507,U+955E,U+956B,U+95E9,U+9604,U+960B,U+9612,U+9615,U+9617,U+96B9,U+989A-989B,U+989E,U+9A78,U+9AA0,U+9B3B,U+9C82,U+9CCA,U+9CD9,U+9E28,U+9E5A,U+9E6C,U+9F0B;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./dc14d74a2d47edb38b2b6b57fc4f0913.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4EC4,U+4EF5,U+4F27,U+4F7B,U+5080,U+5121,U+5208,U+54A6,U+54D0,U+5533,U+5549,U+5550,U+5556,U+55DD,U+55F5,U+5627,U+567B,U+56D4,U+571C,U+57B4,U+5807,U+58C5,U+59A4,U+59AF,U+5A62,U+5CAC,U+5D03,U+5D9D,U+5DB7,U+5EBE,U+5F2D,U+6120,U+6221,U+623E,U+638A,U+64B8,U+64E2,U+66E9,U+67C1,U+67D2,U+67FD,U+6877,U+68F0,U+6934,U+6998,U+69C1,U+6A84,U+6A97,U+6AA9,U+6B87,U+6BAA,U+6BD6,U+6C18,U+6CD4,U+6CEB,U+6CEE,U+6DE0,U+6ECF,U+70B7,U+7168,U+71F9,U+72D9,U+7352,U+73B3,U+73D0,U+7511,U+75A5,U+75C8,U+75E7-75E8,U+7610,U+7619,U+772D,U+782C,U+784C,U+7850,U+7856,U+78F4,U+7B15,U+7B1E,U+7B5A,U+7BD9,U+7ED0,U+7F1F,U+7F45,U+7F71,U+7FBF,U+7FE5,U+8052,U+80B1,U+80DB,U+816D,U+81EC,U+8210,U+8249,U+828E,U+8315,U+8369,U+8378,U+83A8,U+83AA,U+83B4,U+83EA,U+8538,U+859C,U+85AE,U+86B4,U+86CF,U+8BA7,U+8C30,U+8C47,U+8DB5,U+8E1F,U+8E2F,U+8E70,U+8E85,U+8F78,U+8F87,U+8F8B,U+8F8F,U+90C4,U+90FE,U+917D,U+9487,U+948F,U+94CD,U+94EF,U+954A,U+9609-960A,U+96D2,U+9708,U+98A7,U+996C,U+9980,U+9991,U+9A88,U+9AB6,U+9B47,U+9C9B,U+9CC7,U+9E2C,U+9E42,U+9E58,U+9E5E,U+9ECD,U+9F8A,U+9F8C;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./b9c89633741af9ed2fea7924c944a196.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4E93,U+4EBB,U+4FA9,U+4FE3,U+51C7,U+51EB,U+52F0,U+530F,U+53F5,U+5453,U+5466,U+549D,U+54A3,U+54BF,U+5527,U+556D,U+558F,U+55B1,U+55EB,U+55F2,U+5624,U+5685,U+56E1,U+5739,U+59D8,U+5A09,U+5A0C,U+5A4A,U+5A67,U+5AD2,U+5B6C,U+5C50,U+5CA2,U+5D27,U+5D6C,U+5DF3,U+5E19,U+5EA0,U+5EEA,U+5FEA,U+6042,U+6175,U+6215,U+6266,U+6308,U+6339,U+643D,U+659B,U+6677,U+679E,U+67B3,U+6832,U+6840,U+68C2,U+6966,U+6987,U+69CE,U+6A2F,U+6A3D,U+6B93,U+6BFD,U+6C16,U+6DA0,U+6E0C,U+6E86,U+6F4B,U+7080,U+70CA,U+740A,U+7441,U+7457,U+74D2,U+75A3,U+75E4,U+7622,U+765E,U+76B4,U+7812,U+7887,U+789B,U+7A51,U+7B24,U+7BB8,U+7BC1,U+7EA8,U+7EE6,U+7EFA,U+7F1B,U+7F22,U+7FA7,U+7FF3,U+8084,U+8093,U+80F4,U+81BB,U+8202,U+828A,U+82E3,U+83E1,U+84D1,U+84FC,U+853B,U+857B,U+85D3,U+86B1,U+86C9,U+86D4,U+86F3,U+8725,U+874C,U+879F,U+87B3,U+887D,U+88FE,U+8A8A,U+8BA6,U+8C00,U+8C07,U+8C14,U+8C7A,U+8D30,U+8DD7,U+8E69,U+8F6B,U+8F73,U+8FF3,U+9026,U+902F,U+9099,U+90C7,U+9143,U+91BA,U+94AF,U+94BF,U+94D2,U+9531,U+95F3,U+9765,U+97EA,U+9880,U+9994,U+9AC5,U+9AFB,U+9C87,U+9CB5,U+9CD5,U+9F88;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./f03d7fdfaf8cb3f2c6dd9da175692bb0.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4EDD,U+502C,U+50A5,U+51FC,U+523D,U+5241,U+5464,U+5514,U+555C,U+556E,U+5576,U+55B9,U+564C,U+5671,U+568F,U+56D7,U+57A1,U+57A7,U+57D9,U+5942,U+5C7A,U+5C98,U+5D06,U+5D6F,U+5DFD,U+5EB9,U+5FFE,U+600F,U+606B,U+622C,U+62BB,U+62BF,U+6387,U+63B3,U+63B8,U+63C4,U+63C6,U+63F6,U+6441,U+6555,U+66A7,U+6775,U+678B,U+6849,U+6860,U+6910,U+6A28,U+6A79,U+6B92,U+6BC2,U+6C29,U+6C32,U+6C35,U+6C86,U+6CC5,U+6D0C,U+6D60,U+6DDD,U+6ED3,U+6EDF,U+6FB9,U+6FD1,U+6FEF,U+7023,U+712F,U+7145,U+7284,U+732C,U+73C8,U+73D9,U+7596,U+759D,U+75B4,U+75D8,U+75E3,U+75FF,U+7688,U+76E5,U+7818,U+789A,U+78B2,U+7B08,U+7B33,U+7C2A,U+7CCC,U+7EC0,U+7FE6,U+8012,U+80E4,U+80EF,U+8297,U+82A8,U+82BE,U+8331,U+8366,U+83C5,U+83FD,U+8473,U+84A1,U+84CA,U+85C1,U+8605,U+8662,U+86AA,U+86ED,U+8709,U+8748,U+8763,U+89C7,U+89DE,U+89E5,U+8A3E,U+8C21,U+8C49,U+8DF9,U+8E51,U+8E59,U+9016,U+909B,U+914A,U+91AE,U+9495,U+94A3-94A4,U+94BA,U+94CC,U+94E1,U+94F0,U+955D,U+9697,U+96BC,U+975B,U+977C,U+98A2,U+998A,U+9995,U+9A9B,U+9AB7,U+9C91,U+9CCF,U+9E29,U+9EDC,U+9EDF-9EE0,U+9F83,U+9F89;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./395311e15f7a603e8cfde5a2e200759d.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4EDE,U+4EE1,U+4EEB,U+4FFE,U+5025,U+506C,U+50F3,U+520D,U+525C,U+52AD,U+5310,U+539D,U+53FC,U+5421,U+54E7,U+551B,U+557E,U+5599,U+55D4,U+5623,U+562D,U+5654,U+56EB,U+56F5,U+57DD,U+584D,U+58EC,U+59DD,U+5A32,U+5A55,U+5A75,U+5B51,U+5B71,U+5B73,U+5CD2,U+5CE4,U+5E5B,U+5E96,U+5FD2,U+634B,U+636D,U+661D,U+6657,U+6841,U+6867,U+6901,U+699B,U+6B46,U+6C21,U+6C24,U+6C4A,U+6CA3,U+6D39,U+6D63,U+6D6F,U+71E7,U+72CD,U+72F0,U+7325,U+7350,U+7391,U+741A,U+757F,U+7583,U+75B8,U+75F1,U+766F,U+7699,U+7751,U+789C,U+7A17,U+7BE6,U+7CB2,U+7EA3,U+7EB0,U+7EBE,U+7EEB,U+7F2C,U+7FB8,U+8037,U+8153,U+8171,U+821B,U+8222,U+826E,U+82EB,U+830C,U+8314,U+8334,U+83D6,U+843C,U+8564,U+8572,U+8616,U+86A3,U+86B6,U+86C6,U+8708,U+870D,U+8759,U+87AF,U+87C6,U+8869,U+88C6,U+89D0,U+8B07,U+8BC2,U+8BF0,U+8C2A,U+8C62,U+8C89,U+8D49,U+8D6D,U+8D94,U+8DB8,U+8E2E,U+8E3D,U+8E47,U+8E7F,U+9005,U+907D,U+9082,U+9088,U+90B0,U+90D3,U+94B9,U+94CB,U+94E0,U+9509,U+9512,U+9552-9553,U+96B0,U+9791,U+9990,U+9A9C,U+9C88,U+9CB2-9CB3,U+9CB7,U+9CDC,U+9E22,U+9E57,U+9E73,U+9E82;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./885d81a73e6ef06ad8a7b09bccd3fd1e.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4EE8,U+4F5D,U+4FDA,U+502D,U+5106,U+530D,U+53A9,U+53DF,U+544B,U+5477,U+5530,U+5555,U+55C4,U+55D1,U+55DF,U+55E4,U+55EA,U+55EC,U+55EF,U+56F9,U+5704,U+576D,U+57D5,U+5880,U+599E,U+59BE,U+5ABE,U+5BEE,U+5CBF,U+5CC4,U+607B,U+61D1,U+622E,U+626A,U+6371,U+63AE,U+63CD,U+63D6,U+63FF,U+6421,U+64C0,U+66DC,U+67A5,U+6954,U+6A47,U+6C94,U+6CA4,U+6D94,U+6E4E,U+705E,U+7116,U+726F,U+72DE,U+75B1,U+75C2,U+7719,U+777E,U+7791,U+7823,U+7827,U+7889,U+795C,U+7A88,U+7A95,U+7AA0,U+7B90,U+7BD1,U+7BFE,U+7DA6,U+7EEF,U+7F08,U+7F25,U+7F58,U+7F61,U+8174,U+8191,U+8214,U+82D5,U+82DC,U+835A,U+8418,U+84FF,U+866C,U+8693,U+86A7,U+86AC,U+86AF,U+86CA,U+86D0,U+8760,U+87D1,U+8934,U+89CA,U+89CE,U+8BA3,U+8BAA-8BAB,U+8BC5,U+8BDB,U+8BE4,U+8C15,U+8D84,U+8DC4,U+8DC6,U+8DCE,U+8DDB,U+8E09,U+8E1D,U+8E39,U+8E42,U+8E4B,U+8E8F,U+8F72,U+9051,U+90E2,U+90E6,U+90EF,U+9104,U+9150,U+919A,U+9497,U+949C,U+951F,U+9534,U+9557,U+9562,U+9606,U+965F,U+9889,U+9894,U+9974,U+9A90,U+9AA7,U+9AEF,U+9CA2,U+9CB6,U+9CC5,U+9CCD,U+9CDF,U+9E2A,U+9E67,U+9E6B,U+9EB8,U+9F9B;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./36f3cf4b102578ab6d4dbf23580aec45.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4EB5,U+4F22,U+4F43,U+4F57,U+4F6F,U+4FF8,U+507B,U+5088,U+5345,U+53FB,U+5482,U+54A7,U+54CC,U+550F,U+5544,U+5594,U+559F,U+55E8,U+564E,U+5785,U+57AD,U+5914,U+5958,U+59AA,U+5A06,U+5A40,U+5AE1,U+5B40,U+5C9C,U+5CCB,U+5D47,U+5D4B,U+6002,U+603F,U+6078,U+607D,U+607F,U+608C,U+609A,U+60FA,U+61FF,U+621B,U+6410,U+6414,U+6448,U+64D8,U+6710,U+6748,U+6772,U+67AD,U+680E,U+69AB,U+6C68,U+6C8F,U+6D2E,U+6E98,U+6EC2,U+6FE0,U+7094,U+70E9,U+7119,U+723F,U+73C9,U+74E4,U+753E,U+7548,U+75BD,U+75CD,U+7618,U+7634,U+76C5,U+76F1,U+7708,U+778C,U+77B3,U+7830,U+783B,U+7893,U+7949,U+79E3,U+7A14,U+7A23,U+7AFD,U+7EC2,U+7F03-7F04,U+7FCA,U+8200,U+828D,U+82C4,U+82D2,U+82F7,U+832D,U+840B,U+8438,U+847A,U+852B,U+85D0,U+869D,U+86F0,U+8703,U+8707,U+8782,U+87A8,U+87D2,U+87E0,U+8839,U+8913,U+891B,U+8941,U+8A07,U+8BCB,U+8BD2,U+8C11,U+8C29,U+8C32,U+8DFA,U+8E49,U+8F71,U+9004,U+9036,U+9097,U+90DC,U+91B4,U+938F,U+950F,U+9563,U+9573,U+961A,U+9649,U+9701,U+972D,U+97A3,U+97EB,U+988C,U+98A6,U+98D3,U+9977,U+997D,U+9A9D,U+9E20,U+9E4C,U+9F3E;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./f6db837b7039ac5feb8d49f72da011a6.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4F09,U+4F5A,U+4FCE,U+4FEA,U+4FF3,U+500C,U+500F,U+504E,U+52BE,U+5420,U+5457,U+5499,U+549B,U+54D2,U+558B,U+55BD,U+55D6,U+565C,U+57A9,U+57ED,U+59F9,U+5A11,U+5AE6,U+5B6A,U+5B93,U+5C15,U+5C99,U+5CC1,U+5D2E,U+5D99,U+5E54,U+5E61,U+5FCF,U+6006,U+6014,U+60C6,U+60DA,U+60F4,U+621F,U+62C8,U+631B,U+631E,U+6619,U+6635,U+6641,U+67B0,U+67B7,U+684E,U+688F,U+695D,U+696B,U+6D35,U+6D9E,U+6DD9,U+6DEC,U+6E11,U+6EE2,U+6F09,U+6F66,U+6F8D,U+6FC9,U+729F,U+72C8,U+73DE,U+7430,U+7566,U+7579,U+75C9,U+75E2,U+75FC,U+762A,U+77DC,U+7800,U+781D,U+782D,U+783C,U+78A3,U+78EC,U+7980,U+7B95,U+7C0C,U+7C41,U+7C91,U+7CC5,U+7ECC,U+8006,U+8069,U+807F,U+80ED,U+814B,U+8198,U+82CB,U+834F,U+8360,U+84D6,U+84E5,U+8537,U+8671,U+86A4,U+86F9,U+8737,U+873B,U+8815,U+8936,U+8BC3,U+8BE9,U+8C0C,U+8C0F,U+8C4C,U+8D45,U+8D73,U+8E31,U+8E6D,U+8E76,U+8FE4,U+9041,U+90D7,U+9169,U+9485,U+94DB,U+94E7,U+9503,U+9506,U+9528,U+9542,U+9549,U+95FE,U+96C9,U+96F3,U+970E,U+9739,U+9798,U+98D2,U+98D9,U+9968,U+996F,U+9984,U+9997,U+9ACB,U+9E49,U+9E51,U+9E66;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./a3e1e78a2196253cf0d5e1ac9c1c30f8.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4EC9,U+4F8F,U+4FDF,U+501C,U+50A9,U+510B,U+527D,U+542E,U+5486,U+54C6,U+552C,U+556C,U+55B3,U+567C,U+568E,U+5768,U+577B,U+5B17,U+5BB8,U+5D3D,U+5D4A,U+5D82,U+5E1A-5E1B,U+5EA5,U+5FD0-5FD1,U+5FD6,U+5FFF,U+60AF,U+60B4,U+612B,U+6194,U+61CA,U+61F5,U+637B,U+63E9,U+64B5,U+655D,U+65CC,U+664C,U+665F,U+66B9,U+6773,U+6787,U+67E9,U+6845,U+693D,U+6994,U+69B7,U+6A35,U+6C26,U+6D43,U+6D5C,U+6E6E,U+6E9F,U+6EF9,U+6F2A,U+6F78,U+6FC2,U+70EC,U+714A,U+724D,U+7337,U+733E,U+74F4,U+7572,U+7638,U+7678,U+76C2,U+76F9,U+7762,U+77CD,U+77FD,U+795F,U+7B20,U+7BA9,U+7BAB,U+7BDD,U+7C7C,U+7CB3,U+7CBD,U+7EC9,U+7EF6,U+7F19,U+7F44,U+7F54,U+800B,U+809B,U+80C4,U+816E,U+817C,U+81C0,U+81FE,U+8392,U+83A0,U+8424,U+84AF,U+869C,U+86CE,U+8713,U+87C0,U+87CB,U+8821,U+89D1,U+8BB9,U+8BD8,U+8D53,U+8D5D,U+8F7C,U+9052,U+905B,U+9095,U+90C5,U+911E,U+9122,U+916A,U+92AE,U+9492,U+94A1,U+94B5,U+94C4,U+94C9,U+9511,U+9517,U+9536-9537,U+9602,U+9616,U+9621,U+9631,U+9753,U+98DA,U+9A81,U+9B03,U+9C85,U+9CA8,U+9CAB,U+9EBE,U+9F10,U+9F8B;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./5fbfc8b7d5c1642962d419b90ae36dc0.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4E15,U+4E2B,U+4EB3,U+4F0E,U+4F64,U+51A2,U+51BC,U+52D0,U+536F,U+53FD,U+5429,U+5494,U+54AF,U+5506,U+5511,U+5522,U+55D2,U+55E1,U+55E6,U+55F7,U+561F,U+5639,U+5659,U+5662,U+5693,U+572A,U+5892,U+5992,U+59A9,U+5A76,U+5AE3,U+5B7D,U+5CAB,U+5CB7,U+5D34,U+5D58,U+5E7A,U+5F0B,U+5F77,U+5FA8,U+6026,U+6035,U+6063,U+60BB,U+60D8,U+60EE,U+6115,U+61E6,U+6248,U+62A1,U+62D7,U+6376,U+64DE,U+652B,U+65CE,U+65D6,U+6666,U+6684,U+6777,U+67DE,U+692D,U+6B59,U+6CE0,U+6D54,U+6D8E,U+6DD6,U+6EB4,U+6F15,U+704F,U+7118,U+7172,U+71B9,U+7266,U+728A,U+7396,U+73B7,U+73CF,U+7428,U+742C,U+742E,U+74EE,U+7525,U+753A,U+75B5,U+75D4,U+7656,U+765C,U+768E,U+777D,U+7825,U+7837,U+78B4,U+79ED,U+7A1E,U+7B06,U+7CDC,U+7F30,U+7F42,U+7F94,U+8004,U+8019,U+80AE,U+8146,U+81C6,U+81FC,U+822B,U+82AA,U+830F,U+832F,U+8340,U+8365,U+8385,U+8568,U+8717-8718,U+87FE,U+8902,U+8C12,U+8D32,U+8DF7,U+8E7C,U+8F95,U+8FAB,U+9035,U+909D,U+919B,U+948E,U+949A,U+94BC,U+94C6,U+94F1,U+956F-9570,U+9642,U+968D,U+988A,U+98E8,U+998B,U+99A5,U+9A9E;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./3611e891f3c790e7f5a0f55144372201.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4F2B,U+4FAC,U+5043,U+5055,U+5140,U+5243,U+531D,U+53A5,U+53AE,U+541D,U+5492,U+54A4,U+54AA,U+54CE,U+5520,U+553E,U+557B,U+55C5,U+5608,U+5636,U+563B,U+5773,U+57A0,U+5811,U+587E,U+58D5,U+5A29,U+5A6A,U+5A7A,U+5AC9,U+5B95,U+5C49,U+5C8C,U+5D02,U+5E44,U+5EFF,U+5F29,U+5F89,U+5F9C,U+6005,U+60EC,U+618E,U+630E,U+637A,U+6390,U+63B0,U+6525,U+6538,U+65EE-65EF,U+6631,U+6636,U+6654,U+677C,U+67D8,U+68B5,U+6979,U+6988,U+6B9A,U+6C69,U+6C74,U+6CAE,U+6D95,U+6DDE,U+6DE6,U+6DFC,U+6F29,U+7096,U+70C3,U+7131,U+715C,U+7317,U+731D,U+7329,U+73E9,U+7425,U+7455,U+7490,U+7519,U+75DE,U+7663,U+7691,U+7729,U+783E,U+787C,U+795A,U+7A79,U+7ABF,U+7B3A,U+7B4F,U+7B8D,U+7BB4,U+7BD3,U+7BE1,U+7CBC,U+7F1C,U+7F8C,U+7FCE,U+7FF1,U+810D,U+82A5,U+82DE,U+8343,U+835E,U+8364,U+836A,U+853A,U+8543,U+854A,U+8559,U+85B0,U+86E4,U+8715,U+8845,U+88E8,U+88F1,U+8C82,U+8D58,U+8DBE,U+9074,U+90A1,U+9149,U+9157,U+94C2,U+95EB,U+95F0,U+9611,U+9619,U+9706,U+970F,U+97ED,U+9A77,U+9AA1,U+9CDD,U+9E2F,U+9E33,U+9E44,U+9EDD;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./7cd3aa2d4165277435b6f8b23036e6e2.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4FD0,U+5156,U+51BD,U+5323,U+535E,U+53F1,U+542D,U+5431,U+545B,U+547B,U+548E,U+54AB,U+54FD,U+5509,U+5600,U+5618,U+563F,U+574D,U+579B,U+57B8,U+57C2,U+586C,U+58F9,U+5993,U+59E3,U+5B62,U+5BA6,U+5C4E,U+5C96,U+5CE5,U+5F99,U+6043,U+6059,U+60B8,U+60ED,U+60F0,U+61A9,U+62A8,U+62FD,U+6342,U+63A3,U+63AC,U+642A,U+64A9,U+64AE,U+64B7,U+66F3,U+67B8,U+683E,U+6886,U+6963,U+69DF,U+6AAC,U+6C50,U+6C76,U+6C8C,U+6CEF,U+6D52,U+6DB8,U+6DC5,U+6E1A,U+6EA7,U+6FA7,U+6FE1,U+7166,U+736D,U+740F,U+74EF,U+76BF,U+76D4,U+7728,U+776C,U+77A0,U+77F8,U+77FE,U+78D0,U+7A37,U+7A92,U+7AFA,U+7B60,U+7B75,U+7CEF,U+7EDB,U+7FB2,U+7FB9,U+7FE1,U+808B,U+81C3,U+8317,U+8431,U+84DF,U+8511,U+85B9,U+8638,U+86C0,U+8822,U+8882,U+8884-8885,U+8892,U+892A,U+8983,U+8BA5,U+8BD9,U+8BE0-8BE1,U+8C1A,U+8C1F,U+8C27,U+8C5A,U+8E0C,U+8E74,U+8E87,U+8F98,U+8FC2,U+8FE6,U+900D,U+9068,U+90E7,U+93D6,U+949D,U+94B4,U+94D0,U+94E3-94E4,U+9522,U+9556,U+9893,U+9981,U+9A6E,U+9A87,U+9A8A,U+9E3E,U+9E5C,U+9E6D,U+9E9D,U+9EDB;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./2b90e29fec783fad2b0d57e46f4d9012.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4E56,U+4F58,U+4F6C,U+4F70,U+4FE8,U+5014,U+524C,U+5315,U+549A,U+54EE,U+54FC,U+5567,U+556A,U+5669,U+56F1,U+56FF,U+573B,U+595A,U+598D,U+5996,U+59D7,U+5B7A,U+5E4C,U+5EB6,U+602F,U+606C,U+607A,U+608D,U+620C,U+6249,U+62C4,U+62ED,U+6345,U+6396,U+6400,U+6402,U+6413,U+6487,U+64AC,U+6556,U+659F,U+65A1,U+667E,U+67E0,U+6A80,U+6B86,U+6C5E,U+6C85,U+6CDE,U+6D19,U+6D31,U+6D93,U+6DA7,U+6DAE,U+6E25,U+6E4D,U+6E5F,U+6EC1,U+6F31,U+6F5E,U+6F7A,U+701B,U+70AB,U+717D,U+71A8,U+7252,U+72C4,U+72E1,U+7315,U+73AE,U+73C0,U+73C2,U+745A,U+752D,U+75A4,U+7601,U+768B,U+772F,U+77B0,U+783A,U+78FA,U+7977,U+7B71,U+7B94,U+7F28,U+7F2B,U+80E5,U+80EB,U+8110,U+812F,U+814C,U+8235,U+828B,U+82D4,U+8309,U+83C1,U+8469,U+84BF,U+84D3,U+84E6,U+86DB,U+86FE,U+8757,U+8859,U+88A4,U+88F3,U+8BE7,U+8BFD,U+8C24,U+8D4A,U+8D4E,U+8D66,U+8DDA,U+8E52,U+8F76,U+90AC,U+90B3,U+90B8,U+9119,U+9131,U+94E2,U+94FF,U+9535,U+965B,U+96F9,U+9774,U+998D,U+998F,U+9A7F,U+9AB8,U+9B13,U+9C9F,U+9E43,U+9E8B,U+9E92,U+9EEF;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./8c07e7f812cf702d22c24a8af27a14ca.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4E10,U+4E98,U+4F3A,U+4F5F,U+4F88,U+4FA5,U+504C,U+52FA,U+5364,U+53E8,U+5406,U+5471,U+54DF,U+54E6,U+557C,U+5583,U+55DC,U+55E3,U+5944,U+5983,U+59CA,U+5A13,U+5A7F,U+5B09,U+5F1B,U+60CB,U+61A7,U+61AC,U+62A0,U+62EE,U+62F4,U+6382,U+63C9,U+63EA,U+645E,U+6593,U+6615,U+66E6,U+67DA,U+6805,U+68A2,U+69AD,U+6A90,U+6B83,U+6BE1,U+6C30,U+6CAD,U+6CB1,U+6CF1,U+6DBF,U+6DC6,U+6E0D,U+6E3A,U+6E85,U+6EBA,U+6F7C,U+71EE,U+72B7,U+72E9,U+73BA,U+73D1,U+7435-7436,U+747E,U+7487,U+74E2,U+7504,U+752C,U+7599,U+759F,U+75CA,U+761F,U+7629,U+7785,U+77A5,U+77BF,U+78D5,U+7934,U+79A7,U+7B19,U+7C95,U+7CB1,U+7CE0,U+7ECA,U+7EF7,U+7F81,U+8046,U+8148,U+8165,U+819B,U+81BA,U+82AE,U+82B7,U+82D3,U+8301,U+831C,U+8338,U+837C,U+8393,U+83BA,U+853C,U+8654,U+8712,U+873F,U+874E,U+8783,U+8925,U+8BB7,U+8BFF,U+8C1B,U+8C2C,U+8D61,U+8F8A,U+8FE5,U+8FF8,U+912F,U+9163,U+91DC,U+94A8,U+94C0,U+9539,U+954C,U+9550,U+955B,U+962A,U+9685,U+988D,U+9975,U+9985,U+9C7F,U+9CA4,U+9CB8,U+9E25,U+9E35,U+9E4A;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./0272ed49b7c47a330d535353dd30e2fb.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4EA5,U+4EC3,U+4F36,U+4F84,U+4F97,U+501A,U+5201,U+543C,U+545C,U+5480,U+5495,U+54C7,U+5632,U+5676,U+56B7,U+5742,U+57A2-57A3,U+5815,U+58D1,U+5919,U+5955,U+59E5,U+5A34,U+5B70,U+5BD0,U+5BF0,U+5C41,U+5C94,U+5CE6,U+5D69,U+5DC5,U+5EB5,U+5F3C,U+5F95,U+604D,U+60E6,U+618B,U+61CB,U+62CE,U+62E7,U+631F,U+634E,U+6479,U+6482,U+660A,U+664F,U+672D,U+675E,U+6809,U+6868,U+68F1,U+68FA,U+693F,U+695E,U+6A71,U+6B89,U+6BD9,U+6D85,U+6DA3,U+6DAA,U+6DC7,U+6E43,U+6F3E,U+6F88,U+6FEE,U+70D9,U+722A,U+73F2,U+7409,U+7459,U+748B,U+749E,U+759A,U+75A1,U+75D2,U+75EB,U+766B,U+7738,U+773A,U+77AA,U+795B,U+796F,U+7A20,U+7AA5,U+7B03,U+7B28,U+7BF1,U+7C38,U+7EAD,U+7EC5,U+7EF0,U+7F0E,U+7F2E,U+7F9A,U+7FCC,U+8098,U+80E7,U+8237-8238,U+8299,U+82CE,U+8398,U+83E0,U+8426,U+8475,U+86DF,U+871A,U+891A,U+8BB4,U+8BE3,U+8C06,U+8C0D,U+8C19,U+8DB4,U+8DE4,U+8E1E,U+8E66,U+8E6C,U+8F84,U+901E,U+90F4,U+9165,U+91C9,U+94B3,U+94E8,U+9504,U+9532,U+954D,U+95FA,U+9704,U+9A6F,U+9AA5;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./b58ec0c51524ae3a1a14731a9cd885e5.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4EA2,U+5029,U+516E,U+51DB,U+527F,U+5288,U+5321,U+53E9,U+5501,U+56BC,U+56E4,U+5703,U+5729,U+575E,U+592D,U+5A05,U+5A25,U+5A77,U+5A9B,U+5AB2,U+5BDD,U+5C79,U+5C91,U+5CED,U+5FFB,U+6055,U+60EB,U+60F6,U+6123,U+6151,U+61A8,U+620D,U+6273,U+6289,U+62C7,U+62D9,U+634D,U+6452,U+64D2,U+6726,U+6756,U+6862,U+68E3,U+6942,U+6995,U+69B4,U+69CC,U+6A44,U+6BCB,U+6BD3,U+6C40,U+6CBD,U+6CF8,U+6CFE,U+6E0E,U+6E44,U+6F8E,U+7095,U+7099,U+70BD,U+70E8,U+70FD,U+715E,U+7184,U+71CE,U+7235,U+7239,U+733F,U+749C,U+74A8,U+7620,U+7693,U+76CF,U+776B,U+778E,U+7852,U+78BE,U+7948,U+79BA,U+79C3,U+7A96,U+7B50,U+7B77,U+7D6E,U+7EE2,U+7EFD,U+7F24,U+7F2D,U+7F79,U+80F3,U+818A,U+81E7,U+82B8,U+837B,U+8386,U+83BD,U+83CF,U+85D5,U+85DC,U+8747,U+888D,U+88F4,U+8BEC,U+8BF2,U+8C0E,U+8D31,U+8D48,U+8E4A,U+8F97,U+8F99,U+8FE9,U+9083,U+914C,U+94B0,U+94F5,U+952F,U+956D,U+95F5,U+9668,U+9698,U+96BD,U+96CD,U+96EF,U+9713,U+9773,U+97EC,U+996A,U+997A,U+9A74,U+9A8B,U+9CC4,U+9CCC;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./2f717e8fa82e90cb410492b84d9b439b.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4FAE,U+4FEF,U+50A3,U+5189,U+5195,U+51F3,U+5228,U+53ED,U+5450,U+5484,U+5490,U+54C9,U+54E9,U+5543,U+5578,U+55D3,U+56A3,U+589F,U+5A04,U+5A36,U+5A9A,U+5AC2,U+5AD6,U+5BC7,U+5C2C,U+5C34,U+5CD9,U+5D0E,U+5E3C,U+5E87,U+5F64,U+5FE1,U+5FF1,U+6064,U+606A,U+6096,U+60F9,U+6252,U+627C,U+62C2,U+62EF,U+6361,U+6363,U+63B7,U+63E3,U+6518,U+66AE,U+6789,U+6829,U+6866,U+6893,U+6984,U+6A1F,U+6A59,U+6BA1,U+6C13,U+6C90,U+6CD3,U+6CD7,U+6D5A,U+6D9F,U+6DCC,U+6EA5,U+6EE6,U+6F2F,U+701A,U+709C,U+70AF,U+70DB,U+71A0,U+7280,U+72F8,U+745B-745C,U+7480,U+74A7,U+76B1,U+76CE,U+7736,U+781A,U+789F,U+797A,U+79BE,U+79C6,U+79F8,U+7A8D,U+7A98,U+7AFF,U+7B1B,U+7CD9,U+7EEE,U+7FD8,U+800D,U+8116,U+8151,U+8205,U+82C7,U+82DB,U+832C,U+8335,U+8339,U+846B,U+8587,U+8611,U+8682,U+868A,U+868C,U+88D8,U+8912,U+8BBD,U+8C41,U+8D3B-8D3C,U+8DEA,U+8E35,U+8EAC,U+8FE2,U+9017,U+918B,U+94CE,U+94F2,U+951A,U+9672,U+9992,U+9A6D,U+9A79,U+9A85,U+9CBB,U+9CD7,U+9E26,U+9E93;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./fd4dcdbf2ce22ecad804c9ed8ecf5584.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4E4D,U+4E5E,U+50DA,U+51A4,U+5254,U+533E,U+53EE,U+5435,U+548B,U+54D7,U+560E,U+5760,U+5830,U+58A9,U+59E8,U+5A07,U+5A23,U+5A3C,U+5B5A,U+5BB5,U+5BC5,U+5BDE,U+5C7F,U+5CB1,U+5CE8,U+5CEA,U+5F57,U+5F5D,U+5F87,U+601C,U+6177,U+625B,U+62E3,U+62F1,U+634F,U+6401,U+6495,U+64C2,U+6512,U+6577,U+6590,U+65A7,U+65F7,U+6627,U+6714,U+67D1,U+67FF,U+68D8,U+6930,U+6960,U+6977,U+69BB,U+69D0,U+6A31,U+6B7C,U+6BB4,U+6C72,U+6C79,U+6C7E,U+6C81,U+6C93,U+6CA5,U+6DF3,U+6E2D,U+6EC7,U+6F13,U+6F33,U+6F62,U+6FA1,U+7011,U+707C,U+708A,U+70C1,U+7281,U+7357,U+7405,U+742A,U+75EA,U+7682,U+7792,U+77D7,U+77F6,U+7941,U+79E4,U+7A1A,U+7A9C,U+7B5D,U+7BF7,U+7C07,U+7C3F,U+7C9F,U+7EAB,U+7EDA,U+7F15,U+7F9E,U+7FDF,U+7FE9,U+803D,U+80B4,U+8155,U+82B9,U+82DF,U+8304,U+83B9,U+8446,U+865E,U+86D9,U+8862,U+889C,U+8BB3,U+8BB6,U+8DCB,U+8E44,U+8EAF,U+8F8D,U+9050,U+90F8,U+914B,U+948A,U+94EE,U+962E,U+9647,U+9661,U+9716,U+9761,U+97A0,U+9A8F,U+9AE6,U+9CD6;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./aa4638441dd86aeb35eda2a9e688e05f.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4EA8,U+4F51,U+4F63,U+4F7C,U+4F83,U+4FA0,U+4FD1,U+4FFA,U+5018,U+508D,U+50BB,U+50FB,U+515C,U+5319,U+5413,U+54D1,U+5587,U+5598,U+55A7,U+576F,U+5777,U+57AE,U+5978,U+5A49,U+5AB3,U+5B9B,U+5BE5,U+5C09,U+5C27,U+5E18,U+5E9A,U+5F8A,U+5F98,U+6021,U+60BC,U+6254,U+626F,U+631A,U+631D,U+6320,U+6346,U+63BA,U+6467,U+64BC,U+6643,U+66D9,U+66DD,U+67AB,U+6817,U+68A7,U+68CD,U+68E0,U+6986,U+6BD7,U+6CBE,U+6D3C,U+6DE4,U+6E1D,U+6E9C,U+6ED4-6ED5,U+6F4D,U+70EB,U+70F9,U+7130,U+71AC,U+7316,U+73CA,U+7422,U+7426,U+745F,U+75AF,U+763E,U+7696,U+7737,U+7741,U+77A7,U+77EE,U+788C,U+7901,U+79FD,U+7A3C,U+7A57,U+7EB6,U+7EE5,U+7F09,U+7F2A,U+7F38,U+7FA1,U+8018,U+8038,U+803F,U+804B,U+81FB,U+82AD,U+8327,U+8354,U+835F,U+8367,U+836B,U+8471,U+849C,U+84C9,U+8517,U+851A,U+88D9,U+88F9,U+89C5,U+8C34,U+8D81,U+8E0A,U+8E72,U+901B,U+9091,U+90AF,U+915D,U+946B,U+9524,U+952D,U+9551,U+9576,U+96CF,U+97F6,U+98A4,U+9A7C,U+9A86,U+9E3D,U+9ED4;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./d7075fbb054c3a549d2037b0d020e803.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4E53,U+4FDE,U+4FED,U+502A,U+50B2,U+5162,U+51F0,U+52C9,U+52CB,U+532A,U+5349,U+53A2,U+54C4,U+54E8,U+5580,U+561B,U+574E,U+5764,U+57E0,U+5885,U+58F6,U+59AE,U+5AE9,U+5B5C,U+5C39,U+5C82,U+5C90,U+5DCD,U+5E37,U+5E90,U+5ED6,U+5F6A,U+5F6C,U+6073,U+6127,U+6328,U+6367,U+6380,U+638F,U+6454,U+655E,U+65ED,U+663C,U+66A8,U+6749,U+674F,U+6854,U+6A0A,U+6B49,U+6B6A,U+6BEF,U+6C82,U+6D9D,U+6DA4,U+6DC4,U+6DEB,U+6E5B,U+6F47,U+6F6D,U+6FD2,U+70AC,U+70B3,U+70E4,U+7261,U+72EE,U+7433,U+7476,U+7529,U+7554,U+762B,U+76EF,U+7750,U+7766,U+7779,U+7784,U+780D,U+7838,U+79E7,U+7A9F,U+7B0B,U+7C7D,U+7F20,U+7FE0,U+8042,U+8086,U+8292,U+829C,U+82D1,U+832B,U+838E,U+839E,U+83F1,U+8403,U+857E,U+8695,U+87F9,U+88B1,U+88E4,U+8C05,U+8D42-8D43,U+8D63,U+8D9F,U+8DFB,U+8E22,U+8EBA,U+8F67,U+8F69,U+8F9C,U+902E,U+90A2,U+90B5,U+90DD,U+949E,U+94A7,U+94C5,U+9523,U+960E,U+978D,U+9976,U+99A8,U+9B41,U+9B44,U+9C8D,U+9E9F,U+9F9A;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./423539fefd434588b54fc2a4e40dba44.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+2500,U+4E52,U+4FA3,U+4FCF,U+4FE9,U+5197,U+51A5,U+51AF,U+5239,U+52AB,U+5306,U+5384,U+5395,U+5401,U+548F,U+54B1,U+5564,U+5589,U+55FD,U+56DA,U+572D,U+575F,U+57D4,U+594E,U+59D1,U+59EC,U+5A1F-5A20,U+5C9A,U+5D14,U+5D16,U+5D2D,U+5DFE,U+5E06,U+5E27,U+5E62,U+5F08,U+61BE,U+6233,U+6296,U+62DA,U+62E6,U+62F7,U+63A0,U+65BC,U+6628,U+6656,U+6664,U+673D,U+6795,U+67A3,U+67C4,U+67EC,U+6850,U+6853,U+68AD,U+68F5,U+69A8,U+6B79,U+6C55,U+6C5B,U+6C5D,U+6CA7,U+6CE3,U+6DA9,U+6DD1,U+6E24,U+6F9C,U+7078,U+707F,U+7115,U+725F,U+7334,U+73AB,U+73B2,U+741B,U+743C,U+75F9,U+7600,U+77A9,U+77E2,U+78CB,U+7AA6,U+7AE3,U+7CDF,U+7D0A,U+7F05,U+7F9F,U+8113,U+821C,U+840D,U+84B2,U+85C9,U+8749,U+8774,U+886B,U+895F,U+8A79,U+8C2D,U+8C79,U+8D29,U+8D3F,U+8D4C,U+8E29,U+8EB2,U+8F7F,U+8FC4,U+8FED,U+90B1,U+90B9,U+9102,U+9171,U+9493,U+94C3,U+950C,U+9525,U+9530,U+95EF,U+9608,U+961C,U+964B,U+96C0,U+97AD,U+9A84,U+9ABC;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./37b2b4c4f322af9d49ec6d69fb9d46be.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4E1E,U+4EC6,U+4ED5,U+4F1E,U+4F50,U+5026,U+51C4,U+51CB,U+51D1,U+5225,U+522E,U+5308,U+532E,U+533F,U+541F,U+5475,U+54AC,U+54ED,U+5565,U+558A,U+566C,U+57A6,U+598A,U+5A1C,U+5B75,U+5BE1,U+5BE8,U+5C6F,U+5D29,U+5ECA,U+5F13,U+5F66,U+6020,U+6084,U+611A,U+620A,U+620E,U+6241,U+62E2,U+632A,U+633D,U+63FD,U+6405,U+655B,U+658B-658C,U+65A9,U+662D,U+6687,U+6A58,U+6B47,U+6C1F,U+6C9B,U+6CB8,U+6CFC,U+6D74,U+6E32,U+6E58,U+6F84,U+70D8,U+7109,U+714E,U+718F,U+723D,U+72E0,U+739B,U+7410,U+7470,U+7538,U+7626,U+777F,U+78CA,U+79B9,U+7A91,U+7C27,U+7CD5,U+7E82,U+7ECE,U+7ED1-7ED2,U+7EE3,U+7F00,U+7FC5,U+803B,U+8087,U+817B,U+8302,U+8346,U+8389,U+841D,U+8482,U+8549,U+864F,U+8681,U+8910,U+8944,U+8B6C,U+8BC0,U+8BEB,U+8C0A,U+8C1C,U+8C6B,U+8D50,U+8E81,U+906E,U+915A,U+949B,U+94A6,U+94AE,U+9540,U+95FD,U+96A7,U+9882,U+9885,U+9890,U+9896,U+9965,U+997C,U+997F,U+9A9A,U+9E2D,U+9E4F,U+9F9F;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./3cf21bf489a799f50ab2eeb40d40e50a.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4E38,U+4E9F,U+4EC7,U+4F8D,U+4FCA,U+51B6,U+51FF,U+5203,U+5351,U+540F,U+5455,U+54B8,U+54C0,U+5507,U+5566,U+576A,U+5962,U+5984,U+59DA,U+5A18,U+5BA0,U+5C38,U+5C51,U+5C60-5C61,U+5E05,U+5ED3,U+5F0A,U+5F27,U+606D,U+6094,U+60D5,U+60DF,U+6124,U+6155,U+621A,U+6247,U+6284,U+62CC,U+62D0,U+6349,U+635E,U+640F,U+6614,U+6655,U+6674,U+67EF,U+6808,U+6816,U+68A8,U+68D5,U+6905,U+6912,U+69DB,U+6BB7,U+6CA6,U+6CAA,U+6CBC,U+6D12,U+6D3D,U+6DA1,U+6DF9,U+6E34,U+6E89,U+70F7,U+716E,U+7194,U+7199,U+72AC,U+75AE,U+780C,U+785D,U+7940,U+79C9,U+7B52,U+7BC6,U+7CA5,U+7EDE,U+7F1A,U+7FF0,U+8026,U+809A,U+80BD,U+80F1,U+819D,U+8305,U+83C7,U+83E9,U+840E,U+859B,U+85AF,U+86C7,U+86EE,U+8700,U+8721,U+8877,U+88D4,U+88F8,U+8A93,U+8BCF,U+8C23,U+8C26,U+8D2E,U+8D3E,U+8FB0-8FB1,U+901D,U+916E,U+9170,U+9177,U+917F,U+94BE,U+94EC,U+9508,U+96C1,U+971E,U+9738,U+973E,U+9877,U+98D8,U+9CDE,U+9E7F;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./39b62ffec4644d0a9b53165cfc23ff6a.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4E08,U+4E11,U+4ED1,U+4ED7,U+4F3D,U+4FA8,U+4FD8,U+50E7,U+5154,U+5179,U+5180,U+5188,U+51F9,U+52FE-52FF,U+5320,U+5352,U+535C,U+5378,U+537F,U+538C,U+53D4,U+5415,U+543B,U+5446,U+5792,U+57AB,U+584C,U+5986,U+59B9,U+5A46,U+5AC1,U+5BB4,U+5BC2,U+5D1B,U+5DEB,U+5DF7,U+5E16,U+5E1C,U+5F17,U+6016,U+60E8,U+614C,U+6168,U+626D,U+62FE,U+6323,U+679A,U+6869,U+6897,U+6C70,U+6CF3,U+6D51,U+6DAF,U+6DEE,U+6E23,U+6EA2,U+6EE9,U+711A,U+72FC,U+752B,U+7578,U+75B9,U+75F4,U+76D2,U+77AC,U+77BB,U+77EB,U+7897-7898,U+78A7,U+78C5,U+79BD,U+7A3D,U+7A46,U+7AD6,U+7B3C,U+7CA4,U+7CAA,U+7CB9,U+7EAC,U+7EB1,U+7EF8,U+7F14,U+7FC1,U+7FD4,U+8000,U+80DA,U+8180,U+82A6,U+8328,U+840C,U+8427,U+85E4,U+85E9,U+85FB,U+8650,U+8679,U+867E,U+8776,U+886C,U+8F70,U+8FA3,U+904F,U+90AA,U+90CA,U+916F,U+9175,U+9489,U+94A5,U+94A9,U+9541,U+95F8,U+9640,U+96CC,U+971C,U+987D,U+9A73,U+9E45,U+9E64;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./b86aea3c77fed71f6b2082ae352b414e.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4E22,U+5085,U+50F5,U+51F6,U+5265,U+5389,U+53A8,U+53DB,U+541E,U+5440,U+54BD,U+54FA,U+5524,U+5582,U+5751,U+5824,U+5915,U+59DC,U+5A03,U+5A31,U+5BB0,U+5CFB,U+5D4C,U+5E15,U+5E7D,U+5EB8,U+5F6D,U+6068,U+607C,U+60A0,U+6101,U+6170,U+61C8,U+61D2,U+6208,U+6251,U+62AC,U+62B9,U+62F3,U+6324,U+633A,U+644A,U+6492,U+6572,U+65A5,U+6602,U+660F,U+6652,U+6668,U+6735,U+67A2,U+67AF,U+67CF,U+680B,U+684C,U+68B3,U+6A61,U+6C6A,U+6C92,U+6CCA,U+6CEA,U+6CFB,U+6D47,U+6D4A,U+6D4F,U+6D9B,U+6DD8,U+6F06,U+6F58,U+70C2,U+714C,U+727A,U+72D0,U+731C,U+7574,U+75D5,U+75F0,U+76FC,U+7960,U+7984,U+7EF5,U+7F62,U+8096,U+80D6,U+818F,U+81B3,U+8236,U+8258,U+8273,U+82AC,U+82CD,U+82EF,U+82F9,U+830E,U+83CA,U+8513,U+8521,U+853D,U+8574,U+871C,U+8896,U+8D1E,U+8D2C,U+8D5A,U+8D74,U+9063,U+90CE,U+9510,U+95F7,U+95F9,U+964C,U+970D,U+9756,U+978B,U+98A0,U+9A82,U+9B45,U+9B54,U+9E70;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./6ada6d691877454e16616d059de86ac0.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4E54,U+4EAD,U+4FA6,U+5077,U+5146,U+5256,U+529D,U+52A3,U+5366-5367,U+53A6,U+5496,U+54B3,U+5631,U+5784,U+582A,U+592F,U+5937,U+5948,U+5974,U+59A8,U+5BD3,U+5CB3,U+5CE1,U+5F18,U+5F26,U+6012,U+6028,U+60A6,U+60DC,U+6109,U+626E,U+6292,U+629B,U+62D6,U+632B,U+64CE,U+64E6,U+65EC,U+6691,U+6760,U+676D,U+67DC,U+6813,U+68CB,U+68D2,U+6BBF,U+6BC5,U+6C41,U+6CAB,U+6D66,U+6E0A,U+6EAF,U+6EE8,U+6F02,U+7076,U+7092,U+718A,U+71D5,U+722C,U+7237,U+7272,U+72ED,U+72F1,U+730E,U+732B,U+7384,U+74E3,U+754F,U+7978,U+7A83-7A84,U+7A9D,U+7AED,U+7B5B,U+7BEE,U+7EBA,U+7EF3,U+7F06,U+7F55,U+8036,U+804A,U+806A,U+80AA,U+80F0,U+813E,U+8206,U+8231,U+829D,U+82BD,U+83B2,U+845B,U+84EC,U+884D,U+8881,U+8BDE,U+8D3A,U+8E0F,U+8E48,U+8F9F,U+900A,U+9022,U+9038,U+90E1,U+94ED,U+9502,U+9521,U+968B,U+96C7,U+9709,U+9776,U+97E6-97E7,U+9A70,U+9AD3,U+9E3F,U+9ECF;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./67cc89bb1a84552b002953998db5c93e.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4E18-4E19,U+4E1B,U+4E7E,U+4E8F,U+5144,U+51CC,U+51E4,U+51EF,U+51F8,U+524A,U+5251,U+52D8,U+5300,U+5353,U+5362,U+5439,U+543E,U+5561,U+5634,U+575D,U+5821,U+5858,U+5938,U+5960,U+59D0,U+5B5F,U+5CAD,U+5E10,U+5E3D,U+5E7B,U+5E99,U+5F70,U+602A,U+604B,U+60E7,U+62AB,U+62D8,U+6321,U+63A9,U+643A,U+6478,U+64C5,U+6500,U+6566,U+659C,U+65A4,U+6734,U+67F4,U+683D,U+6851,U+6876,U+68C9,U+68DA,U+690E,U+699C,U+6B3A,U+6C83,U+6D69,U+6E83,U+6EAA,U+6EDA,U+6EE5,U+70AE,U+72B9,U+73BB,U+7483,U+74DC,U+751C,U+7709,U+77E3,U+7802,U+7891,U+78F7,U+7965,U+796D,U+7985,U+7CCA,U+7F50,U+7F69,U+7FBD,U+80FA,U+8106,U+814A,U+81ED,U+8247,U+83B1,U+848B,U+84C4,U+8702,U+888B,U+8BF5,U+8F88,U+8FEA,U+903C,U+903E,U+9065,U+9080,U+9189,U+94A0,U+94BB,U+94DD,U+9505,U+9526,U+95EA,U+9600,U+966A,U+9699,U+96FE,U+9972,U+9A91,U+9B3C,U+9B42,U+9ECE,U+9F0E;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./319fe728346b646e7603e9485a490f94.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4F2A,U+4F69,U+4FF1,U+5151,U+517D,U+5220,U+52DF,U+53C9,U+53E0,U+53F9,U+540A,U+5410,U+554A,U+55BB,U+566A,U+574A,U+57C3,U+57CB,U+5835,U+5939,U+5954,U+59A5,U+59FB,U+59FF,U+5ACC,U+5B5D,U+5BF8,U+5DE2,U+5E9E,U+5F04,U+5F25,U+5F2F,U+5FCC-5FCD,U+60D1,U+60E9,U+6148,U+6350,U+642C,U+6591,U+65F1,U+65FA,U+67D4,U+67F3,U+680F,U+682A,U+6842,U+69FD,U+6B20,U+6B67,U+6C2E-6C2F,U+6C57,U+6C88,U+6CF5,U+6D46,U+6DC0,U+6ECB,U+6F20,U+70EF,U+710A,U+71E5,U+72C2,U+72D7,U+731B,U+74F7,U+755C,U+756A,U+75B2,U+76C6,U+76F2,U+775B,U+77E9,U+786B,U+795D,U+79D2,U+7A77,U+7BAD,U+7EBD,U+80A2,U+80A9,U+810A,U+817E,U+81A8,U+81C2,U+820C,U+821F,U+8230,U+827E,U+8352,U+83F2,U+8404,U+8428,U+8461,U+846C,U+88AD,U+88D5,U+8D24,U+8D2A,U+8D6B,U+8FBD,U+8FC8,U+9042,U+9093,U+90C1,U+94F8,U+9601,U+96B6,U+96D5,U+97F5,U+9887,U+9971,U+9E23,U+9F7F;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./140d7c3f82c5d83fa5ebc83b0ed53361.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4E32,U+4EA9,U+4ED4,U+4ED9,U+4FAF,U+5076,U+50AC,U+5112,U+51BB,U+526A,U+52B2,U+52C3,U+5339,U+559D,U+55B7,U+5733,U+575B,U+5893,U+58F3,U+5951,U+59C6,U+5A74,U+5BBF,U+5C48,U+5DE1,U+5E55,U+5FA1,U+5FBD,U+5FD9,U+5FE7,U+60AC,U+6212,U+629A,U+62DC,U+62E8,U+62FC,U+641E,U+6447,U+649E,U+64B0,U+65C1,U+6606,U+6653,U+66FC,U+676F,U+67AA,U+6843,U+68AF,U+6B23,U+6C1B,U+6C28,U+6C64,U+6CC4,U+6CCC,U+6D78,U+6D8C,U+6DCB,U+6EDE,U+6EF4,U+70AD,U+70B8,U+70E6,U+7545,U+7586,U+75BC,U+76C8,U+76D7,U+7816,U+7845,U+7855,U+788E,U+78B0-78B1,U+79E9,U+7A00,U+7A0D,U+7A3B,U+7A74,U+7B4B,U+7F1D,U+7F8A,U+7FFC,U+8058,U+80C1,U+8138,U+8170,U+817F,U+82B3,U+8361,U+864E,U+8680,U+87BA,U+8854,U+8C6A,U+8D41,U+8D64,U+8D76,U+8E2A,U+8F89,U+8F90,U+8F9E,U+90BB,U+90ED,U+9187,U+953B,U+9610,U+9655,U+9881,U+9988,U+9E21,U+9F20,U+9F3B;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./ab4213392d084ab0ebc642d8c77a6d8d.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4E27,U+4EF0,U+4F10,U+5021,U+51C9,U+5200,U+5269,U+5272,U+5398,U+53D9,U+5427,U+5609,U+56CA,U+5761,U+5782,U+5806,U+58E4,U+593A,U+5949,U+5999,U+59BB,U+5B55,U+5B64,U+5B99,U+5BAA,U+5BBE,U+5BC4,U+5BFA,U+5BFF,U+5C16,U+5C18,U+5C4F,U+5DE9,U+5EC9,U+5EF7,U+5F7C,U+6052,U+6070,U+609F,U+60B2,U+62A2,U+62B1,U+6302,U+6355,U+6377,U+63D2,U+63ED,U+642D,U+6446,U+6458,U+64A4,U+654C,U+65E8,U+660C,U+66F0,U+6770,U+679D,U+6C22,U+6CC9,U+6D45,U+6E14,U+6E17,U+6EE4,U+6F2B,U+7089,U+7238,U+7275,U+732A,U+7434,U+745E,U+74F6,U+7720,U+7A3F,U+7B11,U+7C98,U+7D2B,U+7EB2,U+7EB9,U+80A4,U+80CE,U+8212,U+8270,U+84B8,U+852C,U+85AA,U+89C8,U+8BF1,U+8C28,U+8C46,U+8D1D,U+8D5E,U+8D60,U+8D62,U+8F9B,U+8FA8,U+8FF7,U+90AE,U+90D1,U+916C,U+9176,U+9499,U+94FA,U+9635,U+96C5,U+9888,U+9A7B,U+9AA4,U+9B4F,U+9E1F,U+9EA6;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./49be1538eff29b63d05de592dccebc7a.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4E39,U+4E95,U+4ED3,U+5192,U+5237,U+52D2,U+52E4,U+5348,U+5375,U+54E5,U+5531,U+573E,U+5783,U+594F,U+5976,U+5B85,U+5B8F,U+5C1D,U+5C3A,U+5E86,U+5F1F,U+5F79,U+5FD8,U+6069,U+60CA,U+6108,U+614E,U+61C2,U+6234,U+626B,U+6270,U+62C6,U+62D2,U+62D4,U+6398,U+63F4,U+6469,U+6562,U+656C,U+65CB,U+6670,U+6676,U+6696,U+66F9,U+6717,U+6746,U+675C,U+6846,U+6885,U+6BC1,U+6CF0,U+6D2A,U+6DFB,U+6F0F,U+6FB3,U+704C,U+7070,U+7267,U+73CD,U+758F,U+78E8,U+7A97,U+7ADF,U+7AF9,U+7BB1,U+7C97,U+8015,U+8083,U+80BE,U+80C0,U+80E1,U+80F8,U+8154,U+8179,U+81E3,U+820D,U+8350,U+8463,U+84DD,U+8870,U+8BC8,U+8C8C,U+8D4B,U+8DC3,U+8DCC,U+8DD1,U+8F68,U+8F74,U+8F96,U+8FA9,U+8FDF,U+9003,U+9006,U+90A6,U+94DC,U+9501,U+950B,U+95F2,U+9614,U+9675-9676,U+9686,U+96EA,U+97E9,U+987F,U+996D,U+9970,U+9EBB;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./8846f4a6d40d34da3f843410072f9f6b.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4E01,U+4E43,U+4E4C,U+4EC1,U+4EF2,U+4EFF,U+4F0A,U+4F0F,U+4F19,U+4F26,U+4F38,U+503E,U+5141,U+51B0,U+51E1,U+51FD,U+520A,U+5409,U+5434,U+54A8,U+54C8,U+5708,U+5723,U+5766,U+585E,U+5899,U+58A8,U+58C1,U+58EE,U+5987-5988,U+5BD2,U+5C3E,U+5CA9,U+5CB8,U+5D07,U+5E84,U+5F90,U+5F92,U+5FE0,U+5FFD,U+6050,U+6089,U+622A,U+624E,U+6291,U+6316,U+6389,U+641C,U+664B,U+6697,U+6731,U+67F1,U+6A2A,U+6CE1,U+6CFD,U+6D1B,U+6D1E,U+6D59,U+6D6A,U+6D6E,U+6D82,U+6DB5,U+6DE1,U+6E21,U+70BC,U+7206,U+73E0,U+74E6,U+7518,U+7686,U+76DF,U+79E6,U+7EA4,U+7EB5,U+8010,U+8033,U+808C,U+80AF,U+80C3,U+80C6,U+80F6,U+82AF,U+83AB,U+8584,U+866B,U+8A89,U+8BAF,U+8BE6,U+8C0B,U+8C10,U+8C31,U+8C37,U+8D21,U+8D4F,U+8D56,U+8DF3,U+8FCE,U+8FD4,U+8FEB,U+903B,U+906D,U+9897,U+9910,U+9C81,U+9ED8;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./e5857488f4cd10e545f93e373841de9a.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4E1D,U+4E3D,U+4E58,U+4E73,U+4F0D,U+4F2F,U+4F73,U+4FC4,U+5012,U+51AC,U+51ED,U+52C7,U+5385,U+541B,U+5428,U+54F2,U+552F,U+5750,U+5851,U+5854,U+5965,U+5B59,U+5B87,U+5CF0,U+5DE7,U+5E78,U+5F03,U+5FC6,U+6015,U+6062,U+60E0,U+6263,U+62BC-62BD,U+62CD,U+6491,U+65D7,U+65E6,U+6682,U+66FF,U+6768,U+6881,U+68A6,U+68B0,U+68EE,U+6B32,U+6B96,U+6BEB,U+6CE5,U+6D17,U+6D25,U+6D53,U+6E20,U+6E7F,U+6EB6,U+6ED1,U+6F6E,U+706F,U+70E7,U+7164,U+7262,U+73A9,U+7624,U+76D0,U+76FE,U+7761,U+77DB,U+78C1,U+79D8,U+7C4D,U+7C92,U+7CAE,U+7EA0,U+7EAF,U+7ED8,U+7F18,U+809D,U+8102,U+810F,U+811A,U+8150,U+817A,U+8377,U+8499,U+8857,U+8863,U+88C2,U+8BDA,U+8BFA,U+8C01,U+8C22,U+8D75,U+8F86,U+8FF9,U+9012,U+9075,U+9192,U+91CE,U+9677,U+9694,U+9707,U+989C,U+9A71,U+9A97;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./c2c5dad7cebe52c61d11b250772f6226.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4E59,U+4E71,U+4EAE,U+4F1F,U+4FB5,U+4FD7,U+500D,U+517C,U+51C0,U+51DD,U+523A,U+53EC,U+5706,U+5740,U+590F,U+591C,U+594B,U+59D3,U+5A92,U+5B81,U+5C3C,U+5C3F,U+5C4A,U+5C65,U+5C97,U+5C9B,U+5DDD,U+5E2D,U+5E97,U+5F39,U+5F7B,U+6000,U+6076,U+6167,U+626C,U+6276,U+62D3,U+6311,U+632F,U+6444,U+654F,U+66B4,U+670B,U+672B,U+6740,U+695A,U+6B8B,U+6C0F,U+6C9F,U+6CBF,U+6D01,U+6DA6,U+6DA8,U+6E7E,U+706D,U+70DF,U+71C3,U+7259,U+7389,U+7537,U+7591,U+76DB,U+77FF,U+788D,U+79CB,U+7B79,U+7C89,U+7EB8,U+7ED5,U+7EEA,U+7F34,U+7F72,U+7FFB,U+80A0,U+80BA,U+80BF,U+80DC,U+821E,U+82D7,U+8986,U+8BBC,U+8BD1,U+8D25-8D26,U+8D34,U+8D54,U+8D5B,U+8F85,U+8FC1,U+8FC5,U+904D,U+955C,U+95ED,U+9634,U+96E8,U+96F7,U+9875-9876,U+9A76,U+9A7E,U+9C9C,U+9F84;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./555b3d8ef206ac3411090208f834815c.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4E4F,U+4EA1,U+4EA6,U+4EEA,U+4F34,U+4F5B,U+504F,U+51A0,U+521A,U+52AA,U+5377,U+539A,U+547C,U+559C,U+574F,U+586B,U+5947,U+5A01,U+5A5A,U+5B54,U+5B8B,U+5B9C,U+5BAB,U+5BFB,U+5C0A,U+5C1A,U+5C4B,U+5DF4,U+5E9F,U+5F69,U+5FAA,U+60A8,U+60EF,U+6293,U+6298,U+62B5,U+62DF,U+62FF,U+63CF,U+65E7,U+6620,U+665A,U+6863,U+6865,U+697C,U+6B22,U+6B4C,U+6B8A,U+6BD5,U+6C38,U+6C89,U+6C99,U+6F5C,U+707E,U+70C8,U+7126,U+725B,U+764C,U+7687,U+786C,U+78B3,U+793C,U+7956,U+7981,U+79C0,U+7A7F,U+7CD6,U+7E41,U+7EB7,U+8017,U+8089,U+80A5,U+8109,U+8239,U+8336,U+8363,U+83CC,U+83DC,U+86CB,U+89E6,U+8BE2,U+8BF8,U+8C13,U+8D2F,U+8D35,U+8DE8,U+8F91,U+9014,U+9274,U+949F,U+94A2,U+95FB,U+963B,U+963F,U+9646,U+96C4,U+9732,U+9C7C,U+9F50;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./cbb52751a158592bcabbeabcba4ece01.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4E45,U+4F11,U+4FA7,U+507F,U+5170,U+5175,U+518C,U+51B2,U+51B7,U+5218,U+5238,U+5267,U+526F,U+5356,U+5382,U+53EB,U+53F6,U+5417,U+542F,U+5448,U+5510,U+592B,U+5956,U+5B63,U+5BBD,U+5C01,U+5C24,U+5DE8,U+5E0C,U+5E45,U+5E8A,U+5EA7,U+5EF6,U+5F31,U+6162,U+620F,U+62DB,U+62E5,U+653B,U+6551,U+6728,U+675F,U+677E,U+6B27,U+6BDB,U+6C27,U+6C47,U+6C60,U+6CDB,U+6D0B,U+6D3E,U+6DF7,U+6E10,U+6E2F,U+6E56,U+7075,U+708E,U+724C,U+7530,U+7532,U+76D6,U+76D8,U+79C1,U+79DF,U+7BC7,U+7D2F,U+7EE9,U+7F13,U+7F29,U+7F5A,U+819C,U+82E6,U+85CF,U+8861,U+88C1,U+8BA2,U+8BBF,U+8BCA,U+8BEF,U+8D38,U+8D8B,U+8DA3,U+8DDD,U+8DDF,U+8F6E,U+900F,U+9152,U+9605,U+9648,U+9690,U+96F6,U+9759,U+987E,U+996E,U+9986,U+9ED1,U+9F13;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./422eabf71b7848729fbd0bffd3d257d5.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4E30,U+4E4E,U+4F30,U+501F,U+5047,U+50A8,U+5211,U+5242,U+52B1,U+535A,U+5361,U+53CB,U+53E5,U+53F3,U+5403,U+5462,U+5473,U+5757,U+5802,U+5957,U+5979,U+5B88,U+5B97,U+5B9D,U+5C81,U+5DE6,U+5E1D,U+5E2E,U+5E7C,U+5E93,U+5F52,U+5F84,U+600E,U+613F,U+638C,U+63E1,U+64AD,U+6563,U+6597,U+65C5,U+65E2,U+6625,U+66F2,U+67B6,U+6C7D,U+6D32,U+6D89,U+719F,U+7236,U+72AF,U+732E,U+75BE,U+75DB,U+767B,U+76AE,U+7801,U+7968,U+798F,U+7ADE,U+7AE5,U+7B14,U+7B7E,U+7ECD,U+7EFF,U+7F57,U+80CC,U+8131,U+822A,U+82CF,U+8349,U+8651,U+865A,U+867D,U+8B66,U+8BA8,U+8C08,U+8D2B,U+8D37,U+8F6F,U+8FFD,U+9047,U+9057,U+907F,U+94B1,U+94C1,U+9519,U+9644,U+9760,U+987A,U+9891,U+98DE,U+9999,U+9AA8,U+9F99;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./a1a9732d15b75ffb346fa7024d3bfab3.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4E03,U+4E5D,U+4E70,U+4E88,U+4E91,U+4E9A,U+4EAB,U+4EB2,U+4ECD,U+4ED8,U+4EE4,U+4F24,U+4F3C,U+4F59,U+503A,U+505C,U+5178,U+51FB,U+523B,U+5343,U+534A,U+5370-5371,U+5374,U+542C,U+54EA,U+552E,U+56F0,U+5BA3,U+5C04,U+5E01,U+5EAD,U+5F85,U+6025,U+6258,U+6269,U+627E,U+6297,U+62C9,U+6325,U+6362,U+6388,U+63AA,U+64CD,U+661F,U+66FE,U+671D,U+6742,U+674E,U+677F,U+6811,U+690D,U+6982,U+6B66,U+6B7B,U+6BCD,U+6C49,U+6C61,U+6CE2,U+6DB2,U+6F14,U+751A,U+773C,U+7763,U+77ED,U+7B26,U+7B51,U+7D22,U+7D27,U+7EC3,U+7EDD,U+7EE7,U+7EFC,U+7F6A,U+805A,U+80DE,U+8111,U+82E5,U+8457,U+8BD7,U+8F7B,U+8F7D,U+8FDD,U+9000-9001,U+9010,U+9178,U+91CA,U+9488,U+94FE,U+952E,U+9547;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./04d2482312ead637c7909b29bf1c3db0.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4E34,U+4E3E,U+4EAC,U+4EBF,U+4ECB,U+4EFD,U+516B,U+5224,U+5360,U+536B,U+53BF,U+53CC,U+53E6,U+542B,U+5438,U+56ED,U+56FA,U+58F0,U+592E,U+5973,U+5B98,U+5BA4,U+5BCC,U+5BDF,U+5C14,U+5C3D,U+5C45,U+5DEE,U+5E95,U+5F02,U+5F55,U+5FAE,U+5FD7,U+6279,U+62C5,U+635F,U+63A2,U+65AF,U+65E9,U+671B,U+6B62,U+6BD2,U+6CB3,U+6CB9,U+6E29,U+6FC0,U+706B,U+7231,U+7248,U+72EC,U+73ED,U+7533,U+753B,U+7559,U+7565,U+75AB,U+75C7,U+7834,U+79FB,U+7A33,U+7A81,U+7AD9,U+7AEF,U+7B54,U+7EA2,U+7EAA,U+7EB3,U+7F16,U+7F3A,U+822C,U+826F,U+8865,U+89C9,U+8BAD,U+8BC9,U+8BCD,U+8D27,U+8D2D,U+8DF5,U+8F93,U+8FB9,U+8FDE,U+94F6,U+9633,U+9636,U+969C,U+9752,U+989D,U+9EC4;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./5c3ee9dea53a9d7b01438db18b7d9ee3.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4E50,U+4E61,U+4EC5,U+4F4F,U+4FBF,U+4FC3,U+4FEE,U+5019,U+5065,U+50CF,U+5145,U+514B,U+514D,U+516D,U+5174,U+51CF,U+5207,U+521D,U+52B3,U+53E4,U+5426,U+56E2,U+56F4,U+5747,U+575A,U+58EB,U+591F,U+592A,U+5BA2,U+5BB3,U+5BC6,U+5C5E,U+5DDE,U+5E8F,U+5EB7,U+5F20,U+5F81,U+60A3,U+6267,U+627F,U+62E9,U+62EC,U+6392,U+6545,U+65CF,U+666E-666F,U+667A,U+6750,U+6797,U+67D0,U+67D3,U+6B3E,U+6C5F,U+6E38,U+6EE1,U+7247,U+738B,U+767E,U+77F3,U+7AE0,U+7B80,U+7C73,U+7EC8,U+7EDC,U+80A1,U+827A,U+82B1,U+82F1,U+83B7,U+843D,U+89D2,U+8BB2,U+8BB8,U+8D1F,U+8D22,U+8D70,U+8D85,U+8FDC,U+8FF0,U+9500,U+961F,U+97F3,U+987B,U+9996,U+9A6C;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./eab94c73f993d5d02281c283b0dd9063.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4E14,U+4E25,U+4E89,U+4E92,U+4EC0,U+4ECA,U+4F17,U+4F9D,U+5199,U+519B,U+51E0,U+5217,U+52A9,U+52BF,U+534E-534F,U+538B,U+53C8,U+53F7,U+544A,U+5468,U+547D,U+5584,U+571F,U+57F9,U+5931,U+5934,U+59CB,U+59D4,U+5B69,U+5BA1,U+5C40,U+5E03,U+5E72,U+5E9C,U+5F80,U+5FB7,U+5FEB,U+5FF5,U+623F,U+6253,U+6309,U+663E,U+6790,U+6838,U+70ED,U+7167,U+7403,U+7597,U+767D,U+76CA,U+7701,U+771F,U+7840,U+79BB,U+79F0,U+7A0E,U+7EC6-7EC7,U+7F6E,U+7FA4,U+836F,U+878D,U+8840,U+88C5,U+89C6,U+8BC4,U+8BDD,U+8BF7,U+8BFB,U+8D8A,U+8DB3,U+9002,U+914D,U+91C7,U+964D,U+9650,U+9664,U+968F,U+9769,U+9884,U+98DF;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./fb9c1ebf50bdcbb2d51286bf2b1da2c8.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4E07,U+4E94,U+4F18,U+4F4E,U+4F55,U+4F8B,U+503C,U+513F,U+5149,U+518D,U+51B5,U+5212,U+529E-529F,U+5317,U+5347,U+5357,U+5373,U+5386,U+53C2,U+53F0,U+53F2,U+54CD,U+56DE,U+56FE,U+57DF,U+5C42,U+5C71,U+5E26,U+5E7F,U+5F8B,U+5FC5,U+6237,U+628A,U+6295,U+63A7,U+6599,U+65AD,U+6613,U+672A,U+6751,U+6781,U+68C0,U+6BB5,U+6BCF,U+6D4B,U+6D77,U+6D88,U+6DF1,U+6E05,U+72B6,U+754C,U+76D1,U+795E,U+79EF,U+7A7A,U+7B56,U+7B97,U+7CBE,U+7EA6,U+7ED9,U+7EED,U+7EF4,U+804C,U+81F4,U+8303,U+89C1,U+8A00,U+8BAE,U+8BD5,U+8BFE,U+8C61,U+8D23,U+8FD1,U+901F,U+90A3,U+9632,U+9669,U+96BE;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./85470da5a88f93296bc6df159cf4e070.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4E16,U+4E1C,U+4F60,U+4F9B,U+515A,U+517B,U+51B3,U+5219,U+522B,U+5305,U+533B,U+53BB,U+53CD,U+53E3,U+53EA,U+5668,U+56DB,U+57CE,U+5883,U+5907,U+590D,U+5B57-5B58,U+5B83,U+5B8C,U+5BB9,U+5C11,U+5DF1,U+5F15,U+5F71,U+6001,U+606F,U+6218,U+624B,U+624D,U+62A4-62A5,U+652F,U+653E,U+67E5,U+6821,U+6839,U+683C,U+6848,U+6A21,U+6B65,U+6CE8,U+7387,U+76F4,U+793A,U+7D20,U+7EBF,U+8001,U+8054,U+81F3,U+8272,U+8425,U+897F,U+89C2,U+8BA9,U+8BB0,U+8BE5,U+8BED,U+8D39,U+8DEF,U+8EAB,U+8F66,U+8F6C,U+8FBE,U+9009,U+9645,U+96C6,U+975E,U+9886,U+9A8C;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./f9654d875c11a34437490dd6c2407bea.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4E13,U+4E24,U+4E48-4E49,U+4E66,U+4EA4,U+4EF7,U+4EFB,U+4F20,U+505A,U+5143,U+5148,U+5171,U+5177,U+519C,U+51C6,U+521B,U+5355,U+53D6-53D7,U+53F8,U+540D,U+5411,U+5546,U+578B,U+589E,U+5DF2,U+5E08,U+5F88,U+601D,U+603B,U+60F3,U+611F,U+6307,U+63A5,U+63A8,U+6536,U+6539,U+6574,U+65BD,U+670D,U+6837,U+6C14,U+6CA1,U+6D41,U+6D4E,U+6E90,U+73AF,U+75C5,U+770B,U+786E,U+7A76,U+7EA7,U+7F51,U+7F8E,U+8003,U+8282,U+88AB,U+8BA4,U+8BBA,U+8BC1,U+8BC6,U+8C03,U+8F83,U+8FD0,U+9020,U+91CC,U+95E8,U+9662,U+9879,U+98CE;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./e72395f7e1af89c8cd0fd06723de642e.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4E60,U+4E8C,U+4E9B,U+4EF6,U+4F01,U+4F46,U+4F4D,U+5229,U+5341,U+539F,U+53D8,U+5404,U+5458,U+573A,U+5904,U+5916,U+5929,U+5B89,U+5BFC,U+5C06,U+5E38,U+5F3A,U+5F62,U+610F,U+6280,U+6301,U+6548,U+65E0,U+65E5,U+66F4,U+6708,U+672F,U+6743,U+6761,U+6784,U+679C,U+6807,U+6B21,U+6B63-6B64,U+6BD4,U+6C42,U+6CBB,U+6D3B,U+7136,U+7279,U+7531,U+7740,U+77E5,U+7814,U+793E,U+79D1,U+7ACB,U+7C7B,U+7EC4,U+7ED3,U+7EDF,U+80B2,U+89E3,U+8D28,U+8D77,U+8FD8,U+9053,U+91D1,U+95EE,U+9700;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./1cd6774e0ac5ded3e1cc29fa407324b1.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4E09,U+4E8B,U+4ECE,U+4ED6,U+4EE3,U+4F7F,U+4FDD,U+4FE1,U+5165,U+5185,U+524D,U+52A0-52A1,U+533A,U+53CA,U+54C1,U+56E0,U+57FA,U+597D,U+5B50,U+5C0F,U+5E02,U+5E73,U+5E76,U+5F00,U+5F0F,U+5F53,U+5F97,U+5FC3,U+60C5,U+6216,U+636E,U+653F,U+6570,U+660E,U+6700,U+671F,U+6C11,U+6C34,U+70B9,U+7269,U+7535,U+76EE,U+76F8,U+7A0B,U+7B2C,U+7BA1,U+7CFB,U+8868,U+89C4,U+8BA1,U+8BBE,U+8BF4,U+8D44,U+901A,U+90FD,U+91CF,U+957F,U+95F4,U+9898;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./ad3639eff5bb395e94ee621f3464f15e.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4E0B,U+4E0E,U+4E3B,U+4E4B,U+4E5F,U+4EA7,U+4EEC,U+4F53,U+5168,U+516C,U+5173,U+5176,U+5206,U+5230,U+5236,U+529B,U+52A8,U+5408,U+540C,U+540E,U+591A,U+5982,U+5B9A,U+5BB6,U+5C31,U+5C55,U+5E94,U+5EA6,U+5EFA,U+6027,U+6211,U+6240,U+63D0,U+6559,U+6587,U+65B0,U+672C,U+673A,U+6765,U+73B0,U+79CD,U+7B49,U+7ECF,U+8005,U+800C,U+81EA,U+8FC7,U+8FDB,U+90E8,U+91CD,U+9762,U+9AD8;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./831b14cd6cca288814c1686193d8a8e7.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+4E00,U+4E0A,U+4E0D,U+4E1A,U+4E2A,U+4E2D,U+4E3A,U+4E86,U+4E8E,U+4EBA,U+4EE5,U+4F1A,U+4F5C,U+51FA,U+5316,U+53D1,U+53EF,U+548C,U+56FD,U+5728,U+5730,U+5927,U+5B66,U+5B9E,U+5BF9,U+5DE5,U+5E74,U+6210,U+65B9,U+65F6,U+662F,U+6709,U+6CD5,U+7406,U+751F,U+7528,U+7684,U+80FD,U+884C,U+8981,U+8FD9;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./4db528eac80b9c5097646b3e014af3d9.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+2013-2014,U+2018-2019,U+201C-201D,U+2022,U+2026,U+203C,U+25CF,U+3001-3002,U+3008-3011,U+3014-3019,U+FF01,U+FF08-FF09,U+FF0C,U+FF1A-FF1B,U+FF1F,U+FF5B-FF5E;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./7d942c509d15d23b50bd243575c4eae6.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+491-493,U+496-497,U+49A-49B,U+4A2-4A3,U+4AE-4B3,U+4B6-4B7,U+4BA-4BB,U+4D4-4D5,U+4D8-4D9,U+4DC-4DF,U+4E4-4E9,U+4F4-4F5;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./d75a9bebd3ed45c222ec2706e5aa17f4.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+42B-44F,U+451-45C,U+45E-45F,U+490;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./72f4ffe9d8585f8291c4eb2db93c005a.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+401-40C,U+40E-42A;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./4ed87646fc3e9f43f121eb50da4bb9fa.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+3AD-3CF,U+3D5-3D7;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./7992c7ca98a5631d37cf01842527c8c6.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+374-375,U+37E,U+384-38A,U+38C,U+38E-3A1,U+3A3-3AC;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./c6404b1d423412f3da3624d8c0544829.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+259,U+25B,U+2B9-2BA,U+2BC,U+2C6-2C7,U+2C9,U+2D8-2DD,U+2F3,U+2F7;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./d078d39549ff5f5c4580977579eb0da0.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+18F-190,U+192,U+19B,U+1A0-1A1,U+1AF-1B0,U+1CD-1D4,U+1D6,U+1D8,U+1DA,U+1DC,U+1E6-1E7,U+1EA-1EB,U+1F4-1F5,U+1FC-1FF,U+218-21B,U+232-233,U+237;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./13cfaade5fa9750c4ff81dcaf4b95016.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+15D-17F;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./b4c18ec0480289e8b78602bf5421f184.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+129-15C;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./45ac11d19469e45d2900d377f4c9d339.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+100-128;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./523dde3429382902abbb8c87b6348ae3.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+FE-FF;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./3084b5ed216f58266b350fb1cf8f20a8.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+CA-FD;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./807ba1cc19d7d0024e72e61cf0ebf44c.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+A0-AC,U+AE-C9;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./d249b0dbd93377f42fa2b22ba7e8c8b5.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+7C-7E;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./14074038f09f2992506652c41793a12a.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+48-6E,U+70-7B;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./d58510b3833343d369d5fee718434d2b.woff2")format("woff2");font-style:italic;font-display:swap;font-weight:400;unicode-range:U+D,U+20-47,U+6F;} \ No newline at end of file diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/032265d362db5608347e5ee999a0ff17.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/032265d362db5608347e5ee999a0ff17.woff2 new file mode 100644 index 00000000..9de953f9 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/032265d362db5608347e5ee999a0ff17.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/034bc67a668e5a2d71d077038319ecc3.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/034bc67a668e5a2d71d077038319ecc3.woff2 new file mode 100644 index 00000000..c157429b Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/034bc67a668e5a2d71d077038319ecc3.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/03b74ac28d17aa94147f58bc5be268d9.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/03b74ac28d17aa94147f58bc5be268d9.woff2 new file mode 100644 index 00000000..58e2aaff Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/03b74ac28d17aa94147f58bc5be268d9.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/0411a6a08f59518e6c110b629871a0dd.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/0411a6a08f59518e6c110b629871a0dd.woff2 new file mode 100644 index 00000000..512b4925 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/0411a6a08f59518e6c110b629871a0dd.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/04b13c15f5dbd2da5489cbc80fd809f8.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/04b13c15f5dbd2da5489cbc80fd809f8.woff2 new file mode 100644 index 00000000..45da09b3 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/04b13c15f5dbd2da5489cbc80fd809f8.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/05a1f8d7d226c71e404e7689e29dfa70.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/05a1f8d7d226c71e404e7689e29dfa70.woff2 new file mode 100644 index 00000000..b7e8ae26 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/05a1f8d7d226c71e404e7689e29dfa70.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/07f74f1d225899b032a13e75cd785a07.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/07f74f1d225899b032a13e75cd785a07.woff2 new file mode 100644 index 00000000..448d2a2d Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/07f74f1d225899b032a13e75cd785a07.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/08f255f1288af4793a4d1c065448dcb5.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/08f255f1288af4793a4d1c065448dcb5.woff2 new file mode 100644 index 00000000..b6bb8f09 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/08f255f1288af4793a4d1c065448dcb5.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/0a89ba4c98c30db74c93d0967f2afc12.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/0a89ba4c98c30db74c93d0967f2afc12.woff2 new file mode 100644 index 00000000..f0526700 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/0a89ba4c98c30db74c93d0967f2afc12.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/0b576d019ce5674819f2c2b12bf13e54.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/0b576d019ce5674819f2c2b12bf13e54.woff2 new file mode 100644 index 00000000..fc9e8368 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/0b576d019ce5674819f2c2b12bf13e54.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/0d521d9e0b96c5f318018a0fbc65591b.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/0d521d9e0b96c5f318018a0fbc65591b.woff2 new file mode 100644 index 00000000..0ca211a2 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/0d521d9e0b96c5f318018a0fbc65591b.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/0db0df3ace7bbdec8e19a3cd7a31e03f.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/0db0df3ace7bbdec8e19a3cd7a31e03f.woff2 new file mode 100644 index 00000000..77f444e5 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/0db0df3ace7bbdec8e19a3cd7a31e03f.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/0fa188b0859c058dd741ba575e3a4c27.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/0fa188b0859c058dd741ba575e3a4c27.woff2 new file mode 100644 index 00000000..0bff6958 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/0fa188b0859c058dd741ba575e3a4c27.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/105724e09aa05e23fb59788bdbcdf564.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/105724e09aa05e23fb59788bdbcdf564.woff2 new file mode 100644 index 00000000..5bd6caaf Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/105724e09aa05e23fb59788bdbcdf564.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/113ff8f5a338050fa510c7eb173d4426.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/113ff8f5a338050fa510c7eb173d4426.woff2 new file mode 100644 index 00000000..0bef30ef Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/113ff8f5a338050fa510c7eb173d4426.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/145da285ad74cba8ee79d65fd09deb5c.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/145da285ad74cba8ee79d65fd09deb5c.woff2 new file mode 100644 index 00000000..497722bf Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/145da285ad74cba8ee79d65fd09deb5c.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/15595366238dd48997292eef55a4d68b.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/15595366238dd48997292eef55a4d68b.woff2 new file mode 100644 index 00000000..59c92568 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/15595366238dd48997292eef55a4d68b.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/15fe8f7f491514fe0cfcfe533e7f4757.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/15fe8f7f491514fe0cfcfe533e7f4757.woff2 new file mode 100644 index 00000000..6f51e5a1 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/15fe8f7f491514fe0cfcfe533e7f4757.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/1673e9432bb97483080a56a6f4469e56.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/1673e9432bb97483080a56a6f4469e56.woff2 new file mode 100644 index 00000000..2fdf77b1 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/1673e9432bb97483080a56a6f4469e56.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/16b7d5b08375dfcad57e3ff13a2ae86e.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/16b7d5b08375dfcad57e3ff13a2ae86e.woff2 new file mode 100644 index 00000000..adbfa8f9 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/16b7d5b08375dfcad57e3ff13a2ae86e.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/18f848e15c28281a11eb8227a35d5cb4.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/18f848e15c28281a11eb8227a35d5cb4.woff2 new file mode 100644 index 00000000..32c1d2c2 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/18f848e15c28281a11eb8227a35d5cb4.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/1ce4341d68290e5f342bbb08133296fd.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/1ce4341d68290e5f342bbb08133296fd.woff2 new file mode 100644 index 00000000..685aab91 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/1ce4341d68290e5f342bbb08133296fd.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/1dde9964abfb9b9b1d7f2ec69f711d31.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/1dde9964abfb9b9b1d7f2ec69f711d31.woff2 new file mode 100644 index 00000000..af6fd380 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/1dde9964abfb9b9b1d7f2ec69f711d31.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/1ea51fe7359806cd126a8ddef7dcb465.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/1ea51fe7359806cd126a8ddef7dcb465.woff2 new file mode 100644 index 00000000..4db01040 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/1ea51fe7359806cd126a8ddef7dcb465.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/2130f719214f6eefd719bfd77d894561.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/2130f719214f6eefd719bfd77d894561.woff2 new file mode 100644 index 00000000..36ce2e21 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/2130f719214f6eefd719bfd77d894561.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/21d9a3a5e0cb7d5014bea50af47d9e46.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/21d9a3a5e0cb7d5014bea50af47d9e46.woff2 new file mode 100644 index 00000000..a5a12047 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/21d9a3a5e0cb7d5014bea50af47d9e46.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/227ca5d4aae5fa4e0319b3a176a5eafd.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/227ca5d4aae5fa4e0319b3a176a5eafd.woff2 new file mode 100644 index 00000000..f3428048 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/227ca5d4aae5fa4e0319b3a176a5eafd.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/22a3d85475c7bd12d35afd152941807b.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/22a3d85475c7bd12d35afd152941807b.woff2 new file mode 100644 index 00000000..560a8ae3 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/22a3d85475c7bd12d35afd152941807b.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/237df329e1862df9832b864299e88eea.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/237df329e1862df9832b864299e88eea.woff2 new file mode 100644 index 00000000..2825cbab Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/237df329e1862df9832b864299e88eea.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/2604190370d4299b1cc638a657e4a69c.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/2604190370d4299b1cc638a657e4a69c.woff2 new file mode 100644 index 00000000..5417f170 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/2604190370d4299b1cc638a657e4a69c.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/2767e685d68874986db618d1198e49e2.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/2767e685d68874986db618d1198e49e2.woff2 new file mode 100644 index 00000000..ecf0263f Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/2767e685d68874986db618d1198e49e2.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/27872ec730a984d92b54904f56ab9dac.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/27872ec730a984d92b54904f56ab9dac.woff2 new file mode 100644 index 00000000..908473f7 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/27872ec730a984d92b54904f56ab9dac.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/2794784b5d32662ab9727d8f016ec9b4.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/2794784b5d32662ab9727d8f016ec9b4.woff2 new file mode 100644 index 00000000..d125edcc Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/2794784b5d32662ab9727d8f016ec9b4.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/2794b527e732e0686f938c6b40450191.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/2794b527e732e0686f938c6b40450191.woff2 new file mode 100644 index 00000000..c9fff40f Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/2794b527e732e0686f938c6b40450191.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/29f09feb4408c30e4f3f5f269014178f.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/29f09feb4408c30e4f3f5f269014178f.woff2 new file mode 100644 index 00000000..3bb2bb65 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/29f09feb4408c30e4f3f5f269014178f.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/2b0c33574b30f30f6a5efbe8f6d89ebf.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/2b0c33574b30f30f6a5efbe8f6d89ebf.woff2 new file mode 100644 index 00000000..08c59712 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/2b0c33574b30f30f6a5efbe8f6d89ebf.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/2d7828f8790196c8a0a272593983e7e1.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/2d7828f8790196c8a0a272593983e7e1.woff2 new file mode 100644 index 00000000..d4ae0cc0 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/2d7828f8790196c8a0a272593983e7e1.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/2e30c9671701a342203e0084baeb4102.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/2e30c9671701a342203e0084baeb4102.woff2 new file mode 100644 index 00000000..b011ab4f Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/2e30c9671701a342203e0084baeb4102.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/2e98f778adffe201f29547e0bd99fe00.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/2e98f778adffe201f29547e0bd99fe00.woff2 new file mode 100644 index 00000000..78e45dc2 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/2e98f778adffe201f29547e0bd99fe00.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/2e9c554387d30897bf1a3431c2470ab2.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/2e9c554387d30897bf1a3431c2470ab2.woff2 new file mode 100644 index 00000000..e1b83592 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/2e9c554387d30897bf1a3431c2470ab2.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/2f04d0609cf5de6e65c92a1db9b41dee.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/2f04d0609cf5de6e65c92a1db9b41dee.woff2 new file mode 100644 index 00000000..7258b7b1 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/2f04d0609cf5de6e65c92a1db9b41dee.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/2f65beb81ae31da97f42c0f463842215.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/2f65beb81ae31da97f42c0f463842215.woff2 new file mode 100644 index 00000000..a334f0df Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/2f65beb81ae31da97f42c0f463842215.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/313df767b0d509946adbd182111fc1bf.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/313df767b0d509946adbd182111fc1bf.woff2 new file mode 100644 index 00000000..66ed6984 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/313df767b0d509946adbd182111fc1bf.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/329df54e22813e4353b6120897a02ce8.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/329df54e22813e4353b6120897a02ce8.woff2 new file mode 100644 index 00000000..0c8780e4 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/329df54e22813e4353b6120897a02ce8.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/3526cfff7d13f1377ed3005faf778f6d.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/3526cfff7d13f1377ed3005faf778f6d.woff2 new file mode 100644 index 00000000..bf14d0b8 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/3526cfff7d13f1377ed3005faf778f6d.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/374213578702eb33d672c57b1531380d.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/374213578702eb33d672c57b1531380d.woff2 new file mode 100644 index 00000000..3e8eb8ce Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/374213578702eb33d672c57b1531380d.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/3c41e5334036c5f785a14837679daca7.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/3c41e5334036c5f785a14837679daca7.woff2 new file mode 100644 index 00000000..5a81302a Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/3c41e5334036c5f785a14837679daca7.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/3cdb82c451a1912f7732f32e881e52ec.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/3cdb82c451a1912f7732f32e881e52ec.woff2 new file mode 100644 index 00000000..8e55c561 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/3cdb82c451a1912f7732f32e881e52ec.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/3eabf6a6c7e64cb72876c06e546f085e.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/3eabf6a6c7e64cb72876c06e546f085e.woff2 new file mode 100644 index 00000000..285652a9 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/3eabf6a6c7e64cb72876c06e546f085e.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/3f5480bf578b66d86a536b541be0146c.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/3f5480bf578b66d86a536b541be0146c.woff2 new file mode 100644 index 00000000..6b30bfc1 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/3f5480bf578b66d86a536b541be0146c.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/41e941bf6ed5718fab824019e616ed3f.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/41e941bf6ed5718fab824019e616ed3f.woff2 new file mode 100644 index 00000000..79ab12a0 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/41e941bf6ed5718fab824019e616ed3f.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/434b40092c487dc3c2ffb57391cbb629.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/434b40092c487dc3c2ffb57391cbb629.woff2 new file mode 100644 index 00000000..5622ffca Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/434b40092c487dc3c2ffb57391cbb629.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/46315b0fe402b0c0e6aea64bd8da554e.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/46315b0fe402b0c0e6aea64bd8da554e.woff2 new file mode 100644 index 00000000..f77dba56 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/46315b0fe402b0c0e6aea64bd8da554e.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/468656bcfde0b5e1427e045e41d1b94b.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/468656bcfde0b5e1427e045e41d1b94b.woff2 new file mode 100644 index 00000000..25bda8c7 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/468656bcfde0b5e1427e045e41d1b94b.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/47426d3af322c6595eae6e99aee5d5c0.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/47426d3af322c6595eae6e99aee5d5c0.woff2 new file mode 100644 index 00000000..6c18732d Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/47426d3af322c6595eae6e99aee5d5c0.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/478d735ff90ac7485cb1081215672851.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/478d735ff90ac7485cb1081215672851.woff2 new file mode 100644 index 00000000..d789f2ec Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/478d735ff90ac7485cb1081215672851.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/47c88fb77d5f1b91f739354099f20dcb.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/47c88fb77d5f1b91f739354099f20dcb.woff2 new file mode 100644 index 00000000..b91f10ef Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/47c88fb77d5f1b91f739354099f20dcb.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/49045505c06c3073a986a45abf13c0d9.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/49045505c06c3073a986a45abf13c0d9.woff2 new file mode 100644 index 00000000..5ce69533 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/49045505c06c3073a986a45abf13c0d9.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/491d2c0a07cbefc22005512b6abb9ef3.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/491d2c0a07cbefc22005512b6abb9ef3.woff2 new file mode 100644 index 00000000..052023d8 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/491d2c0a07cbefc22005512b6abb9ef3.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/4ad813d85d01b7576e8b72fa8acd8103.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/4ad813d85d01b7576e8b72fa8acd8103.woff2 new file mode 100644 index 00000000..5fd0835e Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/4ad813d85d01b7576e8b72fa8acd8103.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/4c2aef7ccdf062b7216a8bf9fccc7838.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/4c2aef7ccdf062b7216a8bf9fccc7838.woff2 new file mode 100644 index 00000000..fed347bd Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/4c2aef7ccdf062b7216a8bf9fccc7838.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/4c5a843ee43fd663029df6e4d0e25555.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/4c5a843ee43fd663029df6e4d0e25555.woff2 new file mode 100644 index 00000000..41590abf Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/4c5a843ee43fd663029df6e4d0e25555.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/4d47ad757f5ec26fd54d07888058928e.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/4d47ad757f5ec26fd54d07888058928e.woff2 new file mode 100644 index 00000000..9917ad60 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/4d47ad757f5ec26fd54d07888058928e.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/4d8ee4009082f75ed0f06a4d2028a7dd.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/4d8ee4009082f75ed0f06a4d2028a7dd.woff2 new file mode 100644 index 00000000..d1a6bc79 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/4d8ee4009082f75ed0f06a4d2028a7dd.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/4d9facde2be05ea10f21554f9f87909f.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/4d9facde2be05ea10f21554f9f87909f.woff2 new file mode 100644 index 00000000..6a81b55d Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/4d9facde2be05ea10f21554f9f87909f.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/4e1c75d77f0fc20bc43f8bcaf09f7174.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/4e1c75d77f0fc20bc43f8bcaf09f7174.woff2 new file mode 100644 index 00000000..8d1bbb3b Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/4e1c75d77f0fc20bc43f8bcaf09f7174.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/4e710dea843a3405026cba61bd0168d5.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/4e710dea843a3405026cba61bd0168d5.woff2 new file mode 100644 index 00000000..0b679da0 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/4e710dea843a3405026cba61bd0168d5.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/4eee787d900af2eff915fa460dcc0904.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/4eee787d900af2eff915fa460dcc0904.woff2 new file mode 100644 index 00000000..1d7ffa35 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/4eee787d900af2eff915fa460dcc0904.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/515df858dde28da76ab460c7a1608d9c.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/515df858dde28da76ab460c7a1608d9c.woff2 new file mode 100644 index 00000000..e59ca358 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/515df858dde28da76ab460c7a1608d9c.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/51fe4f668b4eca6aa6c3864ef4e5582b.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/51fe4f668b4eca6aa6c3864ef4e5582b.woff2 new file mode 100644 index 00000000..1c6cd121 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/51fe4f668b4eca6aa6c3864ef4e5582b.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/5217726b420702097c748c958c41b66f.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/5217726b420702097c748c958c41b66f.woff2 new file mode 100644 index 00000000..f56ec21b Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/5217726b420702097c748c958c41b66f.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/523493e0d15bad904e5536a426464616.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/523493e0d15bad904e5536a426464616.woff2 new file mode 100644 index 00000000..493f0dfa Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/523493e0d15bad904e5536a426464616.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/54436c4eadff7caad3068faba6d3c741.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/54436c4eadff7caad3068faba6d3c741.woff2 new file mode 100644 index 00000000..c5b185b1 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/54436c4eadff7caad3068faba6d3c741.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/56091456d132a9f41910f4fcb4fe9a7a.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/56091456d132a9f41910f4fcb4fe9a7a.woff2 new file mode 100644 index 00000000..b43ab88c Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/56091456d132a9f41910f4fcb4fe9a7a.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/5a0619bc3aebe115f1bcf803b5f9a4bc.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/5a0619bc3aebe115f1bcf803b5f9a4bc.woff2 new file mode 100644 index 00000000..5c92f36b Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/5a0619bc3aebe115f1bcf803b5f9a4bc.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/5a54deae631d1f892ae1fd324e8d154e.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/5a54deae631d1f892ae1fd324e8d154e.woff2 new file mode 100644 index 00000000..c9678bfd Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/5a54deae631d1f892ae1fd324e8d154e.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/5ef6d1e716b84bb97ad1ffd59e6c5242.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/5ef6d1e716b84bb97ad1ffd59e6c5242.woff2 new file mode 100644 index 00000000..c1408e9f Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/5ef6d1e716b84bb97ad1ffd59e6c5242.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/6079b08e66ad2093fb19e2b4d424e547.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/6079b08e66ad2093fb19e2b4d424e547.woff2 new file mode 100644 index 00000000..0b622f88 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/6079b08e66ad2093fb19e2b4d424e547.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/61d0dc29a55966f56d5b2eeaab05455e.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/61d0dc29a55966f56d5b2eeaab05455e.woff2 new file mode 100644 index 00000000..822fba39 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/61d0dc29a55966f56d5b2eeaab05455e.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/62bdebee3c457e75e00bf13d316c495f.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/62bdebee3c457e75e00bf13d316c495f.woff2 new file mode 100644 index 00000000..e7c4564b Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/62bdebee3c457e75e00bf13d316c495f.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/64f6391060d10ce8516f2f8d92fe36ff.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/64f6391060d10ce8516f2f8d92fe36ff.woff2 new file mode 100644 index 00000000..14f738b7 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/64f6391060d10ce8516f2f8d92fe36ff.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/65bd8560302e344180078c215adcd0d8.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/65bd8560302e344180078c215adcd0d8.woff2 new file mode 100644 index 00000000..2f512751 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/65bd8560302e344180078c215adcd0d8.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/66a2a77dfb203c06b32c75b63eca0599.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/66a2a77dfb203c06b32c75b63eca0599.woff2 new file mode 100644 index 00000000..dbd3e97b Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/66a2a77dfb203c06b32c75b63eca0599.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/6c16f251663f30ab1ea3f6c359c7f14f.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/6c16f251663f30ab1ea3f6c359c7f14f.woff2 new file mode 100644 index 00000000..0346eeb7 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/6c16f251663f30ab1ea3f6c359c7f14f.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/6d62b0d48c2b458c3bc180ec2c331279.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/6d62b0d48c2b458c3bc180ec2c331279.woff2 new file mode 100644 index 00000000..94674d88 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/6d62b0d48c2b458c3bc180ec2c331279.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/6e42248212a0f1b7a43c986af93bd65a.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/6e42248212a0f1b7a43c986af93bd65a.woff2 new file mode 100644 index 00000000..5f1e6484 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/6e42248212a0f1b7a43c986af93bd65a.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/70f63fe95b55111e328a6c9ec6f31480.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/70f63fe95b55111e328a6c9ec6f31480.woff2 new file mode 100644 index 00000000..beab054a Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/70f63fe95b55111e328a6c9ec6f31480.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/710829bf8665404e9de6a0d01902fd57.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/710829bf8665404e9de6a0d01902fd57.woff2 new file mode 100644 index 00000000..d44252b1 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/710829bf8665404e9de6a0d01902fd57.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/72816b969d8ad992acf9807cbafcb297.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/72816b969d8ad992acf9807cbafcb297.woff2 new file mode 100644 index 00000000..889c9ea0 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/72816b969d8ad992acf9807cbafcb297.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/72e51db8975c364a461f6fb1fdb2879f.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/72e51db8975c364a461f6fb1fdb2879f.woff2 new file mode 100644 index 00000000..ce8353f6 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/72e51db8975c364a461f6fb1fdb2879f.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/74fe9c399600ed636c4bbe26fa96aa56.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/74fe9c399600ed636c4bbe26fa96aa56.woff2 new file mode 100644 index 00000000..f545ef38 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/74fe9c399600ed636c4bbe26fa96aa56.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/75a907161dba8ee1c1299d5583a9d5ed.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/75a907161dba8ee1c1299d5583a9d5ed.woff2 new file mode 100644 index 00000000..755684bb Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/75a907161dba8ee1c1299d5583a9d5ed.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/75b5eefea9d737bbae853c4460bb679b.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/75b5eefea9d737bbae853c4460bb679b.woff2 new file mode 100644 index 00000000..f9c8464b Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/75b5eefea9d737bbae853c4460bb679b.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/7718ebbfe9207c37a1a21bdc03c03fb6.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/7718ebbfe9207c37a1a21bdc03c03fb6.woff2 new file mode 100644 index 00000000..7f65333b Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/7718ebbfe9207c37a1a21bdc03c03fb6.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/7742243b2ae1ceaced62d9b43ba505f3.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/7742243b2ae1ceaced62d9b43ba505f3.woff2 new file mode 100644 index 00000000..8e98bb9a Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/7742243b2ae1ceaced62d9b43ba505f3.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/77b13beb6e891c7f3042312abd598c96.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/77b13beb6e891c7f3042312abd598c96.woff2 new file mode 100644 index 00000000..4a749108 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/77b13beb6e891c7f3042312abd598c96.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/780e6e17004892fb84b1a7315b4732d4.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/780e6e17004892fb84b1a7315b4732d4.woff2 new file mode 100644 index 00000000..4ec83b69 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/780e6e17004892fb84b1a7315b4732d4.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/7a7982a6f1fc81656bd0c1f2b660e82b.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/7a7982a6f1fc81656bd0c1f2b660e82b.woff2 new file mode 100644 index 00000000..99ee745c Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/7a7982a6f1fc81656bd0c1f2b660e82b.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/7b52d0d936cd747c20d8d971697003f6.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/7b52d0d936cd747c20d8d971697003f6.woff2 new file mode 100644 index 00000000..dd536a09 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/7b52d0d936cd747c20d8d971697003f6.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/7bc5be711a9b47a12aeeb4d35ebae10d.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/7bc5be711a9b47a12aeeb4d35ebae10d.woff2 new file mode 100644 index 00000000..349f1a59 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/7bc5be711a9b47a12aeeb4d35ebae10d.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/7be8abbb2f924f92c4047608cfc27ed1.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/7be8abbb2f924f92c4047608cfc27ed1.woff2 new file mode 100644 index 00000000..9fb87157 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/7be8abbb2f924f92c4047608cfc27ed1.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/7d5120eabb5eaddcab74c0a7bbc89e43.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/7d5120eabb5eaddcab74c0a7bbc89e43.woff2 new file mode 100644 index 00000000..50790a71 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/7d5120eabb5eaddcab74c0a7bbc89e43.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/7d8212017d1d75160b899ae137d8566d.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/7d8212017d1d75160b899ae137d8566d.woff2 new file mode 100644 index 00000000..f3099c99 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/7d8212017d1d75160b899ae137d8566d.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/7da4412e32affd5e7f00e47ac64d5a7b.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/7da4412e32affd5e7f00e47ac64d5a7b.woff2 new file mode 100644 index 00000000..7297d640 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/7da4412e32affd5e7f00e47ac64d5a7b.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/812314986b2f0062b572a6e9476705a5.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/812314986b2f0062b572a6e9476705a5.woff2 new file mode 100644 index 00000000..88ecec1d Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/812314986b2f0062b572a6e9476705a5.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/81715c69240be3e6904ac86b26a63212.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/81715c69240be3e6904ac86b26a63212.woff2 new file mode 100644 index 00000000..e597a2f5 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/81715c69240be3e6904ac86b26a63212.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/81cb6d044c095f1efcf88076bda93eb3.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/81cb6d044c095f1efcf88076bda93eb3.woff2 new file mode 100644 index 00000000..106054e6 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/81cb6d044c095f1efcf88076bda93eb3.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/834e934ea762fa713d2be841697506a4.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/834e934ea762fa713d2be841697506a4.woff2 new file mode 100644 index 00000000..52949bef Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/834e934ea762fa713d2be841697506a4.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/84d5a4111941ee227ed0f1cbda3826b7.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/84d5a4111941ee227ed0f1cbda3826b7.woff2 new file mode 100644 index 00000000..7af04b3f Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/84d5a4111941ee227ed0f1cbda3826b7.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/855125e0871ab245f4c9dd756a68d188.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/855125e0871ab245f4c9dd756a68d188.woff2 new file mode 100644 index 00000000..a9e9e934 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/855125e0871ab245f4c9dd756a68d188.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/8564412afbd1eed6241bffcd68015529.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/8564412afbd1eed6241bffcd68015529.woff2 new file mode 100644 index 00000000..239957f5 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/8564412afbd1eed6241bffcd68015529.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/86318641e04ad3a065f64fe4f77a6654.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/86318641e04ad3a065f64fe4f77a6654.woff2 new file mode 100644 index 00000000..a6e8cb3a Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/86318641e04ad3a065f64fe4f77a6654.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/87363b4f34d58fc20a5ec98e98939feb.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/87363b4f34d58fc20a5ec98e98939feb.woff2 new file mode 100644 index 00000000..c3981dd9 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/87363b4f34d58fc20a5ec98e98939feb.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/8e5c73560527ff869d0bccfd1f51f432.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/8e5c73560527ff869d0bccfd1f51f432.woff2 new file mode 100644 index 00000000..dafe10e1 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/8e5c73560527ff869d0bccfd1f51f432.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/8e650df38c92a1daeb2eef94ecb63720.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/8e650df38c92a1daeb2eef94ecb63720.woff2 new file mode 100644 index 00000000..9c043f34 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/8e650df38c92a1daeb2eef94ecb63720.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/8ef61e0254ff924267e7521118ee3965.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/8ef61e0254ff924267e7521118ee3965.woff2 new file mode 100644 index 00000000..f748bcf4 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/8ef61e0254ff924267e7521118ee3965.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/8fe7cd4425a11a6cb1e0c4099e0e604d.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/8fe7cd4425a11a6cb1e0c4099e0e604d.woff2 new file mode 100644 index 00000000..ca7e8986 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/8fe7cd4425a11a6cb1e0c4099e0e604d.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/901ede42557461047b93011d73eaaf96.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/901ede42557461047b93011d73eaaf96.woff2 new file mode 100644 index 00000000..9777b4f6 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/901ede42557461047b93011d73eaaf96.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/90450fbe02f473f1877d94a8602e068e.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/90450fbe02f473f1877d94a8602e068e.woff2 new file mode 100644 index 00000000..9827ed36 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/90450fbe02f473f1877d94a8602e068e.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/90732434f5f08d321d8509ab2d6aa6fd.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/90732434f5f08d321d8509ab2d6aa6fd.woff2 new file mode 100644 index 00000000..02470caa Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/90732434f5f08d321d8509ab2d6aa6fd.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/929adbd678897120893d28d4ce2f1529.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/929adbd678897120893d28d4ce2f1529.woff2 new file mode 100644 index 00000000..918ea467 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/929adbd678897120893d28d4ce2f1529.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/9331d6fdf8931f6d10de449b4a25a043.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/9331d6fdf8931f6d10de449b4a25a043.woff2 new file mode 100644 index 00000000..e205f780 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/9331d6fdf8931f6d10de449b4a25a043.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/940b8c045992cca6cb0d64b7455e4efc.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/940b8c045992cca6cb0d64b7455e4efc.woff2 new file mode 100644 index 00000000..ff3ac769 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/940b8c045992cca6cb0d64b7455e4efc.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/945e975b23ec7ef955abeebe038a2536.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/945e975b23ec7ef955abeebe038a2536.woff2 new file mode 100644 index 00000000..c5ecc46e Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/945e975b23ec7ef955abeebe038a2536.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/948fa208bc668b07e62ccef57f59ac90.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/948fa208bc668b07e62ccef57f59ac90.woff2 new file mode 100644 index 00000000..91f3505d Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/948fa208bc668b07e62ccef57f59ac90.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/94a2fcf30e8216a324422e949d160fa7.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/94a2fcf30e8216a324422e949d160fa7.woff2 new file mode 100644 index 00000000..27c11e7e Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/94a2fcf30e8216a324422e949d160fa7.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/94ee2d6d7a8f638656c782e65ee82387.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/94ee2d6d7a8f638656c782e65ee82387.woff2 new file mode 100644 index 00000000..91a7d770 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/94ee2d6d7a8f638656c782e65ee82387.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/957185285f5f008faac15531e26cc371.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/957185285f5f008faac15531e26cc371.woff2 new file mode 100644 index 00000000..91815ed8 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/957185285f5f008faac15531e26cc371.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/977d55204b55cc4810b6e33915d95720.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/977d55204b55cc4810b6e33915d95720.woff2 new file mode 100644 index 00000000..dd0c5bd8 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/977d55204b55cc4810b6e33915d95720.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/97bad318e255929cb715bac27d01a3c3.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/97bad318e255929cb715bac27d01a3c3.woff2 new file mode 100644 index 00000000..06505b43 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/97bad318e255929cb715bac27d01a3c3.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/99e86872c58e9c840b6d997f866dee22.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/99e86872c58e9c840b6d997f866dee22.woff2 new file mode 100644 index 00000000..fac0315b Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/99e86872c58e9c840b6d997f866dee22.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/9b47346eedfd34447e94647337fd6a64.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/9b47346eedfd34447e94647337fd6a64.woff2 new file mode 100644 index 00000000..28934cb7 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/9b47346eedfd34447e94647337fd6a64.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/9ba8b53929fe5e8c760e365e2588715e.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/9ba8b53929fe5e8c760e365e2588715e.woff2 new file mode 100644 index 00000000..ef3be363 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/9ba8b53929fe5e8c760e365e2588715e.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/9c745cd44d8ac99485bd7b24f33dcbbf.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/9c745cd44d8ac99485bd7b24f33dcbbf.woff2 new file mode 100644 index 00000000..45579689 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/9c745cd44d8ac99485bd7b24f33dcbbf.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/9cbcc73310bab1b036e0d1e3728a4ad7.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/9cbcc73310bab1b036e0d1e3728a4ad7.woff2 new file mode 100644 index 00000000..94d23832 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/9cbcc73310bab1b036e0d1e3728a4ad7.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/9d71282fa8017494090f428969c87ac5.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/9d71282fa8017494090f428969c87ac5.woff2 new file mode 100644 index 00000000..11e1fd5d Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/9d71282fa8017494090f428969c87ac5.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/9da1db1d667756102414f970fadde7d9.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/9da1db1d667756102414f970fadde7d9.woff2 new file mode 100644 index 00000000..d6524309 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/9da1db1d667756102414f970fadde7d9.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/9db891832d940057c2249bebb1355aa8.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/9db891832d940057c2249bebb1355aa8.woff2 new file mode 100644 index 00000000..66ff38d3 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/9db891832d940057c2249bebb1355aa8.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/a1e5763384071f66e5090146dd74f4b6.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/a1e5763384071f66e5090146dd74f4b6.woff2 new file mode 100644 index 00000000..2adcb3ec Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/a1e5763384071f66e5090146dd74f4b6.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/a20dac01d4ed3a292484f5824e0f86a6.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/a20dac01d4ed3a292484f5824e0f86a6.woff2 new file mode 100644 index 00000000..13000666 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/a20dac01d4ed3a292484f5824e0f86a6.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/a2372f8c07ff5b351cc493cca970ae86.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/a2372f8c07ff5b351cc493cca970ae86.woff2 new file mode 100644 index 00000000..3a63390c Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/a2372f8c07ff5b351cc493cca970ae86.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/a32afd1f15350365a23ec8042253d164.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/a32afd1f15350365a23ec8042253d164.woff2 new file mode 100644 index 00000000..b73b8152 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/a32afd1f15350365a23ec8042253d164.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/a348bff59b085bf1d158a88c660d7d3f.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/a348bff59b085bf1d158a88c660d7d3f.woff2 new file mode 100644 index 00000000..7d3f2c82 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/a348bff59b085bf1d158a88c660d7d3f.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/a3c45be5a3d98ece81ff14c5b8bc42cd.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/a3c45be5a3d98ece81ff14c5b8bc42cd.woff2 new file mode 100644 index 00000000..61ede8b6 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/a3c45be5a3d98ece81ff14c5b8bc42cd.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/a5879355c17269b42ff8ead85d31f595.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/a5879355c17269b42ff8ead85d31f595.woff2 new file mode 100644 index 00000000..4a734fe9 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/a5879355c17269b42ff8ead85d31f595.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/a6c5141f5329dc0076c013a1e58b66a9.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/a6c5141f5329dc0076c013a1e58b66a9.woff2 new file mode 100644 index 00000000..7faf111b Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/a6c5141f5329dc0076c013a1e58b66a9.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/a8225c2ad58f8a44e7af27efd9029c79.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/a8225c2ad58f8a44e7af27efd9029c79.woff2 new file mode 100644 index 00000000..c6787a6d Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/a8225c2ad58f8a44e7af27efd9029c79.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/a8f96b7498537fc50bf2bdebe89358c3.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/a8f96b7498537fc50bf2bdebe89358c3.woff2 new file mode 100644 index 00000000..2649052f Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/a8f96b7498537fc50bf2bdebe89358c3.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/a915cb4aa1c6aa3f4b32bef6f8f85c57.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/a915cb4aa1c6aa3f4b32bef6f8f85c57.woff2 new file mode 100644 index 00000000..a82eb6ba Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/a915cb4aa1c6aa3f4b32bef6f8f85c57.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/aad71861a2c29565e12cc991817bd952.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/aad71861a2c29565e12cc991817bd952.woff2 new file mode 100644 index 00000000..91df7af5 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/aad71861a2c29565e12cc991817bd952.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/ac06ee042314e773e43c626f2cb7f7af.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/ac06ee042314e773e43c626f2cb7f7af.woff2 new file mode 100644 index 00000000..1643493c Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/ac06ee042314e773e43c626f2cb7f7af.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/ace0d4157e976493fd72c1e046409715.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/ace0d4157e976493fd72c1e046409715.woff2 new file mode 100644 index 00000000..2404bc3c Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/ace0d4157e976493fd72c1e046409715.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/ad29e7cc06265fceb8a3b76a5b4bccc2.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/ad29e7cc06265fceb8a3b76a5b4bccc2.woff2 new file mode 100644 index 00000000..9f288353 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/ad29e7cc06265fceb8a3b76a5b4bccc2.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/ad71e4006ee291d68411a1de8fe2fc42.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/ad71e4006ee291d68411a1de8fe2fc42.woff2 new file mode 100644 index 00000000..69ebc508 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/ad71e4006ee291d68411a1de8fe2fc42.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/adb55326971cf5ee4b3affd1b37ef577.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/adb55326971cf5ee4b3affd1b37ef577.woff2 new file mode 100644 index 00000000..18d32fc4 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/adb55326971cf5ee4b3affd1b37ef577.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/adc309549d9215c4758eee232a737ac4.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/adc309549d9215c4758eee232a737ac4.woff2 new file mode 100644 index 00000000..2b77dfa0 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/adc309549d9215c4758eee232a737ac4.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/ae68b84170ae063f3b9a123d9966096b.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/ae68b84170ae063f3b9a123d9966096b.woff2 new file mode 100644 index 00000000..aaf19858 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/ae68b84170ae063f3b9a123d9966096b.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/b1d624c5c25582bf0c77a4c98e92bd48.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/b1d624c5c25582bf0c77a4c98e92bd48.woff2 new file mode 100644 index 00000000..219ca1e6 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/b1d624c5c25582bf0c77a4c98e92bd48.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/b257116c50d49d4fcca63041a0bc3729.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/b257116c50d49d4fcca63041a0bc3729.woff2 new file mode 100644 index 00000000..3d464489 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/b257116c50d49d4fcca63041a0bc3729.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/b292c9705e7ebf3ca2c963042a057aa0.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/b292c9705e7ebf3ca2c963042a057aa0.woff2 new file mode 100644 index 00000000..cd626f2a Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/b292c9705e7ebf3ca2c963042a057aa0.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/b522f3810a2841ddd51fa55ebca68b4e.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/b522f3810a2841ddd51fa55ebca68b4e.woff2 new file mode 100644 index 00000000..1ec05ad9 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/b522f3810a2841ddd51fa55ebca68b4e.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/b588d68bf01929fcf64801c32e548011.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/b588d68bf01929fcf64801c32e548011.woff2 new file mode 100644 index 00000000..933b255d Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/b588d68bf01929fcf64801c32e548011.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/b61d3ecbb41c5307b1768c2ecb3ceee4.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/b61d3ecbb41c5307b1768c2ecb3ceee4.woff2 new file mode 100644 index 00000000..90685e14 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/b61d3ecbb41c5307b1768c2ecb3ceee4.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/b816c4213217ebb827ad240302a2ec0d.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/b816c4213217ebb827ad240302a2ec0d.woff2 new file mode 100644 index 00000000..fd57382b Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/b816c4213217ebb827ad240302a2ec0d.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/bb5d12b457041727a28e6db87c03b066.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/bb5d12b457041727a28e6db87c03b066.woff2 new file mode 100644 index 00000000..f02a39d3 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/bb5d12b457041727a28e6db87c03b066.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/bb80da9ea1e74699b0f3920cbd61009a.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/bb80da9ea1e74699b0f3920cbd61009a.woff2 new file mode 100644 index 00000000..a9113bbd Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/bb80da9ea1e74699b0f3920cbd61009a.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/bf921c86b82f4385d1affda530883f1b.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/bf921c86b82f4385d1affda530883f1b.woff2 new file mode 100644 index 00000000..ccaf1028 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/bf921c86b82f4385d1affda530883f1b.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/c06b19a5773de5f3b770afa17ed0d175.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/c06b19a5773de5f3b770afa17ed0d175.woff2 new file mode 100644 index 00000000..2e817f21 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/c06b19a5773de5f3b770afa17ed0d175.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/c1cced3fe1a721187626b8c6eb27ecf9.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/c1cced3fe1a721187626b8c6eb27ecf9.woff2 new file mode 100644 index 00000000..06fe3d5d Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/c1cced3fe1a721187626b8c6eb27ecf9.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/c2d78119858a2266464e16b2b08e5bf9.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/c2d78119858a2266464e16b2b08e5bf9.woff2 new file mode 100644 index 00000000..3c13b810 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/c2d78119858a2266464e16b2b08e5bf9.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/c4c7f8e9b543d25b36c084cbfd36c2f4.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/c4c7f8e9b543d25b36c084cbfd36c2f4.woff2 new file mode 100644 index 00000000..893d0504 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/c4c7f8e9b543d25b36c084cbfd36c2f4.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/c6ad7d0b708655662b0a05866ff29cfe.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/c6ad7d0b708655662b0a05866ff29cfe.woff2 new file mode 100644 index 00000000..460e08a8 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/c6ad7d0b708655662b0a05866ff29cfe.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/c6e8ac49dfe28a1da4473d051be33a00.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/c6e8ac49dfe28a1da4473d051be33a00.woff2 new file mode 100644 index 00000000..eb6cb5dd Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/c6e8ac49dfe28a1da4473d051be33a00.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/c72c2143526fce3d32b7a56ce6848581.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/c72c2143526fce3d32b7a56ce6848581.woff2 new file mode 100644 index 00000000..03e4056e Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/c72c2143526fce3d32b7a56ce6848581.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/c8ef8c65d6e08ed471c29dbedb4a0739.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/c8ef8c65d6e08ed471c29dbedb4a0739.woff2 new file mode 100644 index 00000000..55e13b4c Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/c8ef8c65d6e08ed471c29dbedb4a0739.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/ca093685c5ac208cab4d4bfe5bd9ca14.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/ca093685c5ac208cab4d4bfe5bd9ca14.woff2 new file mode 100644 index 00000000..8fea6871 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/ca093685c5ac208cab4d4bfe5bd9ca14.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/cb536d87a302e0cc13a693ba6f8f6719.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/cb536d87a302e0cc13a693ba6f8f6719.woff2 new file mode 100644 index 00000000..f9782033 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/cb536d87a302e0cc13a693ba6f8f6719.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/d0d1383fdbb6d515de1c57e7a007560d.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/d0d1383fdbb6d515de1c57e7a007560d.woff2 new file mode 100644 index 00000000..daba1b69 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/d0d1383fdbb6d515de1c57e7a007560d.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/d2b8358a5f48dac272aa6f2cfa5070c0.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/d2b8358a5f48dac272aa6f2cfa5070c0.woff2 new file mode 100644 index 00000000..fdbb371a Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/d2b8358a5f48dac272aa6f2cfa5070c0.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/d6959daeedab31290e59ce113535c737.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/d6959daeedab31290e59ce113535c737.woff2 new file mode 100644 index 00000000..461e1060 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/d6959daeedab31290e59ce113535c737.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/d69c2ab3e3ce1548de045f65248b07d6.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/d69c2ab3e3ce1548de045f65248b07d6.woff2 new file mode 100644 index 00000000..0906a7bc Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/d69c2ab3e3ce1548de045f65248b07d6.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/d6c3f49720691041d49e833dec25b45a.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/d6c3f49720691041d49e833dec25b45a.woff2 new file mode 100644 index 00000000..62bf32d5 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/d6c3f49720691041d49e833dec25b45a.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/d72f2ff55978308da2fac1493a5ec3d7.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/d72f2ff55978308da2fac1493a5ec3d7.woff2 new file mode 100644 index 00000000..57bf3fa9 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/d72f2ff55978308da2fac1493a5ec3d7.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/d74c61c5bf1b5b946d24306e406ef12d.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/d74c61c5bf1b5b946d24306e406ef12d.woff2 new file mode 100644 index 00000000..f00acc3c Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/d74c61c5bf1b5b946d24306e406ef12d.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/d823013e88237b0449241d7b7b1d807b.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/d823013e88237b0449241d7b7b1d807b.woff2 new file mode 100644 index 00000000..3b8d1eb8 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/d823013e88237b0449241d7b7b1d807b.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/d8292bf359df9c0fb958c31104872bd2.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/d8292bf359df9c0fb958c31104872bd2.woff2 new file mode 100644 index 00000000..3a75e843 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/d8292bf359df9c0fb958c31104872bd2.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/d95c40135f98aed54b6f3ec2839dbabb.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/d95c40135f98aed54b6f3ec2839dbabb.woff2 new file mode 100644 index 00000000..7dc6b9c3 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/d95c40135f98aed54b6f3ec2839dbabb.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/da66bdfe50d47d0347e4f620b3cb2e32.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/da66bdfe50d47d0347e4f620b3cb2e32.woff2 new file mode 100644 index 00000000..23014ce4 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/da66bdfe50d47d0347e4f620b3cb2e32.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/db6410528d421cbd28e04ca8a489b9cc.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/db6410528d421cbd28e04ca8a489b9cc.woff2 new file mode 100644 index 00000000..1f616ff6 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/db6410528d421cbd28e04ca8a489b9cc.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/dc224dd6cb253c68a97e682e17ce21fb.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/dc224dd6cb253c68a97e682e17ce21fb.woff2 new file mode 100644 index 00000000..0287fc67 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/dc224dd6cb253c68a97e682e17ce21fb.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/dc465dc4bf5056f90716395c928ef20f.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/dc465dc4bf5056f90716395c928ef20f.woff2 new file mode 100644 index 00000000..df5d84f9 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/dc465dc4bf5056f90716395c928ef20f.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/dccb8ff2e02b1cf45d79b1e868a7acaf.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/dccb8ff2e02b1cf45d79b1e868a7acaf.woff2 new file mode 100644 index 00000000..94454820 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/dccb8ff2e02b1cf45d79b1e868a7acaf.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/de88f7d50f355e91a3462c71641471a1.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/de88f7d50f355e91a3462c71641471a1.woff2 new file mode 100644 index 00000000..ebce4058 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/de88f7d50f355e91a3462c71641471a1.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/dfdb905d0ed22e70569e6c4141b117cc.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/dfdb905d0ed22e70569e6c4141b117cc.woff2 new file mode 100644 index 00000000..cb5a6edb Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/dfdb905d0ed22e70569e6c4141b117cc.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/dfe10f399f07a611ad944f6438c1c945.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/dfe10f399f07a611ad944f6438c1c945.woff2 new file mode 100644 index 00000000..e9fb45d4 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/dfe10f399f07a611ad944f6438c1c945.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/e0826f03af735acef8cb0e6fc55def40.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/e0826f03af735acef8cb0e6fc55def40.woff2 new file mode 100644 index 00000000..861b1ec2 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/e0826f03af735acef8cb0e6fc55def40.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/e0a0937f6f910c5cad1351206bee22c1.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/e0a0937f6f910c5cad1351206bee22c1.woff2 new file mode 100644 index 00000000..4c771b6d Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/e0a0937f6f910c5cad1351206bee22c1.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/e0bae4b9d1395bb70c3569f9f3ccc150.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/e0bae4b9d1395bb70c3569f9f3ccc150.woff2 new file mode 100644 index 00000000..d16c4371 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/e0bae4b9d1395bb70c3569f9f3ccc150.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/e0cff2bf0455df5e0e2d28818829ad5f.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/e0cff2bf0455df5e0e2d28818829ad5f.woff2 new file mode 100644 index 00000000..1bde31a5 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/e0cff2bf0455df5e0e2d28818829ad5f.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/e0e6acb1b5b81067aec1914f4ad42b17.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/e0e6acb1b5b81067aec1914f4ad42b17.woff2 new file mode 100644 index 00000000..9020ddff Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/e0e6acb1b5b81067aec1914f4ad42b17.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/e173ba4d714c79c1c0a7642cf540f25e.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/e173ba4d714c79c1c0a7642cf540f25e.woff2 new file mode 100644 index 00000000..1c66dcbd Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/e173ba4d714c79c1c0a7642cf540f25e.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/e391f549c2ae8b67be824af92112940a.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/e391f549c2ae8b67be824af92112940a.woff2 new file mode 100644 index 00000000..6f003c41 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/e391f549c2ae8b67be824af92112940a.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/e565d8ea3db30cf5a8ff9198798c7fc2.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/e565d8ea3db30cf5a8ff9198798c7fc2.woff2 new file mode 100644 index 00000000..ebe23b98 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/e565d8ea3db30cf5a8ff9198798c7fc2.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/e83f6d2cb1b816a240a41f1cd95805a2.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/e83f6d2cb1b816a240a41f1cd95805a2.woff2 new file mode 100644 index 00000000..6e473269 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/e83f6d2cb1b816a240a41f1cd95805a2.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/e92bc613d15c7c556adfbbdbd27371e9.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/e92bc613d15c7c556adfbbdbd27371e9.woff2 new file mode 100644 index 00000000..eac295f3 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/e92bc613d15c7c556adfbbdbd27371e9.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/ea2a5eb9904aaa5de82fd5e3e0780b66.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/ea2a5eb9904aaa5de82fd5e3e0780b66.woff2 new file mode 100644 index 00000000..d3288776 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/ea2a5eb9904aaa5de82fd5e3e0780b66.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/eb7787ec051c2b621a1ca4101715b0b7.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/eb7787ec051c2b621a1ca4101715b0b7.woff2 new file mode 100644 index 00000000..e2415a66 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/eb7787ec051c2b621a1ca4101715b0b7.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/ecdc45f383ae408e6895e3a525ad3992.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/ecdc45f383ae408e6895e3a525ad3992.woff2 new file mode 100644 index 00000000..0361b8e7 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/ecdc45f383ae408e6895e3a525ad3992.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/eda046f596cbe0384d08c1a83af678f0.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/eda046f596cbe0384d08c1a83af678f0.woff2 new file mode 100644 index 00000000..f112eba1 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/eda046f596cbe0384d08c1a83af678f0.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/eeb512539118d02401a38b88da4714f5.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/eeb512539118d02401a38b88da4714f5.woff2 new file mode 100644 index 00000000..93d49724 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/eeb512539118d02401a38b88da4714f5.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/eee53b23b919cc5f7509aab7a2f292c5.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/eee53b23b919cc5f7509aab7a2f292c5.woff2 new file mode 100644 index 00000000..d3e1caac Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/eee53b23b919cc5f7509aab7a2f292c5.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/f10c91f227389582e5d7070dee263105.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/f10c91f227389582e5d7070dee263105.woff2 new file mode 100644 index 00000000..88546822 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/f10c91f227389582e5d7070dee263105.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/f16c7d5081f29979ef8fc5cc75fcb4c0.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/f16c7d5081f29979ef8fc5cc75fcb4c0.woff2 new file mode 100644 index 00000000..a1f938cc Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/f16c7d5081f29979ef8fc5cc75fcb4c0.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/f19366aaffb120d02a3e6cbe1cab0210.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/f19366aaffb120d02a3e6cbe1cab0210.woff2 new file mode 100644 index 00000000..2293edde Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/f19366aaffb120d02a3e6cbe1cab0210.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/f43f4fd83d242c0ad349cc21525034a6.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/f43f4fd83d242c0ad349cc21525034a6.woff2 new file mode 100644 index 00000000..51b1cf1c Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/f43f4fd83d242c0ad349cc21525034a6.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/f486d93aea6f500cb299adf957ffa99b.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/f486d93aea6f500cb299adf957ffa99b.woff2 new file mode 100644 index 00000000..0fbb2edf Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/f486d93aea6f500cb299adf957ffa99b.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/f4a38e48eec2f769ac06bfdf7e8fb990.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/f4a38e48eec2f769ac06bfdf7e8fb990.woff2 new file mode 100644 index 00000000..11d5693e Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/f4a38e48eec2f769ac06bfdf7e8fb990.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/f50ba223a9f303ad368f7bba1183360a.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/f50ba223a9f303ad368f7bba1183360a.woff2 new file mode 100644 index 00000000..186285ea Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/f50ba223a9f303ad368f7bba1183360a.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/f6751c3714a955cdef37887fe3270849.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/f6751c3714a955cdef37887fe3270849.woff2 new file mode 100644 index 00000000..71907b1a Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/f6751c3714a955cdef37887fe3270849.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/f76e8c3e9548208b1fe1ac9c6d94b1f6.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/f76e8c3e9548208b1fe1ac9c6d94b1f6.woff2 new file mode 100644 index 00000000..333ae52d Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/f76e8c3e9548208b1fe1ac9c6d94b1f6.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/f7fefc089f1165c9a0957c131901d020.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/f7fefc089f1165c9a0957c131901d020.woff2 new file mode 100644 index 00000000..2f3f4ca8 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/f7fefc089f1165c9a0957c131901d020.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/f8152eab10839f13b247f63e6c764755.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/f8152eab10839f13b247f63e6c764755.woff2 new file mode 100644 index 00000000..3249008f Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/f8152eab10839f13b247f63e6c764755.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/f8e2e0a4f74408f3ddcae379e951464e.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/f8e2e0a4f74408f3ddcae379e951464e.woff2 new file mode 100644 index 00000000..e0e05e60 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/f8e2e0a4f74408f3ddcae379e951464e.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/fa74af1f62b69ce6e69b6ed86e1807ca.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/fa74af1f62b69ce6e69b6ed86e1807ca.woff2 new file mode 100644 index 00000000..8192860a Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/fa74af1f62b69ce6e69b6ed86e1807ca.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/fc972e83f1ed87ddd0478afcfd0a4465.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/fc972e83f1ed87ddd0478afcfd0a4465.woff2 new file mode 100644 index 00000000..081c97b2 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/fc972e83f1ed87ddd0478afcfd0a4465.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/fe4b8d24e091eed1652eede477fc0174.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/fe4b8d24e091eed1652eede477fc0174.woff2 new file mode 100644 index 00000000..edb58f9f Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/fe4b8d24e091eed1652eede477fc0174.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/fe7443cfa956f984e033563487ad5609.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/fe7443cfa956f984e033563487ad5609.woff2 new file mode 100644 index 00000000..ee9f1246 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/fe7443cfa956f984e033563487ad5609.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/fec679375c2d9b27c287b4eefb8bd137.woff2 b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/fec679375c2d9b27c287b4eefb8bd137.woff2 new file mode 100644 index 00000000..0a1871ee Binary files /dev/null and b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/fec679375c2d9b27c287b4eefb8bd137.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/index.html b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/index.html new file mode 100644 index 00000000..81296fa9 --- /dev/null +++ b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/index.html @@ -0,0 +1,455 @@ + + + + + 字体分包构建报告 + + + + + + + +
    + +
    加载中
    +
    加载错误
    + +
    + + + + + + + + + + +
    + 中文网字计划 + cn-font-split 生� +
    +
    + + + + 汇总 + 字体信� + 分包 + +
    + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/index.proto b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/index.proto new file mode 100644 index 00000000..50a3fcbc --- /dev/null +++ b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/index.proto @@ -0,0 +1,117 @@ +syntax = "proto3"; + +package api_interface; + +message InputTemplate { + bytes input = 1; // ttf/woff2 文件的 buffer + optional string out_dir = 2; // 切割å�Žæ”¾ç½®æ–‡ä»¶çš„æ–‡ä»¶å¤¹ + + // ====== 构建产物é…�ç½® ====== + + optional CssProperties css = 5; // CSS é…�ç½® + optional string target_type = 6; // 目标类型 + repeated bytes subsets = 7; // å­�集 + optional int32 chunk_size = 9; // 包大å°� + optional float chunk_size_tolerance = 10; // 包大å°�容差 + optional int32 max_allow_subsets_count = 11; // 最大å…�许å­�集数é‡� + + optional bool test_html = 13; // 是å�¦ç”Ÿæˆ�测试 HTML + optional bool reporter = 14; // 是å�¦ç”Ÿæˆ� reporter.bin + optional PreviewImage preview_image = 15; // 预览图åƒ� + + optional string rename_output_font = 18; // é‡�命å��输出字体 + optional string build_mode = 20; // TODO 构建模å¼� + + // ====== 预分包优化项é…�ç½® ======= + + optional bool language_areas = 8; // 是å�¦è¿›è¡Œè¯­è¨€åŒºåŸŸä¼˜åŒ– + optional bool multi_threads = 21; // TODO 是å�¦ä½¿ç”¨å¤šçº¿ç¨‹ + optional bool font_feature = 22; // 是å�¦å�¯ç”¨å­—体特性 + optional bool reduce_mins = 23; // 是å�¦å‡�少最å°�分包, + optional bool auto_subset = 24; // 是å�¦è‡ªåЍå­�集化 + optional bool subset_remain_chars = 25; // 是å�¦è‡ªåŠ¨æ·»åŠ æ²¡æœ‰å£°æ˜Žçš„å­—ç¬¦ + + // CSS 属性é…�ç½® + message CssProperties { + optional string font_family = 1; // 字体家æ—�å��ç§° + optional string font_weight = 2; // 字体粗细 + optional string font_style = 3; // 字体样å¼� + optional string font_display = 4; // 字体显示方å¼� + repeated string local_family = 5; // 本地字体家æ—�å��ç§° + repeated PolyfillType polyfill = 6; // Polyfill 类型 + + // 注释属性 + + optional bool comment_base = 11; // 基础注释 + optional bool comment_name_table = 12; // å��称表注释 + optional bool comment_unicodes = 13; // Unicode 注释 + optional bool compress = 8; // 是å�¦åŽ‹ç¼© + optional string file_name = 9; // 文件å�� + } + + // Polyfill 类型 + message PolyfillType { + string name = 1; // å��ç§° + string format = 2; // æ ¼å¼� + } + + // 预览图åƒ� + message PreviewImage { + string text = 1; // 会显示在 svg 中的文本 + string name = 2; // svg 文件的å��ç§° + } +} + +enum EventName { + UNSPECIFIED = 0; + OUTPUT_DATA = 1; // "output_data" + END = 2; // "end" +} + +message EventMessage { + EventName event = 1; + string message = 2; + optional bytes data = 3; +} +message MultiMessages { + repeated EventMessage messages = 1; +} +message OutputReport { + string version = 1; // 版本å�· + Css css = 2; // CSS相关信æ�¯ï¼Œå�¯ä»¥ç›´æŽ¥ç”¨ + string platform = 3; // å¹³å�°ä¿¡æ�¯ï¼Œrust 的构建平å�° + + BundleMessage bundle_message = 24; // 构建消æ�¯ + repeated NameTable name_table = 25; // name 表信æ�¯ + repeated SubsetDetail subset_detail = 26; // å­�集详情 + + message NameTable { + string platform = 1; // å¹³å�° + string language = 2; // 语言 + string name = 3; // å��ç§° + string value = 4; // 值 + } + + message SubsetDetail { + uint32 id = 1; // ID + string hash = 2; // 哈希值 + string file_name = 6; // 文件å��ç§° + uint32 bytes = 3; // 字节数 + repeated uint32 chars = 4; // 字符数组 + uint32 duration = 5; // 构建时间 + } + + message BundleMessage { + uint32 origin_size = 1; // 原始大å°� + uint32 bundled_size = 2; // 产物大å°� + uint32 origin_bytes = 3; // 原始字节数 + uint32 bundled_bytes = 4; // 产物字节数 + } + + message Css { + string family = 1; // 字体家æ—� + string style = 2; // æ ·å¼� + string weight = 3; // å­—é‡� + string display = 4; // 显示方å¼� + } +} diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/preview.svg b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/preview.svg new file mode 100644 index 00000000..9e1196c9 --- /dev/null +++ b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/preview.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/reporter.bin b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/reporter.bin new file mode 100644 index 00000000..e19b6be6 --- /dev/null +++ b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/reporter.bin @@ -0,0 +1,31 @@ + +7.6.6" + Maple Mono CNnormal400"swapx86_64-unknown-linux-gnu£®£®À§Ñ ˆ»’Ê. + MacintoshenFontFamilyName" Maple Mono CNÊ+ + MacintoshenFontSubfamilyName"RegularÊY + Macintoshen UniqueFontID":Version 7.000-beta36;SUBF;MapleMono-CN-Regular;2024;FL830;Ê4 + Macintoshen FullFontName"Maple Mono CN RegularÊ- + Macintoshen VersionString" Version 7.000Ê9 + MacintoshenPostScriptFontName"MapleMono-CN-RegularÊz +WindowsenCopyrightNotice"ZCopyright 2022 The Maple Mono Project Authors (https://github.com/subframe7536/maple-font)Ê, +WindowsenFontFamilyName" Maple Mono CNÊ) +WindowsenFontSubfamilyName"RegularÊW +Windowsen UniqueFontID":Version 7.000-beta36;SUBF;MapleMono-CN-Regular;2024;FL830;Ê2 +Windowsen FullFontName"Maple Mono CN RegularÊ+ +Windowsen VersionString" Version 7.000Ê7 +WindowsenPostScriptFontName"MapleMono-CN-RegularÊ) +Windowsen DesignerName" subframe7536ÊL +Windowsen Description"0A monospace font with round corner and ligaturesÊ9 +Windowsen VendorURL"https://github.com/subframe7536Ê; +Windowsen DesignerURL"https://github.com/subframe7536ʵ +WindowsenLicenseDescription"‘This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is available with a FAQ at: https://openfontlicense.orgÊ6 +Windowsen +LicenseURL"https://openfontlicense.orgÊ- +WindowsenOther"Broken equals ligaturesÊ8 +WindowsenOther""Broken compare and equal ligaturesÊ) +WindowsenOther"Enable rbitrary tagÊ0 +WindowsenOther"Break multiple underscoresÊJ +WindowsenOther"4Restore the thickness of backslash in escape lettersÊJ +WindowsenOther"4Relax the conditions for multiple greaters ligaturesÊD +WindowsenOther".Enable double headed arrows and reverse arrowsÒ� 4eee787d900af2eff915fa460dcc0904œ±"- !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJo(2&4eee787d900af2eff915fa460dcc0904.woff2Ò† 2f04d0609cf5de6e65c92a1db9b41deeüX"3KLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnpqrstuvwxyz{|}~(2&2f04d0609cf5de6e65c92a1db9b41dee.woff2Ò© 4d47ad757f5ec26fd54d07888058928eð$"X ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌ2&4d47ad757f5ec26fd54d07888058928e.woff2Ò· ac06ee042314e773e43c626f2cb7f7afÄ "fÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ2&ac06ee042314e773e43c626f2cb7f7af.woff2Ò© 3eabf6a6c7e64cb72876c06e546f085eø"X€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«2&3eabf6a6c7e64cb72876c06e546f085e.woff2ÒÁ 2604190370d4299b1cc638a657e4a69c”#"p¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâã2&2604190370d4299b1cc638a657e4a69c.woff2Ò‰ a5879355c17269b42ff8ead85d31f595ð"8äåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ2&a5879355c17269b42ff8ead85d31f595.woff2Ò› fe7443cfa956f984e033563487ad5609¬#"J��’› ¡¯°ÍÎÏÐÑÒÓÔÖØÚÜæçêëôõüýþÿ˜™š›²³·2&fe7443cfa956f984e033563487ad5609.woff2Òq  c1cced3fe1a721187626b8c6eb27ecf9À" ÙÛ¹º¼ÆÇÉØÙÚÛÜÝó÷2&c1cced3fe1a721187626b8c6eb27ecf9.woff2Ò© + 468656bcfde0b5e1427e045e41d1b94b¸"Xôõþ„…†‡ˆ‰ŠŒŽ��‘’“”•–—˜™š›œ�žŸ ¡£¤¥¦§¨©ª«¬­®¯2&468656bcfde0b5e1427e045e41d1b94b.woff2Ò—  87363b4f34d58fc20a5ec98e98939febÜ"F°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÕÖ×2&87363b4f34d58fc20a5ec98e98939feb.woff2Ò©  1dde9964abfb9b9b1d7f2ec69f711d31¤"X�‚ƒ„…†‡ˆ‰Š‹ŒŽ��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­2&1dde9964abfb9b9b1d7f2ec69f711d31.woff2ÒÁ  4c5a843ee43fd663029df6e4d0e25555´("p®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÑÒÓÔÕÖרÙÚÛÜÞß� ‘ ’ “ – — š › 2&4c5a843ee43fd663029df6e4d0e25555.woff2Ò‰ 7742243b2ae1ceaced62d9b43ba505f3œ"8¢ £ ® ¯ ° ± ² ³ ¶ · º » Ô Õ Ø Ù Ü Ý Þ ß ä å æ ç è é ô õ 2&7742243b2ae1ceaced62d9b43ba505f3.woff2Òª f7fefc089f1165c9a0957c131901d020°"Y‚`Œþ�`šþ›þ�þ¼@Ÿþ”@¦@Þþ“@Œ`�`Ž`�`œ@�@˜@™@ˆþ‰þŠ`‹`ˆ`‰`�`‘`–`—`”`•`ÛþÝþÏK¢@Üþ˜`™`2&f7fefc089f1165c9a0957c131901d020.woff2ÒØ 977d55204b55cc4810b6e33915d95720ÔR"„„퀜¯Ì¨®‰Îº�­œŒ©�œºœæ¶ý­å�Ÿê†�§²�“ѧ¨êšœªœý�Ì�ÜžöËù·ô¼Šœ†èšž�ÄÙŸï§ÕÙŽ�¹Ë°®ú£ž·å»–¦†¤°¤š·(2&977d55204b55cc4810b6e33915d95720.woff2Òý eb7787ec051c2b621a1ca4101715b0b7è�"¨¨¥°çÓžåÎÛŸÏý‘ÄŽœÇŸ›¥§À§�ꃈ¨Éöصš²Œ¨è¢»œËœ¶¤‹œ¬Îö¢¶·ލ”½ó¢‡Ë±¸Í£ì�Œ€â®…€°Ëߜո¦½è¡ºÎÙÊì¢ÀÄú½‚³ÍóÐÇðÊÖ�жš ¡¥Äš‘Ø(2&eb7787ec051c2b621a1ca4101715b0b7.woff2Ò• 957185285f5f008faac15531e26cc371à�"À€¾…£ûù¡÷¾—Ï£‹� ¥¿Êéä‹ôÝŸÿʧ‚¼–Ä—¿Ó¾¬öú¯øíã�à­ͤ¹áô«ŸÎÄ“ÿª˜±´ØŽÌîíµêÎ�ö¼Á©�¸º¦ÅÁ‰œó¼ý²ô—è�€Î墡—ÿžáŸ�¾îÆý¡†¸Óý�–²ã“ßýÍž©¤»Ú€Åùä(2&957185285f5f008faac15531e26cc371.woff2Ò§ fec679375c2d9b27c287b4eefb8bd137ä�"Ò¾òåËÑó¯ÎôÍÑ£Œ�º¾àËب⾸¼î«¶â‡ÐœÏ¨šäֱꀮÔׯžº®ãÖ›�‰·Ëõا”ð²��žÓ ˆÎö�ü·÷šØŸûø©²»ÙÀîÁ¦Äý„Ï�ÆÈÊÂØàœ„¨åáΡÖÃ΄²ÁÚû�‘¨ƒ˜¥Ç¤�‡Æ·ÐÕ¦�Ξ±«‘朤—º—(2&fec679375c2d9b27c287b4eefb8bd137.woff2Ò¹ b257116c50d49d4fcca63041a0bc3729¸²"ä÷¢îðÑþ›¤Éœ¹Êñ¢ù°Žÿƒ€�ÝÆ—â¬ÎÚÈœ ž‹î  öôÚ ¶ÊÅë”Ø½Ë‹¯¤œø§ˆ¼“œ�¨Пˆ¿Á—Æ£÷�â§ýÌ£×§óÁƒŸè«¨Ç¯ç¡Ù‚…�À»ÀαŸÂÈ¢ƪÖ§ôÊò»œ£ïÀ¯Ê¥Åìž›Ÿñ»Û­†±™¤Œ·“ï›ͧض«�‘¸«¤�Àê§¹·(2&b257116c50d49d4fcca63041a0bc3729.woff2ÒÅ ea2a5eb9904aaa5de82fd5e3e0780b66øÅ"ðºòËľʿýί³£¾Ÿ–œóƒ°—ƒ±Ô€»¦¡Ô‡çã§ò„å—»§ŒµÈСИļÐè¬Æ­àžÚ¢¹šû¢©—¤Å¹Ð‰ æž•¾åÖ�²�€…¦Þ®ÿ’ÍÄ¥ˆí—ôíñ¾ŬèÙƒ·åχ²×¶ úœœΞ•ÅÙý¼ Å¿Ï×Õž÷ÚÌꇜµ£Ÿ¥ÑŸ£šþ­¾ù…ÜÌ€‹Ÿ˜žñÛצ­Ë𧃆(2&ea2a5eb9904aaa5de82fd5e3e0780b66.woff2ÒÔ 97bad318e255929cb715bac27d01a3c3äÊ"ÿé¬Á““ÌËÚŠÅÑΗ÷É¢™Ëþ—ò§Þ­§Ç£¡‹¿²¬Ñí—¦ñ¸߯¦¼úôᘞ¥�ÏǦÿ¼ÞòˆÛ§ªÎ·Äôƒíýôý®—¶å†§ïó¾­Öö’¤�£Í©ÀÑÕ—”�€”¿¢¦ý󦸵ן Æ“Ç£œ½Æýƒ¼Ä—Çýß±îþ��ò¼À��Ÿ›£�îŸîÊ�ÓÄ´²Êí¸Ð™£Ô³ý¨À¸ȧ„±ðóʨ©¥Š›(2&97bad318e255929cb715bac27d01a3c3.woff2ÒÝ 9c745cd44d8ac99485bd7b24f33dcbbf�Ú"ˆ¾ÌŸ®ä¬—ëë¿é®—ž‚ ù¯�Ïà£˳û—¿¥¤ÿ·¿÷§‰Æçâ÷—¥œÀðϦýìŽô±²Å‘€¿ï†è¨�­”œΦíá¡·Í¢À�Ý—Ь‹§³›¿Äƒè„«ͬõ¿»óé¶—¤’�‰�ÐÎÞ¸ìÅô­‹çþì…›Ÿ²ä§û°ÿÄ–³¾ÖÏ£Ú®ÏËÅ�±…�½¢šŸš¸—’Çàõì´ÅÊ¢·úÌÐϽˆ·‡îŸÅ¢�¿ó¯ðŸ ¾(2&9c745cd44d8ac99485bd7b24f33dcbbf.woff2Òé d6959daeedab31290e59ce113535c737œç"”å Çäâ­³¥‡¤ï̸ÜÜýçĪ²áœŸ¬ÜŸÆ·¦¨ô¢áÝ�¤ÈýߨÇ®¡�³·Ë¢ðšñ…€ªóïîÌÓÏÍ¢€÷—Ï·½²—Ï¡ë±Ò“¿ŸÏžМéÅÞ»™ ú„í¢ßóø£Á¯Ëœ­åêð±�õ׿ÞŸå�­—´ðö©¿§î»Àßìå�±Í—ùĪýŸ”¸˜·í­¬„¸¨Ùõ¹Ÿ‚¾߯É“–þÌ·«¨¬�Ò®Ë�³Ù®¿ó²Õ¾¾œ³¬©Ü(2&d6959daeedab31290e59ce113535c737.woff2Òò 6079b08e66ad2093fb19e2b4d424e547´ï"�éËâÖþ³ô³ýÅÅÉ—«ë¤·»ê½¸̧ûóß·“ŸĽý�à¦ëà­š¤¤ë¢¢ý§š¢Çæ§´œë¦¹Ù®²ú­›Î±ä³êÙêÔöÇëÒ׿�¶¬•½õ›ïõíçÈäâÆˆ�ûÖûž¢úØ�çýýžÿÎÙžãîÎμî—Åô¦×—ñ¦íï‚Óä�…¿ªÇð¦�ÎÑöšêÍ×ø¢ƒœÍɤžâÙˆ©®ªÞ�š�ØÄ«�Í�üýʦû£Ýý®ª¦ö‘�áØð­§ú(2&6079b08e66ad2093fb19e2b4d424e547.woff2Òû b1d624c5c25582bf0c77a4c98e92bd48¼…"¦¥Æ� ”Þ�ÒŸÌ­½Éز�¬¨ÃýéÄê©Ê£êþǪðœÝŸþÄÉÅæÖ»¤¼žæ� �¼¥ÀþÍÜ º € ‘ЈDޏø¢þ©ÝœÂÎå…Ú€£·²Û׈‘‚“½Ç ‘±®¼ÿ ŽÀòͤǠ‰Û¾ëü¼�·×þÿý™ª¥ÌýŒÞ±�¹ÞõáÇ�ð­ÉÑŒ‚°ˆ˜à®Ÿ æ»ãÊÌ��óýØ”öûìÚ¦ˆ·ó¨¨¡âËÏ…°œâ¨èò姌ǫšÚŒ—Ë™³¿ÂÅËĬ×®(2&b1d624c5c25582bf0c77a4c98e92bd48.woff2Ò„ 2130f719214f6eefd719bfd77d894561„ˆ"¯°ž®íɆ±¥ª„× åõýŸ™¿—·˧ƒ¨·š‘¤þöæ–󧱩ŸãÒ¾¨µÍý¶ÏÛëïžÁ©ײ¨—²ÚΜú°¶ä�¼„¿®æá¦ù²¯å±‚ö½«²²êѽÇØéý»ÊŒ¼¸š�ܧÖÙ®Öí¨ÎÏ‹‚§ï¤²£ð¢á�¢—Ç÷è»…¬ï—ÿ ¾Ú¯ÜÑʘ¤£›�ªÅœÒ¢ÚþÌä§Ø©þõ¢þÎ�¸ÖÜõàÛŤ¸·£� ¯¨ç¤§Ÿþ°‘žö§¯úнȬØíâÂŽá�ÄÝ›àØ(2&2130f719214f6eefd719bfd77d894561.woff2Ò� 8e650df38c92a1daeb2eef94ecb63720À˜"¸‹Úã¶Á‘Ö²æ…�­Ö¦±¾‹›Œ£—¨ß›“þÛÙîžżåÅßóÛ×÷Ûö­î²œƒ§½ßÎÁó†³ë§¿—Ê—“¾½·°ê¸¤ȨÌì�´Ï®ÏÇìðDzê�ÜÞ” ßŪ¥‘Ÿô»Ô¶Š× Ì™Ùâ—¯š‰Ù¿¬œ·Öùš¤³ñ¢©µÅÁü‰�ª¿¹„ã묶†‹·Ûžæ“¨Áè›ïÁµšš§ÿÅ÷¦¡�‰‚܇“˜ÌÖ㆓Åü¸̇Џ¥�Ïœ´žû·¸Øø—ÿôþà˸ÀóÄ­«·—€Õ×Ï (2&8e650df38c92a1daeb2eef94ecb63720.woff2Ò– f43f4fd83d242c0ad349cc21525034a6„«"Á·ýË�¦�Öòœ«¦â�óü¨ƬÈá¢ÖåÐÛäç˘Åû« £Ÿ©üÒ‡í¼òé¾ô¤оÚÌŸ½š¸Ú´²®ë°’µµŸ‘ëÃãßá‘ÆÓ³†“�Øܪ‹×¼¸º��·¥š¸ýòþöÀ� ìÄÚÒÛšÄÈû¾çÂÍ €À¦Û­¼¯ÆÕýŸÙè­¹¾Ý»öīΆ®Ý£ñœËóÁŸÔšœ¹À£÷­ʸ¿Ù¦š´š—¹„¿—½Ü�¨Ûž„Ÿžÿï�²ö°œ²´¬‰ç›¹þÜ´ÍÏÊÀΉùùöן×…ûÿþ´ö´¼—¿¸(2&f43f4fd83d242c0ad349cc21525034a6.woff2Òœ 61d0dc29a55966f56d5b2eeaab05455eè¨"Ç帺¤®�õ°í«¿� �Ùä˲À®·êÛíÑ—�ñÙœ´þ‹Î…Ÿíàì§ÓÅÅŸ�Úêýü¢ ýØœ¬£ÿÜæË ÜÄŸ’ àÁ©çÐ퇮ã�½œ†Ÿ¯ýÔ°å²ÁñΣç»ú—äâ²Ö�‚Ú—¢˜çá¤ìÓÚÿÍЮ˜þ‘Éø¼Ù¶Ç¥ï௪Øýþíâä¶Ýë×—Ú›¨•ÀÆ¿–×óžóœ’£×�áîЂØóõ ð¹™‰÷†’ ƒ¾½ÅãļÅùŸ°Ñ”­Ѱ¯žÍŇ·��îÞõšÛï®ùîÑñ´œ±�˜¨¨÷¬í£(2&61d0dc29a55966f56d5b2eeaab05455e.woff2Ò¢ d74c61c5bf1b5b946d24306e406ef12d„§"Í’ù‘¦ÑåÙâÀèÎ×Ë�œò©ÑÝš‚�ž—µ¥Ú‚Íú‚…§�Ñ‚‚Íø¸ž¼á£®‘Å» ³€ÖšýÙΟ¡šæ—„½µÛ±˜�²ÔŸá£¦ž�žßíÐÀ�¹¾ ‹˜ÏšŒ�¯…댤ýà¿�œÁ�†äˆ³Á±ªÄò�æóÒ·ó›—±‰¨›Úö�°£ñϱÎËÌ럙ž·˜�¿œÈ—Í�€‰ÁÃ�Фý¿ÎÄؽÈ©„‹žÚ´¨¾¸Æ�¯�Þ°‰Ç‚ÛêÚ–ÆæéîÚ�˜ˆ®¨©¯—‡³ý£¨±’¿Šž¡ÜáÙ©¹Á¢ÙÚÌœí (2&d74c61c5bf1b5b946d24306e406ef12d.woff2Ò«  b522f3810a2841ddd51fa55ebca68b4e˜¶"Ö˜êáÛàç™±‰•殇ºªÔî±ÿ�†í«‡Ü¸¹µýÔÅ»½Ëš©ŸÊÁ�ëù‚ö²ð̱÷³ßâÊ•€Œ™ãˆ�ÞìÊÆÐÂÃÑ›І¾�ãƒϲŸ¾Ø¿�·•�ôžé¯í²éÈÔ‚˜Ç¹œÜÎÒÅð²È—䥖Ÿ—ÎÛÍçßõùõƒ�ø�õ¬ò«±ªðà݉ç䆽ƒ Ò¥ðÄôÇá�ËËÓ�–Í‹ªȦõ¦¦¡† èžùÍ·¤”¬éÀÆÅªÚèñðÙûÛ—õߟ�„ê­ÌàÎÂÌ›…ÑëÄö¬ƒ¯¾®´Ä†­ˆÂº¸Ü©�ª�¸’£ð�(2&b522f3810a2841ddd51fa55ebca68b4e.woff2Ò±! f8e2e0a4f74408f3ddcae379e951464eÀÅ"Ü…·ÿ°öÌå©À�—ùù¾ÆÎÁפ�›Ÿ‰¬ÿ·¢Å¢Ø϶ÌÊðÍú©ì¢’„Î�™·È“ÒÇäÝ–¸Ƙä±ϸ‰áÆÈÅÚ‚Æ‘öᮘ§Ÿ¼Þšä¶ª‹§¨µ¬¤µõäɽɲ±Å˜ùíÇ¡ û´ò¤Å­¸äð�­È™³ð„‚¯÷ŸªæŸÁ�š´è†°²ÁÒÀ«úèË»³é»ˆ±ŒÌ÷Æ�Ï€¤¬Š¹ý™©ÉٗܨŸü¾Ù§ª·«ÞÕ¶¸‰ñ—”ÜÉ£÷½é¤¾·öéÑ¡ú·Þè î⚦½¿ôØÈÕÆðÀðÎÄ·¨˜ö¢®¡º²¤É�ž˜¸²ý(2&f8e2e0a4f74408f3ddcae379e951464e.woff2Ò·" 945e975b23ec7ef955abeebe038a2536¼Ø"â§œàšÊ­Õ¼äØ»ª£ÖŽñ¼ëÛ®�«ÜŨØÓÌÅê³®»¾žÉÃ¥ ¾‡£¡¼�¬ªÏ’Ä©�¯Ñ³…ôÝÈí¡¿�ô¯ŸÁË�±Ѳ‰Ÿ’¢ê¤ÞÝ»¡×íÙ¿ÌÙ�ŸÁšÙ�ȸ†ëé󪜛؊ÿ¿·ö Õ¬øÚ­áð‚ÕðÁ�öšº�¹¦Ëö¬¡ÇȲœê˜Ø€ç¿“±ÎŒô´½¿ŒÛ²¥á†üÿƳá»ÄÙ°ñ�þ·«»ôžÈ†Ìó±üÅæáäšÃКÅèň³±ñ€ôïΰÉÅð¸ážŸôô–ðüÍËÛÔ�»£¸‚¬Áí¡€�Ô�ÿ‚ý¢¹²ÆÚ(2&945e975b23ec7ef955abeebe038a2536.woff2Ò½# 07f74f1d225899b032a13e75cd785a07¸Ó"èÿ³ªž£¼¨ˆ�¬ÔÏ¥³û³ݶ÷ôÈŸŒ„­‘Òóɧߥ�Ðø·Í¿ Ö ÞЍÁ¡ëð¢�ÈÂÑÁ„¾ÿ¾Âåïá‘Ëõ¯òíéÁåãýӛ氄ÝòÀÛÛꬽý¤š‡±¯¾�¨Æíéï˯þ‚à§²ë̵çÖ×åõÙˆÙéžÕ‘ñËìˆÌ¿áˆÑ¢®ØÔ²ªÐ¯Ø¥¾Ò†»«ʪƒúˬÈר⻩�Ÿ„Õ­óÏÜêù§Š‚ ¤êê ½Ÿ­÷ÂÐø©ëšŠâ¨ƒñŸÊ®¶­“¡ò‡ñ²ž½÷éþ„ËÝ„ˆªšïÐÆ‚Žà²´¬íòÄ¢»çÊ‚‚ð™œ(2&07f74f1d225899b032a13e75cd785a07.woff2ÒÃ$ 8ef61e0254ff924267e7521118ee3965€Û"î޾Üéʤß¶ŽÒ‰£‘ñ˜œ™­ÉÑ»©êŸï£€¦Ѥ‘µ¶ƒéþ­å €¡Ì£½ÿ¹å¾ œËœÓĉ€ÊçÁÝ®ú�ð¾Ó¦û¼´ÎªÀ­¹ˆŸËÀåÝ…ªíƒÑÐöЃٺÈ⦱‡ÚݽМêéþôÏÊùÝ©¡Æê«ªÝ¦ª‹‰ºÖ©Ç¼ ‰î÷ñÇ„ê¬ØÅ†‚åòذ›œν¼¶…ó‹‘Åɾ¨øÈ䣸£õ—г�¼®áÚѤËÐþ€¬½¼ãïéÚò²�� ©™½¸²Ø¥¹¨¡°áªæÊ«ÅƒÝþœÖÅ‚Þ�œ�‘�õӷ禦Áî÷¨À«æª�òäá¹·äÕã(2&8ef61e0254ff924267e7521118ee3965.woff2ÒÉ% f10c91f227389582e5d7070dee263105´ñ"ôæÉ–©�…“ÐÆ¢¢ ÷ ì‰íåŠãÅ×ÎÉøò˜¾†þ±„Ûö„çÞ—Ïêô²½…Èœ¯²‰ÂÜÁæÚîÄèÝÇ­¡ª„¯ËѦ§Ͻ„õÜÏá¡�¥‹­·²ÔœÖ¤í©íÎÁØíõ³¹¬ä¯Ý毾‚ۈ榛Ŋ ’áÍ�«Ù¸ ’ÅŸŸŠÜ‘ÍŽæð´ã麚篶€¿×¦¾£¥±¬ê€’À³©‰®«Æà⇂ª†„ð�ÒÑÓµìËö®¦Ÿ¨³ñåƒõ­�¿¼ºýȲöàÕþÊ€óýª°�ªüíêÙÔ¶ôŠ–‘üÀ‚«•²¶„³ÑØÞÊÙè̳ƒ±´Ö®ã ŶÂᬚ¬…’Ù(2&f10c91f227389582e5d7070dee263105.woff2ÒÏ& 64f6391060d10ce8516f2f8d92fe36ffØî"ú ±ûÙ¤°ކ½Šôꃴ–�õý÷«‹Ð�̤ÆÍ… Á¢œ„óÈÃœŽ‚ÌÏÏóÅðë̺½©Û§ØÛ‚µ¸½œæâþòÊö£…¡ú©áԢϕ¼¹ÅÒ̰·žš¬ÅÑ®ž¨ó„¯ÏêØΡܳÒÃ’ÉÏÚ¨§úäښ夈ěۡŠôš¥ËºÆÌâØ„̬ÇÚ¤ªðÂÑÄÀ¨†ÞÌÐÕë�®“ŠàòèÀÊÈù…ʇù«ï…µÎÐåí¾Ö�ð¼û¹õ¡�ƒ‰§�ÂÊÚý¼‹¯¬ï—ñÏ ÿ¦éݫꥩ¦…£ÜŒ§¼öšâˆœðžÖõó´û‹Ô§–ÀÆ´’¯€€—Ñø¦îÛŒˆ¹ùªùÐŒì�(2&64f6391060d10ce8516f2f8d92fe36ff.woff2ÒÒ' 2d7828f8790196c8a0a272593983e7e1Ôê"ý·ÑÚøêܦœ®‰©ƨ»¨ÁÿùŒ€£Ô¢£Æœ¼¨†üåóÙëïÿ¥ù¢—¾À¬šÏ†³öŽé‹¨Ÿ€ƒ½ž˜ñ伤ù£Ÿ¯Ûý°©©»ïżþÅ›ºôëä‹èÁÑ�þŒ•¨¹³«¯´·±ýþ¥ØŸë»÷»Ì­èÂø«¹ëù£¢ÝÒí ¦ˆ£½óéЪ¡¬ý§ˆÁµ½ô×�‘œõ¢ï¢ÅñҦ硖¼Áª§ñ̰ðØÚ�øýíÄÔÿÆôÊ¡”þÌÂÛÓá¸ÉƘ´ùÛ£˜™ãÓ½ˆª®šž®ô̸®é‡LJ’Ú®ëâ²ê®…†ÌŰŸíÀÔ‘Àò‰Ýر”ÌÉó¤Â÷¢Ѧ¸¸îâ¬åÇ�÷�(2&2d7828f8790196c8a0a272593983e7e1.woff2ÒØ( e0cff2bf0455df5e0e2d28818829ad5fôþ"ƒ½Ú¸©’Ò¶£Òöÿ¼Æ÷šþ´Ü±ŸŽˆßÁÐÅî¢ÞÆ¡Ž�Èæª½� ·„³ÝðˆÐ¼Ù›‹Õ̷ׇª¾šÕÁо…¼ÇĔ『ڳšÄ¨Ñ¡Û¾©ø‘ïÏ� ÿ¢�ƒÕÂÇ�ƒ¤ªÙÏ—§¾”Á¸œ¾®¦€ѸÊŸà¸�¨“•¦Ù…Òñ�À©Œð�ŸÞ¹„Å¥ù÷áÕ¨¯‹ÕѦ˜ð¢ðÿ÷°î�Þýš�–ÐÁ­ì©Ÿ�ÿ£ªÆŸ¨Š«‚±ŒË‚†�蓾ڢàåì¬�ãÛʽƭ¼ÁÄžž‰âÎâƆ²ÜØá똇�»€á·üÙï¸ü²Ä’¦¯Îý®¤��©ºÑý­Ì¦ ¹óšµœ˜ì–œ´å²(2&e0cff2bf0455df5e0e2d28818829ad5f.woff2ÒÞ) 72816b969d8ad992acf9807cbafcb297àˆ"‰ÿ²�ˆ¦©Åÿ½äÕ��±ÉŠåªˆ¦…±ŠÄÑ£û‚ýÇÀ—›çâÅÊñŠ˜гðèÿîÆ�ʽí©ý«›©ØÜî –±Òýõ¨ŽÄŸ¿ÏŒÕùŸØÇÖ¥¤ Àžœ…ȸلߧ­®©§ø‹ËØÔ®¦¦ì澬©šÂ‚ý‚‰‡Íè·õ¶��К€þãý�’¸êôÚ¿¦ÀªОÄ£›Ùë—©Ë‘õ„ÁË£‰‡ϼ ´À­ÄÏù˜Œª¼Ë«çÐнΧÙÉ‹¨Óãõßù¦õ•Ïœ¬¹¤©œÖÌù”€ì“‚´æ­Ñ Ç­¯©šý«¥ªŸÿ�©²�–ºì³éβˆ¾ˬÚ­£Ÿ¯£ôŽñ¢øàþ»â北ɎŸ´¼µ�¨(2&72816b969d8ad992acf9807cbafcb297.woff2Òà* 4d9facde2be05ea10f21554f9f87909f�ð"‹„µŠúœ„–żèÄŸ‰«ÝØ„§ãÙùëß®°ªõÑß’ÓМߩ۲‰‚¢ѳퟀJ§¼±©÷ųĈ¬—£æÅÿž¨ÌìϹ¡›èï«¿šš¹äª«¥Ô¯©ï�ˆ²çë�•âä̆¦ÛØÒœÑÛÿౡϟÚÅ­®•§ù־íºÌš”º…þ­˜Ëñ£Ï⼆¼éŸßä“©¤ÜÕØ±‘éµ€ÇáäãšíŸŠÔì¾€«Ë¥çžíÞ¢¡ž©äáÖ½ή«†ëÛÐîùî䑚¿²¡�¯àÿɦîå³è•�çÆ³á�Ç€ܶĶÞʧÂ�ÛÛÜ‚Ù�¹ÇÞÓœ¹¸µ¡š¨ÍíËþŠ¤Û„ïÏÎÔêއœŸެ�ðä®(2&4d9facde2be05ea10f21554f9f87909f.woff2Òç+ db6410528d421cbd28e04ca8a489b9cc¤“"’ïת Å©öèóÀÄ©ïíÒßÉ¥…±¨Æ’…ö²¢§Á¶û›·¼ð£Ä۬៽‚¹ª¦çóö±…˜è©�¹†�ñ‡ê¾º�ÔȸðÉÎÔМ…ù�›¬ÞŸæî¨³Ý¡§©éžÚ‹öÉÖêÖÍ»ƒˆŸõ¢œ£ª�½ýø©êÑ…ž‡«ì þ¼Ì௮ â¢Ÿ›®³ÑŸÔÄñˆ�òºÇ¼ÁšÆšŠ«Ïš½ƒŸÆÆœ‰œÝ»¡—Š¾Ù¿€Ô½“¨—Ð놆Ӗ튿û¡ɉÔÝ¡ÿ§¸úŸ˜¿ѪÙͶý™¦üžïÄŠœÝ¢ Æ›·§†×ôë¨�›Ù‘˜€ŒñÍÞ¼ô§Ñ·îÑ©› ´˜¯¡å·¸€³µ¨��Üö¯°â‰¸Êçù‘(2&db6410528d421cbd28e04ca8a489b9cc.woff2Òí, e0a0937f6f910c5cad1351206bee22c1¼—"˜¦èýó Ÿø²�ÆÝÍÍÑÉ´öª¬ã�¡†µÃ̽¼¯ë¢èË€ßèåý®¯¼ÉãžÕÝäÛòœÁî߆熭…ûƒ­ª˜ ˜«‘¡¤ªÔ†××Å“îï¸þ§ï¤±Ñž¡À¾ìùáçÈàѪþÏ­‡«Ü¢ï®÷®‰þ˜¼–æ¼Ú§«ü´ëá°Ò¥ÙþØ–®ØÑÛÄ×¾’ïǬ�Ë·¿øäó§ËÂÉÔ¤¤£³—Å·³ÞÖ¹…èŸùóÛÑÏ•þÁáªè®¬´×ÞŒŠá�Èà®ÿ¸æµË¢¯�µ¨РÞ·šôÚ¡àÒöïÝöݾî§ÐÓâÞ¹…ø¡¾¦‹©á¬שœÀñÅ÷Âêë˛ڶ깊©ÇÝß…©±žÿÍœ¶—÷Ê´�¹‡â�(2&e0a0937f6f910c5cad1351206bee22c1.woff2Òð- c4c7f8e9b543d25b36c084cbfd36c2f4¸¢"›ÿϔΜ‘üÖ±Ôßÿ°°‡´׿òØÙ�á®�ÙÞœè³éÿެ�µÚýœõ×ï‚í÷ÒÕ‚÷÷‡¿½€¼´�å»Ó„†ùØè¹Äœ§ÌüàãÅ÷ˇø’ʓ٫ý­Ü¡ß•É“Þƈ�ŸÁò ¯ÏÆ£´±¹‘àøª¦¼Ûè¬�ñ¿äÀ嚵µÓ«Š�¬†í´±íó£‚�ÒÄÖµê›ãǬ¸´¸Á˜¡×ÌÛí§êØ‘ïÅá¿Îíµ†–‚ÂÅ…µëˆâŸ‡‹¶î�Ù£¡…„ÚÚ˜õ›ö„ÓùÁò©ŸñáÆêÀšð¼š ã“½“ØÇ…µœÿõ‘ŒØÿ“Ñ»š×¹¼¼‰£ÓÙŸÛŽº�õÜè½—— Ω·Ç€é×Ùò¬‹£Û…˜Ê§é(2&c4c7f8e9b543d25b36c084cbfd36c2f4.woff2Òö. 8564412afbd1eed6241bffcd68015529¬¯"¡šà驮͌�–ÁüįÞÛ៱‡½øóãÆœá¯á侚ª¾ó®ŸÆóîý£­ŸÔ�©‰ÏæÐÇ·É©øå�€’³ù´•£„©Ù¹„´¥ÝÑ‚©ÐÙùæÝШ»¹¶´úò¨¤’’ÙÔ¹†Ž˜‰ÅÑ›µÄÔéŸï­¨éÍ­öÁóÄâГ®•áô‘ì¯ÖΤþ½ÙÎãÞ♟µä­þˆ¥èáÌÓ²µÛ£†‡¯ªŽßÞ®÷´îúÌ¢�ªÃóºóŠƒãѸ…û¿½á¨Ã�Ä©®¹äʜ겱šëîÇŽëÁÇÅÈšþÙÏíÿ¤ÒðÓדíχÄÜ™áû†ÍƼ­¦Îù¸Ü‹ô´Ý·î¢˜­Èò•ÓçƒâýŽïõ«̹¥´…´ýáÂÒÒÈ„ãé§ŽÜó�(2&8564412afbd1eed6241bffcd68015529.woff2Òù/ ad71e4006ee291d68411a1de8fe2fc42ü "¤¡¦�‘½‡© øÙՋ謗Ÿ‹µí¹ú²¢�ƒ®ÒÉõ©Ĺ£Âœé°©ÙÅ ìó®½­ùþ‘¹íª´ÓÕÀË×ä­ÀØýý–õ÷ö¿æò—¾ñ­²Ðöƒ¡ì—™…Ç©£¯ç�‰×Ù×ѱðý‹Ã¥�…ÛÁ¸žé®þš  ôúÑñÑõˆã—¨öñÔ𷢯•¿ºî†˜¥õ„®‰Ð¸„朮ªïòçɣ䛟ƄŸ˜�²¬�¤Žþ·­ÒëÛòÅýð¶ëëú«¿Òö¬ÍÀ¶žæ¹å¢¦ˆÎ…ëìªÛ²ªšŽÎÅ麊̴´£ÛÙá‹éƒöïòñ÷´—·„­ý„ªÅ»ùȸ„Ÿš’ÃÜ™²•°”¹æÁšë�˜Õ²šÿˆßîßÎÆ¾Þ¼¨´›¸øÃ�(2&ad71e4006ee291d68411a1de8fe2fc42.woff2Òÿ0 7da4412e32affd5e7f00e47ac64d5a7bȯ"ª­Î™˜•©èЀ©ô¡ܨß�çŘ‡ï´µ½¼¾ž ìœå³‚ÉͪÏÌ¡ëªä¥µÞÒ³©ËÃзÇÛ‰èÞÎà‡è©Ìÿ—ŸÙè…³�œÊë“´ˆŸÓ…ƀ̠ܣæÍîãß©þè¿ï‡éîŬÃʼú¥§ÃÜ«üª�ÕÚÏñ¨�Ü̪ƒ³ºÝ¥¼•ù±Ù­Ó…­á×§ó…︹ÆÛª¬�†ºÜ¥ïœ†Ÿì´òºž›˜¹ª¼ŠÔŒº‡øŸÕñášñÙ„êЪ Å‰¶ÿ—¬êÊýõ²¬˜¢Ñ�±êǶ襒ߞ傊Ÿ…ݵ询ôŃ«™ö±ù䦮…›ƒ“ËüÞµ¼¥Ÿ·—ÿ´†¨�ÿã«’Ž…Ð™ëÛª·…¿ŽÀ©ÞÈã¢ü†ÎŽʳâéºç›¾·å(2&7da4412e32affd5e7f00e47ac64d5a7b.woff2Ò‚1 113ff8f5a338050fa510c7eb173d4426°¯"­æ©¸†ÿ¸÷ýËÁ˜�Ñ瓇‚Ç埤¹ƒ×©ì觃�IJÈ‚Ÿë­Ù¨©•̺ƒ¿Ûàù°ØÉÇéå€Õ�Á«þî©Ù�ÚèÞÞ¤˜€È±Ú“Û¤‘Öœ‹…­ê¸µ̼®ÛèŸÖÊÄåÒäúÀù­Κ¶½¨ãÛ�ðžæ‰±¢ýâ̂、딠̤¡Ëý—µªñö�³–Çÿ©�‚ÅÆ¸¡ßÜ¯îæšÄÅꪮçöžþ�‹½«áÊšô®”÷Á‡¬Éó‘ŒÄ¨þ׎‡ÉÚ²›à鬯ÀÓ‰•¦š©°ïìžÞÙÉÄ‹íþÌ’½׳Ú›™¢•æíÅŸ¹÷ò¯‚ºðÿ´Û¬�ì“ȵ„ÞØü©ë�À笡úñ�³�³â©ç—§ÛÔ…úÞ³¡ÿ­ŸËÁ݆×áåú¶ìÀ(2&113ff8f5a338050fa510c7eb173d4426.woff2Ò…2 bf921c86b82f4385d1affda530883f1b̬"°…ÙÍÜçªñ­¿‰üàϱÞå�–³™ÚÂ牆Ҝ»®“¶‚ÈéˆØž¥ÜÙ—’‘ÂÆ ï“³Щ§ß‚‘�³ÐØ£¦� š˜’õ‘ŠïùöØù±–¹Ô혬Ÿ€¬¢ª¥—­¨¨Åθíæª’«©·ô柬Õì°¢�߉Ž©¿íî´ПÍ®íÁ›¯í¼¾¼ôœ©Éà—ÙÀÃè ìÒÚªÈç¡úõáÿ¦·½£©Ã±ˆýÅÞ¦ßÓ‡�¸Œ‹�Û¨áߨî®Éøï¸¯À�Û½¸Û™¿·ÉóÍ幚ÜÖª´©е…‘Ðñ£ÇŒÙ¯¿¬�èãÒژᗸÁ�½æâþï²ÿ‰ª§Ýû¨ƒ“Ö¢±¨ðÁ¹ÿ�©¸Ï㳓±ã©†Ñ‡µÅÛâ¶ñ§§˜ïÙŸ˜ÃÀ¹‹(2&bf921c86b82f4385d1affda530883f1b.woff2Ò‹3 855125e0871ab245f4c9dd756a68d188äÂ"¶õöÖ§¾Ðܼý©¬Ç˜Ÿ—†ïéÛýàöä©„‘š×µÑŽÆô ˆÓ•Žãì ¯®§ļÕ ±â¥Êè‘–áîËïËºŠ¡µ©´«ž�æ¿õɸœþ’©Ïö�éä•Û—æüÛ¬Ÿ™¬Å«³¼ˆ¬�®éç®ÙúÆüðÆ÷´©Þ»¬©î°Ç�‚ê´ÜâļÕ±‚ºÎÿÞëÀ¢ú´¯¼ùÒ¤©œ¿ɵÓ÷Ãᩪ©�Ç�¦üÎÊ�÷䆾𶬑핷ê†ΩôØ‚™¡¡æÛÙŠ©¾‘°ìÁà‰¿´÷Øšûªùô×¢ŽÃ¥…¾ªë«ÔÌÞ…¶Ì™êºö�¨ÊŠݹÅ�©æ°‹±Ì¾›ÞÛó®…ÀñÿéØ¥èŒ¹‘¬¼ùŒÿ†®á÷þ°É¢ñ‘í¯ ªÿ½ð«¸Êݽä�(2&855125e0871ab245f4c9dd756a68d188.woff2ÒŽ4 94ee2d6d7a8f638656c782e65ee82387Ì¿"¹¥§Þ†ÕèØÏÚòµë•ÂèŠæäè±÷«Ö쪅•Þ�­¨¿µ àÙغá««¹·¹ÞÉ¬б”©ï¦ö´­ÒØÁÙÖú¼ƃý§°þýîÐ¥„Í‹¾Ôëíóòâ®èŸ¬Šå–ç¦À•œ´ÝÂþîéîÁÜìæÌ«ÊðªïªÞÏ«„Æ©üœ©³¹ãñ©‚’«œ†ö’³â¬Ù¬¬è¼£À†þ�öÆÒ«ºêãµ®�ŽíÖËãÀš©¥ð©¨¯†¥³Ž©¥êæ«—ŽÔÚ’˜«Ÿ³�÷¾Ï篩ÖÛ䞷繬´º•Ÿ²šÈÄŽžÎËý¶™€¢£÷›·ð˜â”ÿª®„€¼©»Á冑ªžô�¡…‡÷Λ£†ª×Å´ñ‹³¨è�†ÜùæÃžµ˜Ž“­µÀ¡Å¢ªÆ‚ŽÛÏàüƒ’±¹Í½Ò(2&94ee2d6d7a8f638656c782e65ee82387.woff2Ò‘5 eda046f596cbe0384d08c1a83af678f0ˆÎ"¼Íä’©¾æ”ÓõÇϵԶªüø«÷ªÞš¼µ©ÓšûÆÅ¡‹¢ìáý¤‘ª¢¢ž¢þƒ³«Ä�‹€±¬ öôéìªóΤˆ ‡‚»ÜÚ©¡Ò üžâýïÉ�¬ªÌËê¢ü‚Äþ—¶òêßòÅдÁ¹—”Ë¿ʺöý•¡Ö¿©÷†©Ì̫·曼¾½’‡Ñ“®¨Ë�¥½Ê¬¯‰¡¬î‚øÞßÌÀ�ÀƒÔþ�µ½ºÉý½ùÿ¿›�¡�Û “ŽÊâœ�û®ùÝ®¥¯Á�¾µÉü¬пîÜ�Ÿ³ùÍïÄ©è®É©Âí—ª–¬ŸÝߟѿݚƒ¶Ýʸ·Æ©Ó®éǸ셹Ý÷¦ØŽ­ÃÚ™þÚ±·ªøìéÏÎ�Âß·Ó¨¹¡©ùí«¹Ø—é—äŸÎÐÁ •¸�ÑëÒóšÒ±(2&eda046f596cbe0384d08c1a83af678f0.woff2Ò—6 0411a6a08f59518e6c110b629871a0ddôÁ"ƒªÉ­†Àüë¾¥â뽫¹®™Ìùêí�ÚžÈåªìù³ ¨ç©�˜ó­™©æêà†‘´¶’Ï¿ÚÁÉë‰ÞרÁÌÆÁ€ð„³ŸÄÁ¹µÌÈÅ•�ñŒµÚæ¼ù�Û©›Æ� �ßÉß…©ܬ›©óŸìñ·ŽŽ®¼ðÿ€”À­ðŒ˜•÷öœê¶·ŠÅùžÆè²ôÁ€óÙÛÒ©·ÏÝÒþ«»ŽÖ«ìÛ©¯Üïס¤�测«ɪï²˵æÞªŒøΠɼ™¹±œ×Áø“·˜ƒÙ±žÛ†€φ‘Ü̘°èΟÌýí¯á¼Åš†ª®º£ñÞçË‚âÝÖ‰‰ž—³é€Ô¼¨ªå‰Ѽ�ð颰Ϙ¯Ë…‘ù휌 Ÿåꟙ»»ð˺ÂÝúˆÒ…­ÏÊÿÀ´Ó±š¬Ÿ«ˆ¡ЋƒŽ‚À£ôµ�(2&0411a6a08f59518e6c110b629871a0dd.woff2Òš7 a6c5141f5329dc0076c013a1e58b66a9ÈÒ"ÅÒ—‡Žœ¹�®Œï�ÙŦ€„̼øŸǺÒ�èØ°ð£¯�ªɬïžÿÀýõ´ìÉò™âË—àß‚�û§…¯©˜�Δô�…³ïúÁ¸ˆÅíĪˆîû ¿äà�”á­¯άð�ØÉ�ª­†ŒÁ”«‘˜˹ª³ýÀ믓’óªý²ÈΛĠ¼‹ˆÁ’«Ó­®Ä…ú›òÎè«ÉçÌ©†´À¶øÀ„þ”²מ÷²÷…Ü¡¾¾Œ±‡”²˜˜Ý§©›’„ ¦±®Ú¶ áµ¹�“ñéá´£ŽÐ�§ä颞«Š¿À¾êÈÈÈê㪨�ãó”ÈñíÍë�ÈÉœÞÂý½ë�µšÁƒþÿ©زñž—¡��˜ìš£ÎÜ‘ï®Çè�£ðâ¡§ðß¹Û›�œòž õ桉œ��®Äþ÷�µ͹œï¡Λ­ Å—(2&a6c5141f5329dc0076c013a1e58b66a9.woff2Ò�8 a3c45be5a3d98ece81ff14c5b8bc42cdØÃ"È„¢´’†¬ˆþ﫞³¤ÙÄ›�÷Õ…•õÔÒô²Ĺô‚„®•˜ÍǹœáþÝž”±Ê“Ñ÷¢¹¦û¾³תÕª¬�ˆõÖÇ™îÑ�Û——©ïý£—þî¾µì«Üòâªù­Ü…í®Ð�ﵡÈß§ËœΓñƉñ˨Øþچ뼿¹î·êÄ–âÞåŹÄ«ä«ÀÉÂëß«‰±§�†¢´ª›¿Ñ«ŸªÚŸ¥ÏÑë—ÇÔê«ìŒÆ›§µ߬ÞàûÀ”ÛТª¼ï䜩˜ˆ¶¹¥þÜÍ“�ä—Õ¯€±¸½àŽÊ�Ñ ©§„›”Ù±ë�¦ÿǯ�ª—°ª”„÷¨ÿ‰ç¼‘ƒ�¤·€‘¯Æ‘¸›Ѷ²¹ëýݯ­¬¢„¢¼¯�¡¨Ùޏë�¦ÁÐ੸ÿˆ¹õ­›ªë�–½­¥Ó¡œµ²ùÒ¹Ó‚ó¼ܹ(2&a3c45be5a3d98ece81ff14c5b8bc42cd.woff2Ò 9 74fe9c399600ed636c4bbe26fa96aa56¼Ò"˶�ë­´†ä¹Æ�–Œïì¾ýó¡™í°­¬þ�³ª˜íÆÊØœñͰî„ÑîÍåë…æ÷�މª£Ùð—×Ì™«‚½‡–ÇœГþª½œˆ¡ì±çã²´¥æÆÖÒª”†�Ìíšðåó¶ç©›„Ԭ׼£�… ¹Úñ‚’ª°ýÆ�äŠݳ°¡£ý£¬¹©é�õ´ñ¶ÿœ·¹¼ˆ�ÒãÚÓªý Éš”›òŠܤ‚¡á�¤ØÐæÛ¼þŸË©Ô«Œ†¡Ø—â˜çÐÿê¥ ËÆÞ�Ò¿ƒëïÚˆŽ›Óì —ôÖ‡³¹�§®œü§ñ뉙‘çÕ´šè´ë³Ç¤©§¯µØà½ù›�ÀÄDzØá©ïß¾…ˆö†º•©ý‡¼­¥¡Ý�×­—…Ù¯ªø§ÍÉÐݪª�‰ŽÁ‹³öŇƒ¿¹«ùÔ¿ÅîªÑœ– ”ª¨Ô(2&74fe9c399600ed636c4bbe26fa96aa56.woff2Ò¦: 49045505c06c3073a986a45abf13c0d9°Ý"Ñý»öÇß½¾”£©ïºü£ëÀ‡ÇÁ¤Ùç†Ùñ¬ÆÇ’€Ì©ÅÙ�ëóˆ—­ß݉¿º©’ס‰Ç“ܽ¹ßÊ¢¡¯²ÈçÑß•³г�­ÿ똹©Ø±†Óݯâ»ÅɘÕʸDzñÛ®ÁÈÝÛϹåíˆí‘¹¢±„åæÿð©�Òï�ú¸›¡¹½¬æʉ›µàÚàÐä�©¼ãëí�̬õÎܪü®öªÅâ‹Ïå“Â×½¤ÈŽ…Œ¨…¬Ä®£–ëþ¿·µŒÚ䍿†Þ“¡˜£àãŽÌù¬ šñÙœØë˜ðÀýâŒûŠ“�Ô�§ªÀÐÌŽ©ŸÂѯԈÆëžó»§ºщÓ‹Õ¹×虼”³ú˜äëÇ¡“×ŵ󞯠뫕ą­ó�Šè¤¬£ë±�¯©¿©‡ñ£©ý×󟱫¦ ê½™¡á­�¦æÄ»��©Ç£(2&49045505c06c3073a986a45abf13c0d9.woff2Ò©; dc224dd6cb253c68a97e682e17ce21fb¸Ý"Ô¨ý Û ½†Ýº£€áÊá„�ˆ¿€˜±ª¢ìžÏ´í°š÷Ìó«›Ëи¦—ç´ã…»ŠúýŒÜÁèŸ�õ§€±Ñô»ƒ§ÿ³�æýŠ•¥ŽæÒÂÀ宿©óÿÒé³Ïíª½Ôҵʴ½ÈÒ©×›ë£á‡Á÷ûµþ‘²ÐÞìü‰–Øì¶�«’ðسý�›þ캹ƢþõÂæ¨¸÷éœÎÓ‡Ó‚„ò«ô�”˜¢¹¹®Œ´ËÞÉ�âµ¹‡¹‰´“�›ñŠ…ê¿‡˜¤öê¯ð¥Ó¨ãŸœ® ÂÄ�·áÖ×Úö§žðÑôñÏÝÙ÷±�•ö‡°‘³é†˜ÓЩ€¡ƒºñþèë¡¢¼©Õ´¯õ�„ÕŽ…‰¬ˆ¤ű€³¾½¯³…�ÒæЬžöì²�©Ðð´ÒÔÙÌðؼǹǘÙå¡Ä¨‡ɪ‡Ÿìƒ‡×�„ͽ®‹­î(2&dc224dd6cb253c68a97e682e17ce21fb.woff2Ò¬< d8292bf359df9c0fb958c31104872bd2°ì"×ûžõ«èâ´‡´�¤³�ìâÉÏ�𜊿�ŸÐý˜Ø¶µª‡ÐçŸþÒ€§—¬¹Û�÷а˜¾Ä¸É¬¼Ò­§¬Ô­Í©ˆµŠÇ•†û¬ï©ÁÏÉ„Œ¿ÖðÅþǶý¢¦©·»¿ÿøžµ›ø†œ‹Ÿœ³çÖª¸ŠÁÓ›¹¥ë¬ð³ª­¾éÍʪîÙˆ®àÛÒϧ±™ìç닟ġùãëÙþ¡Þ¼‡©ª×Èë‘ꯜåÿâ´—ÕýÏЪê‡�»í‚Ý«Ф�öå�¢Ä„¬ج…É»¸¶ššŸ¢Žž±ø¿ü�•¬æõ�âàǺ¡Ù¹Áª¹ôµ¿Ì—¹­¨„Ô©ߦ¥žÌ…Ú¼ª÷�þ‡ªîŽß—„ÚÍÚè—�å÷ð䬲¯С¤Òëµ²ž²‚�×׬±Ý¬÷�§½©�©ùÀ»¶°ä¦ðÁ‰Ý�›±™’ʹ´¡Ö©ëªÚ‚(2&d8292bf359df9c0fb958c31104872bd2.woff2Ò¯= 4c2aef7ccdf062b7216a8bf9fccc7838°ê"Ú­©š±‚¹±ÁÒåöžÈ €°Ôýª£Ü® ë‹Ò¸å�ÍޞݩŸï膩…¡ ½Ýß‘²ÆŸÅ¾Í¦º«…ц�‹¸‡¤Ö€Ð«Ëު󫨼ø› µæŸ ˜ŸøüÑø´¼Ç¨ ÛÔ’å‹¡§€üŽûŒÙ©ë¡ÔØî—øÒ’¬ûýÁ§ʃ�©ç‚é«؇—¬Ý¿ÐÔÕÿ‹¬…œ¨õ켋¾¾Ô¾¦’¨ÃË�¾ªŸü®©�¬¬Íù¢µ�Øè§Ó¢çËý¨�†©£¹ð‡ßþ�¬Ú¯×ý¯­ÿ‹„öˆ‘¯ÿ¼�ŒÍ÷ª—‰ŠŽà棶³ãþ½Üœƪ©Àý´ÆËµß�¡…¯˜ÁÀùÄ„³‡Ï„¿›â �¹�£î¡½Øޤ´…‘«‰±€Ì¦÷£¢úȲ©½šµþʧ›ªÿéÛ½³ì��Ä ¡’Œ¯ŸÒÆ¢©ðôÐÙšé®(2&4c2aef7ccdf062b7216a8bf9fccc7838.woff2Ò²> f16c7d5081f29979ef8fc5cc75fcb4c0€ë"Ý̃÷Íý›ë܉Óç½�挩Ϫ¦þ�×çšä¯­Á±þþ�­¹é©žæšîÈ©¥˜œ€Õ±Õ²®²°µÇœþýǼž¹»ä´Žñªß©œ‡×òÞßÔª‹ „˜¶˜ò¢º†—Էü‡ºÉâÏ�¬œð“¯ðË«³î�å«Ï¡¯¯¼¿Ó¶ª©‰Ÿ¼²ì›ü©صÊ�††èî„ÀÁœ�˜Œ¬®ûñµÇö°åðô÷©òö©»áÕ˜ëó¥ö‘ÛÊ©�¼ñ«È¥¾„ã¸Îåө묎éÕ©¥·ø˜ŽŸ‘›‡¿ÌÆÕó܆ŽÂ†õòª—˜”œÁ…â¢Ô¨ÀæªÙ¸±¹²¶ˆƒê©�£þ橹úŒíˆîä“òô…µ—�±É‘ó—ŒÐ‡ØÙªÞ©ðÏ¢‘”¼åîä…Ôµ¸ö†Øåž§÷뛋�¥¹ÌÄòåëÐ�Ýý©„ט‚§ÚŸ�áý(2&f16c7d5081f29979ef8fc5cc75fcb4c0.woff2Òµ? aad71861a2c29565e12cc991817bd952Üù"໩«ÚÔì‡ÚÛºÔñ×�«�Àš¦î–¨÷èï¯Úꣳѱó˜̵—ðó©îÒŸŠó×�ªž°”ëш¶þÔ‡³ëÀ¾Í�Ùñø°…‹îÿ¢æ™Àº‰ѽ—³ÁµŒ£�ùɶÒË厗þò�ø¨…£˜…��®®€Ó�ˆØ…‘ Η¬¥ÖŠŠÎá¤î�¹Òã²Þ¢‘¼öˆ߇Ͷ‘½øˆ™Ø–˜…¯ú夲´¶¿ìÔ²é­ƼüÔÜšôÞ“µ�þù—�ÀÓÎù„«Õ¸µšØò¨‚×ìïªö蟛ý¦øŽçÊ…ížš¦¢¾Ò¨‘þÖ—…á§¹¿ª½ÄŸ¶ÚÀ·‘•ì§ÏšÚÕÐέ²�À¤Ó—ŒìçªÑ©Ó¹à‰Ö¨Þ›â‘ã‘Ò¯éÆ®¹˜ãݺ°ìت’‚é‚âöª€”ŸÝä�¬ô�—Äé�ﻫÁÚˆµãñýø�«�ù×�³(2&aad71861a2c29565e12cc991817bd952.woff2Ò»@ 9da1db1d667756102414f970fadde7d9ÌŽ"æŸýþ«ιèýœùÀ‡©Ù¯¾þä…�ü°öÙÈŠ¹¾Çüá…’Áô½²¨�«ã¦Öä®ö´„þþùÑ·¼¡ñ•ªÌ«ªµ…¿�ê…÷§¡õªÁ¼áÌ…ØѶê÷›Àôø…ò½‰åç«©àýÚ“¹¼«Ûƒ±Ì÷ªª–�霭©ÍšôºשÔÜÿӯ𿡲íçžœ÷‰‰§þù¢ž¬¬ëÁƒ¦ƒ÷ÙŒ‰úÙ솟±ÄËÖÙŪ“�–£¼±€û’™¾µÊ�á€Â§Œ�Ø­å³óáÐÁù“³þ¢ÊÓû嬪°ÿ—¾ȼËê뵜ˆ�°ºéƒÀ¤ºß­ÚîÖëø‡�²­¿—ì·ª‰®®ŽŸðµ˜¶ß•ÎíÈõžü—«öÒ½ñ€³½Àµ¾ö€¿Αà­ýŽà‚²³‚¤å©é½¼À²Ù©Œº›û…ÊÅ�¬‹¹†Ä¥ýÏ© ¹±ö½ï‹½‹ø¿¤´Ç(2&9da1db1d667756102414f970fadde7d9.woff2Ò¾A 3cdb82c451a1912f7732f32e881e52ec”‹"铿µ�òÓ󓑈Àìê�¬©îŒŽÇ£¹Ý­å‘ºœ³†èùê¼÷函¤…³¤¦ÂᵃÁ¡þ¡¹â¹Á²š±¥¸ÃÏê�媔‚é΢¥�±ŸçûŽö¨¦ÈÓÜôþ±ŽÜŸ†¹¤íèªíÓêªâ½³Ú˜ÏŸ…ϯ–Üîö³×ç±»Ý粘ԣ£á¢¬®žùË“¶‡°®�Ó¤‹ùµÛÍ‹ëÓŸä�¹Öþžø¯ª®š†¬¾›žµì£µÛêî¦þžؾª¾¡àÓ˜˜ëºíµÞŠ´å´¯Àê×ÝøâŠ’«£Û¶¼ÿ–€«’ó¾ß„¶Ÿˆ†�é¨ä±Ó�ˆë®«¼ü÷–øð‘کà«ÀÔ¬ûöþ½Ä�òýžº¾ŽÍíí†ɽÇùºµŒ¿޹óâÕ¼±£àé­ ¶Þ €ìªѾ›×š¹Ï›ñ�›È£þã¼ì¡ͬÿ�‚þ¾«ïå©ý�Ð(2&3cdb82c451a1912f7732f32e881e52ec.woff2ÒÁB 237df329e1862df9832b864299e88eea°”"ìÞ�‚ôİàµÈ”Š�é¼��è¼�ø‚ƒ¶‚·¶´Ì€ïüÚè„âò»ü¼Œˆ…øù€·„î˼êΩ©�½½¼ìê¦Çð±æ‘†¬‚Û�”™ó��å‹©‘…܈†Â“ª¼�Ìöˆ¶º�Û†ý¯òÞÜ—د‘¾Í«´‰¶¼ŒþŒßÒ³ŒŠÃî‡þƒÑÖ¾�¾„…ˆ­”¹êðä¿æë·ÖÖ¡¯£·¾ã›µÏÄ¿äÉÖ¥Ãë¹ñ³˜úžØ©¯®¡ý¬õ³õë²ã‰¹à±›õ´¯þøÇŠö÷úÖ›¯„½�Àø³„¢ùú´ì¬¼¬ÞÇ݇öÍìμÌ®ô冈–¶Þ’¥ñßµÔ¹­£¬�‡³ÿŒ¥ìÝÁŠÀ±¼­�›ì±¼‚¿ÆØž‚…ìÉ¿�ÿÇîÞé½¹½¹è��…ôžÔãþ ƒôÛ¡©‡Þ¼‰ßÔÓ¼‘¿È›†²¯Ï“ä¢ÿä´¹„·¦¦Ù¨(2&237df329e1862df9832b864299e88eea.woff2ÒÄC ad29e7cc06265fceb8a3b76a5b4bccc2 ø"“âŠìÍŒµ¹ñ¼´©³­‹þ·Ý¥²Þ¤ŽÚÝÀ¹‰«˜í¡ý„¢ÆëÊú¦‚£ÃÄ”ª­õ©ªÖ“‚¥ªØ’µÙ©�ÁðŽÔ—È…å÷ˆ´µï�ªŠÐÃ컄‚Ÿ†ô¡æÑ��êË„Éʇî›�”ŸΪ­�ÿ„ò�’ëç¬Ä�˜ª‹°€½×É“êµ�·©´Êäа’õ£·�–ª’¯£¨å½ÅŸäŽ©é›Á�Ÿœ�¡±‚˜»òÅÈÜØ²ÝÉ«ý†ü«€µ±á—�¥€ü‘ë©›‡ �¨÷ùŠÕŸÌÎä·øô鲄„ŠóƒæÁý«Üè½ìæÎðdžº¼…™ÈùÎÇߪïæ —£§èþØ�й¾º£„µµ¢¸°�‘Ÿóåˆ� ¿ƒÌÄëŒÈÈÚô¯‚²ù½΢åÔ¶œ’þ€õù‡¿ª¹ð‡†ù¥¶¡¾¨­„í¿�þìà­ì£œ¸©¤ò–µê½Ú„¸ª(2&ad29e7cc06265fceb8a3b76a5b4bccc2.woff2ÒÇD 4e1c75d77f0fc20bc43f8bcaf09f7174ä�"ò¹æáª”�‡‰�£¯¶î¸¨Ïµîº¡‹ÈÛ»¡„ñÒéªþ¼¥ÄÌ“½¬Þ©¤¯òÇÀœµ€ѵ�ø¼•¹Ú÷μ¹ªªÓòô„û½ü½ƹœ¸¤Äå°ÿ©üŒØ ÄШœò�¢£–Ɇ­¨‹ °Àá÷ž¾ª³þÐÉÕ©�¬�¥‰ÊŒœ¼±úŠо°…Ü©‹Ä¼›×Ò©€ˆ«é¦’¹±µ­¤ª¾Íæ�¶«¯‹å渵£ÊÐ�äÃÆé�Žªˆ‰°‡ö«¶©žª�îØöƒ¬¤Þù©³Ð¢€Â�ÐÙ‘Õùž¹ŠÔÆ¯Šª® ƒ�”¯íð­Þ¸æÛ¼”©¢ïžòµ«à…عŠ™˜™ê×ö®®ÊŠæ²¶€�Í€¯êÃ娀å¶ì�çÀމ«ªô¬•Ø¿œÒ‘䪞Ž�¹´È�÷Ê ңŽ×ð�¥²þŽÕ“�Š® Õ¦–Ž¥Çš½¾×ù´½²¼òñÎêèå(2&4e1c75d77f0fc20bc43f8bcaf09f7174.woff2Ò�E 145da285ad74cba8ee79d65fd09deb5c°Ê"¬þŽ·‹æ’¥±ЉŽ‚õ×Éñ˹¼ªÃÖᾟµàÝçïÂ�͉º¹³š È¶§Õ¢¼ª‹��ïë“Õšô©íèÝ­Ççò†¿©Ž¦¹¼†ô¢úâÝÏý‚Î�Œ¬¢¬ö—å‡ð‰ÙÏÆòÅöÙˆÓ�ȶž�‰ð‘£‡¢ˆ¹‘ðççÏ¢“¥™°„ÉÆÞ�„ÓŽàã¢î¢÷¾Ç–¤ÁåöÅ£ªîŸ»¼®˜ó©ľªƒܵµ£ƒ¬œî†ƒìˆ½°ë¬œÞÚšóÜ“”€Ù‚¹¢°¹œ�™ÉÙ�(2&145da285ad74cba8ee79d65fd09deb5c.woff2Ò•F 5ef6d1e716b84bb97ad1ffd59e6c5242ÐP"B²äø¶‹®üìíÒ‹ ÂÌ�¸ƒÎ™ æ·Õ¥þçÔµ†Ÿ² “û‡„Π¢êÉÃÜ«(2&5ef6d1e716b84bb97ad1ffd59e6c5242.woff2Ò§G 9331d6fdf8931f6d10de449b4a25a043ð]"T‘ ßÔ®ôøÊ٥Ǚ‹«ç¢­”öêÞ½“«�“÷ª̰û­ž¿¦œÀ¦ª•ˆ”Úɇ¸ÐúñúÓ�·¾¡â(2&9331d6fdf8931f6d10de449b4a25a043.woff2Ò³H e0e6acb1b5b81067aec1914f4ad42b17Èq"`á©Ϫ™Ôê™´°Š—ޏ„¡Þ°ÄúËÓÒÿ�ÑŠÖÕŒ¿•£Ô®«øÍ�•Ö•ºñ²ûõ¤©ÿ…°Ø–ßß¼½³¡£Øé¢(2&e0e6acb1b5b81067aec1914f4ad42b17.woff2Ò½I 4ad813d85d01b7576e8b72fa8acd8103ä‚"i«¼ˆ¸Ë É––Ýù¡šúÏ‘ƒž€«°éÀ÷½ü¨±²Ÿ±°Éž˜°ǤÀ“ËÂÚûúØÔ ˜”£ò”×´°Äè½»™в“—÷–(2&4ad813d85d01b7576e8b72fa8acd8103.woff2ÒÆJ 75a907161dba8ee1c1299d5583a9d5ed̃"rø Ê�©¿ßãž•›­™¡ñÎæú¬ˆÁÙ¬™–®÷€ª¢·ËúƒÄ÷ª­‹“¬Ü²•ãí¶¼¦ŸõÒã½ç¶ÄŒý­ûð–Àå÷ÖÍôã­ƒ¥ÿ¯(2&75a907161dba8ee1c1299d5583a9d5ed.woff2ÒÌK e83f6d2cb1b816a240a41f1cd95805a2˜“"x¢Õæ”Ò¢„ú世“¡Ç°úÕ”Ôüù¼Í�­°ë·�°±ôï°ÂìÆ�é þ¼€—⥣ÿߌË•´­ŽòÔ¦…ôݑ勨­ï‡±ãé·ñ”ӱ⭭ä(2&e83f6d2cb1b816a240a41f1cd95805a2.woff2ÒÖL 7d8212017d1d75160b899ae137d8566d�›"�ì¸�® ²ˆ°›Ü…°Å¡¡™ ™±”¬³òæµ¾˜®Þ¥Ê áú÷¯‰¢Š­à ˆ„ÿÝÂú·¥¡ø›–‚ÔÇÉÝ‹ò€£ Ü‘“”€¥£üèæͰÞ”€ú¾ä’®Š¡(2&7d8212017d1d75160b899ae137d8566d.woff2ÒÙM 105724e09aa05e23fb59788bdbcdf564ìœ"„ðê�Ⱥ“èû„¦‰„ý¬«Ýéô�úÔÉ´”ëêáíÙ­¸žýÔžü™…ú¨™èƒÛ�›Â„¢Ž­�œÛÇ•žüü‰ž˜²û¦é”É÷·¡Ý£õ¦ž�—”œûÊÉÕúò­(2&105724e09aa05e23fb59788bdbcdf564.woff2ÒßN de88f7d50f355e91a3462c71641471a1¤§"ŠÊûîÇ¢Þª“ý€ôûôÉË£®§·™Õ ã¼µ¡¹ÔȧÜ­æ‚«½»°ë¼‘¥ö·…ÿ û¯¦Ö­Û±òÖöõ¼ñîÂÇ•Æö²¢‡ŒИ§™ÛŒ¥¶ذʰõ¥ú �¿««¸™(2&de88f7d50f355e91a3462c71641471a1.woff2ÒåO a8f96b7498537fc50bf2bdebe89358c3Ø­"�äø¢¦øÖ¹úß�µ¨Ž”†°‘¿ûæ«‚¯¦¾ü¿™¸ÞÐÖÜ®ˉà½Ý�­Œ‚”±«¤•Ÿ¢‰¥ðþ®üȮӪ‡¥ô ç°ɈÀäó¬äí²ÄÎæ±­ã™¨›Š£ΫéûªžÁÉò±(2&a8f96b7498537fc50bf2bdebe89358c3.woff2ÒèP 1ea51fe7359806cd126a8ddef7dcb465ô­"“¨²ª”º”ì·Þ±€¢ÛÞìɯžâ”«™Û¤ü¥”Õø“ã´™ˆ‚‚–®ÓÚ¶‹¸ø•ýà®·âê›úø¬áÖËÔŠ„Þ€þ¦“Ô®óѨʾâ½Ùâ᧘×ç·×Ê™úáÁÚÇý™�ʹ¿(2&1ea51fe7359806cd126a8ddef7dcb465.woff2ÒîQ 9ba8b53929fe5e8c760e365e2588715e¤Ã"™÷ÃäÞÞü�ÝȾ“®‚�÷ à™®·èÛƸ왼™—ºá¾Ý¥²ÞÉ ¦ò‚°ð¬ö¹ãàº×ÌøÕ³Û³Ÿ”�°‰«ë‚ø‚î²ï–™òóü”žÅÝÔÞÒûþù¼ÝÞ ý¼—½›ž”úç²þ•Òµ(2&9ba8b53929fe5e8c760e365e2588715e.woff2ÒñR 22a3d85475c7bd12d35afd152941807b�Á"œ •�–ÒãÃßãû�Éë¶Èãêü¶ÃÕòï¹ÄÑá›™›çùÅ´ϰ°•ø¬‘â²ÊÒòúó‚™´«Íó½ÉâÖ€�¡ô™¤ß¢™ó”ЇÜ–« ï¶¾¡€–Þ™ò�–ý½µư ƒÉ̳¨½ƒ×°ç•(2&22a3d85475c7bd12d35afd152941807b.woff2Ò÷S bb80da9ea1e74699b0f3920cbd61009aÄÅ"¢î•Š”æ´Ö»ÏáÆäý–ëÔï±±ü景ŸÚ´¦‹΂ø�Ó¯ï±þ±ДÄž��…�’«Í‹öÂþɉ Ò¥Ì�Ê«ò ƒÇ…¥–§—¬“°¹‚Àךƒý±¶È«ØõÊ꥽“þß�äúÉúÛ›ÇУ幊š(2&bb80da9ea1e74699b0f3920cbd61009a.woff2ÒúT d2b8358a5f48dac272aa6f2cfa5070c0èÊ"¥ã¬ß´ýäгñ„ì˜�™ÆÀ�¯¸°‹ú£¤òÝØÊ²Ã˜•�Þ¼ÛÓ™­¢�𥽑¡¹–õ¡ê²õ°±ûª«ˆšïÜÛ¦DZÉÍ¢ÍÞ­á«ÍÓÝê’°�žïݰ¢Üí»žÙäœݬ©ñ…‚•›–Ȃð¶çÜ(2&d2b8358a5f48dac272aa6f2cfa5070c0.woff2ÒýU 2f65beb81ae31da97f42c0f463842215 è"¨Á¥éŠ«üô¬¼×éâ«É¥É˲ü¼­ŸÚñœ¥Í£ɃøÃÕŽøæ¾²¿ÞÞ¡ô¹©‹£«®õ�¡ò’„Ö±¶Ò¾û¯òÃæ„±ß�úâ™—°ξ°´ŠëÌ¢̾†¬ª¤ü Ĩ¸­§¢ý±�¿ª™؃ý¨ñ£û¥�¥(2&2f65beb81ae31da97f42c0f463842215.woff2Ò€V ace0d4157e976493fd72c1e046409715˜Ò"«Ž´§®Ù ¶æüÃ鱸Ժ»©ž€Äëß˦œÊç튈þÝÁ¥ËɃ«¦¦£Šâ§ªó󹦕³¼¥«ü±çŒ‰¤ß½‡•ðÞ©õ僅ÁÃø“™ý¹ºäùå�óœýÙ„é÷••ñßñ¡«¦ß±ȽÃÕø¥¬«˜¥½»˯(2&ace0d4157e976493fd72c1e046409715.woff2ÒƒW 7a7982a6f1fc81656bd0c1f2b660e82bÔå"®ËÅÜ â«õÛõæ³³À™̯Ñ­ð€ô½ÓÓî‰ð¥¿žõ ÄæÊõ»º¡úÈõéü³¥ÚÛŠŒñÁ›´›ä¶™Û°‰à–‡‡ë¿û¶ÁßÑàɼ‰Ÿœÿòõþ÷þÇ¢žÔìÍž™Ô˜öÃ�àÚ½§åú™ݤä߆ߚ«²É¤Ê(2&7a7982a6f1fc81656bd0c1f2b660e82b.woff2Ò†X 94a2fcf30e8216a324422e949d160fa7¨å"±‹Œ§¶ù»²§Áߨà𨆌­§àøßžΘÁ³رÞùï’¾ÜØ£™Çß¼ïﲆ�³Ñ¡´»µù‘°ä¤ݺáìØÂ–ŸæŽ¨б—ú˜«¡¹�Ôïû튜£‚§¢ûàû»Õ⸠–ý§¯™Ñà¡ìı¤Ã͸ù¼›üˆÉŸ�(2&94a2fcf30e8216a324422e949d160fa7.woff2Ò‰Y f486d93aea6f500cb299adf957ffa99b´é"´õ·çшͣ‚È™¥¼¦ÜÀ¤À£ìÝÔ”êÛ׸”¬™–ƒ°»�ÞúòÑû¤ÿ¨Œ°ãèûã‚˨º˜¡ʆåÀÑÞ…²¾±ùüû��û·´Ž–ⱓ²¿Œ½Ö¤°ñ°ÊÜ©ƒ¬Ê£”êè�ʼ•Õ¡©«¦¤Îôèúœ¿ÜŒªÊ•¤˾(2&f486d93aea6f500cb299adf957ffa99b.woff2ÒŒZ 5a54deae631d1f892ae1fd324e8d154eèæ"·±¦å¾Ü™´ûáüͦ½Á¡•¬Ë¯õìºÅ¥ÄÝÇõΤ‰Í¿ƒ©™�¦¥ÿà”´¤¶Ÿ®³¬£ì�òøÕ´Êé³±³¦¾à€ßÀ¼¾«”ÊΞ’¢Ö«Ä™кÚïåâæãÁ½„»í™ìûÚ–×ц ã£›š‰¢ó¥Ë�”¤Þî²’”¿Åæ(2&5a54deae631d1f892ae1fd324e8d154e.woff2Ò�[ 834e934ea762fa713d2be841697506a4´ö"º¶�ö€‡ß‘·Ÿà™ÌÝ»«Û¤äèÇÕàÒ²½‹�Șú±Ò•ꊞ¤Ò�“šÍöü¨ì½ñì�ýÝÌ¥ŠûÈïÈÓÒ‡­­Š¨ÿ¯°Ч¸ûž£“ÉíüðßÞªô–ó€âôàŸ¾Éò¨ñ³¿º‹ìþ€�û­¡Ü’ã ¦˜¦““ë°(2&834e934ea762fa713d2be841697506a4.woff2Ò’\ 6d62b0d48c2b458c3bc180ec2c331279ð�"½îìÆüÛ­Ýû¾øªõݳÙã�àžï´­š¦ñ•ɸ·ü�äÆ×ñÉœ±¼»À�ïñ�÷²¢Á–�Óì×£�”š²éèê’²×ûÕŒ¶ÿ³âúÄõ�í¶ÚÀÇà͢ʉúŸž¯¬‰º­³ºíž�·¸¯×Ê´–Öß§¿ÉïðÊ™æˆùÿ½™»¸×¼(2&6d62b0d48c2b458c3bc180ec2c331279.woff2Ò•] 0db0df3ace7bbdec8e19a3cd7a31e03fœú"À£ÞÅõ÷•¸¨òÉíã—ÈÒ⨦ˆôºû­ºÔŲÒ³Á´äà¶¨Ô·Š–þÇ¡èÒܯýüÍžÚüÁãÜ£ø¥â°¿ó¾ãê±ä™…�ŠÃÑ™‡ÛÞíâ´â·ùú”«²¸í´†à˜à•­¾ž�´ƒ²¨¥÷¸º¤Ë­³¨»û¨•£•§ÎƒË½ûÕü(2&0db0df3ace7bbdec8e19a3cd7a31e03f.woff2Ò˜^ 1ce4341d68290e5f342bbb08133296fdðþ"Ãã”åÕ ¿Ä•ºõÛÕ¿è¾ÆÞûâì³úÇ쨫һˆüç…òìå¦úµ™Üä÷Žóìø³–œúä¥Ô»’ž®±Ü•ó•óÓÚ«ðÉ´³³§�ìå´פ“¥¡²²«òº¬Þ«¨×»ˆØè·æ•ì¦ù‹¯»�š¬§óÈÉ•ÆúŒ²¬–ÁÞ¥žúß÷ݕ˕º(2&1ce4341d68290e5f342bbb08133296fd.woff2Ò›_ 0a89ba4c98c30db74c93d0967f2afc12Ø…"Æå¡¥”ˆÿõÏÞ§¾¤��½é÷æ÷¶Ãü™�ÏéÉ·§ì¢§Åü—–™Ê¼¢·Â–šÀ´ƒ£¹•ا×§̓Ëèü�Ò™“ýØßͳüæظ±óªòÛ´›‚”¢¾²ò–¥ë”—ß–¬ê­Ѻ¸Õ㜢¶ßÈü”¬¥’²ú•‡»Ó¬®¦Ï–ú抋±³ÚÂú»(2&0a89ba4c98c30db74c93d0967f2afc12.woff2Ò›` 16b7d5b08375dfcad57e3ff13a2ae86e¼ƒ"Æž¼î”Š�øÝ–¢³ÕÆ«÷É¢ºâ§·¤ê´˵‰é픬ò×¢�¤¹°‘¥í³�–¨–’Ö©»ÆžŒêóúÌ¥Ö’«×ÚÕû�ììݽÉãú‹¾´Çžܸ�ü‚¢Õ«›ºß³¾ƒàº—»¦º�øôáѤ÷ˆ«òšíÀ‰ù°œÂ…š†«ÄÍ‹÷Ô¸Á£µÁÌ«(2&16b7d5b08375dfcad57e3ff13a2ae86e.woff2Òža 65bd8560302e344180078c215adcd0d8Ø�"É®¬�«Ί›åײ¸»ûɰ°¸¶âÔ°¬îü¢åÌþ•êšÃ®¨²¨Ú¤õµ¥¥¯µˆ¤ú£øŽïÞ�–®ŸÅžÁ™úœþãì¤Îݺ¢ž‰Þ²¢Œ«´„Çé«ÝàØäé£ö¦Èó«øâ¤á™ü㻥ǫ¢�º¢þ�æ®›”ò¾¬ûîø·“¡«Í´�üÉùþ¨«Ã(2&65bd8560302e344180078c215adcd0d8.woff2Ò¡b 2794b527e732e0686f938c6b40450191À‡"̆Êà¨ɤú¦Ô«—šÚ®�·ùÚ‰üȱÔ¦£�Ê·Ç¥ý·ð”ᔯ±å¥´Â�¬ÇÍýåßìü²õ§ë•®¨­º‹úÃÙ넪­ñ›²±Í莚¼º¨£ÊÒ£•­€­ö•ÿ¶”‹»É鱟ôଭ«а˜§ž²Öµä§áº¶”ßøƱöÛ ßÀúř聾àõ€(2&2794b527e732e0686f938c6b40450191.woff2Ò¤c 515df858dde28da76ab460c7a1608d9côŽ"ÏÁ¦£§‰»§‡·¢±òŸÑ¶±Þ«ëÂÌô»’Ò”½®êºجƔ౾–¡á¯Ä�§¨”–×µòÁޯ㨑²é¹Ä®ˆ¶ßÂØû‰²œ°Ζ¸’ð°ôãßÕÌÃïÉ�¨Î�±ú®´×ûò�”�»ìÒ¸û�È¢ª��´­¸Û”ä’¬«òûšÞÌœô±§»í•·°¬“£ø(2&515df858dde28da76ab460c7a1608d9c.woff2Ò§d d95c40135f98aed54b6f3ec2839dbabb””"Ò±¸ܧ†Ž…•õ£Ëûƒ”�©¦“¢‡ò»Ë»ëÆÜãðæ�¸¡°Ǧ•¿•¦êÕãÖ”ïŒä´ûÁ£ºŤð·¹üÍ•©½±�Ľ°í³É•”Ó»σ»…ïà’‰�ä·¾ûö¹§§ø¸‡®œ¬†¢Á´›¼Ö¸ »ñÕ“úˆýȲ«–ãñ¼ï¼¥Ãॕ²“§µ°§˰™æ(2&d95c40135f98aed54b6f3ec2839dbabb.woff2Ò§e 47426d3af322c6595eae6e99aee5d5c0¬’"Òš»Ã¥•ú‚ú¸¤‹¶¥�Û·èÓµ§Ú™„ŒͤÁ”œÕ¯¡ç·£éþëÄÉ�¤š�³Øئù£»¢Œ‹αÖÍѧß¾ÓÕ羡�‘¤®¤éàì¾Þ¤ž×˜“в¨àⲿ²ô¹¬Ø£É¥¸­·å°ø¤ߎ–´�Ò†ºžŠ¥È�©Ääì¾Â–åô“––ºúˆ¢žÖ£ÕÔ�(2&47426d3af322c6595eae6e99aee5d5c0.woff2Òªf ae68b84170ae063f3b9a123d9966096b°”"ÕšŒȸ̲®×ϵäžÁ­„�¶­€¤¿¤• �¡é½ݬˆúÿÞµÞìâæ¾Û•™¦…Ô³™Ž«�”¹ûåÛްáô¶ÿÛú„–è®ÚéÀ­¡¶ú¤ç¹éìŸüŠüìÕä•Ù±²àâ·Ž·çñ¶•ٯȭÁŸÍÂó÷–¡çöɲ΋�ºÆì�¼�Õ–°¹«¶«í±ç£»»‰¸¦ž(2&ae68b84170ae063f3b9a123d9966096b.woff2Ò­g 7718ebbfe9207c37a1a21bdc03c03fb6œœ"ؤ×ꋵˆö�•�ê¾³ž¿úºèžüŒ”•—üÉ•¼¹¤â³ââ«¥÷¾äðضÅ£ë�«·÷¨ô°žž»Ô£ðì‘�‰Õö¾î¤®¶º™Ôžó°Ë«´¢Ÿ…–ö«€ ‡ˆÀ»žøžûè¥ì”®ß╆òϰ¶¢�Ö™§í¤÷£èÃÓ°ÿ·î¥™¨„¤ΰô¶Ýúâ±ØìÁæå¬(2&7718ebbfe9207c37a1a21bdc03c03fb6.woff2Ò­h f8152eab10839f13b247f63e6c764755À "ØÁŠöÈÕŠßÖ”Ñç﬇ºÕœô”¢œ—Ù³ÜȬ€»�ƒ¨š•ë£ûħ䣂«Ы©¶ø»ÿ½è§•¢ˆ²Ä´¼úÓ£�°Îúý½̧ѳÙ–“¸”‰�·€øæ¤„š˜ý›¦ÝÕû™øÕÕ£¦§µüÿÖóÂþüÖ·©§°¤á•¼±°ûó»×·¿¨¦¥̨•–—ô‰›Ê¼«(2&f8152eab10839f13b247f63e6c764755.woff2Ò°i e0bae4b9d1395bb70c3569f9f3ccc150Àš"Û¸ñ€¶ž‘ß¡ɯ§¤¸¦êÂÞ•™¶£¥ȤüÈ«µ¬Ô骥œžܾý‰Ô¨’—¨á·ÿ¤Ç·Δ¦°‘•èÕŒØͧª¶É¡Ë÷£¸»æñ¥ƒû²™¥î¦é®±Õµèðƒ¥À¦‡°òùζáûØ”à±á½ü•íìÒºÞÕþ™¦à…´ÇûÏ•Û�¸¬ñûÿ”À·˜Ñô¤†•í¨(2&e0bae4b9d1395bb70c3569f9f3ccc150.woff2Ò³j dfe10f399f07a611ad944f6438c1c945¤À"Þ ¥³¸ºŒ¦­’�³’Ý’ê·�»ݧáž��§Äð»¨Â�¯ùù¨¸ˆûöùÙÞа©ß´¾Ù»’¦¼µÙ¾�¢Óºôù�¤†û°º�°æξÏ¥�š¸í⊲üçì§àžŠüßÒŠâ°‡§ª£—ãÈÔÝùʲ㟦ܺ®Ã‚ìܲžìë–ù�Ñ•éøÔ¾Ž—©¥÷½ßÃ’·‡Ä‡úÁ·(2&dfe10f399f07a611ad944f6438c1c945.woff2Ò³k 034bc67a668e5a2d71d077038319ecc3Ä¿"ÞŒ¥ÑÈ¥¤ã�¹¸É’滒íüú¸ç¸é²Úƒå¨àƒªÓñ¥†ÿƒ· ¨ù§‹à³²¡“Ÿ‹´¡Ï´Šžö“çÕ÷Þ‡»êøÄûÒˆ̽±²߸˜»ʨϾí¸ú�‘ü¼»Ùû³­êæŠýï»Ú»á‚¤¶°ó‹ÿ“»¦ŠÙ£ߥØŠõ”Ò°’¾å»æûùû‰¾ª·ž—ú�㥆úë±÷Š(2&034bc67a668e5a2d71d077038319ecc3.woff2Ò¶l 1673e9432bb97483080a56a6f4469e56�¯"á²›Ô³Òü¶üàœ¶´ïº¾¸·²†�Ÿºì¼É숸¬ºÖ‚è¡ݯ¯“Ý·­¦¼©Œ¼âüþ–ŸÉù»æ¥¶õˆ¦�´ò¬„•ö‹̶ö¥óÕë„…žíô€ç¿§ï�‰­é¦Õ¤¿Ó†¦½¯‡žÙ°ו„Êå«سš¥Üø¼²ëæ²úºǧ�”´§©¸ä„ÞÜëÕ‹ü„§öû½¤´ò½ä¦(2&1673e9432bb97483080a56a6f4469e56.woff2Ò°m 15fe8f7f491514fe0cfcfe533e7f4757„¯"Û”¨ÆŠÅ­ÖÑù¨ú¼¿“±¥¯ºž·¨¨ݸ’¸ä�ð¦ïü欽«Œ­”Äš·Ĥ³¾è¸¦¨Œ«³¤�¦˜ï««’¨®€âžžŒÍÃڱݥ¥»Ʀµ¸ù€‡¦÷§çÓýñðüÕ™�º‘�ì°ÿ× ¸¸´Äàô·°™ª§ç™‹¨à¾·¸ƒƒ¿«’•–Ê àؼÖ–­´“�äˆë·¦�(2&15fe8f7f491514fe0cfcfe533e7f4757.woff2Ò«n e391f549c2ae8b67be824af92112940aˆV"XÁ`Â`Ã`Ä`Å`Æ`Ç`È`É`Ê`Ë`Ì`Í`Î`Ï`Ð`Ñ`Ò`Ó`Ô`Õ`Ö`×`Ø`Ù`Ú`Û`Ü`Ý`Þ`ß`à`á`â`ã`ä`å`æ`ç`è`é`ê`ë`ì`(2&e391f549c2ae8b67be824af92112940a.woff2ÒÃo 313df767b0d509946adbd182111fc1bf„e"pí`î`ï`ð`ñ`ò`ó`ô`õ`ö`÷`ø`ù`ú`û`ü`ý`þ`ÿ`€a�a‚aƒa„a…a†a‡aˆa‰aŠa‹aŒa�aŽa�a�a‘a’a“a”a•a–a™aša›a�ažaŸa a¡a¢a£a¤a¥a¦a§a(2&313df767b0d509946adbd182111fc1bf.woff2ÒÔp d0d1383fdbb6d515de1c57e7a007560dÄX"€¨a©aªa«a¬a­a®a¯a°a±a²a³a´aµa¶a·a¸a¹aºa»a¼a½a¾a¿aÀaÁaÂaÃaÄaÅaÆaÇaÈaÉaÊaËaÌaÍaÎaÏaÐaÑaÒaÓaÔaÕaÖa×aØaÙaÚaÛaÜaÝaÞaßaàaáaâaãaäaåaæaça(2&d0d1383fdbb6d515de1c57e7a007560d.woff2Òq 51fe4f668b4eca6aa6c3864ef4e5582b¸".èaéaêaëaìaíaîaïaðañaòaóaôaõaöa÷aøaùaúaüaýaþaÿa2&51fe4f668b4eca6aa6c3864ef4e5582b.woff2ÒTr 7b52d0d936cd747c20d8d971697003f6Ø"ÿý2&7b52d0d936cd747c20d8d971697003f6.woff2ÒŒs 9db891832d940057c2249bebb1355aa8è";€�‚ƒ„†‡ˆ‰Š‹Œ�’›£¥¦§¨¶·¸ê€=�=‚=ƒ=„=2&9db891832d940057c2249bebb1355aa8.woff2Ò�t 710829bf8665404e9de6a0d01902fd57¼"L…=ž= =¡=¢=£=¤=¥=¦=§=¨=©=ª=«=¬=­=®=¯=°=±=²=³=´=µ=¶=·=¸=¹=º=»=¼=½=¾=¿=À=Á=Â=Ã=2&710829bf8665404e9de6a0d01902fd57.woff2Ò©u 0d521d9e0b96c5f318018a0fbc65591bÔ"XÄ=Å=Æ=Ç=È=É=Ê=Ë=Ì=Í=Î=Ï=Ð=Ñ=Ò=Ó=Ô=Õ=Ö=×=Ø=Ù=Ú=Û=Ü=Ý=Þ=ß=à=á=â=ã=ä=å=æ=ç=è=é=ê=ë=ì=í=î=ï=2&0d521d9e0b96c5f318018a0fbc65591b.woff2Ò±v 47c88fb77d5f1b91f739354099f20dcbô"`ð=ñ=ò=ó=ô=õ=ö=÷=ø=ù=�@‹@�@–@š@›@ž@Ÿ@ @¡@¤@°@²@³@´@¹@º@½@¾@¿@Ä@Å@Æ@ð@ô@õ@ö@÷@ø@ù@ú@ü@€A�A‚AƒA„A…A2&47c88fb77d5f1b91f739354099f20dcb.woff2Ò¹w 5217726b420702097c748c958c41b66fø"h†A‡AˆA‰A¬A¹AºA½A¿AƒB‰B“B–B¢B®BÀBŠC‹C�C‘C’C“C”C•C–C—C˜C™C�CžC C¢C£C¤C¥C¦C§C©CªC­C°C±C²C³C¾CÄCÆCÉCÐCÑCÒCÓC2&5217726b420702097c748c958c41b66f.woff2Ò¿x 9d71282fa8017494090f428969c87ac5´ "nÔCÚCÛCÞCßCäCåCæCçCèCéCêC’D�J‚JƒJ„J…J†J‡JˆJ‰JŠJ‹JŒJ�JŽJ�J�J‘J’J“J”J•J–J—J˜J™JšJ›JœJ�JžJŸJ J¡J¢J£J¤J¥J¦J§J¨J©JªJ2&9d71282fa8017494090f428969c87ac5.woff2ÒÅy ecdc45f383ae408e6895e3a525ad3992„ "t«J¬J­J®J¯J°J±J²J³J´JµJ¶J·J¸J¹JºJ»J¼J½J¾J¿JÀJÁJÂJÃJÄJÅJÆJÇJÈJÉJÊJËJÌJÍJÎJÏJÐJÑJÒJÓJÔJÕJÖJ×JØJÙJÚJÛJÜJÝJÞJßJàJáJâJãJäJ2&ecdc45f383ae408e6895e3a525ad3992.woff2ÒÉz 86318641e04ad3a065f64fe4f77a6654è "xåJæJçJèJéJêJëJìJíJîJïJðJñJòJóJôJõJöJ÷JøJùJúJûJüJýJþJÿJ€K�K‚KƒK„K…K†K‡KˆK‰KŠK‹KŒK�KŽK�K�K‘K’K“K”K•K–K—K˜K™KšK›KœK�KžKŸK K2&86318641e04ad3a065f64fe4f77a6654.woff2ÒÏ{ dfdb905d0ed22e70569e6c4141b117ccÀ"~¡KªK«K²K³K´KµK¶K·K¸K¹KºK»K¼K½K¾K¿KÀKÁKÂKÃKÄKÅKÆKÇKÈKÉKÊKËKÌKÎKÔKÕKæKçKèKéKêKëKïKöKíLïL M¡M“N•N—N¶NîNïNðNñN”OœO�OžOÅOÆOÜOæOçOèO2&dfdb905d0ed22e70569e6c4141b117cc.woff2Òì| 901ede42557461047b93011d73eaaf96üB"šéOêOëOõOöO÷O–RÊR‡SˆS€T…T†TØVƒ`…`†`‡`š`›`œ`¡`¢`£`¤`¥`¦`§`¨`©`±`²`³`´`µ`¶`·`¸`¹`º`»`‚œ„œ…œ†œ�œ’œ—œ œ¡œ£œ©œ®œ¯œ±œ³œµœ·œ¼œÀœÁœœÄœÆœÊœ2&901ede42557461047b93011d73eaaf96.woff2Òž} 9b47346eedfd34447e94647337fd6a64¸Ž"Éќ՜לڜۜâœãœäœåœçœèœêœëœìœíœîœïœòœôœõœöœ÷œøœùœúœûœüœýœÿœ€���ƒ�„�…�‡�Š���–�—�œ���£�ª�¯�°�±�´�¶�·�¸�¹�¼�½�¾�È�Ì�Ï�Ð�Ò�Ú�Û�Ü�à�â�æ�ç�é�(2&9b47346eedfd34447e94647337fd6a64.woff2Ò£~ 18f848e15c28281a11eb8227a35d5cb4”"Ïí�î�ï�ñ�ô�ø�ù�ú�ü�þ�€ž‚žƒž„ž…ž†ž‡žˆž‹žŒž’ž“ž”ž•ž–žœž�ž¡ž£ž¨ž©ž¬ž­ž®ž±ž³žµž·ž¹ž»ž¾ž¿žÀžÁžžÄžÅžÈžÉžÊžËžÌžÒžÖžážâžæžèžêžëžížîžñžòžõž÷žøžùžúž(2&18f848e15c28281a11eb8227a35d5cb4.woff2Òª 03b74ac28d17aa94147f58bc5be268d9¬©"Õýž€Ÿ�Ÿ‚Ÿ…Ÿ‡ŸŠŸŒŸŽŸ�Ÿ’Ÿ“Ÿ•Ÿ˜Ÿ™ŸšŸœŸžŸŸŸ¡Ÿ¢Ÿ¤Ÿ«Ÿ­Ÿ°Ÿ±Ÿ²Ÿ³Ÿ´Ÿ·Ÿ¸Ÿ¹ŸºŸ»Ÿ¼Ÿ½Ÿ¾ŸÀŸŸÆŸÇŸÈŸÉŸËŸÌŸÍŸÒŸÓŸÔŸÕŸÖŸÙŸÛŸâŸäŸåŸçŸëŸìŸðŸòŸôŸõŸöŸ÷ŸùŸûŸüŸýŸÿŸ� (2&03b74ac28d17aa94147f58bc5be268d9.woff2Ò±€ 3526cfff7d13f1377ed3005faf778f6d´º"Û‚ ƒ „ … ‡ ˆ Š Ž � “ • – — › � ž   ¢ £ ¤ § ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ » ½ ¿ À Á  Ä Å Æ Ê Ë Í РѠҠӠԠ֠נؠ٠۠ݠޠߠà á â ã ä æ ç è é ê ë í î ï ð ñ (2&3526cfff7d13f1377ed3005faf778f6d.woff2Ò´� 948fa208bc668b07e62ccef57f59ac90Ðë"Þò ó ø ù ú ü ý �¡‚¡ƒ¡„¡†¡‡¡‰¡Š¡‹¡Œ¡Ž¡�¡�¡’¡“¡”¡•¡—¡š¡›¡œ¡�¡ž¡Ÿ¡ ¡¡¡¢¡¤¡¦¡ª¡«¡®¡°¡±¡¶¡¸¡¹¡¼¡½¡¿¡À¡Á¡áġơǡȡʡˡ̡͡ΡСÒ¡Ó¡Ô¡סء١ۡܡݡߡà¡á¡â¡ã¡(2&948fa208bc668b07e62ccef57f59ac90.woff2Òº‚ f50ba223a9f303ad368f7bba1183360aü†"ää¡é¡ê¡ë¡ï¡ð¡ò¡ô¡ö¡÷¡ø¡ú¡ü¡ý¡þ¡ÿ¡�¢ƒ¢…¢Š¢Œ¢�¢Ž¢�¢‘¢“¢–¢—¢˜¢™¢š¢›¢œ¢�¢ž¢ ¢¢¢£¢¤¢¥¢¦¢§¢¨¢©¢«¢¬¢­¢®¢¯¢°¢±¢³¢´¢µ¢¶¢¸¢¹¢½¢¾¢¢Ê¢΢Ï¢ТӢآ٢ۢݢޢߢà¢á¢ã¢ä¢æ¢(2&f50ba223a9f303ad368f7bba1183360a.woff2ÒÀƒ 90732434f5f08d321d8509ab2d6aa6fdà®"êê¢ï¢ò¢ú¢þ¢ÿ¢ƒ£„£†£‡£‹£Ž£�£�£‘£“£”£˜£š£�£ž£Ÿ£¡£££¦£§£¨£©£­£®£´£¸£¹£º£¾£¿£Á££ãţȣʣΣУңӣԣգ֣ףأ٣ڣޣߣâ£ã£å£æ£ç£è£é£ê£ì£î£ò£ô£÷£þ£„¤…¤‰¤‹¤Œ¤�¤�¤“¤”¤(2&90732434f5f08d321d8509ab2d6aa6fd.woff2ÒÄ 70f63fe95b55111e328a6c9ec6f31480˜ë"핤œ¤ž¤Ÿ¤¡¤¢¤£¤¦¤§¤¬¤¯¤±¤²¤´¤µ¤¼¤¾¤ŤƤȤɤˤϤÒ¤Ó¤Õ¤פؤÙ¤Ú¤ߤà¤â¤ã¤ä¤æ¤è¤ë¤ì¤í¤ð¤ñ¤ó¤ö¤÷¤ø¤ù¤ú¤û¤ü¤þ¤€¥„¥…¥†¥‹¥Ž¥�¥’¥”¥•¥–¥—¥˜¥™¥š¥œ¥¤¥¥¥¦¥§¥®¥¯¥°¥´¥µ¥¶¥·¥¸¥(2&70f63fe95b55111e328a6c9ec6f31480.woff2ÒÉ… d72f2ff55978308da2fac1493a5ec3d7¼í"󹥺¥»¥¼¥½¥À¥Â¥Ä¥Å¥Æ¥È¥Ê¥Ì¥Í¥Î¥Ï¥Ñ¥Ó¥Ô¥×¥Ú¥Û¥Ü¥à¥á¥ã¥å¥æ¥ç¥è¥é¥ê¥ë¥ì¥í¥î¥ï¥ò¥ô¥ö¥÷¥ü¥ý¥�¦‚¦ƒ¦„¦‡¦‰¦Ц‹¦Œ¦ަ‘¦’¦“¦”¦˜¦›¦œ¦ž¦Ÿ¦¢¦¤¦¥¦§¦¨¦©¦«¦¬¦°¦²¦³¦´¦µ¦¶¦·¦¸¦¼¦½¦¦(2&d72f2ff55978308da2fac1493a5ec3d7.woff2Ò̆ f4a38e48eec2f769ac06bfdf7e8fb990 Ì"öĦƦ˦̦ͦЦئÙ¦Û¦ݦå¦è¦ê¦ì¦í¦ò¦ö¦ù¦ü¦ý¦þ¦€§�§ƒ§‡§ˆ§Чާ�§�§‘§’§“§”§–§—§›§œ§ž§ §¡§¤§§§ª§«§¬§¯§°§±§³§µ§·§¸§¹§º§¼§½§¾§À§ŧƧǧΧϧЧÒ§Ó§Õ§Ú§ܧݧÞ§á§ç§ô§ú§þ§ÿ§€¨‚¨…¨‡¨(2&f4a38e48eec2f769ac06bfdf7e8fb990.woff2Òχ 478d735ff90ac7485cb1081215672851Ħ"ù‹¨”¨˜¨™¨š¨œ¨¢¨¤¨¥¨ª¨°¨·¨º¨½¨¿¨Á¨ĨŨǨɨ̨ͨΨϨѨÚ¨ݨÞ¨ߨà¨á¨ã¨å¨ç¨é¨ê¨ë¨ì¨í¨î¨ï¨ð¨ô¨ù¨ú¨þ¨ÿ¨�©ƒ©…©‡©ˆ©‰©Š©�©‘©“©—©˜©œ©ž©Ÿ© ©¡©¢©¥©®©°©²©µ©¶©·©¹©º©¾©éũʩ˩֩ة۩à©(2&478d735ff90ac7485cb1081215672851.woff2ÒÕˆ 4d8ee4009082f75ed0f06a4d2028a7dd¬Ò"ÿâ©ã©ä©ë©ì©ï©ð©ñ©ô©õ©ö©÷©ø©ù©û©þ©€ª‚ªƒª…ªˆªŠª‹ªŒª�ªŽª’ª“ª•ª–ª—ª˜ª™ªšªœª�ªžªŸª¡ª¥ª¦ª¨ª©ª«ª­ª²ª´ªµª¶ª¸ª¹ªºª»ª½ªÀªªŪǪȪ˪̪ͪΪѪÒªÔªתتÙªÚªÛªݪߪàªâªãªèªéªëªïªðªñªòªóªôª(2&4d8ee4009082f75ed0f06a4d2028a7dd.woff2ÒØ‰ ca093685c5ac208cab4d4bfe5bd9ca14ä‚"‚ùªúªýªÿª…«†«Œ«�«Ž«�«’«“«•«–«—«›«ž« «¡«¢«£«¤«¥«¦«¨«©«­«¯«°«´«¶«¸«º«¼«¿«À«Á««ëȫʫ˫ϫЫÕ«׫ث٫۫ޫà«â«ç«í«î«ð«ñ«ô«ø«ù«ú«û«ü«ÿ«‚¬ƒ¬„¬…¬‡¬Ь‹¬�¬‘¬’¬“¬•¬™¬š¬�¬ ¬¡¬¢¬¥¬¦¬¨¬©¬(2&ca093685c5ac208cab4d4bfe5bd9ca14.woff2ÒÛŠ adc309549d9215c4758eee232a737ac4¼¸"…ª¬«¬³¬·¬º¬¼¬½¬¾¬À¬Á¬¬ìĬŬƬǬȬɬʬˬϬЬѬÒ¬Õ¬Ö¬Ú¬Û¬Þ¬߬á¬ã¬ç¬í¬î¬ð¬ó¬õ¬÷¬ù¬ú¬ý¬þ¬ÿ¬�­‚­ƒ­„­ˆ­‰­Š­‹­�­�­‘­’­”­–­—­˜­™­š­›­œ­�­ž­Ÿ­ ­¡­¢­¤­¥­§­©­ª­«­¬­­­®­°­±­²­µ­¸­¹­º­»­(2&adc309549d9215c4758eee232a737ac4.woff2ÒÞ‹ d69c2ab3e3ce1548de045f65248b07d6Àà"ˆ½­¾­¿­íÄ­Æ­Ç­É­Ë­Ì­Í­έÏ­Эҭӭխ֭ح٭ܭã­å­æ­ç­è­é­ì­î­ï­ò­ó­ö­÷­ø­û­ü­€®�®‚®…®Œ®Ž®�®�®‘®”®•®—®™®š®›®�®ž® ®¡®¢®¤®¥®¦®§®«®±®²®´®µ®¶®·®¸®¼®½®¿®Á®îĮŮƮȮɮˮҮӮԮծ֮خٮâ®(2&d69c2ab3e3ce1548de045f65248b07d6.woff2Òጠ2e30c9671701a342203e0084baeb4102äÖ"‹ã®å®ç®ì®î®ð®ñ®ò®ô®õ®ø®ù®ú®ý®þ®ÿ®€¯�¯‡¯ˆ¯‰¯Н�¯ޝ�¯�¯‘¯”¯•¯–¯—¯˜¯™¯š¯œ¯�¯ž¯Ÿ¯¥¯¨¯ª¯¬¯¯¯°¯±¯³¯µ¯¶¯·¯¹¯º¯»¯¼¯½¯¾¯¿¯À¯Á¯įůƯǯȯɯʯ̯ͯЯѯÓ¯Ö¯ׯÛ¯ܯÞ¯â¯ã¯å¯æ¯ç¯è¯é¯ê¯ë¯ì¯î¯ð¯ñ¯ò¯(2&2e30c9671701a342203e0084baeb4102.woff2Òä� 05a1f8d7d226c71e404e7689e29dfa70¬ˆ"Žó¯õ¯ö¯û¯ü¯þ¯ÿ¯�°ƒ°„°ˆ°‰°Œ°ް�°�°’°“°”°—°˜°š°›°œ°Ÿ°¢°£°¥°¦°§°¨°©°«°¬°­°®°²°³°¶°·°¸°¹°º°»°¼°½°¾°¿°À°Á°°ðŰưǰȰɰΰаÓ°Õ°Ö°Ù°Ú°Û°ܰݰß°à°á°ã°ä°æ°ç°è°é°ê°í°î°ï°ð°ñ°ò°ó°ô°ö°÷°ø°ú°û°(2&05a1f8d7d226c71e404e7689e29dfa70.woff2ÒêŽ dccb8ff2e02b1cf45d79b1e868a7acafȯ"”ü°ý°ÿ°‚±„±†±‡±ˆ±‹±Œ±�±ޱ�±�±‘±”±•±–±—±˜±›±�± ±¡±¢±£±¤±¥±¦±§±ª±«±¬±­±¯±°±±±²±´±µ±¶±·±¸±¹±º±»±½±¿±À±±ñıƱȱɱʱ˱̱ͱϱбÒ±Ô±Ö±×±Û±ܱݱá±ã±å±æ±ç±è±ê±í±ñ±ò±ô±õ±÷±ø±û±ü±þ±ÿ±€²�²ƒ²…²†²ˆ²(2&dccb8ff2e02b1cf45d79b1e868a7acaf.woff2Òí� 81cb6d044c095f1efcf88076bda93eb3ð…"—‰²в‹²Œ²޲�²‘²’²“²—²˜²›²�²ž²¡²£²¦²¨²¬²°²²²³²µ²¶²»²½²¿²À²òŲƲʲ̲ͲÒ²Ó²Ù²Û²ܲݲ޲߲á²ã²ä²æ²è²ë²ì²í²ï²ð²ñ²ò²õ²÷²ú²û²þ²ÿ²€³…³‰³‹³Œ³޳�³�³‘³”³•³˜³š³›³œ³Ÿ³ ³¡³¢³¦³§³¬³­³°³±³³³´³µ³¶³·³¸³º³¼³(2&81cb6d044c095f1efcf88076bda93eb3.woff2Òð� eee53b23b919cc5f7509aab7a2f292c5 £"š½³¿³À³Á³³óijųdzȳɳ̳γϳճֳٳ۳޳߳à³á³â³ä³æ³ç³é³ê³ë³í³î³ï³ð³ñ³ò³ó³ô³õ³ö³÷³ø³ú³ü³ý³þ³€´‚´Š´‹´�´Ž´�´�´’´”´•´–´—´™´š´�´ž´¡´¢´¤´¦´§´¨´ª´«´¬´­´®´¯´°´³´µ´·´¸´¹´º´»´½´¾´¿´´ôÄ´Å´Ç´È´Ë´Ì´Í´(2&eee53b23b919cc5f7509aab7a2f292c5.woff2Òó‘ e565d8ea3db30cf5a8ff9198798c7fc2À¿"�δÏ´дѴҴӴԴִ״شٴ۴ܴݴ޴ߴà´á´ã´ä´å´è´é´ë´ì´î´ï´ð´ñ´ò´ó´ø´ù´û´ü´ý´þ´€µ�µ‚µƒµ„µ…µ†µ‡µˆµ‰µе‹µŒµ�µ޵�µ�µ‘µ“µ”µ•µ–µ—µ˜µ™µœµ�µžµŸµ µ¡µ¢µ£µ¤µ¥µ¦µ¨µ©µ«µ¬µ­µ®µ¯µ°µ±µ´µ¶µ·µ¹µºµ»µ¿µÀµõĵŵƵǵ(2&e565d8ea3db30cf5a8ff9198798c7fc2.woff2Òö’ cb536d87a302e0cc13a693ba6f8f6719”Œ" ȵʵ͵εϵеѵÓµÕµÙµÚµÛµݵ޵ߵâµäµåµçµèµêµìµíµîµïµðµòµóµôµöµ÷µøµùµûµüµýµþµÿµ�¶‚¶ƒ¶„¶…¶†¶‡¶ж�¶޶�¶�¶‘¶’¶“¶”¶•¶˜¶š¶›¶œ¶�¶ž¶Ÿ¶ ¶¢¶£¶¥¶¦¶§¶¨¶©¶«¶¬¶­¶®¶¯¶±¶³¶µ¶¶¶¹¶º¶»¶¼¶½¶¾¶¿¶Á¶¶öĶŶƶǶȶɶʶ(2&cb536d87a302e0cc13a693ba6f8f6719.woff2Òù“ fa74af1f62b69ce6e69b6ed86e1807caˆœ"£˶Ͷζ϶Ò¶Ö¶Þ¶à¶á¶ç¶è¶í¶î¶ï¶ò¶ô¶ö¶÷¶ù¶û¶ü¶þ¶‚·†·Š·�·Ž·�·‘·’·”·–·Ÿ·§·¨·©·¬·­·¯·±·²···º·»·¼·À·Á·÷È·É·Ê·Ë·Í·ηϷѷԷշַ׷طٷڷ۷ܷà·ã·ê·í·ï·ñ·ò·ó·ô·÷·ý·þ·€¸‚¸ƒ¸…¸Œ¸�¸’¸“¸—¸™¸›¸ž¸Ÿ¸ ¸¡¸£¸¦¸¨¸©¸ª¸(2&fa74af1f62b69ce6e69b6ed86e1807ca.woff2Òü” c6ad7d0b708655662b0a05866ff29cfeèÜ"¦«¸­¸®¸¯¸°¸²¸³¸µ¸¶¸øĸǸ̸Ò¸Ó¸Ô¸Ö¸׸ظÚ¸Û¸ݸ߸ç¸é¸ê¸ë¸í¸ð¸ò¸ó¸ô¸õ¸ö¸÷¸ø¸û¸ü¸ý¸þ¸€¹ƒ¹„¹…¹†¹‡¹‰¹й‹¹޹�¹’¹“¹•¹�¹ž¹Ÿ¹ ¹¤¹¥¹¦¹§¹¨¹ª¹®¹¯¹°¹²¹´¹¶¹¹¹º¹»¹¼¹¾¹À¹¹ùŹƹǹȹɹʹ̹͹ιϹйѹÓ¹Ô¹Õ¹Ö¹×¹عÚ¹Û¹(2&c6ad7d0b708655662b0a05866ff29cfe.woff2Òÿ• d6c3f49720691041d49e833dec25b45a¬Š"©ܹݹ޹߹à¹â¹ã¹ç¹é¹ë¹ì¹î¹ñ¹ò¹ó¹õ¹÷¹ø¹ù¹ú¹ü¹þ¹ÿ¹€º�º„º…ºˆº‰ºŠº‹ºŒº�º�º‘º’º“º•º˜º™ºšºœº�ºŸº º¡º£º¥º¨ºªº«º¯º°º±º²º³ºµº¶º·º¸º¹ººº»º¼º¿ºÀºÁººúĺźƺȺɺͺκϺѺÒºÓºÔºÕºÖº׺ÙºÚºܺÞºߺàºáºâºãºäºåºæºçºèºêº(2&d6c3f49720691041d49e833dec25b45a.woff2Ò‚– 29f09feb4408c30e4f3f5f269014178fŒÖ"¬íºîºðºñºòºóºõºöº÷ºøºùºúºûºüºýºþºÿº€»ƒ»…»†»ˆ»‰»Š»‹»Œ»�»Ž»�»�»‘»’»“»”»•»–»˜»š»›»œ»ž»Ÿ»¡»¢»£»¤»¥»¦»¨»©»ª»«»¬»­»®»¯»°»±»²»³»´»µ»¶»¹»»»¾»¿»À»Á»»ûĻƻǻȻɻʻ̻λÏ»лѻӻջ׻ػٻڻܻ߻à»ã»ä»ê»ì»í»õ»ö»ø»ú»(2&29f09feb4408c30e4f3f5f269014178f.woff2Ò‚— a2372f8c07ff5b351cc493cca970ae86¬Ž"¬û»ü»ÿ»€¼„¼‡¼‰¼м‹¼�¼޼’¼“¼—¼ž¼Ÿ¼ ¼¡¼¢¼£¼¤¼¨¼©¼ª¼¬¼¯¼°¼²¼´¼µ¼¹¼º¼¾¼¿¼Á¼ƼǼȼɼʼ˼ͼμϼмѼÒ¼Ó¼Ö¼Ù¼Ú¼ܼݼà¼ä¼å¼æ¼ç¼è¼é¼ê¼í¼î¼ï¼ð¼ñ¼õ¼÷¼�½‚½ƒ½…½ˆ½‰½Œ½�½޽’½˜½›½�½¡½¢½£½¤½¨½©½ª½¬½®½¯½°½±½²½´½º½»½¼½½½¿½(2&a2372f8c07ff5b351cc493cca970ae86.woff2Ò…˜ e0826f03af735acef8cb0e6fc55def40ȵ"¯À½ýŽƽǽ˽̽ͽνϽнÔ½Õ½×½ؽÙ½ܽÞ½ä½å½æ½ç½ë½í½î½ï½ð½ñ½ò½õ½ø½ù½û½ü½ý½…¾†¾‡¾‰¾Œ¾�¾޾�¾”¾–¾™¾š¾œ¾�¾ž¾¡¾¢¾£¾¤¾¨¾«¾¬¾®¾°¾²¾´¾¶¾¸¾»¾½¾¾¾¿¾Á¾¾þľžƾǾɾʾ˾;ϾѾÔ¾Ù¾Ú¾Û¾ܾ޾߾à¾ã¾ç¾è¾ë¾î¾ï¾ò¾ô¾õ¾ö¾ø¾ú¾ý¾(2&e0826f03af735acef8cb0e6fc55def40.woff2Òˆ™ e92bc613d15c7c556adfbbdbd27371e9äÿ"²þ¾ÿ¾ƒ¿†¿�¿Ž¿�¿“¿”¿–¿š¿›¿�¿Ÿ¿¢¿£¿¤¿¥¿¦¿§¿«¿¬¿¯¿°¿±¿²¿³¿´¿¶¿¸¿º¿»¿¾¿¿¿À¿Á¿¿Ç¿È¿Ê¿Ë¿οӿԿտڿۿܿ޿߿â¿ã¿å¿æ¿è¿é¿ì¿ï¿ð¿ò¿ó¿ô¿ö¿÷¿ù¿ú¿ü¿‡ÀˆÀ‰À‹ÀŒÀ�À‘À“À—À˜ÀšÀžÀŸÀ¢À£À¤À¬À­À®À°À±À²À³À´À¶À·À¸À¹ÀºÀ½À¾ÀÀÀÄÀÅÀÇÀ(2&e92bc613d15c7c556adfbbdbd27371e9.woff2Ò‹š 0b576d019ce5674819f2c2b12bf13e54À£"µÈÀÉÀÊÀÌÀÎÀÏÀÑÀÓÀÔÀÖÀ×ÀØÀÛÀÜÀÞÀßÀàÀáÀæÀîÀñÀòÀôÀõÀ÷ÀþÀ€Á�Á‚Á†Á‡ÁˆÁŠÁ‹ÁŽÁ�Á�Á‘Á“Á•Á—Á˜Á™ÁœÁžÁ¡Á¢Á¤Á¥Á§Á©ÁªÁ®Á°Á³Á·Á¹ÁºÁ¾Á¿ÁÀÁÁÁÂÁÃÁÄÁÇÁÈÁÉÁÌÁÍÁÎÁÏÁÐÁÒÁÓÁÔÁÖÁ×ÁÙÁÛÁÞÁâÁãÁäÁåÁêÁõÁ÷ÁøÁüÁýÁþÁÿÁ‚ƒ„…‡Š‹ŒÂ�‘Â(2&0b576d019ce5674819f2c2b12bf13e54.woff2ÒŽ› b816c4213217ebb827ad240302a2ec0dØè"¸’“”–—˜™Â�ž¡¢¥©ª¬­®¯°±²³µ¶¸¹º»¼½ÂÀÂÁÂÂÂÃÂÄÂÅÂÆÂÇÂÉÂÏÂÐÂÒÂÓÂÔÂÖÂ×ÂÙÂÛÂÜÂÞÂàÂáÂäÂåÂæÂéÂìÂíÂïÂñÂòÂôÂøÂùÂúÂûÂüÂýÂþÂÿ€Ã�ÃÄÅÆÇÈÉÌÃ�Ã�ÓÕÖרÙÛÜÞßàáâãåæêíïðñóÃ(2&b816c4213217ebb827ad240302a2ec0d.woff2Ò‘œ 2b0c33574b30f30f6a5efbe8f6d89ebfœ×"»´ÃµÃ¸Ã¹ÃºÃ»Ã¼Ã½Ã¿ÃÀÃÁÃÃÃÄÃÅÃÆÃÎÃÏÃÐÃÓÃÕÃÖÃ×ÃØÃÙÃÚÃÛÃÜÃÝÃÞÃàÃáÃâÃäÃåÃçÃéÃêÃëÃìÃíÃîÃïÃðÃñÃóÃôÃùÃûÃýÃ�Ă㥹ĉēęĜÄ�ĞĠģĦĨīĭįıĵĸĹĺĻļÄÂÄÄÄÅÄÆÄÊÄÏÄÐÄÕÄÖÄ×ÄÙÄÚÄÜÄÝÄÞÄßÄàÄáÄâÄäÄåÄèÄñÄòÄôÄõÄ÷ÄøÄúÄûÄýÄ(2&2b0c33574b30f30f6a5efbe8f6d89ebf.woff2Ò”� a1e5763384071f66e5090146dd74f4b6ˆó"¾�łŃŅņŇňŋŌÅ�ÅŽÅ�Å�ŔřŜÅ�ŞţŦŧũŪŭŮůŰŲųŴŶŷŸźžÅÀÅÁÅÃÅÏÅÑÅÕÅÝÅÞÅàÅáÅäÅêÅëÅðÅòÅõÅøÅùÅúÅûŀƃƄƅƆƊƋƌÆ�Æ�Æ�ƒƓƔƕƗƘƙƜƦƧƩƬƭƮưƱƳƴƵƶƷƸƻƼƿÆÀÆÁÆÄÆÇÆÈÆÊÆÑÆÒÆÓÆÔÆÖÆׯØÆÙÆÚÆ(2&a1e5763384071f66e5090146dd74f4b6.woff2Ò”ž c8ef8c65d6e08ed471c29dbedb4a0739„°"¾ÛÆÜÆÝÆàÆäÆåÆæÆèÆêÆìÆïÆðÆòÆóÆôÆõÆøÆùÆüÆýÆþÆÿÆ�DždžNjÇ�ǑǓǔǕǗǚǜÇ�ǞǟǤǦǫǯDZDzǵǶǹǻǽǿÇÁÇÂÇÃÇÅÇÇÇÈÇÊÇËÇÌÇÑÇÓÇÔÇÕÇ×ÇØÇÙÇÜÇÝÇßÇâÇäÇåÇæÇçÇèÇëÇìÇïÇðÇñÇóÇõÇ÷ÇùÇúÇûÇüÇþǃȄȆȇȈȉȊȎȑȒȕȘșȚÈ�ȟȢȣȤÈ(2&c8ef8c65d6e08ed471c29dbedb4a0739.woff2Ò—Ÿ 7bc5be711a9b47a12aeeb4d35ebae10d¤ì"Á¥È§È¨È©È«È®È¯È°È±È²È³ÈµÈ·È¸È¹È»È¼È¾ÈÀÈÂÈÃÈÉÈËÈÌÈÍÈÎÈÏÈÐÈÓÈÕÈÖÈ×ÈÙÈÚÈÛÈÝÈàÈáÈâÈãÈäÈåÈæÈèÈêÈëÈìÈîÈðÈñÈòÈôÈõÈ÷ÈüÈýÈþÈÿÈ€É�ɃɆɉɊɋɌÉ�ÉŽÉ�ɔɗɘɚɛɜÉ�ɠɡɢɦɧɨɪɯɱɴɶɹɽÉÃÉÆÉÈÉÉÉÌÉÏÉÑÉÓÉÕÉÖÉÙÉÛÉÜÉÝÉßÉáÉãÉåÉ(2&7bc5be711a9b47a12aeeb4d35ebae10d.woff2Òš  fc972e83f1ed87ddd0478afcfd0a4465Ä�"ÄçÉèÉéÉêÉëÉíÉîÉóÉõÉöÉøÉùÉýÉÿÉ�ʂʃʅʇʈʊʋʌÊ�ÊŽÊ�ʑʓʕʗʚʞʟʠʡʦʧʨʩʭʰʱʲʳʷʺʼʽÊÀÊÁÊÂÊÃÊÄÊÆÊÇÊÊÊËÊÍÊÎÊÐÊÒÊÓÊÔÊÚÊÜÊßÊàÊáÊäÊåÊçÊèÊéÊêÊíÊîÊïÊñÊóÊöÊùÊúÊûÊüÊýÊþÊÿÊ€Ë�˄˅ˆˈˉˊË�ËŽË�˒˔˖˘˚Ë�˞ˠˢˣË(2&fc972e83f1ed87ddd0478afcfd0a4465.woff2Ò�¡ 72e51db8975c364a461f6fb1fdb2879fˆ "Ǧ˨˪ˮ˱˲˳˴˵˶˸˺˻˾˿ËÀËÂËÇËÈËÉËÊËÍËÐËÑËÓËÔËÕËØËÙËÚËÛËÜËÝËÞËßËáËãËäËêËëËòËóËôËõËøËùËûËüËýËþËÿË�̄̅̇̈̉̋Ì�Ì�̷̸̡̢̛̖̗̘̜̞̣̤̦̩̪̫̬̮̰̲̳̹̺̻̑̒̽̿̚ÌÀÌÄÌÅÌÆÌÇÌÈÌÊÌÍÌÎÌÐÌÑÌØÌÙÌÛÌÜÌÞÌàÌâÌãÌåÌ(2&72e51db8975c364a461f6fb1fdb2879f.woff2Ò ¢ bb5d12b457041727a28e6db87c03b066ŒÓ"ÊçÌéÌêÌëÌìÌíÌñÌòÌóÌõÌøÌùÌûÌüÌýÌÿÌ€Í�̓͆͊͋ͅÍ�ÍŽÍ�Í�͓͔͕͙͚͒͛ͣͤͥͦͩͪͬͭͯ͘͜͟͞͠͡ͰͲͳ͵Ͷͷ͸ͺͻͼͽͿÍÀÍÁÍÂÍÃÍÅÍÆÍÈÍÊÍËÍÌÍÍÍÎÍÏÍÐÍÑÍÒÍÓÍÔÍÕÍ×ÍØÍÚÍÞÍßÍáÍâÍãÍäÍåÍçÍèÍêÍëÍíÍîÍïÍñÍõÍöÍúÍûÍýÍ�΂΄΅Ά·ΌÎ(2&bb5d12b457041727a28e6db87c03b066.woff2Ò £ 54436c4eadff7caad3068faba6d3c741 ù"ÊŽÎ�ΑΒΓΖΘΙΚΜΞΠΡ΢ΣΤΥΩήΰβγζηθιλμξοÎÁÎÄÎÅÎÇÎÊÎËÎÍÎÒÎÔÎÕÎ×ÎØÎÙÎÚÎÛÎÝÎâÎãÎäÎæÎçÎëÎìÎîÎôÎöÎøÎùÎúÎûÎý΀ςσυφψϊόÏ�ÏŽÏ�ϑϒϓϔϖϙϛϟϠϡϤϦϩϬϮϱϲϴϹϺϻϼϽϾϿÏÀÏÂÏÅÏÆÏÇÏÈÏÉÏÊÏËÏÌÏÍÏÎÏÕÏ(2&54436c4eadff7caad3068faba6d3c741.woff2Ò£¤ 2e9c554387d30897bf1a3431c2470ab2€š"ÍÖÏ×ÏÛÏßÏáÏãÏäÏæÏçÏèÏêÏëÏíÏîÏòÏöÏ÷ÏøÏùÏúÏûÏüÏþÏ�ЂЃЄІÐ�Ð�ВДЕИЙКЛМОПРТУФХЦЧШЫЬЭЮЯабдежклпÐÇÐËÐÍÐÏÐÒÐÖÐ×ÐØÐÙÐÚÐÛÐÜÐÝÐÞÐßÐêÐìÐíÐîÐïÐðÐñÐòÐóÐõÐøÐùÐúÐûÐüÐýÐþÐÿЀтфчшщъыьÑ�ÑŽÑ�ёђѕіљÑ(2&2e9c554387d30897bf1a3431c2470ab2.woff2Ò¦¥ eeb512539118d02401a38b88da4714f5ÔÐ"КћќўѠѡѣѤѥѩѪѫѬѮѱѲѴѶѷѸѹѺѻѼѽѾѿÑÁÑÃÑÅÑÆÑÇÑÈÑÊÑÌÑÎÑÏÑÐÑÑÑÓÑÔÑÙÑÛÑÜÑÝÑÞÑáÑâÑäÑåÑæÑèÑéÑêÑëÑìÑíÑïÑóÑôÑöÑ÷ÑøÑûÑýÑþÑÿр҂҃҄҆҇҈҉ҊҌґғҔҕҖҗҘҙҚқҜÒ�ÒžÒ¡Ò¢Ò£Ò¥Ò¦Ò§Ò¨Ò©ÒªÒ«Ò¬Ò®Ò¯Ò±Ò²Ò³ÒµÒ¶Ò·Ò¸ÒºÒ»Ò(2&eeb512539118d02401a38b88da4714f5.woff2Ò¦¦ 0fa188b0859c058dd741ba575e3a4c27ðæ"мҾÒÀÒÁÒÃÒÄÒÅÒÆÒÇÒÈÒÉÒËÒÌÒÍÒÎÒÏÒÐÒÑÒÒÒÕÒÖÒØÒÙÒÛÒÜÒßÒáÒâÒäÒåÒçÒéÒêÒìÒïÒðÒòÒóÒôÒöÒúÒûÒýÒþÒÿÒ�ӃӅӊӋӌӎÓ�Ó�Ó‘Ó’Ó“Ó–Ó—Ó™ÓšÓ�ÓžÓŸÓ Ó¡Ó¢Ó£Ó¤Ó¥Ó¦Ó©Ó¬Ó¯Ó°Ó²Ó³ÓµÓ¶Ó¸Ó¹ÓºÓ¼Ó½Ó¾ÓÀÓÂÓÃÓÄÓÅÓÆÓÇÓÈÓÉÓÏÓÑÓÒÓÕÓÖÓ×ÓØÓÙÓÚÓÜÓÝÓÞÓáÓâÓãÓäÓåÓæÓ(2&0fa188b0859c058dd741ba575e3a4c27.woff2Ò©§ c6e8ac49dfe28a1da4473d051be33a00€•"ÓéÓêÓëÓìÓîÓïÓðÓñÓôÓõÓöÓ÷ÓøÓùÓúÓûÓüÓþÓ€ÔƒÔ„Ô†Ô‡ÔˆÔ‰Ô‹ÔŒÔ�ÔŽÔ�Ô�Ô‘Ô’Ô”Ô•Ô–ÔšÔ›ÔœÔ�Ô Ô¢Ô¤Ô¥Ô¦Ô§Ô©Ô«Ô¬Ô­Ô®Ô°Ô²Ô³Ô´Ô¶Ô·Ô»Ô¼Ô¿ÔÀÔÁÔÂÔÃÔÅÔÆÔÉÔÊÔÌÔÍÔÎÔÏÔÑÔÒÔÓÔÔÔÕÔÖÔ×ÔÚÔÜÔÝÔÞÔàÔãÔäÔæÔçÔèÔéÔêÔìÔíÔîÔïÔðÔòÔóÔôÔõÔöÔ÷ÔøÔúÔûÔýÔþÔÿÔ‚ÕƒÕ…Õ†Õ‡Õ(2&c6e8ac49dfe28a1da4473d051be33a00.woff2Ò¬¨ 812314986b2f0062b572a6e9476705a5ÐÝ"ÖˆÕŠÕ‹ÕŒÕ�Õ�Õ’Õ“Õ•Õ–Õ˜Õ™ÕšÕ›Õ�ÕžÕŸÕ¡Õ¤Õ¥Õ¦Õ§Õ¨ÕªÕ­Õ®Õ¯Õ°Õ±Õ²Õ´ÕµÕ¶Õ·Õ¹ÕºÕ¼Õ½Õ¾Õ¿ÕÀÕÁÕÂÕÄÕÅÕÆÕÇÕÈÕÉÕÊÕËÕÌÕÍÕÎÕÏÕÐÕÑÕÒÕÔÕÕÕÖÕ×ÕØÕÙÕÜÕàÕáÕâÕãÕäÕæÕéÕíÕîÕïÕðÕòÕôÕõÕöÕ÷ÕùÕúÕüÕýÕþÕÿÕ€Ö�Ö‚ÖƒÖ…Ö†Ö‡ÖˆÖ‰Ö‹ÖŒÖ�ÖŽÖ�Ö‘Ö“Ö”Ö•Ö—Ö˜Ö™ÖšÖ›ÖœÖ�ÖŸÖ¥Ö(2&812314986b2f0062b572a6e9476705a5.woff2Ò¯© b588d68bf01929fcf64801c32e548011ðó"Ù¦Ö¨Ö©ÖªÖ«Ö¬Ö­Ö®Ö¯Ö°Ö±Ö³Ö´ÖµÖ¶Ö¸Ö»Ö¼Ö¿ÖÀÖÁÖÂÖÄÖÅÖÈÖÊÖËÖÍÖÎÖÏÖÑÖÒÖÓÖÔÖÕÖÖÖ×ÖØÖÚÖÛÖÜÖÝÖÞÖàÖèÖéÖëÖìÖíÖîÖïÖðÖñÖóÖôÖõÖöÖúÖýÖþրׅ׈׌׎×�×�בהוחיל×�ןנעףץצקרש׬׭װױ׶׸׹׻׽׾×Ã×Ä×Ç×È×É×Ê×Ì×Î×Ð×Ñר×Ú×Ü×Ý×Þ×ß×à×â×ã×ä×å׿×(2&b588d68bf01929fcf64801c32e548011.woff2Ò¯ª 9cbcc73310bab1b036e0d1e3728a4ad7Øž"Ùç×è×é×ì×í×î×ð×ñ×ò×ô×ö×÷×ø×ú×û×ü×þ×€Ø�؂؃؄؉؊؋؎ؒؗ؜Ø�؞ؠإحرضطعغػؼؾؿØÃØÄØÅØÈØËØÌØÍØÎØÏØÑØÒØÓØÖØØØÙØÚØâØãØåØæØçØëØìØíØîØïØñØóØõØ÷ØøØûØüØÿ؀لهيًÙ�َّٕٖٜٗ٘ٚÙ�ٞ٠٢٨٬ٯٰٴٵٶٷٺÙÀÙÂÙÃÙÆÙÇÙÈÙËÙÍÙÎÙÏÙÑÙ(2&9cbcc73310bab1b036e0d1e3728a4ad7.woff2Ò²« adb55326971cf5ee4b3affd1b37ef577̬"ÜÒÙØÙÙÙÚÙÜÙÝÙßÙäÙæÙçÙéÙìÙíÙòÙôÙùÙÿÙ€Ú‚ÚƒÚ…Ú†ÚˆÚ‰ÚŠÚ�Ú�Ú�Ú‘Ú“Ú”Ú•Ú–Ú˜ÚœÚ�ÚŸÚ Ú¡Ú¢Ú£Ú¤Ú¦Ú¨Ú©Ú¬Ú­Ú¯Ú°Ú´Ú·Ú¸ÚºÚ¿ÚÀÚÂÚÄÚÉÚÌÚÐÚÕÚÖÚ×ÚØÚÛÚÝÚßÚáÚâÚäÚåÚçÚèÚëÚìÚíÚðÚñÚòÚóÚõÚöÚúÚûÚýÚþÚÿÚ€Û�ÛƒÛ„Û†ÛŠÛ‹Û�Û�Û�ےۖۗۘۙۚۜۢۥۭ۬۰۱۳۴۶۷۹ۺÛ(2&adb55326971cf5ee4b3affd1b37ef577.woff2Òµ¬ c2d78119858a2266464e16b2b08e5bf9üÔ"߻۽۾ÛÁÛÂÛÃÛÈÛÉÛÊÛÍÛÎÛÏÛÐÛÒÛÓÛÔÛÕÛ×ÛÛÛÜÛßÛâÛãÛçÛéÛíÛïÛðÛòÛôÛøÛýÛþÛÿÛ€Ü�܂܃܄܆܇܈܉܋Ü�ܒܓܕܘܜܞܟܢܧܨܪܮܱܷܹܻܼܰܳܵܶܽܿÜÀÜÁÜÂÜÅÜÆÜÇÜÈÜÉÜËÜÌÜÏÜÐÜÑÜÒÜÕÜ×ÜÙÜÚÜÜÜÝÜàÜáÜâÜãÜäÜåÜæÜèÜéÜêÜìÜíÜðÜñÜòÜóÜôÜõÜöÜ÷ÜøÜùÜúÜûÜüÜýÜ€Ý�Ý‚Ý(2&c2d78119858a2266464e16b2b08e5bf9.woff2Òµ­ 929adbd678897120893d28d4ce2f1529ð–"߄݈݇݊݋݌Ý�ݎݑݒݓݔݕݗݙݚݛݞݠݡݣݤݦݨݩݬݭݮݰݳݵݸݹݾݿÝÀÝÃÝÆÝÈÝÉÝÊÝÍÝÐÝÒÝÖÝØÝÙÝÛÝÜÝÝÝãÝçÝêÝëÝíÝîÝðÝñÝóÝõÝöÝúÝûÝüÝýÝ€ÞƒÞ„Þ…Þ‡ÞˆÞŠÞ‹ÞŒÞ�ÞŽÞ�Þ‘Þ’Þ–Þ—Þ˜Þ™Þ›ÞœÞ�ÞžÞŸÞ¡Þ¥Þ¦Þ§Þ¨Þ®Þ°Þ´Þ·Þ¹ÞºÞ»Þ¼Þ½ÞÀÞÂÞÃÞÄÞÅÞÈÞÉÞÊÞÌÞÎÞÏÞÐÞÒÞÓÞÕÞ(2&929adbd678897120893d28d4ce2f1529.woff2Ò¸® 6e42248212a0f1b7a43c986af93bd65a¤µ"âÖÞ×ÞÚÞÝÞßÞàÞáÞãÞåÞçÞèÞéÞêÞëÞìÞñÞóÞõÞöÞùÞûÞýÞþÞ�߂߃߅ߊߋß�ß�ߑߒߓߔߕߖߘߙߚߛß�ߞߟߢߣߥߦߨߪ߲߫߬߭߯߰ߴߵ߷߸ߺ߻߼߽߾߿ßÄßÅ߯ßÇßÈßÊßËßÌßÍßÎßÏßÐßÓßÔßÕßÖß×ßÙßÚßÛßÜßÝßâßãßåßæßçßèßéßêßìßíßòßóßôßõßöß÷ßøßùßûßýßÿ߀à�à‚àƒà„à‡àˆàŠàŒà(2&6e42248212a0f1b7a43c986af93bd65a.woff2Ò»¯ 8e5c73560527ff869d0bccfd1f51f432Œ¼"å�àŽà�à’à“à”à–à—à™àœàžà¡à¢à¤à¥à©àªà«à¬à­à®à¯à°à±à³à´à¶à·à¸àºà»à¼à½à¿àÀàÁàÂàÅàÆàÇàÈàÉàÊàËàÍàÎàÐàÒàÓàÔàÕàÖà×àÙàÚàÛàÜàßàààáàâàåàæàçàèàêàîàñàòàóàôà÷àùàúàûà�á‚áƒá„á†á‡áˆá‹áŒá�á�á�á‘á“á—á˜ášá›ážáŸá á¡á¢á£á¤á¥á¦á§á¨á©áªá°á²á´áµá¶áºá¾á¿áÄáÅáÆáÇáÉá(2&8e5c73560527ff869d0bccfd1f51f432.woff2Ò»° fe4b8d24e091eed1652eede477fc0174àê"åËáÌáÍáÎáÐáÑáÒáÓáÔáÕáÖá×áÚáÜáÝáÞáàáááâáãáåáêáîáðáñáòáóáõáöáøáúáûáüáþáÿá€â�â‚âƒâ„â…â†â‡âˆâ‹âŒâ�âŽâ�â‘â’â”â—â›âœâ�âžâŸâ â¢â£â¤â¥â§â¨â©âªâ«â¬â­â®â²â³â´âµâ·â¸â¹âºâ»â¼â½â¾â¿âÀâÁâÂâÃâÄâÆâÇâÈâËâÍâÏâÐâÑâÓâÔâÕâÖâ×âØâÚâÛâÝâßâàâáâãâêâëâíâïâðâñâôâõâöâ(2&fe4b8d24e091eed1652eede477fc0174.woff2Ò¾± a348bff59b085bf1d158a88c660d7d3fìÐ"è÷âùâûâüâþâÿâ€ã�ã‚ãƒã…ã†ã‡ãˆã‰ã‹ãŒã�ãŽã�ã‘ã“ã•ã–ãšã›ãœã�ãžã¡ã¢ã£ã¤ã¥ã¦ã§ã©ãªã«ã­ã®ã¯ã°ã²ã´ã¶ã·ã¸ãºã»ã¼ã½ã¿ãÀãÂãÄãÅãÆãÇãÊãËãÌãÍãÏãÐãÑãÓãÖã×ãØãÚãÛãÝãÞãáãâãããäãèãéãêãëãìãïãðãñãòãóãõãöã÷ãøãúãýãÿã€ä�ä‚äƒä„ä…ä‡äˆä‰äŠä‹äŒäŽä�ä‘ä’ä“ä”ä•ä–ä—ä˜ä™äšäœä(2&a348bff59b085bf1d158a88c660d7d3f.woff2Ò¾² b292c9705e7ebf3ca2c963042a057aa0€ð"èžäŸä ä¡ä¢ä£ä¤ä¥ä¦ä§ä©ä«ä®ä¯ä³ä´ä¼äÁäÂäÃäÄäÅäÉäÊäËäÎäÏäÐäÑäÓäÔäÕä×äÚäÜäÞäàäãäääåäèäêäëäìäíäðäñäóäôäöä÷äøäûäüä‚åƒå…å†å‡åˆå‰åŒåŽå�å‘å“å”å•å—å˜å™åšåœå�åžå å¡å£å¤å¥å¦å¨å©åªå«å®å±å²å³åµåºå»å¼å½å¾å¿åÅåÆåÇåÉåÊåËåÌåÏåÑåÓåÔåÕåÖåØåÚåÛåÜåÝåßåâåãåäåååæå(2&b292c9705e7ebf3ca2c963042a057aa0.woff2ÒÁ³ 3f5480bf578b66d86a536b541be0146cäï"ëçåêåëåõåöåþåÿ倿‚æ„æ…æ†æ‡æˆæ‰æ‹æŒæ�æ�æ�æ‘æ’æ”æ˜æšæŸæ æ£æ¤æ¦æ§æ¨æ­æ¯æ°æ²æ³æµæºæ¼æ½æÀæÂæÃæÆæÇæÈæÉæÊæËæÌæÏæÑæÓæÔæÕæÖæØæÙæÚæÛæÜæÝæÞæßæáæâæãæäæåæææçæéæîæñæóæôæöæùæýæÿæ�ç‚çƒç…ç†çˆçŠçŒç�ç�ç�ç’ç“ç”ç•ç—ç˜ç™çšçœç�çžç ç¡ç£ç¤ç¥ç¦ç§ç¨çªç¬ç­ç±ç´çµç¶ç¸ç¹ç¼ç(2&3f5480bf578b66d86a536b541be0146c.woff2ÒÄ´ 491d2c0a07cbefc22005512b6abb9ef3¬¿"î½ç¾ç¿çÁçÃçÄçÅçÆçÇçËçÌçÎçÒçÓçÔçÕçÖç×çØçÚçÛçÜçÝçßçáçâçãçäçæçèçêçëçìçîçïçðçñçóçôçõçöç÷çøçùçúçûçüçýçÿç€è�è‚è„è‡èˆè‹èŒè�èŽè‘è’è“è”è•è–è—è˜è™èœè�èžèŸè è¡è£è¤è§è©è«è­è¯è±è²è·è¸è¹è»è½è¾èÀèÂèÃèÄèÅèÆèÇèÈèÉèÊèÌèÍèÎèÏèÐèÑèÒèÓèÔèÖèØèÝèàèáèâèåèæèçèèèëèìèîèïè(2&491d2c0a07cbefc22005512b6abb9ef3.woff2Òĵ 780e6e17004892fb84b1a7315b4732d4˜¶"îñèòèóèôèõèøèùèúèûèüèýèÿè‚é„é…é†éˆéŠéŒé�é�é‘é’é“é”é•é–é—é˜é™éšé›é�éŸé é¡é¢é¤é¥éªé«é¬é­é®é¯é±é²é³é´éµé¶é·é¸é¹é»é¼é¾é¿éÀéÁéÂéÃéÄéÅéÆéÇéÈéÉéËéÌéÍéÎéÐéÑéÓéÕéÖé×éØéÙéÛéÝéßéáéåéçéèéééêéëéìéíéðéñéòéóéõéøéùéúéûéüéýéþé€ê�ê‚êƒê…ê†ê‡êˆê‰êŠê‹êŽê�ê’ê”ê–ê—ê›ê(2&780e6e17004892fb84b1a7315b4732d4.woff2ÒǶ f76e8c3e9548208b1fe1ac9c6d94b1f6ÄÍ"ñ�êžê ê¡ê£ê¤ê¦ê§êªê®ê´ê¶ê¹ê¼ê½ê¿êÁêÂêÃêÄêÆêÇêÉêÊêÍêÐêÑêÒêÓêÕêÖê×êØêÞêßêàêáêãêäêçêèêéêìêíêîêïêñêóêõê÷êúêûêüêýêþê€ë�ë‚ë„ë…ëˆë‰ëŒë�ëŽë�ë“ë•ë˜ë›ëœëžë¢ë¦ë§ë¨ë©ëªë­ë¶ë·ëºë»ë¿ëÀëÁëÆëËëÌëÎëÏëÐëÑëÓë×ëÚëÜëÝëßëàëáëåëéëìëíëîëïëòëóëõëöë÷ëøëúëûëýë„ì†ì‡ìˆì‰ìŽì�ì(2&f76e8c3e9548208b1fe1ac9c6d94b1f6.woff2ÒÊ· c06b19a5773de5f3b770afa17ed0d175ô–"ô‘ì’ì”ì–ìšìœì�ì£ì¨ì¬ì®ì¯ì±ì²ì¶ì·ì¹ìºì½ìÁìÄìÅìÈìÊìËìÎìÏìÐìÑìÒìÓìÕì×ìÙìÚìÛìÝìàìåìæìèìêìóìôìõìöì÷ìùìúìÿì€íƒí…í‰íŠíŒí�í�í�í’í”í•í—í˜í›íœí�ížíŸí í¡í¢í£í¥í¦í§í¨í©íªí«í¬í­í¯í³íµí¶í·í¹í»í¼í½í¾íÀíÁíÃíÄíÇíÉíËíÌíÓíÕíÙíÚíÝíàíâíæíèíéíêíëíìíííðíóíõíöí÷íúíûíýíÿí€î(2&c06b19a5773de5f3b770afa17ed0d175.woff2Òʸ 77b13beb6e891c7f3042312abd598c96„Ò"ô‚îƒî…î†îŠîŒîŽî�î�î‘î’î“î”î•î–î—î˜î›îœî�îžî¡î£î¤î§îªî«î¬î®î°î±î²î³î´î¹î»î½î¾î¿îÂîÄîÅîÆîÈîÉîÊîËîÌîÍîÎîÏîÒîÓîÔîÕîÖî×îØîÙîÝîßîàîäîçîéîêîíîîîïîðîñîòîóîôîõîöî÷îøîúîûîüî�ï‚ïƒï†ï‡ïˆï‰ïŠï‹ï�ï�ï“ï”ï•ï–ï—ï™ïšï›ïœï�ï¡ï£ï¤ï¦ï¨ï«ï­ï®ï¯ï±ï²ï´ï¶ï·ï¸ï¹ïºï¾ïÀïÁïÂïÃï(2&77b13beb6e891c7f3042312abd598c96.woff2Ò͹ 4e710dea843a3405026cba61bd0168d5ìÙ"÷ÄïÅïÆïÇïÈïÉïÊïËïÌïÎïÏïÐïÑïÒïÓïÔïÕïÖïØïÙïÝïÞïßïàïáïäïæïèïêïðïñïòïôïõï÷ïùïúïûïüïƒð„ð…ð†ð‡ðˆðŠð‹ðŽð�ð�ð“ð•ð™ð›ðžð ð¡ð¢ð¤ð¨ðªð«ð®ð¯ð±ð²ð³ðµð¶ð½ð¿ðÁðÂðÃðÄðÆðÈðÉðÊðËðÍðÏðÑðÓðÔðØðÙðÚðÛðÜðÞðßðàðáðâðãðåðæðçðéðððñðòðóðôðõðöðøðùðúðûðýðþðÿð€ñ�ñ‚ñƒñ„ñ…ñ†ñˆñŠñ‹ñ�ñ(2&4e710dea843a3405026cba61bd0168d5.woff2Òͺ 46315b0fe402b0c0e6aea64bd8da554eÀ™"÷�ñ’ñ”ñ•ñ–ñ™ñ�ñžñ ñ¢ñ¤ñ¦ñ¨ñªñ«ñ¬ñ®ñ¯ñµñ¶ñ·ñ»ñ½ñ¿ñÀñÂñÃñÄñÆñÇñÈñÌñÍñÎñÏñÑñÒñÓñÖñ×ñØñÛñÜñÝñÞñßñàñáñâñäñåñæñéñêñëñíñîñðñññóñõñöñøñùñûñüñþñÿñ€ò‚òƒò„ò‡òˆò‰òŠò‹òŒò�ò�ò�ò‘ò’ò”ò•ò–ò—ò˜òšò›òœò�òŸò ò¡ò¢ò£ò¥ò§ò¨ò©ò­ò®ò¯ò°ò²ò³òµò¶ò·ò¸ò¹ò½ò¿òÂòÃòÄòÅòÇòÊòËòÌòÍòÎòÏò(2&46315b0fe402b0c0e6aea64bd8da554e.woff2Òл 329df54e22813e4353b6120897a02ce8ôæ"úÐòÑòÒòÔòØòÙòáòãòäòæòéòêòëòìòîòðòñòòòóòôòõòöòùòûòüòýòþò‚óƒó†ó‡óˆó‰ó‹óŒó�ó‘ó’ó“ó”ó•ó–ó—ó˜ó™ó›óœó�óžóŸó ó¡ó¢ó£ó¤ó¥ó¦ó¨ó©ó«ó¬ó­ó¯ó²ó´óµó¶ó·ó¸ó¼óÂóÄóÅóÇóÊóÌóÎóÏóÐóÓóÔóÖó×óÙóÚóÛóÜóÝóÞóàóáóâóåóèóêóìóîóñóòóóóôóõóöó÷óùóúóüóþóÿó�ô„ô‡ô‰ôŠôŒô�ô�ô‘ô’ô“ô•ô–ô˜ô™ô›ôœô(2&329df54e22813e4353b6120897a02ce8.woff2Òм 08f255f1288af4793a4d1c065448dcb5¤µ"ú�ô¡ô¢ô¤ô¥ô¦ô§ô¨ô©ôªô«ô¬ô­ô¯ô°ô²ô´ôµô¶ô¸ôºô¾ôÀôÁôÂôÃôÄôÅôÇôÈôÉôÊôËôÏôÐôÒôÓôÔôÕôÖôØôÙôÚôÛôÜôÝôÞôßôàôãôäôåôæôçôèôêôëôìôîôïôñôòôóôõôûôüôýôþô‚õ…õ‡õ‰õŠõ‹õŒõŽõ�õ�õ“õ”õ™õšõ›õžõ¡õ¢õ£õ¤õ§õ«õ°õ±õ²õ´õµõ·õ¸õ¹õ»õ¼õ½õ¾õÀõÁõÂõÃõÆõÉõÌõÍõÎõÏõÐõÑõÒõÓõÔõÕõ×õØõÚõÛõÜõÝõáõâõ(2&08f255f1288af4793a4d1c065448dcb5.woff2ÒÓ½ 04b13c15f5dbd2da5489cbc80fd809f8œ‘"ýäõçõèõéõêõëõìõîõðõñõòõóõôõõõ÷õøõûõüõþõ€ö�ö‚ö…ö‡ö‰öŒö�öŽö�ö’ö“ö–ö—ö˜öšöœö�öŸö¡ö¢ö£ö§ö©ö­ö¯ö°ö²ö´öµö¶ö·ö¹ö»ö½ö¿öÀöÁöÂöÃöÄöÈöÊöÎöÓöÕö×öÙöÜöÞößöáöãöäöåöæöèöéöêöëöìöíöïöðöóöôöööøöúöüöýöÿö�÷‚÷ƒ÷„÷†÷‡÷ˆ÷‰÷Š÷Œ÷Ž÷‘÷’÷“÷–÷˜÷™÷š÷›÷ž÷Ÿ÷ ÷£÷¤÷¥÷®÷¯÷°÷²÷³÷µ÷¶÷·÷¹÷º÷»÷(2&04b13c15f5dbd2da5489cbc80fd809f8.woff2ÒÖ¾ 2794784b5d32662ab9727d8f016ec9b4Ôö"€¼÷½÷¾÷¿÷Â÷Ã÷Å÷È÷Ê÷Í÷Î÷Ï÷Ð÷Ò÷Ô÷Õ÷Ö÷×÷Ø÷Û÷Ü÷Þ÷ß÷à÷â÷ã÷ç÷è÷ë÷ì÷í÷ï÷ð÷ò÷ô÷õ÷ö÷ø÷ù÷ú÷û÷ý÷ÿ÷�ø‚øƒø„ø…ø†øˆø‰øŠøŽø�ø‘ø’ø“ø”ø•ø—ø˜ø™øšø›øœø�ø ø¢ø¤ø¥ø¨ø©ø¬ø­ø®ø¯ø°ø±ø²ø³ø´øµø¶ø·ø¹øºø»ø¼ø½øÂøÄøÅøÆøÇøÈøÉøÊøËøÎøÏøÐøÑøÒøÓøÔøÕøÖø×øØøÙøÚøÛøÝøÞøáøâøãøåøæøçøèøëøíøïøðøñøõøöø(2&2794784b5d32662ab9727d8f016ec9b4.woff2ÒÖ¿ e173ba4d714c79c1c0a7642cf540f25eô�"€÷øøøùøúøþøÿø€ù�ù‚ùƒù„ù…ù†ù‡ùˆùŠù‹ùŒù�ùŽù�ù�ù“ù”ù–ù™ùšù›ù ù¡ù£ù¦ù§ù¨ù©ù«ù¬ù­ù¯ù°ù´ù¶ù·ù¸ùºù»ù¿ùÀùÂùÃùÄùÆùËùÎùÏùÐùÑùÒùÓùÔùØùÚùÛùáùâùãùäùåùæùéùêùëùìùíùîùðùñùóùõù÷ùúùüùýùÿù�úƒúŒúŽú�ú‘ú’ú–ú˜ú�úžúŸú£ú¤ú¥ú¦ú¨ú©úªú¬ú­ú®ú´úµú¶ú·ú¸ú»ú½ú¾úÁúÃúÅúÇúÈúÉúÊúËúÌúÍúÏúÑúÒúÓú(2&e173ba4d714c79c1c0a7642cf540f25e.woff2ÒÙÀ 2767e685d68874986db618d1198e49e2ôø"ƒÔúÖú×úØúÙúÚúÜúßúàúãúäúåúçúéúêúëúìúíúïúðúôúõúöúøúúúûúüúýúþúÿú€û‚û„û…û‡û‰ûŠû‹ûŒû�ûŽû�û‘û’û”û•û–û—û˜û™ûšû›û�ûŸû¡û¤û¥û§û¨û©ûªû«û¯û³ûµû¶û·û¼ûÀûÁûÂûÃûÅûÆûÈûÉûÌûÍûÎûÏûÐûÑûÓûÔûÕûÖûÛûÜûßûâûäûåûçûêûëûíûîûðûóûõû÷ûøûúûûûüûýûþûÿû€ü�ü‚üƒü„ü…ü†ü‡üŒü�üŽü�ü’ü“ü”ü•ü–ü—ü˜ü™üšü(2&2767e685d68874986db618d1198e49e2.woff2ÒÙÁ c72c2143526fce3d32b7a56ce6848581Àš"ƒœü ü¡ü¢ü¤ü¥ü¦ü§ü¨ü©üªü¬ü¯ü°ü³ü´ü¸üºü¼ü¿üÀüÂüÄüÈüÉüÊüËüÌüÍüÎüÏüÐüÑüÓüÖü×üØüÙüÛüÜüÝüßüàüãüäüåüæüçüèüëüìüñüòüôüõüöü÷üøüúüûüÿü€ý�ýƒý„ý…ý†ý‡ý‰ý‹ý�ýŽý�ý‘ý’ý”ý•ý—ý™ýšý�ýžý®ý´ý»ý¼ýÖýäýìýùýŠþ�þžþ·þ¹þ»þ¼þ½þ¾þ¿þÀþÁþÃþÆþÇþÈþÉþÊþËþÍþÎþÏþÒþÓþÖþÙþÛþÜþÝþÞþàþãþäþåþæþçþëþìþíþ(2&c72c2143526fce3d32b7a56ce6848581.woff2ÒÜ 15595366238dd48997292eef55a4d68b�¤"†ïþóþöþøþúþûþüþýþÿþ€ÿ‚ÿƒÿ„ÿ‡ÿ‰ÿ�ÿ�ÿ�ÿ‘ÿ’ÿ“ÿ•ÿ–ÿ—ÿ˜ÿ™ÿ›ÿœÿ ÿ¢ÿ¦ÿªÿ«ÿ¬ÿ­ÿ®ÿ±ÿ³ÿ´ÿµÿ·ÿºÿ»ÿ¾ÿÀÿÂÿÃÿÄÿÆÿÇÿÈÿÉÿËÿÍÿÏÿÐÿÑÿÓÿÖÿ×ÿÙÿÚÿÛÿÜÿÝÿÞÿâÿãÿäÿçÿèÿêÿëÿìÿíÿïÿòÿôÿõÿöÿ÷ÿøÿúÿýÿþÿÿÿ‚€‡€ˆ€‰€Š€Ž€�€‘€“€š€›€�€ž€Ÿ€¡€£€¤€«€­€¯€°€²€´€¹€º€¼€¾€À€Á€Ä€Å€Ç€È€É€΀Ï€ЀрӀՀ׀ـۀ܀(2&15595366238dd48997292eef55a4d68b.woff2ÒÜà d823013e88237b0449241d7b7b1d807bˆö"†Ý€߀à€á€â€ã€ä€å€æ€ç€è€ë€ì€í€î€ô€ø€ú€û€ü€��‚�ˆ�Š���Ž�����‘�’�”�•�—�™�ž�£�¦�§�¨�¬�°�³�µ�¶�¸�¹�»�Å�Ç�È�É�Ê�Ë�Ï�Ð�Ñ�Ò�Ó�Ô�Õ�Ø�ß�à�â�ã�æ�î�õ�÷�ù�û�þ�ÿ�€‚�‚ƒ‚„‚‡‚‹‚Œ‚•‚—‚™‚œ‚�‚Ÿ‚ ‚¡‚¢‚¤‚¥‚¦‚§‚¨‚©‚ª‚­‚®‚°‚³‚´‚µ‚·‚º‚»‚¼‚½‚¿‚À‚Á‚‚ÂĂłǂɂ͂ς҂ׂ؂ۂ܂݂ނ߂â‚ã‚ä‚è‚(2&d823013e88237b0449241d7b7b1d807b.woff2ÒßÄ 6c16f251663f30ab1ea3f6c359c7f14f�È"‰ê‚ì‚ï‚ò‚õ‚ö‚÷‚�ƒ„ƒ…ƒ†ƒ‡ƒ‰ƒ‹ƒŒƒ�ƒŽƒ�ƒ’ƒ“ƒ”ƒ•ƒ–ƒ—ƒ™ƒžƒŸƒ¡ƒ¢ƒ¤ƒ¥ƒ§ƒ«ƒ¬ƒ­ƒ®ƒ¯ƒ°ƒ±ƒ²ƒ´ƒµƒ¶ƒ·ƒ¸ƒ¹ƒ¼ƒăŃǃȃ˃΃ЃуÒƒÓƒÔƒÕƒÖƒ׃ÙƒÛƒ܃݃Þƒ߃áƒâƒäƒæƒéƒëƒîƒïƒðƒñƒòƒõƒöƒ÷ƒøƒùƒýƒÿƒƒ„‹„Ž„�„‘„“„•„–„—„˜„™„š„�„ „¤„¥„¦„§„©„®„²„º„¼„½„¿„À„Á„„ÄńƄȄʄ̄̈́΄ЄÑ„Ò„Ó„Ô„Õ„Ö„ׄÛ„Ü„(2&6c16f251663f30ab1ea3f6c359c7f14f.woff2ÒßÅ 7be8abbb2f924f92c4047608cfc27ed1�Ì"‰Ý„Þ„à„á„â„ã„å„ç„é„ê„ì„í„õ„ö„÷„ø„û„ü„€…�…ƒ………†…‡…‰…Œ…�…“…”…•…–…š…›…ž… …¢…£…§…²…µ…¶…º…¼…¿…À…Â…Ã…Å…Æ…É…Ð…Ö…Ù…Ú…Ý…â…è…é…ê…ì…í…î…ð…ò…ó…õ…ö…ø…ú…ü…ý…þ…ÿ…€†І‹†�†�†’†“†–†˜†™†�†ž†Ÿ† †¡†¢†£†¤†¥†¦†©†ª†®†°†·†»†½†¾†¿†Á††ĆņȆˆ̆͆ΆÓ†Õ†Ö†׆؆Ù†݆â†ð†ñ†ò†ó†ô†õ†ö†ù†ú†þ†ÿ†€‡(2&7be8abbb2f924f92c4047608cfc27ed1.woff2ÒâÆ 75b5eefea9d737bbae853c4460bb679b°è"Œ�‡‚‡ƒ‡„‡‡‡ˆ‡‹‡Œ‡�‡�‡�‡‘‡”‡•‡—‡™‡š‡�‡Ÿ‡¡‡£‡¤‡¥‡¦‡¬‡­‡®‡¯‡µ‡»‡¾‡¿‡‡ÇćƇȇɇˇ͇·ЇчÒ‡Ó‡Õ‡ׇÙ‡Ú‡Û‡Þ‡â‡ã‡ä‡æ‡ç‡è‡ë‡ì‡í‡î‡ó‡ô‡õ‡ö‡÷‡ú‡û‡ü‡þ‡ÿ‡€ˆ‚ˆ…ˆˆˆ‰ˆ�ˆ’ˆ“ˆ”ˆ•ˆ–ˆ—ˆ™ˆšˆ›ˆžˆŸˆ ˆ¡ˆ¢ˆ£ˆ©ˆªˆ«ˆ­ˆ®ˆ¯ˆ°ˆ²ˆ³ˆ´ˆ¶ˆ·ˆ¹ˆºˆ»ˆ¾ˆ¿ˆÀˆÁˆˆÈĈňLjȈʈˈ͈̈ΈψЈÓˆÔˆÕˆÖˆ؈݈Þˆ߈(2&75b5eefea9d737bbae853c4460bb679b.woff2ÒâÇ a32afd1f15350365a23ec8042253d164¨¢"Œàˆâˆåˆçˆèˆêˆîˆïˆðˆòˆôˆùˆûˆüˆýˆþˆÿˆ€‰�‰ƒ‰„‰…‰†‰Љ�‰�‰�‰‘‰’‰“‰•‰–‰˜‰š‰›‰�‰Ÿ‰ ‰¢‰£‰¤‰¥‰¦‰§‰¨‰©‰ª‰«‰¬‰­‰®‰°‰±‰³‰µ‰¶‰·‰»‰¾‰‰ÉʼnƉljȉ̉ΉωÒ‰Ô‰Õ‰׉؉Ù‰Ú‰Û‰܉Þ‰á‰â‰ä‰ç‰è‰é‰ê‰ë‰í‰ñ‰ò‰ó‰õ‰ö‰÷‰ø‰ù‰ú‰û‰þ‰€Š�Š‚ŠƒŠ„Š…Š†Š‡ŠˆŠ‰ŠŠŠ‹Š�ŠŽŠ�Š�Š’Š”Š•Š–Š˜Š™Š›ŠœŠ�Š Š¢Š¤Š§Š¨Š©ŠªŠ®Š¯Š(2&a32afd1f15350365a23ec8042253d164.woff2ÒåÈ 27872ec730a984d92b54904f56ab9dacÈå"�°Š±Š²Š³Š´ŠµŠ¶Š¾Š¿ŠÀŠŠÄŠÅŠÇŠËŠÌŠÍŠÏŠЊÑŠÓŠÔŠ׊ÚŠÛŠÜŠÝŠߊàŠáŠãŠåŠæŠçŠëŠìŠîŠïŠðŠñŠóŠõŠöŠøŠüŠýŠÿŠ€‹�‹‚‹ƒ‹†‹‰‹‹‹�‹Ž‹�‹‘‹’‹“‹•‹–‹—‹˜‹™‹š‹�‹ž‹ ‹¡‹¢‹£‹¥‹§‹«‹¬‹­‹±‹²‹³‹´‹µ‹¶‹¸‹»‹¼‹½‹¾‹¿‹À‹‹ËċŋƋNjȋʋˋ̋ыҋԋ֋׋؋ًڋۋދߋà‹á‹â‹ã‹æ‹ç‹è‹ë‹ì‹í‹î‹ï‹ð‹ñ‹ò‹ó‹ô‹õ‹÷‹ø‹ü‹ý‹(2&27872ec730a984d92b54904f56ab9dac.woff2ÒåÉ f19366aaffb120d02a3e6cbe1cab0210ÀÚ"�þ‹€Œ�Œ‚ŒƒŒˆŒ‰ŒŒŒ�ŒŽŒ�Œ�Œ’Œ“Œ”Œ•Œ—Œ˜Œ™Œ›ŒœŒ�ŒŸŒ Œ¡Œ£Œ¤Œ¥Œ¦Œ¨ŒªŒ«Œ¬Œ®Œ¯Œ°Œ±Œ²Œ³Œ´ŒµŒ¶Œ·Œ¹Œ»Œ½Œ¾ŒÀŒÁŒÂŒÃŒÄŒÅŒÆŒÇŒÈŒÉŒÊŒËŒÌŒÒŒÓŒÖŒ׌،ٌ݌àŒáŒãŒäŒåŒæŒèŒéŒêŒíŒðŒòŒóŒôŒõŒöŒ÷ŒøŒƒ�„�…�†�‡�ˆ�‰�Ž�����‘�’�”�–�—�˜�™�š�›�ž�Ÿ� �¡�¢�¥�¦�«�­�®�²�³�·�¸�¹�»�¼�½�¾�¿�Á�Â�Ã�Å�È�Ì�Í�Ò�Ó�(2&f19366aaffb120d02a3e6cbe1cab0210.woff2ÒèÊ 940b8c045992cca6cb0d64b7455e4efcü¶"’Õ�Ö�×�Ú�Ü�Ý�à�á�â�ã�å�æ�ç�è�ê�ë�ì�ï�õ�ö�÷�ü�ý�ÿ��Ž„Ž…Ž‹ŽŒŽŽŽ�Ž�ޑޔޖޙޛŽ�ŽŸŽ Ž¤Ž¦Ž§Ž¨ŽªŽ«Ž¬Ž­Ž¯Ž°Ž²Ž³ŽµŽ¶Ž¸Ž¹ŽºŽ¼Ž½ŽÀŽÁŽÂŽÃŽÄŽÅŽÆŽÊŽËŽÍŽÏŽÐŽÑŽÒŽÔŽÖŽØŽÚŽÛŽÜŽÝŽÞŽáŽâŽçŽéŽêŽëŽìŽíŽïŽñŽòŽóŽõŽ÷ŽùŽúŽÿŽ€���†�‡�‰�Š�Œ�Ž�����‘�’�”�•�–�˜�™�š�›�œ��� �¡�£�¤�¥�¦�§�©�ª�®�°�±�²�´�¶�(2&940b8c045992cca6cb0d64b7455e4efc.woff2ÒèË 81715c69240be3e6904ac86b26a63212€é"’·�¸�¹�¼�¾�¿�Á�Â�Ã�Å�Ç�É�Ì�Í�Ï�Ð�Ô�Õ�Ö�×�Ø�Ù�Ú�Ü�Ý�Þ�ß�á�â�ä�æ�ç�è�é�ë�í�ð�ñ�ó�ô�õ�÷�ø�ú�ü�ý�ÿ�€���‚�„�‡�ˆ�‰�‹�Œ�Ž���’�—�˜�™�š�œ���ž� �¤�¥�¦�§�¨�©�ª�«�¬�­�®�¯�°�³�´�µ�·�¸�º�½�¾�¿�Á�Â�Ã�Ç�È�É�Ê�Ë�Î�Ï�Ð�Ñ�Ò�Õ�Ö�Ø�Ú�Ü�Þ�ß�à�æ�ç�ê�í�ï�ñ�ó�ô�õ�ö�ø�ù�ú�û�ü�€‘ƒ‘†‘‡‘‰‘Š‘Œ‘Ž‘�‘(2&81715c69240be3e6904ac86b26a63212.woff2ÒëÌ 7d5120eabb5eaddcab74c0a7bbc89e43¤º"•�‘‘‘“‘”‘•‘—‘˜‘™‘š‘›‘�‘Ÿ‘ ‘¡‘£‘¥‘¦‘§‘¨‘©‘ª‘¬‘®‘¯‘°‘²‘³‘´‘µ‘¶‘¸‘¹‘º‘»‘½‘¾‘¿‘À‘ÑđǑȑʑˑ̑͑Бёӑ֑בÚ‘Û‘Þ‘à‘á‘æ‘ç‘é‘ê‘ë‘ì‘í‘î‘ï‘ò‘õ‘ö‘÷‘ú‘û‘ý‘ÿ‘€’�’ƒ’„’…’†’‡’ˆ’‰’‹’Œ’�’Ž’�’‘’”’•’–’—’˜’œ’�’ž’Ÿ’ ’¢’£’¤’¦’§’¨’©’¬’­’®’¯’±’µ’·’¹’º’¼’½’¾’¿’À’Â’Ã’Å’Æ’Ç’È’Ê’Ë’Ì’Í’Î’Ï’Ð’Ñ’Ò’Ó’(2&7d5120eabb5eaddcab74c0a7bbc89e43.woff2ÒëÍ 523493e0d15bad904e5536a426464616ÌÕ"•ԒՒגْؒڒےܒá’â’ã’å’ç’è’é’ë’ì’í’î’ð’ñ’ó’ô’õ’ö’÷’ø’ù’ú’ü’ý’þ’€“‚“„“…“‡“ˆ“‰“Š“Œ“�“Ž“�“‘“’“”“•“—“™“š“›“œ“�“ž“Ÿ“ “¢“£“¤“¥“§“¨“©“«“­“®“°“±“³“´“µ“¶“¸“¹“»“¼“¾“Ó͓ӓԓՓדؓٓۓݓߓà“á“â“ä“ç“è“é“ê“ì“í“î“ð“ñ“ò“õ“÷“ù“ú“û“ü“ý“þ“ÿ“„”…”†”‰”‹”�”�”‘”’”””™”š”œ”ž” ”¡”¢”¤”¦”§”¨”©”«”(2&523493e0d15bad904e5536a426464616.woff2ÒîÎ da66bdfe50d47d0347e4f620b3cb2e32˜ú"˜¬”®”¯”°”²”³”µ”·”¸”¹”»”¼”½”¿”À””ÔĔŔǔɔʔ˔͔̔ϔєӔ֔הٔڔܔݔߔä”å”ç”è”ê”ï”ô”ö”÷”ø”ú”û”ý”þ”€•�•‚•ƒ•ˆ•‹•Œ•Ž•�•�•”•–•—•™•›•œ•�•Ÿ•¢•§•©•«•¬•­•®•¯•±•³•´•µ•·•¸•º•»•½•¾•À•Á•Õŕƕȕʕ̕ΕЕӕԕՕٕؕڕݕߕà•ã•å•è•é•ê•ì•ï•ð•ò•ô•õ•ù•û•ý•ÿ•ƒ–†–ˆ–‰–‹–Œ–�–�–‘–’–“–•–˜–š–œ–ž–Ÿ–(2&da66bdfe50d47d0347e4f620b3cb2e32.woff2ÒîÏ 84d5a4111941ee227ed0f1cbda3826b7¬ù"˜¡–¢–£–¤–¥–§–©–ª–­–®–¯–°–±–²–´–µ–¶–·–¸–º–»–¼–½–¿–À––ÖÄ–Å–Æ–Ç–È–Ê–Ë–Ì–Í–ЖÑ–Ò–Ó–Ô–Õ–×–Û–Ý–Þ–ß–à–á–â–ã–ä–å–ç–è–é–ê–í–î–ñ–ò–ó–õ–ö–ø–ù–ú–û–ü–ÿ–�—‚—ƒ—„—…—†—‡—ˆ—‰—‹—Œ—�—�—�—‘—”———˜—™—š—›—�—Ÿ—¬—±—»—Ç—Зê—‰˜ž˜¸˜¹˜º˜»˜¼˜½˜¾˜¿˜À˜˜ØĘŘʘ˘͘ϘјÒ˜Ó˜Ö˜טؘÙ˜Û˜ܘݘÞ˜ߘà˜ã˜ä˜å˜æ˜ç˜(2&84d5a4111941ee227ed0f1cbda3826b7.woff2ÒñÐ a915cb4aa1c6aa3f4b32bef6f8f85c57ø·"›è˜é˜í˜î˜ï˜ð˜ñ˜ò˜ô˜õ˜ö˜÷˜û˜ü˜ý˜þ˜ÿ˜€™�™ƒ™„™†™‡™ˆ™‹™�™Ž™�™�™‘™’™•™–™—™™™š™›™œ™Ÿ™£™¤™¥™¦™­™®™±™µ™¹™¾™Æ™É™Ë™Ì™Í™ΙÏ™Йԙ֙יؙٙۙݙߙå™è™é™ë™î™ï™ð™ñ™ò™ó™õ™ö™÷™ø™ù™ÿ™€š�š‚šƒš†š‡š‰š‹šŒšŽš‘š’š”š•š˜š™šššœš šÑšÒšךßšåšèšéšêšìšîšïšñšòšøšùšúšûšüšýšþšÿš€›‚›ƒ›†›‡›ˆ›‰›Œ›�›Ž›�›�›’›“›–›—›(2&a915cb4aa1c6aa3f4b32bef6f8f85c57.woff2ÒñÑ a20dac01d4ed3a292484f5824e0f86a6ì™"›˜›š›››œ›�›ž› ›¡›¢›¤›¥›¦›§›©›ª›«›¬›­›®›¯›°›¶›·›¹›»›½›À›Á››Å›Ç›È›É›Ê›Í›Лқӛԛ՛؛ٛܛà›â›å›æ›ç›é›í›î›ð›ñ›ò›ô›ö›ü›þ›ÿ›€œ�œ‚œƒœ„œ†œ‡œˆœ‹œ�œŽœ‘œ’œ“œ•œ–œ—œ˜œ™œšœ›œœœ œ¡œ¤œ¥œ¦œ§œ¨œ«œ­œ°œ²œ³œ´œ¶œ·œ¸œ»œ¼œ¾œ¿œÜŜƜ͜ΜÏœМӜԜ֜ל؜ڜۜܜݜޜߜáœâœåœçœèœêœëœîœñœóœõœ÷œøœùœûœýœþœ€�(2&a20dac01d4ed3a292484f5824e0f86a6.woff2ÒôÒ 3c41e5334036c5f785a14837679daca7ij"ž‚�ƒ�„�†�ˆ�Œ�Ž�–�—�˜�™�›���Ÿ� �¢�£�¤�§�¨�©�­�®�°�±�³�´�µ�¶�·�¸�¹�»�¼�½�¾�¿�Á�Â�Ã�Ä�Å�Æ�Ç�È�É�Ï�Ð�Ñ�Ó�Õ�Ö�×�Ø�Ù�Ú�Ü�Ý�Þ�à�á�â�ã�å�æ�ç�è�é�ê�ì�í�î�ï�ð�ñ�ó�ô�õ�ö�÷�ý�ÿ�€ž�ž‚ž„ž†žˆž‹žŒž�žŽž�ž�ž‘ž“ž–ž—ž˜ž™žšž ž¡ž¢ž£ž¤ž§ž¨ž«ž¬ž­ž®ž°ž±ž²ž´žµž¶ž·ž¹žºž¼ž½žÀžÁžÞǞȞʞ˞̞ϞОÑžÒžÓžÕžÖž(2&3c41e5334036c5f785a14837679daca7.woff2ÒôÓ 5a0619bc3aebe115f1bcf803b5f9a4bcˆ÷"žמ؞ٞڞ۞ܞݞޞàžãžåžêž€ŸŒŸ’Ÿ�Ÿ Ÿ¡Ÿ¢Ÿ¤Ÿ¥Ÿ§ŸªŸ¬Ÿ³Ÿ´ŸµŸ·Ÿ¸ŸºŸ»Ÿ¼Ÿ¿ŸÀŸßÆŸÉŸÊŸËŸÌŸÍŸÏŸÒŸÖŸןÚŸàŸáŸãŸçŸìŸïŸñŸòŸôŸõŸöŸúŸûŸüŸþŸÿŸ‡ ˆ Œ Ž “ ˜ œ ¤ ¥ § ¨ © ª « ¬ ° ± ³ ´ · ¹ º ½ ¿ À àÅ Æ È É Ì Ö Ú Ý ß á ä æ ç ê ë ì ï ð ñ ó ö ù û þ …¡†¡‰¡Œ¡�¡Ž¡’¡”¡–¡˜¡š¡œ¡ž¡Ÿ¡ ¡¤¡¥¡§¡¨¡©¡«¡­¡²¡·¡¼¡½¡(2&5a0619bc3aebe115f1bcf803b5f9a4bc.woff2Ò÷Ô 62bdebee3c457e75e00bf13d316c495f¤Á"¡¿¡À¡¡áơȡɡˡ̡͡ҡԡա֡ء١ڡޡà¡ã¡ä¡å¡é¡ê¡ì¡î¡ð¡ñ¡ò¡ó¡ö¡÷¡ù¡ú¡û¡ü¡ÿ¡€¢�¢ƒ¢…¢‡¢ˆ¢Š¢‹¢Œ¢�¢Ž¢�¢�¢‘¢“¢•¢—¢˜¢š¢›¢œ¢�¢Ÿ¢ ¢¡¢¤¢¥¢¦¢¨¢©¢ª¢«¢¬¢®¢³¢µ¢·¢¸¢»¢¼¢½¢¾¢¿¢À¢Á¢¢Ä¢Å¢Ç¢Ñ¢Ó¢Ô¢Õ¢Ö¢Ø¢Ù¢Û¢Ü¢ߢà¢æ¢ç¢è¢ë¢í¢ó¢ú¢û¢ü¢€£�£‚£„£†£ˆ£Š£Ž£�£“£”£•£–£—£˜£™£�£Ÿ£ £¡£¤£¥£¦£§£¨£©£°£±£²£³£¶£·£¸£(2&62bdebee3c457e75e00bf13d316c495f.woff2Ò÷Õ a8225c2ad58f8a44e7af27efd9029c79̆"¡¹£»£¼£½£¾£¿££Ä£Æ£È£Ö£Ú£Û£Þ£ߣà£á£â£å£æ£è£ê£ë£ì£í£î£ï£ð£ñ£ò£ó£ô£ö£ø£û£ü£ý£þ£ÿ£‚¤ƒ¤…¤†¤‡¤Ф‹¤Œ¤ޤ�¤’¤“¤–¤—¤˜¤™¤š¤›¤œ¤�¤Ÿ¤ ¤¡¤¢¤¤¤¨¤©¤ª¤«¤¬¤­¤¯¤±¤²¤µ¤¶¤»¤¼¤Á¤¤äĤƤǤʤˤ̤ΤϤФÒ¤Ó¤Ô¤Ö¤ؤÙ¤ܤݤߤà¤á¤ã¤å¤ç¤è¤é¤ê¤ë¤î¤ï¤ð¤ñ¤ò¤ó¤õ¤ö¤÷¤ù¤ü¤ý¤þ¤�¥‚¥„¥†¥‡¥ˆ¥‰¥Š¥‹¥Œ¥�¥�¥�¥’¥”¥•¥—¥™¥›¥(2&a8225c2ad58f8a44e7af27efd9029c79.woff2ÒúÖ 227ca5d4aae5fa4e0319b3a176a5eafdÈÐ"¤�¥ž¥Ÿ¥¡¥¢¥¤¥§¥­¥¯¥°¥²¥´¥µ¥¶¥¸¥¹¥º¥½¥¾¥¿¥À¥Â¥Ä¥Æ¥É¥Ê¥Ë¥Í¥Î¥Ð¥Ñ¥Ó¥Ô¥Õ¥Ö¥×¥Ø¥Ù¥Ú¥Û¥Ü¥Þ¥à¥á¥â¥ç¥é¥ë¥ì¥í¥ò¥ó¥ô¥õ¥÷¥ù¥ú¥û¥ý¥þ¥ÿ¥€¦‚¦ƒ¦…¦‰¦Ц‹¦Œ¦�¦ަ�¦‘¦“¦”¦–¦—¦œ¦�¦ž¦¡¦£¦¤¦¥¦§¦©¦ª¦¬¦­¦°¦±¦²¦´¦µ¦¶¦·¦¹¦º¦»¦¼¦½¦¿¦¦ĦŦȦɦʦ̦ΦϦЦѦÒ¦Ó¦Õ¦Ö¦צÙ¦Ú¦ܦݦÞ¦ߦà¦á¦â¦ã¦æ¦ç¦è¦ë¦í¦î¦ï¦ñ¦ò¦ó¦ô¦÷¦(2&227ca5d4aae5fa4e0319b3a176a5eafd.woff2Òú× 032265d362db5608347e5ee999a0ff17”µ"¤ø¦ù¦û¦ü¦ý¦ÿ¦€§�§ƒ§…§†§ˆ§‰§‹§Œ§�§ާ�§‘§’§“§”§•§—§™§š§›§œ§�§ž§Ÿ§ §¡§¤§¥§¨§«§­§¯§±§²§´§¶§·§¸§¹§º§»§¼§½§¾§À§Á§§ħŧƧɧ˧ΧϧЧÒ§Ó§Ô§Õ§Ù§Ú§Û§à§ã§å§æ§ç§é§ê§ë§ì§í§î§ï§ð§ñ§ò§ó§ô§ö§ø§ú§û§ü§þ§ÿ§€¨�¨‚¨„¨…¨†¨‡¨ˆ¨‰¨ЍŒ¨�¨ލ�¨‘¨•¨–¨—¨˜¨š¨›¨œ¨�¨ž¨Ÿ¨¡¨¢¨£¨¤¨¥¨©¨ª¨¬¨­¨¯¨°¨±¨´¨¶¨·¨¹¨»¨¼¨½¨À¨Á¨¨(2&032265d362db5608347e5ee999a0ff17.woff2ÒýØ 90450fbe02f473f1877d94a8602e068eÌé"§èŨƨǨȨɨ˨ͨΨϨШÒ¨Ó¨Õ¨Ö¨רبÙ¨Ú¨Û¨ܨݨÞ¨ߨá¨â¨ä¨æ¨ç¨è¨é¨ê¨ì¨î¨ï¨ñ¨ó¨ô¨õ¨ö¨ø¨ú¨û¨€©‚©ƒ©„©‘©–©˜©Ç©Ï©Ó©Ô©Ú©æ©û©œª ª§ª³ª½ªêȪ˪ÕªÚªàªîªôªõªøªùªúªûªüªýªþª�«„«…«‡«ˆ«Š«�«�«‘«•«–«—«™«š«›«œ«�«ž«Ÿ« «¢«¤«¦«§«ª«®«¯«°«²«³«´«µ«·«¸«º«À«Á««Ä«Å«Æ«Ç«É«Í«Ϋϫѫҫӫ׫ث٫ګ۫ݫ߫à«ã«ä«æ«ç«ì«ÿ«(2&90450fbe02f473f1877d94a8602e068e.woff2ÒýÙ 41e941bf6ed5718fab824019e616ed3fЧ"§‡¬“¬˜¬›¬ž¬ ¬£¬¤¬¥¬¦¬§¬¨¬©¬«¬¬¬­¬¯¬°¬·¬¸¬¹¬º¬¾¬Á¬ìʬάϬѬÒ¬Ó¬Ö¬׬Ù¬Ú¬ܬÞ¬à¬å¬æ¬ë¬í¬î¬ï¬ñ¬ù¬ú¬û¬ü¬þ¬ÿ¬€­�­‚­ƒ­„­‡­Œ­‘­’­“­–­š­�­ž­Ÿ­ ­¡­¢­£­¤­¥­¦­©­«­¬­­­®­¯­²­µ­·­º­»­¿­­íÈ­Ê­ЭÑ­Ó­Ô­×­Ø­Ú­Ý­ß­á­ä­å­æ­ç­ë­ì­í­î­ð­ñ­ô­õ­ø­ú­ü­ý­ÿ­‚®ƒ®…®Š®‹®Œ®�®‘®’®”®•®—®˜®™®š®›®�®Ÿ® ®¡®¢®£®¤®¥®¦®(2&41e941bf6ed5718fab824019e616ed3f.woff2Ò€Ú 21d9a3a5e0cb7d5014bea50af47d9e46ˆä"ª¨®©®«®¬®®®¯®±®³®´®µ®¶®·®º®»®¼®¿®À®Á®îŮƮǮɮʮˮ̮ͮήÏ®ЮѮԮծ׮خݮ߮ã®ä®ç®ê®ë®ì®í®î®ï®ð®ñ®ò®õ®÷®ø®ù®ú®û®ý®þ®ÿ®€¯�¯‚¯ƒ¯„¯†¯‡¯ˆ¯‰¯НŒ¯ޝ�¯“¯•¯–¯—¯™¯š¯›¯œ¯ž¯Ÿ¯¡¯¢¯¤¯¥¯¦¯§¯¨¯©¯ª¯¬¯®¯°¯±¯³¯µ¯¶¯·¯¸¯¹¯º¯»¯¼¯¾¯¿¯À¯Á¯¯įůƯǯȯʯͯίϯЯѯÒ¯Ô¯Õ¯Ö¯ׯدÚ¯Û¯߯à¯á¯â¯ã¯ä¯å¯è¯î¯ï¯ð¯ñ¯ò¯ô¯÷¯(2&21d9a3a5e0cb7d5014bea50af47d9e46.woff2Ò€Û f6751c3714a955cdef37887fe3270849Ðñ"ªø¯ù¯ú¯ü¯ý¯þ¯€°„°‰°‹°�°”°•°–°™°š°›°�°ž°Ÿ° °¢°£°¥°§°¨°©°ª°«°¬°®°¯°±°²°³°´°µ°¶°º°¼°½°¾°¿°À°Á°°ðİŰǰȰɰʰ˰аѰÒ°Ô°Õ°Ö°×°Ú°ܰݰß°à°á°ã°ä°æ°è°é°ê°í°î°ò°‹±ޱ’±•±™±£±©±ª±«±¬±­±°±±±²±³±´±µ±·±¸±¹±º±»±½±¾±¿±À±Á±±ñűDZɱʱ˱̱ͱϱбÔ±Ö±×±ܱݱá±ã±ä±å±æ±ì±î±ð±ñ±ó±õ±ö±÷±ø±ù±ú±û±ÿ±€²�²‚²„²†²(2&f6751c3714a955cdef37887fe3270849.woff2Ò€Ü 2e98f778adffe201f29547e0bd99fe00Øí"ª‡²‹²޲�²”²•²–²—²™²œ²�²Ÿ² ²¢²£²¤²¥²¦²§²©²ª²«²¬²­²¯²°²²²´²µ²¶²¸²¹²º²»²½²À²Á²²IJƲDzͲβϲвѲÓ²Ö²زÙ²Ú²Û²ݲß²à²á²ä²æ²ó²ø²ù²û²þ²‚³ƒ³‰³Œ³޳š³›³œ³�³ž³Ÿ³ ³¡³¢³£³¤³¦³§³©³ª³«³¯³°³²³µ³¶³·³¸³¹³º³»³¼³½³¾³¿³À³³óijųƳdzȳɳʳ˳̳ͳγϳÓ³Ö³׳Ú³ܳÞ³à³á³ã³ä³å³æ³ç³è³é³ê³ë³ì³î³ï³ð³ò³ó³ô³õ³ö³÷³ø³ù³(2&2e98f778adffe201f29547e0bd99fe00.woff2ÒƒÝ 66a2a77dfb203c06b32c75b63eca0599¤¦"­ú³û³ü³ý³þ³€´‚´ƒ´„´†´‡´ˆ´‰´Š´‹´Œ´�´‘´’´“´”´•´—´˜´š´›´œ´�´ž´Ÿ´ ´¡´¢´£´¤´¥´¦´§´¨´©´ª´¬´¯´±´²´³´´´µ´¹´º´»´¼´½´¿´Æ´Ç´È´É´Ë´Ì´δдѴҴӴԴִشٴܴݴ޴à´á´ã´æ´ç´è´é´ë´ò´ƒµ‰µ�µ޵”µ•µ™µ¦µ©µªµ«µ¬µ­µ®µ²µ³µ´µµµ¹µ»µ½µ¾µ¿µõĵƵǵȵɵʵ͵εе×µÙµÚµÛµܵݵÞµàµâµãµäµåµçµèµéµêµìµîµðµñµòµóµôµõµöµ÷µøµúµüµ(2&66a2a77dfb203c06b32c75b63eca0599.woff2ÒƒÞ dc465dc4bf5056f90716395c928ef20fœú"­ýµþµÿµ€¶�¶‚¶„¶…¶†¶‡¶‰¶ж‹¶Œ¶�¶޶�¶‘¶’¶”¶•¶–¶—¶˜¶™¶š¶›¶œ¶�¶ž¶ ¶¡¶¤¶¦¶¨¶ª¶«¶¬¶­¶°¶³¶´¶µ¶¶¶·¶¸¶¹¶º¶½¶¾¶¿¶À¶ƶʶ˶̶жÒ¶Ó¶Õ¶Ö¶×¶Ù¶Û¶ܶݶÞ¶ß¶à¶á¶â¶ã¶ä¶å¶æ¶ç¶è¶é¶ê¶ë¶ì¶í¶î¶ð¶ñ¶ò¶ó¶õ¶ö¶ø¶ù¶ú¶û¶ü¶ý¶þ¶ÿ¶€·‚·„·…·†·‡·ˆ·‰·Š·‹·Œ·�·�·“·”·•·–·—·˜·™·›·œ·�·Ÿ· ·¡·¢·£·¤·¥·¦·§·¨·©·¬·¯·°·±·²·³·´·µ·¶···¸·¹·(2&dc465dc4bf5056f90716395c928ef20f.woff2Ò†ß 56091456d132a9f41910f4fcb4fe9a7a°¾"°º·»·¼·½·¾·¿··÷Ä·Å·Æ·È·Ë·Ì·Í·ηÏ·зѷҷӷշطٷڷܷ޷߷à·ã·å·æ·é·ì·í·î·ï·ñ·ò·ó·õ·ö·÷·ø·ù·ú·û·ü·þ·€¸�¸‚¸ƒ¸„¸…¸†¸‡¸Џ‹¸Œ¸ޏ�¸�¸‘¸”¸•¸–¸—¸˜¸™¸š¸›¸œ¸�¸ž¸Ÿ¸¡¸¢¸¤¸¦¸§¸ª¸«¸¬¸®¸¯¸°¸´¸¶¸¸¸º¸¼¸½¸¿¸À¸Á¸¸øĸƸǸʸ˸̸͸θϸиѸÓ¸Õ¸Ù¸Ú¸Û¸ܸÞ¸à¸á¸â¸ã¸ä¸å¸æ¸è¸é¸ê¸ë¸ì¸î¸ï¸ð¸ñ¸ò¸ó¸ô¸õ¸ö¸ù¸û¸ý¸þ¸€¹ƒ¹„¹(2&56091456d132a9f41910f4fcb4fe9a7a.woff2Ò†à 434b40092c487dc3c2ffb57391cbb629Èð"°‰¹йŒ¹�¹“¹–¹—¹˜¹™¹�¹ª¹¬¹¯¹¹¹¾¹¿¹À¹Á¹¹ȹɹѹÒ¹Ú¹Û¹à¹á¹ã¹ä¹æ¹è¹ê¹ë¹ì¹í¹î¹ï¹ð¹ñ¹ò¹õ¹÷¹ø¹ù¹ú¹û¹ü¹ý¹þ¹ÿ¹€º�º‚ºƒº„º…ºˆºŠº‹ºŒº�ºŽº�º�º‘º’º“º”º–º—º˜º™ºšºœºžº º¡º¢º¤º¥º§º©ºªº«º¬º­º®º±º²º³º´ºµº¶º·º¸º¹ººº¼º½º¾ºÀºÁºúĺźƺǺȺɺʺ˺̺ͺκϺкÔºÕºÖº׺غÙºÚºÛºÞºߺâºãºäºåºæºçºèºéºëºíºîºðºñºóºôºõºöº÷º(2&434b40092c487dc3c2ffb57391cbb629.woff2Ò‰á 374213578702eb33d672c57b1531380dÀä"³øºùºúºûºüºýºþºÿº€»�»‚»ƒ»„»…»†»ˆ»Š»‹»Œ»�»Ž»�»�»‘»’»”»•»–»—»™»›»œ»�»ž»Ÿ» »¡»¢»£»¤»¦»§»¨»ª»«»¬»­»®»°»±»²»³»µ»¶»·»¸»¹»º»½»¾»¿»Á»ûĻŻƻǻȻɻʻ˻̻ͻλÏ»лѻһԻջֻػۻܻݻ޻߻à»á»â»ã»ä»ç»è»é»ê»ë»ì»í»î»ð»ñ»ô»õ»ö»÷»û»ü»ý»þ»ÿ»€¼�¼‚¼ƒ¼„¼…¼†¼‡¼ˆ¼‰¼м‹¼�¼޼�¼�¼‘¼’¼“¼”¼–¼—¼˜¼™¼œ¼¤¼§¼®¼°¼´¼»¼¼¼À¼ͼ(2&374213578702eb33d672c57b1531380d.woff2Ò‰â 8fe7cd4425a11a6cb1e0c4099e0e604d¤Ò"³мÒ¼Ó¼Ô¼Ö¼Ù¼ݼß¼à¼á¼â¼å¼î¼ï¼ò¼ô¼õ¼ö¼÷¼ø¼û¼€½�½ƒ½„½…½†½‰½нŒ½�½޽�½�½‘½”½•½–½˜½™½š½›½œ½ž½ ½¡½¢½£½¤½§½¨½ª½«½¬½­½®½¯½°½±½²½³½µ½¶½·½¹½º½¿½À½Á½½ŽƽǽȽʽ˽нÒ½Ó½Õ½Ö½×½Ù½Ú½á½ã½ä½æ½ë½ì½í½î½ð½ñ½ó½õ½ö½ø½ú½€¾�¾‚¾ƒ¾„¾…¾†¾‡¾ˆ¾оŒ¾�¾‘¾’¾”¾•¾–¾˜¾š¾›¾œ¾�¾ž¾Ÿ¾¡¾£¾¤¾¥¾¦¾§¾¨¾©¾ª¾«¾­¾®¾°¾±¾²¾³¾µ¾¶¾¸¾º¾¼¾¿¾(2&8fe7cd4425a11a6cb1e0c4099e0e604d.woff2ÒŒã b61d3ecbb41c5307b1768c2ecb3ceee4Äõ"¶À¾Á¾¾þžƾǾȾɾ̾;Ó¾Õ¾Ö¾×¾ؾÚ¾Û¾ݾÞ¾â¾ã¾ä¾å¾è¾é¾ë¾í¾î¾ï¾ð¾ñ¾ó¾ô¾õ¾ø¾ù¾ú¾û¾ü¾ý¾þ¾�¿‚¿Ž¿�¿‘¿’¿“¿–¿—¿˜¿�¿ž¿¡¿¢¿£¿¤¿¥¿¦¿§¿¨¿©¿ª¿«¿¬¿­¿®¿¯¿°¿±¿²¿³¿´¿µ¿¶¿·¿¸¿¹¿º¿»¿¼¿½¿¾¿¿¿À¿Á¿¿ÿĿſƿǿȿɿʿ˿̿ͿοÏ¿пѿҿӿԿտֿ׿ؿٿڿۿܿݿ޿߿à¿á¿â¿ã¿ä¿å¿æ¿ç¿è¿é¿ê¿ë¿ì¿í¿î¿ï¿ Á¡Á¢Á°Á±Á²Á³Á´ÁµÁ¶Á·Á€Ü�Ü(2&b61d3ecbb41c5307b1768c2ecb3ceee4.woff2Ò”ä 99e86872c58e9c840b6d997f866dee22Ü"B‚܃܄܅܆܇܈܉܊܋ÜâüýÿÐðÑðÒðÓðÔðÕðÖð×ðØðÙð2&99e86872c58e9c840b6d997f866dee22.woff2 \ No newline at end of file diff --git a/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/result.css b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/result.css new file mode 100644 index 00000000..3508a02d --- /dev/null +++ b/internal/embedded/static/vendor/fonts/maple-mono-cn/regular/result.css @@ -0,0 +1,31 @@ +/* Generated By cn-font-split@7.6.6 https://www.npmjs.com/package/cn-font-split +CreateTime: 2025-08-17T03:35:26.050544377+00:00; +Macintosh en FontFamilyName Maple Mono CN +Macintosh en FontSubfamilyName Regular +Macintosh en UniqueFontID Version 7.000-beta36;SUBF;MapleMono-CN-Regular;2024;FL830; +Macintosh en FullFontName Maple Mono CN Regular +Macintosh en VersionString Version 7.000 +Macintosh en PostScriptFontName MapleMono-CN-Regular +Windows en CopyrightNotice Copyright 2022 The Maple Mono Project Authors (https://github.com/subframe7536/maple-font) +Windows en FontFamilyName Maple Mono CN +Windows en FontSubfamilyName Regular +Windows en UniqueFontID Version 7.000-beta36;SUBF;MapleMono-CN-Regular;2024;FL830; +Windows en FullFontName Maple Mono CN Regular +Windows en VersionString Version 7.000 +Windows en PostScriptFontName MapleMono-CN-Regular +Windows en DesignerName subframe7536 +Windows en Description A monospace font with round corner and ligatures +Windows en VendorURL https://github.com/subframe7536 +Windows en DesignerURL https://github.com/subframe7536 +Windows en LicenseDescription This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is available with a FAQ at: https://openfontlicense.org +Windows en LicenseURL https://openfontlicense.org +Windows en Other Broken equals ligatures +Windows en Other Broken compare and equal ligatures +Windows en Other Enable rbitrary tag +Windows en Other Break multiple underscores +Windows en Other Restore the thickness of backslash in escape letters +Windows en Other Relax the conditions for multiple greaters ligatures +Windows en Other Enable double headed arrows and reverse arrows + */ + +@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./99e86872c58e9c840b6d997f866dee22.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+EE02-EE0B,U+FE62,U+FFFD,U+1F850-1F859;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./b61d3ecbb41c5307b1768c2ecb3ceee4.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+9F40-9F43,U+9F45-9F49,U+9F4C-9F4D,U+9F53,U+9F55-9F58,U+9F5A-9F5B,U+9F5D-9F5E,U+9F62-9F65,U+9F68-9F69,U+9F6B,U+9F6D-9F71,U+9F73-9F75,U+9F78-9F7E,U+9F81-9F82,U+9F8E-9F8F,U+9F91-9F93,U+9F96-9F98,U+9F9D-9F9E,U+9FA1-9FEF,U+E0A0-E0A2,U+E0B0-E0B7,U+EE00-EE01;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./8fe7cd4425a11a6cb1e0c4099e0e604d.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+9E50,U+9E52-9E54,U+9E56,U+9E59,U+9E5D,U+9E5F-9E62,U+9E65,U+9E6E-9E6F,U+9E72,U+9E74-9E78,U+9E7B,U+9E80-9E81,U+9E83-9E86,U+9E89-9E8A,U+9E8C-9E91,U+9E94-9E96,U+9E98-9E9C,U+9E9E,U+9EA0-9EA4,U+9EA7-9EA8,U+9EAA-9EB3,U+9EB5-9EB7,U+9EB9-9EBA,U+9EBF-9EC2,U+9EC5-9EC8,U+9ECA-9ECB,U+9ED0,U+9ED2-9ED3,U+9ED5-9ED7,U+9ED9-9EDA,U+9EE1,U+9EE3-9EE4,U+9EE6,U+9EEB-9EEE,U+9EF0-9EF1,U+9EF3,U+9EF5-9EF6,U+9EF8,U+9EFA,U+9F00-9F08,U+9F0A,U+9F0C,U+9F0F,U+9F11-9F12,U+9F14-9F16,U+9F18,U+9F1A-9F1F,U+9F21,U+9F23-9F2B,U+9F2D-9F2E,U+9F30-9F33,U+9F35-9F36,U+9F38,U+9F3A,U+9F3C,U+9F3F;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./374213578702eb33d672c57b1531380d.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+9D78-9D86,U+9D88,U+9D8A-9D92,U+9D94-9D97,U+9D99,U+9D9B-9DA4,U+9DA6-9DA8,U+9DAA-9DAE,U+9DB0-9DB3,U+9DB5-9DBA,U+9DBD-9DBF,U+9DC1,U+9DC3-9DD2,U+9DD4-9DD6,U+9DD8,U+9DDB-9DE4,U+9DE7-9DEE,U+9DF0-9DF1,U+9DF4-9DF7,U+9DFB-9E0B,U+9E0D-9E14,U+9E16-9E19,U+9E1C,U+9E24,U+9E27,U+9E2E,U+9E30,U+9E34,U+9E3B-9E3C,U+9E40,U+9E4D;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./434b40092c487dc3c2ffb57391cbb629.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+9C89-9C8A,U+9C8C,U+9C8F,U+9C93,U+9C96-9C99,U+9C9D,U+9CAA,U+9CAC,U+9CAF,U+9CB9,U+9CBE-9CC2,U+9CC8-9CC9,U+9CD1-9CD2,U+9CDA-9CDB,U+9CE0-9CE1,U+9CE3-9CE4,U+9CE6,U+9CE8,U+9CEA-9CF2,U+9CF5,U+9CF7-9D05,U+9D08,U+9D0A-9D14,U+9D16-9D1A,U+9D1C,U+9D1E,U+9D20-9D22,U+9D24-9D25,U+9D27,U+9D29-9D2E,U+9D31-9D3A,U+9D3C-9D3E,U+9D40-9D41,U+9D43-9D50,U+9D54-9D5B,U+9D5E-9D5F,U+9D62-9D69,U+9D6B,U+9D6D-9D6E,U+9D70-9D71,U+9D73-9D77;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./56091456d132a9f41910f4fcb4fe9a7a.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+9BBA-9BBF,U+9BC2-9BC6,U+9BC8,U+9BCB-9BD3,U+9BD5,U+9BD8-9BDA,U+9BDC,U+9BDE-9BE0,U+9BE3,U+9BE5-9BE6,U+9BE9,U+9BEC-9BEF,U+9BF1-9BF3,U+9BF5-9BFC,U+9BFE,U+9C00-9C07,U+9C0A-9C0C,U+9C0E-9C11,U+9C14-9C1F,U+9C21-9C22,U+9C24,U+9C26-9C27,U+9C2A-9C2C,U+9C2E-9C30,U+9C34,U+9C36,U+9C38,U+9C3A,U+9C3C-9C3D,U+9C3F-9C44,U+9C46-9C47,U+9C4A-9C51,U+9C53,U+9C55,U+9C59-9C5C,U+9C5E,U+9C60-9C66,U+9C68-9C6C,U+9C6E-9C76,U+9C79,U+9C7B,U+9C7D-9C7E,U+9C80,U+9C83-9C84;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./dc465dc4bf5056f90716395c928ef20f.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+9AFD-9B02,U+9B04-9B07,U+9B09-9B0E,U+9B10-9B12,U+9B14-9B1E,U+9B20-9B21,U+9B24,U+9B26,U+9B28,U+9B2A-9B2D,U+9B30,U+9B33-9B3A,U+9B3D-9B40,U+9B46,U+9B4A-9B4C,U+9B50,U+9B52-9B53,U+9B55-9B57,U+9B59,U+9B5B-9B6E,U+9B70-9B73,U+9B75-9B76,U+9B78-9B80,U+9B82,U+9B84-9B8D,U+9B8F,U+9B93-9B99,U+9B9B-9B9D,U+9B9F-9BA9,U+9BAC,U+9BAF-9BB9;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./66a2a77dfb203c06b32c75b63eca0599.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+99FA-99FE,U+9A00,U+9A02-9A04,U+9A06-9A0C,U+9A10-9A15,U+9A17-9A18,U+9A1A-9A2A,U+9A2C,U+9A2F,U+9A31-9A35,U+9A39-9A3D,U+9A3F,U+9A46-9A49,U+9A4B-9A4C,U+9A4E,U+9A50-9A54,U+9A56,U+9A58-9A59,U+9A5C-9A5E,U+9A60-9A61,U+9A63,U+9A66-9A69,U+9A6B,U+9A72,U+9A83,U+9A89,U+9A8D-9A8E,U+9A94-9A95,U+9A99,U+9AA6,U+9AA9-9AAE,U+9AB2-9AB5,U+9AB9,U+9ABB,U+9ABD-9ABF,U+9AC3-9AC4,U+9AC6-9ACA,U+9ACD-9ACE,U+9AD0,U+9AD7,U+9AD9-9ADE,U+9AE0,U+9AE2-9AE5,U+9AE7-9AEA,U+9AEC,U+9AEE,U+9AF0-9AF8,U+9AFA,U+9AFC;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./2e98f778adffe201f29547e0bd99fe00.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+9907,U+990B,U+990E-990F,U+9914-9917,U+9919,U+991C-991D,U+991F-9920,U+9922-9927,U+9929-992D,U+992F-9930,U+9932,U+9934-9936,U+9938-993B,U+993D,U+9940-9942,U+9944,U+9946-9947,U+994D-9951,U+9953,U+9956,U+9958-995B,U+995D,U+995F-9961,U+9964,U+9966,U+9973,U+9978-9979,U+997B,U+997E,U+9982-9983,U+9989,U+998C,U+998E,U+999A-99A4,U+99A6-99A7,U+99A9-99AB,U+99AF-99B0,U+99B2,U+99B5-99C0,U+99C2-99CF,U+99D3,U+99D6-99D7,U+99DA,U+99DC,U+99DE,U+99E0-99E1,U+99E3-99EC,U+99EE-99F0,U+99F2-99F9;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./f6751c3714a955cdef37887fe3270849.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+97F8-97FA,U+97FC-97FE,U+9800,U+9804,U+9809,U+980B,U+980D,U+9814-9816,U+9819-981B,U+981D-9820,U+9822-9823,U+9825,U+9827-982C,U+982E-982F,U+9831-9836,U+983A,U+983C-9845,U+9847-984B,U+9850-9852,U+9854-9857,U+985A,U+985C-985D,U+985F-9861,U+9863-9864,U+9866,U+9868-986A,U+986D-986E,U+9872,U+988B,U+988E,U+9892,U+9895,U+9899,U+98A3,U+98A9-98AD,U+98B0-98B5,U+98B7-98BB,U+98BD-98C3,U+98C5,U+98C7,U+98C9-98CD,U+98CF-98D0,U+98D4,U+98D6-98D7,U+98DC-98DD,U+98E1,U+98E3-98E6,U+98EC,U+98EE,U+98F0-98F1,U+98F3,U+98F5-98FB,U+98FF-9902,U+9904,U+9906;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./21d9a3a5e0cb7d5014bea50af47d9e46.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+9728-9729,U+972B-972C,U+972E-972F,U+9731,U+9733-9737,U+973A-973C,U+973F-9741,U+9743,U+9745-9747,U+9749-9751,U+9754-9755,U+9757-9758,U+975D,U+975F,U+9763-9764,U+9767,U+976A-9772,U+9775,U+9777-977B,U+977D-9784,U+9786-978A,U+978C,U+978E,U+9790,U+9793,U+9795-9797,U+9799-979C,U+979E-979F,U+97A1-97A2,U+97A4-97AA,U+97AC,U+97AE,U+97B0-97B1,U+97B3,U+97B5-97BC,U+97BE-97C2,U+97C4-97C8,U+97CA,U+97CD-97D2,U+97D4-97D8,U+97DA-97DB,U+97DF-97E5,U+97E8,U+97EE-97F2,U+97F4,U+97F7;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./41e941bf6ed5718fab824019e616ed3f.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+9607,U+9613,U+9618,U+961B,U+961E,U+9620,U+9623-9629,U+962B-962D,U+962F-9630,U+9637-963A,U+963E,U+9641,U+9643,U+964A,U+964E-964F,U+9651-9653,U+9656-9657,U+9659-965A,U+965C,U+965E,U+9660,U+9665-9666,U+966B,U+966D-966F,U+9671,U+9679-967C,U+967E-9684,U+9687,U+968C,U+9691-9693,U+9696,U+969A,U+969D-96A6,U+96A9,U+96AB-96AF,U+96B2,U+96B5,U+96B7,U+96BA-96BB,U+96BF,U+96C2-96C3,U+96C8,U+96CA,U+96D0-96D1,U+96D3-96D4,U+96D7-96D8,U+96DA,U+96DD,U+96DF,U+96E1,U+96E4-96E7,U+96EB-96EE,U+96F0-96F1,U+96F4-96F5,U+96F8,U+96FA,U+96FC-96FD,U+96FF,U+9702-9703,U+9705,U+970A-970C,U+9710-9712,U+9714-9715,U+9717-971B,U+971D,U+971F-9726;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./90450fbe02f473f1877d94a8602e068e.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+9443,U+9445-9449,U+944B,U+944D-9450,U+9452-9453,U+9455-945F,U+9461-9462,U+9464,U+9466-946A,U+946C,U+946E-946F,U+9471,U+9473-9476,U+9478,U+947A-947B,U+9480,U+9482-9484,U+9491,U+9496,U+9498,U+94C7,U+94CF,U+94D3-94D4,U+94DA,U+94E6,U+94FB,U+951C,U+9520,U+9527,U+9533,U+953D,U+9543,U+9548,U+954B,U+9555,U+955A,U+9560,U+956E,U+9574-9575,U+9578-957E,U+9581,U+9584-9585,U+9587-9588,U+958A,U+958D,U+9590-9591,U+9595-9597,U+9599-95A0,U+95A2,U+95A4,U+95A6-95A7,U+95AA,U+95AE-95B0,U+95B2-95B5,U+95B7-95B8,U+95BA,U+95C0-95C2,U+95C4-95C7,U+95C9,U+95CD-95CF,U+95D1-95D3,U+95D7-95DB,U+95DD,U+95DF-95E0,U+95E3-95E4,U+95E6-95E7,U+95EC,U+95FF;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./032265d362db5608347e5ee999a0ff17.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+9378-9379,U+937B-937D,U+937F-9381,U+9383,U+9385-9386,U+9388-9389,U+938B-938E,U+9390-9395,U+9397,U+9399-93A1,U+93A4-93A5,U+93A8,U+93AB,U+93AD,U+93AF,U+93B1-93B2,U+93B4,U+93B6-93BE,U+93C0-93C2,U+93C4-93C6,U+93C9,U+93CB,U+93CE-93D0,U+93D2-93D5,U+93D9-93DB,U+93E0,U+93E3,U+93E5-93E7,U+93E9-93F4,U+93F6,U+93F8,U+93FA-93FC,U+93FE-9402,U+9404-940A,U+940C-940F,U+9411,U+9415-9418,U+941A-941F,U+9421-9425,U+9429-942A,U+942C-942D,U+942F-9431,U+9434,U+9436-9437,U+9439,U+943B-943D,U+9440-9442;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./227ca5d4aae5fa4e0319b3a176a5eafd.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+929D-929F,U+92A1-92A2,U+92A4,U+92A7,U+92AD,U+92AF-92B0,U+92B2,U+92B4-92B6,U+92B8-92BA,U+92BD-92C0,U+92C2,U+92C4,U+92C6,U+92C9-92CB,U+92CD-92CE,U+92D0-92D1,U+92D3-92DC,U+92DE,U+92E0-92E2,U+92E7,U+92E9,U+92EB-92ED,U+92F2-92F5,U+92F7,U+92F9-92FB,U+92FD-9300,U+9302-9303,U+9305,U+9309-930F,U+9311,U+9313-9314,U+9316-9317,U+931C-931E,U+9321,U+9323-9325,U+9327,U+9329-932A,U+932C-932D,U+9330-9332,U+9334-9337,U+9339-933D,U+933F,U+9342,U+9344-9345,U+9348-934A,U+934C,U+934E-9353,U+9355-9357,U+9359-935A,U+935C-9363,U+9366-9368,U+936B,U+936D-936F,U+9371-9374,U+9377;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./a8225c2ad58f8a44e7af27efd9029c79.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+91B9,U+91BB-91BF,U+91C2,U+91C4,U+91C6,U+91C8,U+91D6,U+91DA-91DB,U+91DE-91E2,U+91E5-91E6,U+91E8,U+91EA-91F4,U+91F6,U+91F8,U+91FB-91FF,U+9202-9203,U+9205-9207,U+920A-920C,U+920E-920F,U+9212-9213,U+9216-921D,U+921F-9222,U+9224,U+9228-922D,U+922F,U+9231-9232,U+9235-9236,U+923B-923C,U+9241-9244,U+9246-9247,U+924A-924C,U+924E-9250,U+9252-9254,U+9256,U+9258-9259,U+925C-925D,U+925F-9261,U+9263,U+9265,U+9267-926B,U+926E-9273,U+9275-9277,U+9279,U+927C-927E,U+9281-9282,U+9284,U+9286-928D,U+928F-9290,U+9292,U+9294-9295,U+9297,U+9299,U+929B;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./62bdebee3c457e75e00bf13d316c495f.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+90BF-90C0,U+90C2-90C3,U+90C6,U+90C8-90C9,U+90CB-90CD,U+90D2,U+90D4-90D6,U+90D8-90DA,U+90DE,U+90E0,U+90E3-90E5,U+90E9-90EA,U+90EC,U+90EE,U+90F0-90F3,U+90F6-90F7,U+90F9-90FC,U+90FF-9101,U+9103,U+9105,U+9107-9108,U+910A-9111,U+9113,U+9115,U+9117-9118,U+911A-911D,U+911F-9121,U+9124-9126,U+9128-912C,U+912E,U+9133,U+9135,U+9137-9138,U+913B-9142,U+9144-9145,U+9147,U+9151,U+9153-9156,U+9158-9159,U+915B-915C,U+915F-9160,U+9166-9168,U+916B,U+916D,U+9173,U+917A-917C,U+9180-9182,U+9184,U+9186,U+9188,U+918A,U+918E-918F,U+9193-9199,U+919D,U+919F-91A1,U+91A4-91A9,U+91B0-91B3,U+91B6-91B8;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./5a0619bc3aebe115f1bcf803b5f9a4bc.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+8F57-8F5E,U+8F60,U+8F63,U+8F65,U+8F6A,U+8F80,U+8F8C,U+8F92,U+8F9D,U+8FA0-8FA2,U+8FA4-8FA5,U+8FA7,U+8FAA,U+8FAC,U+8FB3-8FB5,U+8FB7-8FB8,U+8FBA-8FBC,U+8FBF-8FC0,U+8FC3,U+8FC6,U+8FC9-8FCD,U+8FCF,U+8FD2,U+8FD6-8FD7,U+8FDA,U+8FE0-8FE1,U+8FE3,U+8FE7,U+8FEC,U+8FEF,U+8FF1-8FF2,U+8FF4-8FF6,U+8FFA-8FFC,U+8FFE-8FFF,U+9007-9008,U+900C,U+900E,U+9013,U+9018,U+901C,U+9024-9025,U+9027-902C,U+9030-9031,U+9033-9034,U+9037,U+9039-903A,U+903D,U+903F-9040,U+9043,U+9045-9046,U+9048-9049,U+904C,U+9056,U+905A,U+905D,U+905F,U+9061,U+9064,U+9066-9067,U+906A-906C,U+906F-9071,U+9073,U+9076,U+9079,U+907B,U+907E,U+9085-9086,U+9089,U+908C-908E,U+9092,U+9094,U+9096,U+9098,U+909A,U+909C,U+909E-90A0,U+90A4-90A5,U+90A7-90A9,U+90AB,U+90AD,U+90B2,U+90B7,U+90BC-90BD;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./3c41e5334036c5f785a14837679daca7.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+8E82-8E84,U+8E86,U+8E88,U+8E8C,U+8E8E,U+8E96-8E99,U+8E9B,U+8E9D,U+8E9F-8EA0,U+8EA2-8EA4,U+8EA7-8EA9,U+8EAD-8EAE,U+8EB0-8EB1,U+8EB3-8EB9,U+8EBB-8EBF,U+8EC1-8EC9,U+8ECF-8ED1,U+8ED3,U+8ED5-8EDA,U+8EDC-8EDE,U+8EE0-8EE3,U+8EE5-8EEA,U+8EEC-8EF1,U+8EF3-8EF7,U+8EFD,U+8EFF-8F02,U+8F04,U+8F06,U+8F08,U+8F0B-8F11,U+8F13,U+8F16-8F1A,U+8F20-8F24,U+8F27-8F28,U+8F2B-8F2E,U+8F30-8F32,U+8F34-8F37,U+8F39-8F3A,U+8F3C-8F3D,U+8F40-8F41,U+8F43,U+8F47-8F48,U+8F4A-8F4C,U+8F4F-8F53,U+8F55-8F56;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./a20dac01d4ed3a292484f5824e0f86a6.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+8D98,U+8D9A-8D9E,U+8DA0-8DA2,U+8DA4-8DA7,U+8DA9-8DB0,U+8DB6-8DB7,U+8DB9,U+8DBB,U+8DBD,U+8DC0-8DC2,U+8DC5,U+8DC7-8DCA,U+8DCD,U+8DD0,U+8DD2-8DD5,U+8DD8-8DD9,U+8DDC,U+8DE0,U+8DE2,U+8DE5-8DE7,U+8DE9,U+8DED-8DEE,U+8DF0-8DF2,U+8DF4,U+8DF6,U+8DFC,U+8DFE-8E04,U+8E06-8E08,U+8E0B,U+8E0D-8E0E,U+8E11-8E13,U+8E15-8E1C,U+8E20-8E21,U+8E24-8E28,U+8E2B,U+8E2D,U+8E30,U+8E32-8E34,U+8E36-8E38,U+8E3B-8E3C,U+8E3E-8E3F,U+8E43,U+8E45-8E46,U+8E4D-8E50,U+8E53-8E54,U+8E56-8E58,U+8E5A-8E5F,U+8E61-8E62,U+8E65,U+8E67-8E68,U+8E6A-8E6B,U+8E6E,U+8E71,U+8E73,U+8E75,U+8E77-8E79,U+8E7B,U+8E7D-8E7E,U+8E80;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./a915cb4aa1c6aa3f4b32bef6f8f85c57.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+8C68-8C69,U+8C6D-8C72,U+8C74-8C77,U+8C7B-8C81,U+8C83-8C84,U+8C86-8C88,U+8C8B,U+8C8D-8C92,U+8C95-8C97,U+8C99-8C9C,U+8C9F,U+8CA3-8CA6,U+8CAD-8CAE,U+8CB1,U+8CB5,U+8CB9,U+8CBE,U+8CC6,U+8CC9,U+8CCB-8CD0,U+8CD4,U+8CD6-8CD9,U+8CDB,U+8CDD,U+8CDF,U+8CE5,U+8CE8-8CE9,U+8CEB,U+8CEE-8CF3,U+8CF5-8CF9,U+8CFF-8D03,U+8D06-8D07,U+8D09,U+8D0B-8D0C,U+8D0E,U+8D11-8D12,U+8D14-8D15,U+8D18-8D1A,U+8D1C,U+8D20,U+8D51-8D52,U+8D57,U+8D5F,U+8D65,U+8D68-8D6A,U+8D6C,U+8D6E-8D6F,U+8D71-8D72,U+8D78-8D80,U+8D82-8D83,U+8D86-8D89,U+8D8C-8D90,U+8D92-8D93,U+8D96-8D97;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./84d5a4111941ee227ed0f1cbda3826b7.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+8B21-8B25,U+8B27,U+8B29-8B2A,U+8B2D-8B32,U+8B34-8B38,U+8B3A-8B3D,U+8B3F-8B40,U+8B42-8B48,U+8B4A-8B4D,U+8B50-8B55,U+8B57,U+8B5B,U+8B5D-8B65,U+8B67-8B6A,U+8B6D-8B6E,U+8B71-8B73,U+8B75-8B76,U+8B78-8B7C,U+8B7F,U+8B81-8B89,U+8B8B-8B8D,U+8B8F-8B91,U+8B94,U+8B97-8B9B,U+8B9D,U+8B9F,U+8BAC,U+8BB1,U+8BBB,U+8BC7,U+8BD0,U+8BEA,U+8C09,U+8C1E,U+8C38-8C40,U+8C42-8C45,U+8C4A-8C4B,U+8C4D,U+8C4F,U+8C51-8C53,U+8C56-8C59,U+8C5B-8C60,U+8C63-8C67;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./da66bdfe50d47d0347e4f620b3cb2e32.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+8A2C,U+8A2E-8A30,U+8A32-8A33,U+8A35,U+8A37-8A39,U+8A3B-8A3D,U+8A3F-8A40,U+8A42-8A45,U+8A47,U+8A49-8A4D,U+8A4F,U+8A51,U+8A53,U+8A56-8A57,U+8A59-8A5A,U+8A5C-8A5D,U+8A5F,U+8A64-8A65,U+8A67-8A68,U+8A6A,U+8A6F,U+8A74,U+8A76-8A78,U+8A7A-8A7B,U+8A7D-8A7E,U+8A80-8A83,U+8A88,U+8A8B-8A8C,U+8A8E-8A90,U+8A94,U+8A96-8A97,U+8A99,U+8A9B-8A9D,U+8A9F,U+8AA2,U+8AA7,U+8AA9,U+8AAB-8AAF,U+8AB1,U+8AB3-8AB5,U+8AB7-8AB8,U+8ABA-8ABB,U+8ABD-8ABE,U+8AC0-8AC1,U+8AC3,U+8AC5-8AC6,U+8AC8,U+8ACA,U+8ACC,U+8ACE,U+8AD0,U+8AD3-8AD5,U+8AD8-8ADA,U+8ADD,U+8ADF-8AE0,U+8AE3,U+8AE5,U+8AE8-8AEA,U+8AEC,U+8AEF-8AF0,U+8AF2,U+8AF4-8AF5,U+8AF9,U+8AFB,U+8AFD,U+8AFF,U+8B03,U+8B06,U+8B08-8B09,U+8B0B-8B0D,U+8B0F,U+8B11-8B13,U+8B15,U+8B18,U+8B1A,U+8B1C,U+8B1E-8B1F;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./523493e0d15bad904e5536a426464616.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+8954-8955,U+8957-895C,U+8961-8963,U+8965,U+8967-8969,U+896B-896E,U+8970-8971,U+8973-897A,U+897C-897E,U+8980,U+8982,U+8984-8985,U+8987-898A,U+898C-898E,U+8990-8992,U+8994-8995,U+8997,U+8999-89A0,U+89A2-89A5,U+89A7-89A9,U+89AB,U+89AD-89AE,U+89B0-89B1,U+89B3-89B6,U+89B8-89B9,U+89BB-89BC,U+89BE,U+89C3,U+89CD,U+89D3-89D5,U+89D7-89D9,U+89DB,U+89DD,U+89DF-89E2,U+89E4,U+89E7-89EA,U+89EC-89EE,U+89F0-89F2,U+89F5,U+89F7,U+89F9-89FF,U+8A04-8A06,U+8A09,U+8A0B,U+8A0D,U+8A0F,U+8A11-8A12,U+8A14,U+8A19-8A1A,U+8A1C,U+8A1E,U+8A20-8A22,U+8A24,U+8A26-8A29,U+8A2B;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./7d5120eabb5eaddcab74c0a7bbc89e43.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+8890-8891,U+8893-8895,U+8897-889B,U+889D,U+889F-88A1,U+88A3,U+88A5-88AA,U+88AC,U+88AE-88B0,U+88B2-88B6,U+88B8-88BB,U+88BD-88C0,U+88C3-88C4,U+88C7-88C8,U+88CA-88CD,U+88D0-88D1,U+88D3,U+88D6-88D7,U+88DA-88DB,U+88DE,U+88E0-88E1,U+88E6-88E7,U+88E9-88EF,U+88F2,U+88F5-88F7,U+88FA-88FB,U+88FD,U+88FF-8901,U+8903-8909,U+890B-890F,U+8911,U+8914-8918,U+891C-8920,U+8922-8924,U+8926-8929,U+892C-892F,U+8931,U+8935,U+8937,U+8939-893A,U+893C-8940,U+8942-8943,U+8945-8948,U+894A-8953;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./81715c69240be3e6904ac86b26a63212.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+87B7-87B9,U+87BC,U+87BE-87BF,U+87C1-87C3,U+87C5,U+87C7,U+87C9,U+87CC-87CD,U+87CF-87D0,U+87D4-87DA,U+87DC-87DF,U+87E1-87E2,U+87E4,U+87E6-87E9,U+87EB,U+87ED,U+87F0-87F1,U+87F3-87F5,U+87F7-87F8,U+87FA,U+87FC-87FD,U+87FF-8802,U+8804,U+8807-8809,U+880B-880C,U+880E-880F,U+8812,U+8817-881A,U+881C-881E,U+8820,U+8824-8830,U+8833-8835,U+8837-8838,U+883A,U+883D-883F,U+8841-8843,U+8847-884B,U+884E-8852,U+8855-8856,U+8858,U+885A,U+885C,U+885E-8860,U+8866-8867,U+886A,U+886D,U+886F,U+8871,U+8873-8876,U+8878-887C,U+8880,U+8883,U+8886-8887,U+8889-888A,U+888C,U+888E-888F;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./940b8c045992cca6cb0d64b7455e4efc.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+86D5-86D7,U+86DA,U+86DC-86DD,U+86E0-86E3,U+86E5-86E8,U+86EA-86EC,U+86EF,U+86F5-86F7,U+86FC-86FD,U+86FF,U+8701,U+8704-8705,U+870B-870C,U+870E-8711,U+8714,U+8716,U+8719,U+871B,U+871D,U+871F-8720,U+8724,U+8726-8728,U+872A-872D,U+872F-8730,U+8732-8733,U+8735-8736,U+8738-873A,U+873C-873D,U+8740-8746,U+874A-874B,U+874D,U+874F-8752,U+8754,U+8756,U+8758,U+875A-875E,U+8761-8762,U+8767,U+8769-876D,U+876F,U+8771-8773,U+8775,U+8777,U+8779-877A,U+877F-8781,U+8786-8787,U+8789-878A,U+878C,U+878E-8792,U+8794-8796,U+8798-879D,U+87A0-87A1,U+87A3-87A7,U+87A9-87AA,U+87AE,U+87B0-87B2,U+87B4,U+87B6;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./f19366aaffb120d02a3e6cbe1cab0210.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+85FE,U+8600-8603,U+8608-8609,U+860C-8610,U+8612-8615,U+8617-8619,U+861B-861D,U+861F-8621,U+8623-8626,U+8628,U+862A-862C,U+862E-8637,U+8639,U+863B,U+863D-863E,U+8640-864C,U+8652-8653,U+8656-8659,U+865D,U+8660-8661,U+8663-8666,U+8668-866A,U+866D,U+8670,U+8672-8678,U+8683-8689,U+868E-8692,U+8694,U+8696-869B,U+869E-86A2,U+86A5-86A6,U+86AB,U+86AD-86AE,U+86B2-86B3,U+86B7-86B9,U+86BB-86BF,U+86C1-86C3,U+86C5,U+86C8,U+86CC-86CD,U+86D2-86D3;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./27872ec730a984d92b54904f56ab9dac.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+8530-8536,U+853E-8540,U+8542,U+8544-8545,U+8547,U+854B-854D,U+854F-8551,U+8553-8554,U+8557,U+855A-855D,U+855F-8561,U+8563,U+8565-8567,U+856B-856C,U+856E-8571,U+8573,U+8575-8576,U+8578,U+857C-857D,U+857F-8583,U+8586,U+8589,U+858B,U+858D-858E,U+8590-8593,U+8595-859A,U+859D-859E,U+85A0-85A3,U+85A5,U+85A7,U+85AB-85AD,U+85B1-85B6,U+85B8,U+85BB-85C0,U+85C2-85C8,U+85CA-85CC,U+85D1-85D2,U+85D4,U+85D6-85DB,U+85DE-85E3,U+85E6-85E8,U+85EB-85F5,U+85F7-85F8,U+85FC-85FD;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./a32afd1f15350365a23ec8042253d164.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+8460,U+8462,U+8465,U+8467-8468,U+846A,U+846E-8470,U+8472,U+8474,U+8479,U+847B-8481,U+8483-8486,U+848A,U+848D,U+848F-8493,U+8495-8496,U+8498,U+849A-849B,U+849D,U+849F-84A0,U+84A2-84AE,U+84B0-84B1,U+84B3,U+84B5-84B7,U+84BB,U+84BE,U+84C2-84C3,U+84C5-84C8,U+84CC,U+84CE-84CF,U+84D2,U+84D4-84D5,U+84D7-84DC,U+84DE,U+84E1-84E2,U+84E4,U+84E7-84EB,U+84ED,U+84F1-84F3,U+84F5-84FB,U+84FE,U+8500-850B,U+850D-8510,U+8512,U+8514-8516,U+8518-8519,U+851B-851D,U+8520,U+8522,U+8524,U+8527-852A,U+852E-852F;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./75b5eefea9d737bbae853c4460bb679b.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+8381-8384,U+8387-8388,U+838B-838D,U+838F-8391,U+8394-8395,U+8397,U+8399-839A,U+839D,U+839F,U+83A1,U+83A3-83A6,U+83AC-83AF,U+83B5,U+83BB,U+83BE-83BF,U+83C2-83C4,U+83C6,U+83C8-83C9,U+83CB,U+83CD-83CE,U+83D0-83D3,U+83D5,U+83D7,U+83D9-83DB,U+83DE,U+83E2-83E4,U+83E6-83E8,U+83EB-83EE,U+83F3-83F7,U+83FA-83FC,U+83FE-8400,U+8402,U+8405,U+8408-8409,U+8410,U+8412-8417,U+8419-841B,U+841E-8423,U+8429-842B,U+842D-8430,U+8432-8434,U+8436-8437,U+8439-843B,U+843E-8445,U+8447-8448,U+844A-8450,U+8453-8456,U+8458,U+845D-845F;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./7be8abbb2f924f92c4047608cfc27ed1.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+825D-825E,U+8260-8263,U+8265,U+8267,U+8269-826A,U+826C-826D,U+8275-8278,U+827B-827C,U+8280-8281,U+8283,U+8285-8287,U+8289,U+828C,U+8290,U+8293-8296,U+829A-829B,U+829E,U+82A0,U+82A2-82A3,U+82A7,U+82B2,U+82B5-82B6,U+82BA,U+82BC,U+82BF-82C0,U+82C2-82C3,U+82C5-82C6,U+82C9,U+82D0,U+82D6,U+82D9-82DA,U+82DD,U+82E2,U+82E8-82EA,U+82EC-82EE,U+82F0,U+82F2-82F3,U+82F5-82F6,U+82F8,U+82FA,U+82FC-8300,U+830A-830B,U+830D,U+8310,U+8312-8313,U+8316,U+8318-8319,U+831D-8326,U+8329-832A,U+832E,U+8330,U+8337,U+833B,U+833D-833F,U+8341-8342,U+8344-8345,U+8348,U+834B-834E,U+8353,U+8355-8359,U+835D,U+8362,U+8370-8376,U+8379-837A,U+837E-8380;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./6c16f251663f30ab1ea3f6c359c7f14f.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+816A,U+816C,U+816F,U+8172,U+8175-8177,U+8181,U+8184-8187,U+8189,U+818B-818E,U+8190,U+8192-8197,U+8199,U+819E-819F,U+81A1-81A2,U+81A4-81A5,U+81A7,U+81AB-81B2,U+81B4-81B9,U+81BC,U+81C4-81C5,U+81C7-81C8,U+81CB,U+81CE,U+81D0-81D7,U+81D9,U+81DB-81DF,U+81E1-81E2,U+81E4,U+81E6,U+81E9,U+81EB,U+81EE-81F2,U+81F5-81F9,U+81FD,U+81FF,U+8203,U+820B,U+820E-820F,U+8211,U+8213,U+8215-821A,U+821D,U+8220,U+8224-8227,U+8229,U+822E,U+8232,U+823A,U+823C-823D,U+823F-8243,U+8245-8246,U+8248,U+824A,U+824C-824E,U+8250-8257,U+825B-825C;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./d823013e88237b0449241d7b7b1d807b.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+805D,U+805F-8068,U+806B-806E,U+8074,U+8078,U+807A-807C,U+8081-8082,U+8088,U+808A,U+808D-8092,U+8094-8095,U+8097,U+8099,U+809E,U+80A3,U+80A6-80A8,U+80AC,U+80B0,U+80B3,U+80B5-80B6,U+80B8-80B9,U+80BB,U+80C5,U+80C7-80CB,U+80CF-80D5,U+80D8,U+80DF-80E0,U+80E2-80E3,U+80E6,U+80EE,U+80F5,U+80F7,U+80F9,U+80FB,U+80FE-8101,U+8103-8104,U+8107,U+810B-810C,U+8115,U+8117,U+8119,U+811C-811D,U+811F-8122,U+8124-812A,U+812D-812E,U+8130,U+8133-8135,U+8137,U+813A-813D,U+813F-8145,U+8147,U+8149,U+814D,U+814F,U+8152,U+8157-8158,U+815B-815F,U+8162-8164,U+8168;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./15595366238dd48997292eef55a4d68b.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+7F6F,U+7F73,U+7F76,U+7F78,U+7F7A-7F7D,U+7F7F-7F80,U+7F82-7F84,U+7F87,U+7F89,U+7F8D,U+7F8F-7F93,U+7F95-7F99,U+7F9B-7F9C,U+7FA0,U+7FA2,U+7FA6,U+7FAA-7FAE,U+7FB1,U+7FB3-7FB5,U+7FB7,U+7FBA-7FBB,U+7FBE,U+7FC0,U+7FC2-7FC4,U+7FC6-7FC9,U+7FCB,U+7FCD,U+7FCF-7FD1,U+7FD3,U+7FD6-7FD7,U+7FD9-7FDE,U+7FE2-7FE4,U+7FE7-7FE8,U+7FEA-7FED,U+7FEF,U+7FF2,U+7FF4-7FF8,U+7FFA,U+7FFD-7FFF,U+8002,U+8007-800A,U+800E-800F,U+8011,U+8013,U+801A-801B,U+801D-801F,U+8021,U+8023-8024,U+802B,U+802D,U+802F-8030,U+8032,U+8034,U+8039-803A,U+803C,U+803E,U+8040-8041,U+8044-8045,U+8047-8049,U+804E-8051,U+8053,U+8055,U+8057,U+8059,U+805B-805C;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./c72c2143526fce3d32b7a56ce6848581.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+7E1C,U+7E20-7E22,U+7E24-7E2A,U+7E2C,U+7E2F-7E30,U+7E33-7E34,U+7E38,U+7E3A,U+7E3C,U+7E3F-7E40,U+7E42,U+7E44,U+7E48-7E51,U+7E53,U+7E56-7E59,U+7E5B-7E5D,U+7E5F-7E60,U+7E63-7E68,U+7E6B-7E6C,U+7E71-7E72,U+7E74-7E78,U+7E7A-7E7B,U+7E7F-7E81,U+7E83-7E87,U+7E89,U+7E8B,U+7E8D-7E8E,U+7E90-7E92,U+7E94-7E95,U+7E97,U+7E99-7E9A,U+7E9D-7E9E,U+7EAE,U+7EB4,U+7EBB-7EBC,U+7ED6,U+7EE4,U+7EEC,U+7EF9,U+7F0A,U+7F10,U+7F1E,U+7F37,U+7F39,U+7F3B-7F41,U+7F43,U+7F46-7F4B,U+7F4D-7F4F,U+7F52-7F53,U+7F56,U+7F59,U+7F5B-7F5E,U+7F60,U+7F63-7F67,U+7F6B-7F6D;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./2767e685d68874986db618d1198e49e2.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+7D54,U+7D56-7D5A,U+7D5C,U+7D5F-7D60,U+7D63-7D65,U+7D67,U+7D69-7D6D,U+7D6F-7D70,U+7D74-7D76,U+7D78,U+7D7A-7D80,U+7D82,U+7D84-7D85,U+7D87,U+7D89-7D8E,U+7D90-7D92,U+7D94-7D9B,U+7D9D,U+7D9F,U+7DA1,U+7DA4-7DA5,U+7DA7-7DAB,U+7DAF,U+7DB3,U+7DB5-7DB7,U+7DBC,U+7DC0-7DC3,U+7DC5-7DC6,U+7DC8-7DC9,U+7DCC-7DD1,U+7DD3-7DD6,U+7DDB-7DDC,U+7DDF,U+7DE2,U+7DE4-7DE5,U+7DE7,U+7DEA-7DEB,U+7DED-7DEE,U+7DF0,U+7DF3,U+7DF5,U+7DF7-7DF8,U+7DFA-7E07,U+7E0C-7E0F,U+7E12-7E1A;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./e173ba4d714c79c1c0a7642cf540f25e.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+7C77-7C7A,U+7C7E-7C88,U+7C8A-7C90,U+7C93-7C94,U+7C96,U+7C99-7C9B,U+7CA0-7CA1,U+7CA3,U+7CA6-7CA9,U+7CAB-7CAD,U+7CAF-7CB0,U+7CB4,U+7CB6-7CB8,U+7CBA-7CBB,U+7CBF-7CC0,U+7CC2-7CC4,U+7CC6,U+7CCB,U+7CCE-7CD4,U+7CD8,U+7CDA-7CDB,U+7CE1-7CE6,U+7CE9-7CEE,U+7CF0-7CF1,U+7CF3,U+7CF5,U+7CF7,U+7CFA,U+7CFC-7CFD,U+7CFF,U+7D01,U+7D03,U+7D0C,U+7D0E-7D0F,U+7D11-7D12,U+7D16,U+7D18,U+7D1D-7D1F,U+7D23-7D26,U+7D28-7D2A,U+7D2C-7D2E,U+7D34-7D38,U+7D3B,U+7D3D-7D3E,U+7D41,U+7D43,U+7D45,U+7D47-7D4D,U+7D4F,U+7D51-7D53;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./2794784b5d32662ab9727d8f016ec9b4.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+7BBC-7BBF,U+7BC2-7BC3,U+7BC5,U+7BC8,U+7BCA,U+7BCD-7BD0,U+7BD2,U+7BD4-7BD8,U+7BDB-7BDC,U+7BDE-7BE0,U+7BE2-7BE3,U+7BE7-7BE8,U+7BEB-7BED,U+7BEF-7BF0,U+7BF2,U+7BF4-7BF6,U+7BF8-7BFB,U+7BFD,U+7BFF,U+7C01-7C06,U+7C08-7C0A,U+7C0E,U+7C10-7C15,U+7C17-7C1D,U+7C20,U+7C22,U+7C24-7C25,U+7C28-7C29,U+7C2C-7C37,U+7C39-7C3D,U+7C42,U+7C44-7C4B,U+7C4E-7C5B,U+7C5D-7C5E,U+7C61-7C63,U+7C65-7C68,U+7C6B,U+7C6D,U+7C6F-7C71,U+7C75-7C76;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./04b13c15f5dbd2da5489cbc80fd809f8.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+7AE4,U+7AE7-7AEC,U+7AEE,U+7AF0-7AF5,U+7AF7-7AF8,U+7AFB-7AFC,U+7AFE,U+7B00-7B02,U+7B05,U+7B07,U+7B09,U+7B0C-7B0E,U+7B10,U+7B12-7B13,U+7B16-7B18,U+7B1A,U+7B1C-7B1D,U+7B1F,U+7B21-7B23,U+7B27,U+7B29,U+7B2D,U+7B2F-7B30,U+7B32,U+7B34-7B37,U+7B39,U+7B3B,U+7B3D,U+7B3F-7B44,U+7B48,U+7B4A,U+7B4E,U+7B53,U+7B55,U+7B57,U+7B59,U+7B5C,U+7B5E-7B5F,U+7B61,U+7B63-7B66,U+7B68-7B6D,U+7B6F-7B70,U+7B73-7B74,U+7B76,U+7B78,U+7B7A,U+7B7C-7B7D,U+7B7F,U+7B81-7B84,U+7B86-7B8A,U+7B8C,U+7B8E,U+7B91-7B93,U+7B96,U+7B98-7B9B,U+7B9E-7BA0,U+7BA3-7BA5,U+7BAE-7BB0,U+7BB2-7BB3,U+7BB5-7BB7,U+7BB9-7BBB;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./08f255f1288af4793a4d1c065448dcb5.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+7A1D,U+7A21-7A22,U+7A24-7A2D,U+7A2F-7A30,U+7A32,U+7A34-7A36,U+7A38,U+7A3A,U+7A3E,U+7A40-7A45,U+7A47-7A4B,U+7A4F-7A50,U+7A52-7A56,U+7A58-7A60,U+7A63-7A68,U+7A6A-7A6C,U+7A6E-7A6F,U+7A71-7A73,U+7A75,U+7A7B-7A7E,U+7A82,U+7A85,U+7A87,U+7A89-7A8C,U+7A8E-7A90,U+7A93-7A94,U+7A99-7A9B,U+7A9E,U+7AA1-7AA4,U+7AA7,U+7AAB,U+7AB0-7AB2,U+7AB4-7AB5,U+7AB7-7AB9,U+7ABB-7ABE,U+7AC0-7AC3,U+7AC6,U+7AC9,U+7ACC-7AD5,U+7AD7-7AD8,U+7ADA-7ADD,U+7AE1-7AE2;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./329df54e22813e4353b6120897a02ce8.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+7950-7952,U+7954,U+7958-7959,U+7961,U+7963-7964,U+7966,U+7969-796C,U+796E,U+7970-7976,U+7979,U+797B-797E,U+7982-7983,U+7986-7989,U+798B-798C,U+7990-7999,U+799B-79A6,U+79A8-79A9,U+79AB-79AD,U+79AF,U+79B2,U+79B4-79B8,U+79BC,U+79C2,U+79C4-79C5,U+79C7,U+79CA,U+79CC,U+79CE-79D0,U+79D3-79D4,U+79D6-79D7,U+79D9-79DE,U+79E0-79E2,U+79E5,U+79E8,U+79EA,U+79EC,U+79EE,U+79F1-79F7,U+79F9-79FA,U+79FC,U+79FE-79FF,U+7A01,U+7A04,U+7A07,U+7A09-7A0A,U+7A0C,U+7A0F-7A13,U+7A15-7A16,U+7A18-7A19,U+7A1B-7A1C;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./46315b0fe402b0c0e6aea64bd8da554e.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+7890,U+7892,U+7894-7896,U+7899,U+789D-789E,U+78A0,U+78A2,U+78A4,U+78A6,U+78A8,U+78AA-78AC,U+78AE-78AF,U+78B5-78B7,U+78BB,U+78BD,U+78BF-78C0,U+78C2-78C4,U+78C6-78C8,U+78CC-78CF,U+78D1-78D3,U+78D6-78D8,U+78DB-78E2,U+78E4-78E6,U+78E9-78EB,U+78ED-78EE,U+78F0-78F1,U+78F3,U+78F5-78F6,U+78F8-78F9,U+78FB-78FC,U+78FE-7900,U+7902-7904,U+7907-790D,U+790F-7912,U+7914-7918,U+791A-791D,U+791F-7923,U+7925,U+7927-7929,U+792D-7930,U+7932-7933,U+7935-7939,U+793D,U+793F,U+7942-7945,U+7947,U+794A-794F;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./4e710dea843a3405026cba61bd0168d5.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+77C4-77CC,U+77CE-77D6,U+77D8-77D9,U+77DD-77E1,U+77E4,U+77E6,U+77E8,U+77EA,U+77F0-77F2,U+77F4-77F5,U+77F7,U+77F9-77FC,U+7803-7808,U+780A-780B,U+780E-7810,U+7813,U+7815,U+7819,U+781B,U+781E,U+7820-7822,U+7824,U+7828,U+782A-782B,U+782E-782F,U+7831-7833,U+7835-7836,U+783D,U+783F,U+7841-7844,U+7846,U+7848-784B,U+784D,U+784F,U+7851,U+7853-7854,U+7858-785C,U+785E-7863,U+7865-7867,U+7869,U+7870-7876,U+7878-787B,U+787D-7886,U+7888,U+788A-788B,U+788F;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./77b13beb6e891c7f3042312abd598c96.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+7702-7703,U+7705-7706,U+770A,U+770C,U+770E-7718,U+771B-771E,U+7721,U+7723-7724,U+7727,U+772A-772C,U+772E,U+7730-7734,U+7739,U+773B,U+773D-773F,U+7742,U+7744-7746,U+7748-774F,U+7752-7759,U+775D,U+775F-7760,U+7764,U+7767,U+7769-776A,U+776D-7778,U+777A-777C,U+7781-7783,U+7786-778B,U+778F-7790,U+7793-7797,U+7799-779D,U+77A1,U+77A3-77A4,U+77A6,U+77A8,U+77AB,U+77AD-77AF,U+77B1-77B2,U+77B4,U+77B6-77BA,U+77BE,U+77C0-77C3;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./c06b19a5773de5f3b770afa17ed0d175.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+7611-7612,U+7614,U+7616,U+761A,U+761C-761D,U+7623,U+7628,U+762C,U+762E-762F,U+7631-7632,U+7636-7637,U+7639-763A,U+763D,U+7641,U+7644-7645,U+7648,U+764A-764B,U+764E-7653,U+7655,U+7657,U+7659-765B,U+765D,U+7660,U+7665-7666,U+7668,U+766A,U+7673-7677,U+7679-767A,U+767F-7680,U+7683,U+7685,U+7689-768A,U+768C-768D,U+768F-7690,U+7692,U+7694-7695,U+7697-7698,U+769B-76A3,U+76A5-76AD,U+76AF,U+76B3,U+76B5-76B7,U+76B9,U+76BB-76BE,U+76C0-76C1,U+76C3-76C4,U+76C7,U+76C9,U+76CB-76CC,U+76D3,U+76D5,U+76D9-76DA,U+76DD,U+76E0,U+76E2,U+76E6,U+76E8-76ED,U+76F0,U+76F3,U+76F5-76F7,U+76FA-76FB,U+76FD,U+76FF-7700;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./f76e8c3e9548208b1fe1ac9c6d94b1f6.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+751D-751E,U+7520-7521,U+7523-7524,U+7526-7527,U+752A,U+752E,U+7534,U+7536,U+7539,U+753C-753D,U+753F,U+7541-7544,U+7546-7547,U+7549-754A,U+754D,U+7550-7553,U+7555-7558,U+755E-7561,U+7563-7564,U+7567-7569,U+756C-756F,U+7571,U+7573,U+7575,U+7577,U+757A-757E,U+7580-7582,U+7584-7585,U+7588-7589,U+758C-758E,U+7590,U+7593,U+7595,U+7598,U+759B-759C,U+759E,U+75A2,U+75A6-75AA,U+75AD,U+75B6-75B7,U+75BA-75BB,U+75BF-75C1,U+75C6,U+75CB-75CC,U+75CE-75D1,U+75D3,U+75D7,U+75DA,U+75DC-75DD,U+75DF-75E1,U+75E5,U+75E9,U+75EC-75EF,U+75F2-75F3,U+75F5-75F8,U+75FA-75FB,U+75FD,U+7604,U+7606-7609,U+760E-760F;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./780e6e17004892fb84b1a7315b4732d4.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+7471-7475,U+7478-747D,U+747F,U+7482,U+7484-7486,U+7488,U+748A,U+748C-748D,U+748F,U+7491-749B,U+749D,U+749F-74A2,U+74A4-74A5,U+74AA-74AF,U+74B1-74B9,U+74BB-74BC,U+74BE-74C9,U+74CB-74CE,U+74D0-74D1,U+74D3,U+74D5-74D9,U+74DB,U+74DD,U+74DF,U+74E1,U+74E5,U+74E7-74ED,U+74F0-74F3,U+74F5,U+74F8-74FE,U+7500-7503,U+7505-750B,U+750E,U+7510,U+7512,U+7514,U+7516-7517,U+751B;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./491d2c0a07cbefc22005512b6abb9ef3.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+73BD-73BF,U+73C1,U+73C3-73C7,U+73CB-73CC,U+73CE,U+73D2-73D8,U+73DA-73DD,U+73DF,U+73E1-73E4,U+73E6,U+73E8,U+73EA-73EC,U+73EE-73F1,U+73F3-73FD,U+73FF-7402,U+7404,U+7407-7408,U+740B-740E,U+7411-7419,U+741C-7421,U+7423-7424,U+7427,U+7429,U+742B,U+742D,U+742F,U+7431-7432,U+7437-7439,U+743B,U+743D-743E,U+7440,U+7442-744A,U+744C-7454,U+7456,U+7458,U+745D,U+7460-7462,U+7465-7468,U+746B-746C,U+746E-746F;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./3f5480bf578b66d86a536b541be0146c.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+72E7,U+72EA-72EB,U+72F5-72F6,U+72FE-7300,U+7302,U+7304-7309,U+730B-730D,U+730F-7312,U+7314,U+7318,U+731A,U+731F-7320,U+7323-7324,U+7326-7328,U+732D,U+732F-7330,U+7332-7333,U+7335,U+733A,U+733C-733D,U+7340,U+7342-7343,U+7346-734C,U+734F,U+7351,U+7353-7356,U+7358-735F,U+7361-7367,U+7369,U+736E,U+7371,U+7373-7374,U+7376,U+7379,U+737D,U+737F,U+7381-7383,U+7385-7386,U+7388,U+738A,U+738C-738D,U+738F-7390,U+7392-7395,U+7397-739A,U+739C-739E,U+73A0-73A1,U+73A3-73A8,U+73AA,U+73AC-73AD,U+73B1,U+73B4-73B6,U+73B8-73B9,U+73BC;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./b292c9705e7ebf3ca2c963042a057aa0.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+721E-7227,U+7229,U+722B,U+722E-722F,U+7233-7234,U+723C,U+7241-7245,U+7249-724B,U+724E-7251,U+7253-7255,U+7257,U+725A,U+725C,U+725E,U+7260,U+7263-7265,U+7268,U+726A-726D,U+7270-7271,U+7273-7274,U+7276-7278,U+727B-727C,U+7282-7283,U+7285-7289,U+728C,U+728E,U+7290-7291,U+7293-7295,U+7297-729A,U+729C-729E,U+72A0-72A1,U+72A3-72A6,U+72A8-72AB,U+72AE,U+72B1-72B3,U+72B5,U+72BA-72BF,U+72C5-72C7,U+72C9-72CC,U+72CF,U+72D1,U+72D3-72D6,U+72D8,U+72DA-72DD,U+72DF,U+72E2-72E6;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./a348bff59b085bf1d158a88c660d7d3f.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+7177,U+7179,U+717B-717C,U+717E-7183,U+7185-7189,U+718B-718E,U+7190-7191,U+7193,U+7195-7196,U+719A-719E,U+71A1-71A7,U+71A9-71AB,U+71AD-71B0,U+71B2,U+71B4,U+71B6-71B8,U+71BA-71BD,U+71BF-71C0,U+71C2,U+71C4-71C7,U+71CA-71CD,U+71CF-71D1,U+71D3,U+71D6-71D8,U+71DA-71DB,U+71DD-71DE,U+71E1-71E4,U+71E8-71EC,U+71EF-71F3,U+71F5-71F8,U+71FA,U+71FD,U+71FF-7205,U+7207-720C,U+720E-720F,U+7211-721A,U+721C;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./fe4b8d24e091eed1652eede477fc0174.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+70CB-70CE,U+70D0-70D7,U+70DA,U+70DC-70DE,U+70E0-70E3,U+70E5,U+70EA,U+70EE,U+70F0-70F3,U+70F5-70F6,U+70F8,U+70FA-70FC,U+70FE-7108,U+710B-710F,U+7111-7112,U+7114,U+7117,U+711B-7120,U+7122-7125,U+7127-712E,U+7132-7135,U+7137-7144,U+7146-7148,U+714B,U+714D,U+714F-7151,U+7153-7158,U+715A-715B,U+715D,U+715F-7161,U+7163,U+716A-716B,U+716D,U+716F-7171,U+7174-7176;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./8e5c73560527ff869d0bccfd1f51f432.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+700D-700E,U+7010,U+7012-7014,U+7016-7017,U+7019,U+701C,U+701E,U+7021-7022,U+7024-7025,U+7029-7031,U+7033-7034,U+7036-7038,U+703A-703D,U+703F-7042,U+7045-704B,U+704D-704E,U+7050,U+7052-7057,U+7059-705C,U+705F-7062,U+7065-7068,U+706A,U+706E,U+7071-7074,U+7077,U+7079-707B,U+7081-7084,U+7086-7088,U+708B-708D,U+708F-7091,U+7093,U+7097-7098,U+709A-709B,U+709E-70AA,U+70B0,U+70B2,U+70B4-70B6,U+70BA,U+70BE-70BF,U+70C4-70C7,U+70C9;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./6e42248212a0f1b7a43c986af93bd65a.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+6F56-6F57,U+6F5A,U+6F5D,U+6F5F-6F61,U+6F63,U+6F65,U+6F67-6F6C,U+6F71,U+6F73,U+6F75-6F76,U+6F79,U+6F7B,U+6F7D-6F7E,U+6F81-6F83,U+6F85,U+6F8A-6F8B,U+6F8F-6F96,U+6F98-6F9B,U+6F9D-6F9F,U+6FA2-6FA3,U+6FA5-6FA6,U+6FA8,U+6FAA-6FAD,U+6FAF-6FB0,U+6FB2,U+6FB4-6FB5,U+6FB7-6FB8,U+6FBA-6FBF,U+6FC4-6FC8,U+6FCA-6FD0,U+6FD3-6FD7,U+6FD9-6FDD,U+6FE2-6FE3,U+6FE5-6FEA,U+6FEC-6FED,U+6FF2-6FF9,U+6FFB,U+6FFD,U+6FFF-7004,U+7007-7008,U+700A,U+700C;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./929adbd678897120893d28d4ce2f1529.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+6E84,U+6E87-6E88,U+6E8A-6E8E,U+6E91-6E95,U+6E97,U+6E99-6E9B,U+6E9E,U+6EA0-6EA1,U+6EA3-6EA4,U+6EA6,U+6EA8-6EA9,U+6EAC-6EAE,U+6EB0,U+6EB3,U+6EB5,U+6EB8-6EB9,U+6EBE-6EC0,U+6EC3,U+6EC6,U+6EC8-6ECA,U+6ECD,U+6ED0,U+6ED2,U+6ED6,U+6ED8-6ED9,U+6EDB-6EDD,U+6EE3,U+6EE7,U+6EEA-6EEB,U+6EED-6EEE,U+6EF0-6EF1,U+6EF3,U+6EF5-6EF6,U+6EFA-6EFD,U+6F00,U+6F03-6F05,U+6F07-6F08,U+6F0A-6F0E,U+6F10-6F12,U+6F16-6F19,U+6F1B-6F1F,U+6F21,U+6F25-6F28,U+6F2E,U+6F30,U+6F34,U+6F37,U+6F39-6F3D,U+6F40,U+6F42-6F45,U+6F48-6F4A,U+6F4C,U+6F4E-6F50,U+6F52-6F53,U+6F55;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./c2d78119858a2266464e16b2b08e5bf9.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+6DBB,U+6DBD-6DBE,U+6DC1-6DC3,U+6DC8-6DCA,U+6DCD-6DD0,U+6DD2-6DD5,U+6DD7,U+6DDB-6DDC,U+6DDF,U+6DE2-6DE3,U+6DE7,U+6DE9,U+6DED,U+6DEF-6DF0,U+6DF2,U+6DF4,U+6DF8,U+6DFD-6E04,U+6E06-6E09,U+6E0B,U+6E0F,U+6E12-6E13,U+6E15,U+6E18,U+6E1C,U+6E1E-6E1F,U+6E22,U+6E27-6E28,U+6E2A,U+6E2E,U+6E30-6E31,U+6E33,U+6E35-6E37,U+6E39,U+6E3B-6E3D,U+6E3F-6E42,U+6E45-6E49,U+6E4B-6E4C,U+6E4F-6E52,U+6E55,U+6E57,U+6E59-6E5A,U+6E5C-6E5D,U+6E60-6E66,U+6E68-6E6A,U+6E6C-6E6D,U+6E70-6E7D,U+6E80-6E82;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./adb55326971cf5ee4b3affd1b37ef577.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+6CD2,U+6CD8-6CDA,U+6CDC-6CDD,U+6CDF,U+6CE4,U+6CE6-6CE7,U+6CE9,U+6CEC-6CED,U+6CF2,U+6CF4,U+6CF9,U+6CFF-6D00,U+6D02-6D03,U+6D05-6D06,U+6D08-6D0A,U+6D0D,U+6D0F-6D11,U+6D13-6D16,U+6D18,U+6D1C-6D1D,U+6D1F-6D24,U+6D26,U+6D28-6D29,U+6D2C-6D2D,U+6D2F-6D30,U+6D34,U+6D37-6D38,U+6D3A,U+6D3F-6D40,U+6D42,U+6D44,U+6D49,U+6D4C,U+6D50,U+6D55-6D58,U+6D5B,U+6D5D,U+6D5F,U+6D61-6D62,U+6D64-6D65,U+6D67-6D68,U+6D6B-6D6D,U+6D70-6D73,U+6D75-6D76,U+6D7A-6D7B,U+6D7D-6D81,U+6D83-6D84,U+6D86,U+6D8A-6D8B,U+6D8D,U+6D8F-6D90,U+6D92,U+6D96-6D9A,U+6D9C,U+6DA2,U+6DA5,U+6DAC-6DAD,U+6DB0-6DB1,U+6DB3-6DB4,U+6DB6-6DB7,U+6DB9-6DBA;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./9cbcc73310bab1b036e0d1e3728a4ad7.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+6BE7-6BE9,U+6BEC-6BEE,U+6BF0-6BF2,U+6BF4,U+6BF6-6BF8,U+6BFA-6BFC,U+6BFE,U+6C00-6C04,U+6C09-6C0B,U+6C0E,U+6C12,U+6C17,U+6C1C-6C1E,U+6C20,U+6C25,U+6C2D,U+6C31,U+6C36-6C37,U+6C39-6C3C,U+6C3E-6C3F,U+6C43-6C45,U+6C48,U+6C4B-6C4F,U+6C51-6C53,U+6C56,U+6C58-6C5A,U+6C62-6C63,U+6C65-6C67,U+6C6B-6C6F,U+6C71,U+6C73,U+6C75,U+6C77-6C78,U+6C7B-6C7C,U+6C7F-6C80,U+6C84,U+6C87,U+6C8A-6C8B,U+6C8D-6C8E,U+6C91,U+6C95-6C98,U+6C9A,U+6C9C-6C9E,U+6CA0,U+6CA2,U+6CA8,U+6CAC,U+6CAF-6CB0,U+6CB4-6CB7,U+6CBA,U+6CC0,U+6CC2-6CC3,U+6CC6-6CC8,U+6CCB,U+6CCD-6CCF,U+6CD1;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./b588d68bf01929fcf64801c32e548011.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+6B26,U+6B28-6B31,U+6B33-6B36,U+6B38,U+6B3B-6B3C,U+6B3F-6B42,U+6B44-6B45,U+6B48,U+6B4A-6B4B,U+6B4D-6B4F,U+6B51-6B58,U+6B5A-6B5E,U+6B60,U+6B68-6B69,U+6B6B-6B71,U+6B73-6B76,U+6B7A,U+6B7D-6B7E,U+6B80,U+6B85,U+6B88,U+6B8C,U+6B8E-6B91,U+6B94-6B95,U+6B97,U+6B99,U+6B9C-6B9D,U+6B9F-6BA0,U+6BA2-6BA3,U+6BA5-6BA9,U+6BAC-6BAD,U+6BB0-6BB1,U+6BB6,U+6BB8-6BB9,U+6BBB,U+6BBD-6BBE,U+6BC3-6BC4,U+6BC7-6BCA,U+6BCC,U+6BCE,U+6BD0-6BD1,U+6BD8,U+6BDA,U+6BDC-6BE0,U+6BE2-6BE6;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./812314986b2f0062b572a6e9476705a5.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+6A88,U+6A8A-6A8D,U+6A8F,U+6A92-6A93,U+6A95-6A96,U+6A98-6A9B,U+6A9D-6A9F,U+6AA1,U+6AA4-6AA8,U+6AAA,U+6AAD-6AB2,U+6AB4-6AB7,U+6AB9-6ABA,U+6ABC-6AC2,U+6AC4-6AD2,U+6AD4-6AD9,U+6ADC,U+6AE0-6AE4,U+6AE6,U+6AE9,U+6AED-6AF0,U+6AF2,U+6AF4-6AF7,U+6AF9-6AFA,U+6AFC-6B03,U+6B05-6B09,U+6B0B-6B0E,U+6B10-6B11,U+6B13-6B15,U+6B17-6B1D,U+6B1F,U+6B25;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./c6e8ac49dfe28a1da4473d051be33a00.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+69E9-69EC,U+69EE-69F1,U+69F4-69FC,U+69FE,U+6A00,U+6A03-6A04,U+6A06-6A09,U+6A0B-6A12,U+6A14-6A16,U+6A1A-6A1D,U+6A20,U+6A22,U+6A24-6A27,U+6A29,U+6A2B-6A2E,U+6A30,U+6A32-6A34,U+6A36-6A37,U+6A3B-6A3C,U+6A3F-6A43,U+6A45-6A46,U+6A49-6A4A,U+6A4C-6A4F,U+6A51-6A57,U+6A5A,U+6A5C-6A5E,U+6A60,U+6A63-6A64,U+6A66-6A6A,U+6A6C-6A70,U+6A72-6A78,U+6A7A-6A7B,U+6A7D-6A7F,U+6A82-6A83,U+6A85-6A87;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./0fa188b0859c058dd741ba575e3a4c27.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+693C,U+693E,U+6940-6941,U+6943-6949,U+694B-6952,U+6955-6956,U+6958-6959,U+695B-695C,U+695F,U+6961-6962,U+6964-6965,U+6967,U+6969-696A,U+696C,U+696F-6970,U+6972-6974,U+6976,U+697A-697B,U+697D-697F,U+6981,U+6983,U+6985,U+698A-698C,U+698E-6993,U+6996-6997,U+6999-699A,U+699D-69A6,U+69A9,U+69AC,U+69AF-69B0,U+69B2-69B3,U+69B5-69B6,U+69B8-69BA,U+69BC-69BE,U+69C0,U+69C2-69C9,U+69CF,U+69D1-69D2,U+69D5-69DA,U+69DC-69DE,U+69E1-69E6;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./eeb512539118d02401a38b88da4714f5.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+689A-689C,U+689E,U+68A0-68A1,U+68A3-68A5,U+68A9-68AC,U+68AE,U+68B1-68B2,U+68B4,U+68B6-68BF,U+68C1,U+68C3,U+68C5-68C8,U+68CA,U+68CC,U+68CE-68D1,U+68D3-68D4,U+68D9,U+68DB-68DE,U+68E1-68E2,U+68E4-68E6,U+68E8-68ED,U+68EF,U+68F3-68F4,U+68F6-68F8,U+68FB,U+68FD-6900,U+6902-6904,U+6906-690A,U+690C,U+6911,U+6913-691E,U+6921-6923,U+6925-692C,U+692E-692F,U+6931-6933,U+6935-6938,U+693A-693B;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./2e9c554387d30897bf1a3431c2470ab2.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+67D6-67D7,U+67DB,U+67DF,U+67E1,U+67E3-67E4,U+67E6-67E8,U+67EA-67EB,U+67ED-67EE,U+67F2,U+67F6-67FC,U+67FE,U+6801-6804,U+6806,U+680D,U+6810,U+6812,U+6814-6815,U+6818-681C,U+681E-6820,U+6822-6828,U+682B-6831,U+6834-6836,U+683A-683B,U+683F,U+6847,U+684B,U+684D,U+684F,U+6852,U+6856-685F,U+686A,U+686C-6873,U+6875,U+6878-6880,U+6882,U+6884,U+6887-688E,U+6890-6892,U+6895-6896,U+6899;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./54436c4eadff7caad3068faba6d3c741.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+670E-670F,U+6711-6713,U+6716,U+6718-671A,U+671C,U+671E,U+6720-6725,U+6729,U+672E,U+6730,U+6732-6733,U+6736-6739,U+673B-673C,U+673E-673F,U+6741,U+6744-6745,U+6747,U+674A-674B,U+674D,U+6752,U+6754-6755,U+6757-675B,U+675D,U+6762-6764,U+6766-6767,U+676B-676C,U+676E,U+6774,U+6776,U+6778-677B,U+677D,U+6780,U+6782-6783,U+6785-6786,U+6788,U+678A,U+678C-678F,U+6791-6794,U+6796,U+6799,U+679B,U+679F-67A1,U+67A4,U+67A6,U+67A9,U+67AC,U+67AE,U+67B1-67B2,U+67B4,U+67B9-67C0,U+67C2,U+67C5-67CE,U+67D5;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./bb5d12b457041727a28e6db87c03b066.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+6667,U+6669-666D,U+6671-6673,U+6675,U+6678-6679,U+667B-667D,U+667F-6681,U+6683,U+6685-6686,U+668A-668B,U+668D-6690,U+6692-6695,U+6698-669C,U+669E-66A1,U+66A3-66A6,U+66A9-66AA,U+66AC-66AD,U+66AF-66B0,U+66B2-66B3,U+66B5-66B8,U+66BA-66BD,U+66BF-66C3,U+66C5-66C6,U+66C8,U+66CA-66D5,U+66D7-66D8,U+66DA,U+66DE-66DF,U+66E1-66E5,U+66E7-66E8,U+66EA-66EB,U+66ED-66EF,U+66F1,U+66F5-66F6,U+66FA-66FB,U+66FD,U+6701-6702,U+6704-6707,U+670C;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./72e51db8975c364a461f6fb1fdb2879f.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+65A6,U+65A8,U+65AA,U+65AE,U+65B1-65B6,U+65B8,U+65BA-65BB,U+65BE-65C0,U+65C2,U+65C7-65CA,U+65CD,U+65D0-65D1,U+65D3-65D5,U+65D8-65DF,U+65E1,U+65E3-65E4,U+65EA-65EB,U+65F2-65F5,U+65F8-65F9,U+65FB-65FF,U+6601,U+6604-6605,U+6607-6609,U+660B,U+660D,U+6610-6612,U+6616-6618,U+661A-661C,U+661E,U+6621-6624,U+6626,U+6629-662C,U+662E,U+6630,U+6632-6633,U+6637-663B,U+663D,U+663F-6640,U+6644-6648,U+664A,U+664D-664E,U+6650-6651,U+6658-6659,U+665B-665C,U+665E,U+6660,U+6662-6663,U+6665;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./fc972e83f1ed87ddd0478afcfd0a4465.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+64E7-64EB,U+64ED-64EE,U+64F3,U+64F5-64F6,U+64F8-64F9,U+64FD,U+64FF,U+6501-6503,U+6505,U+6507-6508,U+650A-650E,U+6510-6511,U+6513,U+6515,U+6517,U+651A,U+651E-6521,U+6526-6529,U+652D,U+6530-6533,U+6537,U+653A,U+653C-653D,U+6540-6544,U+6546-6547,U+654A-654B,U+654D-654E,U+6550,U+6552-6554,U+655A,U+655C,U+655F-6561,U+6564-6565,U+6567-656A,U+656D-656F,U+6571,U+6573,U+6576,U+6579-6581,U+6584-6586,U+6588-658A,U+658D-658F,U+6592,U+6594,U+6596,U+6598,U+659A,U+659D-659E,U+65A0,U+65A2-65A3;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./7bc5be711a9b47a12aeeb4d35ebae10d.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+6425,U+6427-6429,U+642B,U+642E-6433,U+6435,U+6437-6439,U+643B-643C,U+643E,U+6440,U+6442-6443,U+6449,U+644B-6450,U+6453,U+6455-6457,U+6459-645B,U+645D,U+6460-6466,U+6468,U+646A-646C,U+646E,U+6470-6472,U+6474-6475,U+6477,U+647C-6481,U+6483,U+6486,U+6489-648F,U+6494,U+6497-6498,U+649A-649D,U+64A0-64A2,U+64A6-64A8,U+64AA,U+64AF,U+64B1,U+64B4,U+64B6,U+64B9,U+64BD,U+64C3,U+64C6,U+64C8-64C9,U+64CC,U+64CF,U+64D1,U+64D3,U+64D5-64D6,U+64D9,U+64DB-64DD,U+64DF,U+64E1,U+64E3,U+64E5;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./c8ef8c65d6e08ed471c29dbedb4a0739.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+635B-635D,U+6360,U+6364-6366,U+6368,U+636A,U+636C,U+636F-6370,U+6372-6375,U+6378-6379,U+637C-637F,U+6381,U+6385-6386,U+638B,U+638D,U+6391,U+6393-6395,U+6397,U+639A,U+639C-639F,U+63A4,U+63A6,U+63AB,U+63AF,U+63B1-63B2,U+63B5-63B6,U+63B9,U+63BB,U+63BD,U+63BF,U+63C1-63C3,U+63C5,U+63C7-63C8,U+63CA-63CC,U+63D1,U+63D3-63D5,U+63D7-63D9,U+63DC-63DD,U+63DF,U+63E2,U+63E4-63E8,U+63EB-63EC,U+63EF-63F1,U+63F3,U+63F5,U+63F7,U+63F9-63FC,U+63FE,U+6403-6404,U+6406-640A,U+640E,U+6411-6412,U+6415,U+6418-641A,U+641D,U+641F,U+6422-6424;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./a1e5763384071f66e5090146dd74f4b6.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+6281-6283,U+6285-6288,U+628B-6290,U+6294,U+6299,U+629C-629E,U+62A3,U+62A6-62A7,U+62A9-62AA,U+62AD-62B0,U+62B2-62B4,U+62B6-62B8,U+62BA,U+62BE,U+62C0-62C1,U+62C3,U+62CF,U+62D1,U+62D5,U+62DD-62DE,U+62E0-62E1,U+62E4,U+62EA-62EB,U+62F0,U+62F2,U+62F5,U+62F8-62FB,U+6300,U+6303-6306,U+630A-630D,U+630F-6310,U+6312-6315,U+6317-6319,U+631C,U+6326-6327,U+6329,U+632C-632E,U+6330-6331,U+6333-6338,U+633B-633C,U+633F-6341,U+6344,U+6347-6348,U+634A,U+6351-6354,U+6356-635A;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./2b0c33574b30f30f6a5efbe8f6d89ebf.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+61B4-61B5,U+61B8-61BD,U+61BF-61C1,U+61C3-61C6,U+61CE-61D0,U+61D3,U+61D5-61DE,U+61E0-61E2,U+61E4-61E5,U+61E7,U+61E9-61F1,U+61F3-61F4,U+61F9,U+61FB,U+61FD,U+6201-6205,U+6209,U+6213,U+6219,U+621C-621E,U+6220,U+6223,U+6226,U+6228,U+622B,U+622D,U+622F,U+6231,U+6235,U+6238-623C,U+6242,U+6244-6246,U+624A,U+624F-6250,U+6255-6257,U+6259-625A,U+625C-6262,U+6264-6265,U+6268,U+6271-6272,U+6274-6275,U+6277-6278,U+627A-627B,U+627D;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./b816c4213217ebb827ad240302a2ec0d.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+6112-6114,U+6116-6119,U+611D-611E,U+6121-6122,U+6125,U+6129-612A,U+612C-6133,U+6135-6136,U+6138-613D,U+6140-6147,U+6149,U+614F-6150,U+6152-6154,U+6156-6157,U+6159,U+615B-615C,U+615E,U+6160-6161,U+6164-6166,U+6169,U+616C-616D,U+616F,U+6171-6172,U+6174,U+6178-6181,U+6183-6189,U+618C-618D,U+618F,U+6193,U+6195-6199,U+619B-619C,U+619E-61A3,U+61A5-61A6,U+61AA,U+61AD,U+61AF-61B1,U+61B3;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./0b576d019ce5674819f2c2b12bf13e54.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+6048-604A,U+604C,U+604E-604F,U+6051,U+6053-6054,U+6056-6058,U+605B-605C,U+605E-6061,U+6066,U+606E,U+6071-6072,U+6074-6075,U+6077,U+607E,U+6080-6082,U+6086-6088,U+608A-608B,U+608E-6091,U+6093,U+6095,U+6097-6099,U+609C,U+609E,U+60A1-60A2,U+60A4-60A5,U+60A7,U+60A9-60AA,U+60AE,U+60B0,U+60B3,U+60B7,U+60B9-60BA,U+60BE-60C4,U+60C7-60C9,U+60CC-60D0,U+60D2-60D4,U+60D6-60D7,U+60D9,U+60DB,U+60DE,U+60E2-60E5,U+60EA,U+60F5,U+60F7-60F8,U+60FC-60FF,U+6102-6105,U+6107,U+610A-610C,U+6110-6111;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./e92bc613d15c7c556adfbbdbd27371e9.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+5F7E-5F7F,U+5F83,U+5F86,U+5F8D-5F8F,U+5F93-5F94,U+5F96,U+5F9A-5F9B,U+5F9D,U+5F9F,U+5FA2-5FA7,U+5FAB-5FAC,U+5FAF-5FB4,U+5FB6,U+5FB8,U+5FBA-5FBB,U+5FBE-5FC2,U+5FC7-5FC8,U+5FCA-5FCB,U+5FCE,U+5FD3-5FD5,U+5FDA-5FDC,U+5FDE-5FDF,U+5FE2-5FE3,U+5FE5-5FE6,U+5FE8-5FE9,U+5FEC,U+5FEF-5FF0,U+5FF2-5FF4,U+5FF6-5FF7,U+5FF9-5FFA,U+5FFC,U+6007-6009,U+600B-600C,U+6010-6011,U+6013,U+6017-6018,U+601A,U+601E-601F,U+6022-6024,U+602C-602E,U+6030-6034,U+6036-603A,U+603D-603E,U+6040,U+6044-6045,U+6047;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./e0826f03af735acef8cb0e6fc55def40.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+5EC0,U+5EC3,U+5EC5-5EC7,U+5ECB-5ED0,U+5ED4-5ED5,U+5ED7-5ED9,U+5EDC,U+5EDE,U+5EE4-5EE7,U+5EEB,U+5EED-5EF2,U+5EF5,U+5EF8-5EF9,U+5EFB-5EFD,U+5F05-5F07,U+5F09,U+5F0C-5F0E,U+5F10,U+5F14,U+5F16,U+5F19-5F1A,U+5F1C-5F1E,U+5F21-5F24,U+5F28,U+5F2B-5F2C,U+5F2E,U+5F30,U+5F32,U+5F34,U+5F36,U+5F38,U+5F3B,U+5F3D-5F3F,U+5F41-5F47,U+5F49-5F4B,U+5F4D,U+5F4F,U+5F51,U+5F54,U+5F59-5F5C,U+5F5E-5F60,U+5F63,U+5F67-5F68,U+5F6B,U+5F6E-5F6F,U+5F72,U+5F74-5F76,U+5F78,U+5F7A,U+5F7D;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./a2372f8c07ff5b351cc493cca970ae86.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+5DFB-5DFC,U+5DFF-5E00,U+5E04,U+5E07,U+5E09-5E0B,U+5E0D-5E0E,U+5E12-5E13,U+5E17,U+5E1E-5E24,U+5E28-5E2A,U+5E2C,U+5E2F-5E30,U+5E32,U+5E34-5E35,U+5E39-5E3A,U+5E3E-5E3F,U+5E41,U+5E46-5E4B,U+5E4D-5E53,U+5E56,U+5E59-5E5A,U+5E5C-5E5D,U+5E60,U+5E64-5E6A,U+5E6D-5E71,U+5E75,U+5E77,U+5E81-5E83,U+5E85,U+5E88-5E89,U+5E8C-5E8E,U+5E92,U+5E98,U+5E9B,U+5E9D,U+5EA1-5EA4,U+5EA8-5EAA,U+5EAC,U+5EAE-5EB2,U+5EB4,U+5EBA-5EBD,U+5EBF;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./29f09feb4408c30e4f3f5f269014178f.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+5D6D-5D6E,U+5D70-5D73,U+5D75-5D80,U+5D83,U+5D85-5D86,U+5D88-5D96,U+5D98,U+5D9A-5D9C,U+5D9E-5D9F,U+5DA1-5DA6,U+5DA8-5DB6,U+5DB9,U+5DBB,U+5DBE-5DC4,U+5DC6-5DCA,U+5DCC,U+5DCE-5DD1,U+5DD3,U+5DD5,U+5DD7-5DDA,U+5DDC,U+5DDF-5DE0,U+5DE3-5DE4,U+5DEA,U+5DEC-5DED,U+5DF5-5DF6,U+5DF8,U+5DFA;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./d6c3f49720691041d49e833dec25b45a.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+5CDC-5CE0,U+5CE2-5CE3,U+5CE7,U+5CE9,U+5CEB-5CEC,U+5CEE,U+5CF1-5CF3,U+5CF5,U+5CF7-5CFA,U+5CFC,U+5CFE-5D01,U+5D04-5D05,U+5D08-5D0C,U+5D0F-5D13,U+5D15,U+5D18-5D1A,U+5D1C-5D1D,U+5D1F-5D21,U+5D23,U+5D25,U+5D28,U+5D2A-5D2B,U+5D2F-5D33,U+5D35-5D3C,U+5D3F-5D46,U+5D48-5D49,U+5D4D-5D4F,U+5D51-5D57,U+5D59-5D5A,U+5D5C,U+5D5E-5D68,U+5D6A;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./c6ad7d0b708655662b0a05866ff29cfe.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+5C2B,U+5C2D-5C30,U+5C32-5C33,U+5C35-5C36,U+5C43-5C44,U+5C47,U+5C4C,U+5C52-5C54,U+5C56-5C58,U+5C5A-5C5B,U+5C5D,U+5C5F,U+5C67,U+5C69-5C6B,U+5C6D,U+5C70,U+5C72-5C78,U+5C7B-5C7E,U+5C80,U+5C83-5C87,U+5C89-5C8B,U+5C8E-5C8F,U+5C92-5C93,U+5C95,U+5C9D-5CA0,U+5CA4-5CA8,U+5CAA,U+5CAE-5CB0,U+5CB2,U+5CB4,U+5CB6,U+5CB9-5CBC,U+5CBE,U+5CC0,U+5CC2-5CC3,U+5CC5-5CCA,U+5CCC-5CD1,U+5CD3-5CD8,U+5CDA-5CDB;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./fa74af1f62b69ce6e69b6ed86e1807ca.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+5B4B,U+5B4D-5B4F,U+5B52,U+5B56,U+5B5E,U+5B60-5B61,U+5B67-5B68,U+5B6D-5B6F,U+5B72,U+5B74,U+5B76-5B77,U+5B79,U+5B7B-5B7C,U+5B7E,U+5B82,U+5B86,U+5B8A,U+5B8D-5B8E,U+5B90-5B92,U+5B94,U+5B96,U+5B9F,U+5BA7-5BA9,U+5BAC-5BAD,U+5BAF,U+5BB1-5BB2,U+5BB7,U+5BBA-5BBC,U+5BC0-5BC1,U+5BC3,U+5BC8-5BCB,U+5BCD-5BCF,U+5BD1,U+5BD4-5BDC,U+5BE0,U+5BE3,U+5BEA,U+5BED,U+5BEF,U+5BF1-5BF4,U+5BF7,U+5BFD-5BFE,U+5C00,U+5C02-5C03,U+5C05,U+5C0C,U+5C10,U+5C12-5C13,U+5C17,U+5C19,U+5C1B,U+5C1E-5C21,U+5C23,U+5C26,U+5C28-5C2A;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./cb536d87a302e0cc13a693ba6f8f6719.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+5AC8,U+5ACA,U+5ACD-5AD1,U+5AD3,U+5AD5,U+5AD9-5ADB,U+5ADD-5ADF,U+5AE2,U+5AE4-5AE5,U+5AE7-5AE8,U+5AEA,U+5AEC-5AF0,U+5AF2-5AF4,U+5AF6-5AF9,U+5AFB-5AFF,U+5B01-5B07,U+5B0A,U+5B0D-5B15,U+5B18,U+5B1A-5B20,U+5B22-5B23,U+5B25-5B29,U+5B2B-5B2F,U+5B31,U+5B33,U+5B35-5B36,U+5B39-5B3F,U+5B41-5B4A;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./e565d8ea3db30cf5a8ff9198798c7fc2.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+5A4E-5A54,U+5A56-5A59,U+5A5B-5A61,U+5A63-5A65,U+5A68-5A69,U+5A6B-5A6C,U+5A6E-5A73,U+5A78-5A79,U+5A7B-5A7E,U+5A80-5A91,U+5A93-5A99,U+5A9C-5AA6,U+5AA8-5AA9,U+5AAB-5AB1,U+5AB4,U+5AB6-5AB7,U+5AB9-5ABB,U+5ABF-5AC0,U+5AC3-5AC7;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./eee53b23b919cc5f7509aab7a2f292c5.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+59BD,U+59BF-59C5,U+59C7-59C9,U+59CC,U+59CE-59CF,U+59D5-59D6,U+59D9,U+59DB,U+59DE-59E2,U+59E4,U+59E6-59E7,U+59E9-59EB,U+59ED-59F8,U+59FA,U+59FC-59FE,U+5A00,U+5A02,U+5A0A-5A0B,U+5A0D-5A10,U+5A12,U+5A14-5A17,U+5A19-5A1A,U+5A1D-5A1E,U+5A21-5A22,U+5A24,U+5A26-5A28,U+5A2A-5A30,U+5A33,U+5A35,U+5A37-5A3B,U+5A3D-5A3F,U+5A42-5A45,U+5A47-5A48,U+5A4B-5A4D;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./81cb6d044c095f1efcf88076bda93eb3.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+5909-590C,U+590E,U+5910-5913,U+5917-5918,U+591B,U+591D-591E,U+5921,U+5923,U+5926,U+5928,U+592C,U+5930,U+5932-5933,U+5935-5936,U+593B,U+593D,U+593F-5940,U+5943,U+5945-5946,U+594A,U+594C-594D,U+5952-5953,U+5959,U+595B-595F,U+5961,U+5963-5964,U+5966,U+5968,U+596B-596D,U+596F-5972,U+5975,U+5977,U+597A-597B,U+597E-5980,U+5985,U+5989,U+598B-598C,U+598E-5991,U+5994-5995,U+5998,U+599A-599C,U+599F-59A2,U+59A6-59A7,U+59AC-59AD,U+59B0-59B1,U+59B3-59B8,U+59BA,U+59BC;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./dccb8ff2e02b1cf45d79b1e868a7acaf.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+587C-587D,U+587F,U+5882,U+5884,U+5886-5888,U+588B-5891,U+5894-5898,U+589B,U+589D,U+58A0-58A7,U+58AA-58AD,U+58AF-58B2,U+58B4-58BB,U+58BD,U+58BF-58C0,U+58C2-58C4,U+58C6,U+58C8-58CD,U+58CF-58D0,U+58D2,U+58D4,U+58D6-58D7,U+58DB-58DD,U+58E1,U+58E3,U+58E5-58E8,U+58EA,U+58ED,U+58F1-58F2,U+58F4-58F5,U+58F7-58F8,U+58FB-58FC,U+58FE-5901,U+5903,U+5905-5906,U+5908;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./05a1f8d7d226c71e404e7689e29dfa70.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+57F3,U+57F5-57F6,U+57FB-57FC,U+57FE-57FF,U+5801,U+5803-5804,U+5808-5809,U+580C,U+580E-5810,U+5812-5814,U+5817-5818,U+581A-581C,U+581F,U+5822-5823,U+5825-5829,U+582B-582E,U+5832-5833,U+5836-5843,U+5845-5849,U+584E,U+5850,U+5853,U+5855-5856,U+5859-585D,U+585F-5861,U+5863-5864,U+5866-586A,U+586D-5874,U+5876-5878,U+587A-587B;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./2e30c9671701a342203e0084baeb4102.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+5763,U+5765,U+5767,U+576C,U+576E,U+5770-5772,U+5774-5775,U+5778-577A,U+577D-5781,U+5787-578A,U+578D-5791,U+5794-579A,U+579C-579F,U+57A5,U+57A8,U+57AA,U+57AC,U+57AF-57B1,U+57B3,U+57B5-57B7,U+57B9-57C1,U+57C4-57CA,U+57CC-57CD,U+57D0-57D1,U+57D3,U+57D6-57D7,U+57DB-57DC,U+57DE,U+57E2-57E3,U+57E5-57EC,U+57EE,U+57F0-57F2;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./d69c2ab3e3ce1548de045f65248b07d6.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+56BD-56BF,U+56C3-56C4,U+56C6-56C7,U+56C9,U+56CB-56D0,U+56D2-56D3,U+56D5-56D6,U+56D8-56D9,U+56DC,U+56E3,U+56E5-56E9,U+56EC,U+56EE-56EF,U+56F2-56F3,U+56F6-56F8,U+56FB-56FC,U+5700-5702,U+5705,U+570C,U+570E-5711,U+5714-5715,U+5717,U+5719-571B,U+571D-571E,U+5720-5722,U+5724-5727,U+572B,U+5731-5732,U+5734-5738,U+573C-573D,U+573F,U+5741,U+5743-5746,U+5748-5749,U+574B,U+5752-5756,U+5758-5759,U+5762;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./adc309549d9215c4758eee232a737ac4.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+562A-562B,U+5633,U+5637,U+563A,U+563C-563E,U+5640-564B,U+564F-5652,U+5655-5656,U+565A-565B,U+565E-565F,U+5661,U+5663,U+5667,U+566D-566E,U+5670,U+5673,U+5675,U+5677,U+5679-567A,U+567D-567F,U+5681-5684,U+5688-568B,U+568D,U+5690-5692,U+5694,U+5696-56A2,U+56A4-56A5,U+56A7,U+56A9-56AE,U+56B0-56B2,U+56B5,U+56B8-56BB;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./ca093685c5ac208cab4d4bfe5bd9ca14.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+5579-557A,U+557D,U+557F,U+5585-5586,U+558C-558E,U+5590,U+5592-5593,U+5595-5597,U+559B,U+559E,U+55A0-55A6,U+55A8-55A9,U+55AD,U+55AF-55B0,U+55B4,U+55B6,U+55B8,U+55BA,U+55BC,U+55BF-55C3,U+55C8,U+55CA-55CB,U+55CF-55D0,U+55D5,U+55D7-55D9,U+55DB,U+55DE,U+55E0,U+55E2,U+55E7,U+55ED-55EE,U+55F0-55F1,U+55F4,U+55F8-55FC,U+55FF,U+5602-5605,U+5607,U+560A-560B,U+5610-5613,U+5615,U+5619-561A,U+561D,U+5620-5622,U+5625-5626,U+5628-5629;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./4d8ee4009082f75ed0f06a4d2028a7dd.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+54E2-54E4,U+54EB-54EC,U+54EF-54F1,U+54F4-54F9,U+54FB,U+54FE,U+5500,U+5502-5503,U+5505,U+5508,U+550A-550E,U+5512-5513,U+5515-551A,U+551C-551F,U+5521,U+5525-5526,U+5528-5529,U+552B,U+552D,U+5532,U+5534-5536,U+5538-553B,U+553D,U+5540,U+5542,U+5545,U+5547-5548,U+554B-554E,U+5551-5552,U+5554,U+5557-555B,U+555D,U+555F-5560,U+5562-5563,U+5568-5569,U+556B,U+556F-5574;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./478d735ff90ac7485cb1081215672851.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+540B,U+5414,U+5418-541A,U+541C,U+5422,U+5424-5425,U+542A,U+5430,U+5437,U+543A,U+543D,U+543F,U+5441,U+5444-5445,U+5447,U+5449,U+544C-544F,U+5451,U+545A,U+545D-5461,U+5463,U+5465,U+5467,U+5469-5470,U+5474,U+5479-547A,U+547E-547F,U+5481,U+5483,U+5485,U+5487-548A,U+548D,U+5491,U+5493,U+5497-5498,U+549C,U+549E-54A2,U+54A5,U+54AE,U+54B0,U+54B2,U+54B5-54B7,U+54B9-54BA,U+54BE,U+54C3,U+54C5,U+54CA-54CB,U+54D6,U+54D8,U+54DB,U+54E0;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./f4a38e48eec2f769ac06bfdf7e8fb990.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+5344,U+5346,U+534B-534D,U+5350,U+5358-5359,U+535B,U+535D,U+5365,U+5368,U+536A,U+536C-536D,U+5372,U+5376,U+5379,U+537C-537E,U+5380-5381,U+5383,U+5387-5388,U+538A,U+538E-5394,U+5396-5397,U+539B-539C,U+539E,U+53A0-53A1,U+53A4,U+53A7,U+53AA-53AC,U+53AF-53B1,U+53B3,U+53B5,U+53B7-53BA,U+53BC-53BE,U+53C0,U+53C5-53C7,U+53CE-53D0,U+53D2-53D3,U+53D5,U+53DA,U+53DC-53DE,U+53E1,U+53E7,U+53F4,U+53FA,U+53FE-5400,U+5402,U+5405,U+5407;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./d72f2ff55978308da2fac1493a5ec3d7.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+52B9-52BD,U+52C0,U+52C2,U+52C4-52C6,U+52C8,U+52CA,U+52CC-52CF,U+52D1,U+52D3-52D4,U+52D7,U+52DA-52DC,U+52E0-52E1,U+52E3,U+52E5-52EF,U+52F2,U+52F4,U+52F6-52F7,U+52FC-52FD,U+5301-5304,U+5307,U+5309-530C,U+530E,U+5311-5314,U+5318,U+531B-531C,U+531E-531F,U+5322,U+5324-5325,U+5327-5329,U+532B-532C,U+5330,U+5332-5338,U+533C-533D,U+5342;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./70f63fe95b55111e328a6c9ec6f31480.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+5215,U+521C,U+521E-521F,U+5221-5223,U+5226-5227,U+522C,U+522F,U+5231-5232,U+5234-5235,U+523C,U+523E,U+5245-5246,U+5248-5249,U+524B,U+524F,U+5252-5253,U+5255,U+5257-525A,U+525F-5260,U+5262-5264,U+5266,U+5268,U+526B-526D,U+5270-5271,U+5273,U+5276-527C,U+527E,U+5280,U+5284-5286,U+528B,U+528E-528F,U+5292,U+5294-529A,U+529C,U+52A4-52A7,U+52AE-52B0,U+52B4-52B8;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./90732434f5f08d321d8509ab2d6aa6fd.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+516A,U+516F,U+5172,U+517A,U+517E-517F,U+5183-5184,U+5186-5187,U+518B,U+518E-5191,U+5193-5194,U+5198,U+519A,U+519D-519F,U+51A1,U+51A3,U+51A6-51A9,U+51AD-51AE,U+51B4,U+51B8-51BA,U+51BE-51BF,U+51C1-51C3,U+51C5,U+51C8,U+51CA,U+51CE,U+51D0,U+51D2-51DA,U+51DE-51DF,U+51E2-51E3,U+51E5-51EA,U+51EC,U+51EE,U+51F2,U+51F4,U+51F7,U+51FE,U+5204-5205,U+5209,U+520B-520C,U+520F-5210,U+5213-5214;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./f50ba223a9f303ad368f7bba1183360a.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+50E4,U+50E9-50EB,U+50EF-50F0,U+50F2,U+50F4,U+50F6-50F8,U+50FA,U+50FC-50FF,U+5101,U+5103,U+5105,U+510A,U+510C-510F,U+5111,U+5113,U+5116-511E,U+5120,U+5122-5129,U+512B-5131,U+5133-5136,U+5138-5139,U+513D-513E,U+5142,U+514A,U+514E-5150,U+5153,U+5158-5159,U+515B,U+515D-5161,U+5163-5164,U+5166;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./948fa208bc668b07e62ccef57f59ac90.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+5072-5073,U+5078-507A,U+507C-507D,U+5081-5084,U+5086-5087,U+5089-508C,U+508E-5090,U+5092-5095,U+5097,U+509A-50A2,U+50A4,U+50A6,U+50AA-50AB,U+50AE,U+50B0-50B1,U+50B6,U+50B8-50B9,U+50BC-50BD,U+50BF-50C1,U+50C3-50C4,U+50C6-50C8,U+50CA-50CE,U+50D0,U+50D2-50D4,U+50D7-50D9,U+50DB-50DD,U+50DF-50E3;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./3526cfff7d13f1377ed3005faf778f6d.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+5002-5005,U+5007-5008,U+500A,U+500E,U+5010,U+5013,U+5015-5017,U+501B,U+501D-501E,U+5020,U+5022-5024,U+5027,U+502F-5039,U+503B,U+503D,U+503F-5042,U+5044-5046,U+504A-504B,U+504D,U+5050-5054,U+5056-5059,U+505B,U+505D-5064,U+5066-506B,U+506D-5071;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./03b74ac28d17aa94147f58bc5be268d9.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4F7D,U+4F80-4F82,U+4F85,U+4F87,U+4F8A,U+4F8C,U+4F8E,U+4F90,U+4F92-4F93,U+4F95,U+4F98-4F9A,U+4F9C,U+4F9E-4F9F,U+4FA1-4FA2,U+4FA4,U+4FAB,U+4FAD,U+4FB0-4FB4,U+4FB7-4FBE,U+4FC0,U+4FC2,U+4FC6-4FC9,U+4FCB-4FCD,U+4FD2-4FD6,U+4FD9,U+4FDB,U+4FE2,U+4FE4-4FE5,U+4FE7,U+4FEB-4FEC,U+4FF0,U+4FF2,U+4FF4-4FF7,U+4FF9,U+4FFB-4FFD,U+4FFF,U+5001;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./18f848e15c28281a11eb8227a35d5cb4.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4EED-4EEF,U+4EF1,U+4EF4,U+4EF8-4EFA,U+4EFC,U+4EFE,U+4F00,U+4F02-4F08,U+4F0B-4F0C,U+4F12-4F16,U+4F1C-4F1D,U+4F21,U+4F23,U+4F28-4F29,U+4F2C-4F2E,U+4F31,U+4F33,U+4F35,U+4F37,U+4F39,U+4F3B,U+4F3E-4F42,U+4F44-4F45,U+4F48-4F4C,U+4F52,U+4F56,U+4F61-4F62,U+4F66,U+4F68,U+4F6A-4F6B,U+4F6D-4F6E,U+4F71-4F72,U+4F75,U+4F77-4F7A;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./9b47346eedfd34447e94647337fd6a64.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4E51,U+4E55,U+4E57,U+4E5A-4E5B,U+4E62-4E65,U+4E67-4E68,U+4E6A-4E6F,U+4E72,U+4E74-4E7D,U+4E7F-4E81,U+4E83-4E85,U+4E87,U+4E8A,U+4E90,U+4E96-4E97,U+4E9C-4E9D,U+4EA3,U+4EAA,U+4EAF-4EB1,U+4EB4,U+4EB6-4EB9,U+4EBC-4EBE,U+4EC8,U+4ECC,U+4ECF-4ED0,U+4ED2,U+4EDA-4EDC,U+4EE0,U+4EE2,U+4EE6-4EE7,U+4EE9;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./901ede42557461047b93011d73eaaf96.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+27E9-27EB,U+27F5-27F7,U+2916,U+294A,U+2987-2988,U+2A00,U+2A05-2A06,U+2B58,U+3003,U+3005-3007,U+301A-301C,U+3021-3029,U+3031-303B,U+4E02,U+4E04-4E06,U+4E0F,U+4E12,U+4E17,U+4E20-4E21,U+4E23,U+4E29,U+4E2E-4E2F,U+4E31,U+4E33,U+4E35,U+4E37,U+4E3C,U+4E40-4E42,U+4E44,U+4E46,U+4E4A;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./dfdb905d0ed22e70569e6c4141b117cc.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+25A1,U+25AA-25AB,U+25B2-25CC,U+25CE,U+25D4-25D5,U+25E6-25EB,U+25EF,U+25F6,U+266D,U+266F,U+26A0-26A1,U+2713,U+2715,U+2717,U+2736,U+276E-2771,U+2794,U+279C-279E,U+27C5-27C6,U+27DC,U+27E6-27E8;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./86318641e04ad3a065f64fe4f77a6654.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+2565-25A0;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./ecdc45f383ae408e6895e3a525ad3992.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+252B-2564;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./9d71282fa8017494090f428969c87ac5.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+21D4,U+21DA-21DB,U+21DE-21DF,U+21E4-21EA,U+2212,U+2501-252A;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./5217726b420702097c748c958c41b66f.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+2086-2089,U+20AC,U+20B9-20BA,U+20BD,U+20BF,U+2103,U+2109,U+2113,U+2116,U+2122,U+212E,U+2140,U+218A-218B,U+2190-2199,U+219D-219E,U+21A0,U+21A2-21A7,U+21A9-21AA,U+21AD,U+21B0-21B3,U+21BE,U+21C4,U+21C6,U+21C9,U+21D0-21D3;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./47c88fb77d5f1b91f739354099f20dcb.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+1EF0-1EF9,U+2001,U+200B,U+2010,U+2016,U+201A-201B,U+201E-2021,U+2024,U+2030,U+2032-2034,U+2039-203A,U+203D-203F,U+2044-2046,U+2070,U+2074-207A,U+207C,U+2080-2085;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./0d521d9e0b96c5f318018a0fbc65591b.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+1EC4-1EEF;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./710829bf8665404e9de6a0d01902fd57.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+1E85,U+1E9E,U+1EA0-1EC3;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./9db891832d940057c2249bebb1355aa8.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+0,U+300-304,U+306-30C,U+30F,U+312,U+31B,U+323,U+325-328,U+336-338,U+AEA,U+1E80-1E84;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./7b52d0d936cd747c20d8d971697003f6.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+FEFF;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./51fe4f668b4eca6aa6c3864ef4e5582b.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+30E8-30FA,U+30FC-30FF;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./d0d1383fdbb6d515de1c57e7a007560d.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+30A8-30E7;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./313df767b0d509946adbd182111fc1bf.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+306D-3096,U+3099-309B,U+309D-30A7;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./e391f549c2ae8b67be824af92112940a.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+3041-306C;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./15fe8f7f491514fe0cfcfe533e7f4757.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+5244,U+5666,U+568C,U+56C5,U+58DA,U+5C68,U+5E58,U+5F33,U+61CD,U+6214,U+6516,U+68D6,U+69E7,U+6BFF,U+7020,U+7044,U+7798,U+78FD,U+7E6F-7E70,U+802E,U+8079,U+8183,U+8464,U+8546,U+861E,U+8811,U+89BF,U+8A92,U+8B56,U+8CB0,U+8CD5,U+8CE7,U+8E93,U+8EA6,U+8EE4,U+8F62,U+9233,U+92B1,U+92DD,U+9301,U+9307,U+9346,U+9370,U+93AA,U+93F7,U+940B,U+9412,U+9414,U+9426,U+9428,U+9479,U+958C,U+95AB,U+95BD,U+95BF,U+986C,U+9A2D,U+9A38,U+9B9A,U+9B9E,U+9BEB,U+9BF4,U+9C12,U+9C20,U+9C35,U+9C37,U+9C5D,U+9D1D,U+9D2F,U+9DA5,U+9E7A,U+9F60;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./1673e9432bb97483080a56a6f4469e56.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+50E8,U+532D,U+53B4,U+54BC,U+5672,U+5B4C,U+5D2C,U+5DF9,U+5E6C,U+649F,U+6504,U+69BF,U+6AEB,U+6AF3,U+6E5E,U+736B,U+7380,U+7649,U+7A6D,U+7AB6,U+7C5C,U+7D32,U+7DF6,U+7E0B,U+7E36,U+7E52,U+7E62,U+8156,U+8264,U+826B,U+85F6,U+87EF,U+8806,U+89AF,U+8A01,U+8A84,U+8AD7,U+8B7E,U+8DB2,U+8E60,U+8F05,U+8F07,U+923D,U+9255,U+929A,U+92E6,U+92F6,U+9306,U+9308,U+9364,U+9369,U+9384,U+93BF,U+93C7,U+95E5,U+9689,U+97BD,U+97DD,U+9859,U+9937,U+993C,U+99D4,U+99D8,U+9A0D,U+9A36,U+9A42,U+9BDD,U+9C08,U+9C29,U+9C3E,U+9D1F,U+9D42,U+9D6F,U+9E0C,U+9EF2;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./034bc67a668e5a2d71d077038319ecc3.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+50B4,U+528C,U+52F1,U+56B3,U+5852,U+5969,U+5B24,U+5F12,U+6192,U+6451,U+69AA,U+6AE7,U+6F77,U+700B,U+736A,U+79B0,U+7C6A,U+7D06,U+7DC4,U+7DD9,U+7DE6,U+7DF9,U+7E11,U+7E2D,U+7E8A,U+7F86,U+7F8B,U+8161,U+81DA,U+81E0,U+8452,U+8526,U+8558,U+8577,U+859F,U+86FA,U+87E3,U+8949,U+89A1,U+89F6,U+8A75,U+8B9E,U+8EFA,U+8F0A,U+91D9,U+9225,U+92DF,U+92E3,U+93F9,U+9420,U+944A,U+9465,U+98EB,U+9931,U+9933,U+9A4F,U+9B83,U+9BAA,U+9C39,U+9C5F,U+9C67,U+9C6D,U+9C7A,U+9D87,U+9D93,U+9D98,U+9DBC,U+9DDA,U+9DE5-9DE6,U+9DEF,U+9ECC,U+9F09,U+9F4F;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./dfe10f399f07a611ad944f6438c1c945.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+5110,U+51AA,U+56A6,U+5ABC,U+5D81,U+5DF0,U+6128,U+61AE,U+61DF,U+6207,U+6227,U+6A48,U+6F59,U+6FA9,U+6FFC,U+7027,U+7197,U+7602,U+761E,U+7667,U+76B8,U+7C69,U+7CDD,U+7CF4,U+7CF6,U+7CF9,U+7D07,U+7D86,U+7D88,U+7E32,U+851E,U+8552,U+8562,U+863A,U+8810,U+8933,U+895D,U+8AD1,U+8B6B,U+8B8E,U+8D10,U+8E92,U+8EF9,U+8F61,U+91C3,U+9201,U+92A0,U+92A9,U+92CF,U+9312,U+931F,U+9343,U+9387,U+93DD,U+979D,U+980A,U+980F,U+9862,U+994A,U+995C,U+9B92,U+9BC1,U+9BEA,U+9C28,U+9C33,U+9D30,U+9D53,U+9D5C,U+9DD9,U+9EF7,U+9F34,U+9F4E,U+9F54,U+9F59;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./e0bae4b9d1395bb70c3569f9f3ccc150.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+50C9,U+5274,U+5635,U+5638,U+5B00,U+5B19,U+5B2A,U+5E43,U+5EE1,U+616A,U+6898,U+6ADE,U+6AE8,U+6C0C,U+7026,U+733B,U+74A6,U+74D4,U+766D,U+7725,U+7868,U+78B8,U+7BCB,U+7CF2,U+7D83,U+7DC7,U+7DE1,U+7DF1,U+84EF,U+84FD,U+889E,U+8A4E,U+8A58,U+8A7F,U+8A86,U+8A91,U+8ACF,U+8ADE,U+8AFC,U+8B92,U+8CB2,U+8CFE,U+8EDB,U+8F1C,U+90DF,U+9227,U+9248,U+927F,U+9283,U+92A3,U+92AA,U+92F1,U+9338,U+9340,U+93CD,U+9413,U+9454,U+946D,U+95C8,U+97C9,U+9807,U+9826,U+98AE,U+98E0,U+9A05,U+9AD5,U+9B4E,U+9BC0,U+9BC7,U+9BE1,U+9C23,U+9D52,U+9F5C;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./f8152eab10839f13b247f63e6c764755.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+5114-5115,U+53C4,U+566F,U+581D,U+6173,U+645C,U+6476,U+651B,U+6894,U+6ADD,U+6AF8,U+6B5F,U+6B7F,U+7C00,U+7D3C,U+7D4E,U+7DA3,U+7DB0,U+7E35,U+7E7E,U+7E98,U+802C,U+8494,U+84F4,U+8541,U+8555,U+87BB,U+8A9A,U+8AC2,U+8AE1,U+8B59,U+8B96,U+8B9C,U+8CFB,U+8D04,U+8E55,U+91D3,U+91D5,U+91E4,U+9230,U+9266,U+92A6,U+931B,U+93A6,U+93A9,U+93C3,U+93CC,U+93E8,U+9403,U+943F,U+944C,U+9582,U+95BC,U+95C3,U+95D0,U+98BC,U+9908,U+99D1,U+99D9,U+9A43-9A44,U+9B29,U+9B90,U+9BD6-9BD7,U+9C13,U+9D07,U+9DF3,U+9DF8,U+9EFD,U+9EFF;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./7718ebbfe9207c37a1a21bdc03c03fb6.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+5000,U+526E,U+5399,U+55F6,U+5665,U+584F,U+58E2,U+61E8,U+64FC,U+6A89,U+6B0F,U+6BA4,U+6FAE,U+7162,U+7341,U+743A,U+7658,U+7670,U+7864,U+7906,U+7C1E,U+7D3F,U+7D5D,U+7D9E,U+7E1E,U+8407,U+8435,U+85EA,U+87F6,U+8A0C,U+8A6C,U+8AE2,U+8B05,U+8B95,U+8CBA,U+8E91,U+8E95,U+8EEB,U+8F1E,U+8F33,U+8F54,U+9134,U+9136,U+91C5,U+91D4,U+91F7,U+9204,U+9239,U+926D,U+92AB,U+92E8,U+92EE,U+9419,U+9477,U+95CB,U+984E,U+9853,U+9873-9874,U+99E2,U+9B2E,U+9B58,U+9B74,U+9BAB,U+9BFF,U+9C45,U+9DC0,U+9DC2,U+9E15,U+9F6A,U+9F76-9F77;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./ae68b84170ae063f3b9a123d9966096b.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4FC1,U+5096,U+565D,U+56B6,U+56C0-56C1,U+56C8,U+5816,U+58D9,U+5B21,U+5D0D,U+5EE9,U+614D,U+6A05,U+6A81,U+6AEC,U+6BAE,U+6DE5,U+6F35,U+6F7F,U+7032,U+716C,U+74DA,U+7646,U+7669,U+78E7,U+7A61,U+7B67,U+7BF3,U+7D08,U+7D5B,U+7DB9,U+7E0A,U+7E1F,U+7FB6,U+85CE,U+861A,U+8784,U+8A10,U+8AB6,U+8ADB,U+8AE4,U+8B04,U+8CB3,U+8F26,U+8F64,U+9015,U+9090,U+91E7,U+9200,U+923F,U+927A,U+9319,U+958E,U+95B6,U+95B9,U+9768,U+97D9,U+980E,U+98ED,U+9949,U+994C,U+9ACF,U+9B8E,U+9BE2,U+9C09,U+9C48,U+9CE7,U+9DBB,U+9E1D,U+9F66;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./47426d3af322c6595eae6e99aee5d5c0.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+50AF,U+5108,U+513B,U+528A,U+58CE,U+5950,U+5B0B,U+5CF4,U+613E,U+6229,U+64A3,U+64C4,U+66D6,U+690F,U+69E8,U+6A9C,U+6AA3,U+6AD3,U+6B1E,U+6B9E,U+6C2C,U+6C33,U+7028,U+7069,U+7296,U+74A3,U+75FE,U+7664,U+7D02,U+7D15,U+7D3A,U+858C,U+8604,U+875F,U+87C8,U+8998,U+89F4,U+8A41,U+8B16,U+8CDA,U+8E9A,U+8EA1,U+8EA5,U+8ED4,U+8F42,U+91F9,U+9210-9211,U+922E,U+9238,U+924D,U+925E,U+9278,U+92C3,U+9358,U+93B5,U+93D1,U+9865,U+993F,U+9962,U+9A16,U+9BAD,U+9BDB,U+9BE7,U+9C25,U+9D06,U+9D9A,U+9F5F,U+9F67,U+9F6C;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./d95c40135f98aed54b6f3ec2839dbabb.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+561C,U+5707,U+584B,U+5AA7,U+5DA0,U+5DCB,U+5EC4,U+60FB,U+61E3,U+636B,U+64B3,U+6AEA,U+6AF1,U+7043,U+71DC,U+7319,U+7370,U+76B0,U+77BC,U+78E3,U+7D13,U+7DBE,U+7DCB,U+7E39,U+7E88,U+81CF,U+82BB,U+83A2,U+866F,U+8706,U+8831,U+8960,U+89A6,U+89B2,U+8A03,U+8A15-8A16,U+8A85,U+8AA5,U+8ACD,U+8B2B,U+8E89,U+9106,U+91F5,U+9245,U+92BC,U+9315,U+9347,U+93A7,U+93B0,U+93DC,U+9481,U+97C3,U+9821,U+9948,U+9A41,U+9A64,U+9BE4,U+9BF0,U+9C0D,U+9C31,U+9C56,U+9C78,U+9CF6,U+9D23,U+9DD3,U+9DF2,U+9E1B,U+9EA9,U+9F95;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./515df858dde28da76ab460c7a1608d9c.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+50C2,U+5137,U+57E1,U+58E0,U+5AD7,U+5B08,U+5DA7,U+60F2,U+615F,U+616B,U+61CC,U+64EF,U+689F,U+6ADF,U+6F1A,U+71F4,U+763B,U+7931,U+7A4C,U+7C23,U+7D31,U+7DD7-7DD8,U+7DF2,U+83A7,U+87C4,U+87CE,U+8814,U+8938,U+893B,U+8964,U+89AC,U+8A46,U+8A52,U+8A5B,U+8AED,U+8B14,U+8B3E,U+8B4E,U+8E4C,U+8EAA,U+8EF2,U+8EFB,U+9148,U+9341,U+93A3,U+9410,U+9427,U+9463,U+95AC,U+95DE,U+9658,U+973D,U+9744,U+97DE,U+981C,U+9837,U+9870,U+98B6,U+98F4,U+9909,U+9911,U+9A0F,U+9A2E,U+9C2D,U+9C52,U+9CE9,U+9D6A,U+9D89;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./2794b527e732e0686f938c6b40450191.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+5504,U+560D,U+5660,U+5680,U+5695,U+56A8,U+580A,U+597C,U+5B7F,U+6134,U+61FA,U+64BB,U+6506,U+6523,U+66B1,U+66C7,U+6D79,U+6DF6,U+6FA0,U+7005,U+72FD,U+75D9,U+765F,U+78AD,U+7A1F,U+7C5F,U+7D40,U+7E09,U+8075,U+8594,U+85BA,U+8768,U+8823,U+8A36,U+8A61,U+8A70,U+8AEB,U+8AF6,U+8CC5,U+8D17,U+91D2,U+9249,U+92C7,U+92E5,U+92EF,U+9354,U+937A,U+9398,U+93E4,U+93F5,U+943A,U+9460,U+95AD,U+95D4,U+9742,U+975A,U+98AF,U+98C6,U+98C8,U+98E9,U+991B,U+991E,U+9AD6,U+9B81,U+9BCA,U+9BFD,U+9D61,U+9E1A;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./65bd8560302e344180078c215adcd0d8.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+513A,U+55C7,U+55E9,U+562E,U+5630,U+5AF5,U+5B38,U+5DB8,U+619A,U+61AB,U+6384,U+64FB,U+6A62,U+6ECE,U+6F6F,U+705D,U+71FC,U+71FE,U+7258,U+729B,U+72A2,U+7515,U+79C8,U+7C2B,U+7C6E,U+7CC9,U+7DAC,U+7E10,U+7E6E,U+7F4C,U+849E,U+854E,U+8622,U+8778,U+87A2,U+89B7,U+8A1B,U+8B01,U+8CC1,U+8CE1,U+8E7A,U+8EFE,U+8F45,U+8FAE,U+913A,U+91E9,U+91FA,U+9208,U+925A,U+9262,U+926C,U+92A5,U+92BB,U+9376,U+942E,U+9432,U+947E,U+958F,U+95A1,U+9766,U+9830,U+9957,U+995E,U+9A2B,U+9A4D,U+9AAF,U+9F72;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./16b7d5b08375dfcad57e3ff13a2ae86e.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4F47,U+5102,U+5157,U+55C6,U+5879,U+5ACB,U+5C5C,U+5D22,U+5D97,U+5EDD,U+60B5,U+611C,U+64F7,U+66C4,U+6AB3,U+6ADA,U+6B12,U+6BAB,U+6EF8,U+70F4,U+71C9,U+7489,U+750C,U+766C,U+769A,U+792B-792C,U+7B8B,U+7C0D,U+7D73,U+7E1D,U+81BE,U+8477,U+84C0,U+85FA,U+86FB,U+8956,U+8A6D-8A6E,U+8B10,U+8B28,U+8D05,U+8E8A,U+8F46,U+9116,U+91C1,U+920D,U+9237,U+9251,U+9291,U+92CC,U+93E2,U+9586,U+95CC,U+95D5,U+9839,U+99DF,U+99ED,U+9A3E,U+9A6A,U+9C54,U+9D1B,U+9D26,U+9D60,U+9DA9,U+9E1E;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./0a89ba4c98c30db74c93d0967f2afc12.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4E99,U+50E5,U+513C,U+5616,U+5653,U+56EA,U+59CD,U+5D87,U+6137,U+615A,U+645F,U+6519,U+67F5,U+6AB8,U+6F97,U+6FD8,U+7377,U+737A,U+737C,U+744B,U+74BD,U+74CF,U+7627,U+792A,U+79B1,U+7E43,U+7E45,U+7E93,U+7F88,U+811B,U+81CD,U+858A,U+880D,U+8A25,U+8A6B,U+8A7C,U+8AB9,U+8AFA,U+8B17,U+8B4F,U+8CD2,U+8D16,U+8E63,U+8EFC,U+9114,U+9183,U+923E,U+9296,U+92AC,U+932E,U+93A2,U+93D7-93D8,U+93DE,U+9912,U+993E,U+9943,U+99B1,U+9A40,U+9A5B,U+9B22,U+9B77,U+9BC9,U+9C58,U+9D51,U+9DFA;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./1ce4341d68290e5f342bbb08133296fd.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+55B2,U+55DA,U+58AE,U+5AFA,U+5DD2,U+5DD4,U+5FA0,U+633E,U+6473,U+64F0,U+6595,U+69F3,U+6ADB,U+6AE5,U+6C08,U+6E19,U+6EF7,U+6F2C,U+6F41,U+6FFA,U+743F,U+760D,U+7647,U+7662,U+7672,U+798E,U+7ABA,U+7BE4,U+7C6C,U+7D1C,U+7D33,U+7D46,U+7DDE,U+7E08,U+82E7,U+85F9,U+8A63,U+8AC4,U+8AC9,U+8ADC,U+8AE6,U+8AF3,U+8B2C,U+8B33,U+8D0D,U+8F12,U+8F25,U+9257,U+9293,U+92E4,U+9365,U+936C,U+93AC,U+93B3,U+942B,U+95A8,U+990C,U+9921,U+99B4,U+9A65,U+9BE8,U+9D15,U+9D72,U+9DAF,U+9DD7;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./0db0df3ace7bbdec8e19a3cd7a31e03f.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+51DC,U+5436,U+56C2,U+5862,U+5A41,U+5A6D,U+5BE2,U+618A,U+61FE,U+6417,U+64F2,U+6583,U+6727,U+6968,U+6A3A,U+6D87,U+6F23,U+7006,U+7018,U+7064,U+7152,U+71BE,U+71C1,U+71ED,U+76DE,U+79BF,U+7A08,U+7AC5,U+7D79,U+7DBA-7DBB,U+7DBD,U+7E55,U+7E5A,U+7E7D,U+8805,U+8AA3,U+8AA8,U+8AF7,U+8B0A,U+8CD1,U+8CE4,U+8F3E,U+8F4D,U+9087,U+923A,U+92A8,U+92F8,U+9328,U+9433,U+9438,U+9594,U+9695,U+96CB,U+97DC,U+98EA,U+9903,U+9945,U+99D2,U+9A01,U+9A62,U+9BD4,U+9C32,U+9C77;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./6d62b0d48c2b458c3bc180ec2c331279.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+562F,U+589C,U+5B0C,U+5C37,U+5DBC,U+5E57,U+6190,U+63C0,U+64BF,U+64F1,U+6522,U+66E0,U+6AFB,U+6B16,U+6BAF,U+6BB2,U+6BC6,U+6D36,U+701D,U+71D9,U+720D,U+7469,U+7613,U+766E,U+7681,U+76BA,U+779E,U+786F,U+78EF,U+7AAA,U+7AC4,U+7B8F,U+7C3E,U+7D09,U+7D62,U+7DDD,U+7E37,U+7E46,U+7FF9,U+8466,U+879E,U+896A,U+8A1D,U+8AF1,U+8B41,U+8CBD,U+8CCA,U+8EC0,U+8F1F,U+9132,U+91D7,U+931A,U+93DF,U+96B4,U+96DB,U+991A,U+99AD,U+99DD,U+99FF,U+9A4A,U+9C3B,U+9C49,U+9D09;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./834e934ea762fa713d2be841697506a4.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4FE0,U+50AD,U+555E,U+5687,U+582F,U+58FA,U+5EC2,U+5EEC,U+61C7,U+646F,U+647B,U+6493,U+64BE,U+665D,U+6953,U+6ECC,U+6F87,U+6FF0,U+7015,U+701F,U+7192,U+7464,U+760B,U+7671,U+775C,U+7A62,U+7B4D,U+7D8F,U+7DB8,U+7E6D,U+7E8F,U+7FA8,U+8073,U+8076,U+807E,U+8525,U+852D,U+856A,U+8588,U+8836,U+8993,U+8AD2,U+8B74,U+8C48,U+8CC2,U+8D13,U+8E8B,U+8ED2,U+919E,U+921E,U+925B,U+9318,U+9320,U+938A,U+9472,U+947C,U+95BB,U+986B,U+9952,U+99F1,U+9B91,U+9D3F;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./5a54deae631d1f892ae1fd324e8d154e.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4FB6,U+5006,U+5109,U+524E,U+52F3,U+5331,U+58B3,U+5D50,U+5D84,U+5E40,U+5EC1,U+5F65,U+60BD,U+6514,U+65AC,U+6689,U+68D7,U+6EC4,U+6F80,U+703E,U+7165,U+71E6,U+7345,U+74CA,U+775E,U+77DA,U+7AAF,U+7AC7,U+7C72,U+7DB4,U+7DEC,U+7E61,U+7FA5,U+81BF,U+87EC,U+8932,U+8A60,U+8AA1,U+8B5A,U+8CA9,U+8CC4,U+8CDC,U+8CED,U+8D1B,U+8ECB,U+8F4E,U+9112,U+91AC,U+91E3,U+9214,U+9234,U+92C5,U+9310,U+9333,U+934D,U+95BE,U+95D6,U+99AE,U+9A55,U+9D6C,U+9F94;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./f486d93aea6f500cb299adf957ffa99b.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+5098,U+50D5,U+5614,U+58BE,U+5BF5,U+5E25,U+6065,U+650F,U+652A,U+652C,U+6582,U+6688,U+68E7,U+68F2,U+6B3D,U+6DEA,U+6E26,U+6E4A,U+6EEC,U+6F51,U+71FB,U+7463,U+746A,U+7A4E,U+7D5E,U+7D68,U+7D81,U+7E79,U+8123,U+81A9,U+834A,U+863F,U+865C,U+87FB,U+883B,U+8A23,U+8A54,U+8ABC,U+8B0E,U+8B19,U+8CC8,U+91C0,U+9215,U+9226,U+9240,U+927B,U+947F,U+95A9,U+9803,U+980C,U+9824,U+9871,U+98E2,U+9905,U+9913,U+9A37,U+9C57,U+9D28,U+9F4B,U+9F9C;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./94a2fcf30e8216a324422e949d160fa7.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4F96,U+50D1,U+53AD,U+53B2,U+5442,U+588A,U+58D8,U+599D,U+5C4D,U+5C62,U+5CA1,U+5E5F,U+6158,U+61A4,U+6399,U+6488,U+6A01,U+6ABB,U+6E3E,U+6FC1,U+7051,U+7058,U+7621,U+7661,U+77EF,U+7C60,U+7CB5,U+7CDE,U+7D17,U+7DA2,U+7DE0,U+7DEF,U+7E1B,U+8332,U+856D,U+8606,U+860B,U+8766,U+881F,U+896F,U+8B20,U+8C4E,U+8CAF,U+8F5F,U+919C,U+91D8,U+9264,U+9382,U+93FD,U+9470,U+9598,U+9811,U+98C4,U+99C1,U+9B27,U+9D5D,U+9DB4,U+9DF9,U+9E79;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./7a7982a6f1fc81656bd0c1f2b660e82b.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4E1F,U+5075,U+5147,U+525D,U+559A,U+56D1,U+5A1B,U+5EDA,U+60B6,U+60F1,U+61F6,U+62CB,U+64B2,U+64E0,U+6524,U+66EC,U+68DF,U+69D3,U+6A1E,U+6DDA,U+6DF5,U+6F86,U+6FE4,U+7009,U+700F,U+721B,U+72A7,U+7344,U+7375,U+7587,U+797F,U+7AC8,U+7ACA,U+7D21,U+7DBF,U+7E69,U+7F75,U+7F77,U+8070,U+8396,U+84BC,U+84EE,U+860A,U+8C54,U+8C9E,U+8CB6,U+8CC0,U+8CFA,U+8F3F,U+905C,U+92B3,U+92F0,U+95E2,U+97CC,U+985B,U+99B3,U+9D3B,U+9EF4;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./ace0d4157e976493fd72c1e046409715.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+50F1,U+52F8,U+53E2,U+55AC,U+58DF,U+58E9,U+5CFD,U+5DBA,U+5DBD,U+5E33,U+5EC8,U+5EDF,U+6085,U+61FC,U+6200,U+64CB,U+651C,U+6A38,U+6AC3,U+6EFE,U+6F70,U+6FEB,U+6FF1,U+723A,U+72F9,U+7336,U+76E7,U+798D,U+79AA,U+7AA9,U+7BE9,U+7C43,U+7E9C,U+81E5,U+8259,U+840A,U+8523,U+8667,U+8A87,U+8A95,U+8AA6,U+8C93,U+8F29,U+9059,U+9209,U+9298,U+92C1,U+9326,U+932B,U+934B,U+9583,U+95A5,U+9727,U+97CB,U+98FC,U+9A0E,U+9CF3;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./2f65beb81ae31da97f42c0f463842215.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+50DE,U+514C,U+51CD,U+51F1,U+522A,U+528D,U+52C1,U+52FB,U+5606,U+5674,U+593E,U+5F4C,U+5F4E,U+61F2,U+61F8,U+64A5,U+64AB,U+6B04,U+6BBC,U+6F3F,U+6FB1,U+7169,U+7378,U+758A,U+78DA,U+7AAE,U+7D10,U+7E2B,U+81C9,U+81D8,U+8266,U+8569,U+85A9,U+8755,U+8972,U+8CAA,U+8CE2,U+8FAD,U+907C,U+9081,U+9127,U+929C,U+9444,U+947D,U+95A3,U+96B8,U+97FB,U+9817,U+98FD,U+994B,U+9A30,U+9B31,U+9CF4,U+9E7C,U+9F52,U+9F90;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./d2b8358a5f48dac272aa6f2cfa5070c0.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+5091,U+55AA,U+5875,U+58C7,U+596A,U+5B30,U+6046,U+6182,U+61B2,U+6416,U+6558,U+66A2,U+66C9,U+69CD,U+6DBC,U+6E67,U+6E6F,U+6EEF,U+6EF2,U+6F01,U+727D,U+755D,U+76DC,U+78A9,U+7D0B,U+7DB1,U+8105,U+8271,U+8A98,U+8B39,U+8C6C,U+8C9D,U+8CC3,U+8CD3,U+8D08,U+8D0F,U+8D95,U+8E64,U+8F1D,U+8F3B,U+90F5,U+912D,U+9130,U+9223,U+935B,U+95E1,U+965D,U+9663,U+96DE,U+978F,U+9812,U+9838,U+99D0,U+9A5F,U+9EA5;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./bb80da9ea1e74699b0f3920cbd61009a.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+5009,U+5617,U+58EF,U+58FD,U+5A66,U+5DD6,U+6176,U+6383,U+639B,U+6436,U+64FA,U+64FE,U+6575,U+6A6B,U+6BC0,U+6C2B,U+6DFA,U+6FFE,U+70CF,U+7210,U+7246,U+7E31,U+8085,U+8139,U+814E,U+819A,U+85A6,U+85CD,U+89BD,U+8A0A,U+8A50,U+8AEE,U+8B7D,U+8CE6,U+8D0A,U+8E8D,U+8ECC,U+8EF8,U+8F44,U+8FAF,U+9072,U+91D0,U+9285,U+92D2,U+92EA,U+9396,U+9592,U+95CA,U+97D3,U+9813,U+98EF,U+98FE,U+9A5A,U+9CE5;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./22a3d85475c7bd12d35afd152941807b.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+502B,U+50BE,U+5433,U+5678,U+5857,U+5922,U+5ABD,U+5B6B,U+5CEF,U+5EF3,U+6191,U+61B6,U+6490,U+6649,U+66AB,U+68C4,U+694A,U+6FA4,U+6FC3,U+7149,U+71C8,U+71D2,U+7955,U+7CE7,U+7D72,U+7DE3,U+7E6A,U+7E96,U+8056,U+8173,U+81A0,U+81BD,U+838A,U+87F2,U+8A73,U+8AA0,U+8AB0,U+8AE7,U+8B00,U+8B1D,U+8B5C,U+8CA2,U+8CDE,U+8CF4,U+8D99,U+8DE1,U+908F,U+9846,U+984F,U+9A19,U+9A45,U+9B6F;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./9ba8b53929fe5e8c760e365e2588715e.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4E82,U+5049,U+52DD,U+5713,U+5967,U+596E,U+5C46,U+5CF6,U+5D17,U+5F48,U+61F7,U+6BBA,U+6DE8,U+6E9D,U+6EBC,U+6EC5,U+6F32,U+6F54,U+6F64,U+7063,U+7919,U+7926,U+7C4C,U+7CFE,U+7D14,U+7DD2,U+7E5E,U+7E73,U+816B,U+8178,U+8A1F,U+8AFE,U+8B6F,U+8CBC,U+8CE0,U+8CEC,U+8F14,U+8F1B,U+905E,U+9077,U+9589,U+9670,U+9801-9802,U+99D5,U+99DB,U+9AD2,U+9BAE,U+9E7D,U+9E97,U+9F61;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./1ea51fe7359806cd126a8ddef7dcb465.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+5100,U+525B,U+58DE,U+5BAE,U+5BE7,U+5BEC,U+5C0B,U+5EE2,U+5FB9,U+60E1,U+6163,U+63DA,U+64EC,U+651D,U+6557,U+69AE,U+6A13,U+6A4B,U+6A94,U+6B61,U+6B98,U+6F5B,U+707D,U+7159,U+7562,U+79AE,U+7D19,U+7D1B,U+805E,U+8108,U+820A,U+89F8,U+8A2A,U+8A3A,U+8A62,U+8AF8,U+8B02,U+8CAB,U+8CB4,U+8CFD,U+8F2F,U+92FC,U+937E,U+93E1,U+9451,U+9678,U+9928,U+9B5A,U+9F4A;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./a8f96b7498537fc50bf2bdebe89358c3.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+5074,U+511F,U+518A,U+5287,U+5289,U+532F,U+5553,U+55CE,U+5EE0,U+5F91,U+6232,U+64C1,U+6B50,U+6B78,U+6F38,U+7240,U+734E,U+737B,U+76E4,U+7C64,U+7D39,U+7DE9,U+7E2E,U+7E3E,U+7F70,U+812B,U+8449,U+84CB,U+862D,U+885D,U+8A02,U+8A0E,U+8AA4,U+8CBF,U+8CE3,U+8DA8,U+8EDF,U+8F2A,U+9322,U+9435,U+95B1,U+9673,U+96B1,U+9748,U+975C,U+9806,U+9867,U+98F2;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./de88f7d50f355e91a3462c71641471a1.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+50B5,U+5132,U+5291,U+52F5,U+55AB,U+584A,U+5BF6,U+5E63,U+5E6B,U+5EAB,U+616E,U+63EE,U+64F4,U+6A39,U+6B72,U+6F22,U+78BC,U+7AF6,U+7B46,U+7DA0,U+7DCA,U+7DF4,U+7F85,U+807D,U+8166,U+8607,U+865B,U+89AA,U+8AC7,U+8C50,U+8CA7,U+8CB7-8CB8,U+9055,U+907A,U+91CB,U+932F,U+93AE,U+93C8,U+96D6,U+96DC,U+983B,U+9858,U+98DB,U+9B25,U+9F8D;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./105724e09aa05e23fb59788bdbcdf564.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4E9E,U+4F54,U+50B7,U+5104,U+537B,U+611B,U+63DB,U+640D,U+64CA,U+64D4,U+6EAB,U+756B,U+7570,U+76E1,U+7A69,U+7BC9,U+7D05,U+7D0D,U+7D55,U+7D9C,U+7DE8,U+7E7C,U+81E8,U+8209,U+885B,U+89BA,U+8A17,U+8A34,U+8A69,U+8CA8,U+8CFC,U+8E10,U+8F09,U+8F15,U+8F38,U+91DD,U+9304,U+9375,U+967D,U+968E,U+96D9,U+96F2,U+9918,U+9EC3;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./7d8212017d1d75160b899ae137d8566d.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+50C5,U+52DE,U+570D,U+5712,U+5718,U+57F7,U+5805,U+5920,U+5C6C,U+5F35,U+64C7,U+6A02,U+6E1B,U+6EFF,U+723E,U+7368,U+7372,U+7C21,U+7D00,U+7D42,U+7D61,U+7E23,U+8072,U+8208,U+85DD,U+88DC,U+8A13,U+8A31,U+8A5E,U+8B1B,U+8CA0-8CA1,U+9023,U+904A,U+9060,U+908A,U+9109,U+9280,U+92B7,U+968A,U+9808,U+984D,U+99AC;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./e83f6d2cb1b816a240a41f1cd95805a2.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+5152,U+52E2,U+5354,U+56B4,U+58D3,U+5BE9,U+5BEB,U+5C64,U+5E79,U+5E7E,U+63A1,U+6AA2,U+71B1,U+722D,U+7642,U+790E,U+7A05,U+7A31,U+7D04,U+7D30,U+7E54,U+7FA3,U+83EF,U+85E5,U+865F,U+8846,U+88DD,U+8996,U+8A55,U+8A66,U+8A71,U+8ACB,U+8B80,U+8ECD,U+9069,U+96A8,U+96E2,U+9810,U+982D,U+986F;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./75a907161dba8ee1c1299d5583a9d5ed.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+5099,U+512A,U+5283,U+53C3,U+5716,U+5E36,U+5EE3,U+5FA9,U+6236,U+65B7,U+6771,U+6975,U+6B77,U+6CC1,U+6E2C,U+71DF,U+72C0,U+76E3,U+7A4D,U+7BC4,U+7D66,U+7DAD,U+7E8C,U+8077,U+81FA,U+842C,U+898B,U+8A9E,U+8AB2,U+8B70,U+8CAC,U+8ECA,U+8FA6,U+9078,U+969B,U+96AA,U+96E3,U+97FF;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./4ad813d85d01b7576e8b72fa8acd8103.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+50F9,U+5247,U+5831,U+5C08,U+5E2B,U+614B,U+6230,U+6C7A,U+6E96,U+74B0,U+7BC0,U+7D1A,U+7DDA,U+7E3D,U+806F,U+88CF,U+89C0,U+8A18,U+8A72,U+8B49,U+8B77,U+8B93,U+8CBB,U+8F03,U+8F49,U+8FB2,U+904B,U+9054,U+91AB,U+9580,U+9818,U+98A8,U+990A,U+9A57,U+9EE8;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./e0e6acb1b5b81067aec1914f4ad42b17.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+50B3,U+5169,U+5275,U+54E1,U+554F,U+55AE,U+5834,U+5C0E,U+66F8,U+689D,U+69CB,U+6A19,U+6A23,U+6B0A,U+6C23,U+6FDF,U+78BA,U+7D44,U+7DB2,U+7FA9,U+7FD2,U+8655,U+8A8D,U+8ABF,U+8AD6,U+8B58,U+8B8A,U+8CEA,U+9084,U+9805,U+985E,U+9EBC;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./9331d6fdf8931f6d10de449b4a25a043.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4E26,U+5011,U+5167,U+52D9,U+5340,U+5C07,U+5F37,U+5F9E,U+64DA,U+6578,U+6A5F,U+7121,U+7576,U+7A2E,U+7D50,U+7D71,U+8853,U+898F,U+8A08,U+8A2D,U+8AAA,U+8CC7,U+9577,U+958B,U+9593,U+96FB,U+984C,U+9EDE;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./5ef6d1e716b84bb97ad1ffd59e6c5242.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4F86,U+500B,U+52D5,U+570B,U+5B78,U+5BE6,U+5C0D,U+61C9,U+6642,U+6703,U+696D,U+7232,U+73FE,U+7522,U+767C,U+7D93,U+8207,U+9019,U+9032,U+904E,U+95DC,U+9AD4;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./145da285ad74cba8ee79d65fd09deb5c.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4E2C,U+5107,U+5155,U+5216,U+5293,U+53B6,U+54F3,U+5523,U+553C,U+5819,U+5ADC,U+5C88,U+5E3B,U+5F61,U+5FEE,U+615D,U+62F6,U+63AD,U+63BE,U+6420,U+6484,U+6499,U+67D9,U+67DD,U+6B43,U+6BF5,U+6D5E,U+6EE0,U+6F46,U+717A,U+71E0,U+72C1,U+73E7,U+746D,U+75B0,U+7603,U+7722,U+778D,U+77E7,U+7809,U+7811,U+78C9,U+7946,U+7967,U+799A,U+7B45,U+7BA2,U+8014,U+80C2,U+80D9,U+810E,U+8159,U+817D,U+81A3,U+81AA,U+8201,U+833C,U+836E,U+83E5,U+8459,U+84CD,U+84D0,U+84F0,U+85B7,U+8729,U+8753,U+877E,U+878B,U+87D3,U+8966,U+89DC,U+89EB,U+8BF6,U+8C2E,U+8D33,U+8D55,U+8E2C,U+8E9C,U+8E9E,U+8ECE,U+8FEE,U+9139,U+914F,U+9174,U+9191,U+94F4,U+953C,U+960C,U+9622,U+98A5,U+9A98,U+9A9F,U+9B48,U+9CA6,U+9CB0,U+9CBA,U+9CCB,U+9E88,U+9F44,U+9F86;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./4e1c75d77f0fc20bc43f8bcaf09f7174.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4E0C,U+4E28,U+4E3F,U+4EC2,U+502E,U+50BA,U+5181,U+522D,U+5281,U+5290,U+5369,U+54D5,U+54DC,U+54FF,U+552A,U+5588,U+55B5,U+5686,U+570A,U+5776,U+5786,U+57A4,U+5820,U+5865,U+58BC,U+5B32,U+5B65,U+5C1C,U+5C66,U+5C6E,U+5C8D,U+5DDB,U+5F2A,U+5F50,U+6067,U+614A,U+619D,U+61D4,U+620B,U+6224-6225,U+6343,U+63F2,U+640B,U+6434,U+6496,U+64D0,U+6509,U+652E,U+67A8,U+6833,U+6844,U+684A,U+6920,U+6957,U+6971,U+6A8E,U+6A91,U+6AA0,U+6BEA,U+6C15,U+6CD0,U+6F24,U+6F2D,U+70C0,U+721D,U+728B,U+72C3,U+72E8,U+730A,U+7338-7339,U+734D,U+752F,U+754E,U+770D,U+7735,U+77A2,U+7857,U+786D,U+78F2,U+791E,U+7953,U+7B58,U+7B9D,U+7BDA,U+7CD7,U+7F32-7F33,U+8022,U+8028-8029,U+8035,U+804D,U+8080,U+80E9,U+80EC,U+80F2,U+8221,U+8274,U+82B0,U+82E0,U+83B0,U+8487-8488,U+848E,U+8539,U+857A,U+85A8,U+867C,U+871E,U+8723,U+8793,U+8803,U+88D2,U+89CC,U+8B26,U+8C8A,U+8C98,U+8D47,U+8DBC,U+8E40,U+8E94,U+8F77,U+8F79,U+9058,U+91A2,U+91B5,U+928E,U+9494,U+94B6,U+94DE,U+94F9,U+950A,U+950E,U+951E,U+952B,U+953E,U+9544,U+9561,U+9564,U+9569,U+95F6,U+9603,U+960D,U+963D,U+9674,U+9794,U+97AB,U+9AB1,U+9AD1,U+9B0F,U+9B2F,U+9C92,U+9C95,U+9CBC,U+9CC6,U+9CD8,U+9E32,U+9E38,U+9E5B,U+9E7E,U+9EB4,U+9EFB-9EFC,U+9F3D;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./ad29e7cc06265fceb8a3b76a5b4bccc2.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4E36,U+4EA0,U+4F91,U+4F94,U+4FC5,U+50ED,U+5182,U+51F5,U+525E,U+5282,U+52F9,U+537A,U+53A3,U+5423,U+54B4,U+54D9,U+55C9,U+57F4,U+580B,U+5902,U+5925,U+5A08,U+5AB5,U+5BE4,U+5C22,U+5CB5,U+5D3E,U+5E80,U+5EE8,U+5FED,U+605D,U+609B,U+609D,U+6243,U+6322,U+63CE,U+640C,U+6445,U+64D7,U+6534,U+6549,U+656B,U+6603,U+674C,U+680A,U+6864,U+6A65,U+6C2A,U+6C5C,U+6D0E,U+6D48,U+6E2B,U+6EB2,U+6EB7,U+706C,U+70B1,U+7113,U+72F3,U+7303,U+7321,U+736C,U+736F,U+74A9,U+750D,U+7513,U+7592,U+75C4,U+760A,U+762D,U+7643,U+7707,U+77B5,U+7839,U+784E,U+7924,U+793B,U+798A,U+7A06,U+7A78,U+7A80,U+7AAD,U+7BA8,U+7BE5,U+7CC8,U+7EC1,U+7F0B,U+7F0F,U+7F12,U+7F68,U+8025,U+809C,U+80AD,U+80B7,U+8204,U+8223,U+822D,U+823B,U+824B,U+825A,U+827D,U+827F,U+82C8,U+8307,U+8347,U+837D,U+839B,U+83F9,U+84B9,U+8579,U+864D,U+86B0,U+86D1,U+86D8,U+86F2,U+8764,U+8770,U+8788,U+8797,U+87B5,U+881B,U+8844,U+88FC,U+8930,U+89D6,U+8BA0,U+8BD4,U+8C02,U+8C2B,U+8C85,U+8E23,U+8F81-8F82,U+8FD5,U+90B6,U+914E,U+943E,U+94B7-94B8,U+94EB,U+950D,U+9514,U+9516,U+9518,U+9529,U+9538,U+953F,U+954E,U+955F,U+95FC,U+9667,U+96B3,U+9792,U+98A1,U+9969,U+9998,U+9A80,U+9A92,U+9A96,U+9CD0,U+9E3A,U+9E71,U+9EE5,U+9EEA,U+9EF9,U+9FA0;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./237df329e1862df9832b864299e88eea.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4EF3,U+4F74,U+507E,U+50D6,U+52D6,U+5326,U+5459,U+54A9,U+55CD,U+572F,U+574C,U+57D8,U+57FD,U+5844,U+59D2,U+5AE0,U+5B16,U+5B37,U+5B80,U+5B84,U+5CBD,U+5E31,U+5E5E,U+5F11,U+5F56,U+5F82,U+5FC4,U+5FC9,U+5FE4,U+600A,U+60DD,U+6106,U+610D,U+63DE,U+63F8,U+643F,U+64E4,U+6634,U+676A,U+67B5,U+6883,U+69D4,U+6B37,U+6C46,U+6D7C,U+6F72,U+6F89,U+6F8C,U+7039,U+71D4,U+727F,U+728F,U+72F4,U+7331,U+74DE,U+75C3,U+75E6,U+7605,U+761B,U+7625,U+763C,U+764D,U+7704,U+7743,U+7747,U+7780,U+7847,U+786A,U+78A5,U+78B9,U+7962,U+7A02-7A03,U+7AAC,U+7AB3,U+7B0A,U+7B4C,U+7C0F,U+7C40,U+7CA2,U+7CF8,U+7D77,U+7E3B,U+7EA1,U+7F07,U+7F0C,U+7F2F,U+7F9D,U+80E8,U+811E,U+812C,U+8136,U+8182,U+822F,U+8233,U+8268,U+8284,U+8288,U+828F,U+8291,U+8311,U+831B,U+835B,U+83A9,U+83DD,U+8406,U+845C,U+84B4,U+84E3,U+850C,U+863C,U+867F,U+86BA,U+86DE,U+87AC-87AD,U+87BD,U+87DB,U+880A,U+883C,U+88BC,U+895E,U+89CF,U+8A48,U+8BDC,U+8C33,U+8C94,U+8DB1,U+8DD6,U+8DE3,U+8E90,U+8F7A,U+90DB,U+9164,U+91AD,U+91AF,U+936A,U+948B,U+94D8,U+9513,U+963C,U+966C,U+9688,U+97B2,U+996B,U+9987,U+9A75,U+9A7A,U+9ADF,U+9B08,U+9B43,U+9C94,U+9CB4,U+9CBD,U+9CD4,U+9E31,U+9E36,U+9E4B,U+9E4E,U+9E68-9E69,U+9EBD,U+9F0D,U+9F37;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./3cdb82c451a1912f7732f32e881e52ec.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4F1B,U+4F7E,U+4FDC,U+50EC,U+51AB,U+51B1,U+5233,U+52A2,U+536E,U+5476,U+54DA,U+55BE,U+564D,U+56DD,U+572C,U+576B,U+57CF,U+57F8,U+5881,U+589A,U+5941,U+5B5B,U+5C25,U+5D1E,U+5D6B,U+5EFE,U+5F58,U+5F73,U+5F8C,U+602B,U+6083,U+6126,U+638E,U+641B,U+6426,U+66DB,U+6769,U+6798,U+67C3,U+681D,U+698D,U+69B1,U+69E0,U+69ED,U+69F2,U+6A18,U+6B39,U+6B9B,U+6BB3,U+6D33,U+6E16,U+6E53,U+6EBB,U+6ED7,U+6F36,U+7035,U+7173,U+7178,U+7228,U+72B4,U+72EF,U+72F7,U+7313,U+739F,U+7481,U+74E0,U+7540,U+755B,U+758B,U+7635,U+7640,U+76A4,U+76CD,U+7B6E,U+7B7B,U+7BFC,U+7C16,U+7C9E,U+7CC7,U+7CE8,U+7EA9,U+7EF2,U+7F02,U+7F21,U+7F23,U+7F74,U+7FBC,U+8016,U+8020,U+80EA,U+8114,U+825F,U+829F,U+82A4,U+8308,U+831A,U+8333,U+836D,U+83B6,U+840F,U+8411,U+855E,U+85A4,U+866E,U+86B5,U+86C4,U+86F1,U+8731,U+873E,U+877B,U+87EA,U+8864,U+887F,U+88E5,U+88F0,U+890A,U+892B,U+89CB,U+89EF,U+89F3,U+8C18,U+8DCF,U+8E3A,U+8E6F,U+8F7E,U+8FB6,U+8FD3,U+902D,U+90BE,U+9161,U+91A3,U+94AC,U+953A,U+9565,U+9568,U+956A,U+956C,U+9654,U+972A,U+9730,U+97B4,U+98E7,U+9967,U+9AA3,U+9ABA,U+9AE1,U+9AED,U+9AF9,U+9C86,U+9C8E,U+9C9A,U+9CA1,U+9CA3,U+9CE2,U+9E2B,U+9E55,U+9E63,U+9E6A,U+9E87,U+9EC9,U+9EE2,U+9F2C,U+9F51;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./9da1db1d667756102414f970fadde7d9.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4E69,U+4F67,U+50A7,U+50E6,U+5196,U+5202,U+523F,U+5363,U+5432,U+54AD,U+54CF,U+5537,U+5575,U+5581,U+55CC,U+55FE,U+561E,U+56DF,U+5709,U+580D,U+59B2,U+5AAA,U+5D24,U+5D74,U+5E42,U+5E8B,U+5EB3,U+5ED2,U+5EF4,U+5FAD,U+6003,U+601B,U+603C,U+6092,U+6100,U+6206,U+62CA,U+63B4,U+646D,U+6535,U+65C4,U+6661,U+6715,U+6861,U+68F9,U+69CA,U+69FF,U+6C05,U+6C0D,U+6CA9,U+6CB2,U+6CD6,U+6CF6-6CF7,U+6CFA,U+6DAB,U+6E54,U+6FB6,U+709D,U+7256,U+727E,U+72AD,U+72FB,U+73E5,U+74BA,U+750F,U+754B,U+75AC,U+75D6,U+7617,U+76B2,U+775A,U+77BD,U+781F,U+78A1,U+7905,U+79B3,U+7B2B,U+7B2E,U+7B31,U+7B3E,U+7B85,U+7B9C,U+7BCC,U+7BEA,U+7C0B,U+7C74,U+7C9C,U+7CC1,U+7E47,U+7E9F,U+7EA5,U+7EE0,U+7EE8,U+7F27,U+7F7E,U+7FB0,U+8031,U+8071,U+8160,U+81A6,U+81C1,U+8234,U+82E1,U+82FB,U+836C,U+83C0,U+83F8,U+841C,U+8489,U+848C,U+84BD,U+8548,U+8627,U+8629,U+872E,U+877D,U+8785,U+8813,U+8816,U+88CE,U+897B,U+89DA,U+8BFC,U+8C35,U+8D46,U+8D4D,U+8DBA,U+8F75,U+9179,U+917E,U+94AB,U+94D7,U+94E5,U+9515,U+952A,U+952C,U+9545,U+961D,U+96E0,U+987C,U+9883,U+989F,U+990D,U+9993,U+9AC0,U+9AEB,U+9B51,U+9C8B,U+9CA0,U+9CCE,U+9E37,U+9E39,U+9E41,U+9E48,U+9EE9,U+9F17,U+9F19,U+9F2F,U+9F39,U+9F80,U+9F85;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./aad71861a2c29565e12cc991817bd952.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+5240,U+5261,U+52AC,U+531A,U+5416,U+5452,U+5456,U+5472,U+5478,U+54BB,U+553F,U+5601,U+572E,U+57D2,U+57EF,U+581E,U+5924,U+5981,U+5997,U+59A3,U+5AB8,U+5B34,U+5D5B,U+5D5D,U+5DEF,U+5E11,U+5E91,U+5ED1,U+5F40,U+600D,U+6019,U+605A,U+60AB,U+6217,U+623D,U+6369,U+65D2,U+670A,U+6753,U+67A7,U+6855,U+6939,U+696E,U+6980,U+6A7C,U+6AAB,U+6B82,U+6BF3,U+6BF9,U+6C19-6C1A,U+6D07,U+6D1A,U+6D2B,U+6F74,U+7085,U+7198,U+71B5,U+725D,U+72FA,U+7322,U+738E,U+7477,U+755A,U+7594,U+75B3,U+760C,U+7615,U+7630,U+763F,U+7654,U+7726,U+77EC,U+7817,U+78D4,U+78D9,U+7B2A,U+7B62,U+7C26,U+7C9D,U+7E9B,U+7EF1,U+7F01,U+7F11,U+7F17,U+7F36,U+7FEE,U+802A,U+80AB,U+80CD,U+80D7,U+8112,U+8169,U+8279,U+8298,U+82CA,U+82D8,U+83D4,U+83DF,U+8401,U+8451,U+845A,U+8476,U+8478,U+84BA,U+84E0,U+851F,U+8556,U+8585,U+868D,U+86E9,U+86F4,U+86F8,U+8765,U+87AB,U+87EE,U+8832,U+8872,U+88B7,U+88E2-88E3,U+8BCE,U+8BD3,U+8BD6,U+8BF9,U+8C16,U+8C73,U+8D40,U+8D5C,U+8DDE,U+8F6D,U+8F94,U+8FE8,U+9011,U+915E,U+9185,U+918C,U+94D1,U+94F3,U+951D,U+9558,U+9567,U+96CE,U+96E9,U+9785,U+9878,U+98D1,U+9954,U+9963,U+9A93,U+9AC1,U+9ACC,U+9B1F,U+9B49,U+9B4D,U+9CA7,U+9CAE,U+9CD3,U+9E46,U+9F22;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./f16c7d5081f29979ef8fc5cc75fcb4c0.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4E47,U+4F65,U+4F89,U+5454,U+54C2,U+54D3,U+54DE,U+55E5,U+560C,U+566B,U+5793,U+57E4,U+593C,U+59AB,U+5AD4,U+5AD8,U+5AF1,U+5B53,U+5BA5,U+5C59,U+5C63,U+5E0F,U+5E14,U+5FBC,U+6004,U+60AD,U+610E,U+61B7,U+624C,U+634C,U+64BA,U+65F0,U+66F7,U+67E2,U+67F0,U+680C,U+686B,U+6989,U+6A17,U+6B81,U+6B84,U+6C06-6C07,U+6D27,U+6D91,U+6E6B,U+6E8F,U+6FDE,U+70BB,U+723B,U+726E,U+72B0,U+72CE,U+72F2,U+7301,U+731E,U+737E,U+748E,U+771A,U+7765,U+7768,U+781C,U+7913,U+7957,U+79D5,U+79EB,U+7A70,U+7A86,U+7B25,U+7B38,U+7B47,U+7B72,U+7BA7,U+7DAE,U+7EE1,U+7EFE,U+7F26,U+7F31,U+801C,U+8043,U+809F,U+8118,U+8188,U+81CC,U+823E,U+82C1,U+82E4,U+82F4,U+8306,U+833A,U+835C,U+839C,U+83BC,U+846D,U+867A,U+868B,U+8734,U+87CA,U+886E,U+887E,U+88A2,U+88C9,U+8BB5,U+8BF3,U+8C04,U+8C17,U+8C1D,U+8C25,U+8C36,U+8C55,U+8C78,U+8D67,U+8D91,U+8DEB-8DEC,U+8DFD,U+8E14,U+8E41,U+8F8E,U+900B,U+90CF,U+9162,U+9172,U+9190,U+92C8,U+948C,U+94AA,U+94C8,U+94CA,U+94D5,U+94DF,U+94E9-94EA,U+94F7,U+94FC-94FD,U+954F,U+9554,U+9559,U+9566,U+9571-9572,U+95F1,U+960F,U+97AF,U+988F,U+98D5,U+992E,U+9955,U+9AB0,U+9B32,U+9C9E,U+9CA5,U+9CA9,U+9CAD,U+9CB1,U+9E47,U+9EE7,U+9F87;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./4c2aef7ccdf062b7216a8bf9fccc7838.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4E5C,U+4E8D,U+4EDF,U+4F5E,U+4F76,U+4FAA,U+4FE6,U+5028,U+5048,U+50EE,U+520E,U+53C1,U+5412,U+5443,U+54DD,U+5577,U+5591,U+55F3,U+560F,U+562C,U+56AF,U+575C,U+5769,U+577C,U+578C,U+57DA,U+5800,U+5889,U+5CA3,U+5D26,U+5EDB,U+5F01,U+5FDD,U+6029,U+6041,U+60B1,U+629F,U+6332,U+63BC,U+647A,U+65AB,U+65C3,U+65C6,U+6600,U+668C,U+669D,U+66BE,U+6800,U+6874,U+68FC,U+690B,U+691F,U+6978,U+69A7,U+6A3E,U+6A50,U+6A5B,U+6B24,U+6C10,U+6C3D,U+6C54,U+6EBD,U+71B3,U+7292,U+72B8,U+72D2,U+7360,U+73A2,U+74FF,U+75A0,U+7633,U+779F,U+7829,U+7AA8,U+7B04,U+7BA6,U+7C1F,U+7CCD,U+7ECB,U+7ED4,U+7ED7,U+7EFB,U+7F35,U+7F5F,U+7FAF,U+7FD5,U+8027,U+80BC,U+8167,U+81CA,U+8244,U+824F,U+82A1,U+82A9,U+82AB,U+82B4,U+8351,U+8368,U+83B3,U+83B8,U+83D8,U+83F0,U+8497,U+858F,U+85FF,U+867B,U+86A8-86A9,U+870A,U+877C,U+8888,U+88DF,U+8921,U+8BEE,U+8C20,U+8C2F,U+8D3D,U+8D59,U+8DBF,U+8DF8,U+8E05,U+9021,U+9044,U+9062,U+908B,U+90EB,U+9123,U+9146,U+918D,U+91AA,U+933E,U+93CA,U+9486,U+9490,U+94AD,U+94B2,U+94D9,U+951B,U+9546,U+955E,U+95E9,U+960B,U+9612,U+9617,U+989A,U+9A78,U+9A7D,U+9AA0,U+9AA2,U+9AC2,U+9B23,U+9C82,U+9C90,U+9CC3,U+9E28,U+9E6C,U+9EFE,U+9F0B;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./d8292bf359df9c0fb958c31104872bd2.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4F25,U+4F32,U+4F7B,U+5250,U+535F,U+538D,U+54A6,U+54D4,U+5533,U+5541,U+5550,U+5556,U+55DD,U+55F5,U+5627,U+5657-5658,U+5664,U+567B,U+56D4,U+57B2,U+59A4,U+5A62,U+5AEB,U+5C3B,U+5CAC,U+5D9D,U+5DB7,U+5F2D,U+5FB5,U+5FF8,U+6079,U+6222,U+623E,U+638A,U+63E0,U+6485,U+64B8,U+64E2,U+66E9,U+67C1,U+67D2,U+67FD,U+6877,U+6924,U+69C1,U+6A97,U+6B8D,U+6BAA,U+6C18,U+6CEB,U+6CEE,U+6D04,U+6D4D,U+6DE0,U+6EB1,U+7110,U+7168,U+71F9,U+7230,U+728D,U+73B3,U+73D0,U+7511,U+75A5,U+75C8,U+75E7,U+7610,U+7619,U+7826,U+782C,U+7856,U+7877,U+7A39,U+7AE6,U+7B0F,U+7BAA,U+7BAC,U+7ED0,U+7F0D,U+7F1F,U+7F45,U+7FBF,U+7FE5,U+8052,U+80DB,U+80DD,U+80FC,U+8132,U+815A,U+816D,U+8228,U+8249,U+82CC,U+8315,U+8378,U+83AA,U+83B4,U+83EA,U+84C1,U+8538,U+859C,U+86B4,U+86CF,U+8722,U+876E,U+87E5,U+8919,U+8BA7,U+8BCC,U+8BDF,U+8BE8,U+8C30,U+8D36,U+8DB5,U+8E1F,U+8E2F,U+8E70,U+8F78,U+8F8B,U+8F8F,U+8F9A,U+90B4,U+90BA,U+90C4,U+90D0,U+90FE,U+917D,U+9487,U+948D,U+94BD,U+94CD,U+94D6,U+94EF,U+9507,U+954A,U+956B,U+9604,U+9615,U+96B9,U+96D2,U+9708,U+989B,U+989E,U+98A7,U+9A88,U+9AB6,U+9B3B,U+9B47,U+9C9B,U+9CCA,U+9CD9,U+9E2C,U+9E5A,U+9E5E,U+9F8A,U+9F8C;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./dc224dd6cb253c68a97e682e17ce21fb.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4E93,U+4EC4,U+4EF5,U+4F27,U+4FE3,U+5080,U+5121,U+51EB,U+5208,U+52F0,U+53F5,U+5453,U+5466,U+54BF,U+54D0,U+5549,U+556D,U+558F,U+55F2,U+571C,U+5739,U+57B4,U+5807,U+58C5,U+59AF,U+59D8,U+5A09,U+5A0C,U+5A4A,U+5A67,U+5AD2,U+5B6C,U+5C50,U+5CA2,U+5D03,U+5D6C,U+5EA0,U+5EBE,U+5FEA,U+6042,U+6120,U+6175,U+6221,U+6339,U+643D,U+659B,U+6677,U+679E,U+67B3,U+6832,U+68F0,U+6934,U+6966,U+6987,U+6998,U+69CE,U+6A3D,U+6A84,U+6AA9,U+6B87,U+6BD6,U+6C16,U+6CD4,U+6DA0,U+6E0C,U+6E86,U+6ECF,U+6F4B,U+7080,U+70B7,U+70CA,U+72D9,U+7352,U+7441,U+74D2,U+75E8,U+7622,U+765E,U+76B4,U+772D,U+7812,U+784C,U+7850,U+789B,U+78F4,U+7A51,U+7B15,U+7B1E,U+7B24,U+7B5A,U+7BB8,U+7BC1,U+7BD9,U+7EA8,U+7EE6,U+7EFA,U+7F1B,U+7F22,U+7F71,U+7FA7,U+7FF3,U+8084,U+80B1,U+80F4,U+81BB,U+81EC,U+8202,U+8210,U+828A,U+828E,U+82E3,U+8369,U+83A8,U+83E1,U+84FC,U+853B,U+85AE,U+86C9,U+8725,U+879F,U+87B3,U+887D,U+88FE,U+8A8A,U+8BA6,U+8C00,U+8C07,U+8C14,U+8C47,U+8D30,U+8DD7,U+8E69,U+8E85,U+8F87,U+9143,U+91BA,U+948F,U+94D2,U+9531,U+95F3,U+9609-960A,U+9765,U+97EA,U+9880,U+996C,U+9980,U+9991,U+9AFB,U+9C87,U+9CB5,U+9CC7,U+9E42,U+9E58,U+9ECD,U+9F88;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./49045505c06c3073a986a45abf13c0d9.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4EBB,U+4FA9,U+502C,U+51C7,U+51FC,U+523D,U+5241,U+530F,U+5464,U+549D,U+54A3,U+5527,U+555C,U+5576,U+55B1,U+55EB,U+5624,U+564C,U+5671,U+5685,U+568F,U+56E1,U+57A1,U+5942,U+5C7A,U+5C98,U+5D27,U+5D6F,U+5DF3,U+5DFD,U+5E19,U+5EB9,U+5EEA,U+5FFE,U+606B,U+6215,U+622C,U+6266,U+62BB,U+6308,U+6387,U+63B8,U+63C6,U+63F6,U+6441,U+6555,U+6775,U+678B,U+6840,U+6860,U+68C2,U+6910,U+6A2F,U+6B92-6B93,U+6BC2,U+6BFD,U+6C29,U+6C86,U+6CC5,U+6D0C,U+6D60,U+6DDD,U+6ED3,U+6EDF,U+6FB9,U+6FD1,U+7023,U+712F,U+7145,U+7284,U+732C,U+73C8,U+73D9,U+740A,U+7457,U+7596,U+759D,U+75A3,U+75D8,U+75E3-75E4,U+75FF,U+7688,U+76E5,U+7818,U+7887,U+789A,U+78B2,U+7CCC,U+7EC0,U+7FE6,U+8012,U+8093,U+80E4,U+80EF,U+82A8,U+8331,U+8366,U+8473,U+84A1,U+84CA,U+84D1,U+857B,U+85D3,U+8605,U+8662,U+86B1,U+86D4,U+86ED,U+86F3,U+8748,U+874C,U+8763,U+89C7,U+89DE,U+89E5,U+8A3E,U+8C21,U+8C49,U+8C7A,U+8E59,U+8F6B,U+8F73,U+8FF3,U+9026,U+902F,U+9099,U+909B,U+90C7,U+914A,U+91AE,U+94A3,U+94AF,U+94BA,U+94BF,U+94CC,U+94F0,U+9697,U+975B,U+977C,U+98A2,U+998A,U+9994-9995,U+9A9B,U+9AB7,U+9AC5,U+9C91,U+9CCF,U+9CD5,U+9E29,U+9EDC,U+9EDF,U+9F89;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./74fe9c399600ed636c4bbe26fa96aa56.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4EDD-4EDE,U+4EE1,U+4FFE,U+5025,U+506C,U+50A5,U+50F3,U+525C,U+539D,U+53FC,U+54E7,U+5514,U+556E,U+557E,U+5599,U+55B9,U+55D4,U+5623,U+5654,U+56D7,U+56EB,U+57A7,U+57D9,U+584D,U+58EC,U+59DD,U+5A32,U+5A55,U+5A75,U+5B71,U+5B73,U+5CE4,U+5D06,U+5E5B,U+5FD2,U+600F,U+62BF,U+634B,U+636D,U+63B3,U+63C4,U+661D,U+6657,U+66A7,U+6849,U+6867,U+6901,U+699B,U+6A28,U+6A79,U+6B46,U+6C21,U+6C24,U+6C32,U+6C35,U+6C4A,U+6CA3,U+6D39,U+6D63,U+6D6F,U+6FEF,U+71E7,U+72CD,U+72F0,U+7325,U+7350,U+7391,U+741A,U+757F,U+7583,U+75B4,U+75F1,U+766F,U+7699,U+7751,U+789C,U+7A17,U+7B08,U+7B33,U+7BE6,U+7C2A,U+7EA3,U+7EB0,U+7EBE,U+7F2C,U+8171,U+821B,U+826E,U+8297,U+82BE,U+82EB,U+830C,U+8314,U+8334,U+83C5,U+83D6,U+83FD,U+843C,U+8564,U+8572,U+85C1,U+8616,U+86A3,U+86AA,U+86B6,U+86C6,U+8708-8709,U+870D,U+87C6,U+8869,U+89D0,U+8B07,U+8BC2,U+8BF0,U+8C2A,U+8C62,U+8C89,U+8D49,U+8D6D,U+8D94,U+8DF9,U+8E2E,U+8E3D,U+8E47,U+8E51,U+8E7F,U+9005,U+9016,U+907D,U+9082,U+9088,U+90B0,U+9495,U+94A4,U+94B9,U+94CB,U+94E1,U+9509,U+9512,U+9552-9553,U+955D,U+96B0,U+96BC,U+9990,U+9CB3,U+9CB7,U+9E57,U+9E82,U+9EE0,U+9F83;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./a3c45be5a3d98ece81ff14c5b8bc42cd.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4EEB,U+4F5D,U+4FDA,U+5106,U+520D,U+52AD,U+530D,U+5310,U+53A9,U+53DF,U+5421,U+544B,U+5477,U+551B,U+5530,U+5555,U+55C4,U+55D1,U+55DF,U+55E4,U+55EA,U+55EC,U+55EF,U+562D,U+56F5,U+56F9,U+5704,U+576D,U+57D5,U+57DD,U+5880,U+599E,U+59BE,U+5ABE,U+5B51,U+5BEE,U+5CBF,U+5CC4,U+5CD2,U+5E96,U+607B,U+61D1,U+626A,U+6371,U+63CD,U+63D6,U+63FF,U+6421,U+64C0,U+66DC,U+67A5,U+6841,U+6954,U+6A47,U+6C94,U+6CA4,U+6D94,U+705E,U+7116,U+726F,U+72DE,U+75B1,U+75B8,U+75C2,U+7719,U+777E,U+7889,U+795C,U+7A88,U+7A95,U+7B90,U+7BD1,U+7CB2,U+7DA6,U+7EEB,U+7EEF,U+7F08,U+7F25,U+7F58,U+7F61,U+7FB8,U+8037,U+8153,U+8174,U+8191,U+8214,U+8222,U+82D5,U+82DC,U+835A,U+8418,U+84FF,U+866C,U+8693,U+86A7,U+86AC,U+86AF,U+86CA,U+86D0,U+8759,U+8760,U+87AF,U+87D1,U+88C6,U+8934,U+89CA,U+89CE,U+8BA3,U+8BAA-8BAB,U+8BDB,U+8BE4,U+8C15,U+8D84,U+8DB8,U+8DC4,U+8DC6,U+8E39,U+8E4B,U+9051,U+90D3,U+9104,U+9150,U+9497,U+949C,U+94E0,U+951F,U+9534,U+9557,U+9562,U+9606,U+965F,U+9791,U+9889,U+9894,U+9974,U+9A9C,U+9AA7,U+9AEF,U+9C88,U+9CA2,U+9CB2,U+9CB6,U+9CC5,U+9CDC,U+9E22,U+9E2A,U+9E67,U+9E6B,U+9E73,U+9EB8,U+9F9B;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./a6c5141f5329dc0076c013a1e58b66a9.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4EE8,U+4F22,U+4F43,U+4F57,U+4F6F,U+4FF8,U+502D,U+507B,U+5345,U+53FB,U+5482,U+54A7,U+54CC,U+550F,U+5544,U+5594,U+55E8,U+564E,U+5785,U+57AD,U+5914,U+5958,U+59AA,U+5A06,U+5AE1,U+5B40,U+5C9C,U+5CCB,U+5D47,U+603F,U+6078,U+607D,U+607F,U+608C,U+609A,U+60FA,U+61FF,U+621B,U+622E,U+63AE,U+6410,U+6414,U+6448,U+64D8,U+6710,U+6748,U+6772,U+680E,U+69AB,U+6C68,U+6C8F,U+6D2E,U+6E4E,U+6E98,U+6FE0,U+7094,U+70E9,U+7119,U+723F,U+73C9,U+74E4,U+753E,U+7548,U+75BD,U+75CD,U+7618,U+7634,U+76C5,U+76F1,U+7708,U+778C,U+7791,U+77B3,U+7823,U+7827,U+7830,U+7893,U+7949,U+79E3,U+7A14,U+7AA0,U+7AFD,U+7BFE,U+7EC2,U+7F03-7F04,U+8200,U+828D,U+82C4,U+82F7,U+832D,U+840B,U+8438,U+852B,U+869D,U+86F0,U+8707,U+8782,U+87A8,U+87D2,U+87E0,U+8839,U+8913,U+891B,U+8941,U+8A07,U+8BC5,U+8BCB,U+8BD2,U+8C11,U+8C29,U+8C32,U+8DCE,U+8DDB,U+8DFA,U+8E09,U+8E1D,U+8E42,U+8E49,U+8E8F,U+8F71-8F72,U+9004,U+9036,U+9097,U+90DC,U+90E2,U+90E6,U+90EF,U+919A,U+91B4,U+938F,U+950F,U+9563,U+9573,U+9649,U+9701,U+972D,U+97A3,U+97EB,U+988C,U+98A6,U+9977,U+997D,U+9A90,U+9A9D,U+9CCD,U+9CDF,U+9E20,U+9E4C,U+9F3E;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./0411a6a08f59518e6c110b629871a0dd.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4EB5,U+4F09,U+4F5A,U+4FCE,U+4FEA,U+4FF3,U+500C,U+500F,U+504E,U+5088,U+52BE,U+5420,U+5457,U+5499,U+549B,U+54D2,U+558B,U+559F,U+55BD,U+55D6,U+565C,U+57A9,U+57ED,U+59F9,U+5A11,U+5A40,U+5AE6,U+5B6A,U+5B93,U+5C99,U+5CC1,U+5D2E,U+5D4B,U+5D99,U+5E54,U+5E61,U+5FCF,U+6002,U+6006,U+6014,U+60C6,U+60DA,U+60F4,U+621F,U+62C8,U+631B,U+631E,U+6619,U+6635,U+6641,U+67AD,U+67B0,U+67B7,U+695D,U+6D35,U+6D9E,U+6DD9,U+6DEC,U+6E11,U+6EC2,U+6EE2,U+6F09,U+6F66,U+6F8D,U+6FC9,U+729F,U+72C8,U+73DE,U+7430,U+7566,U+7579,U+75C9,U+75E2,U+75FC,U+762A,U+77DC,U+7800,U+781D,U+782D,U+783B-783C,U+78A3,U+78EC,U+7980,U+7A23,U+7B95,U+7C0C,U+7C41,U+7C91,U+7CC5,U+7ECC,U+7FCA,U+8006,U+8069,U+807F,U+80ED,U+814B,U+8198,U+82CB,U+82D2,U+834F,U+8360,U+847A,U+84D6,U+84E5,U+8537,U+85D0,U+8671,U+86A4,U+86F9,U+8703,U+8737,U+873B,U+8815,U+8936,U+8BC3,U+8C0C,U+8C0F,U+8C4C,U+8D45,U+8E31,U+8E6D,U+8E76,U+90D7,U+9169,U+9485,U+94DB,U+94E7,U+9503,U+9506,U+9528,U+9542,U+9549,U+95FE,U+961A,U+96C9,U+96F3,U+970E,U+9739,U+9798,U+98D3,U+98D9,U+9968,U+996F,U+9984,U+9997,U+9ACB,U+9E49,U+9E51,U+9E66;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./eda046f596cbe0384d08c1a83af678f0.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4EC9,U+4F8F,U+4FDF,U+501C,U+50A9,U+510B,U+527D,U+542E,U+5486,U+54C6,U+552C,U+556C,U+55B3,U+567C,U+568E,U+5768,U+577B,U+5B17,U+5BB8,U+5C15,U+5D3D,U+5D4A,U+5D82,U+5E1A-5E1B,U+5EA5,U+5FD0-5FD1,U+5FD6,U+5FFF,U+60AF,U+60B4,U+612B,U+6194,U+61CA,U+61F5,U+637B,U+63E9,U+64B5,U+655D,U+65CC,U+664C,U+665F,U+6773,U+6787,U+67E9,U+6845,U+684E,U+688F,U+696B,U+6994,U+69B7,U+6A35,U+6C26,U+6D43,U+6D5C,U+6E6E,U+6E9F,U+6EF9,U+6F2A,U+6F78,U+6FC2,U+70EC,U+714A,U+724D,U+7337,U+733E,U+74F4,U+7572,U+7638,U+7678,U+76C2,U+76F9,U+7762,U+77CD,U+77FD,U+795F,U+7B20,U+7BA9,U+7BAB,U+7BDD,U+7C7C,U+7CB3,U+7CBD,U+7EC9,U+7EF6,U+7F19,U+7F44,U+7F54,U+800B,U+809B,U+80C4,U+816E,U+817C,U+81C0,U+81FE,U+8392,U+83A0,U+8424,U+84AF,U+869C,U+86CE,U+8713,U+87C0,U+87CB,U+8821,U+89D1,U+8BB9,U+8BD8,U+8BE9,U+8D53,U+8D5D,U+8D73,U+8F7C,U+8FE4,U+9041,U+9052,U+905B,U+9095,U+90C5,U+911E,U+9122,U+916A,U+92AE,U+9492,U+94A1,U+94B5,U+94C4,U+94C9,U+9511,U+9517,U+9536-9537,U+9602,U+9616,U+9621,U+9631,U+9753,U+98D2,U+98DA,U+9A81,U+9B03,U+9C85,U+9CA8,U+9CAB,U+9EBE,U+9F10,U+9F8B;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./94ee2d6d7a8f638656c782e65ee82387.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4E15,U+4E2B,U+4EB3,U+4F0E,U+4F64,U+51A2,U+51BC,U+52D0,U+536F,U+53A5,U+53FD,U+5429,U+5494,U+54AF,U+5506,U+5511,U+5522,U+55D2,U+55E1,U+55E6,U+55F7,U+561F,U+5639,U+5659,U+5662,U+5693,U+572A,U+5892,U+5992,U+59A9,U+5A76,U+5AE3,U+5B7D,U+5CAB,U+5CB7,U+5D34,U+5D58,U+5E7A,U+5F0B,U+5F77,U+5FA8,U+6026,U+6035,U+6063,U+60BB,U+60D8,U+60EE,U+6115,U+61E6,U+6248,U+62A1,U+62D7,U+6376,U+64DE,U+652B,U+65CE,U+65D6,U+6666,U+6684,U+66B9,U+6777,U+67D8,U+67DE,U+692D,U+693D,U+6B59,U+6CE0,U+6D54,U+6D8E,U+6DD6,U+6EB4,U+6F15,U+704F,U+7118,U+7172,U+71B9,U+7266,U+728A,U+7396,U+73B7,U+73CF,U+7428,U+742C,U+742E,U+7455,U+74EE,U+7525,U+753A,U+75B5,U+75D4,U+7656,U+765C,U+768E,U+777D,U+7825,U+7837,U+78B4,U+795A,U+79ED,U+7A1E,U+7B06,U+7CDC,U+7F30,U+7F42,U+7F94,U+8004,U+8019,U+80AE,U+8146,U+81C6,U+81FC,U+822B,U+82AA,U+830F,U+832F,U+8340,U+835E,U+8365,U+8385,U+8568,U+8717-8718,U+87FE,U+8902,U+8C12,U+8D32,U+8DF7,U+8E7C,U+8F95,U+8FAB,U+9035,U+909D,U+919B,U+948E,U+949A,U+94BC,U+94C6,U+94F1,U+956F-9570,U+9642,U+968D,U+988A,U+98E8,U+998B,U+99A5,U+9A9E;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./855125e0871ab245f4c9dd756a68d188.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4F2B,U+4FAC,U+5043,U+5055,U+5140,U+5243,U+531D,U+53AE,U+541D,U+5492,U+54A4,U+54AA,U+54CE,U+54FD,U+5520,U+553E,U+557B,U+55C5,U+5608,U+5636,U+563B,U+5773,U+57A0,U+5811,U+587E,U+58D5,U+5A29,U+5A6A,U+5A7A,U+5AC9,U+5B95,U+5C49,U+5C8C,U+5D02,U+5E44,U+5EFF,U+5F29,U+5F89,U+5F9C,U+6005,U+60EC,U+618E,U+630E,U+637A,U+6390,U+63AC,U+63B0,U+6525,U+6538,U+65EE-65EF,U+6631,U+6636,U+6654,U+677C,U+683E,U+68B5,U+6979,U+6988,U+6B9A,U+6C69,U+6C74,U+6CAE,U+6D95,U+6DDE,U+6DE6,U+6DFC,U+6F29,U+7096,U+70C3,U+7131,U+715C,U+7317,U+731D,U+7329,U+73E9,U+7425,U+7490,U+74EF,U+7519,U+75DE,U+7663,U+7691,U+7729,U+783E,U+787C,U+7A79,U+7ABF,U+7B3A,U+7B4F,U+7B60,U+7B75,U+7B8D,U+7BB4,U+7BD3,U+7BE1,U+7CBC,U+7EDB,U+7F1C,U+7F8C,U+7FCE,U+7FF1,U+810D,U+82A5,U+82DE,U+8317,U+8343,U+8364,U+836A,U+853A,U+8543,U+854A,U+8559,U+85B0,U+86E4,U+8715,U+8845,U+8884,U+88E8,U+88F1,U+8C82,U+8D58,U+8DBE,U+8F98,U+9074,U+90A1,U+9149,U+9157,U+93D6,U+94C2,U+94E4,U+95EB,U+95F0,U+9611,U+9619,U+9706,U+970F,U+97ED,U+9A77,U+9AA1,U+9CDD,U+9E2F,U+9E33,U+9E44,U+9E5C,U+9EDD;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./bf921c86b82f4385d1affda530883f1b.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4F58,U+4FD0,U+5156,U+51BD,U+5323,U+535E,U+53F1,U+542D,U+5431,U+545B,U+547B,U+548E,U+54AB,U+5509,U+5567,U+5600,U+5618,U+563F,U+56F1,U+573B,U+574D,U+579B,U+57B8,U+57C2,U+586C,U+58F9,U+5993,U+5996,U+59E3,U+5B62,U+5BA6,U+5C4E,U+5C96,U+5CE5,U+5F99,U+6043,U+6059,U+60B8,U+60ED,U+60F0,U+61A9,U+62A8,U+62FD,U+6342,U+63A3,U+6402,U+642A,U+64A9,U+64AE,U+64B7,U+66F3,U+67B8,U+67E0,U+6886,U+6963,U+69DF,U+6AAC,U+6C50,U+6C76,U+6C85,U+6C8C,U+6CEF,U+6D19,U+6D52,U+6DB8,U+6DC5,U+6E1A,U+6E25,U+6E4D,U+6EA7,U+6F31,U+6FA7,U+6FE1,U+7166,U+736D,U+73C2,U+740F,U+76BF,U+76D4,U+7728,U+776C,U+77A0,U+77F8,U+77FE,U+78D0,U+7A37,U+7A92,U+7AFA,U+7CEF,U+7FB2,U+7FB9,U+7FE1,U+808B,U+80E5,U+81C3,U+8309,U+8431,U+8469,U+84BF,U+84DF,U+8511,U+85B9,U+8638,U+86C0,U+8822,U+8882,U+8885,U+8892,U+892A,U+8983,U+8BA5,U+8BD9,U+8BE0-8BE1,U+8C1A,U+8C1F,U+8C27,U+8C5A,U+8E0C,U+8E52,U+8E74,U+8E87,U+8FC2,U+8FE6,U+900D,U+9068,U+90E7,U+949D,U+94B4,U+94D0,U+94E3,U+9522,U+9556,U+9893,U+9981,U+9A6E,U+9A87,U+9A8A,U+9B13,U+9E3E,U+9E43,U+9E6D,U+9E9D,U+9EDB;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./113ff8f5a338050fa510c7eb173d4426.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4E56,U+4E98,U+4F6C,U+4F70,U+4FE8,U+5014,U+524C,U+5315,U+53E8,U+549A,U+54E6,U+54EE,U+54FC,U+556A,U+5669,U+56FF,U+5944,U+595A,U+598D,U+59D7,U+5B7A,U+5E4C,U+5EB6,U+602F,U+606C,U+607A,U+608D,U+60CB,U+620C,U+6249,U+62C4,U+62ED,U+6345,U+6382,U+6396,U+63C9,U+6400,U+6413,U+6487,U+64AC,U+6556,U+659F,U+65A1,U+6615,U+667E,U+6A80,U+6B83,U+6B86,U+6C30,U+6C5E,U+6CAD,U+6CDE,U+6D31,U+6D93,U+6DA7,U+6DAE,U+6DBF,U+6E5F,U+6EC1,U+6F5E,U+6F7A,U+701B,U+70AB,U+717D,U+71A8,U+7252,U+72C4,U+72E1,U+72E9,U+7315,U+73AE,U+73C0,U+73D1,U+745A,U+752D,U+759F,U+75A4,U+7601,U+7629,U+768B,U+772F,U+77B0,U+783A,U+78FA,U+7977,U+7B71,U+7B94,U+7CE0,U+7EF7,U+7F28,U+7F2B,U+80EB,U+8110,U+812F,U+8148,U+814C,U+81BA,U+8235,U+828B,U+82D4,U+8338,U+8393,U+83C1,U+84D3,U+84E6,U+86DB,U+86FE,U+8757,U+8783,U+8859,U+88A4,U+88F3,U+8BE7,U+8BFD,U+8C24,U+8D4A,U+8D4E,U+8D66,U+8DDA,U+8F76,U+8FE5,U+90AC,U+90B3,U+90B8,U+9119,U+9131,U+94A8,U+94E2,U+94FF,U+9535,U+965B,U+96F9,U+9774,U+998D,U+998F,U+9A7F,U+9AB8,U+9C7F,U+9C9F,U+9CA4,U+9E8B,U+9E92,U+9EEF;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./7da4412e32affd5e7f00e47ac64d5a7b.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4E10,U+4F3A,U+4F5F,U+4F88,U+4F97,U+4FA5,U+504C,U+52FA,U+5364,U+5406,U+545C,U+5471,U+5480,U+5495,U+54DF,U+557C,U+5583,U+55DC,U+55E3,U+5983,U+59CA,U+59E5,U+5A13,U+5A7F,U+5B09,U+5BD0,U+5EB5,U+5F1B,U+5F3C,U+61A7,U+61AC,U+61CB,U+62A0,U+62E7,U+62EE,U+62F4,U+63EA,U+645E,U+6482,U+6593,U+664F,U+66E6,U+672D,U+675E,U+67DA,U+6805,U+6868,U+68A2,U+695E,U+69AD,U+6A90,U+6BE1,U+6CB1,U+6CF1,U+6DC6-6DC7,U+6E0D,U+6E3A,U+6E85,U+6EBA,U+6F7C,U+71EE,U+722A,U+72B7,U+73BA,U+7409,U+7435-7436,U+7459,U+747E,U+7487,U+74E2,U+7504,U+752C,U+7599,U+75A1,U+75CA,U+761F,U+7785,U+77A5,U+77BF,U+78D5,U+7934,U+79A7,U+7B19,U+7C95,U+7CB1,U+7ECA,U+7F81,U+7FCC,U+8046,U+8165,U+819B,U+82AE,U+82B7,U+82D3,U+8301,U+831C,U+837C,U+8398,U+83BA,U+83E0,U+853C,U+8654,U+86DF,U+8712,U+873F,U+874E,U+8925,U+8BB7,U+8BFF,U+8C19,U+8C1B,U+8C2C,U+8D61,U+8E6C,U+8F8A,U+8FF8,U+901E,U+90F4,U+912F,U+9163,U+91DC,U+94B3,U+94C0,U+94E8,U+9539,U+954C-954D,U+9550,U+955B,U+962A,U+9685,U+988D,U+9975,U+9985,U+9A6F,U+9AA5,U+9CB8,U+9E25,U+9E35,U+9E4A;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./ad71e4006ee291d68411a1de8fe2fc42.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4EA2,U+4EA5,U+4EC3,U+4F36,U+4F84,U+501A,U+5029,U+5201,U+5321,U+543C,U+54C7,U+5632,U+5676,U+56B7,U+56E4,U+5703,U+5742,U+57A2-57A3,U+5815,U+58D1,U+5919,U+592D,U+5955,U+5A34,U+5B70,U+5BF0,U+5C41,U+5C91,U+5C94,U+5CE6,U+5CED,U+5D69,U+5DC5,U+5F95,U+604D,U+6055,U+60E6,U+6123,U+618B,U+62CE,U+62D9,U+631F,U+634E,U+6479,U+64D2,U+660A,U+6809,U+68F1,U+68FA,U+693F,U+69B4,U+6A71,U+6B89,U+6BCB,U+6BD9,U+6C40,U+6CF8,U+6D85,U+6DA3,U+6DAA,U+6E43,U+6F3E,U+6F88,U+6FEE,U+70D9,U+733F,U+73F2,U+748B,U+749C,U+749E,U+759A,U+75D2,U+75EB,U+7620,U+766B,U+7738,U+773A,U+77AA,U+78BE,U+795B,U+796F,U+7A20,U+7A96,U+7AA5,U+7B03,U+7B28,U+7B50,U+7B77,U+7BF1,U+7C38,U+7EAD,U+7EC5,U+7EF0,U+7EFD,U+7F0E,U+7F2E,U+7F79,U+7F9A,U+8098,U+80E7,U+8237-8238,U+8299,U+82CE,U+83BD,U+8426,U+8475,U+85D5,U+871A,U+888D,U+891A,U+8BB4,U+8BE3,U+8BEC,U+8BF2,U+8C06,U+8C0D,U+8DB4,U+8DE4,U+8E1E,U+8E66,U+8F84,U+8F97,U+9083,U+9165,U+91C9,U+94B0,U+94F5,U+9504,U+9532,U+956D,U+95FA,U+9668,U+96BD,U+9704,U+9773,U+997A,U+9A8B,U+9CC4;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./8564412afbd1eed6241bffcd68015529.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4FAE,U+516E,U+5195,U+51DB,U+5228,U+527F,U+5288,U+53E9,U+5450,U+5484,U+5490,U+54C9,U+54E9,U+5501,U+56A3,U+56BC,U+5729,U+575E,U+589F,U+5A04-5A05,U+5A25,U+5A36,U+5A77,U+5A9B,U+5AB2,U+5BC7,U+5BDD,U+5C79,U+5CD9,U+5E87,U+5F64,U+5FFB,U+6096,U+60EB,U+60F6,U+6151,U+61A8,U+620D,U+6273,U+627C,U+6289,U+62C7,U+634D,U+6363,U+6452,U+66AE,U+6726,U+6756,U+6789,U+6829,U+6862,U+6866,U+68E3,U+6942,U+6995,U+69CC,U+6A1F,U+6A44,U+6A59,U+6BD3,U+6CBD,U+6CFE,U+6E0E,U+6E44,U+6EA5,U+6EE6,U+6F2F,U+6F8E,U+701A,U+7095,U+7099,U+709C,U+70AF,U+70BD,U+70DB,U+70E8,U+70FD,U+715E,U+7184,U+71CE,U+7235,U+7239,U+72F8,U+74A8,U+7693,U+76CF,U+776B,U+778E,U+7852,U+7948,U+797A,U+79BA,U+79BE,U+79C3,U+79C6,U+79F8,U+7CD9,U+7D6E,U+7EE2,U+7EEE,U+7F24,U+7F2D,U+800D,U+80F3,U+8151,U+818A,U+81E7,U+82B8,U+8339,U+837B,U+8386,U+83CF,U+85DC,U+868C,U+8747,U+88F4,U+8912,U+8C0E,U+8D31,U+8D48,U+8E4A,U+8F99,U+8FE9,U+914C,U+951A,U+952F,U+95F5,U+9698,U+96CD,U+96EF,U+9713,U+97EC,U+996A,U+9992,U+9A74,U+9A79,U+9CBB,U+9CCC;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./c4c7f8e9b543d25b36c084cbfd36c2f4.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4E5E,U+4FEF,U+50A3,U+5189,U+51F3,U+53ED,U+5543,U+5578,U+55D3,U+560E,U+5830,U+59E8,U+5A07,U+5A23,U+5A3C,U+5A9A,U+5AC2,U+5AD6,U+5C2C,U+5C34,U+5CB1,U+5CE8,U+5D0E,U+5E3C,U+5F87,U+5FE1,U+5FF1,U+6064,U+606A,U+60F9,U+6252,U+62C2,U+62E3,U+62EF,U+634F,U+6361,U+63B7,U+63E3,U+6495,U+6512,U+6518,U+65F7,U+6627,U+6714,U+67FF,U+6893,U+6977,U+6984,U+69BB,U+6A31,U+6B7C,U+6BA1,U+6C13,U+6C72,U+6C79,U+6C81,U+6C90,U+6C93,U+6CD3,U+6CD7,U+6D5A,U+6D9F,U+6DCC,U+6E2D,U+6F13,U+6FA1,U+7011,U+707C,U+71A0,U+7280-7281,U+7357,U+745B-745C,U+7480,U+74A7,U+7682,U+76B1,U+76CE,U+7736,U+77D7,U+781A,U+789F,U+7941,U+7A8D,U+7A98,U+7A9C,U+7AFF,U+7B1B,U+7BF7,U+7C07,U+7EAB,U+7EDA,U+7FD8,U+7FDF,U+7FE9,U+803D,U+8116,U+8155,U+8205,U+82C7,U+82DB,U+8304,U+832C,U+8335,U+8446,U+846B,U+8587,U+8611,U+8682,U+868A,U+86D9,U+889C,U+88D8,U+8BBD,U+8C41,U+8D3B-8D3C,U+8DEA,U+8E35,U+8E44,U+8EAC,U+8F8D,U+8FE2,U+9017,U+918B,U+94CE,U+94F2,U+9672,U+9761,U+97A0,U+9A6D,U+9A85,U+9A8F,U+9CD7,U+9E26,U+9E93;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./e0a0937f6f910c5cad1351206bee22c1.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4E4D,U+4F51,U+4F63,U+4FA0,U+5018,U+508D,U+50DA,U+515C,U+51A4,U+5254,U+533E,U+53EE,U+5435,U+548B,U+54D7,U+5587,U+5598,U+55A7,U+5760,U+576F,U+5777,U+57AE,U+58A9,U+5978,U+5A49,U+5B5A,U+5BB5,U+5BC5,U+5BDE,U+5C7F,U+5CEA,U+5E18,U+5F57,U+5F5D,U+601C,U+6021,U+6177,U+625B,U+62F1,U+631D,U+6401,U+6467,U+64BC,U+64C2,U+6577,U+6590,U+65A7,U+6643,U+66DD,U+67D1,U+68CD,U+68D8,U+68E0,U+6930,U+6960,U+69D0,U+6BB4,U+6BD7,U+6C7E,U+6CA5,U+6D3C,U+6DE4,U+6DF3,U+6EC7,U+6ED5,U+6F33,U+6F62,U+708A,U+70C1,U+70EB,U+70F9,U+71AC,U+7316,U+7405,U+7422,U+7426,U+742A,U+745F,U+75AF,U+75EA,U+763E,U+7741,U+7792,U+77A7,U+77EE,U+77F6,U+79E4,U+79FD,U+7A1A,U+7B5D,U+7C3F,U+7C9F,U+7EE5,U+7F09,U+7F15,U+7F2A,U+7F38,U+7F9E,U+804B,U+80B4,U+81FB,U+82AD,U+82B9,U+82DF,U+8354,U+835F,U+8367,U+83B9,U+865E,U+8862,U+89C5,U+8BB3,U+8BB6,U+8DCB,U+8E72,U+8EAF,U+9050,U+9091,U+90F8,U+914B,U+948A,U+94EE,U+9524,U+952D,U+9576,U+962E,U+9647,U+9661,U+96CF,U+9716,U+98A4,U+9A7C,U+9A86,U+9AE6,U+9CD6,U+9E3D;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./db6410528d421cbd28e04ca8a489b9cc.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4EA8,U+4F7C,U+4F83,U+4FD1,U+4FDE,U+4FFA,U+502A,U+50BB,U+50FB,U+5162,U+51F0,U+52C9,U+5319,U+532A,U+53A2,U+5413,U+54C4,U+54D1,U+54E8,U+561B,U+57E0,U+5885,U+58F6,U+59AE,U+5AB3,U+5B9B,U+5BE5,U+5C09,U+5C27,U+5C82,U+5C90,U+5DCD,U+5E37,U+5E90,U+5E9A,U+5F6A,U+5F8A,U+5F98,U+6073,U+60BC,U+6254,U+626F,U+631A,U+6320,U+6328,U+6346,U+63BA,U+6454,U+663C,U+66D9,U+6749,U+67AB,U+6817,U+6854,U+68A7,U+6986,U+6B49,U+6B6A,U+6BEF,U+6CBE,U+6DC4,U+6E1D,U+6E9C,U+6ED4,U+6F4D,U+6FD2,U+70AC,U+7130,U+73CA,U+7476,U+7529,U+762B,U+7696,U+76EF,U+7737,U+7766,U+7838,U+788C,U+7901,U+79E7,U+7A3C,U+7A57,U+7A9F,U+7B0B,U+7C7D,U+7EB6,U+7F20,U+7FA1,U+8018,U+8038,U+803F,U+8086,U+8292,U+829C,U+82D1,U+8327,U+836B,U+839E,U+83F1,U+8403,U+8471,U+849C,U+84C9,U+8517,U+851A,U+87F9,U+88D9,U+88F9,U+8C05,U+8C34,U+8D43,U+8D81,U+8D9F,U+8DFB,U+8E0A,U+8E22,U+8EBA,U+8F69,U+901B,U+902E,U+90AF,U+90DD,U+915D,U+946B,U+94A7,U+94C5,U+9523,U+9551,U+97F6,U+9976,U+99A8,U+9B41,U+9E9F,U+9ED4;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./4d9facde2be05ea10f21554f9f87909f.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+2500,U+4E52-4E53,U+4FCF,U+4FE9,U+4FED,U+50B2,U+5197,U+52AB,U+52CB,U+5306,U+5349,U+5384,U+5395,U+54B1,U+5564,U+5580,U+5589,U+572D,U+574E,U+575F,U+5764,U+57D4,U+59D1,U+5AE9,U+5B5C,U+5C39,U+5C9A,U+5D14,U+5D2D,U+5E06,U+5E27,U+5E62,U+5ED6,U+5F6C,U+6127,U+61BE,U+6233,U+6296,U+62DA,U+62E6,U+62F7,U+6367,U+6380,U+638F,U+655E,U+65ED,U+6628,U+6664,U+66A8,U+674F,U+67A3,U+67EC,U+6853,U+68F5,U+6A0A,U+6B79,U+6C55,U+6C5B,U+6C5D,U+6C82,U+6CE3,U+6D9D,U+6DA4,U+6DA9,U+6DD1,U+6DEB,U+6E24,U+6E5B,U+6F47,U+6F6D,U+6F9C,U+707F,U+70B3,U+70E4,U+7115,U+725F,U+7261,U+72EE,U+73B2,U+741B,U+7433,U+743C,U+7554,U+75F9,U+7750,U+7779,U+7784,U+77A9,U+780D,U+78CB,U+7D0A,U+7F05,U+7FE0,U+8042,U+821C,U+832B,U+838E,U+840D,U+84B2,U+857E,U+8695,U+886B,U+88B1,U+88E4,U+895F,U+8C2D,U+8D3F,U+8D42,U+8D4C,U+8D63,U+8F67,U+8F7F,U+8F9C,U+8FC4,U+8FED,U+90A2,U+90B1,U+90B5,U+90B9,U+9102,U+9493,U+949E,U+9530,U+95EF,U+9608,U+960E,U+978D,U+9A84,U+9B44,U+9C8D,U+9F9A;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./72816b969d8ad992acf9807cbafcb297.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4E1E,U+4EC6,U+4ED5,U+4F50,U+4FA3,U+51A5,U+51AF,U+51C4,U+51CB,U+51D1,U+5225,U+5239,U+5308,U+532E,U+533F,U+5401,U+5475,U+548F,U+54AC,U+54ED,U+5565,U+55FD,U+56DA,U+594E,U+598A,U+59EC,U+5A1F-5A20,U+5B75,U+5BE8,U+5D16,U+5DFE,U+5ECA,U+5F08,U+5F66,U+6020,U+6084,U+611A,U+620A,U+620E,U+62E2,U+63A0,U+63FD,U+6405,U+658B,U+65A9,U+65BC,U+6656,U+6687,U+673D,U+6795,U+67C4,U+6850,U+68AD,U+69A8,U+6A58,U+6B47,U+6C1F,U+6C9B,U+6CA7,U+6CB8,U+6D74,U+6E58,U+6F84,U+7078,U+723D,U+7334,U+739B,U+73AB,U+7470,U+7538,U+7600,U+7626,U+777F,U+77E2,U+78CA,U+7A91,U+7AA6,U+7AE3,U+7C27,U+7CD5,U+7CDF,U+7E82,U+7ED2,U+7EE3,U+7F00,U+7F9F,U+7FC5,U+8113,U+817B,U+8389,U+841D,U+8482,U+8549,U+85C9,U+864F,U+8749,U+8774,U+8910,U+8A79,U+8BC0,U+8BEB,U+8C0A,U+8C79,U+8D29,U+8D50,U+8E29,U+8E81,U+8EB2,U+906E,U+9171,U+949B,U+94A6,U+94AE,U+94C3,U+950C,U+9525,U+9540,U+95FD,U+961C,U+964B,U+96A7,U+96C0,U+97AD,U+9885,U+9890,U+9896,U+997F,U+9ABC,U+9E4F,U+9F9F;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./e0cff2bf0455df5e0e2d28818829ad5f.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4E38,U+4E9F,U+4EC7,U+4F1E,U+4F8D,U+4FCA,U+5026,U+51B6,U+51FF,U+5203,U+522E,U+540F,U+541F,U+5455,U+54B8,U+54C0,U+5507,U+5566,U+558A,U+566C,U+57A6,U+5984,U+59DA,U+5A1C,U+5BA0,U+5BE1,U+5C51,U+5C60,U+5C6F,U+5D29,U+5E05,U+5F0A,U+5F13,U+5F27,U+6094,U+60D5,U+60DF,U+6155,U+621A,U+6241,U+6247,U+6284,U+62D0,U+632A,U+633D,U+635E,U+640F,U+655B,U+658C,U+662D,U+6655,U+67EF,U+6808,U+6816,U+68A8,U+68D5,U+6905,U+6912,U+6BB7,U+6CA6,U+6CAA,U+6CBC,U+6CFC,U+6D3D,U+6DA1,U+6E32,U+6E34,U+70D8,U+70F7,U+7109,U+714E,U+718F,U+7194,U+72E0,U+7410,U+780C,U+785D,U+79B9,U+7B52,U+7BC6,U+7CA5,U+7ECE,U+7ED1,U+7EDE,U+7F1A,U+7FF0,U+8026,U+803B,U+8087,U+809A,U+80BD,U+80F1,U+819D,U+8302,U+8346,U+840E,U+859B,U+85AF,U+8681,U+86EE,U+8700,U+8721,U+88F8,U+8944,U+8A93,U+8B6C,U+8BCF,U+8C1C,U+8C26,U+8C6B,U+8D3E,U+8FB1,U+901D,U+915A,U+916E,U+9170,U+917F,U+94BE,U+94EC,U+96C1,U+973E,U+9877,U+9882,U+9965,U+997C,U+9A9A,U+9CDE,U+9E2D,U+9E7F;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./2d7828f8790196c8a0a272593983e7e1.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4E11,U+4ED1,U+4ED7,U+4F3D,U+4FA8,U+4FD8,U+50E7,U+5154,U+5179,U+5180,U+5188,U+51F9,U+52FE-52FF,U+5320,U+5351-5352,U+535C,U+5415,U+543B,U+5446,U+576A,U+57AB,U+584C,U+5962,U+5986,U+59B9,U+5A18,U+5AC1,U+5BB4,U+5BC2,U+5C38,U+5C61,U+5D1B,U+5DEB,U+5DF7,U+5E16,U+5E1C,U+5ED3,U+5F17,U+606D,U+60E8,U+6124,U+614C,U+6168,U+626D,U+62CC,U+62FE,U+6323,U+6349,U+6614,U+6674,U+679A,U+6869,U+69DB,U+6C70,U+6CF3,U+6D12,U+6D51,U+6DAF,U+6DF9,U+6E89,U+6EA2,U+716E,U+7199,U+72AC,U+72FC,U+7578,U+75AE,U+75B9,U+75F4,U+76D2,U+77BB,U+77EB,U+7898,U+78A7,U+78C5,U+7940,U+79BD,U+79C9,U+7A3D,U+7A46,U+7CA4,U+7EAC,U+7EB1,U+7EF8,U+7F14,U+7FC1,U+7FD4,U+80DA,U+8180,U+8305,U+8328,U+83C7,U+83E9,U+8427,U+85E4,U+85E9,U+8679,U+867E,U+86C7,U+8776,U+8877,U+88D4,U+8C23,U+8D2E,U+8FA3,U+8FB0,U+90AA,U+90CA,U+916F,U+9175,U+9177,U+9489,U+94A9,U+9508,U+9541,U+95F8,U+9640,U+96CC,U+971C,U+971E,U+9738,U+987D,U+98D8,U+9E45,U+9E64;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./64f6391060d10ce8516f2f8d92fe36ff.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4E08,U+4E22,U+5085,U+50F5,U+51F6,U+5265,U+5378,U+537F,U+5389,U+538C,U+53A8,U+53D4,U+53DB,U+541E,U+5440,U+54BD,U+54FA,U+5524,U+5751,U+5792,U+5824,U+59DC,U+5A03,U+5A46,U+5BB0,U+5CFB,U+5D4C,U+5E15,U+5E7D,U+5EB8,U+5F6D,U+6016,U+6068,U+60A0,U+6101,U+6170,U+61C8,U+61D2,U+6208,U+6251,U+62AC,U+62B9,U+62F3,U+6324,U+633A,U+644A,U+6492,U+6572,U+65A5,U+6602,U+660F,U+6652,U+6735,U+67A2,U+67AF,U+67CF,U+680B,U+684C,U+6897,U+6A61,U+6C6A,U+6CFB,U+6D47,U+6D4A,U+6D4F,U+6D9B,U+6DD8,U+6DEE,U+6E23,U+6EE9,U+6F06,U+711A,U+714C,U+727A,U+72D0,U+731C,U+752B,U+7574,U+75D5,U+75F0,U+77AC,U+7897,U+7960,U+7984,U+7AD6,U+7B3C,U+7CAA,U+7CB9,U+7EF5,U+7F62,U+8000,U+8096,U+80D6,U+818F,U+8258,U+8273,U+82A6,U+82CD,U+82EF,U+82F9,U+830E,U+83CA,U+840C,U+8513,U+8521,U+853D,U+85FB,U+8650,U+871C,U+886C,U+8D1E,U+8D5A,U+8D74,U+8F70,U+904F,U+90CE,U+94A5,U+95F7,U+95F9,U+964C,U+970D,U+978B,U+98A0,U+9A73,U+9A82,U+9E70;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./f10c91f227389582e5d7070dee263105.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4E54,U+4EAD,U+4FA6,U+5077,U+5146,U+5256,U+529D,U+52A3,U+5366,U+53A6,U+5496,U+54B3,U+5582,U+5631,U+5784,U+582A,U+5915,U+592F,U+5937,U+5948,U+5974,U+59A8,U+5A31,U+5CB3,U+5F18,U+5F26,U+6012,U+607C,U+60DC,U+6109,U+626E,U+6292,U+629B,U+632B,U+64CE,U+64E6,U+65EC,U+6668,U+6691,U+6760,U+676D,U+67DC,U+6813,U+68B3,U+68CB,U+68D2,U+6BBF,U+6BC5,U+6C41,U+6C92,U+6CAB,U+6CCA,U+6CEA,U+6D66,U+6E0A,U+6EAF,U+6EE8,U+6F58,U+7076,U+7092,U+70C2,U+718A,U+722C,U+72ED,U+72F1,U+730E,U+7384,U+74E3,U+754F,U+76FC,U+7978,U+7A83-7A84,U+7AED,U+7B5B,U+7EBA,U+7EF3,U+7F06,U+7F55,U+8036,U+804A,U+806A,U+80F0,U+813E,U+81B3,U+8206,U+8231,U+8236,U+829D,U+82AC,U+82BD,U+83B2,U+845B,U+84EC,U+8574,U+884D,U+8896,U+8BDE,U+8D2C,U+8D3A,U+8E48,U+8F9F,U+900A,U+9022,U+9038,U+9063,U+90E1,U+94ED,U+9502,U+9510,U+9521,U+968B,U+96C7,U+9709,U+9756,U+9776,U+97E6-97E7,U+9A70,U+9AD3,U+9B45,U+9B54,U+9E3F,U+9ECF;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./8ef61e0254ff924267e7521118ee3965.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4E18,U+4E1B,U+4E7E,U+4E8F,U+51CC,U+51E4,U+51EF,U+51F8,U+524A,U+5251,U+52D8,U+5300,U+5353,U+5362,U+5367,U+5439,U+543E,U+5561,U+575D,U+5821,U+5858,U+5938,U+59D0,U+5B5F,U+5BD3,U+5CAD,U+5CE1,U+5E10,U+5E3D,U+5E7B,U+5E99,U+5F70,U+6028,U+602A,U+604B,U+60A6,U+60E7,U+62AB,U+62D6,U+62D8,U+6321,U+63A9,U+643A,U+6478,U+64C5,U+6500,U+6566,U+659C,U+65A4,U+6734,U+67F4,U+683D,U+6851,U+6876,U+68C9,U+68DA,U+690E,U+699C,U+6B3A,U+6C83,U+6D69,U+6E83,U+6EAA,U+6EDA,U+6EE5,U+6F02,U+70AE,U+71D5,U+7237,U+7272,U+72B9,U+732B,U+7483,U+74DC,U+751C,U+7709,U+77E3,U+7891,U+78F7,U+7965,U+7985,U+7A9D,U+7BEE,U+7CCA,U+7F50,U+7F69,U+7FBD,U+80AA,U+80FA,U+8106,U+81ED,U+8247,U+83B1,U+848B,U+84C4,U+8881,U+888B,U+8BF5,U+8E0F,U+8F88,U+8FEA,U+903C,U+903E,U+9065,U+9080,U+9189,U+94A0,U+94BB,U+94DD,U+9505,U+9526,U+95EA,U+9600,U+966A,U+9699,U+96FE,U+9972,U+9A91,U+9B3C,U+9B42,U+9ECE,U+9F0E;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./07f74f1d225899b032a13e75cd785a07.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4E19,U+4F2A,U+4F69,U+4FF1,U+5144,U+5151,U+5220,U+52DF,U+53C9,U+53E0,U+53F9,U+540A,U+5410,U+554A,U+55BB,U+5634,U+566A,U+574A,U+57C3,U+57CB,U+5835,U+5954,U+5960,U+59A5,U+59FB,U+59FF,U+5ACC,U+5B5D,U+5BF8,U+5DE2,U+5E9E,U+5F04,U+5F25,U+5F2F,U+5FCC-5FCD,U+60D1,U+60E9,U+6148,U+6350,U+642C,U+6591,U+65F1,U+65FA,U+67D4,U+67F3,U+680F,U+682A,U+6842,U+69FD,U+6B20,U+6B67,U+6C2E-6C2F,U+6C57,U+6C88,U+6CF5,U+6DC0,U+6ECB,U+6F20,U+70EF,U+710A,U+71E5,U+72C2,U+72D7,U+731B,U+73BB,U+74F7,U+755C,U+756A,U+75B2,U+76C6,U+76F2,U+775B,U+77E9,U+7802,U+786B,U+795D,U+796D,U+79D2,U+7A77,U+7BAD,U+7EBD,U+80A2,U+80A9,U+810A,U+814A,U+817E,U+81A8,U+81C2,U+820C,U+821F,U+8230,U+827E,U+8352,U+83F2,U+8404,U+8428,U+8461,U+846C,U+8702,U+88AD,U+88D5,U+8D24,U+8D2A,U+8D6B,U+8FBD,U+8FC8,U+9042,U+9093,U+90C1,U+94F8,U+9601,U+96B6,U+96D5,U+97F5,U+9887,U+9971,U+9E23,U+9F7F;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./945e975b23ec7ef955abeebe038a2536.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4E27,U+4E32,U+4EA9,U+4ED4,U+4ED9,U+4FAF,U+5076,U+50AC,U+5112,U+517D,U+51BB,U+526A,U+52B2,U+52C3,U+5339,U+559D,U+55B7,U+56CA,U+5733,U+575B,U+5893,U+58F3,U+5939,U+5951,U+59C6,U+5A74,U+5BBF,U+5C48,U+5DE1,U+5E55,U+5FA1,U+5FBD,U+5FD9,U+5FE7,U+60AC,U+6212,U+629A,U+62DC,U+62E8,U+62FC,U+641E,U+6447,U+649E,U+64B0,U+65C1,U+6606,U+6653,U+66FC,U+676F,U+67AA,U+6843,U+68AF,U+6B23,U+6C1B,U+6C28,U+6C64,U+6CC4,U+6CCC,U+6D46,U+6D78,U+6D8C,U+6DCB,U+6EDE,U+6EF4,U+70AD,U+70B8,U+70E6,U+7545,U+7586,U+75BC,U+76C8,U+76D7,U+7816,U+7845,U+7855,U+788E,U+78B0-78B1,U+79E9,U+7A00,U+7A0D,U+7A3B,U+7A74,U+7B4B,U+7F1D,U+7F8A,U+7FFC,U+8058,U+80C1,U+8138,U+8170,U+817F,U+82B3,U+8361,U+864E,U+8680,U+87BA,U+8854,U+8C6A,U+8D41,U+8D60,U+8D64,U+8D76,U+8E2A,U+8F89,U+8F90,U+8F9E,U+90BB,U+90ED,U+9187,U+953B,U+9610,U+9655,U+9881,U+9988,U+9E21,U+9F20,U+9F3B;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./f8e2e0a4f74408f3ddcae379e951464e.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4EF0,U+4F10,U+5021,U+51C9,U+5200,U+5269,U+5272,U+5398,U+53D9,U+5427,U+54E5,U+5609,U+5761,U+5782,U+5806,U+58E4,U+593A,U+5949,U+5999,U+59BB,U+5B55,U+5B64,U+5B85,U+5B99,U+5BAA,U+5BBE,U+5BC4,U+5BFA,U+5BFF,U+5C16,U+5C18,U+5C4F,U+5DE9,U+5EC9,U+5EF7,U+5F79,U+5F7C,U+6052,U+6070,U+609F,U+60B2,U+62A2,U+62B1,U+6302,U+6355,U+6377,U+63D2,U+63ED,U+642D,U+6446,U+6458,U+64A4,U+654C,U+65E8,U+660C,U+6676,U+66F0,U+6746,U+6770,U+679D,U+6BC1,U+6C22,U+6CC9,U+6D45,U+6E14,U+6E17,U+6EE4,U+6F2B,U+7089,U+7238,U+7275,U+732A,U+7434,U+745E,U+74F6,U+7720,U+7A3F,U+7B11,U+7C97-7C98,U+7D2B,U+7EB2,U+7EB9,U+80A4,U+80C0,U+80CE,U+8212,U+8270,U+84B8,U+852C,U+85AA,U+89C8,U+8BF1,U+8C28,U+8C46,U+8D1D,U+8D5E,U+8D62,U+8F9B,U+8FA8,U+8FF7,U+90AE,U+90D1,U+916C,U+9176,U+9499,U+94FA,U+9635,U+96C5,U+987F,U+9888,U+9A7B,U+9AA4,U+9B4F,U+9E1F,U+9EA6;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./b522f3810a2841ddd51fa55ebca68b4e.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4E39,U+4E43,U+4E95,U+4ED3,U+4EFF,U+5192,U+5237,U+52D2,U+52E4,U+5348,U+5375,U+5531,U+573E,U+5766,U+5783,U+5899,U+58EE,U+594F,U+5976,U+5B8F,U+5C1D,U+5C3A,U+5CB8,U+5D07,U+5E86,U+5F1F,U+5FD8,U+6069,U+60CA,U+6108,U+614E,U+61C2,U+6234,U+626B,U+6270,U+62C6,U+62D2,U+62D4,U+6398,U+63F4,U+6469,U+6562,U+656C,U+65CB,U+6670,U+6696,U+66F9,U+6717,U+675C,U+6846,U+6885,U+6A2A,U+6CF0,U+6D2A,U+6DE1,U+6DFB,U+6F0F,U+6FB3,U+704C,U+7070,U+7267,U+73CD,U+73E0,U+7518,U+758F,U+7686,U+78E8,U+7A97,U+7ADF,U+7AF9,U+7BB1,U+7EB5,U+8015,U+8083,U+80BE,U+80E1,U+80F8,U+8154,U+8179,U+81E3,U+820D,U+8350,U+83AB,U+8463,U+84DD,U+8870,U+8A89,U+8BC8,U+8C8C,U+8D4B,U+8DC3,U+8DCC,U+8DD1,U+8F68,U+8F74,U+8F96,U+8FA9,U+8FDF,U+9003,U+9006,U+90A6,U+94DC,U+9501,U+950B,U+95F2,U+9614,U+9675-9676,U+9686,U+96EA,U+97E9,U+996D,U+9970,U+9EBB;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./d74c61c5bf1b5b946d24306e406ef12d.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4E01,U+4E1D,U+4E4C,U+4EC1,U+4EF2,U+4F0A,U+4F0D,U+4F0F,U+4F19,U+4F26,U+4F38,U+503E,U+5141,U+51B0,U+51E1,U+51FD,U+520A,U+5385,U+5409,U+5434,U+54A8,U+54C8,U+54F2,U+5708,U+5723,U+585E,U+58A8,U+58C1,U+5987-5988,U+5BD2,U+5C3E,U+5CA9,U+5E84,U+5F90,U+5F92,U+5FE0,U+5FFD,U+6050,U+6062,U+6089,U+622A,U+624E,U+6291,U+6316,U+6389,U+641C,U+65D7,U+664B,U+6682,U+6697,U+6731,U+6768,U+67F1,U+6881,U+68A6,U+6CE1,U+6CE5,U+6CFD,U+6D1B,U+6D1E,U+6D25,U+6D59,U+6D6A,U+6D6E,U+6D82,U+6DB5,U+6E21,U+6ED1,U+70BC,U+7206,U+74E6,U+76DF,U+79E6,U+7C4D,U+7C92,U+7EA4,U+8010,U+8033,U+808C,U+80AF,U+80C3,U+80C6,U+80F6,U+8102,U+811A,U+817A,U+82AF,U+8584,U+866B,U+88C2,U+8BAF,U+8BE6,U+8C0B,U+8C10,U+8C31,U+8C37,U+8D21,U+8D4F,U+8D56,U+8DF3,U+8FCE,U+8FD4,U+8FEB,U+903B,U+906D,U+9897,U+9910,U+9A97,U+9C81,U+9ED8;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./61d0dc29a55966f56d5b2eeaab05455e.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4E3D,U+4E58-4E59,U+4E73,U+4EAE,U+4F2F,U+4F73,U+4FC4,U+5012,U+517C,U+51AC,U+51ED,U+523A,U+52C7,U+53EC,U+541B,U+5428,U+552F,U+5740,U+5750,U+5851,U+5854,U+594B,U+5965,U+5B59,U+5B87,U+5C65,U+5CF0,U+5DE7,U+5E78,U+5F03,U+5FC6,U+6015,U+60E0,U+6263,U+62BC-62BD,U+62CD,U+62D3,U+6491,U+65E6,U+66FF,U+670B,U+68B0,U+68EE,U+6B32,U+6B96,U+6BEB,U+6D01,U+6D17,U+6D53,U+6E20,U+6E7F,U+6EB6,U+6F6E,U+706D,U+706F,U+70E7,U+7164,U+7259,U+7262,U+73A9,U+7537,U+7624,U+76D0,U+76DB,U+76FE,U+7761,U+77DB,U+788D,U+78C1,U+79D8,U+7CAE,U+7EA0,U+7EAF,U+7ED8,U+7EEA,U+7F18,U+7F34,U+809D,U+80A0,U+80BF,U+810F,U+8150,U+8377,U+8499,U+8857,U+8863,U+8BD1,U+8BDA,U+8BFA,U+8C01,U+8C22,U+8D75,U+8F85-8F86,U+8FC5,U+8FF9,U+9012,U+9075,U+9192,U+91CE,U+95ED,U+9677,U+9694,U+9707,U+9875,U+989C,U+9A71;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./f43f4fd83d242c0ad349cc21525034a6.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4E71,U+4EA6,U+4F1F,U+4FB5,U+4FD7,U+500D,U+51A0,U+51C0,U+51DD,U+547C,U+559C,U+5706,U+586B,U+590F,U+591C,U+59D3,U+5A5A,U+5A92,U+5B81,U+5C1A,U+5C3C,U+5C3F,U+5C4A,U+5C97,U+5C9B,U+5DDD,U+5E2D,U+5E97,U+5E9F,U+5F39,U+5F69,U+5F7B,U+6000,U+6076,U+6167,U+626C,U+6276,U+6298,U+6311,U+632F,U+6444,U+654F,U+65E7,U+665A,U+66B4,U+672B,U+6740,U+6865,U+695A,U+697C,U+6B22,U+6B8B,U+6C0F,U+6C9F,U+6CBF,U+6DA6,U+6DA8,U+6E7E,U+70C8,U+70DF,U+7126,U+71C3,U+725B,U+7389,U+7591,U+7687,U+77FF,U+793C,U+7956,U+7981,U+79CB,U+7B79,U+7C89,U+7EB7-7EB8,U+7ED5,U+7F72,U+7FFB,U+80BA,U+80DC,U+821E,U+82D7,U+86CB,U+8986,U+8BBC,U+8D25-8D26,U+8D34,U+8D54,U+8D5B,U+8FC1,U+904D,U+9274,U+949F,U+955C,U+95FB,U+9634,U+9646,U+96E8,U+96F7,U+9732,U+9876,U+9A76,U+9A7E,U+9C9C,U+9F50,U+9F84;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./8e650df38c92a1daeb2eef94ecb63720.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4E4F,U+4EA1,U+4EEA,U+4F34,U+4F5B,U+504F,U+518C,U+521A,U+5238,U+52AA,U+5356,U+5377,U+539A,U+53EB,U+5417,U+5448,U+574F,U+5947,U+5956,U+5A01,U+5B54,U+5B63,U+5B8B,U+5B9C,U+5BAB,U+5BBD,U+5BFB,U+5C0A,U+5C4B,U+5DF4,U+5E45,U+5EA7,U+5F31,U+5FAA,U+60A8,U+60EF,U+6293,U+62B5,U+62DF,U+62E5,U+62FF,U+63CF,U+6620,U+675F,U+6863,U+6B4C,U+6B8A,U+6BD5,U+6BDB,U+6C38,U+6C89,U+6C99,U+6CDB,U+6D0B,U+6DF7,U+6F5C,U+707E,U+7530,U+764C,U+786C,U+78B3,U+79C0-79C1,U+79DF,U+7A7F,U+7CD6,U+7E41,U+7F13,U+8017,U+8089,U+80A5,U+8109,U+819C,U+8239,U+82E6,U+8336,U+8363,U+83CC,U+83DC,U+88C1,U+89E6,U+8BBF,U+8BCA,U+8BE2,U+8BF8,U+8C13,U+8D2F,U+8D35,U+8D8B,U+8DDF,U+8DE8,U+8F6E,U+8F91,U+9014,U+94A2,U+963B,U+963F,U+9690,U+96C4,U+96F6,U+996E,U+9986,U+9C7C,U+9F13;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./2130f719214f6eefd719bfd77d894561.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4E45,U+4E4E,U+4F11,U+4F30,U+4FA7,U+507F,U+5170,U+5175,U+51B2,U+51B7,U+5211,U+5218,U+5267,U+526F,U+52B1,U+5361,U+5382,U+53CB,U+53F3,U+53F6,U+5403,U+542F,U+5510,U+592B,U+5957,U+5979,U+5B97,U+5C01,U+5C24,U+5DE8,U+5E0C,U+5E1D,U+5E8A,U+5EF6,U+5F52,U+5F84,U+6162,U+620F,U+62DB,U+653B,U+6551,U+6728,U+677E,U+67B6,U+6B27,U+6C27,U+6C47,U+6C60,U+6D32,U+6D3E,U+6E10,U+6E2F,U+6E56,U+7075,U+708E,U+719F,U+7236,U+724C,U+72AF,U+732E,U+7532,U+75DB,U+76AE,U+76D6,U+76D8,U+7AE5,U+7B7E,U+7BC7,U+7D2F,U+7ECD,U+7EE9,U+7F29,U+7F5A,U+8131,U+822A,U+8349,U+85CF,U+8861,U+8B66,U+8BA2,U+8BA8,U+8BEF,U+8D37-8D38,U+8DA3,U+8DDD,U+8F6F,U+8FFD,U+900F,U+9057,U+9152,U+94B1,U+94C1,U+9605,U+9648,U+9759,U+987A,U+987E,U+9AA8,U+9ED1,U+9F99;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./b1d624c5c25582bf0c77a4c98e92bd48.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4E30,U+4E5D,U+4E70,U+4EB2,U+4F3C,U+501F,U+503A,U+5047,U+505C,U+50A8,U+523B,U+5242,U+5343,U+535A,U+53E5,U+542C,U+5462,U+5473,U+54EA,U+5757,U+5802,U+5B88,U+5B9D,U+5BA3,U+5C04,U+5C81,U+5DE6,U+5E01,U+5E2E,U+5E7C,U+5E93,U+5EAD,U+600E,U+6025,U+613F,U+6269,U+627E,U+62C9,U+6325,U+6388,U+638C,U+63E1,U+64AD,U+6563,U+6597,U+65C5,U+65E2,U+661F,U+6625,U+66F2,U+66FE,U+6742,U+6811,U+690D,U+6B66,U+6C49,U+6C7D,U+6D89,U+6DB2,U+6F14,U+75BE,U+767B,U+7801,U+7968,U+798F,U+7ADE,U+7B14,U+7EC3,U+7EFF,U+7F57,U+7F6A,U+805A,U+80CC,U+8111,U+82CF,U+82E5,U+8457,U+8651,U+865A,U+867D,U+8C08,U+8D2B,U+8FDD,U+9000-9001,U+9010,U+9047,U+907F,U+9178,U+91CA,U+94FE,U+9519,U+9547,U+9644,U+9760,U+9891,U+98DE,U+9999;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./6079b08e66ad2093fb19e2b4d424e547.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4E03,U+4E34,U+4E88,U+4E91,U+4E9A,U+4EAB,U+4EBF,U+4ECD,U+4ED8,U+4EE4,U+4EFD,U+4F24,U+4F59,U+516B,U+5178,U+51FB,U+5224,U+534A,U+5360,U+536B,U+5370-5371,U+5374,U+53CC,U+53E6,U+552E,U+56F0,U+56FA,U+592E,U+5BA4,U+5BDF,U+5C3D,U+5E95,U+5F85,U+6258,U+6297,U+62C5,U+6362,U+63A2,U+63AA,U+64CD,U+65E9,U+671B,U+671D,U+674E,U+677F,U+6982,U+6B62,U+6B7B,U+6BCD,U+6BD2,U+6C61,U+6CB9,U+6CE2,U+706B,U+7231,U+7248,U+73ED,U+751A,U+7533,U+753B,U+7559,U+75AB,U+75C7,U+773C,U+7763,U+77ED,U+79FB,U+7A33,U+7AEF,U+7B26,U+7B51,U+7B54,U+7D22,U+7D27,U+7EA2,U+7EB3,U+7EDD,U+7EE7,U+7EFC,U+7F3A,U+80DE,U+826F,U+8BC9,U+8BD7,U+8D27,U+8D2D,U+8DF5,U+8F7B,U+8F7D,U+8F93,U+9488,U+952E,U+9636,U+9EC4;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./d6959daeedab31290e59ce113535c737.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4E3E,U+4E50,U+4E61,U+4EAC,U+4ECB,U+4F4F,U+4FBF,U+4FC3,U+5019,U+5065,U+50CF,U+514B,U+514D,U+516D,U+5174,U+5207,U+521D,U+52B3,U+53BF,U+5426,U+542B,U+5438,U+56E2,U+56ED,U+5747,U+58EB,U+58F0,U+592A,U+5973,U+5B98,U+5BB3,U+5BC6,U+5BCC,U+5C14,U+5C45,U+5DDE,U+5DEE,U+5EB7,U+5F02,U+5F55,U+5FAE,U+5FD7,U+60A3,U+6267,U+6279,U+62E9,U+635F,U+65AF,U+666E-666F,U+6797,U+67D3,U+6C5F,U+6CB3,U+6E29,U+6E38,U+6EE1,U+6FC0,U+7247,U+72EC,U+7565,U+77F3,U+7834,U+7A81,U+7AD9,U+7B80,U+7C73,U+7EAA,U+7EC8,U+7EDC,U+7F16,U+80A1,U+822C,U+827A,U+82F1,U+8865,U+89C9,U+89D2,U+8BAD,U+8BB2,U+8BCD,U+8D70,U+8FB9,U+8FDC,U+8FDE,U+94F6,U+9500,U+961F,U+9633,U+969C,U+9752,U+989D;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./9c745cd44d8ac99485bd7b24f33dcbbf.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4E14,U+4E25,U+4E89,U+4E92,U+4EC5,U+4F17,U+4FEE,U+5145,U+51CF,U+51E0,U+5217,U+52BF,U+534E-534F,U+538B,U+53E4,U+53F7,U+5468,U+5584,U+56F4,U+571F,U+575A,U+57F9,U+591F,U+5931,U+59CB,U+5B69,U+5BA1-5BA2,U+5C5E,U+5E8F,U+5F20,U+5F80-5F81,U+5FB7,U+5FEB,U+5FF5,U+623F,U+627F,U+62EC,U+6309,U+6392,U+6545,U+65CF,U+663E,U+667A,U+6750,U+6790,U+67D0,U+6B3E,U+70ED,U+7167,U+738B,U+7403,U+7597,U+767D-767E,U+7840,U+79BB,U+7A0E,U+7AE0,U+7FA4,U+82B1,U+836F,U+83B7,U+843D,U+8840,U+88C5,U+8BB8,U+8BDD,U+8BF7,U+8BFB,U+8D1F,U+8D22,U+8D85,U+8DB3,U+8FF0,U+9002,U+914D,U+964D,U+9650,U+9664,U+968F,U+9769,U+97F3,U+987B,U+9996,U+9A6C;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./97bad318e255929cb715bac27d01a3c3.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4E94,U+4EC0,U+4ECA,U+4F9D,U+513F,U+5149,U+518D,U+5199,U+519B,U+5212,U+529E,U+52A9,U+5317,U+5347,U+5373,U+5386,U+53C2,U+53C8,U+53F2,U+544A,U+547D,U+54CD,U+56DE,U+57DF,U+5934,U+59D4,U+5C40,U+5C42,U+5C71,U+5E03,U+5E26,U+5E72,U+5E7F,U+5E9C,U+5F8B,U+6237,U+6253,U+628A,U+63A7,U+6599,U+6613,U+672A,U+6751,U+6781,U+6838,U+68C0,U+6BB5,U+6D4B,U+6D88,U+72B6,U+76CA,U+76D1,U+7701,U+771F,U+795E,U+79EF-79F0,U+7A7A,U+7B56,U+7B97,U+7EA6,U+7EC6-7EC7,U+7EED,U+7EF4,U+7F6E,U+81F4,U+878D,U+89C1,U+89C6,U+8A00,U+8BAE,U+8BC4,U+8BD5,U+8BFE,U+8C61,U+8D8A,U+901F,U+90A3,U+91C7,U+9632,U+9669,U+96BE,U+9884,U+98DF;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./ea2a5eb9904aaa5de82fd5e3e0780b66.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4E07,U+4E16,U+4E1C,U+4F18,U+4F4E,U+4F55,U+4F60,U+4F8B,U+503C,U+515A,U+517B,U+51B3,U+51B5,U+529F,U+5305,U+533B,U+5357,U+53BB,U+53E3,U+53F0,U+5668,U+56FE,U+57CE,U+5883,U+5907,U+590D,U+5B57,U+5B83,U+5F15,U+5F71,U+5FC5,U+6218,U+624B,U+624D,U+6295,U+62A4,U+653E,U+65AD,U+67E5,U+6821,U+6839,U+683C,U+6848,U+6A21,U+6B65,U+6BCF,U+6CE8,U+6D77,U+6DF1,U+6E05,U+7387,U+754C,U+76F4,U+793A,U+7CBE,U+7D20,U+7EBF,U+7ED9,U+8001,U+804C,U+8054,U+81F3,U+8272,U+8303,U+8425,U+897F,U+8BA9,U+8BB0,U+8BE5,U+8BED,U+8D23,U+8D39,U+8F66,U+8FBE,U+8FD1,U+9009,U+9645,U+96C6,U+975E,U+9A8C;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./b257116c50d49d4fcca63041a0bc3729.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4E13,U+4E24,U+4E48-4E49,U+4EF7,U+4F20,U+4F9B,U+505A,U+5143,U+5148,U+5171,U+5177,U+519C,U+51C6,U+5219,U+521B,U+522B,U+53CD,U+53D6-53D7,U+53EA,U+53F8,U+540D,U+5546,U+56DB,U+578B,U+5B58,U+5B8C,U+5BB9,U+5C11,U+5DF1-5DF2,U+5E08,U+5F88,U+6001,U+601D,U+603B,U+606F,U+60F3,U+611F,U+62A5,U+63A8,U+652F,U+6536,U+6539,U+6574,U+65BD,U+6C14,U+6CA1,U+6D4E,U+6E90,U+73AF,U+75C5,U+770B,U+786E,U+7A76,U+7EA7,U+7F51,U+7F8E,U+8003,U+8282,U+89C2,U+8BC1,U+8BC6,U+8DEF,U+8EAB,U+8F6C,U+8F83,U+8FD0,U+9020,U+91CC,U+95E8,U+9662,U+9879,U+9886,U+98CE;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./fec679375c2d9b27c287b4eefb8bd137.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4E60,U+4E66,U+4E8C,U+4E9B,U+4EA4,U+4EF6,U+4EFB,U+4F01,U+4F46,U+5341,U+5355,U+539F,U+53D8,U+5404,U+5411,U+5458,U+573A,U+589E,U+5904,U+5929,U+5B89,U+5BFC,U+5E38,U+5F3A,U+5F62,U+6301,U+6307,U+63A5,U+6548,U+65E0,U+65E5,U+66F4,U+6708,U+670D,U+672F,U+6743,U+6761,U+6784,U+679C,U+6807,U+6837,U+6B21,U+6B63-6B64,U+6BD4,U+6C42,U+6CBB,U+6D41,U+7136,U+7531,U+7740,U+77E5,U+7814,U+793E,U+79D1,U+7ACB,U+7C7B,U+7EC4,U+80B2,U+88AB,U+8BA4,U+8BBA,U+8C03,U+8D28,U+8D77,U+8FD8,U+9053,U+91D1,U+95EE,U+9700;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./957185285f5f008faac15531e26cc371.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4E09,U+4E8B,U+4ECE,U+4EE3,U+4F4D,U+4F7F,U+4FDD,U+4FE1,U+5165,U+5185,U+5229,U+524D,U+52A0,U+533A,U+53CA,U+54C1,U+56E0,U+57FA,U+5916,U+597D,U+5C06,U+5C0F,U+5E02,U+5E73,U+5E76,U+5F00,U+5F0F,U+5F53,U+5F97,U+5FC3,U+60C5,U+610F,U+6216,U+6280,U+636E,U+653F,U+660E,U+6700,U+671F,U+6C34,U+6D3B,U+70B9,U+7269,U+7279,U+7535,U+76EE,U+76F8,U+7A0B,U+7B2C,U+7BA1,U+7CFB,U+7ED3,U+7EDF,U+8868,U+89C4,U+89E3,U+8BA1,U+8BBE,U+8BF4,U+90FD,U+91CF,U+957F,U+95F4,U+9898;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./eb7787ec051c2b621a1ca4101715b0b7.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4E0B,U+4E0E,U+4E3B,U+4E4B,U+4E5F,U+4EA7,U+4ED6,U+4EEC,U+4F53,U+5168,U+516C,U+5173,U+5176,U+5236,U+529B,U+52A1,U+52A8,U+5408,U+540C,U+540E,U+591A,U+5982,U+5B50,U+5BB6,U+5C31,U+5C55,U+5E94,U+5EA6,U+5EFA,U+6027,U+6211,U+6240,U+63D0,U+6559,U+6570,U+6587,U+65B0,U+672C,U+673A,U+6765,U+6C11,U+73B0,U+79CD,U+7B49,U+7ECF,U+8005,U+800C,U+81EA,U+8D44,U+8FC7,U+8FDB,U+901A,U+90E8,U+91CD,U+9762,U+9AD8;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./977d55204b55cc4810b6e33915d95720.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4E00,U+4E0A,U+4E0D,U+4E1A,U+4E2A,U+4E2D,U+4E3A,U+4E86,U+4E8E,U+4EBA,U+4EE5,U+4F1A,U+4F5C,U+51FA,U+5206,U+5230,U+5316,U+53D1,U+53EF,U+548C,U+56FD,U+5728,U+5730,U+5927,U+5B66,U+5B9A,U+5B9E,U+5BF9,U+5DE5,U+5E74,U+6210,U+65B9,U+65F6,U+662F,U+6709,U+6CD5,U+7406,U+751F,U+7528,U+7684,U+80FD,U+884C,U+8981,U+8FD9;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./f7fefc089f1165c9a0957c131901d020.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+2013-2014,U+2018-2019,U+201C-201D,U+2022,U+2026,U+203C,U+25CF,U+3001-3002,U+3008-3011,U+3014-3019,U+FF01,U+FF08-FF09,U+FF0C,U+FF1A-FF1B,U+FF1F,U+FF5B-FF5E;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./7742243b2ae1ceaced62d9b43ba505f3.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4A2-4A3,U+4AE-4B3,U+4B6-4B7,U+4BA-4BB,U+4D4-4D5,U+4D8-4D9,U+4DC-4DF,U+4E4-4E9,U+4F4-4F5;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./4c5a843ee43fd663029df6e4d0e25555.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+42E-44F,U+451-45C,U+45E-45F,U+490-493,U+496-497,U+49A-49B;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./1dde9964abfb9b9b1d7f2ec69f711d31.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+401-40C,U+40E-42D;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./87363b4f34d58fc20a5ec98e98939feb.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+3B0-3CF,U+3D5-3D7;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./468656bcfde0b5e1427e045e41d1b94b.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+374-375,U+37E,U+384-38A,U+38C,U+38E-3A1,U+3A3-3AF;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./c1cced3fe1a721187626b8c6eb27ecf9.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+259,U+25B,U+2B9-2BA,U+2BC,U+2C6-2C7,U+2C9,U+2D8-2DD,U+2F3,U+2F7;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./fe7443cfa956f984e033563487ad5609.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+18F-190,U+192,U+19B,U+1A0-1A1,U+1AF-1B0,U+1CD-1D4,U+1D6,U+1D8,U+1DA,U+1DC,U+1E6-1E7,U+1EA-1EB,U+1F4-1F5,U+1FC-1FF,U+218-21B,U+232-233,U+237;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./a5879355c17269b42ff8ead85d31f595.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+164-17F;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./2604190370d4299b1cc638a657e4a69c.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+12C-163;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./3eabf6a6c7e64cb72876c06e546f085e.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+100-12B;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./ac06ee042314e773e43c626f2cb7f7af.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+CD-FF;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./4d47ad757f5ec26fd54d07888058928e.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+A0-AC,U+AE-CC;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./2f04d0609cf5de6e65c92a1db9b41dee.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+4B-6E,U+70-7E;}@font-face{font-family:"Maple Mono CN";src:local("Maple Mono CN"),url("./4eee787d900af2eff915fa460dcc0904.woff2")format("woff2");font-style:normal;font-display:swap;font-weight:400;unicode-range:U+D,U+20-4A,U+6F;} \ No newline at end of file diff --git a/internal/embedded/static/vendor/fonts/material-symbols/material-symbols-rounded.woff2 b/internal/embedded/static/vendor/fonts/material-symbols/material-symbols-rounded.woff2 new file mode 100644 index 00000000..5d68039f Binary files /dev/null and b/internal/embedded/static/vendor/fonts/material-symbols/material-symbols-rounded.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/material-symbols/subset.json b/internal/embedded/static/vendor/fonts/material-symbols/subset.json new file mode 100644 index 00000000..9d1b5d40 --- /dev/null +++ b/internal/embedded/static/vendor/fonts/material-symbols/subset.json @@ -0,0 +1,137 @@ +{ + "icons": [ + "2d", + "account_tree", + "album", + "archive", + "arrow_back", + "arrow_downward", + "arrow_forward", + "arrow_upward", + "article", + "artist", + "attach_file", + "attachment", + "autoplay", + "bar_chart", + "block", + "book", + "bug_report", + "calendar_month", + "cancel", + "category", + "center_focus_strong", + "chat_bubble", + "check", + "check_circle", + "checklist", + "chevron_left", + "chevron_right", + "chrome_reader_mode", + "circle", + "close", + "comment", + "content_copy", + "copyright", + "css", + "description", + "details", + "domain", + "download", + "draft", + "error", + "exit_to_app", + "favorite", + "fork_right", + "format_list_bulleted", + "format_quote", + "function", + "gif", + "group", + "height", + "help", + "highlight", + "home", + "html", + "http", + "hub", + "iframe", + "image", + "info", + "input", + "keyboard_arrow_down", + "label", + "language", + "light", + "lightbulb", + "link", + "link_2", + "location_on", + "login", + "mail", + "menu", + "menu_open", + "mouse", + "music_note_2", + "navigation", + "notes", + "opacity", + "open_in_new", + "pages", + "palette", + "pause", + "pending", + "pin", + "play_arrow", + "priority_high", + "public", + "radio", + "refresh", + "report", + "resize", + "restart_alt", + "rss_feed", + "scatter_plot", + "science", + "script", + "search", + "sell", + "settings", + "share", + "sort", + "star", + "stars", + "start", + "stop", + "storage", + "style", + "subject", + "switch", + "sync", + "table", + "tag", + "target", + "title", + "toc", + "tooltip", + "topic", + "transform", + "translate", + "tune", + "variables", + "warning", + "zoom_in", + "zoom_out", + "zoom_out_map" + ], + "axes": { + "FILL": { + "name": "Fill", + "min": 0, + "default": 0, + "max": 1 + } + }, + "originalBytes": 5399156, + "subsetBytes": 15120 +} diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-100-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-100-wght-normal.woff2 new file mode 100644 index 00000000..fd4a650b Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-100-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-101-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-101-wght-normal.woff2 new file mode 100644 index 00000000..89711ccc Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-101-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-102-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-102-wght-normal.woff2 new file mode 100644 index 00000000..7bb82fd5 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-102-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-103-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-103-wght-normal.woff2 new file mode 100644 index 00000000..0a6e772e Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-103-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-104-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-104-wght-normal.woff2 new file mode 100644 index 00000000..3ea9ba26 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-104-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-105-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-105-wght-normal.woff2 new file mode 100644 index 00000000..c918b7dc Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-105-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-106-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-106-wght-normal.woff2 new file mode 100644 index 00000000..80b3656e Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-106-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-107-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-107-wght-normal.woff2 new file mode 100644 index 00000000..04bc48b2 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-107-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-108-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-108-wght-normal.woff2 new file mode 100644 index 00000000..6b80965a Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-108-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-109-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-109-wght-normal.woff2 new file mode 100644 index 00000000..6f7dcf47 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-109-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-110-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-110-wght-normal.woff2 new file mode 100644 index 00000000..1d7b89d5 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-110-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-111-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-111-wght-normal.woff2 new file mode 100644 index 00000000..ba62adc9 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-111-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-112-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-112-wght-normal.woff2 new file mode 100644 index 00000000..83be6512 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-112-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-113-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-113-wght-normal.woff2 new file mode 100644 index 00000000..d23335b7 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-113-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-114-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-114-wght-normal.woff2 new file mode 100644 index 00000000..43bf7a76 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-114-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-115-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-115-wght-normal.woff2 new file mode 100644 index 00000000..cac7717f Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-115-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-116-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-116-wght-normal.woff2 new file mode 100644 index 00000000..2b7cdc48 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-116-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-117-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-117-wght-normal.woff2 new file mode 100644 index 00000000..f4f3da98 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-117-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-118-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-118-wght-normal.woff2 new file mode 100644 index 00000000..e2354f8a Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-118-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-119-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-119-wght-normal.woff2 new file mode 100644 index 00000000..13ec918f Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-119-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-21-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-21-wght-normal.woff2 new file mode 100644 index 00000000..9156f0de Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-21-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-22-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-22-wght-normal.woff2 new file mode 100644 index 00000000..bc4ef529 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-22-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-23-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-23-wght-normal.woff2 new file mode 100644 index 00000000..2d992f1c Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-23-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-24-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-24-wght-normal.woff2 new file mode 100644 index 00000000..54327176 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-24-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-25-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-25-wght-normal.woff2 new file mode 100644 index 00000000..d1398140 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-25-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-26-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-26-wght-normal.woff2 new file mode 100644 index 00000000..e8dd122e Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-26-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-27-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-27-wght-normal.woff2 new file mode 100644 index 00000000..7d503249 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-27-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-28-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-28-wght-normal.woff2 new file mode 100644 index 00000000..b3935257 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-28-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-29-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-29-wght-normal.woff2 new file mode 100644 index 00000000..818c542c Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-29-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-30-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-30-wght-normal.woff2 new file mode 100644 index 00000000..901e35f7 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-30-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-31-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-31-wght-normal.woff2 new file mode 100644 index 00000000..6451c4dd Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-31-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-32-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-32-wght-normal.woff2 new file mode 100644 index 00000000..630150f9 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-32-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-33-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-33-wght-normal.woff2 new file mode 100644 index 00000000..164c4fae Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-33-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-34-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-34-wght-normal.woff2 new file mode 100644 index 00000000..1356ab6b Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-34-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-35-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-35-wght-normal.woff2 new file mode 100644 index 00000000..43b854c4 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-35-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-36-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-36-wght-normal.woff2 new file mode 100644 index 00000000..ba4304a1 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-36-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-37-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-37-wght-normal.woff2 new file mode 100644 index 00000000..de0eb719 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-37-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-38-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-38-wght-normal.woff2 new file mode 100644 index 00000000..bf00beb3 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-38-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-39-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-39-wght-normal.woff2 new file mode 100644 index 00000000..603b0013 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-39-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-4-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-4-wght-normal.woff2 new file mode 100644 index 00000000..880ad33e Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-4-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-40-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-40-wght-normal.woff2 new file mode 100644 index 00000000..19a49b19 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-40-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-41-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-41-wght-normal.woff2 new file mode 100644 index 00000000..aa214224 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-41-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-42-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-42-wght-normal.woff2 new file mode 100644 index 00000000..200fc4fb Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-42-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-43-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-43-wght-normal.woff2 new file mode 100644 index 00000000..c0819ec3 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-43-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-44-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-44-wght-normal.woff2 new file mode 100644 index 00000000..d912be06 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-44-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-45-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-45-wght-normal.woff2 new file mode 100644 index 00000000..761b061f Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-45-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-46-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-46-wght-normal.woff2 new file mode 100644 index 00000000..1c3b67d5 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-46-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-47-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-47-wght-normal.woff2 new file mode 100644 index 00000000..b1ad5393 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-47-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-48-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-48-wght-normal.woff2 new file mode 100644 index 00000000..60196c8a Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-48-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-49-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-49-wght-normal.woff2 new file mode 100644 index 00000000..4fa1ef7b Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-49-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-5-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-5-wght-normal.woff2 new file mode 100644 index 00000000..009ef7e7 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-5-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-50-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-50-wght-normal.woff2 new file mode 100644 index 00000000..f7f45995 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-50-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-51-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-51-wght-normal.woff2 new file mode 100644 index 00000000..0238e1f1 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-51-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-52-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-52-wght-normal.woff2 new file mode 100644 index 00000000..715f7804 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-52-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-53-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-53-wght-normal.woff2 new file mode 100644 index 00000000..f4d233a6 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-53-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-54-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-54-wght-normal.woff2 new file mode 100644 index 00000000..8be8a3e1 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-54-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-55-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-55-wght-normal.woff2 new file mode 100644 index 00000000..60fd1f8d Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-55-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-56-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-56-wght-normal.woff2 new file mode 100644 index 00000000..194f1e44 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-56-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-57-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-57-wght-normal.woff2 new file mode 100644 index 00000000..1417e778 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-57-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-58-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-58-wght-normal.woff2 new file mode 100644 index 00000000..563e598b Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-58-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-59-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-59-wght-normal.woff2 new file mode 100644 index 00000000..4dbee833 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-59-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-6-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-6-wght-normal.woff2 new file mode 100644 index 00000000..b0c6cf7a Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-6-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-60-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-60-wght-normal.woff2 new file mode 100644 index 00000000..e6adadba Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-60-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-61-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-61-wght-normal.woff2 new file mode 100644 index 00000000..374bd424 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-61-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-62-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-62-wght-normal.woff2 new file mode 100644 index 00000000..a548f530 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-62-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-63-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-63-wght-normal.woff2 new file mode 100644 index 00000000..6ec61bc8 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-63-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-64-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-64-wght-normal.woff2 new file mode 100644 index 00000000..6e08ccbd Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-64-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-65-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-65-wght-normal.woff2 new file mode 100644 index 00000000..a8e6b82f Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-65-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-66-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-66-wght-normal.woff2 new file mode 100644 index 00000000..c03f4380 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-66-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-67-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-67-wght-normal.woff2 new file mode 100644 index 00000000..adb0b23f Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-67-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-68-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-68-wght-normal.woff2 new file mode 100644 index 00000000..88ce38a3 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-68-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-69-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-69-wght-normal.woff2 new file mode 100644 index 00000000..0ef4a014 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-69-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-70-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-70-wght-normal.woff2 new file mode 100644 index 00000000..8b43b996 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-70-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-71-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-71-wght-normal.woff2 new file mode 100644 index 00000000..f6913520 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-71-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-72-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-72-wght-normal.woff2 new file mode 100644 index 00000000..97c2f9d2 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-72-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-73-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-73-wght-normal.woff2 new file mode 100644 index 00000000..f2ac6765 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-73-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-74-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-74-wght-normal.woff2 new file mode 100644 index 00000000..5e7a7fa2 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-74-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-75-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-75-wght-normal.woff2 new file mode 100644 index 00000000..9e56b481 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-75-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-76-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-76-wght-normal.woff2 new file mode 100644 index 00000000..3af9b945 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-76-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-77-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-77-wght-normal.woff2 new file mode 100644 index 00000000..cb461c57 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-77-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-78-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-78-wght-normal.woff2 new file mode 100644 index 00000000..81006657 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-78-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-79-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-79-wght-normal.woff2 new file mode 100644 index 00000000..d24412c3 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-79-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-80-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-80-wght-normal.woff2 new file mode 100644 index 00000000..27694b83 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-80-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-81-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-81-wght-normal.woff2 new file mode 100644 index 00000000..40666bf7 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-81-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-82-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-82-wght-normal.woff2 new file mode 100644 index 00000000..92d78042 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-82-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-83-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-83-wght-normal.woff2 new file mode 100644 index 00000000..bacc13f8 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-83-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-84-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-84-wght-normal.woff2 new file mode 100644 index 00000000..88e20514 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-84-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-85-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-85-wght-normal.woff2 new file mode 100644 index 00000000..eb26a8a7 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-85-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-86-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-86-wght-normal.woff2 new file mode 100644 index 00000000..812b1d14 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-86-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-87-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-87-wght-normal.woff2 new file mode 100644 index 00000000..9e59b702 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-87-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-88-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-88-wght-normal.woff2 new file mode 100644 index 00000000..475f052b Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-88-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-89-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-89-wght-normal.woff2 new file mode 100644 index 00000000..b88e237f Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-89-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-90-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-90-wght-normal.woff2 new file mode 100644 index 00000000..cc5cc397 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-90-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-91-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-91-wght-normal.woff2 new file mode 100644 index 00000000..4054c5c9 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-91-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-97-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-97-wght-normal.woff2 new file mode 100644 index 00000000..0698a4ec Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-97-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-98-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-98-wght-normal.woff2 new file mode 100644 index 00000000..ea49dca4 Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-98-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-99-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-99-wght-normal.woff2 new file mode 100644 index 00000000..6e39539d Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-99-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-cyrillic-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-cyrillic-wght-normal.woff2 new file mode 100644 index 00000000..42a3c46f Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-cyrillic-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-latin-ext-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-latin-ext-wght-normal.woff2 new file mode 100644 index 00000000..d84c4bbb Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-latin-ext-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-latin-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-latin-wght-normal.woff2 new file mode 100644 index 00000000..138fa1ad Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-latin-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-vietnamese-wght-normal.woff2 b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-vietnamese-wght-normal.woff2 new file mode 100644 index 00000000..6740ff0e Binary files /dev/null and b/internal/embedded/static/vendor/fonts/noto-serif-sc/files/noto-serif-sc-vietnamese-wght-normal.woff2 differ diff --git a/internal/embedded/static/vendor/fonts/noto-serif-sc/wght.css b/internal/embedded/static/vendor/fonts/noto-serif-sc/wght.css new file mode 100644 index 00000000..a89f90e1 --- /dev/null +++ b/internal/embedded/static/vendor/fonts/noto-serif-sc/wght.css @@ -0,0 +1,1009 @@ +/* noto-serif-sc-[4]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-4-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+1f1e9-1f1f5,U+1f1f7-1f1ff,U+1f21a,U+1f232,U+1f234-1f237,U+1f250-1f251,U+1f300,U+1f302-1f308,U+1f30a-1f311,U+1f315,U+1f319-1f320,U+1f324,U+1f327,U+1f32a,U+1f32c-1f32d,U+1f330-1f357,U+1f359-1f37e; +} + +/* noto-serif-sc-[5]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-5-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+fee3,U+fef3,U+ff03-ff04,U+ff07,U+ff0a,U+ff17-ff19,U+ff1c-ff1d,U+ff20-ff3a,U+ff3c,U+ff3e-ff5b,U+ff5d,U+ff61-ff65,U+ff67-ff6a,U+ff6c,U+ff6f-ff78,U+ff7a-ff7d,U+ff80-ff84,U+ff86,U+ff89-ff8e,U+ff92,U+ff97-ff9b,U+ff9d-ff9f,U+ffe0-ffe4,U+ffe6,U+ffe9,U+ffeb,U+ffed,U+fffc,U+1f004,U+1f170-1f171,U+1f192-1f195,U+1f198-1f19a,U+1f1e6-1f1e8; +} + +/* noto-serif-sc-[6]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-6-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+f0a7,U+f0b2,U+f0b7,U+f0c9,U+f0d8,U+f0da,U+f0dc-f0dd,U+f0e0,U+f0e6,U+f0eb,U+f0fc,U+f101,U+f104-f105,U+f107,U+f10b,U+f11b,U+f14b,U+f18a,U+f193,U+f1d6-f1d7,U+f244,U+f27a,U+f296,U+f2ae,U+f471,U+f4b3,U+f610-f611,U+f880-f881,U+f8ec,U+f8f5,U+f8ff,U+f901,U+f90a,U+f92c-f92d,U+f934,U+f937,U+f941,U+f965,U+f967,U+f969,U+f96b,U+f96f,U+f974,U+f978-f979,U+f97e,U+f981,U+f98a,U+f98e,U+f997,U+f99c,U+f9b2,U+f9b5,U+f9ba,U+f9be,U+f9ca,U+f9d0-f9d1,U+f9dd,U+f9e0-f9e1,U+f9e4,U+f9f7,U+fa00-fa01,U+fa08,U+fa0a,U+fa11,U+fb01-fb02,U+fdfc,U+fe0e,U+fe30-fe31,U+fe33-fe44,U+fe49-fe52,U+fe54-fe57,U+fe59-fe66,U+fe68-fe6b,U+fe8e,U+fe92-fe93,U+feae,U+feb8,U+fecb-fecc,U+fee0; +} + +/* noto-serif-sc-[21]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-21-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+9f83,U+9f85-9f8d,U+9f90-9f91,U+9f94-9f96,U+9f98,U+9f9b-9f9c,U+9f9e,U+9fa0,U+9fa2,U+9ff0-9fff,U+a001,U+a007,U+a025,U+a046-a047,U+a057,U+a072,U+a078-a079,U+a083,U+a085,U+a100,U+a118,U+a132,U+a134,U+a1f4,U+a242,U+a4a6,U+a4aa,U+a4b0-a4b1,U+a4b3,U+a9c1-a9c2,U+ac00-ac01,U+ac04,U+ac08,U+ac10-ac11,U+ac13-ac16,U+ac19,U+ac1c-ac1d,U+ac24,U+ac70-ac71,U+ac74,U+ac77-ac78,U+ac80-ac81,U+ac83,U+ac8c,U+ac90,U+ac9f-aca0,U+aca8-aca9,U+acac,U+acb0,U+acbd,U+acc1,U+acc4,U+ace0-ace1,U+ace4,U+ace8,U+acf3,U+acf5,U+acfc-acfd,U+ad00,U+ad0c,U+ad11,U+ad1c,U+ad34,U+ad50,U+ad64,U+ad6c,U+ad70,U+ad74,U+ad7f,U+ad81,U+ad8c,U+adc0,U+adc8,U+addc,U+ade0,U+adf8-adf9,U+adfc,U+ae00,U+ae08-ae09,U+ae0b,U+ae30,U+ae34,U+ae38,U+ae40,U+ae4a,U+ae4c,U+ae54,U+ae68,U+aebc,U+aed8,U+af2c-af2d; +} + +/* noto-serif-sc-[22]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-22-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+9e30-9e33,U+9e35-9e3b,U+9e3e,U+9e40-9e44,U+9e46-9e4e,U+9e51,U+9e53,U+9e55-9e58,U+9e5a-9e5c,U+9e5e-9e63,U+9e66-9e6e,U+9e71,U+9e73,U+9e75,U+9e78-9e79,U+9e7c-9e7e,U+9e82,U+9e86-9e88,U+9e8b-9e8c,U+9e90-9e91,U+9e93,U+9e95,U+9e97,U+9e9d,U+9ea4-9ea5,U+9ea9-9eaa,U+9eb4-9eb5,U+9eb8-9eba,U+9ebc-9ebf,U+9ec3,U+9ec9,U+9ecd,U+9ed0,U+9ed2-9ed3,U+9ed5-9ed6,U+9ed9,U+9edc-9edd,U+9edf-9ee0,U+9ee2,U+9ee5,U+9ee7-9eea,U+9eef,U+9ef1,U+9ef3-9ef4,U+9ef6,U+9ef9,U+9efb-9efc,U+9efe,U+9f0b,U+9f0d,U+9f10,U+9f14,U+9f17,U+9f19,U+9f22,U+9f29,U+9f2c,U+9f2f,U+9f31,U+9f37,U+9f39,U+9f3d-9f3e,U+9f41,U+9f4a-9f4b,U+9f51-9f52,U+9f61-9f63,U+9f66-9f67,U+9f80-9f81; +} + +/* noto-serif-sc-[23]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-23-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+9c82-9c83,U+9c85-9c8c,U+9c8e-9c92,U+9c94-9c9b,U+9c9e-9ca3,U+9ca5-9ca7,U+9ca9,U+9cab,U+9cad-9cae,U+9cb1-9cb7,U+9cb9-9cbd,U+9cbf-9cc0,U+9cc3,U+9cc5-9cc7,U+9cc9-9cd1,U+9cd3-9cda,U+9cdc-9cdd,U+9cdf,U+9ce1-9ce3,U+9ce5,U+9ce9,U+9cee-9cef,U+9cf3-9cf4,U+9cf6,U+9cfc-9cfd,U+9d02,U+9d08-9d09,U+9d12,U+9d1b,U+9d1e,U+9d26,U+9d28,U+9d37,U+9d3b,U+9d3f,U+9d51,U+9d59,U+9d5c-9d5d,U+9d5f-9d61,U+9d6c,U+9d70,U+9d72,U+9d7a,U+9d7e,U+9d84,U+9d89,U+9d8f,U+9d92,U+9daf,U+9db4,U+9db8,U+9dbc,U+9dc4,U+9dc7,U+9dc9,U+9dd7,U+9ddf,U+9df2,U+9df9-9dfa,U+9e0a,U+9e11,U+9e1a,U+9e1e,U+9e20,U+9e22,U+9e28-9e2c,U+9e2e-9e2f; +} + +/* noto-serif-sc-[24]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-24-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+9a80,U+9a83,U+9a85,U+9a88-9a8a,U+9a8d-9a8e,U+9a90,U+9a92-9a93,U+9a95-9a96,U+9a98-9a99,U+9a9b-9aa2,U+9aa5,U+9aa7,U+9aaf-9ab1,U+9ab5-9ab6,U+9ab9-9aba,U+9ac0-9ac4,U+9ac8,U+9acb-9acc,U+9ace-9acf,U+9ad1-9ad2,U+9ad9,U+9adf,U+9ae1,U+9ae3,U+9aea-9aeb,U+9aed-9aef,U+9af4,U+9af9,U+9afb,U+9b03-9b04,U+9b06,U+9b08,U+9b0d,U+9b0f-9b10,U+9b13,U+9b18,U+9b1a,U+9b1f,U+9b22-9b23,U+9b25,U+9b27-9b28,U+9b2a,U+9b2f,U+9b31-9b32,U+9b3b,U+9b43,U+9b46-9b49,U+9b4d-9b4e,U+9b51,U+9b56,U+9b58,U+9b5a,U+9b5c,U+9b5f,U+9b61-9b62,U+9b6f,U+9b77,U+9b80,U+9b88,U+9b8b,U+9b8e,U+9b91,U+9b9f-9ba0,U+9ba8,U+9baa-9bab,U+9bad-9bae,U+9bb0-9bb1,U+9bb8,U+9bc9-9bca,U+9bd3,U+9bd6,U+9bdb,U+9be8,U+9bf0-9bf1,U+9c02,U+9c10,U+9c15,U+9c24,U+9c2d,U+9c32,U+9c39,U+9c3b,U+9c40,U+9c47-9c49,U+9c53,U+9c57,U+9c64,U+9c72,U+9c77-9c78,U+9c7b,U+9c7f-9c80; +} + +/* noto-serif-sc-[25]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-25-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+98dd,U+98e1-98e2,U+98e7-98ea,U+98ec,U+98ee-98ef,U+98f2,U+98f4,U+98fc-98fe,U+9903,U+9905,U+9908,U+990a,U+990c-990d,U+9913-9914,U+9918,U+991a-991b,U+991e,U+9921,U+9928,U+992c,U+992e,U+9935,U+9938-9939,U+993d-993e,U+9945,U+994b-994c,U+9951-9952,U+9954-9955,U+9957,U+995e,U+9963,U+9966-9969,U+996b-996c,U+996f,U+9974-9975,U+9977-9979,U+997d-997e,U+9980-9981,U+9983-9984,U+9987,U+998a-998b,U+998d-9991,U+9993-9995,U+9997-9998,U+99a5,U+99ab,U+99ad-99ae,U+99b1,U+99b3-99b4,U+99bc,U+99bf,U+99c1,U+99c3-99c6,U+99cc,U+99d0,U+99d2,U+99d5,U+99db,U+99dd,U+99e1,U+99ed,U+99f1,U+99ff,U+9a01,U+9a03-9a04,U+9a0e-9a0f,U+9a11-9a13,U+9a19,U+9a1b,U+9a28,U+9a2b,U+9a30,U+9a32,U+9a37,U+9a40,U+9a45,U+9a4a,U+9a4d-9a4e,U+9a52,U+9a55,U+9a57,U+9a5a-9a5b,U+9a5f,U+9a62,U+9a65,U+9a69,U+9a6b,U+9a6e,U+9a75,U+9a77-9a7a,U+9a7d; +} + +/* noto-serif-sc-[26]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-26-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+975b-975c,U+9763,U+9765-9766,U+976c-976d,U+9773,U+9776,U+977a,U+977c,U+9784-9785,U+978e-978f,U+9791-9792,U+9794-9795,U+9798,U+979a,U+979e,U+97a3,U+97a5-97a6,U+97a8,U+97ab-97ac,U+97ae-97af,U+97b2,U+97b4,U+97c6,U+97cb-97cc,U+97d3,U+97d8,U+97dc,U+97e1,U+97ea-97eb,U+97ee,U+97fb,U+97fe-97ff,U+9801-9803,U+9805-9806,U+9808,U+980c,U+9810-9814,U+9817-9818,U+981e,U+9820-9821,U+9824,U+9828,U+982b-982d,U+9830,U+9834,U+9838-9839,U+983c,U+9846,U+984d-984f,U+9851-9852,U+9854-9855,U+9857-9858,U+985a-985b,U+9862-9863,U+9865,U+9867,U+986b,U+986f-9871,U+9877-9878,U+987c,U+9880,U+9883,U+9885,U+9889,U+988b-988f,U+9893-9895,U+9899-989b,U+989e-989f,U+98a1-98a2,U+98a5-98a7,U+98a9,U+98af,U+98b1,U+98b6,U+98ba,U+98be,U+98c3-98c4,U+98c6-98c8,U+98cf-98d6,U+98da-98db; +} + +/* noto-serif-sc-[27]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-27-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+95c4-95ca,U+95cc-95cd,U+95d4-95d6,U+95d8,U+95e1-95e2,U+95e9,U+95f0-95f1,U+95f3,U+95f6,U+95fc,U+95fe-95ff,U+9602-9604,U+9606-960d,U+960f,U+9611-9613,U+9615-9617,U+9619-961b,U+961d,U+9621,U+9628,U+962f,U+963c-963e,U+9641-9642,U+9649,U+9654,U+965b-965f,U+9661,U+9663,U+9665,U+9667-9668,U+966c,U+9670,U+9672-9674,U+9678,U+967a,U+967d,U+9682,U+9685,U+9688,U+968a,U+968d-968e,U+9695,U+9697-9698,U+969e,U+96a0,U+96a3-96a4,U+96a8,U+96aa,U+96b0-96b1,U+96b3-96b4,U+96b7-96b9,U+96bb-96bd,U+96c9,U+96cb,U+96ce,U+96d1-96d2,U+96d6,U+96d9,U+96db-96dc,U+96de,U+96e0,U+96e3,U+96e9,U+96eb,U+96f0-96f2,U+96f9,U+96ff,U+9701-9702,U+9705,U+9708,U+970a,U+970e-970f,U+9711,U+9719,U+9727,U+972a,U+972d,U+9730,U+973d,U+9742,U+9744,U+9748-9749,U+9750-9751,U+975a; +} + +/* noto-serif-sc-[28]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-28-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+94f5,U+94f7,U+94f9,U+94fb-94fd,U+94ff,U+9503-9504,U+9506-9507,U+9509-950a,U+950d-950f,U+9511-9518,U+951a-9520,U+9522,U+9528-952d,U+9530-953a,U+953c-953f,U+9543-9546,U+9548-9550,U+9552-9555,U+9557-955b,U+955d-9568,U+956a-956d,U+9570-9574,U+9583,U+9586,U+9589,U+958e-958f,U+9591-9592,U+9594,U+9598-9599,U+959e-95a0,U+95a2-95a6,U+95a8-95b2,U+95b4,U+95b8-95c3; +} + +/* noto-serif-sc-[29]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-29-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+941c-942b,U+942d-942e,U+9432-9433,U+9435,U+9438,U+943a,U+943e,U+9444,U+944a,U+9451-9452,U+945a,U+9462-9463,U+9465,U+9470-9487,U+948a-9492,U+9494-9498,U+949a,U+949c-949d,U+94a1,U+94a3-94a4,U+94a8,U+94aa-94ad,U+94af,U+94b2,U+94b4-94ba,U+94bc-94c0,U+94c4,U+94c6-94db,U+94de-94ec,U+94ee-94f1,U+94f3; +} + +/* noto-serif-sc-[30]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-30-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+92ec-92ed,U+92f0,U+92f3,U+92f8,U+92fc,U+9304,U+9306,U+9310,U+9312,U+9315,U+9318,U+931a,U+931e,U+9320-9322,U+9324,U+9326-9329,U+932b-932c,U+932f,U+9331-9332,U+9335-9336,U+933e,U+9340-9341,U+934a-9360,U+9362-9363,U+9365-936b,U+936e,U+9375,U+937e,U+9382,U+938a,U+938c,U+938f,U+9393-9394,U+9396-9397,U+939a,U+93a2,U+93a7,U+93ac-93cd,U+93d0-93d1,U+93d6-93d8,U+93de-93df,U+93e1-93e2,U+93e4,U+93f8,U+93fb,U+93fd,U+940e-941a; +} + +/* noto-serif-sc-[31]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-31-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+9163-9164,U+9169,U+9170,U+9172,U+9174,U+9179-917a,U+917d-917e,U+9182-9183,U+9185,U+918c-918d,U+9190-9191,U+919a,U+919c,U+91a1-91a4,U+91a8,U+91aa-91af,U+91b4-91b5,U+91b8,U+91ba,U+91be,U+91c0-91c1,U+91c6,U+91c8,U+91cb,U+91d0,U+91d2,U+91d7-91d8,U+91dd,U+91e3,U+91e6-91e7,U+91ed,U+91f0,U+91f5,U+91f9,U+9200,U+9205,U+9207-920a,U+920d-920e,U+9210,U+9214-9215,U+921c,U+921e,U+9221,U+9223-9227,U+9229-922a,U+922d,U+9234-9235,U+9237,U+9239-923a,U+923c-9240,U+9244-9246,U+9249,U+924e-924f,U+9251,U+9253,U+9257,U+925b,U+925e,U+9262,U+9264-9266,U+9268,U+926c,U+926f,U+9271,U+927b,U+927e,U+9280,U+9283,U+9285-928a,U+928e,U+9291,U+9293,U+9296,U+9298,U+929c-929d,U+92a8,U+92ab-92ae,U+92b3,U+92b6-92b7,U+92b9,U+92c1,U+92c5-92c6,U+92c8,U+92cc,U+92d0,U+92d2,U+92e4,U+92ea; +} + +/* noto-serif-sc-[32]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-32-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+9004,U+900b,U+9011,U+9015-9016,U+901e,U+9021,U+9026,U+902d,U+902f,U+9031,U+9035-9036,U+9039-903a,U+9041,U+9044-9046,U+904a,U+904f-9052,U+9054-9055,U+9058-9059,U+905b-905e,U+9060-9062,U+9068-9069,U+906f,U+9072,U+9074,U+9076-907a,U+907c-907d,U+9081,U+9083,U+9085,U+9087-908b,U+908f,U+9095,U+9097,U+9099-909b,U+909d,U+90a0-90a1,U+90a8-90a9,U+90ac,U+90b0,U+90b2-90b4,U+90b6,U+90b8,U+90ba,U+90bd-90be,U+90c3-90c5,U+90c7-90c8,U+90cf-90d0,U+90d3,U+90d5,U+90d7,U+90da-90dc,U+90de,U+90e2,U+90e4,U+90e6-90e7,U+90ea-90eb,U+90ef,U+90f4-90f5,U+90f7,U+90fe-9100,U+9104,U+9109,U+910c,U+9112,U+9114-9115,U+9118,U+911c,U+911e,U+9120,U+9122-9123,U+9127,U+912d,U+912f-9132,U+9139-913a,U+9143,U+9146,U+9149-914a,U+914c,U+914e-9150,U+9154,U+9157,U+915a,U+915d-915e,U+9161-9162; +} + +/* noto-serif-sc-[33]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-33-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+8e41-8e42,U+8e47,U+8e49-8e4b,U+8e50-8e53,U+8e59-8e5a,U+8e5f-8e60,U+8e64,U+8e69,U+8e6c,U+8e70,U+8e74,U+8e76,U+8e7a-8e7c,U+8e7f,U+8e84-8e85,U+8e87,U+8e89,U+8e8b,U+8e8d,U+8e8f-8e90,U+8e94,U+8e99,U+8e9c,U+8e9e,U+8eaa,U+8eac,U+8eb0,U+8eb6,U+8ec0,U+8ec6,U+8eca-8ece,U+8ed2,U+8eda,U+8edf,U+8ee2,U+8eeb,U+8ef8,U+8efb-8efe,U+8f03,U+8f09,U+8f0b,U+8f12-8f15,U+8f1b,U+8f1d,U+8f1f,U+8f29-8f2a,U+8f2f,U+8f36,U+8f38,U+8f3b,U+8f3e-8f3f,U+8f44-8f45,U+8f49,U+8f4d-8f4e,U+8f5f,U+8f6b,U+8f6d,U+8f71-8f73,U+8f75-8f76,U+8f78-8f7a,U+8f7c,U+8f7e,U+8f81-8f82,U+8f84,U+8f87,U+8f8a-8f8b,U+8f8d-8f8f,U+8f94-8f95,U+8f97-8f9a,U+8fa6,U+8fad-8faf,U+8fb2,U+8fb5-8fb7,U+8fba-8fbc,U+8fbf,U+8fc2,U+8fcb,U+8fcd,U+8fd3,U+8fd5,U+8fd7,U+8fda,U+8fe2-8fe5,U+8fe8-8fe9,U+8fee,U+8ff3-8ff4,U+8ff8,U+8ffa; +} + +/* noto-serif-sc-[34]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-34-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+8cbd,U+8cbf-8cc4,U+8cc7-8cc8,U+8cca,U+8ccd,U+8cd1,U+8cd3,U+8cdb-8cdc,U+8cde,U+8ce0,U+8ce2-8ce4,U+8ce6-8ce8,U+8cea,U+8ced,U+8cf4,U+8cf8,U+8cfa,U+8cfc-8cfd,U+8d04-8d05,U+8d07-8d08,U+8d0a,U+8d0d,U+8d0f,U+8d13-8d14,U+8d16,U+8d1b,U+8d20,U+8d30,U+8d32-8d33,U+8d36,U+8d3b,U+8d3d,U+8d40,U+8d42-8d43,U+8d45-8d46,U+8d48-8d4a,U+8d4d,U+8d51,U+8d53,U+8d55,U+8d59,U+8d5c-8d5d,U+8d5f,U+8d61,U+8d66-8d67,U+8d6a,U+8d6d,U+8d71,U+8d73,U+8d84,U+8d90-8d91,U+8d94-8d95,U+8d99,U+8da8,U+8daf,U+8db1,U+8db5,U+8db8,U+8dba,U+8dbc,U+8dbf,U+8dc2,U+8dc4,U+8dc6,U+8dcb,U+8dce-8dcf,U+8dd6-8dd7,U+8dda-8ddb,U+8dde,U+8de1,U+8de3-8de4,U+8de9,U+8deb-8dec,U+8df0-8df1,U+8df6-8dfd,U+8e05,U+8e07,U+8e09-8e0a,U+8e0c,U+8e0e,U+8e10,U+8e14,U+8e1d-8e1f,U+8e23,U+8e26,U+8e2b-8e31,U+8e34-8e35,U+8e39-8e3a,U+8e3d,U+8e40; +} + +/* noto-serif-sc-[35]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-35-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+8b80,U+8b83,U+8b8a,U+8b8c,U+8b90,U+8b93,U+8b99-8b9a,U+8ba0,U+8ba3,U+8ba5-8ba7,U+8baa-8bac,U+8bb4-8bb5,U+8bb7,U+8bb9,U+8bc2-8bc3,U+8bc5,U+8bcb-8bcc,U+8bce-8bd0,U+8bd2-8bd4,U+8bd6,U+8bd8-8bd9,U+8bdc,U+8bdf,U+8be3-8be4,U+8be7-8be9,U+8beb-8bec,U+8bee,U+8bf0,U+8bf2-8bf3,U+8bf6,U+8bf9,U+8bfc-8bfd,U+8bff-8c00,U+8c02,U+8c04,U+8c06-8c07,U+8c0c,U+8c0f,U+8c11-8c12,U+8c14-8c1b,U+8c1d-8c21,U+8c24-8c25,U+8c27,U+8c2a-8c2c,U+8c2e-8c30,U+8c32-8c36,U+8c3f,U+8c47-8c4c,U+8c4e-8c50,U+8c54-8c56,U+8c62,U+8c68,U+8c6c,U+8c73,U+8c78,U+8c7a,U+8c82,U+8c85,U+8c89-8c8a,U+8c8d-8c8e,U+8c90,U+8c93-8c94,U+8c98,U+8c9d-8c9e,U+8ca0-8ca2,U+8ca7-8cac,U+8caf-8cb0,U+8cb3-8cb4,U+8cb6-8cb9,U+8cbb-8cbc; +} + +/* noto-serif-sc-[36]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-36-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+8a15-8a18,U+8a1a-8a1b,U+8a1d,U+8a1f,U+8a22-8a23,U+8a25,U+8a2b,U+8a2d,U+8a31,U+8a33-8a34,U+8a36-8a38,U+8a3a,U+8a3c,U+8a3e,U+8a40-8a41,U+8a46,U+8a48,U+8a50,U+8a52,U+8a54-8a55,U+8a58,U+8a5b,U+8a5d-8a63,U+8a66,U+8a69-8a6b,U+8a6d-8a6e,U+8a70,U+8a72-8a73,U+8a7a,U+8a85,U+8a87,U+8a8a,U+8a8c-8a8d,U+8a90-8a92,U+8a95,U+8a98,U+8aa0-8aa1,U+8aa3-8aa6,U+8aa8-8aa9,U+8aac-8aae,U+8ab0,U+8ab2,U+8ab8-8ab9,U+8abc,U+8abe-8abf,U+8ac7,U+8acf,U+8ad2,U+8ad6-8ad7,U+8adb-8adc,U+8adf,U+8ae1,U+8ae6-8ae8,U+8aeb,U+8aed-8aee,U+8af1,U+8af3-8af4,U+8af7-8af8,U+8afa,U+8afe,U+8b00-8b02,U+8b07,U+8b0a,U+8b0c,U+8b0e,U+8b10,U+8b17,U+8b19,U+8b1b,U+8b1d,U+8b20-8b21,U+8b26,U+8b28,U+8b2c,U+8b33,U+8b39,U+8b3e-8b3f,U+8b41,U+8b45,U+8b49,U+8b4c,U+8b4f,U+8b57-8b58,U+8b5a,U+8b5c,U+8b5e,U+8b60,U+8b6c,U+8b6f-8b70,U+8b72,U+8b74,U+8b77,U+8b7d; +} + +/* noto-serif-sc-[37]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-37-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+8882,U+8884-8886,U+8888,U+888f,U+8892-8893,U+889b,U+88a2,U+88a4,U+88a6,U+88a8,U+88aa,U+88ae,U+88b1,U+88b4,U+88b7,U+88bc,U+88c0,U+88c6-88c9,U+88ce-88cf,U+88d1-88d3,U+88d8,U+88db-88dd,U+88df,U+88e1-88e3,U+88e5,U+88e8,U+88ec,U+88f0-88f1,U+88f3-88f4,U+88fc-88fe,U+8900,U+8902,U+8906-8907,U+8909-890c,U+8912-8915,U+8918-891b,U+8921,U+8925,U+892b,U+8930,U+8932,U+8934,U+8936,U+893b,U+893d,U+8941,U+894c,U+8955-8956,U+8959,U+895c,U+895e-8960,U+8966,U+896a,U+896c,U+896f-8970,U+8972,U+897b,U+897e,U+8980,U+8983,U+8985,U+8987-8988,U+898c,U+898f,U+8993,U+8997,U+899a,U+89a1,U+89a7,U+89a9-89aa,U+89b2-89b3,U+89b7,U+89c0,U+89c7,U+89ca-89cc,U+89ce-89d1,U+89d6,U+89da,U+89dc,U+89de,U+89e5,U+89e7,U+89eb,U+89ef,U+89f1,U+89f3-89f4,U+89f8,U+89ff,U+8a01-8a03,U+8a07-8a0a,U+8a0e-8a0f,U+8a13; +} + +/* noto-serif-sc-[38]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-38-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+86f4,U+86f8-86f9,U+86fb,U+86fe,U+8703,U+8706-870a,U+870d,U+8711-8713,U+871a,U+871e,U+8722-8723,U+8725,U+8729,U+872e,U+8731,U+8734,U+8737,U+873a-873b,U+873e-8740,U+8742,U+8747-8748,U+8753,U+8755,U+8757-8758,U+875d,U+875f,U+8762-8766,U+8768,U+876e,U+8770,U+8772,U+8775,U+8778,U+877b-877e,U+8782,U+8785,U+8788,U+878b,U+8793,U+8797,U+879a,U+879e-87a0,U+87a2-87a3,U+87a8,U+87ab-87ad,U+87af,U+87b3,U+87b5,U+87bd,U+87c0,U+87c4,U+87c6,U+87ca-87cb,U+87d1-87d2,U+87db-87dc,U+87de,U+87e0,U+87e5,U+87ea,U+87ec,U+87ee,U+87f2-87f3,U+87fb,U+87fd-87fe,U+8802-8803,U+8805,U+880a-880b,U+880d,U+8813-8816,U+8819,U+881b,U+881f,U+8821,U+8823,U+8831-8832,U+8835-8836,U+8839,U+883b-883c,U+8844,U+8846,U+884a,U+884e,U+8852-8853,U+8855,U+8859,U+885b,U+885d-885e,U+8862,U+8864,U+8869-886a,U+886e-886f,U+8872,U+8879,U+887d-887f; +} + +/* noto-serif-sc-[39]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-39-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+8548,U+854e,U+8553,U+8556-8557,U+8559,U+855e,U+8561,U+8564-8565,U+8568-856a,U+856d,U+856f-8570,U+8572,U+8576,U+8579-857b,U+8580,U+8585-8586,U+8588,U+858a,U+858f,U+8591,U+8594,U+8599,U+859c,U+85a2,U+85a4,U+85a6,U+85a8-85a9,U+85ab-85ac,U+85ae,U+85b7-85b9,U+85be,U+85c1,U+85c7,U+85cd,U+85d0,U+85d3,U+85d5,U+85dc-85dd,U+85df-85e0,U+85e5-85e6,U+85e8-85ea,U+85f4,U+85f9,U+85fe-85ff,U+8602,U+8605-8607,U+860a-860b,U+8616,U+8618,U+861a,U+8627,U+8629,U+862d,U+8638,U+863c,U+863f,U+864d,U+864f,U+8652-8655,U+865b-865c,U+865f,U+8662,U+8667,U+866c,U+866e,U+8671,U+8675,U+867a-867c,U+867f,U+868b,U+868d,U+8693,U+869c-869d,U+86a1,U+86a3-86a4,U+86a7-86a9,U+86ac,U+86af-86b1,U+86b4-86b6,U+86ba,U+86c0,U+86c4,U+86c6,U+86c9-86ca,U+86cd-86d1,U+86d4,U+86d8,U+86de-86df,U+86e4,U+86e6,U+86e9,U+86ed,U+86ef-86f3; +} + +/* noto-serif-sc-[40]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-40-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+83c5,U+83c8-83c9,U+83cb,U+83d1,U+83d3-83d6,U+83d8,U+83db,U+83dd,U+83df,U+83e1,U+83e5,U+83ea-83eb,U+83f0,U+83f4,U+83f8-83f9,U+83fb,U+83fd,U+83ff,U+8401,U+8406,U+840a-840b,U+840f,U+8411,U+8418,U+841c,U+8420,U+8422-8424,U+8426,U+8429,U+842c,U+8438-8439,U+843b-843c,U+843f,U+8446-8447,U+8449,U+844e,U+8451-8452,U+8456,U+8459-845a,U+845c,U+8462,U+8466,U+846d,U+846f-8470,U+8473,U+8476-8478,U+847a,U+847d,U+8484-8485,U+8487,U+8489,U+848c,U+848e,U+8490,U+8493-8494,U+8497,U+849b,U+849e-849f,U+84a1,U+84a5,U+84a8,U+84af,U+84b4,U+84b9-84bf,U+84c1-84c2,U+84c5-84c7,U+84ca-84cb,U+84cd,U+84d0-84d1,U+84d3,U+84d6,U+84df-84e0,U+84e2-84e3,U+84e5-84e7,U+84ee,U+84f3,U+84f6,U+84fa,U+84fc,U+84ff-8500,U+850c,U+8511,U+8514-8515,U+8517-8518,U+851f,U+8523,U+8525-8526,U+8529,U+852b,U+852d,U+8532,U+8534-8535,U+8538-853a,U+853c,U+8543,U+8545; +} + +/* noto-serif-sc-[41]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-41-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+82bc,U+82be,U+82c0-82c2,U+82c4-82c8,U+82ca-82cc,U+82ce,U+82d0,U+82d2-82d3,U+82d5-82d6,U+82d8-82d9,U+82dc-82de,U+82e0-82e4,U+82e7,U+82e9-82eb,U+82ed-82ee,U+82f3-82f4,U+82f7-82f8,U+82fa-8301,U+8306-8308,U+830c-830d,U+830f,U+8311,U+8313-8315,U+8318,U+831a-831b,U+831d,U+8324,U+8327,U+832a,U+832c-832d,U+832f,U+8331-8334,U+833a-833c,U+8340,U+8343-8345,U+8347-8348,U+834a,U+834c,U+834f,U+8351,U+8356,U+8358-835c,U+835e,U+8360,U+8364-8366,U+8368-836a,U+836c-836e,U+8373,U+8378,U+837b-837d,U+837f-8380,U+8382,U+8388,U+838a-838b,U+8392,U+8394,U+8396,U+8398-8399,U+839b-839c,U+83a0,U+83a2-83a3,U+83a8-83aa,U+83ae-83b0,U+83b3-83b4,U+83b6,U+83b8,U+83ba,U+83bc-83bd,U+83bf-83c0,U+83c2; +} + +/* noto-serif-sc-[42]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-42-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+8166-8169,U+816b,U+816d,U+8171,U+8173-8174,U+8178,U+817c-817d,U+8182,U+8188,U+8191,U+8198-819b,U+81a0,U+81a3,U+81a5-81a6,U+81a9,U+81b6,U+81ba-81bb,U+81bd,U+81bf,U+81c1,U+81c3,U+81c6,U+81c9-81ca,U+81cc-81cd,U+81d1,U+81d3-81d4,U+81d8,U+81db-81dc,U+81de-81df,U+81e5,U+81e7-81e9,U+81eb-81ec,U+81ee-81ef,U+81f5,U+81f8,U+81fa,U+81fc,U+81fe,U+8200-8202,U+8204,U+8208-820a,U+820e-8210,U+8216-8218,U+821b-821c,U+8221-8224,U+8226-8228,U+822b,U+822d,U+822f,U+8232-8234,U+8237-8238,U+823a-823b,U+823e,U+8244,U+8249,U+824b,U+824f,U+8259-825a,U+825f,U+8266,U+8268,U+826e,U+8271,U+8276-8279,U+827d,U+827f,U+8283-8284,U+8288-828a,U+828d-8291,U+8293-8294,U+8296-8298,U+829f-82a1,U+82a3-82a4,U+82a7-82ab,U+82ae,U+82b0,U+82b2,U+82b4-82b6; +} + +/* noto-serif-sc-[43]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-43-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+8016,U+8018-8019,U+801c,U+801e,U+8026-802a,U+8031,U+8034-8035,U+8037,U+8043,U+804b,U+804d,U+8052,U+8056,U+8059,U+805e,U+8061,U+8068-8069,U+806e-8074,U+8076-8078,U+807c-8080,U+8082,U+8084-8085,U+8088,U+808f,U+8093,U+809c,U+809f,U+80ab,U+80ad-80ae,U+80b1,U+80b6-80b8,U+80bc-80bd,U+80c2,U+80c4,U+80ca,U+80cd,U+80d1,U+80d4,U+80d7,U+80d9-80db,U+80dd,U+80e0,U+80e4-80e5,U+80e7-80ed,U+80ef-80f1,U+80f3-80f4,U+80fc,U+8101,U+8104-8105,U+8107-8108,U+810c-810e,U+8112-8115,U+8117-8119,U+811b-811f,U+8121-8130,U+8132-8134,U+8137,U+8139,U+813f-8140,U+8142,U+8146,U+8148,U+814d-814e,U+8151,U+8153,U+8158-815a,U+815e,U+8160; +} + +/* noto-serif-sc-[44]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-44-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+7ef0-7ef2,U+7ef6,U+7efa-7efb,U+7efe,U+7f01-7f04,U+7f08,U+7f0a-7f12,U+7f17,U+7f19,U+7f1b-7f1c,U+7f1f,U+7f21-7f23,U+7f25-7f28,U+7f2a-7f33,U+7f35-7f37,U+7f3d,U+7f42,U+7f44-7f45,U+7f4c-7f4d,U+7f52,U+7f54,U+7f58-7f59,U+7f5d,U+7f5f-7f61,U+7f63,U+7f65,U+7f68,U+7f70-7f71,U+7f73-7f75,U+7f77,U+7f79,U+7f7d-7f7e,U+7f85-7f86,U+7f88-7f89,U+7f8b-7f8c,U+7f90-7f91,U+7f94-7f96,U+7f98-7f9b,U+7f9d,U+7f9f,U+7fa3,U+7fa7-7fa9,U+7fac-7fb2,U+7fb4,U+7fb6,U+7fb8,U+7fbc,U+7fbf-7fc0,U+7fc3,U+7fca,U+7fcc,U+7fce,U+7fd2,U+7fd5,U+7fd9-7fdb,U+7fdf,U+7fe3,U+7fe5-7fe7,U+7fe9,U+7feb-7fec,U+7fee-7fef,U+7ff1,U+7ff3-7ff4,U+7ff9-7ffa,U+7ffe,U+8004,U+8006,U+800b,U+800e,U+8011-8012,U+8014; +} + +/* noto-serif-sc-[45]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-45-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+7dd2,U+7dd4,U+7dd6-7dd8,U+7dda-7de0,U+7de2-7de6,U+7de8-7ded,U+7def,U+7df1-7df5,U+7df7,U+7df9,U+7dfb-7dfc,U+7dfe-7e02,U+7e04,U+7e08-7e0b,U+7e12,U+7e1b,U+7e1e,U+7e20,U+7e22-7e23,U+7e26,U+7e29,U+7e2b,U+7e2e-7e2f,U+7e31,U+7e37,U+7e39-7e3e,U+7e40,U+7e43-7e44,U+7e46-7e47,U+7e4a-7e4b,U+7e4d-7e4e,U+7e51,U+7e54-7e56,U+7e58-7e5b,U+7e5d-7e5e,U+7e61,U+7e66-7e67,U+7e69-7e6b,U+7e6d,U+7e70,U+7e73,U+7e77,U+7e79,U+7e7b-7e7d,U+7e81-7e82,U+7e8c-7e8d,U+7e8f,U+7e92-7e94,U+7e96,U+7e98,U+7e9a-7e9c,U+7e9e-7e9f,U+7ea1,U+7ea3,U+7ea5,U+7ea8-7ea9,U+7eab,U+7ead-7eae,U+7eb0,U+7ebb,U+7ebe,U+7ec0-7ec2,U+7ec9,U+7ecb-7ecc,U+7ed0,U+7ed4,U+7ed7,U+7edb,U+7ee0-7ee2,U+7ee5-7ee6,U+7ee8,U+7eeb; +} + +/* noto-serif-sc-[46]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-46-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+7ce8,U+7cec,U+7cf0,U+7cf5-7cf9,U+7cfc,U+7cfe,U+7d00,U+7d04-7d0b,U+7d0d,U+7d10-7d14,U+7d17-7d19,U+7d1b-7d1f,U+7d21,U+7d24-7d26,U+7d28-7d2a,U+7d2c-7d2e,U+7d30-7d31,U+7d33,U+7d35-7d36,U+7d38-7d3a,U+7d40,U+7d42-7d44,U+7d46,U+7d4b-7d4c,U+7d4f,U+7d51,U+7d54-7d56,U+7d58,U+7d5b-7d5c,U+7d5e,U+7d61-7d63,U+7d66,U+7d68,U+7d6a-7d6c,U+7d6f,U+7d71-7d73,U+7d75-7d77,U+7d79-7d7a,U+7d7e,U+7d81,U+7d84-7d8b,U+7d8d,U+7d8f,U+7d91,U+7d94,U+7d96,U+7d98-7d9a,U+7d9c-7da0,U+7da2,U+7da6,U+7daa-7db1,U+7db4-7db8,U+7dba-7dbf,U+7dc1,U+7dc4,U+7dc7-7dc8,U+7dca-7dcd,U+7dcf,U+7dd1; +} + +/* noto-serif-sc-[47]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-47-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+7bd3-7bd4,U+7bd9-7bda,U+7bdd,U+7be0-7be1,U+7be4-7be6,U+7be9-7bea,U+7bef,U+7bf4,U+7bf6,U+7bfc,U+7bfe,U+7c01,U+7c03,U+7c07-7c08,U+7c0a-7c0d,U+7c0f,U+7c11,U+7c15-7c16,U+7c19,U+7c1e-7c21,U+7c23-7c24,U+7c26,U+7c28-7c33,U+7c35,U+7c37-7c3b,U+7c3d-7c3e,U+7c40-7c41,U+7c43,U+7c47-7c48,U+7c4c,U+7c50,U+7c53-7c54,U+7c59,U+7c5f-7c60,U+7c63-7c65,U+7c6c,U+7c6e,U+7c72,U+7c74,U+7c79-7c7a,U+7c7c,U+7c81-7c82,U+7c84-7c85,U+7c88,U+7c8a-7c91,U+7c93-7c96,U+7c99,U+7c9b-7c9e,U+7ca0-7ca2,U+7ca6-7ca9,U+7cac,U+7caf-7cb3,U+7cb5-7cb7,U+7cba-7cbd,U+7cbf-7cc2,U+7cc5,U+7cc7-7cc9,U+7ccc-7ccd,U+7cd7,U+7cdc,U+7cde,U+7ce0,U+7ce4-7ce5,U+7ce7; +} + +/* noto-serif-sc-[48]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-48-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+7ae6,U+7af4-7af7,U+7afa-7afb,U+7afd-7b0a,U+7b0c,U+7b0e-7b0f,U+7b13,U+7b15-7b16,U+7b18-7b19,U+7b1e-7b20,U+7b22-7b25,U+7b29-7b2b,U+7b2d-7b2e,U+7b30-7b3b,U+7b3e-7b3f,U+7b41-7b42,U+7b44-7b47,U+7b4a,U+7b4c-7b50,U+7b58,U+7b5a,U+7b5c,U+7b60,U+7b66-7b67,U+7b69,U+7b6c-7b6f,U+7b72-7b76,U+7b7b-7b7d,U+7b7f,U+7b82,U+7b85,U+7b87,U+7b8b-7b96,U+7b98-7b99,U+7b9b-7b9f,U+7ba2-7ba4,U+7ba6-7bac,U+7bae-7bb0,U+7bb4,U+7bb7-7bb9,U+7bbb,U+7bc0-7bc1,U+7bc3-7bc4,U+7bc6,U+7bc8-7bcc,U+7bd1; +} + +/* noto-serif-sc-[49]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-49-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+798b-798e,U+7992,U+7994-7995,U+7997-7998,U+799a-799c,U+799f,U+79a3-79a6,U+79a8-79ac,U+79ae-79b1,U+79b3-79b5,U+79b8,U+79ba,U+79bf,U+79c2,U+79c6,U+79c8,U+79cf,U+79d5-79d6,U+79dd-79de,U+79e3,U+79e7-79e8,U+79eb,U+79ed,U+79f4,U+79f7-79f8,U+79fa,U+79fe,U+7a02-7a03,U+7a05,U+7a0a,U+7a14,U+7a17,U+7a19,U+7a1c,U+7a1e-7a1f,U+7a23,U+7a25-7a26,U+7a2c,U+7a2e,U+7a30-7a32,U+7a36-7a37,U+7a39,U+7a3c,U+7a40,U+7a42,U+7a47,U+7a49,U+7a4c-7a4f,U+7a51,U+7a55,U+7a5b,U+7a5d-7a5e,U+7a62-7a63,U+7a66,U+7a68-7a69,U+7a6b,U+7a70,U+7a78,U+7a80,U+7a85-7a88,U+7a8a,U+7a90,U+7a93-7a96,U+7a98,U+7a9b-7a9c,U+7a9e,U+7aa0-7aa1,U+7aa3,U+7aa8-7aaa,U+7aac-7ab0,U+7ab3,U+7ab8,U+7aba,U+7abd-7abf,U+7ac4-7ac5,U+7ac7-7ac8,U+7aca,U+7ad1-7ad2,U+7ada-7add,U+7ae1,U+7ae4; +} + +/* noto-serif-sc-[50]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-50-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+784c,U+784e-7854,U+7856-7857,U+7859-785a,U+7865,U+7869-786a,U+786d,U+786f,U+7876-7877,U+787c,U+787e-787f,U+7881,U+7887-7889,U+7893-7894,U+7898-789e,U+78a1,U+78a3,U+78a5,U+78a9,U+78ad,U+78b2,U+78b4,U+78b6,U+78b9-78ba,U+78bc,U+78bf,U+78c3,U+78c9,U+78cb,U+78d0-78d2,U+78d4,U+78d9-78da,U+78dc,U+78de,U+78e1,U+78e5-78e6,U+78ea,U+78ec,U+78ef,U+78f1-78f2,U+78f4,U+78fa-78fb,U+78fe,U+7901-7902,U+7905,U+7907,U+7909,U+790b-790c,U+790e,U+7910,U+7913,U+7919-791b,U+791e-791f,U+7921,U+7924,U+7926,U+792a-792b,U+7934,U+7936,U+7939,U+793b,U+793d,U+7940,U+7942-7943,U+7945-7947,U+7949-794a,U+794c,U+794e-7951,U+7953-7955,U+7957-795a,U+795c,U+795f-7960,U+7962,U+7964,U+7966-7967,U+7969,U+796b,U+796f,U+7972,U+7974,U+7979,U+797b-797c,U+797e-7980,U+7982,U+7986-7987,U+7989-798a; +} + +/* noto-serif-sc-[51]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-51-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+7722,U+7726,U+7728,U+772b-7730,U+7732-7736,U+7739-773a,U+773d-773f,U+7743,U+7746-7747,U+774c-774f,U+7751-7752,U+7758-775a,U+775c-775e,U+7762,U+7765-7766,U+7768-776a,U+776c-776d,U+7771-7772,U+777a,U+777c-777e,U+7780,U+7785,U+7787,U+778b-778d,U+778f-7791,U+7793,U+779e-77a0,U+77a2,U+77a5,U+77ad,U+77af,U+77b4-77b7,U+77bd-77c0,U+77c2,U+77c5,U+77c7,U+77cd,U+77d6-77d7,U+77d9-77da,U+77dd-77de,U+77e7,U+77ea,U+77ec,U+77ef,U+77f8,U+77fb,U+77fd-77fe,U+7800,U+7803,U+7806,U+7809,U+780f-7812,U+7815,U+7817-7818,U+781a-781f,U+7821-7823,U+7825-7827,U+7829,U+782b-7830,U+7832-7833,U+7835,U+7837,U+7839-783c,U+783e,U+7841-7844,U+7847-7849,U+784b; +} + +/* noto-serif-sc-[52]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-52-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+7613-7619,U+761b-761d,U+761f-7622,U+7625,U+7627-762a,U+762e-7630,U+7632-7635,U+7638-763a,U+763c-763d,U+763f-7640,U+7642-7643,U+7647-7648,U+764d-764e,U+7652,U+7654,U+7658,U+765a,U+765c,U+765e-765f,U+7661-7663,U+7665,U+7669,U+766c,U+766e-766f,U+7671-7673,U+7675-7676,U+7678-767a,U+767f,U+7681,U+7683,U+7688,U+768a-768c,U+768e,U+7690-7692,U+7695,U+7698,U+769a-769b,U+769d-76a0,U+76a2,U+76a4-76a7,U+76ab-76ac,U+76af-76b0,U+76b2,U+76b4-76b5,U+76ba-76bb,U+76bf,U+76c2-76c3,U+76c5,U+76c9,U+76cc-76ce,U+76dc-76de,U+76e1-76ea,U+76f1,U+76f9-76fb,U+76fd,U+76ff-7700,U+7703-7704,U+7707-7708,U+770c-770f,U+7712,U+7714,U+7716,U+7719-771b,U+771e,U+7721; +} + +/* noto-serif-sc-[53]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-53-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+750d,U+750f,U+7511,U+7513,U+7515,U+7517,U+7519,U+7521-7527,U+752a,U+752c-752d,U+752f,U+7534,U+7536,U+753a,U+753e,U+7540,U+7544,U+7547-754b,U+754d-754e,U+7550-7553,U+7556-7557,U+755a-755b,U+755d-755e,U+7560,U+7562,U+7564,U+7566-7568,U+756b-756c,U+756f-7573,U+7575,U+7579-757c,U+757e-757f,U+7581-7584,U+7587,U+7589-758e,U+7590,U+7592,U+7594,U+7596,U+7599-759a,U+759d,U+759f-75a0,U+75a3,U+75a5,U+75a8,U+75ac-75ad,U+75b0-75b1,U+75b3-75b5,U+75b8,U+75bd,U+75c1-75c4,U+75c8-75ca,U+75cc-75cd,U+75d4,U+75d6,U+75d9,U+75de,U+75e0,U+75e2-75e4,U+75e6-75ea,U+75f1-75f3,U+75f7,U+75f9-75fa,U+75fc,U+75fe-7601,U+7603,U+7605-7606,U+7608-760e,U+7610-7612; +} + +/* noto-serif-sc-[54]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-54-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+73f0,U+73f2,U+73f4-73f5,U+73f7,U+73f9-73fa,U+73fc-73fd,U+73ff-7402,U+7404,U+7407-7408,U+740a-740f,U+7418,U+741a-741c,U+741e,U+7424-7425,U+7428-7429,U+742c-7430,U+7432,U+7435-7436,U+7438-743b,U+743e-7441,U+7443-7446,U+7448,U+744a-744b,U+7452,U+7457,U+745b,U+745d,U+7460,U+7462-7465,U+7467-746a,U+746d,U+746f,U+7471,U+7473-7474,U+7477,U+747a,U+747e,U+7481-7482,U+7484,U+7486,U+7488-748b,U+748e-748f,U+7493,U+7498,U+749a,U+749c-74a0,U+74a3,U+74a6,U+74a9-74aa,U+74ae,U+74b0-74b2,U+74b6,U+74b8-74ba,U+74bd,U+74bf,U+74c1,U+74c3,U+74c5,U+74c8,U+74ca,U+74cc,U+74cf,U+74d1-74d2,U+74d4-74d5,U+74d8-74db,U+74de-74e0,U+74e2,U+74e4-74e5,U+74e7-74e9,U+74ee-74ef,U+74f4,U+74ff,U+7501,U+7503,U+7505,U+7508; +} + +/* noto-serif-sc-[55]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-55-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+72e6,U+72e8,U+72ef-72f0,U+72f2-72f4,U+72f6-72f7,U+72f9-72fb,U+72fd,U+7300-7304,U+7307,U+730a-730c,U+7313-7317,U+731d-7322,U+7327,U+7329,U+732c-732d,U+7330-7331,U+7333,U+7335-7337,U+7339,U+733d-733e,U+7340,U+7342,U+7344-7345,U+734a,U+734d-7350,U+7352,U+7355,U+7357,U+7359,U+735f-7360,U+7362-7363,U+7365,U+7368,U+736c-736d,U+736f-7370,U+7372,U+7374-7376,U+7378,U+737a-737b,U+737d-737e,U+7382-7383,U+7386,U+7388,U+738a,U+738c-7393,U+7395,U+7397-739a,U+739c,U+739e,U+73a0-73a3,U+73a5-73a8,U+73aa,U+73ad,U+73b1,U+73b3,U+73b6-73b7,U+73b9,U+73c2,U+73c5-73c9,U+73cc,U+73ce-73d0,U+73d2,U+73d6,U+73d9,U+73db-73de,U+73e3,U+73e5-73ea,U+73ee-73ef; +} + +/* noto-serif-sc-[56]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-56-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+71a8,U+71af,U+71b1-71bc,U+71be,U+71c1-71c2,U+71c4,U+71c8-71cb,U+71ce-71d0,U+71d2,U+71d4,U+71d9-71da,U+71dc,U+71df-71e0,U+71e6-71e8,U+71ea,U+71ed-71ee,U+71f4,U+71f6,U+71f9,U+71fb-71fc,U+71ff-7200,U+7207,U+720c-720d,U+7210,U+7216,U+721a-721e,U+7223,U+7228,U+722b,U+722d-722e,U+7230,U+7232,U+723a-723c,U+723e-7242,U+7246,U+724b,U+724d-724e,U+7252,U+7256,U+7258,U+725a,U+725c-725d,U+7260,U+7264-7266,U+726a,U+726c,U+726e-726f,U+7271,U+7273-7274,U+7278,U+727b,U+727d-727e,U+7281-7282,U+7284,U+7287,U+728a,U+728d,U+728f,U+7292,U+729b,U+729f-72a0,U+72a7,U+72ad-72ae,U+72b0-72b5,U+72b7-72b8,U+72ba-72be,U+72c0-72c1,U+72c3,U+72c5-72c6,U+72c8,U+72cc-72ce,U+72d2,U+72d6,U+72db,U+72dd-72df,U+72e1,U+72e5; +} + +/* noto-serif-sc-[57]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-57-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+700b,U+700d,U+7015,U+7018,U+701b,U+701d-701f,U+7023,U+7026-7028,U+702c,U+702e-7030,U+7035,U+7037,U+7039-703a,U+703c-703e,U+7044,U+7049-704b,U+704f,U+7051,U+7058,U+705a,U+705c-705e,U+7061,U+7064,U+7066,U+706c,U+707d,U+7080-7081,U+7085-7086,U+708a,U+708f,U+7091,U+7094-7095,U+7098-7099,U+709c-709d,U+709f,U+70a4,U+70a9-70aa,U+70af-70b2,U+70b4-70b7,U+70bb,U+70c0,U+70c3,U+70c7,U+70cb,U+70ce-70cf,U+70d4,U+70d9-70da,U+70dc-70dd,U+70e0,U+70e9,U+70ec,U+70f7,U+70fa,U+70fd,U+70ff,U+7104,U+7108-7109,U+710c,U+7110,U+7113-7114,U+7116-7118,U+711c,U+711e,U+7120,U+712e-712f,U+7131,U+713c,U+7142,U+7144-7147,U+7149-714b,U+7150,U+7152,U+7155-7156,U+7159-715a,U+715c,U+7161,U+7165-7166,U+7168-7169,U+716d,U+7173-7174,U+7176,U+7178,U+717a,U+717d,U+717f-7180,U+7184,U+7186-7188,U+7192,U+7198,U+719c,U+71a0,U+71a4-71a5; +} + +/* noto-serif-sc-[58]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-58-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+6ed9,U+6edb,U+6edd,U+6edf-6ee0,U+6ee2,U+6ee6,U+6eea,U+6eec,U+6eee-6eef,U+6ef2-6ef3,U+6ef7-6efa,U+6efe,U+6f01,U+6f03,U+6f08-6f09,U+6f15-6f16,U+6f19,U+6f22-6f25,U+6f28-6f2a,U+6f2c-6f2d,U+6f2f,U+6f32,U+6f36-6f38,U+6f3f,U+6f43-6f46,U+6f48,U+6f4b,U+6f4e-6f4f,U+6f51,U+6f54-6f57,U+6f59-6f5b,U+6f5e-6f5f,U+6f61,U+6f64-6f67,U+6f69-6f6c,U+6f6f-6f72,U+6f74-6f76,U+6f78-6f7e,U+6f80-6f83,U+6f86,U+6f89,U+6f8b-6f8d,U+6f90,U+6f92,U+6f94,U+6f97-6f98,U+6f9b,U+6fa3-6fa5,U+6fa7,U+6faa,U+6faf,U+6fb1,U+6fb4,U+6fb6,U+6fb9,U+6fc1-6fcb,U+6fd1-6fd3,U+6fd5,U+6fdb,U+6fde-6fe1,U+6fe4,U+6fe9,U+6feb-6fec,U+6fee-6ff1,U+6ffa,U+6ffe,U+7005-7006,U+7009; +} + +/* noto-serif-sc-[59]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-59-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+6dc3,U+6dc5-6dc6,U+6dc9,U+6dcc,U+6dcf,U+6dd2-6dd3,U+6dd6,U+6dd9-6dde,U+6de0,U+6de4,U+6de6,U+6de8-6dea,U+6dec,U+6def-6df0,U+6df5-6df6,U+6df8,U+6dfa,U+6dfc,U+6e03-6e04,U+6e07-6e09,U+6e0b-6e0c,U+6e0e,U+6e11,U+6e13,U+6e15-6e16,U+6e19-6e1b,U+6e1e-6e1f,U+6e22,U+6e25-6e27,U+6e2b-6e2c,U+6e36-6e37,U+6e39-6e3a,U+6e3c-6e41,U+6e44-6e45,U+6e47,U+6e49-6e4b,U+6e4d-6e4e,U+6e51,U+6e53-6e55,U+6e5c-6e5f,U+6e61-6e63,U+6e65-6e67,U+6e6a-6e6b,U+6e6d-6e70,U+6e72-6e74,U+6e76-6e78,U+6e7c,U+6e80-6e82,U+6e86-6e87,U+6e89,U+6e8d,U+6e8f,U+6e96,U+6e98,U+6e9d-6e9f,U+6ea1,U+6ea5-6ea7,U+6eab,U+6eb1-6eb2,U+6eb4,U+6eb7,U+6ebb-6ebd,U+6ebf-6ec6,U+6ec8-6ec9,U+6ecc,U+6ecf-6ed0,U+6ed3-6ed4,U+6ed7-6ed8; +} + +/* noto-serif-sc-[60]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-60-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+6cb1-6cb2,U+6cb4-6cb5,U+6cb7,U+6cba,U+6cbc-6cbd,U+6cc1-6cc3,U+6cc5-6cc7,U+6cd0-6cd4,U+6cd6-6cd7,U+6cd9-6cda,U+6cde-6ce0,U+6ce4,U+6ce6,U+6ce9,U+6ceb-6cef,U+6cf1-6cf2,U+6cf6-6cf7,U+6cfa,U+6cfe,U+6d03-6d05,U+6d07-6d08,U+6d0a,U+6d0c,U+6d0e-6d11,U+6d13-6d14,U+6d16,U+6d18-6d1a,U+6d1c,U+6d1f,U+6d22-6d23,U+6d26-6d29,U+6d2b,U+6d2e-6d30,U+6d33,U+6d35-6d36,U+6d38-6d3a,U+6d3c,U+6d3f,U+6d42-6d44,U+6d48-6d49,U+6d4d,U+6d50,U+6d52,U+6d54,U+6d56-6d58,U+6d5a-6d5c,U+6d5e,U+6d60-6d61,U+6d63-6d65,U+6d67,U+6d6c-6d6d,U+6d6f,U+6d75,U+6d7b-6d7d,U+6d87,U+6d8a,U+6d8e,U+6d90-6d9a,U+6d9c-6da0,U+6da2-6da3,U+6da7,U+6daa-6dac,U+6dae,U+6db3-6db4,U+6db6,U+6db8,U+6dbc,U+6dbf,U+6dc2; +} + +/* noto-serif-sc-[61]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-61-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+6b83-6b86,U+6b89,U+6b8d,U+6b91-6b93,U+6b95,U+6b97-6b98,U+6b9a-6b9b,U+6b9e,U+6ba1-6ba4,U+6ba9-6baa,U+6bad,U+6baf-6bb0,U+6bb2-6bb3,U+6bba-6bbd,U+6bc0,U+6bc2,U+6bc6,U+6bca-6bcc,U+6bce,U+6bd0-6bd1,U+6bd3,U+6bd6-6bd8,U+6bda,U+6be1,U+6be6,U+6bec,U+6bf1,U+6bf3-6bf5,U+6bf9,U+6bfd,U+6c05-6c08,U+6c0d,U+6c10,U+6c15-6c1a,U+6c21,U+6c23-6c26,U+6c29-6c2d,U+6c30-6c33,U+6c35-6c37,U+6c39-6c3a,U+6c3c-6c3f,U+6c46,U+6c4a-6c4c,U+6c4e-6c50,U+6c54,U+6c56,U+6c59-6c5c,U+6c5e,U+6c63,U+6c67-6c69,U+6c6b,U+6c6d,U+6c6f,U+6c72-6c74,U+6c78-6c7a,U+6c7c,U+6c84-6c87,U+6c8b-6c8c,U+6c8f,U+6c91,U+6c93-6c96,U+6c98,U+6c9a,U+6c9d,U+6ca2-6ca4,U+6ca8-6ca9,U+6cac-6cae; +} + +/* noto-serif-sc-[62]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-62-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+69fe-6a01,U+6a06,U+6a09,U+6a0b,U+6a11,U+6a13,U+6a17-6a19,U+6a1b,U+6a1e,U+6a23,U+6a28-6a29,U+6a2b,U+6a2f-6a30,U+6a35,U+6a38-6a40,U+6a46-6a48,U+6a4a-6a4b,U+6a4e,U+6a50,U+6a52,U+6a5b,U+6a5e,U+6a62,U+6a65-6a67,U+6a6b,U+6a79,U+6a7c,U+6a7e-6a7f,U+6a84,U+6a86,U+6a8e,U+6a90-6a91,U+6a94,U+6a97,U+6a9c,U+6a9e,U+6aa0,U+6aa2,U+6aa4,U+6aa9,U+6aab,U+6aae-6ab0,U+6ab2-6ab3,U+6ab5,U+6ab7-6ab8,U+6aba-6abb,U+6abd,U+6abf,U+6ac2-6ac4,U+6ac6,U+6ac8,U+6acc,U+6ace,U+6ad2-6ad3,U+6ad8-6adc,U+6adf-6ae0,U+6ae4-6ae5,U+6ae7-6ae8,U+6afb,U+6b04-6b05,U+6b0d-6b13,U+6b16-6b17,U+6b19,U+6b24-6b25,U+6b2c,U+6b37-6b39,U+6b3b,U+6b3d,U+6b43,U+6b46,U+6b4e,U+6b50,U+6b53-6b54,U+6b58-6b59,U+6b5b,U+6b60,U+6b69,U+6b6d,U+6b6f-6b70,U+6b73-6b74,U+6b77-6b7a,U+6b80-6b82; +} + +/* noto-serif-sc-[63]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-63-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+68d3,U+68d7,U+68dd,U+68df,U+68e1,U+68e3-68e4,U+68e6-68ed,U+68ef-68f0,U+68f2,U+68f4,U+68f6-68f7,U+68f9,U+68fb-68fd,U+68ff-6902,U+6906-6908,U+690b,U+6910,U+691a-691c,U+691f-6920,U+6924-6925,U+692a,U+692d,U+6934,U+6939,U+693c-6945,U+694a-694b,U+6952-6954,U+6957,U+6959,U+695b,U+695d,U+695f,U+6962-6964,U+6966,U+6968-696c,U+696e-696f,U+6971,U+6973-6974,U+6978-6979,U+697d,U+697f-6980,U+6985,U+6987-698a,U+698d-698e,U+6994-6999,U+699b,U+69a3-69a4,U+69a6-69a7,U+69ab,U+69ad-69ae,U+69b1,U+69b7,U+69bb-69bc,U+69c1,U+69c3-69c5,U+69c7,U+69ca-69ce,U+69d0-69d1,U+69d3-69d4,U+69d7-69da,U+69e0,U+69e4,U+69e6,U+69ec-69ed,U+69f1-69f3,U+69f8,U+69fa-69fc; +} + +/* noto-serif-sc-[64]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-64-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+678b-678d,U+678f,U+6792-6793,U+6796,U+6798,U+679e-67a1,U+67a5,U+67a7-67a9,U+67ac-67ad,U+67b0-67b1,U+67b3,U+67b5,U+67b7,U+67b9,U+67bb-67bc,U+67c0-67c1,U+67c3,U+67c5-67ca,U+67d1-67d2,U+67d7-67d9,U+67dd-67df,U+67e2-67e4,U+67e6-67e9,U+67f0,U+67f5,U+67f7-67f8,U+67fa-67fb,U+67fd-67fe,U+6800-6801,U+6803-6804,U+6806,U+6809-680a,U+680c,U+680e,U+6812,U+681d-681f,U+6822,U+6824-6829,U+682b-682d,U+6831-6835,U+683b,U+683e,U+6840-6841,U+6844-6845,U+6849,U+684e,U+6853,U+6855-6856,U+685c-685d,U+685f-6862,U+6864,U+6866-6868,U+686b,U+686f,U+6872,U+6874,U+6877,U+687f,U+6883,U+6886,U+688f,U+689b,U+689f-68a0,U+68a2-68a3,U+68b1,U+68b6,U+68b9-68ba,U+68bc-68bf,U+68c1-68c4,U+68c6,U+68c8,U+68ca,U+68cc,U+68d0-68d1; +} + +/* noto-serif-sc-[65]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-65-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+6631,U+6633-6634,U+6636,U+663a-663b,U+663d,U+6641,U+6644-6645,U+6649,U+664c,U+664f,U+6654,U+6659,U+665b,U+665d-665e,U+6660-6667,U+6669,U+666b-666c,U+6671,U+6673,U+6677-6679,U+667c,U+6680-6681,U+6684-6685,U+6688-6689,U+668b-668e,U+6690,U+6692,U+6695,U+6698,U+669a,U+669d,U+669f-66a0,U+66a2-66a3,U+66a6,U+66aa-66ab,U+66b1-66b2,U+66b5,U+66b8-66b9,U+66bb,U+66be,U+66c1,U+66c6-66c9,U+66cc,U+66d5-66d8,U+66da-66dc,U+66de-66e2,U+66e8-66ea,U+66ec,U+66f1,U+66f3,U+66f7,U+66fa,U+66fd,U+6702,U+6705,U+670a,U+670f-6710,U+6713,U+6715,U+6719,U+6722-6723,U+6725-6727,U+6729,U+672d-672e,U+6732-6733,U+6736,U+6739,U+673b,U+673f,U+6744,U+6748,U+674c-674d,U+6753,U+6755,U+6762,U+6767,U+6769-676c,U+676e,U+6772-6773,U+6775,U+6777,U+677a-677d,U+6782-6783,U+6787,U+678a; +} + +/* noto-serif-sc-[66]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-66-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+64f1-64f2,U+64f4,U+64f7-64f8,U+64fa,U+64fc,U+64fe-64ff,U+6503,U+6509,U+650f,U+6514,U+6518,U+651c-651e,U+6522-6525,U+652a-652c,U+652e,U+6530-6532,U+6534-6535,U+6537-6538,U+653a,U+653c-653d,U+6542,U+6549-654b,U+654d-654e,U+6553-6555,U+6557-6558,U+655d,U+6564,U+6569,U+656b,U+656d-656f,U+6571,U+6573,U+6575-6576,U+6578-657e,U+6581-6583,U+6585-6586,U+6589,U+658e-658f,U+6592-6593,U+6595-6596,U+659b,U+659d,U+659f-65a1,U+65a3,U+65ab-65ac,U+65b2,U+65b6-65b7,U+65ba-65bb,U+65be-65c0,U+65c2-65c4,U+65c6-65c8,U+65cc,U+65ce,U+65d0,U+65d2-65d3,U+65d6,U+65db,U+65dd,U+65e1,U+65e3,U+65ee-65f0,U+65f3-65f5,U+65f8,U+65fb-65fc,U+65fe-6600,U+6603,U+6607,U+6609,U+660b,U+6610-6611,U+6619-661a,U+661c-661e,U+6621,U+6624,U+6626,U+662a-662c,U+662e,U+6630; +} + +/* noto-serif-sc-[67]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-67-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+63b8-63bc,U+63be,U+63c0,U+63c3-63c4,U+63c6,U+63c8,U+63cd-63ce,U+63d1,U+63d6,U+63da-63db,U+63de,U+63e0,U+63e3,U+63e9-63ea,U+63ee,U+63f2,U+63f5-63fa,U+63fc,U+63fe-6400,U+6406,U+640b-640d,U+6410,U+6414,U+6416-6417,U+641b,U+6420-6423,U+6425-6428,U+642a,U+6431-6432,U+6434-6437,U+643d-6442,U+6445,U+6448,U+6450-6452,U+645b-645f,U+6462,U+6465,U+6468,U+646d,U+646f-6471,U+6473,U+6477,U+6479-647d,U+6482-6485,U+6487-6488,U+648c,U+6490,U+6493,U+6496-649a,U+649d,U+64a0,U+64a5,U+64ab-64ac,U+64b1-64b7,U+64b9-64bb,U+64be-64c1,U+64c4,U+64c7,U+64c9-64cb,U+64d0,U+64d4,U+64d7-64d8,U+64da,U+64de,U+64e0-64e2,U+64e4,U+64e9,U+64ec,U+64f0; +} + +/* noto-serif-sc-[68]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-68-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+622c,U+622e-6230,U+6232,U+6238,U+623b,U+623d-623e,U+6243,U+6246,U+6248-6249,U+624c,U+6255,U+6259,U+625e,U+6260-6261,U+6265-6266,U+626a,U+6271,U+627a,U+627c-627d,U+6283,U+6286,U+6289,U+628e,U+6294,U+629c,U+629e-629f,U+62a1,U+62a8,U+62ba-62bb,U+62bf,U+62c2,U+62c4,U+62c8,U+62ca-62cb,U+62cf,U+62d1,U+62d7,U+62d9-62da,U+62dd,U+62e0-62e1,U+62e3-62e4,U+62e7,U+62eb,U+62ee,U+62f0,U+62f4-62f6,U+6308,U+630a-630e,U+6310,U+6312-6313,U+6317,U+6319,U+631b,U+631d-631f,U+6322,U+6326,U+6329,U+6331-6332,U+6334-6337,U+6339,U+633b-633c,U+633e-6340,U+6343,U+6347,U+634b-634e,U+6354,U+635c-635d,U+6368-6369,U+636d,U+636f-6372,U+6376,U+637a-637b,U+637d,U+6382-6383,U+6387,U+638a-638b,U+638d-638e,U+6391,U+6393-6397,U+6399,U+639b,U+639e-639f,U+63a1,U+63a3-63a4,U+63ac-63ae,U+63b1-63b5; +} + +/* noto-serif-sc-[69]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-69-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+60ed-60ee,U+60f0-60f1,U+60f4,U+60f6,U+60fa,U+6100,U+6106,U+610d-610e,U+6112,U+6114-6115,U+6119,U+611c,U+6120,U+6122-6123,U+6126,U+6128-6130,U+6136-6137,U+613a,U+613d-613e,U+6144,U+6146-6147,U+614a-614b,U+6151,U+6153,U+6158,U+615a,U+615c-615d,U+615f,U+6161,U+6163-6165,U+616b-616c,U+616e,U+6171,U+6173-6177,U+617e,U+6182,U+6187,U+618a,U+618d-618e,U+6190-6191,U+6194,U+6199-619a,U+619c,U+619f,U+61a1,U+61a3-61a4,U+61a7-61a9,U+61ab-61ad,U+61b2-61b3,U+61b5-61b7,U+61ba-61bb,U+61bf,U+61c3-61c4,U+61c6-61c7,U+61c9-61cb,U+61d0-61d1,U+61d3-61d4,U+61d7,U+61da,U+61df-61e1,U+61e6,U+61ee,U+61f0,U+61f2,U+61f6-61f8,U+61fa,U+61fc-61fe,U+6200,U+6206-6207,U+6209,U+620b,U+620d-620e,U+6213-6215,U+6217,U+6219,U+621b-6223,U+6225-6226; +} + +/* noto-serif-sc-[70]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-70-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+5fc4,U+5fc9,U+5fcb,U+5fce-5fd6,U+5fda-5fde,U+5fe1-5fe2,U+5fe4-5fe5,U+5fea,U+5fed-5fee,U+5ff1-5ff3,U+5ff6,U+5ff8,U+5ffb,U+5ffe-5fff,U+6002-6006,U+600a,U+600d,U+600f,U+6014,U+6019,U+601b,U+6020,U+6023,U+6026,U+6029,U+602b,U+602e-602f,U+6031,U+6033,U+6035,U+6039,U+603f,U+6041-6043,U+6046,U+604f,U+6053-6054,U+6058-605b,U+605d-605e,U+6060,U+6063,U+6065,U+6067,U+606a-606c,U+6075,U+6078-6079,U+607b,U+607d,U+607f,U+6083,U+6085-6087,U+608a,U+608c,U+608e-608f,U+6092-6093,U+6095-6097,U+609b-609d,U+60a2,U+60a7,U+60a9-60ab,U+60ad,U+60af-60b1,U+60b3-60b6,U+60b8,U+60bb,U+60bd-60be,U+60c0-60c3,U+60c6-60c9,U+60cb,U+60ce,U+60d3-60d4,U+60d7-60db,U+60dd,U+60e1-60e4,U+60e6,U+60ea,U+60ec; +} + +/* noto-serif-sc-[71]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-71-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+5e98,U+5e9b,U+5e9d,U+5ea0-5ea5,U+5ea8,U+5eab,U+5eaf,U+5eb3,U+5eb5-5eb6,U+5eb9,U+5ebe,U+5ec1-5ec3,U+5ec6,U+5ec8,U+5ecb-5ecc,U+5ed1-5ed2,U+5ed4,U+5ed9-5edb,U+5edd,U+5edf-5ee0,U+5ee2-5ee3,U+5ee8,U+5eea,U+5eec,U+5eef-5ef0,U+5ef3-5ef4,U+5ef8,U+5efb-5efc,U+5efe-5eff,U+5f01,U+5f07,U+5f0b-5f0e,U+5f10-5f12,U+5f14,U+5f1a,U+5f22,U+5f28-5f29,U+5f2c-5f2d,U+5f35-5f36,U+5f38,U+5f3b-5f43,U+5f45-5f4a,U+5f4c-5f4e,U+5f50,U+5f54,U+5f56-5f59,U+5f5b-5f5f,U+5f61,U+5f63,U+5f65,U+5f67-5f68,U+5f6b,U+5f6e-5f6f,U+5f72-5f78,U+5f7a,U+5f7e-5f7f,U+5f82-5f83,U+5f87,U+5f89-5f8a,U+5f8d,U+5f91,U+5f93,U+5f95,U+5f98-5f99,U+5f9c,U+5f9e,U+5fa0,U+5fa6-5fa9,U+5fac-5fad,U+5faf,U+5fb3-5fb5,U+5fb9,U+5fbc; +} + +/* noto-serif-sc-[72]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-72-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+5d26-5d27,U+5d2e-5d34,U+5d3c-5d3e,U+5d41-5d44,U+5d46-5d48,U+5d4a-5d4b,U+5d4e,U+5d50,U+5d52,U+5d55-5d58,U+5d5a-5d5d,U+5d68-5d69,U+5d6b-5d6c,U+5d6f,U+5d74,U+5d7f,U+5d82-5d89,U+5d8b-5d8c,U+5d8f,U+5d92-5d93,U+5d99,U+5d9d,U+5db2,U+5db6-5db7,U+5dba,U+5dbc-5dbd,U+5dc2-5dc3,U+5dc6-5dc7,U+5dc9,U+5dcc,U+5dd2,U+5dd4,U+5dd6-5dd8,U+5ddb-5ddc,U+5de3,U+5ded,U+5def,U+5df3,U+5df6,U+5dfa-5dfd,U+5dff-5e00,U+5e07,U+5e0f,U+5e11,U+5e13-5e14,U+5e19-5e1b,U+5e22,U+5e25,U+5e28,U+5e2a,U+5e2f-5e31,U+5e33-5e34,U+5e36,U+5e39-5e3c,U+5e3e,U+5e40,U+5e44,U+5e46-5e48,U+5e4c,U+5e4f,U+5e53-5e54,U+5e57,U+5e59,U+5e5b,U+5e5e-5e5f,U+5e61,U+5e63,U+5e6a-5e6b,U+5e75,U+5e77,U+5e79-5e7a,U+5e7e,U+5e80-5e81,U+5e83,U+5e85,U+5e87,U+5e8b,U+5e91-5e92,U+5e96; +} + +/* noto-serif-sc-[73]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-73-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+5bec,U+5bee-5bf0,U+5bf2-5bf3,U+5bf5-5bf6,U+5bfe,U+5c02-5c03,U+5c05,U+5c07-5c09,U+5c0b-5c0c,U+5c0e,U+5c10,U+5c12-5c13,U+5c15,U+5c17,U+5c19,U+5c1b-5c1c,U+5c1e-5c1f,U+5c22,U+5c25,U+5c28,U+5c2a-5c2b,U+5c2f-5c30,U+5c37,U+5c3b,U+5c43-5c44,U+5c46-5c47,U+5c4d,U+5c50,U+5c59,U+5c5b-5c5c,U+5c62-5c64,U+5c66,U+5c6c,U+5c6e,U+5c74,U+5c78-5c7e,U+5c80,U+5c83-5c84,U+5c88,U+5c8b-5c8d,U+5c91,U+5c94-5c96,U+5c98-5c99,U+5c9c,U+5c9e,U+5ca1-5ca3,U+5cab-5cac,U+5cb1,U+5cb5,U+5cb7,U+5cba,U+5cbd-5cbf,U+5cc1,U+5cc3-5cc4,U+5cc7,U+5ccb,U+5cd2,U+5cd8-5cd9,U+5cdf-5ce0,U+5ce3-5ce6,U+5ce8-5cea,U+5ced,U+5cef,U+5cf3-5cf4,U+5cf6,U+5cf8,U+5cfd,U+5d00-5d04,U+5d06,U+5d08,U+5d0b-5d0d,U+5d0f-5d13,U+5d15,U+5d17-5d1a,U+5d1d-5d22,U+5d24-5d25; +} + +/* noto-serif-sc-[74]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-74-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+5aa0,U+5aa3-5aa4,U+5aaa,U+5aae-5aaf,U+5ab1-5ab2,U+5ab4-5ab5,U+5ab7-5aba,U+5abd-5abf,U+5ac3-5ac4,U+5ac6-5ac8,U+5aca-5acb,U+5acd,U+5acf-5ad2,U+5ad4,U+5ad8-5ada,U+5adc,U+5adf-5ae2,U+5ae4,U+5ae6,U+5ae8,U+5aea-5aed,U+5af0-5af3,U+5af5,U+5af9-5afb,U+5afd,U+5b01,U+5b05,U+5b08,U+5b0b-5b0c,U+5b11,U+5b16-5b17,U+5b1b,U+5b21-5b22,U+5b24,U+5b27-5b2e,U+5b30,U+5b32,U+5b34,U+5b36-5b38,U+5b3e-5b40,U+5b43,U+5b45,U+5b4a-5b4b,U+5b51-5b53,U+5b56,U+5b5a-5b5b,U+5b62,U+5b65,U+5b67,U+5b6a-5b6e,U+5b70-5b71,U+5b73,U+5b7a-5b7b,U+5b7f-5b80,U+5b84,U+5b8d,U+5b91,U+5b93-5b95,U+5b9f,U+5ba5-5ba6,U+5bac,U+5bae,U+5bb8,U+5bc0,U+5bc3,U+5bcb,U+5bd0-5bd1,U+5bd4-5bd8,U+5bda-5bdc,U+5be2,U+5be4-5be5,U+5be7,U+5be9,U+5beb; +} + +/* noto-serif-sc-[75]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-75-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+596a,U+596c-596e,U+5977,U+597b-597c,U+5981,U+598f,U+5997-5998,U+599a,U+599c-599d,U+59a0-59a1,U+59a3-59a4,U+59a7,U+59aa-59ad,U+59af,U+59b2-59b3,U+59b5-59b6,U+59b8,U+59ba,U+59bd-59be,U+59c0-59c1,U+59c3-59c4,U+59c7-59ca,U+59cc-59cd,U+59cf,U+59d2,U+59d5-59d6,U+59d8-59d9,U+59db,U+59dd-59e0,U+59e2-59e7,U+59e9-59eb,U+59ee,U+59f1,U+59f3,U+59f5,U+59f7-59f9,U+59fd,U+5a06,U+5a08-5a0a,U+5a0c-5a0d,U+5a11-5a13,U+5a15-5a16,U+5a1a-5a1b,U+5a21-5a23,U+5a2d-5a2f,U+5a32,U+5a38,U+5a3c,U+5a3e-5a45,U+5a47,U+5a4a,U+5a4c-5a4d,U+5a4f-5a51,U+5a53,U+5a55-5a57,U+5a5e,U+5a60,U+5a62,U+5a65-5a67,U+5a6a,U+5a6c-5a6d,U+5a72-5a73,U+5a75-5a76,U+5a79-5a7c,U+5a81-5a84,U+5a8c,U+5a8e,U+5a93,U+5a96-5a97,U+5a9c,U+5a9e; +} + +/* noto-serif-sc-[76]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-76-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+5820,U+5822-5823,U+5825-5826,U+582c,U+582f,U+5831,U+583a,U+583d,U+583f-5842,U+5844-5846,U+5848,U+584a,U+584d,U+5852,U+5857,U+5859-585a,U+585c-585d,U+5862,U+5868-5869,U+586c-586d,U+586f-5873,U+5875,U+5879,U+587d-587e,U+5880-5881,U+5888-588a,U+588d,U+5892,U+5896-5898,U+589a,U+589c-589d,U+58a0-58a1,U+58a3,U+58a6,U+58a9,U+58ab-58ae,U+58b0,U+58b3,U+58bb-58bf,U+58c2-58c3,U+58c5-58c8,U+58ca,U+58cc,U+58ce,U+58d1-58d3,U+58d5,U+58d8-58d9,U+58de-58df,U+58e2,U+58e9,U+58ec,U+58ef,U+58f1-58f2,U+58f5,U+58f7-58f8,U+58fa,U+58fd,U+5900,U+5902,U+5906,U+5908-590c,U+590e,U+5910,U+5914,U+5919,U+591b,U+591d-591e,U+5920,U+5922-5925,U+5928,U+592c-592d,U+592f,U+5932,U+5936,U+593c,U+593e,U+5940-5942,U+5944,U+594c-594d,U+5950,U+5953,U+5958,U+595a,U+5961,U+5966-5968; +} + +/* noto-serif-sc-[77]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-77-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+56f9,U+56fc,U+56ff-5700,U+5703-5704,U+5709-570a,U+570c-570d,U+570f,U+5712-5713,U+5718-5719,U+571c,U+571e,U+5725,U+5727,U+5729-572a,U+572c,U+572e-572f,U+5734-5735,U+5739,U+573b,U+5741,U+5743,U+5745,U+5749,U+574c-574d,U+575c,U+5763,U+5768-5769,U+576b,U+576d-576e,U+5770,U+5773,U+5775,U+5777,U+577b-577c,U+5785-5786,U+5788,U+578c,U+578e-578f,U+5793-5795,U+5799-57a1,U+57a3-57a4,U+57a6-57aa,U+57ac-57ad,U+57af-57b2,U+57b4-57b6,U+57b8-57b9,U+57bd-57bf,U+57c2,U+57c4-57c8,U+57cc-57cd,U+57cf,U+57d2,U+57d5-57de,U+57e1-57e2,U+57e4-57e5,U+57e7,U+57eb,U+57ed,U+57ef,U+57f4-57f8,U+57fc-57fd,U+5800-5801,U+5803,U+5805,U+5807,U+5809,U+580b-580e,U+5811,U+5814,U+5819,U+581b-581f; +} + +/* noto-serif-sc-[78]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-78-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+55f5-55f7,U+55fb,U+55fe,U+5600-5601,U+5605-5606,U+5608,U+560c-560d,U+560f,U+5614,U+5616-5617,U+561a,U+561c,U+561e,U+5621-5625,U+5627,U+5629,U+562b-5630,U+5636,U+5638-563a,U+563c,U+5640-5642,U+5649,U+564c-5650,U+5653-5655,U+5657-565b,U+5660,U+5663-5664,U+5666,U+566b,U+566f-5671,U+5673-567c,U+567e,U+5684-5687,U+568c,U+568e-5693,U+5695,U+5697,U+569b-569c,U+569e-569f,U+56a1-56a2,U+56a4-56a9,U+56ac-56af,U+56b1,U+56b4,U+56b6-56b8,U+56bf,U+56c1-56c3,U+56c9,U+56cd,U+56d1,U+56d4,U+56d6-56d9,U+56dd,U+56df,U+56e1,U+56e3-56e6,U+56e8-56ec,U+56ee-56ef,U+56f1-56f3,U+56f5,U+56f7-56f8; +} + +/* noto-serif-sc-[79]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-79-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+550f,U+5511-5514,U+5516-5517,U+5519,U+551b,U+551d-551e,U+5520,U+5522-5523,U+5526-5527,U+552a-552c,U+5530,U+5532-5535,U+5537-5538,U+553b-5541,U+5543-5544,U+5547-5549,U+554b,U+554d,U+5550,U+5553,U+5555-5558,U+555b-555f,U+5567-5569,U+556b-5572,U+5574-5577,U+557b-557c,U+557e-557f,U+5581,U+5583,U+5585-5586,U+5588,U+558b-558c,U+558e-5591,U+5593,U+5599-559a,U+559f,U+55a5-55a6,U+55a8-55ac,U+55ae,U+55b0-55b3,U+55b6,U+55b9-55ba,U+55bc-55be,U+55c4,U+55c6-55c7,U+55c9,U+55cc-55d2,U+55d4-55db,U+55dd-55df,U+55e1,U+55e3-55e6,U+55ea-55ee,U+55f0-55f3; +} + +/* noto-serif-sc-[80]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-80-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+53e7-53e9,U+53f1,U+53f4-53f5,U+53fa-5400,U+5402,U+5405-5407,U+540b,U+540f,U+5412,U+5414,U+5416,U+5418-541a,U+541d,U+5420-5423,U+5425,U+5429-542a,U+542d-542e,U+5431-5433,U+5436,U+543d,U+543f,U+5442-5443,U+5449,U+544b-544c,U+544e,U+5451-5454,U+5456,U+5459,U+545b-545c,U+5461,U+5463-5464,U+546a-5472,U+5474,U+5476-5478,U+547a,U+547e-5484,U+5486,U+548a,U+548d-548e,U+5490-5491,U+5494,U+5497-5499,U+549b,U+549d,U+54a1-54a7,U+54a9,U+54ab,U+54ad,U+54b4-54b5,U+54b9,U+54bb,U+54be-54bf,U+54c2-54c3,U+54c9-54cc,U+54cf-54d0,U+54d3,U+54d5-54d6,U+54d9-54da,U+54dc-54de,U+54e2,U+54e7,U+54f3-54f4,U+54f8-54f9,U+54fd-54ff,U+5501,U+5504-5506,U+550c-550e; +} + +/* noto-serif-sc-[81]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-81-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+5289,U+528b,U+528d,U+528f,U+5291-5293,U+529a,U+52a2,U+52a6-52a7,U+52ac-52ad,U+52af,U+52b4-52b5,U+52b9,U+52bb-52bc,U+52be,U+52c1,U+52c5,U+52ca,U+52cd,U+52d0,U+52d6-52d7,U+52d9,U+52db,U+52dd-52de,U+52e0,U+52e2-52e3,U+52e5,U+52e7-52f0,U+52f2-52f3,U+52f5-52f9,U+52fb-52fc,U+5302,U+5304,U+530b,U+530d,U+530f-5310,U+5315,U+531a,U+531c-531d,U+5321,U+5323,U+5326,U+532e-5331,U+5338,U+533c-533e,U+5344-5345,U+534b-534d,U+5350,U+5354,U+5358,U+535d-535f,U+5363,U+5368-5369,U+536c,U+536e-536f,U+5372,U+5379-537b,U+537d,U+538d-538e,U+5390,U+5393-5394,U+5396,U+539b-539d,U+53a0-53a1,U+53a3-53a5,U+53a9,U+53ad-53ae,U+53b0,U+53b2-53b3,U+53b5-53b8,U+53bc,U+53be,U+53c1,U+53c3-53c7,U+53ce-53cf,U+53d2-53d3,U+53d5,U+53da,U+53de-53df,U+53e1-53e2; +} + +/* noto-serif-sc-[82]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-82-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+5104,U+5106-5107,U+5109-510b,U+510d,U+510f-5110,U+5113,U+5115,U+5117-5118,U+511a-511c,U+511e-511f,U+5121,U+5128,U+512b-512d,U+5131-5135,U+5137-5139,U+513c,U+5140,U+5142,U+5147,U+514c,U+514e-5150,U+5155-5158,U+5162,U+5169,U+5172,U+517f,U+5181-5184,U+5186-5187,U+518b,U+518f,U+5191,U+5195-5197,U+519a,U+51a2-51a3,U+51a6-51ab,U+51ad-51ae,U+51b1,U+51b4,U+51bc-51bd,U+51bf,U+51c3,U+51c7-51c8,U+51ca-51cb,U+51cd-51ce,U+51d4,U+51d6,U+51db-51dc,U+51e6,U+51e8-51eb,U+51f1,U+51f5,U+51fc,U+51ff,U+5202,U+5205,U+5208,U+520b,U+520d-520e,U+5215-5216,U+5228,U+522a,U+522c-522d,U+5233,U+523c-523d,U+523f-5240,U+5245,U+5247,U+5249,U+524b-524c,U+524e,U+5250,U+525b-525f,U+5261,U+5263-5264,U+5270,U+5273,U+5275,U+5277,U+527d,U+527f,U+5281-5285,U+5287; +} + +/* noto-serif-sc-[83]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-83-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+4fd1,U+4fd3,U+4fda-4fdc,U+4fdf-4fe0,U+4fe2-4fe4,U+4fe6,U+4fe8,U+4feb-4fed,U+4ff3,U+4ff5-4ff6,U+4ff8,U+4ffe,U+5001,U+5005-5006,U+5009,U+500c,U+500f,U+5013-5018,U+501b-501e,U+5022-5025,U+5027-5028,U+502b-502e,U+5030,U+5033-5034,U+5036-5039,U+503b,U+5041-5043,U+5045-5046,U+5048-504a,U+504c-504e,U+5051,U+5053,U+5055-5057,U+505b,U+505e,U+5060,U+5062-5063,U+5067,U+506a,U+506c,U+5070-5072,U+5074-5075,U+5078,U+507b,U+507d-507e,U+5080,U+5088-5089,U+5091-5092,U+5095,U+5097-509e,U+50a2-50a3,U+50a5-50a7,U+50a9,U+50ad,U+50b3,U+50b5,U+50b7,U+50ba,U+50be,U+50c4-50c5,U+50c7,U+50ca,U+50cd,U+50d1,U+50d5-50d6,U+50da,U+50de,U+50e5-50e6,U+50ec-50ee,U+50f0-50f1,U+50f3,U+50f9-50fb,U+50fe-5102; +} + +/* noto-serif-sc-[84]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-84-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+4ea3,U+4ea5,U+4eb0-4eb1,U+4eb3-4eb6,U+4eb8-4eb9,U+4ebb-4ebe,U+4ec2-4ec4,U+4ec8-4ec9,U+4ecc,U+4ecf-4ed0,U+4ed2,U+4eda-4edb,U+4edd-4ee1,U+4ee6-4ee9,U+4eeb,U+4eee-4eef,U+4ef3-4ef5,U+4ef8-4efa,U+4efc,U+4f00,U+4f03-4f05,U+4f08-4f09,U+4f0b,U+4f0e,U+4f12-4f13,U+4f15,U+4f1b,U+4f1d,U+4f21-4f22,U+4f25,U+4f27-4f29,U+4f2b-4f2e,U+4f31-4f33,U+4f36-4f37,U+4f39,U+4f3e,U+4f40-4f41,U+4f43,U+4f47-4f49,U+4f54,U+4f57-4f58,U+4f5d-4f5e,U+4f61-4f62,U+4f64-4f65,U+4f67,U+4f6a,U+4f6e-4f6f,U+4f72,U+4f74-4f7e,U+4f80-4f82,U+4f84,U+4f89-4f8a,U+4f8e-4f98,U+4f9e,U+4fa1,U+4fa5,U+4fa9-4faa,U+4fac,U+4fb3,U+4fb6-4fb8,U+4fbd,U+4fc2,U+4fc5-4fc6,U+4fcd-4fce,U+4fd0; +} + +/* noto-serif-sc-[85]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-85-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+3129,U+3131,U+3134,U+3137,U+3139,U+3141-3142,U+3145,U+3147-3148,U+314b,U+314d-314e,U+315c,U+3160-3161,U+3163-3164,U+3186,U+318d,U+3192,U+3196-3198,U+319e-319f,U+3220-3229,U+3231,U+3268,U+3297,U+3299,U+32a3,U+338e-338f,U+3395,U+339c-339e,U+33c4,U+33d1-33d2,U+33d5,U+3434,U+34dc,U+34ee,U+353e,U+355d,U+3566,U+3575,U+3592,U+35a0-35a1,U+35ad,U+35ce,U+36a2,U+36ab,U+38a8,U+3dab,U+3de7,U+3deb,U+3e1a,U+3f1b,U+3f6d,U+4495,U+4723,U+48fa,U+4ca3,U+4db6-4dbf,U+4e02,U+4e04-4e06,U+4e0c,U+4e0f,U+4e15,U+4e17,U+4e1f-4e21,U+4e26,U+4e29,U+4e2c,U+4e2f,U+4e31,U+4e35,U+4e37,U+4e3c,U+4e3f-4e42,U+4e44,U+4e46-4e47,U+4e57,U+4e5a-4e5c,U+4e64-4e65,U+4e67,U+4e69,U+4e6d,U+4e78,U+4e7f-4e82,U+4e85,U+4e87,U+4e8a,U+4e8d,U+4e93,U+4e96,U+4e98-4e99,U+4e9c,U+4e9e-4ea0,U+4ea2; +} + +/* noto-serif-sc-[86]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-86-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+279f-27a2,U+27a4-27a5,U+27a8,U+27b0,U+27b2-27b3,U+27b9,U+27e8-27e9,U+27f6,U+2800,U+28ec,U+2913,U+2921-2922,U+2934-2935,U+2a2f,U+2b05-2b07,U+2b50,U+2b55,U+2bc5-2bc6,U+2e1c-2e1d,U+2ebb,U+2f00,U+2f08,U+2f24,U+2f2d,U+2f2f-2f30,U+2f3c,U+2f45,U+2f63-2f64,U+2f74,U+2f83,U+2f8f,U+2fbc,U+3003,U+3005-3007,U+3012-3013,U+301c-301e,U+3021,U+3023-3024,U+3030,U+3034-3035,U+3041,U+3043,U+3045,U+3047,U+3049,U+3056,U+3058,U+305c,U+305e,U+3062,U+306c,U+3074,U+3077,U+307a,U+307c-307d,U+3080,U+308e,U+3090-3091,U+3099-309b,U+309d-309e,U+30a5,U+30bc,U+30be,U+30c2,U+30c5,U+30cc,U+30d8,U+30e2,U+30e8,U+30ee,U+30f0-30f2,U+30f4-30f6,U+30fd-30fe,U+3105-3126,U+3128; +} + +/* noto-serif-sc-[87]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-87-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+2651-2655,U+2658,U+265a-265b,U+265d-265e,U+2660-266d,U+266f,U+267b,U+2688,U+2693-2696,U+2698-2699,U+269c,U+26a0-26a1,U+26a4,U+26aa-26ab,U+26bd-26be,U+26c4-26c5,U+26d4,U+26e9,U+26f0-26f1,U+26f3,U+26f5,U+26fd,U+2702,U+2704-2706,U+2708-270f,U+2712-2718,U+271a-271b,U+271d,U+271f,U+2721,U+2724-2730,U+2732-2734,U+273a,U+273d-2744,U+2747-2749,U+274c,U+274e-274f,U+2753-2757,U+275b,U+275d-275e,U+2763,U+2765-2767,U+276e-276f,U+2776-277e,U+2780-2782,U+278a-278c,U+278e,U+2794-2796,U+279c; +} + +/* noto-serif-sc-[88]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-88-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+2550-2551,U+2554,U+2557,U+255a-255b,U+255d,U+255f-2560,U+2562-2563,U+2565-2567,U+2569-256a,U+256c-2572,U+2579,U+2580-2595,U+25a1,U+25a3,U+25a9-25ad,U+25b0,U+25b3-25bb,U+25bd-25c2,U+25c4,U+25c8-25cb,U+25cd,U+25d0-25d1,U+25d4-25d5,U+25d8,U+25dc-25e6,U+25ea-25eb,U+25ef,U+25fe,U+2600-2604,U+2609,U+260e-260f,U+2611,U+2614-2615,U+2618,U+261a-2620,U+2622-2623,U+262a,U+262d-2630,U+2639-2640,U+2642,U+2648-2650; +} + +/* noto-serif-sc-[89]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-89-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+23f0,U+23f3,U+2445,U+2449,U+2465-2471,U+2474-249b,U+24b8,U+24c2,U+24c7,U+24c9,U+24d0,U+24d2,U+24d4,U+24d8,U+24dd-24de,U+24e3,U+24e6,U+24e8,U+2500-2509,U+250b-2526,U+2528-2534,U+2536-2537,U+253b-2548,U+254a-254b; +} + +/* noto-serif-sc-[90]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-90-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+207c-2083,U+208c-208e,U+2092,U+20a6,U+20a8-20ad,U+20af,U+20b1,U+20b4-20b5,U+20b8-20ba,U+20bd,U+20db,U+20dd,U+20e0,U+20e3,U+2105,U+2109,U+2113,U+2116-2117,U+2120-2121,U+2126,U+212b,U+2133,U+2139,U+2194,U+2196-2199,U+21a0,U+21a9-21aa,U+21af,U+21b3,U+21b5,U+21ba-21bb,U+21c4,U+21ca,U+21cc,U+21d0-21d4,U+21e1,U+21e6-21e9,U+2200,U+2202,U+2205-2208,U+220f,U+2211-2212,U+2215,U+2217-2219,U+221d-2220,U+2223,U+2225,U+2227-222b,U+222e,U+2234-2237,U+223c-223d,U+2248,U+224c,U+2252,U+2256,U+2260-2261,U+2266-2267,U+226a-226b,U+226e-226f,U+2282-2283,U+2295,U+2297,U+2299,U+22a5,U+22b0-22b1,U+22b9,U+22bf,U+22c5-22c6,U+22ef,U+2304,U+2307,U+230b,U+2312-2314,U+2318,U+231a-231b,U+2323,U+239b,U+239d-239e,U+23a0,U+23e9; +} + +/* noto-serif-sc-[91]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-91-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+1d34-1d35,U+1d38-1d3a,U+1d3c,U+1d3f-1d40,U+1d49,U+1d4e-1d4f,U+1d52,U+1d55,U+1d5b,U+1d5e,U+1d9c,U+1da0,U+1dc4-1dc5,U+1e69,U+1e73,U+1ea0-1ea9,U+1eab-1ead,U+1eaf,U+1eb1,U+1eb3,U+1eb5,U+1eb7,U+1eb9,U+1ebb,U+1ebd-1ebe,U+1ec0-1ec3,U+1ec5-1ec6,U+1ec9-1ecd,U+1ecf-1ed3,U+1ed5,U+1ed7-1edf,U+1ee1,U+1ee3,U+1ee5-1eeb,U+1eed,U+1eef-1ef1,U+1ef3,U+1ef7,U+1ef9,U+1f62,U+1f7b,U+2001-2002,U+2004-2006,U+2009-200a,U+200c-2012,U+2015-2016,U+201a,U+201e-2021,U+2023,U+2025,U+2028,U+202a-202d,U+202f-2030,U+2032-2033,U+2035,U+2038,U+203c,U+203e-203f,U+2043-2044,U+2049,U+204d-204e,U+2060-2061,U+2070,U+2074-2078,U+207a-207b; +} + +/* noto-serif-sc-[97]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-97-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+2ae-2b3,U+2b5-2bf,U+2c2-2c3,U+2c6-2d1,U+2d8-2da,U+2dc,U+2e1-2e3,U+2e5,U+2eb,U+2ee-2f0,U+2f2-2f7,U+2f9-2ff,U+302-30d,U+311,U+31b,U+321-325,U+327-329,U+32b-32c,U+32e-32f,U+331-339,U+33c-33d,U+33f,U+348,U+352,U+35c,U+35e-35f,U+361,U+363,U+368,U+36c,U+36f,U+530-540,U+55d-55e,U+561,U+563,U+565,U+56b,U+56e-579; +} + +/* noto-serif-sc-[98]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-98-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+176-17f,U+192,U+194,U+19a-19b,U+19d,U+1a0-1a1,U+1a3-1a4,U+1aa,U+1ac-1ad,U+1af-1bf,U+1d2,U+1d4,U+1d6,U+1d8,U+1da,U+1dc,U+1e3,U+1e7,U+1e9,U+1ee,U+1f0-1f1,U+1f3,U+1f5-1ff,U+219-21b,U+221,U+223-226,U+228,U+22b,U+22f,U+231,U+234-237,U+23a-23b,U+23d,U+250-252,U+254-255,U+259-25e,U+261-263,U+265,U+268,U+26a-26b,U+26f-277,U+279,U+27b-280,U+282-283,U+285,U+28a,U+28c,U+28f,U+292,U+294-296,U+298-29a,U+29c,U+29f,U+2a1-2a4,U+2a6-2a7,U+2a9,U+2ab; +} + +/* noto-serif-sc-[99]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-99-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+a1-a4,U+a6-a8,U+aa,U+ac,U+af,U+b1,U+b3-b6,U+b8-ba,U+bc-d6,U+d8-de,U+e6,U+eb,U+ee-f0,U+f5,U+f7-f8,U+fb,U+fd-100,U+102,U+104-107,U+10d,U+10f-112,U+115,U+117,U+119,U+11b,U+11e-11f,U+121,U+123,U+125-127,U+129-12a,U+12d,U+12f-13f,U+141-142,U+144,U+146,U+14b-14c,U+14f-153,U+158-15b,U+15e-160,U+163-165,U+168-16a,U+16d-175; +} + +/* noto-serif-sc-[100]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-100-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+221a,U+2264,U+2464,U+25a0,U+3008,U+4e10,U+512a,U+5152,U+5201,U+5241,U+5340,U+5352,U+549a,U+54b2,U+54c6,U+54d7,U+54e1,U+5509,U+55c5,U+5618,U+5716,U+576f,U+5784,U+57a2,U+589f,U+5a20,U+5a25,U+5a29,U+5a34,U+5a7f,U+5ad6,U+5b09,U+5b5c,U+5bc7,U+5be6,U+5c27,U+5d2d,U+5dcd,U+5f1b,U+5f37,U+604d,U+6055,U+6073,U+60eb,U+61ff,U+62ce,U+62ed,U+6345,U+6390,U+63b0,U+63b7,U+64ae,U+64c2,U+64d2,U+6556,U+663c,U+667e,U+66d9,U+66f8,U+6756,U+6789,U+689d,U+68f1,U+695e,U+6975,U+6a1f,U+6b0a,U+6b61,U+6b87,U+6c5d,U+6c7e,U+6c92,U+6d31,U+6df9,U+6e0d,U+6e2d,U+6f31,U+6f3e,U+70b3,U+70bd,U+70ca,U+70e8,U+725f,U+733f,U+7396,U+739f,U+7459,U+74a7,U+75a1,U+75f0,U+76cf,U+76d4,U+7729,U+77aa,U+77b0,U+77e3,U+780c,U+78d5,U+7941,U+7977,U+797a,U+79c3,U+7a20,U+7a92,U+7b71,U+7bf1,U+7c9f,U+7eb6,U+7eca,U+7ef7,U+7f07,U+7f09,U+7f15,U+7f81,U+7fb9,U+8038,U+8098,U+80b4,U+8110,U+814b-814c,U+816e,U+818a,U+8205,U+8235,U+828b,U+82a5,U+82b7,U+82d4,U+82db,U+82df,U+8317,U+8338,U+8385-8386,U+83c1,U+83cf,U+8537,U+853b,U+854a,U+8715,U+8783,U+892a,U+8a71,U+8bb3,U+8d2e,U+8d58,U+8dbe,U+8f67,U+8fab,U+8fc4,U+8fe6,U+9023,U+9084,U+9091,U+916a,U+91c9,U+91dc,U+94b3,U+9502,U+9523,U+9551,U+956f,U+960e,U+962a,U+962e,U+9647,U+96f3,U+9739,U+97a0,U+97ed,U+983b,U+985e,U+988a,U+99ac,U+9a6f,U+9a87,U+9a8b,U+9ab7,U+9abc,U+9ac5,U+9e25,U+e608,U+e621,U+ff06,U+ff14-ff16; +} + +/* noto-serif-sc-[101]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-101-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+161,U+926,U+928,U+939,U+93f-940,U+94d,U+e17,U+e22,U+e44,U+25c7,U+25ce,U+2764,U+3009,U+3016-3017,U+4e4d,U+4e53,U+4f5a,U+4f70,U+4fae,U+4fd8,U+4ffa,U+5011,U+501a,U+51c4,U+5225,U+547b,U+5495,U+54e8,U+54ee,U+5594,U+55d3,U+55dc,U+55fd,U+560e,U+565c,U+5662,U+5669,U+566c,U+56bc,U+5742,U+5824,U+5834,U+598a,U+5992,U+59a9,U+5a04,U+5ac9,U+5b75,U+5b7d,U+5bc5,U+5c49,U+5c90,U+5e1c,U+5e27,U+5e2b,U+5e37,U+5e90,U+618b,U+61f5,U+620a,U+620c,U+6273,U+62c7,U+62f7,U+6320,U+6342,U+6401-6402,U+6413,U+6512,U+655b,U+65a7,U+65f1,U+65f7,U+665f,U+6687,U+66a7,U+673d,U+67b8,U+6854,U+68d8,U+68fa,U+696d,U+6a02,U+6a0a,U+6a80,U+6b7c,U+6bd9,U+6c2e,U+6c76,U+6cf8,U+6d4a,U+6d85,U+6e24,U+6e32,U+6ec7,U+6f88,U+700f,U+701a,U+7078,U+707c,U+70ac,U+70c1,U+72e9,U+7409,U+7422,U+745a,U+7480,U+74a8,U+752b,U+7574,U+7656,U+7699,U+7737,U+785d,U+78be,U+79b9,U+7a3d,U+7a91,U+7a9f,U+7ae3,U+7b77,U+7c3f,U+7d1a,U+7d50,U+7d93,U+8042,U+808b,U+8236,U+82b8-82b9,U+82ef,U+8309,U+836b,U+83ef,U+8431,U+85c9,U+865e,U+868c,U+8759,U+8760,U+8845,U+89ba,U+8a2a,U+8aaa,U+8c41,U+8d2c,U+8d4e,U+8e66,U+8e6d,U+8eaf,U+902e,U+914b,U+916e,U+919b,U+949b,U+94a0,U+94b0,U+9541-9542,U+9556,U+95eb,U+95f5,U+964b,U+968b,U+96cc-96cd,U+96cf,U+9713,U+9890,U+98a8,U+9985,U+9992,U+9a6d,U+9a81,U+9a86,U+9ab8,U+9ca4,U+e606-e607,U+e60a,U+e60c,U+e60e,U+fe0f,U+ff02,U+ff1e; +} + +/* noto-serif-sc-[102]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-102-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+10c,U+627-629,U+639,U+644,U+64a,U+203b,U+2265,U+2463,U+2573,U+25b2,U+3448-3449,U+4e1e,U+4e5e,U+4f3a,U+4f5f,U+4fea,U+5026,U+508d,U+516e,U+5189,U+5254,U+5288,U+52d8,U+52fa,U+5306,U+5308,U+5364,U+5384,U+53ed,U+543c,U+5450,U+5455,U+5466,U+54c4,U+5578,U+55a7,U+561f,U+5631,U+572d,U+575f,U+57ae,U+57e0,U+5830,U+594e,U+5984,U+5993,U+5bdd,U+5c0d,U+5c7f,U+5c82,U+5e62,U+5ed3,U+5f08,U+607a,U+60bc,U+625b,U+6292,U+62e2,U+6363,U+6467,U+6714,U+675e,U+6771,U+67a2,U+67ff,U+6805,U+68a7,U+68e0,U+6930,U+6986,U+69a8,U+69df,U+6a44,U+6a5f,U+6c13,U+6c1f,U+6c22,U+6c2f,U+6c40,U+6c81,U+6c9b,U+6ca5,U+6da4,U+6df3,U+6e85,U+6eba,U+6ed5,U+6f13,U+6f33,U+6f62,U+715e,U+72c4,U+73d1,U+7405,U+7487,U+7578,U+75a4,U+75eb,U+7693,U+7738,U+7741,U+776b,U+7792,U+77a7,U+77a9,U+77b3,U+788c,U+7984,U+79a7,U+79e4,U+7a1a,U+7a57,U+7aa6,U+7b0b,U+7b5d,U+7c27,U+7c7d,U+7caa,U+7cd9,U+7cef,U+7eda,U+7ede,U+7f24,U+803f,U+8046,U+80fa,U+81fb,U+8207,U+8258,U+8335,U+8339,U+8354,U+840e,U+85b0,U+85fb,U+8695,U+86aa,U+8717,U+8749,U+874c,U+8996,U+89bd,U+89c5,U+8bdb,U+8bf5,U+8c5a,U+8cec,U+8d3f,U+8d9f,U+8e44,U+8fed,U+9005,U+9019,U+9082,U+90af,U+90dd,U+90e1,U+90f8,U+916f,U+9176,U+949e,U+94a7,U+94c2,U+9525,U+9580,U+95dc,U+96e2,U+96fb,U+9704,U+9a7c,U+9a7f,U+9b41,U+9ca8,U+9cc4,U+9cde,U+9e92,U+9ede,U+9f9a,U+e60b,U+e610,U+ff10,U+ff13,U+ff3b,U+ff3d,U+f012b; +} + +/* noto-serif-sc-[103]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-103-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+60,U+631,U+2606,U+3014-3015,U+309c,U+33a1,U+4e52,U+4ec6,U+4f86,U+4f8d,U+4fde,U+4fef,U+500b,U+502a,U+515c,U+518a,U+51a5,U+51f3,U+5243,U+52c9,U+52d5,U+53a2,U+53ee,U+54ce,U+54fa,U+54fc,U+5580,U+5587,U+563f,U+56da,U+5792,U+5815,U+5960,U+59d7,U+5b78,U+5b9b,U+5be1,U+5c4e,U+5c51,U+5c6f,U+5c9a,U+5cfb,U+5d16,U+5ed6,U+5f27,U+5f6a,U+609a,U+60df,U+6168,U+61c8,U+6236,U+62f1,U+62fd,U+631a,U+6328,U+632b,U+6346,U+638f,U+63a0,U+63c9,U+655e,U+6590,U+6615,U+6627,U+66ae,U+66e6,U+66f0,U+67da,U+67ec,U+6813,U+6816,U+6869,U+6893,U+68ad,U+68f5,U+6977,U+6984,U+69db,U+6b72,U+6bb7,U+6ce3,U+6cfb,U+6d47,U+6da1,U+6dc4,U+6e43,U+6eaf,U+6eff,U+6f8e,U+7011,U+7063,U+7076,U+7096,U+70ba,U+70db,U+70ef,U+7119-711a,U+7172,U+718f,U+7194,U+727a,U+72d9,U+72ed,U+7325,U+73ae,U+73ba,U+73c0,U+73fe,U+7410,U+7426,U+7455,U+7554,U+7576,U+75ae,U+75b9,U+762b,U+766b,U+7682,U+7750,U+7779,U+7784,U+77eb,U+77ee,U+78f7,U+79e9,U+7a79,U+7b1b,U+7b28,U+7bf7,U+7db2,U+7ec5,U+7eee,U+7f14,U+7f1a,U+7fe1,U+8087,U+809b,U+81b3,U+8231,U+830e,U+835f,U+83e9,U+849c,U+851a,U+868a,U+8718,U+874e,U+8822,U+8910,U+8944,U+8a3b,U+8bb6,U+8bbc,U+8e72,U+8f9c,U+900d,U+904b,U+904e,U+9063,U+90a2,U+90b9,U+9119,U+94f2,U+952f,U+9576-9577,U+9593,U+95f8,U+961c,U+969b,U+96a7,U+96c1,U+9716,U+9761,U+97ad,U+97e7,U+98a4,U+997a,U+9a73,U+9b44,U+9e3d,U+9ecf,U+9ed4,U+ff11-ff12,U+fffd; +} + +/* noto-serif-sc-[104]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-104-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+2003,U+2193,U+2462,U+4e19,U+4e2b,U+4e36,U+4ea8,U+4ed1,U+4ed7,U+4f51,U+4f63,U+4f83,U+50e7,U+5112,U+5167,U+51a4,U+51b6,U+5239,U+5265,U+532a,U+5351,U+537f,U+5401,U+548f,U+5492,U+54af,U+54b3,U+54bd,U+54d1,U+54df,U+554f,U+5564,U+5598,U+5632,U+56a3,U+56e7,U+574e,U+575d-575e,U+57d4,U+584c,U+58e4,U+5937,U+5955,U+5a05,U+5a1f,U+5a49,U+5ac2,U+5c39,U+5c61,U+5d0e,U+5de9,U+5e9a,U+5eb8,U+5f0a,U+5f13,U+5f6c,U+5f8c,U+603c,U+608d,U+611b,U+6127,U+62a0,U+62d0,U+634f,U+635e,U+63fd,U+6577,U+658b,U+65bc,U+660a,U+6643,U+6656,U+6703,U+6760,U+67af,U+67c4,U+67e0,U+6817,U+68cd,U+690e,U+6960,U+69b4,U+6a71,U+6aac,U+6b67,U+6bb4,U+6c55,U+6c70,U+6c82,U+6ca6,U+6cb8,U+6cbe,U+6ede,U+6ee5,U+6f4d,U+6f84,U+6f9c,U+7115,U+7121,U+722a,U+7261,U+7272,U+7280,U+72f8,U+7504,U+754f,U+75d8,U+767c,U+76ef,U+778e,U+77bb,U+77f6,U+786b,U+78b1,U+7948,U+7985,U+79be,U+7a83,U+7a8d,U+7eac,U+7eef,U+7ef8,U+7efd,U+7f00,U+803d,U+8086,U+810a,U+8165,U+819d,U+81a8,U+8214,U+829c,U+831c,U+832b,U+8367,U+83e0,U+83f1,U+8403,U+846b,U+8475,U+84b2,U+8513,U+8574,U+85af,U+86d9,U+86db,U+8acb,U+8bbd,U+8be0-8be1,U+8c0e,U+8d29,U+8d50,U+8d63,U+8f7f,U+9032,U+9042,U+90b1,U+90b5,U+9165,U+9175,U+94a6,U+94c5,U+950c,U+9610,U+9631,U+9699,U+973e,U+978d,U+97ec,U+97f6,U+984c,U+987d,U+9882,U+9965,U+996a,U+9972,U+9a8f,U+9ad3,U+9ae6,U+9cb8,U+9edb,U+e600,U+e60f,U+e611,U+ff05,U+ff0b; +} + +/* noto-serif-sc-[105]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-105-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+5e,U+2190,U+250a,U+25bc,U+25cf,U+4e56,U+4ea9,U+4f3d,U+4f6c,U+4f88,U+4fa8,U+4fcf,U+5029,U+5188,U+51f9,U+5203,U+524a,U+5256,U+529d,U+5375,U+53db,U+541f,U+5435,U+5457,U+548b,U+54c7,U+54d4,U+54e9,U+556a,U+5589,U+55bb,U+55e8,U+55ef,U+563b,U+566a,U+576a,U+58f9,U+598d,U+599e,U+59a8,U+5a9b,U+5ae3,U+5bb0,U+5bde,U+5c4c,U+5c60,U+5d1b,U+5deb,U+5df7,U+5e18,U+5f26,U+5f64,U+601c,U+6084,U+60e9,U+614c,U+6208,U+621a,U+6233,U+6254,U+62d8,U+62e6,U+62ef,U+6323,U+632a,U+633d,U+6361,U+6405,U+640f,U+6614,U+6642,U+6657,U+67a3,U+6808,U+683d,U+6850,U+6897,U+68b3,U+68b5,U+68d5,U+6a58,U+6b47,U+6b6a,U+6c28,U+6c90,U+6ca7,U+6cf5,U+6d51,U+6da9,U+6dc7,U+6dd1,U+6e0a,U+6e5b,U+6e9c,U+6f47,U+6f6d,U+70ad,U+70f9,U+710a,U+7130,U+71ac,U+745f,U+7476,U+7490,U+7529,U+7538,U+75d2,U+7696,U+76b1,U+76fc,U+777f,U+77dc,U+789f,U+795b,U+79bd,U+79c9,U+7a3b,U+7a46,U+7aa5,U+7ad6,U+7ca5,U+7cb9,U+7cdf,U+7d6e,U+7f06,U+7f38,U+7fa1,U+7fc1,U+8015,U+803b,U+80a2,U+80aa,U+8116,U+813e,U+82bd,U+8305,U+8328,U+8346,U+846c,U+8549,U+859b,U+8611,U+8680,U+87f9,U+884d,U+8877,U+888d,U+88d4,U+898b,U+8a79,U+8a93,U+8c05,U+8c0d,U+8c26,U+8d1e,U+8d31,U+8d81,U+8e22,U+8e81,U+8f90,U+8f96,U+90ca,U+916c,U+917f,U+9187,U+918b,U+9499,U+94a9,U+9524,U+9540,U+958b,U+9600,U+9640,U+96b6,U+96c7,U+96ef,U+98d9,U+9976,U+997f,U+9a74,U+9a84,U+9c8d,U+9e26,U+9e9f,U+ad6d,U+c5b4,U+d55c,U+ff0f; +} + +/* noto-serif-sc-[106]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-106-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+b0,U+2191,U+2460-2461,U+25c6,U+300e-300f,U+4e1b,U+4e7e,U+4ed5,U+4ef2,U+4f10,U+4f1e,U+4f50,U+4fa6,U+4faf,U+5021,U+50f5,U+5179,U+5180,U+51d1,U+522e,U+52a3,U+52c3,U+52cb,U+5300,U+5319,U+5320,U+5349,U+5395,U+53d9,U+541e,U+5428,U+543e,U+54b1,U+54c0,U+54d2,U+570b,U+5858,U+58f6,U+5974,U+59a5,U+59e8,U+59ec,U+5a36,U+5a9a,U+5ab3,U+5b99,U+5baa,U+5ce1,U+5d14,U+5d4c,U+5dc5,U+5de2,U+5e99,U+5e9e,U+5f18,U+5f66,U+5f70,U+6070,U+60d5,U+60e7,U+6101,U+611a,U+61be,U+6241,U+6252,U+626f,U+6296,U+62bc,U+62cc,U+6380,U+63a9,U+644a,U+6454,U+64a9,U+64b8,U+6500,U+6572,U+65a5,U+65a9,U+65ec,U+660f,U+6749,U+6795,U+67ab,U+68da,U+6912,U+6bbf,U+6bef,U+6cab,U+6cca,U+6ccc,U+6cfc,U+6d3d,U+6d78,U+6dee,U+6e17,U+6e34,U+6e83,U+6ea2,U+6eb6,U+6f20,U+6fa1,U+707f,U+70d8,U+70eb,U+714c,U+714e,U+7235,U+7239,U+73ca,U+743c,U+745c,U+7624,U+763e,U+76f2,U+77db,U+77e9,U+780d,U+7838,U+7845,U+78ca,U+796d,U+7a84,U+7aed,U+7b3c,U+7eb2,U+7f05,U+7f20,U+7f34,U+7f62,U+7fc5,U+7fd8,U+7ff0,U+800d,U+8036,U+80ba,U+80be,U+80c0-80c1,U+8155,U+817a,U+8180,U+81e3,U+8206,U+8247,U+8270,U+8299,U+82ad,U+8304,U+8393,U+83b9,U+840d,U+8427,U+8469,U+8471,U+84c4,U+84ec,U+853d,U+8681-8682,U+8721,U+8854,U+88d5,U+88f9,U+8bc0,U+8c0a,U+8c29,U+8c2d,U+8d41,U+8dea,U+8eb2,U+8f9f,U+903b,U+903e,U+9102,U+9493,U+94a5,U+94f8,U+95f7,U+9706,U+9709,U+9774,U+98a0,U+9e64,U+9f9f,U+e603; +} + +/* noto-serif-sc-[107]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-107-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+200b,U+2103,U+4e18,U+4e27-4e28,U+4e38,U+4e59,U+4e8f,U+4ead,U+4ec7,U+4fe9,U+503a,U+5085,U+5146,U+51af,U+51f8,U+52ab,U+5339,U+535c,U+5378,U+538c,U+5398,U+53f9,U+5415,U+5475,U+54aa,U+54ac,U+54b8,U+5582,U+5760,U+5764,U+57cb,U+5835,U+5885,U+5951,U+5983,U+59da,U+5a77,U+5b5d,U+5b5f,U+5bb5,U+5bc2,U+5be8,U+5bfa,U+5c2c,U+5c34,U+5c41,U+5c48,U+5c65,U+5cad,U+5e06,U+5e42,U+5ef7,U+5f17,U+5f25,U+5f6d,U+5f79,U+6028,U+6064,U+6068,U+606d,U+607c,U+6094,U+6109,U+6124,U+6247,U+626d,U+6291,U+629a,U+62ac,U+62b9,U+62fe,U+6324,U+6349,U+6367,U+6398,U+6495,U+64a4,U+64b0,U+64bc,U+64ce,U+658c,U+65ed,U+6602,U+6674,U+6691,U+66a8,U+674f,U+679a,U+67ef,U+67f4,U+680b,U+6876,U+68a8,U+6a59,U+6a61,U+6b20,U+6bc5,U+6d12,U+6d46,U+6d8c,U+6dc0,U+6e14,U+6e23,U+6f06,U+7164,U+716e,U+7199,U+71e5,U+72ac,U+742a,U+755c,U+75ab,U+75b2,U+75f4,U+7897,U+78b3,U+78c5,U+7978,U+79fd,U+7a74,U+7b4b,U+7b5b,U+7ece,U+7ed2,U+7ee3,U+7ef3,U+7f50,U+7f55,U+7f9e,U+7fe0,U+809d,U+8106,U+814a,U+8154,U+817b,U+818f,U+81c2,U+81ed,U+821f,U+82a6,U+82d1,U+8302,U+83c7,U+83ca,U+845b,U+848b,U+84c9,U+85e4,U+86ee,U+8700,U+8774,U+8881,U+8c1c,U+8c79,U+8d2a,U+8d3c,U+8eba,U+8f70,U+8fa9,U+8fb1,U+900a,U+9017,U+901d,U+9022,U+906e,U+946b,U+94dd,U+94ed,U+953b,U+95ef,U+95fa,U+95fd,U+96c0,U+971e,U+9753,U+9756,U+97e6,U+9881,U+9887,U+9b4f,U+9e2d,U+9f0e,U+e601-e602,U+e604-e605,U+ff5c; +} + +/* noto-serif-sc-[108]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-108-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+24,U+4e08,U+4e43,U+4e4f,U+4ef0,U+4f2a,U+507f,U+50ac,U+50bb,U+5151,U+51bb,U+51f6,U+51fd,U+5272,U+52fe,U+5362,U+53c9,U+53d4,U+53e0,U+543b,U+54f2,U+5507,U+5524,U+558a,U+55b5,U+561b,U+56ca,U+5782,U+57c3,U+5893,U+5915,U+5949,U+5962,U+59ae,U+59dc,U+59fb,U+5bd3,U+5c38,U+5cb3,U+5d07,U+5d29,U+5de1,U+5dfe,U+5e15,U+5eca,U+5f2f,U+5f7c,U+5fcc,U+6021,U+609f,U+60f9,U+6108,U+6148,U+6155,U+6170,U+61d2,U+6251,U+629b,U+62ab,U+62e8,U+62f3,U+6321,U+6350,U+6566,U+659c,U+65e8,U+6635,U+6655,U+6670,U+66f9,U+6734,U+679d,U+6851,U+6905,U+6b49,U+6b96,U+6c1b,U+6c41,U+6c6a,U+6c83,U+6cf3,U+6d9b,U+6dcb,U+6e1d,U+6e20-6e21,U+6eaa,U+6ee4,U+6ee9,U+6f58,U+70e4,U+722c,U+7262,U+7267,U+72b9,U+72e0,U+72ee,U+72f1,U+7334,U+73ab,U+7433,U+7470,U+758f,U+75d5,U+764c,U+7686,U+76c6,U+76fe,U+7720,U+77e2,U+7802,U+7816,U+788d,U+7891,U+7a00,U+7a9d,U+7b52,U+7bad,U+7c98,U+7cca,U+7eba,U+7eea,U+7ef5,U+7f1d,U+7f69,U+806a,U+809a,U+80bf,U+80c3,U+81c0,U+820c,U+82ac,U+82af,U+82cd,U+82d7,U+838e,U+839e,U+8404,U+84b8,U+852c,U+8587,U+8650,U+8679,U+86c7,U+8702,U+87ba,U+886b-886c,U+8870,U+8c10,U+8c23,U+8c6b,U+8d3e,U+8d4b-8d4c,U+8d64,U+8d6b,U+8d74,U+8e29,U+8f69,U+8f74,U+8fb0,U+8fdf,U+901b,U+9038,U+9093,U+9171,U+9489,U+94ae,U+94c3,U+9508,U+9510,U+9601,U+9614,U+964c,U+9675,U+971c,U+97f5,U+9888,U+98d8,U+9971,U+9aa4,U+9e3f,U+9e45,U+9e4f,U+9e70,U+9f7f,U+e715; +} + +/* noto-serif-sc-[109]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-109-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+a5,U+2192,U+2605,U+4e11,U+4e22,U+4e32,U+4f0d,U+4f0f,U+4f69,U+4ff1,U+50b2,U+5154,U+51dd,U+51f0,U+5211,U+5269,U+533f,U+5366-5367,U+5389,U+5413,U+5440,U+5446,U+5561,U+574a,U+5751,U+57ab,U+5806,U+5821,U+582a,U+58f3,U+5938,U+5948,U+5978,U+59d1,U+5a03,U+5a07,U+5ac1,U+5acc,U+5ae9,U+5bb4,U+5bc4,U+5c3f,U+5e3d,U+5e7d,U+5f92,U+5faa,U+5fe0,U+5ffd,U+6016,U+60a0,U+60dc,U+60e8,U+614e,U+6212,U+6284,U+62c6,U+62d3-62d4,U+63f4,U+642c,U+6478,U+6491-6492,U+64e6,U+6591,U+65a4,U+664b,U+6735,U+6746,U+67f1,U+67f3,U+6842,U+68af,U+68c9,U+68cb,U+6a31,U+6b3a,U+6bc1,U+6c0f,U+6c27,U+6c57,U+6cc4,U+6ce5,U+6d2a,U+6d66,U+6d69,U+6daf,U+6e58,U+6ecb,U+6ef4,U+707e,U+7092,U+70ab,U+71d5,U+7275,U+7384,U+73b2,U+7434,U+74e6,U+74f7,U+75bc,U+76c8,U+76d0,U+7709,U+77ac,U+7855,U+78a7,U+78c1,U+7a77,U+7b79,U+7c92,U+7cae,U+7cd5,U+7ea4,U+7eb5,U+7ebd,U+7f5a,U+7fd4,U+7ffc,U+8083,U+8096,U+80a0,U+80d6,U+80de,U+8102,U+8109,U+810f,U+8179,U+8292,U+82b3,U+8352,U+8361,U+83cc,U+841d,U+8461,U+8482,U+8521,U+857e,U+85aa,U+866b,U+8776,U+8896,U+889c,U+88f8,U+8a9e,U+8bc8,U+8bf8,U+8c0b,U+8c28,U+8d2b,U+8d2f,U+8d37,U+8d3a,U+8d54,U+8dc3,U+8dcc,U+8df5,U+8e0f,U+8e48,U+8f86,U+8f88,U+8f9e,U+8fc1,U+8fc8,U+8feb,U+9065,U+90a6,U+90aa,U+90bb,U+90c1,U+94dc,U+9521,U+9676,U+96d5,U+970d,U+9897,U+997c,U+9a70,U+9a76,U+9a9a,U+9ad4,U+9e23,U+9e7f,U+9f3b,U+e675,U+e6b9,U+ffe5; +} + +/* noto-serif-sc-[110]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-110-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+300c-300d,U+4e54,U+4e58,U+4e95,U+4ec1,U+4f2f,U+4f38,U+4fa3,U+4fca,U+503e,U+5141,U+5144,U+517c,U+51cc,U+51ed,U+5242,U+52b2,U+52d2,U+52e4,U+540a,U+5439,U+5448,U+5496,U+54ed,U+5565,U+5761,U+5766,U+58ee,U+593a,U+594b,U+594f,U+5954,U+5996,U+59c6,U+59ff,U+5b64,U+5bff,U+5c18,U+5c1d,U+5c97,U+5ca9,U+5cb8,U+5e9f,U+5ec9,U+5f04,U+5f7b,U+5fa1,U+5fcd,U+6012,U+60a6,U+60ac,U+60b2,U+60ef,U+626e,U+6270,U+6276,U+62d6,U+62dc,U+6316,U+632f,U+633a,U+6355,U+63aa,U+6447,U+649e,U+64c5,U+654c,U+65c1,U+65cb,U+65e6,U+6606,U+6731,U+675c,U+67cf,U+67dc,U+6846,U+6b8b,U+6beb,U+6c61,U+6c88,U+6cbf,U+6cdb,U+6cea,U+6d45,U+6d53,U+6d74,U+6d82,U+6da8,U+6db5,U+6deb,U+6eda,U+6ee8,U+6f0f,U+706d,U+708e,U+70ae,U+70bc,U+70c2,U+70e6,U+7237-7238,U+72fc,U+730e,U+731b,U+739b,U+73bb,U+7483,U+74dc,U+74f6,U+7586,U+7626,U+775b,U+77ff,U+788e,U+78b0,U+7956,U+7965,U+79e6,U+7af9,U+7bee,U+7c97,U+7eb1,U+7eb7,U+7ed1,U+7ed5,U+7f6a,U+7f72,U+7fbd,U+8017,U+808c,U+80a9,U+80c6,U+80ce,U+8150,U+8170,U+819c,U+820d,U+8230,U+8239,U+827e,U+8377,U+8389,U+83b2,U+8428,U+8463,U+867e,U+88c2,U+88d9,U+8986,U+8bca,U+8bde,U+8c13,U+8c8c,U+8d21,U+8d24,U+8d56,U+8d60,U+8d8b,U+8db4,U+8e2a,U+8f68,U+8f89,U+8f9b,U+8fa8,U+8fbd,U+9003,U+90ce,U+90ed,U+9189,U+94bb,U+9505,U+95f9,U+963b,U+9655,U+966a,U+9677,U+96fe,U+9896,U+99a8,U+9a71,U+9a82,U+9a91,U+9b45,U+9ece,U+9f20,U+feff,U+ff0d; +} + +/* noto-serif-sc-[111]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-111-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+4e4c,U+4e88,U+4ea1,U+4ea6,U+4ed3-4ed4,U+4eff,U+4f30,U+4fa7,U+4fc4,U+4fd7,U+500d,U+504f,U+5076-5077,U+517d,U+5192,U+51c9,U+51ef,U+5238,U+5251,U+526a,U+52c7,U+52df,U+52ff,U+53a6,U+53a8,U+53ec,U+5410,U+559d,U+55b7,U+5634,U+573e,U+5783,U+585e,U+586b,U+58a8,U+5999,U+59d3,U+5a1c,U+5a46,U+5b54-5b55,U+5b85,U+5b8b,U+5b8f,U+5bbf,U+5bd2,U+5c16,U+5c24,U+5e05,U+5e45,U+5e7c,U+5e84,U+5f03,U+5f1f,U+5f31,U+5f84,U+5f90,U+5fbd,U+5fc6,U+5fd9,U+5fe7,U+6052,U+6062,U+6089,U+60a3,U+60d1,U+6167,U+622a,U+6234,U+624e,U+6269,U+626c,U+62b5,U+62d2,U+6325,U+63e1,U+643a,U+6446,U+6562,U+656c,U+65e2,U+65fa,U+660c,U+6628,U+6652,U+6668,U+6676,U+66fc,U+66ff,U+6717,U+676d,U+67aa,U+67d4,U+6843,U+6881,U+68d2,U+695a,U+69fd,U+6a2a,U+6b8a,U+6c60,U+6c64,U+6c9f,U+6caa,U+6cc9,U+6ce1,U+6cfd,U+6d1b,U+6d1e,U+6d6e,U+6de1,U+6e10,U+6e7f,U+6f5c,U+704c,U+7070,U+7089,U+70b8,U+718a,U+71c3,U+723d,U+732a,U+73cd,U+7518,U+756a,U+75af,U+75be,U+75c7,U+76d2,U+76d7,U+7763,U+78e8,U+795d,U+79df,U+7c4d,U+7d2f,U+7ee9,U+7f13,U+7f8a,U+8000,U+8010,U+80af,U+80f6,U+80f8,U+8212,U+8273,U+82f9,U+83ab,U+83b1,U+83f2,U+8584,U+871c,U+8861,U+888b,U+88c1,U+88e4,U+8bd1,U+8bf1,U+8c31,U+8d5a,U+8d75-8d76,U+8de8,U+8f85,U+8fa3,U+8fc5,U+9006,U+903c,U+904d,U+9075,U+9178,U+9274,U+950b,U+9526,U+95ea,U+9636,U+9686,U+978b,U+987f,U+9a7e,U+9b42,U+9e1f,U+9ea6,U+9f13,U+9f84,U+ff5e; +} + +/* noto-serif-sc-[112]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-112-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+23,U+3d,U+4e01,U+4e39,U+4e73,U+4ecd,U+4ed9,U+4eea,U+4f0a,U+4f1f,U+4f5b,U+4fa0,U+4fc3,U+501f,U+50a8,U+515a,U+5175,U+51a0,U+51c0,U+51e1,U+51e4,U+5200,U+520a,U+5224,U+523a,U+52aa,U+52b1,U+52b3,U+5348,U+5353,U+5360,U+5371,U+5377,U+539a,U+541b,U+5434,U+547c,U+54e6,U+5510,U+5531,U+5609,U+56f0,U+56fa,U+5733,U+574f,U+5851,U+5854,U+5899,U+58c1,U+592e,U+5939,U+5976,U+5986,U+59bb,U+5a18,U+5a74,U+5b59,U+5b87,U+5b97,U+5ba0,U+5bab,U+5bbd-5bbe,U+5bf8,U+5c0a,U+5c3a,U+5c4a,U+5e16,U+5e1d,U+5e2d,U+5e8a,U+6015,U+602a,U+6050,U+6069,U+6162,U+61c2,U+6293,U+6297,U+62b1,U+62bd,U+62df,U+62fc,U+6302,U+635f,U+638c,U+63ed,U+6458,U+6469,U+6563,U+6620,U+6653,U+6696-6697,U+66dd,U+675f,U+676f-6770,U+67d0,U+67d3,U+684c,U+6865,U+6885,U+68b0,U+68ee,U+690d,U+6b23,U+6b32,U+6bd5,U+6c89,U+6d01,U+6d25,U+6d89,U+6da6,U+6db2,U+6df7,U+6ed1,U+6f02,U+70c8,U+70df,U+70e7,U+7126,U+7236,U+7259,U+731c,U+745e,U+74e3,U+751a,U+751c,U+7532,U+7545,U+75db,U+7761,U+7a0d,U+7b51,U+7ca4,U+7cd6,U+7d2b,U+7ea0,U+7eb9,U+7ed8,U+7f18,U+7f29,U+8033,U+804a,U+80a4-80a5,U+80e1,U+817f,U+829d,U+82e6,U+8336,U+840c,U+8499,U+864e,U+8651,U+865a,U+88ad,U+89e6,U+8bd7,U+8bfa,U+8c37,U+8d25,U+8d38,U+8ddd,U+8fea,U+9010,U+9012,U+906d,U+907f-9080,U+90d1,U+9177,U+91ca,U+94fa,U+9501,U+9634-9635,U+9694,U+9707,U+9738,U+9769,U+9a7b,U+9a97,U+9aa8,U+9b3c,U+9c81,U+9ed8; +} + +/* noto-serif-sc-[113]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-113-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+26,U+3c,U+d7,U+4e4e,U+4e61,U+4e71,U+4ebf,U+4f26,U+5012,U+51ac,U+51b0,U+51b2,U+51b7,U+5218,U+521a,U+5220,U+5237,U+523b,U+526f,U+5385,U+53bf,U+53e5,U+53eb,U+53f3,U+53f6,U+5409,U+5438,U+54c8,U+54e5,U+552f,U+5584,U+5706,U+5723,U+5750,U+575a,U+5987-5988,U+59b9,U+59d0,U+59d4,U+5b88,U+5b9c,U+5bdf,U+5bfb,U+5c01,U+5c04,U+5c3e,U+5c4b,U+5c4f,U+5c9b,U+5cf0,U+5ddd,U+5de6,U+5de8,U+5e01,U+5e78,U+5e7b,U+5e9c,U+5ead,U+5ef6,U+5f39,U+5fd8,U+6000,U+6025,U+604b,U+6076,U+613f,U+6258,U+6263,U+6267,U+6298,U+62a2,U+62e5,U+62ec,U+6311,U+6377,U+6388-6389,U+63a2,U+63d2,U+641e,U+642d,U+654f,U+6551,U+6597,U+65cf,U+65d7,U+65e7,U+6682,U+66f2,U+671d,U+672b,U+6740,U+6751,U+6768,U+6811,U+6863,U+6982,U+6bd2,U+6cf0,U+6d0b,U+6d17,U+6d59,U+6dd8,U+6dfb,U+6e7e,U+6f6e,U+6fb3,U+706f,U+719f,U+72af,U+72d0,U+72d7,U+732b,U+732e,U+7389,U+73e0,U+7530,U+7687,U+76d6,U+76db,U+7840,U+786c,U+79cb,U+79d2,U+7a0e,U+7a33,U+7a3f,U+7a97,U+7ade-7adf,U+7b26,U+7e41,U+7ec3,U+7f3a,U+8089,U+80dc,U+811a,U+8131,U+8138,U+821e,U+8349,U+83dc,U+8457,U+867d,U+86cb,U+8a89,U+8ba8,U+8bad,U+8bef,U+8bfe,U+8c6a,U+8d1d,U+8d4f,U+8d62,U+8dd1,U+8df3,U+8f6e,U+8ff9,U+900f,U+9014,U+9057,U+9192,U+91ce,U+9488,U+94a2,U+9547,U+955c,U+95f2,U+9644,U+964d,U+96c4-96c5,U+96e8,U+96f6-96f7,U+9732,U+9759,U+9760,U+987a,U+989c,U+9910,U+996d-996e,U+9b54,U+9e21,U+9ebb,U+9f50; +} + +/* noto-serif-sc-[114]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-114-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+7e,U+2026,U+4e03,U+4e25,U+4e30,U+4e34,U+4e45,U+4e5d,U+4e89,U+4eae,U+4ed8,U+4f11,U+4f19,U+4f24,U+4f34,U+4f59,U+4f73,U+4f9d,U+4fb5,U+5047,U+505c,U+5170,U+519c,U+51cf,U+5267,U+5356,U+5374,U+5382,U+538b,U+53e6,U+5426,U+542b,U+542f,U+5462,U+5473,U+554a,U+5566,U+5708,U+571f,U+5757,U+57df,U+57f9,U+5802,U+590f,U+591c,U+591f,U+592b,U+5965,U+5979,U+5a01,U+5a5a,U+5b63,U+5b69,U+5b81,U+5ba1,U+5ba3,U+5c3c,U+5c42,U+5c81,U+5de7,U+5dee,U+5e0c,U+5e10,U+5e55,U+5e86,U+5e8f,U+5ea7,U+5f02,U+5f52,U+5f81,U+5ff5,U+60ca,U+60e0,U+6279,U+62c5,U+62ff,U+63cf,U+6444,U+64cd,U+653b,U+65bd,U+65e9,U+665a,U+66b4,U+66fe,U+6728,U+6742,U+677e,U+67b6,U+680f,U+68a6,U+68c0,U+699c,U+6b4c,U+6b66,U+6b7b,U+6bcd,U+6bdb,U+6c38,U+6c47,U+6c49,U+6cb3,U+6cb9,U+6ce2,U+6d32,U+6d3e,U+6d4f,U+6e56,U+6fc0,U+7075,U+7206,U+725b,U+72c2,U+73ed,U+7565,U+7591,U+7597,U+75c5,U+76ae,U+76d1,U+76df,U+7834,U+7968,U+7981,U+79c0,U+7a7f,U+7a81,U+7ae5,U+7b14,U+7c89,U+7d27,U+7eaf,U+7eb3,U+7eb8,U+7ec7,U+7ee7,U+7eff,U+7f57,U+7ffb,U+805a,U+80a1,U+822c,U+82cf,U+82e5,U+8363,U+836f,U+84dd,U+878d,U+8840,U+8857,U+8863,U+8865,U+8b66,U+8bb2,U+8bda,U+8c01,U+8c08,U+8c46,U+8d1f,U+8d35,U+8d5b,U+8d5e,U+8da3,U+8ddf,U+8f93,U+8fdd,U+8ff0,U+8ff7,U+8ffd,U+9000,U+9047,U+9152,U+949f,U+94c1,U+94f6,U+9646,U+9648,U+9669,U+969c,U+96ea,U+97e9,U+987b,U+987e,U+989d,U+9970,U+9986,U+9c7c,U+9c9c; +} + +/* noto-serif-sc-[115]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-115-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+25,U+4e14,U+4e1d,U+4e3d,U+4e49,U+4e60,U+4e9a,U+4eb2,U+4ec5,U+4efd,U+4f3c,U+4f4f,U+4f8b,U+4fbf,U+5019,U+5145,U+514b,U+516b,U+516d,U+5174,U+5178,U+517b,U+5199,U+519b,U+51b3,U+51b5,U+5207,U+5212,U+5219,U+521d,U+52bf,U+533b,U+5343,U+5347,U+534a,U+536b,U+5370,U+53e4,U+53f2,U+5403,U+542c,U+547d,U+54a8,U+54cd,U+54ea,U+552e,U+56f4,U+5747,U+575b,U+5883,U+589e,U+5931,U+5947,U+5956-5957,U+5a92,U+5b83,U+5ba4,U+5bb3,U+5bcc,U+5c14,U+5c1a,U+5c3d,U+5c40,U+5c45,U+5c5e,U+5df4,U+5e72,U+5e95,U+5f80,U+5f85,U+5fb7,U+5fd7,U+601d,U+626b,U+627f,U+62c9,U+62cd,U+6309,U+63a7,U+6545,U+65ad,U+65af,U+65c5,U+666e,U+667a,U+670b,U+671b,U+674e,U+677f,U+6781,U+6790,U+6797,U+6821,U+6838-6839,U+697c,U+6b27,U+6b62,U+6bb5,U+6c7d,U+6c99,U+6d4b,U+6d4e,U+6d6a,U+6e29,U+6e2f,U+6ee1,U+6f14,U+6f2b,U+72b6,U+72ec,U+7387,U+7533,U+753b,U+76ca,U+76d8,U+7701,U+773c,U+77ed,U+77f3,U+7814,U+793c,U+79bb,U+79c1,U+79d8,U+79ef,U+79fb,U+7a76,U+7b11,U+7b54,U+7b56,U+7b97,U+7bc7,U+7c73,U+7d20,U+7eaa,U+7ec8,U+7edd,U+7eed,U+7efc,U+7fa4,U+804c,U+8058,U+80cc,U+8111,U+817e,U+826f,U+8303,U+843d,U+89c9,U+89d2,U+8ba2,U+8bbf,U+8bc9,U+8bcd,U+8be6,U+8c22,U+8c61,U+8d22,U+8d26-8d27,U+8d8a,U+8f6f,U+8f7b,U+8f83,U+8f91,U+8fb9,U+8fd4,U+8fdc,U+9002,U+94b1,U+9519,U+95ed,U+961f,U+9632-9633,U+963f,U+968f-9690,U+96be,U+9876,U+9884,U+98de,U+9988,U+9999,U+9ec4,U+ff1b; +} + +/* noto-serif-sc-[116]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-116-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+2b,U+40,U+3000,U+300a-300b,U+4e16,U+4e66,U+4e70,U+4e91-4e92,U+4e94,U+4e9b,U+4ec0,U+4eca,U+4f01,U+4f17-4f18,U+4f46,U+4f4e,U+4f9b,U+4fee,U+503c,U+5065,U+50cf,U+513f,U+5148,U+518d,U+51c6,U+51e0,U+5217,U+529e-529f,U+5341,U+534f,U+5361,U+5386,U+53c2,U+53c8,U+53cc,U+53d7-53d8,U+53ea,U+5404,U+5411,U+5417,U+5427,U+5468,U+559c,U+5668,U+56e0,U+56e2,U+56ed,U+5740,U+57fa,U+58eb,U+5904,U+592a,U+59cb,U+5a31,U+5b58,U+5b9d,U+5bc6,U+5c71,U+5dde,U+5df1,U+5e08,U+5e26,U+5e2e,U+5e93,U+5e97,U+5eb7,U+5f15,U+5f20,U+5f3a,U+5f62,U+5f69,U+5f88,U+5f8b,U+5fc5,U+600e,U+620f,U+6218,U+623f,U+627e,U+628a,U+62a4,U+62db,U+62e9,U+6307,U+6362,U+636e,U+64ad,U+6539,U+653f,U+6548,U+6574,U+6613,U+6625,U+663e,U+666f,U+672a,U+6750,U+6784,U+6a21,U+6b3e,U+6b65,U+6bcf,U+6c11,U+6c5f,U+6df1,U+706b,U+7167,U+724c,U+738b,U+73a9,U+73af,U+7403,U+7537,U+754c,U+7559,U+767d,U+7740,U+786e,U+795e,U+798f,U+79f0,U+7aef,U+7b7e,U+7bb1,U+7ea2,U+7ea6,U+7ec4,U+7ec6,U+7ecd,U+7edc,U+7ef4,U+8003,U+80b2,U+81f3-81f4,U+822a,U+827a,U+82f1,U+83b7,U+8425,U+89c2,U+89c8,U+8ba9,U+8bb8,U+8bc6,U+8bd5,U+8be2,U+8be5,U+8bed,U+8c03,U+8d23,U+8d2d,U+8d34,U+8d70,U+8db3,U+8fbe,U+8fce,U+8fd1,U+8fde,U+9001,U+901f-9020,U+90a3,U+914d,U+91c7,U+94fe,U+9500,U+952e,U+9605,U+9645,U+9662,U+9664,U+9700,U+9752,U+975e,U+97f3,U+9879,U+9886,U+98df,U+9a6c,U+9a8c,U+9ed1,U+9f99; +} + +/* noto-serif-sc-[117]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-117-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+4e,U+201c-201d,U+3010-3011,U+4e07,U+4e1c,U+4e24,U+4e3e,U+4e48,U+4e50,U+4e5f,U+4e8b-4e8c,U+4ea4,U+4eab-4eac,U+4ecb,U+4ece,U+4ed6,U+4ee3,U+4ef6-4ef7,U+4efb,U+4f20,U+4f55,U+4f7f,U+4fdd,U+505a,U+5143,U+5149,U+514d,U+5171,U+5177,U+518c,U+51fb,U+521b,U+5229,U+522b,U+52a9,U+5305,U+5317,U+534e,U+5355,U+5357,U+535a,U+5373,U+539f,U+53bb,U+53ca,U+53cd,U+53d6,U+53e3,U+53f0,U+5458,U+5546,U+56db,U+573a,U+578b,U+57ce,U+58f0,U+590d,U+5934,U+5973,U+5b57,U+5b8c,U+5b98,U+5bb9,U+5bfc,U+5c06,U+5c11,U+5c31,U+5c55,U+5df2,U+5e03,U+5e38,U+5e76,U+5e94,U+5efa,U+5f71,U+5f97,U+5feb,U+6001,U+603b,U+60f3,U+611f,U+6216,U+624d,U+6253,U+6295,U+6301,U+6392,U+641c,U+652f,U+653e,U+6559,U+6599,U+661f,U+671f,U+672f,U+6761,U+67e5,U+6807,U+6837,U+683c,U+6848,U+6b22,U+6b64,U+6bd4,U+6c14,U+6c34,U+6c42,U+6ca1,U+6d41,U+6d77,U+6d88,U+6e05,U+6e38,U+6e90,U+7136,U+7231,U+7531,U+767e,U+76ee,U+76f4,U+771f,U+7801,U+793a,U+79cd,U+7a0b,U+7a7a,U+7acb,U+7ae0,U+7b2c,U+7b80,U+7ba1,U+7cbe,U+7d22,U+7ea7,U+7ed3,U+7ed9,U+7edf,U+7f16,U+7f6e,U+8001,U+800c,U+8272,U+8282,U+82b1,U+8350,U+88ab,U+88c5,U+897f,U+89c1,U+89c4,U+89e3,U+8a00,U+8ba1,U+8ba4,U+8bae-8bb0,U+8bbe,U+8bc1,U+8bc4,U+8bfb,U+8d28,U+8d39,U+8d77,U+8d85,U+8def,U+8eab,U+8f66,U+8f6c,U+8f7d,U+8fd0,U+9009,U+90ae,U+90fd,U+91cc-91cd,U+91cf,U+95fb,U+9650,U+96c6,U+9891,U+98ce,U+ff1f; +} + +/* noto-serif-sc-[118]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-118-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+d,U+3e,U+5f,U+7c,U+a0,U+a9,U+4e09-4e0b,U+4e0d-4e0e,U+4e13,U+4e1a,U+4e2a,U+4e3a-4e3b,U+4e4b,U+4e86,U+4e8e,U+4ea7,U+4eba,U+4ee4-4ee5,U+4eec,U+4f1a,U+4f4d,U+4f53,U+4f5c,U+4f60,U+4fe1,U+5165,U+5168,U+516c,U+5173,U+5176,U+5185,U+51fa,U+5206,U+5230,U+5236,U+524d,U+529b,U+52a0-52a1,U+52a8,U+5316,U+533a,U+53cb,U+53d1,U+53ef,U+53f7-53f8,U+5408,U+540c-540e,U+544a,U+548c,U+54c1,U+56de,U+56fd-56fe,U+5728,U+5730,U+5907,U+5916,U+591a,U+5927,U+5929,U+597d,U+5982,U+5b50,U+5b66,U+5b89,U+5b9a,U+5b9e,U+5ba2,U+5bb6,U+5bf9,U+5c0f,U+5de5,U+5e02,U+5e73-5e74,U+5e7f,U+5ea6,U+5f00,U+5f0f,U+5f53,U+5f55,U+5fae,U+5fc3,U+6027,U+606f,U+60a8,U+60c5,U+610f,U+6210-6211,U+6237,U+6240,U+624b,U+6280,U+62a5,U+63a5,U+63a8,U+63d0,U+6536,U+6570,U+6587,U+65b9,U+65e0,U+65f6,U+660e,U+662d,U+662f,U+66f4,U+6700,U+670d,U+672c,U+673a,U+6743,U+6765,U+679c,U+682a,U+6b21,U+6b63,U+6cbb,U+6cd5,U+6ce8,U+6d3b,U+70ed,U+7247-7248,U+7269,U+7279,U+73b0,U+7406,U+751f,U+7528,U+7535,U+767b,U+76f8,U+770b,U+77e5,U+793e,U+79d1,U+7ad9,U+7b49,U+7c7b,U+7cfb,U+7ebf,U+7ecf,U+7f8e,U+8005,U+8054,U+80fd,U+81ea,U+85cf,U+884c,U+8868,U+8981,U+89c6,U+8bba,U+8bdd,U+8bf4,U+8bf7,U+8d44,U+8fc7,U+8fd8-8fd9,U+8fdb,U+901a,U+9053,U+90e8,U+91d1,U+957f,U+95e8,U+95ee,U+95f4,U+9762,U+9875,U+9898,U+9996,U+9ad8,U+ff01,U+ff08-ff09; +} + +/* noto-serif-sc-[119]-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-119-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+20-22,U+27-2a,U+2c-3b,U+3f,U+41-4d,U+4f-5d,U+61-7b,U+7d,U+ab,U+ae,U+b2,U+b7,U+bb,U+df-e5,U+e7-ea,U+ec-ed,U+f1-f4,U+f6,U+f9-fa,U+fc,U+101,U+103,U+113,U+12b,U+148,U+14d,U+16b,U+1ce,U+1d0,U+300-301,U+1ebf,U+1ec7,U+2013-2014,U+2022,U+2027,U+2039-203a,U+2122,U+3001-3002,U+3042,U+3044,U+3046,U+3048,U+304a-3055,U+3057,U+3059-305b,U+305d,U+305f-3061,U+3063-306b,U+306d-3073,U+3075-3076,U+3078-3079,U+307b,U+307e-307f,U+3081-308d,U+308f,U+3092-3093,U+30a1-30a4,U+30a6-30bb,U+30bd,U+30bf-30c1,U+30c3-30c4,U+30c6-30cb,U+30cd-30d7,U+30d9-30e1,U+30e3-30e7,U+30e9-30ed,U+30ef,U+30f3,U+30fb-30fc,U+3127,U+4e00,U+4e2d,U+65b0,U+65e5,U+6708-6709,U+70b9,U+7684,U+7f51,U+ff0c,U+ff0e,U+ff1a; +} + +/* noto-serif-sc-cyrillic-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-cyrillic-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116; +} + +/* noto-serif-sc-vietnamese-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-vietnamese-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB; +} + +/* noto-serif-sc-latin-ext-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-latin-ext-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF; +} + +/* noto-serif-sc-latin-wght-normal */ +@font-face { + font-family: 'Noto Serif SC Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 900; + src: url(./files/noto-serif-sc-latin-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD; +} \ No newline at end of file diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_AMS-Regular.ttf b/internal/embedded/static/vendor/katex/fonts/KaTeX_AMS-Regular.ttf new file mode 100644 index 00000000..c6f9a5e7 Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_AMS-Regular.ttf differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_AMS-Regular.woff b/internal/embedded/static/vendor/katex/fonts/KaTeX_AMS-Regular.woff new file mode 100644 index 00000000..b804d7b3 Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_AMS-Regular.woff differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_AMS-Regular.woff2 b/internal/embedded/static/vendor/katex/fonts/KaTeX_AMS-Regular.woff2 new file mode 100644 index 00000000..0acaaff0 Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_AMS-Regular.woff2 differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Caligraphic-Bold.ttf b/internal/embedded/static/vendor/katex/fonts/KaTeX_Caligraphic-Bold.ttf new file mode 100644 index 00000000..9ff4a5e0 Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Caligraphic-Bold.ttf differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Caligraphic-Bold.woff b/internal/embedded/static/vendor/katex/fonts/KaTeX_Caligraphic-Bold.woff new file mode 100644 index 00000000..9759710d Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Caligraphic-Bold.woff differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Caligraphic-Bold.woff2 b/internal/embedded/static/vendor/katex/fonts/KaTeX_Caligraphic-Bold.woff2 new file mode 100644 index 00000000..f390922e Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Caligraphic-Bold.woff2 differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Caligraphic-Regular.ttf b/internal/embedded/static/vendor/katex/fonts/KaTeX_Caligraphic-Regular.ttf new file mode 100644 index 00000000..f522294f Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Caligraphic-Regular.ttf differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Caligraphic-Regular.woff b/internal/embedded/static/vendor/katex/fonts/KaTeX_Caligraphic-Regular.woff new file mode 100644 index 00000000..9bdd534f Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Caligraphic-Regular.woff differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Caligraphic-Regular.woff2 b/internal/embedded/static/vendor/katex/fonts/KaTeX_Caligraphic-Regular.woff2 new file mode 100644 index 00000000..75344a1f Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Caligraphic-Regular.woff2 differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Fraktur-Bold.ttf b/internal/embedded/static/vendor/katex/fonts/KaTeX_Fraktur-Bold.ttf new file mode 100644 index 00000000..4e98259c Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Fraktur-Bold.ttf differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Fraktur-Bold.woff b/internal/embedded/static/vendor/katex/fonts/KaTeX_Fraktur-Bold.woff new file mode 100644 index 00000000..e7730f66 Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Fraktur-Bold.woff differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Fraktur-Bold.woff2 b/internal/embedded/static/vendor/katex/fonts/KaTeX_Fraktur-Bold.woff2 new file mode 100644 index 00000000..395f28be Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Fraktur-Bold.woff2 differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Fraktur-Regular.ttf b/internal/embedded/static/vendor/katex/fonts/KaTeX_Fraktur-Regular.ttf new file mode 100644 index 00000000..b8461b27 Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Fraktur-Regular.ttf differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Fraktur-Regular.woff b/internal/embedded/static/vendor/katex/fonts/KaTeX_Fraktur-Regular.woff new file mode 100644 index 00000000..acab069f Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Fraktur-Regular.woff differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Fraktur-Regular.woff2 b/internal/embedded/static/vendor/katex/fonts/KaTeX_Fraktur-Regular.woff2 new file mode 100644 index 00000000..735f6948 Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Fraktur-Regular.woff2 differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Main-Bold.ttf b/internal/embedded/static/vendor/katex/fonts/KaTeX_Main-Bold.ttf new file mode 100644 index 00000000..4060e627 Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Main-Bold.ttf differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Main-Bold.woff b/internal/embedded/static/vendor/katex/fonts/KaTeX_Main-Bold.woff new file mode 100644 index 00000000..f38136ac Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Main-Bold.woff differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Main-Bold.woff2 b/internal/embedded/static/vendor/katex/fonts/KaTeX_Main-Bold.woff2 new file mode 100644 index 00000000..ab2ad21d Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Main-Bold.woff2 differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Main-BoldItalic.ttf b/internal/embedded/static/vendor/katex/fonts/KaTeX_Main-BoldItalic.ttf new file mode 100644 index 00000000..dc007977 Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Main-BoldItalic.ttf differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Main-BoldItalic.woff b/internal/embedded/static/vendor/katex/fonts/KaTeX_Main-BoldItalic.woff new file mode 100644 index 00000000..67807b0b Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Main-BoldItalic.woff differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Main-BoldItalic.woff2 b/internal/embedded/static/vendor/katex/fonts/KaTeX_Main-BoldItalic.woff2 new file mode 100644 index 00000000..5931794d Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Main-BoldItalic.woff2 differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Main-Italic.ttf b/internal/embedded/static/vendor/katex/fonts/KaTeX_Main-Italic.ttf new file mode 100644 index 00000000..0e9b0f35 Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Main-Italic.ttf differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Main-Italic.woff b/internal/embedded/static/vendor/katex/fonts/KaTeX_Main-Italic.woff new file mode 100644 index 00000000..6f43b594 Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Main-Italic.woff differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Main-Italic.woff2 b/internal/embedded/static/vendor/katex/fonts/KaTeX_Main-Italic.woff2 new file mode 100644 index 00000000..b50920e1 Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Main-Italic.woff2 differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Main-Regular.ttf b/internal/embedded/static/vendor/katex/fonts/KaTeX_Main-Regular.ttf new file mode 100644 index 00000000..dd45e1ed Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Main-Regular.ttf differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Main-Regular.woff b/internal/embedded/static/vendor/katex/fonts/KaTeX_Main-Regular.woff new file mode 100644 index 00000000..21f58129 Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Main-Regular.woff differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Main-Regular.woff2 b/internal/embedded/static/vendor/katex/fonts/KaTeX_Main-Regular.woff2 new file mode 100644 index 00000000..eb24a7ba Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Main-Regular.woff2 differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Math-BoldItalic.ttf b/internal/embedded/static/vendor/katex/fonts/KaTeX_Math-BoldItalic.ttf new file mode 100644 index 00000000..728ce7a1 Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Math-BoldItalic.ttf differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Math-BoldItalic.woff b/internal/embedded/static/vendor/katex/fonts/KaTeX_Math-BoldItalic.woff new file mode 100644 index 00000000..0ae390d7 Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Math-BoldItalic.woff differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Math-BoldItalic.woff2 b/internal/embedded/static/vendor/katex/fonts/KaTeX_Math-BoldItalic.woff2 new file mode 100644 index 00000000..29657023 Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Math-BoldItalic.woff2 differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Math-Italic.ttf b/internal/embedded/static/vendor/katex/fonts/KaTeX_Math-Italic.ttf new file mode 100644 index 00000000..70d559b4 Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Math-Italic.ttf differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Math-Italic.woff b/internal/embedded/static/vendor/katex/fonts/KaTeX_Math-Italic.woff new file mode 100644 index 00000000..eb5159d4 Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Math-Italic.woff differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Math-Italic.woff2 b/internal/embedded/static/vendor/katex/fonts/KaTeX_Math-Italic.woff2 new file mode 100644 index 00000000..215c143f Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Math-Italic.woff2 differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_SansSerif-Bold.ttf b/internal/embedded/static/vendor/katex/fonts/KaTeX_SansSerif-Bold.ttf new file mode 100644 index 00000000..2f65a8a3 Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_SansSerif-Bold.ttf differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_SansSerif-Bold.woff b/internal/embedded/static/vendor/katex/fonts/KaTeX_SansSerif-Bold.woff new file mode 100644 index 00000000..8d47c02d Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_SansSerif-Bold.woff differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_SansSerif-Bold.woff2 b/internal/embedded/static/vendor/katex/fonts/KaTeX_SansSerif-Bold.woff2 new file mode 100644 index 00000000..cfaa3bda Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_SansSerif-Bold.woff2 differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_SansSerif-Italic.ttf b/internal/embedded/static/vendor/katex/fonts/KaTeX_SansSerif-Italic.ttf new file mode 100644 index 00000000..d5850df9 Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_SansSerif-Italic.ttf differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_SansSerif-Italic.woff b/internal/embedded/static/vendor/katex/fonts/KaTeX_SansSerif-Italic.woff new file mode 100644 index 00000000..7e02df96 Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_SansSerif-Italic.woff differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_SansSerif-Italic.woff2 b/internal/embedded/static/vendor/katex/fonts/KaTeX_SansSerif-Italic.woff2 new file mode 100644 index 00000000..349c06dc Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_SansSerif-Italic.woff2 differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_SansSerif-Regular.ttf b/internal/embedded/static/vendor/katex/fonts/KaTeX_SansSerif-Regular.ttf new file mode 100644 index 00000000..537279f6 Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_SansSerif-Regular.ttf differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_SansSerif-Regular.woff b/internal/embedded/static/vendor/katex/fonts/KaTeX_SansSerif-Regular.woff new file mode 100644 index 00000000..31b84829 Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_SansSerif-Regular.woff differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_SansSerif-Regular.woff2 b/internal/embedded/static/vendor/katex/fonts/KaTeX_SansSerif-Regular.woff2 new file mode 100644 index 00000000..a90eea85 Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_SansSerif-Regular.woff2 differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Script-Regular.ttf b/internal/embedded/static/vendor/katex/fonts/KaTeX_Script-Regular.ttf new file mode 100644 index 00000000..fd679bf3 Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Script-Regular.ttf differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Script-Regular.woff b/internal/embedded/static/vendor/katex/fonts/KaTeX_Script-Regular.woff new file mode 100644 index 00000000..0e7da821 Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Script-Regular.woff differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Script-Regular.woff2 b/internal/embedded/static/vendor/katex/fonts/KaTeX_Script-Regular.woff2 new file mode 100644 index 00000000..b3048fc1 Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Script-Regular.woff2 differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Size1-Regular.ttf b/internal/embedded/static/vendor/katex/fonts/KaTeX_Size1-Regular.ttf new file mode 100644 index 00000000..871fd7d1 Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Size1-Regular.ttf differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Size1-Regular.woff b/internal/embedded/static/vendor/katex/fonts/KaTeX_Size1-Regular.woff new file mode 100644 index 00000000..7f292d91 Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Size1-Regular.woff differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Size1-Regular.woff2 b/internal/embedded/static/vendor/katex/fonts/KaTeX_Size1-Regular.woff2 new file mode 100644 index 00000000..c5a8462f Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Size1-Regular.woff2 differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Size2-Regular.ttf b/internal/embedded/static/vendor/katex/fonts/KaTeX_Size2-Regular.ttf new file mode 100644 index 00000000..7a212caf Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Size2-Regular.ttf differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Size2-Regular.woff b/internal/embedded/static/vendor/katex/fonts/KaTeX_Size2-Regular.woff new file mode 100644 index 00000000..d241d9be Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Size2-Regular.woff differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Size2-Regular.woff2 b/internal/embedded/static/vendor/katex/fonts/KaTeX_Size2-Regular.woff2 new file mode 100644 index 00000000..e1bccfe2 Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Size2-Regular.woff2 differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Size3-Regular.ttf b/internal/embedded/static/vendor/katex/fonts/KaTeX_Size3-Regular.ttf new file mode 100644 index 00000000..00bff349 Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Size3-Regular.ttf differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Size3-Regular.woff b/internal/embedded/static/vendor/katex/fonts/KaTeX_Size3-Regular.woff new file mode 100644 index 00000000..e6e9b658 Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Size3-Regular.woff differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Size3-Regular.woff2 b/internal/embedded/static/vendor/katex/fonts/KaTeX_Size3-Regular.woff2 new file mode 100644 index 00000000..249a2866 Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Size3-Regular.woff2 differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Size4-Regular.ttf b/internal/embedded/static/vendor/katex/fonts/KaTeX_Size4-Regular.ttf new file mode 100644 index 00000000..74f08921 Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Size4-Regular.ttf differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Size4-Regular.woff b/internal/embedded/static/vendor/katex/fonts/KaTeX_Size4-Regular.woff new file mode 100644 index 00000000..e1ec5457 Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Size4-Regular.woff differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Size4-Regular.woff2 b/internal/embedded/static/vendor/katex/fonts/KaTeX_Size4-Regular.woff2 new file mode 100644 index 00000000..680c1308 Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Size4-Regular.woff2 differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Typewriter-Regular.ttf b/internal/embedded/static/vendor/katex/fonts/KaTeX_Typewriter-Regular.ttf new file mode 100644 index 00000000..c83252c5 Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Typewriter-Regular.ttf differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Typewriter-Regular.woff b/internal/embedded/static/vendor/katex/fonts/KaTeX_Typewriter-Regular.woff new file mode 100644 index 00000000..2432419f Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Typewriter-Regular.woff differ diff --git a/internal/embedded/static/vendor/katex/fonts/KaTeX_Typewriter-Regular.woff2 b/internal/embedded/static/vendor/katex/fonts/KaTeX_Typewriter-Regular.woff2 new file mode 100644 index 00000000..771f1af7 Binary files /dev/null and b/internal/embedded/static/vendor/katex/fonts/KaTeX_Typewriter-Regular.woff2 differ diff --git a/internal/embedded/static/vendor/katex/katex.js b/internal/embedded/static/vendor/katex/katex.js new file mode 100644 index 00000000..86a98536 --- /dev/null +++ b/internal/embedded/static/vendor/katex/katex.js @@ -0,0 +1,17826 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else if(typeof exports === 'object') + exports["katex"] = factory(); + else + root["katex"] = factory(); +})((typeof self !== 'undefined' ? self : this), function() { +return /******/ (function() { // webpackBootstrap +/******/ "use strict"; +/******/ // The require scope +/******/ var __webpack_require__ = {}; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ !function() { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = function(exports, definition) { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ }(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ !function() { +/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } +/******/ }(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "default": function() { return /* binding */ katex_webpack; } +}); + +;// ./src/ParseError.ts +/** + * This is the ParseError class, which is the main error thrown by KaTeX + * functions when something has gone wrong. This is used to distinguish internal + * errors from errors in the expression that the user provided. + * + * If possible, a caller should provide a Token or ParseNode with information + * about where in the source string the problem occurred. + */ +class ParseError extends Error { + // The underlying error message without any context added. + + constructor(message, + // The error message + token) { + let error = "KaTeX parse error: " + message; + let start; + let end; + const loc = token && token.loc; + if (loc && loc.start <= loc.end) { + // If we have the input and a position, make the error a bit fancier + + // Get the input + const input = loc.lexer.input; + + // Prepend some information + start = loc.start; + end = loc.end; + if (start === input.length) { + error += " at end of input: "; + } else { + error += " at position " + (start + 1) + ": "; + } + + // Underline token in question using combining underscores + const underlined = input.slice(start, end).replace(/[^]/g, "$&\u0332"); + + // Extract some context from the input and add it to the error + let left; + if (start > 15) { + left = "…" + input.slice(start - 15, start); + } else { + left = input.slice(0, start); + } + let right; + if (end + 15 < input.length) { + right = input.slice(end, end + 15) + "…"; + } else { + right = input.slice(end); + } + error += left + underlined + right; + } + super(error); + this.name = "ParseError"; + this.position = void 0; + // Error start position based on passed-in Token or ParseNode. + this.length = void 0; + // Length of affected text based on passed-in Token or ParseNode. + this.rawMessage = void 0; + Object.setPrototypeOf(this, ParseError.prototype); + this.position = start; + if (start != null && end != null) { + this.length = end - start; + } + this.rawMessage = message; + } +} +/* harmony default export */ var src_ParseError = (ParseError); +;// ./src/utils.ts +/** + * This file contains a list of utility functions which are useful in other + * files. + */ + +// hyphenate and escape adapted from Facebook's React under Apache 2 license +const uppercase = /([A-Z])/g; +const hyphenate = str => str.replace(uppercase, "-$1").toLowerCase(); +const ESCAPE_LOOKUP = { + "&": "&", + ">": ">", + "<": "<", + "\"": """, + "'": "'" +}; +const ESCAPE_REGEX = /[&><"']/g; + +/** + * Escapes text to prevent scripting attacks. + */ +const utils_escape = text => String(text).replace(ESCAPE_REGEX, match => ESCAPE_LOOKUP[match]); + +/** + * Sometimes we want to pull out the innermost element of a group. In most + * cases, this will just be the group itself, but when ordgroups and colors have + * a single element, we want to pull that out. + */ +const getBaseElem = group => { + if (group.type === "ordgroup") { + if (group.body.length === 1) { + return getBaseElem(group.body[0]); + } else { + return group; + } + } else if (group.type === "color") { + if (group.body.length === 1) { + return getBaseElem(group.body[0]); + } else { + return group; + } + } else if (group.type === "font") { + return getBaseElem(group.body); + } else { + return group; + } +}; +const characterNodesTypes = new Set(["mathord", "textord", "atom"]); + +/** + * TeXbook algorithms often reference "character boxes", which are simply groups + * with a single character in them. To decide if something is a character box, + * we find its innermost group, and see if it is a single character. + */ +const isCharacterBox = group => characterNodesTypes.has(getBaseElem(group).type); + +/** + * Return the protocol of a URL, or "_relative" if the URL does not specify a + * protocol (and thus is relative), or `null` if URL has invalid protocol + * (so should be outright rejected). + */ +const protocolFromUrl = url => { + // Check for possible leading protocol. + // https://url.spec.whatwg.org/#url-parsing strips leading whitespace + // (U+20) or C0 control (U+00-U+1F) characters. + const protocol = /^[\x00-\x20]*([^\\/#?]*?)(:|�*58|�*3a|&colon)/i.exec(url); + if (!protocol) { + return "_relative"; + } + // Reject weird colons + if (protocol[2] !== ":") { + return null; + } + // Reject invalid characters in scheme according to + // https://datatracker.ietf.org/doc/html/rfc3986#section-3.1 + if (!/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(protocol[1])) { + return null; + } + // Lowercase the protocol + return protocol[1].toLowerCase(); +}; +;// ./src/Settings.ts +/* eslint no-console:0 */ +/** + * This is a module for storing settings passed into KaTeX. It correctly handles + * default settings. + */ + + + +/** + * Union of all values that appear as schema defaults, cliDefaults, or + * cliProcessor return values. StrictFunction / TrustFunction are + * option-value types, not default/schema values, so they are excluded. + */ + +// TODO: automatically generate documentation +// TODO: check all properties on Settings exist +// TODO: check the type of a property on Settings matches +const SETTINGS_SCHEMA = { + displayMode: { + type: "boolean", + description: "Render math in display mode, which puts the math in " + "display style (so \\int and \\sum are large, for example), and " + "centers the math on the page on its own line.", + cli: "-d, --display-mode" + }, + output: { + type: { + enum: ["htmlAndMathml", "html", "mathml"] + }, + description: "Determines the markup language of the output.", + cli: "-F, --format " + }, + leqno: { + type: "boolean", + description: "Render display math in leqno style (left-justified tags)." + }, + fleqn: { + type: "boolean", + description: "Render display math flush left." + }, + throwOnError: { + type: "boolean", + default: true, + cli: "-t, --no-throw-on-error", + cliDescription: "Render errors (in the color given by --error-color) ins" + "tead of throwing a ParseError exception when encountering an error." + }, + errorColor: { + type: "string", + default: "#cc0000", + cli: "-c, --error-color ", + cliDescription: "A color string given in the format 'rgb' or 'rrggbb' " + "(no #). This option determines the color of errors rendered by the " + "-t option.", + cliProcessor: color => "#" + color + }, + macros: { + type: "object", + cli: "-m, --macro ", + cliDescription: "Define custom macro of the form '\\foo:expansion' (use " + "multiple -m arguments for multiple macros).", + cliDefault: [], + cliProcessor: (def, defs) => { + defs.push(def); + return defs; + } + }, + minRuleThickness: { + type: "number", + description: "Specifies a minimum thickness, in ems, for fraction lines," + " `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, " + "`\\hdashline`, `\\underline`, `\\overline`, and the borders of " + "`\\fbox`, `\\boxed`, and `\\fcolorbox`.", + processor: t => Math.max(0, t), + cli: "--min-rule-thickness ", + cliProcessor: parseFloat + }, + colorIsTextColor: { + type: "boolean", + description: "Makes \\color behave like LaTeX's 2-argument \\textcolor, " + "instead of LaTeX's one-argument \\color mode change.", + cli: "-b, --color-is-text-color" + }, + strict: { + type: [{ + enum: ["warn", "ignore", "error"] + }, "boolean", "function"], + description: "Turn on strict / LaTeX faithfulness mode, which throws an " + "error if the input uses features that are not supported by LaTeX.", + cli: "-S, --strict", + cliDefault: false + }, + trust: { + type: ["boolean", "function"], + description: "Trust the input, enabling all HTML features such as \\url.", + cli: "-T, --trust" + }, + maxSize: { + type: "number", + default: Infinity, + description: "If non-zero, all user-specified sizes, e.g. in " + "\\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, " + "elements and spaces can be arbitrarily large", + processor: s => Math.max(0, s), + cli: "-s, --max-size ", + cliProcessor: parseInt + }, + maxExpand: { + type: "number", + default: 1000, + description: "Limit the number of macro expansions to the specified " + "number, to prevent e.g. infinite macro loops. If set to Infinity, " + "the macro expander will try to fully expand as in LaTeX.", + processor: n => Math.max(0, n), + cli: "-e, --max-expand ", + cliProcessor: n => n === "Infinity" ? Infinity : parseInt(n) + }, + globalGroup: { + type: "boolean", + cli: false + } +}; +function getImplicitDefault(type) { + if (typeof type !== 'string') { + return type.enum[0]; + } + switch (type) { + case 'boolean': + return false; + case 'string': + return ''; + case 'number': + return 0; + case 'object': + return {}; + default: + throw new Error("Unexpected schema type; settings must declare an explicit default."); + } +} +function getDefaultValue(schema) { + if (Object.prototype.hasOwnProperty.call(schema, "default") && schema.default !== undefined) { + return schema.default; + } + const type = Array.isArray(schema.type) ? schema.type[0] : schema.type; + return getImplicitDefault(type); +} +function applySetting(target, prop, options, schema) { + const optionValue = Object.prototype.hasOwnProperty.call(options, prop) ? options[prop] : undefined; + const processor = Object.prototype.hasOwnProperty.call(schema, "processor") ? schema.processor : undefined; + target[prop] = optionValue !== undefined ? processor ? processor(optionValue) : optionValue : getDefaultValue(schema); +} + +/** + * The main Settings object + * + * The current options stored are: + * - displayMode: Whether the expression should be typeset as inline math + * (false, the default), meaning that the math starts in + * \textstyle and is placed in an inline-block); or as display + * math (true), meaning that the math starts in \displaystyle + * and is placed in a block with vertical margin. + */ +class Settings { + constructor(options) { + if (options === void 0) { + options = {}; + } + this.displayMode = void 0; + this.output = void 0; + this.leqno = void 0; + this.fleqn = void 0; + this.throwOnError = void 0; + this.errorColor = void 0; + this.macros = void 0; + this.minRuleThickness = void 0; + this.colorIsTextColor = void 0; + this.strict = void 0; + this.trust = void 0; + this.maxSize = void 0; + this.maxExpand = void 0; + this.globalGroup = void 0; + // allow null options + options = options || {}; + for (const prop of Object.keys(SETTINGS_SCHEMA)) { + const schema = SETTINGS_SCHEMA[prop]; + if (schema) { + // TODO: validate options + applySetting(this, prop, options, schema); + } + } + } + + /** + * Check whether to test potentially dangerous input, and return + * `true` (trusted) or `false` (untrusted). The sole argument `context` + * should be an object with `command` field specifying the relevant LaTeX + * command (as a string starting with `\`), and any other arguments, etc. + * If `context` has a `url` field, a `protocol` field will automatically + * get added by this function (changing the specified object). + */ + isTrusted(context) { + if ("url" in context && context.url && !context.protocol) { + const protocol = protocolFromUrl(context.url); + if (protocol == null) { + return false; + } + context.protocol = protocol; + } + const trust = typeof this.trust === "function" ? this.trust(context) : this.trust; + return Boolean(trust); + } +} +;// ./src/Style.ts +/** + * This file contains information and classes for the various kinds of styles + * used in TeX. It provides a generic `Style` class, which holds information + * about a specific style. It then provides instances of all the different kinds + * of styles possible, and provides functions to move between them and get + * information about them. + */ + +/** + * The main style class. Contains a unique id for the style, a size (which is + * the same for cramped and uncramped version of a style), and a cramped flag. + */ +class Style { + constructor(id, size, cramped) { + this.id = void 0; + this.size = void 0; + this.cramped = void 0; + this.id = id; + this.size = size; + this.cramped = cramped; + } + + /** + * Get the style of a superscript given a base in the current style. + */ + sup() { + return styles[sup[this.id]]; + } + + /** + * Get the style of a subscript given a base in the current style. + */ + sub() { + return styles[sub[this.id]]; + } + + /** + * Get the style of a fraction numerator given the fraction in the current + * style. + */ + fracNum() { + return styles[fracNum[this.id]]; + } + + /** + * Get the style of a fraction denominator given the fraction in the current + * style. + */ + fracDen() { + return styles[fracDen[this.id]]; + } + + /** + * Get the cramped version of a style (in particular, cramping a cramped style + * doesn't change the style). + */ + cramp() { + return styles[cramp[this.id]]; + } + + /** + * Get a text or display version of this style. + */ + text() { + return styles[Style_text[this.id]]; + } + + /** + * Return true if this style is tightly spaced (scriptstyle/scriptscriptstyle) + */ + isTight() { + return this.size >= 2; + } +} + +// Export an interface for type checking, but don't expose the implementation. +// This way, no more styles can be generated. + +// IDs of the different styles +const D = 0; +const Dc = 1; +const T = 2; +const Tc = 3; +const S = 4; +const Sc = 5; +const SS = 6; +const SSc = 7; + +// Instances of the different styles +const styles = [new Style(D, 0, false), new Style(Dc, 0, true), new Style(T, 1, false), new Style(Tc, 1, true), new Style(S, 2, false), new Style(Sc, 2, true), new Style(SS, 3, false), new Style(SSc, 3, true)]; + +// Lookup tables for switching from one style to another +const sup = [S, Sc, S, Sc, SS, SSc, SS, SSc]; +const sub = [Sc, Sc, Sc, Sc, SSc, SSc, SSc, SSc]; +const fracNum = [T, Tc, S, Sc, SS, SSc, SS, SSc]; +const fracDen = [Tc, Tc, Sc, Sc, SSc, SSc, SSc, SSc]; +const cramp = [Dc, Dc, Tc, Tc, Sc, Sc, SSc, SSc]; +const Style_text = [D, Dc, T, Tc, T, Tc, T, Tc]; + +// We only export some of the styles. +/* harmony default export */ var src_Style = ({ + DISPLAY: styles[D], + TEXT: styles[T], + SCRIPT: styles[S], + SCRIPTSCRIPT: styles[SS] +}); +;// ./src/unicodeScripts.ts +/* + * This file defines the Unicode scripts and script families that we + * support. To add new scripts or families, just add a new entry to the + * scriptData array below. Adding scripts to the scriptData array allows + * characters from that script to appear in \text{} environments. + */ + +/** + * Each script or script family has a name and an array of blocks. + * Each block is an array of two numbers which specify the start and + * end points (inclusive) of a block of Unicode codepoints. + */ + +/** + * Unicode block data for the families of scripts we support in \text{}. + * Scripts only need to appear here if they do not have font metrics. + */ +const scriptData = [{ + // Latin characters beyond the Latin-1 characters we have metrics for. + // Needed for Czech, Hungarian and Turkish text, for example. + name: 'latin', + blocks: [[0x0100, 0x024f], + // Latin Extended-A and Latin Extended-B + [0x0300, 0x036f] // Combining Diacritical marks + ] +}, { + // The Cyrillic script used by Russian and related languages. + // A Cyrillic subset used to be supported as explicitly defined + // symbols in symbols.js + name: 'cyrillic', + blocks: [[0x0400, 0x04ff]] +}, { + // Armenian + name: 'armenian', + blocks: [[0x0530, 0x058F]] +}, { + // The Brahmic scripts of South and Southeast Asia + // Devanagari (0900–097F) + // Bengali (0980–09FF) + // Gurmukhi (0A00–0A7F) + // Gujarati (0A80–0AFF) + // Oriya (0B00–0B7F) + // Tamil (0B80–0BFF) + // Telugu (0C00–0C7F) + // Kannada (0C80–0CFF) + // Malayalam (0D00–0D7F) + // Sinhala (0D80–0DFF) + // Thai (0E00–0E7F) + // Lao (0E80–0EFF) + // Tibetan (0F00–0FFF) + // Myanmar (1000–109F) + name: 'brahmic', + blocks: [[0x0900, 0x109F]] +}, { + name: 'georgian', + blocks: [[0x10A0, 0x10ff]] +}, { + // Chinese and Japanese. + // The "k" in cjk is for Korean, but we've separated Korean out + name: "cjk", + blocks: [[0x3000, 0x30FF], + // CJK symbols and punctuation, Hiragana, Katakana + [0x4E00, 0x9FAF], + // CJK ideograms + [0xFF00, 0xFF60] // Fullwidth punctuation + // TODO: add halfwidth Katakana and Romanji glyphs + ] +}, { + // Korean + name: 'hangul', + blocks: [[0xAC00, 0xD7AF]] +}]; + +/** + * Given a codepoint, return the name of the script or script family + * it is from, or null if it is not part of a known block + */ +function scriptFromCodepoint(codepoint) { + for (let i = 0; i < scriptData.length; i++) { + const script = scriptData[i]; + for (let i = 0; i < script.blocks.length; i++) { + const block = script.blocks[i]; + if (codepoint >= block[0] && codepoint <= block[1]) { + return script.name; + } + } + } + return null; +} + +/** + * A flattened version of all the supported blocks in a single array. + * This is an optimization to make supportedCodepoint() fast. + */ +const allBlocks = []; +scriptData.forEach(s => s.blocks.forEach(b => allBlocks.push(...b))); + +/** + * Given a codepoint, return true if it falls within one of the + * scripts or script families defined above and false otherwise. + * + * Micro benchmarks shows that this is faster than + * /[\u3000-\u30FF\u4E00-\u9FAF\uFF00-\uFF60\uAC00-\uD7AF\u0900-\u109F]/.test() + * in Firefox, Chrome and Node. + */ +function supportedCodepoint(codepoint) { + for (let i = 0; i < allBlocks.length; i += 2) { + if (codepoint >= allBlocks[i] && codepoint <= allBlocks[i + 1]) { + return true; + } + } + return false; +} +;// ./src/svgGeometry.ts +/** + * This file provides support to domTree.js and delimiter.js. + * It's a storehouse of path geometry for SVG images. + */ + +// In all paths below, the viewBox-to-em scale is 1000:1. + +// Second Brush Stroke +// Low resolution monitors struggle to display images in fine detail. +// So browsers apply anti-aliasing. A long straight arrow shaft therefore +// will sometimes appear as if it has a blurred edge. + +// To mitigate this, these SVG files contain a second "brush-stroke" on the +// arrow shafts. That is, a second long thin rectangular SVG path has been +// written directly on top of each arrow shaft. This reinforcement causes +// some of the screen pixels to display as black instead of the anti-aliased +// gray pixel that a single path would generate. So we get arrow shafts +// whose edges appear to be sharper. +const doubleBrushStroke = svgPath => svgPath + " " + svgPath; +const hLinePad = 80; // padding above a sqrt vinculum. Prevents image cropping. + +// The vinculum of a \sqrt can be made thicker by a KaTeX rendering option. +// Think of variable extraVinculum as two detours in the SVG path. +// The detour begins at the lower left of the area labeled extraVinculum below. +// The detour proceeds one extraVinculum distance up and slightly to the right, +// displacing the radiused corner between surd and vinculum. The radius is +// traversed as usual, then the detour resumes. It goes right, to the end of +// the very long vinculum, then down one extraVinculum distance, +// after which it resumes regular path geometry for the radical. +/* vinculum + / + /â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â†�extraVinculum + / █████████████████████â†�0.04em (40 unit) std vinculum thickness + / / + / / + / /\ + / / surd +*/ + +const sqrtMain = function (extraVinculum, hLinePad) { + // sqrtMain path geometry is from glyph U221A in the font KaTeX Main + return "M95," + (622 + extraVinculum + hLinePad) + "\nc-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14\nc0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54\nc44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10\ns173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429\nc69,-144,104.5,-217.7,106.5,-221\nl" + extraVinculum / 2.075 + " -" + extraVinculum + "\nc5.3,-9.3,12,-14,20,-14\nH400000v" + (40 + extraVinculum) + "H845.2724\ns-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7\nc-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z\nM" + (834 + extraVinculum) + " " + hLinePad + "h400000v" + (40 + extraVinculum) + "h-400000z"; +}; +const sqrtSize1 = function (extraVinculum, hLinePad) { + // size1 is from glyph U221A in the font KaTeX_Size1-Regular + return "M263," + (601 + extraVinculum + hLinePad) + "c0.7,0,18,39.7,52,119\nc34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120\nc340,-704.7,510.7,-1060.3,512,-1067\nl" + extraVinculum / 2.084 + " -" + extraVinculum + "\nc4.7,-7.3,11,-11,19,-11\nH40000v" + (40 + extraVinculum) + "H1012.3\ns-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232\nc-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1\ns-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26\nc-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z\nM" + (1001 + extraVinculum) + " " + hLinePad + "h400000v" + (40 + extraVinculum) + "h-400000z"; +}; +const sqrtSize2 = function (extraVinculum, hLinePad) { + // size2 is from glyph U221A in the font KaTeX_Size2-Regular + return "M983 " + (10 + extraVinculum + hLinePad) + "\nl" + extraVinculum / 3.13 + " -" + extraVinculum + "\nc4,-6.7,10,-10,18,-10 H400000v" + (40 + extraVinculum) + "\nH1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7\ns-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744\nc-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30\nc26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722\nc56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5\nc53.7,-170.3,84.5,-266.8,92.5,-289.5z\nM" + (1001 + extraVinculum) + " " + hLinePad + "h400000v" + (40 + extraVinculum) + "h-400000z"; +}; +const sqrtSize3 = function (extraVinculum, hLinePad) { + // size3 is from glyph U221A in the font KaTeX_Size3-Regular + return "M424," + (2398 + extraVinculum + hLinePad) + "\nc-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514\nc0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20\ns-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121\ns209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081\nl" + extraVinculum / 4.223 + " -" + extraVinculum + "c4,-6.7,10,-10,18,-10 H400000\nv" + (40 + extraVinculum) + "H1014.6\ns-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185\nc-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2z M" + (1001 + extraVinculum) + " " + hLinePad + "\nh400000v" + (40 + extraVinculum) + "h-400000z"; +}; +const sqrtSize4 = function (extraVinculum, hLinePad) { + // size4 is from glyph U221A in the font KaTeX_Size4-Regular + return "M473," + (2713 + extraVinculum + hLinePad) + "\nc339.3,-1799.3,509.3,-2700,510,-2702 l" + extraVinculum / 5.298 + " -" + extraVinculum + "\nc3.3,-7.3,9.3,-11,18,-11 H400000v" + (40 + extraVinculum) + "H1017.7\ns-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200\nc0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26\ns76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,\n606zM" + (1001 + extraVinculum) + " " + hLinePad + "h400000v" + (40 + extraVinculum) + "H1017.7z"; +}; +const phasePath = function (y) { + const x = y / 2; // x coordinate at top of angle + return "M400000 " + y + " H0 L" + x + " 0 l65 45 L145 " + (y - 80) + " H400000z"; +}; +const sqrtTall = function (extraVinculum, hLinePad, viewBoxHeight) { + // sqrtTall is from glyph U23B7 in the font KaTeX_Size4-Regular + // One path edge has a variable length. It runs vertically from the vinculum + // to a point near (14 units) the bottom of the surd. The vinculum + // is normally 40 units thick. So the length of the line in question is: + const vertSegment = viewBoxHeight - 54 - hLinePad - extraVinculum; + return "M702 " + (extraVinculum + hLinePad) + "H400000" + (40 + extraVinculum) + "\nH742v" + vertSegment + "l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1\nh-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170\nc-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667\n219 661 l218 661zM702 " + hLinePad + "H400000v" + (40 + extraVinculum) + "H742z"; +}; +const sqrtPath = function (size, extraVinculum, viewBoxHeight) { + extraVinculum = 1000 * extraVinculum; // Convert from document ems to viewBox. + let path = ""; + switch (size) { + case "sqrtMain": + path = sqrtMain(extraVinculum, hLinePad); + break; + case "sqrtSize1": + path = sqrtSize1(extraVinculum, hLinePad); + break; + case "sqrtSize2": + path = sqrtSize2(extraVinculum, hLinePad); + break; + case "sqrtSize3": + path = sqrtSize3(extraVinculum, hLinePad); + break; + case "sqrtSize4": + path = sqrtSize4(extraVinculum, hLinePad); + break; + case "sqrtTall": + path = sqrtTall(extraVinculum, hLinePad, viewBoxHeight); + } + return path; +}; +const innerPath = function (name, height) { + // The inner part of stretchy tall delimiters + switch (name) { + case "\u239c": + return doubleBrushStroke("M291 0 H417 V" + height + " H291z"); + case "\u2223": + return doubleBrushStroke("M145 0 H188 V" + height + " H145z"); + case "\u2225": + return doubleBrushStroke("M145 0 H188 V" + height + " H145z") + doubleBrushStroke("M367 0 H410 V" + height + " H367z"); + case "\u239f": + return doubleBrushStroke("M457 0 H583 V" + height + " H457z"); + case "\u23a2": + return doubleBrushStroke("M319 0 H403 V" + height + " H319z"); + case "\u23a5": + return doubleBrushStroke("M263 0 H347 V" + height + " H263z"); + case "\u23aa": + return doubleBrushStroke("M384 0 H504 V" + height + " H384z"); + case "\u23d0": + return doubleBrushStroke("M312 0 H355 V" + height + " H312z"); + case "\u2016": + return doubleBrushStroke("M257 0 H300 V" + height + " H257z") + doubleBrushStroke("M478 0 H521 V" + height + " H478z"); + default: + return ""; + } +}; +const path = { + // The doubleleftarrow geometry is from glyph U+21D0 in the font KaTeX Main + doubleleftarrow: "M262 157\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\nm8 0v40h399730v-40zm0 194v40h399730v-40z", + // doublerightarrow is from glyph U+21D2 in font KaTeX Main + doublerightarrow: "M399738 392l\n-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5\n 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88\n-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68\n-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18\n-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782\nc-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3\n-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z", + // leftarrow is from glyph U+2190 in font KaTeX Main + leftarrow: "M400000 241H110l3-3c68.7-52.7 113.7-120\n 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8\n-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247\nc-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208\n 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3\n 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202\n l-3-3h399890zM100 241v40h399900v-40z", + // overbrace is from glyphs U+23A9/23A8/23A7 in font KaTeX_Size4-Regular + leftbrace: "M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117\n-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7\n 5-6 9-10 13-.7 1-7.3 1-20 1H6z", + leftbraceunder: "M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13\n 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688\n 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7\n-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z", + // overgroup is from the MnSymbol package (public domain) + leftgroup: "M400000 80\nH435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0\n 435 0h399565z", + leftgroupunder: "M400000 262\nH435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219\n 435 219h399565z", + // Harpoons are from glyph U+21BD in font KaTeX Main + leftharpoon: "M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3\n-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5\n-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7\n-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z", + leftharpoonplus: "M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5\n 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3\n-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7\n-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z\nm0 0v40h400000v-40z", + leftharpoondown: "M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333\n 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5\n 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667\n-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z", + leftharpoondownplus: "M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12\n 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7\n-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0\nv40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z", + // hook is from glyph U+21A9 in font KaTeX Main + lefthook: "M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5\n-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3\n-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21\n 71.5 23h399859zM103 281v-40h399897v40z", + leftlinesegment: doubleBrushStroke("M40 281 V428 H0 V94 H40 V241 H400000 v40z"), + leftbracketunder: doubleBrushStroke("M0 0 h120 V290 H399995 v120 H0z"), + leftbracketover: doubleBrushStroke("M0 440 h120 V150 H399995 v-120 H0z"), + leftmapsto: doubleBrushStroke("M40 281 V448H0V74H40V241H400000v40z"), + // tofrom is from glyph U+21C4 in font KaTeX AMS Regular + leftToFrom: "M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23\n-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8\nc28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3\n 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z", + longequal: doubleBrushStroke("M0 50 h400000 v40H0z m0 194h40000v40H0z"), + midbrace: "M200428 334\nc-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14\n-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7\n 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11\n 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z", + midbraceunder: "M199572 214\nc100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14\n 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3\n 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0\n-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z", + oiintSize1: "M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6\n-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z\nm368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8\n60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z", + oiintSize2: "M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8\n-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z\nm502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2\nc0 110 84 276 504 276s502.4-166 502.4-276z", + oiiintSize1: "M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6\n-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z\nm525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0\n85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z", + oiiintSize2: "M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8\n-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z\nm770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1\nc0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z", + rightarrow: "M0 241v40h399891c-47.3 35.3-84 78-110 128\n-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20\n 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7\n 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85\n-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n 151.7 139 205zm0 0v40h399900v-40z", + rightbrace: "M400000 542l\n-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5\ns-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1\nc124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z", + rightbraceunder: "M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3\n 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237\n-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z", + rightgroup: "M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0\n 3-1 3-3v-38c-76-158-257-219-435-219H0z", + rightgroupunder: "M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18\n 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z", + rightharpoon: "M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3\n-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2\n-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58\n 69.2 92 94.5zm0 0v40h399900v-40z", + rightharpoonplus: "M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11\n-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7\n 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z\nm0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z", + rightharpoondown: "M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8\n 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5\n-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95\n-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z", + rightharpoondownplus: "M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8\n 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3\n 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3\n-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z\nm0-194v40h400000v-40zm0 0v40h400000v-40z", + righthook: "M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3\n 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0\n-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21\n 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z", + rightlinesegment: doubleBrushStroke("M399960 241 V94 h40 V428 h-40 V281 H0 v-40z"), + rightbracketunder: doubleBrushStroke("M399995 0 h-120 V290 H0 v120 H400000z"), + rightbracketover: doubleBrushStroke("M399995 440 h-120 V150 H0 v-120 H399995z"), + rightToFrom: "M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23\n 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32\n-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142\n-167z M100 147v40h399900v-40zM0 341v40h399900v-40z", + // twoheadleftarrow is from glyph U+219E in font KaTeX AMS Regular + twoheadleftarrow: "M0 167c68 40\n 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69\n-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3\n-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19\n-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101\n 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z", + twoheadrightarrow: "M400000 167\nc-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3\n 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42\n 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333\n-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70\n 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z", + // tilde1 is a modified version of a glyph from the MnSymbol package + tilde1: "M200 55.538c-77 0-168 73.953-177 73.953-3 0-7\n-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0\n 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0\n 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128\n-68.267.847-113-73.952-191-73.952z", + // ditto tilde2, tilde3, & tilde4 + tilde2: "M344 55.266c-142 0-300.638 81.316-311.5 86.418\n-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9\n 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114\nc1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751\n 181.476 676 181.476c-149 0-189-126.21-332-126.21z", + tilde3: "M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457\n-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0\n 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697\n 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696\n -338 0-409-156.573-744-156.573z", + tilde4: "M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345\n-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409\n 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9\n 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409\n -175.236-744-175.236z", + // vec is from glyph U+20D7 in font KaTeX Main + vec: "M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5\n3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11\n10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63\n-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1\n-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59\nH213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359\nc-16-25.333-24-45-24-59z", + // widehat1 is a modified version of a glyph from the MnSymbol package + widehat1: "M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22\nc-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z", + // ditto widehat2, widehat3, & widehat4 + widehat2: "M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z", + widehat3: "M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z", + widehat4: "M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z", + // widecheck paths are all inverted versions of widehat + widecheck1: "M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1,\n-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z", + widecheck2: "M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z", + widecheck3: "M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z", + widecheck4: "M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z", + // The next ten paths support reaction arrows from the mhchem package. + + // Arrows for \ce{<-->} are offset from xAxis by 0.22ex, per mhchem in LaTeX + // baraboveleftarrow is mostly from glyph U+2190 in font KaTeX Main + baraboveleftarrow: "M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202\nc4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5\nc-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130\ns-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47\n121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6\ns2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11\nc0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z\nM100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z", + // rightarrowabovebar is mostly from glyph U+2192, KaTeX Main + rightarrowabovebar: "M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32\n-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0\n13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39\n-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5\n-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z", + // The short left harpoon has 0.5em (i.e. 500 units) kern on the left end. + // Ref from mhchem.sty: \rlap{\raisebox{-.22ex}{$\kern0.5em + baraboveshortleftharpoon: "M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17\nc2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21\nc-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40\nc-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z\nM0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z", + rightharpoonaboveshortbar: "M0,241 l0,40c399126,0,399993,0,399993,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z", + shortbaraboveleftharpoon: "M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,\n1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,\n-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z\nM93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z", + shortrightharpoonabovebar: "M53,241l0,40c398570,0,399437,0,399437,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z" +}; +const tallDelim = function (label, midHeight) { + switch (label) { + case "lbrack": + return "M403 1759 V84 H666 V0 H319 V1759 v" + midHeight + " v1759 v84 h347 v-84\nH403z M403 1759 V0 H319 V1759 v" + midHeight + " v1759 v84 h84z"; + case "rbrack": + return "M347 1759 V0 H0 V84 H263 V1759 v" + midHeight + " v1759 H0 v84 H347z\nM347 1759 V0 H263 V1759 v" + midHeight + " v1759 h84z"; + case "vert": + return "M145 15 v585 v" + midHeight + " v585 c2.667,10,9.667,15,21,15\nc10,0,16.667,-5,20,-15 v-585 v" + -midHeight + " v-585 c-2.667,-10,-9.667,-15,-21,-15\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v" + midHeight + " v585 h43z"; + case "doublevert": + return "M145 15 v585 v" + midHeight + " v585 c2.667,10,9.667,15,21,15\nc10,0,16.667,-5,20,-15 v-585 v" + -midHeight + " v-585 c-2.667,-10,-9.667,-15,-21,-15\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v" + midHeight + " v585 h43z\nM367 15 v585 v" + midHeight + " v585 c2.667,10,9.667,15,21,15\nc10,0,16.667,-5,20,-15 v-585 v" + -midHeight + " v-585 c-2.667,-10,-9.667,-15,-21,-15\nc-10,0,-16.667,5,-20,15z M410 15 H367 v585 v" + midHeight + " v585 h43z"; + case "lfloor": + return "M319 602 V0 H403 V602 v" + midHeight + " v1715 h263 v84 H319z\nMM319 602 V0 H403 V602 v" + midHeight + " v1715 H319z"; + case "rfloor": + return "M319 602 V0 H403 V602 v" + midHeight + " v1799 H0 v-84 H319z\nMM319 602 V0 H403 V602 v" + midHeight + " v1715 H319z"; + case "lceil": + return "M403 1759 V84 H666 V0 H319 V1759 v" + midHeight + " v602 h84z\nM403 1759 V0 H319 V1759 v" + midHeight + " v602 h84z"; + case "rceil": + return "M347 1759 V0 H0 V84 H263 V1759 v" + midHeight + " v602 h84z\nM347 1759 V0 h-84 V1759 v" + midHeight + " v602 h84z"; + case "lparen": + return "M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1\nc-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349,\n-36,557 l0," + (midHeight + 84) + "c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210,\n949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9\nc0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5,\n-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189\nl0,-" + (midHeight + 92) + "c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3,\n-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z"; + case "rparen": + return "M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3,\n63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5\nc11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0," + (midHeight + 9) + "\nc-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664\nc-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11\nc0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17\nc242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558\nl0,-" + (midHeight + 144) + "c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7,\n-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z"; + default: + // We should not ever get here. + throw new Error("Unknown stretchy delimiter."); + } +}; +;// ./src/tree.ts +// To ensure that all nodes have compatible signatures for these methods. + +function isMathDomNode(node) { + return 'toText' in node; +} + +/** + * This node represents a document fragment, which contains elements, but when + * placed into the DOM doesn't have any representation itself. It only contains + * children and doesn't have any DOM node properties. + */ +class DocumentFragment { + // Never used; needed for satisfying interface. + + constructor(children) { + this.children = void 0; + this.classes = void 0; + this.height = void 0; + this.depth = void 0; + this.maxFontSize = void 0; + this.style = void 0; + this.children = children; + this.classes = []; + this.height = 0; + this.depth = 0; + this.maxFontSize = 0; + this.style = {}; + } + hasClass(className) { + return this.classes.includes(className); + } + + /** Convert the fragment into a node. */ + toNode() { + const frag = document.createDocumentFragment(); + for (let i = 0; i < this.children.length; i++) { + frag.appendChild(this.children[i].toNode()); + } + return frag; + } + + /** Convert the fragment into HTML markup. */ + toMarkup() { + let markup = ""; + + // Simply concatenate the markup for the children together. + for (let i = 0; i < this.children.length; i++) { + markup += this.children[i].toMarkup(); + } + return markup; + } + + /** + * Converts the math node into a string, similar to innerText. Applies to + * MathDomNode's only. + */ + toText() { + return this.children.map(child => { + if (isMathDomNode(child)) { + return child.toText(); + } + throw new Error("Expected MathDomNode with toText, got " + child.constructor.name); + }).join(""); + } +} +;// ./src/units.ts +/** + * This file does conversion between units. In particular, it provides + * calculateSize to convert other units into ems. + */ + + +// This table gives the number of TeX pts in one of each *absolute* TeX unit. +// Thus, multiplying a length by this number converts the length from units +// into pts. Dividing the result by ptPerEm gives the number of ems +// *assuming* a font size of ptPerEm (normal size, normal style). +const ptPerUnit = { + // https://en.wikibooks.org/wiki/LaTeX/Lengths and + // https://tex.stackexchange.com/a/8263 + "pt": 1, + // TeX point + "mm": 7227 / 2540, + // millimeter + "cm": 7227 / 254, + // centimeter + "in": 72.27, + // inch + "bp": 803 / 800, + // big (PostScript) points + "pc": 12, + // pica + "dd": 1238 / 1157, + // didot + "cc": 14856 / 1157, + // cicero (12 didot) + "nd": 685 / 642, + // new didot + "nc": 1370 / 107, + // new cicero (12 new didot) + "sp": 1 / 65536, + // scaled point (TeX's internal smallest unit) + // https://tex.stackexchange.com/a/41371 + "px": 803 / 800 // \pdfpxdimen defaults to 1 bp in pdfTeX and LuaTeX +}; + +// Dictionary of relative units, for fast validity testing. +const relativeUnit = { + "ex": true, + "em": true, + "mu": true +}; + +/** + * Determine whether the specified unit (either a string defining the unit + * or a "size" parse node containing a unit field) is valid. + */ +const validUnit = function (unit) { + if (typeof unit !== "string") { + unit = unit.unit; + } + return unit in ptPerUnit || unit in relativeUnit || unit === "ex"; +}; + +/* + * Convert a "size" parse node (with numeric "number" and string "unit" fields, + * as parsed by functions.js argType "size") into a CSS em value for the + * current style/scale. `options` gives the current options. + */ +const calculateSize = function (sizeValue, options) { + let scale; + if (sizeValue.unit in ptPerUnit) { + // Absolute units + scale = ptPerUnit[sizeValue.unit] // Convert unit to pt + / options.fontMetrics().ptPerEm // Convert pt to CSS em + / options.sizeMultiplier; // Unscale to make absolute units + } else if (sizeValue.unit === "mu") { + // `mu` units scale with scriptstyle/scriptscriptstyle. + scale = options.fontMetrics().cssEmPerMu; + } else { + // Other relative units always refer to the *textstyle* font + // in the current size. + let unitOptions; + if (options.style.isTight()) { + // isTight() means current style is script/scriptscript. + unitOptions = options.havingStyle(options.style.text()); + } else { + unitOptions = options; + } + // TODO: In TeX these units are relative to the quad of the current + // *text* font, e.g. cmr10. KaTeX instead uses values from the + // comparably-sized *Computer Modern symbol* font. At 10pt, these + // match. At 7pt and 5pt, they differ: cmr7=1.138894, cmsy7=1.170641; + // cmr5=1.361133, cmsy5=1.472241. Consider $\scriptsize a\kern1emb$. + // TeX \showlists shows a kern of 1.13889 * fontsize; + // KaTeX shows a kern of 1.171 * fontsize. + if (sizeValue.unit === "ex") { + scale = unitOptions.fontMetrics().xHeight; + } else if (sizeValue.unit === "em") { + scale = unitOptions.fontMetrics().quad; + } else { + throw new src_ParseError("Invalid unit: '" + sizeValue.unit + "'"); + } + if (unitOptions !== options) { + scale *= unitOptions.sizeMultiplier / options.sizeMultiplier; + } + } + return Math.min(sizeValue.number * scale, options.maxSize); +}; + +/** + * Round `n` to 4 decimal places, or to the nearest 1/10,000th em. See + * https://github.com/KaTeX/KaTeX/pull/2460. + */ +const makeEm = function (n) { + return +n.toFixed(4) + "em"; +}; +;// ./src/domTree.ts +/** + * These objects store the data about the DOM nodes we create, as well as some + * extra data. They can then be transformed into real DOM nodes with the + * `toNode` function or HTML markup using `toMarkup`. They are useful for both + * storing extra properties on the nodes, as well as providing a way to easily + * work with the DOM. + * + * Similar functions for working with MathML nodes exist in mathMLTree.js. + * + * TODO: refactor `span` and `anchor` into common superclass when + * target environments support class inheritance + */ + + + + + + +/** + * Create an HTML className based on a list of classes. In addition to joining + * with spaces, we also remove empty classes. + */ +const createClass = function (classes) { + return classes.filter(cls => cls).join(" "); +}; + +/** + * Serialize a CssStyle object into a semicolon-delimited inline-style string + * (hyphenating camelCase property names). Returns "" when no property is set. + */ +const cssStyleToString = function (style) { + let styles = ""; + for (const key of Object.keys(style)) { + const value = style[key]; + if (value !== undefined) { + styles += hyphenate(key) + ":" + value + ";"; + } + } + return styles; +}; +const initNode = function (classes, options, style) { + this.classes = classes || []; + this.attributes = {}; + this.height = 0; + this.depth = 0; + this.maxFontSize = 0; + this.style = style || {}; + if (options) { + if (options.style.isTight()) { + this.classes.push("mtight"); + } + const color = options.getColor(); + if (color) { + this.style.color = color; + } + } +}; + +/** + * Convert into an HTML node + */ +const toNode = function (tagName) { + const node = document.createElement(tagName); + + // Apply the class + node.className = createClass(this.classes); + + // Apply inline styles + Object.assign(node.style, this.style); + + // Apply attributes + for (const attr of Object.keys(this.attributes)) { + node.setAttribute(attr, this.attributes[attr]); + } + + // Append the children, also as HTML nodes + for (let i = 0; i < this.children.length; i++) { + node.appendChild(this.children[i].toNode()); + } + return node; +}; + +/** + * https://w3c.github.io/html-reference/syntax.html#syntax-attributes + * + * > Attribute Names must consist of one or more characters + * other than the space characters, U+0000 NULL, + * '"', "'", ">", "/", "=", the control characters, + * and any characters that are not defined by Unicode. + */ +const invalidAttributeNameRegex = /[\s"'>/=\x00-\x1f]/; + +/** + * Convert into an HTML markup string + */ +const toMarkup = function (tagName) { + let markup = "<" + tagName; + + // Add the class + if (this.classes.length) { + markup += " class=\"" + utils_escape(createClass(this.classes)) + "\""; + } + const styles = cssStyleToString(this.style); + if (styles) { + markup += " style=\"" + utils_escape(styles) + "\""; + } + + // Add the attributes + for (const attr of Object.keys(this.attributes)) { + if (invalidAttributeNameRegex.test(attr)) { + throw new src_ParseError("Invalid attribute name '" + attr + "'"); + } + markup += " " + attr + "=\"" + utils_escape(this.attributes[attr]) + "\""; + } + markup += ">"; + + // Add the markup of the children, also as markup + for (let i = 0; i < this.children.length; i++) { + markup += this.children[i].toMarkup(); + } + markup += ""; + return markup; +}; + +// Making the type below exact with all optional fields doesn't work due to +// - https://github.com/facebook/flow/issues/4582 +// - https://github.com/facebook/flow/issues/5688 +// However, since *all* fields are optional, $Shape<> works as suggested in 5688 +// above. +// This type does not include all CSS properties. Additional properties should +// be added as needed. + +// Span wrapping other DOM nodes. + +// Span wrapping an SVG node. + +/** + * This node represents a span node, with a className, a list of children, and + * an inline style. It also contains information about its height, depth, and + * maxFontSize. + * + * Represents two types with different uses: SvgSpan to wrap an SVG and DomSpan + * otherwise. This typesafety is important when HTML builders access a span's + * children. + */ +class Span { + constructor(classes, children, options, style) { + this.children = void 0; + this.attributes = void 0; + this.classes = void 0; + this.height = void 0; + this.depth = void 0; + this.width = void 0; + this.maxFontSize = void 0; + this.style = void 0; + /** + * Italic correction carried over from a SymbolNode when the symbol is + * wrapped in a vlist (e.g. \oiint / \oiiint). Read by supsub to adjust + * subscript positioning. Only set when nonzero; use `?? 0` at read sites. + */ + this.italic = void 0; + initNode.call(this, classes, options, style); + this.children = children || []; + } + + /** + * Sets an arbitrary attribute on the span. Warning: use this wisely. Not + * all browsers support attributes the same, and having too many custom + * attributes is probably bad. + */ + setAttribute(attribute, value) { + this.attributes[attribute] = value; + } + hasClass(className) { + return this.classes.includes(className); + } + toNode() { + return toNode.call(this, "span"); + } + toMarkup() { + return toMarkup.call(this, "span"); + } +} + +/** + * This node represents an anchor () element with a hyperlink. See `span` + * for further details. + */ +class Anchor { + constructor(href, classes, children, options) { + this.children = void 0; + this.attributes = void 0; + this.classes = void 0; + this.height = void 0; + this.depth = void 0; + this.maxFontSize = void 0; + this.style = void 0; + initNode.call(this, classes, options); + this.children = children || []; + this.setAttribute('href', href); + } + setAttribute(attribute, value) { + this.attributes[attribute] = value; + } + hasClass(className) { + return this.classes.includes(className); + } + toNode() { + return toNode.call(this, "a"); + } + toMarkup() { + return toMarkup.call(this, "a"); + } +} + +/** + * This node represents an image embed () element. + */ +class Img { + constructor(src, alt, style) { + this.src = void 0; + this.alt = void 0; + this.classes = void 0; + this.height = void 0; + this.depth = void 0; + this.maxFontSize = void 0; + this.style = void 0; + this.alt = alt; + this.src = src; + this.classes = ["mord"]; + this.height = 0; + this.depth = 0; + this.maxFontSize = 0; + this.style = style; + } + hasClass(className) { + return this.classes.includes(className); + } + toNode() { + const node = document.createElement("img"); + node.src = this.src; + node.alt = this.alt; + node.className = "mord"; + + // Apply inline styles + Object.assign(node.style, this.style); + return node; + } + toMarkup() { + let markup = "\"" 0) { + span = document.createElement("span"); + span.style.marginRight = makeEm(this.italic); + } + if (this.classes.length > 0) { + span = span || document.createElement("span"); + span.className = createClass(this.classes); + } + if (Object.keys(this.style).length > 0) { + span = span || document.createElement("span"); + Object.assign(span.style, this.style); + } + if (span) { + span.appendChild(node); + return span; + } else { + return node; + } + } + + /** + * Creates markup for a symbol node. + */ + toMarkup() { + // TODO(alpert): More duplication than I'd like from + // span.prototype.toMarkup and symbolNode.prototype.toNode... + let needsSpan = false; + let markup = " 0) { + styles += "margin-right:" + makeEm(this.italic) + ";"; + } + styles += cssStyleToString(this.style); + if (styles) { + needsSpan = true; + markup += " style=\"" + utils_escape(styles) + "\""; + } + const escaped = utils_escape(this.text); + if (needsSpan) { + markup += ">"; + markup += escaped; + markup += ""; + return markup; + } else { + return escaped; + } + } +} + +/** + * SVG nodes are used to render stretchy wide elements. + */ +class SvgNode { + constructor(children, attributes) { + this.children = void 0; + this.attributes = void 0; + this.children = children || []; + this.attributes = attributes || {}; + } + toNode() { + const svgNS = "http://www.w3.org/2000/svg"; + const node = document.createElementNS(svgNS, "svg"); + + // Apply attributes + for (const attr of Object.keys(this.attributes)) { + node.setAttribute(attr, this.attributes[attr]); + } + for (let i = 0; i < this.children.length; i++) { + node.appendChild(this.children[i].toNode()); + } + return node; + } + toMarkup() { + let markup = ""; + } else { + return ""; + } + } +} +class LineNode { + constructor(attributes) { + this.attributes = void 0; + this.attributes = attributes || {}; + } + toNode() { + const svgNS = "http://www.w3.org/2000/svg"; + const node = document.createElementNS(svgNS, "line"); + + // Apply attributes + for (const attr of Object.keys(this.attributes)) { + node.setAttribute(attr, this.attributes[attr]); + } + return node; + } + toMarkup() { + let markup = " but got " + String(group) + "."); + } +} + +/** + * Whether an HtmlDomNode has HtmlDomNode children. + * HtmlDomNode is a base type representing a union of + * SymbolNode, SvgSpan, DomSpan, Anchor, and documentFragment. + * In the last three cases, the children are HtmlDomNode[]. + */ +const hasHtmlDomChildren = node => node instanceof Span || node instanceof Anchor || node instanceof DocumentFragment; +;// ./src/fontMetricsData.js +// This file is GENERATED by buildMetrics.sh. DO NOT MODIFY. +/* harmony default export */ var fontMetricsData = ({ + "AMS-Regular": { + "32": [0, 0, 0, 0, 0.25], + "65": [0, 0.68889, 0, 0, 0.72222], + "66": [0, 0.68889, 0, 0, 0.66667], + "67": [0, 0.68889, 0, 0, 0.72222], + "68": [0, 0.68889, 0, 0, 0.72222], + "69": [0, 0.68889, 0, 0, 0.66667], + "70": [0, 0.68889, 0, 0, 0.61111], + "71": [0, 0.68889, 0, 0, 0.77778], + "72": [0, 0.68889, 0, 0, 0.77778], + "73": [0, 0.68889, 0, 0, 0.38889], + "74": [0.16667, 0.68889, 0, 0, 0.5], + "75": [0, 0.68889, 0, 0, 0.77778], + "76": [0, 0.68889, 0, 0, 0.66667], + "77": [0, 0.68889, 0, 0, 0.94445], + "78": [0, 0.68889, 0, 0, 0.72222], + "79": [0.16667, 0.68889, 0, 0, 0.77778], + "80": [0, 0.68889, 0, 0, 0.61111], + "81": [0.16667, 0.68889, 0, 0, 0.77778], + "82": [0, 0.68889, 0, 0, 0.72222], + "83": [0, 0.68889, 0, 0, 0.55556], + "84": [0, 0.68889, 0, 0, 0.66667], + "85": [0, 0.68889, 0, 0, 0.72222], + "86": [0, 0.68889, 0, 0, 0.72222], + "87": [0, 0.68889, 0, 0, 1.0], + "88": [0, 0.68889, 0, 0, 0.72222], + "89": [0, 0.68889, 0, 0, 0.72222], + "90": [0, 0.68889, 0, 0, 0.66667], + "107": [0, 0.68889, 0, 0, 0.55556], + "160": [0, 0, 0, 0, 0.25], + "165": [0, 0.675, 0.025, 0, 0.75], + "174": [0.15559, 0.69224, 0, 0, 0.94666], + "240": [0, 0.68889, 0, 0, 0.55556], + "295": [0, 0.68889, 0, 0, 0.54028], + "710": [0, 0.825, 0, 0, 2.33334], + "732": [0, 0.9, 0, 0, 2.33334], + "770": [0, 0.825, 0, 0, 2.33334], + "771": [0, 0.9, 0, 0, 2.33334], + "989": [0.08167, 0.58167, 0, 0, 0.77778], + "1008": [0, 0.43056, 0.04028, 0, 0.66667], + "8245": [0, 0.54986, 0, 0, 0.275], + "8463": [0, 0.68889, 0, 0, 0.54028], + "8487": [0, 0.68889, 0, 0, 0.72222], + "8498": [0, 0.68889, 0, 0, 0.55556], + "8502": [0, 0.68889, 0, 0, 0.66667], + "8503": [0, 0.68889, 0, 0, 0.44445], + "8504": [0, 0.68889, 0, 0, 0.66667], + "8513": [0, 0.68889, 0, 0, 0.63889], + "8592": [-0.03598, 0.46402, 0, 0, 0.5], + "8594": [-0.03598, 0.46402, 0, 0, 0.5], + "8602": [-0.13313, 0.36687, 0, 0, 1.0], + "8603": [-0.13313, 0.36687, 0, 0, 1.0], + "8606": [0.01354, 0.52239, 0, 0, 1.0], + "8608": [0.01354, 0.52239, 0, 0, 1.0], + "8610": [0.01354, 0.52239, 0, 0, 1.11111], + "8611": [0.01354, 0.52239, 0, 0, 1.11111], + "8619": [0, 0.54986, 0, 0, 1.0], + "8620": [0, 0.54986, 0, 0, 1.0], + "8621": [-0.13313, 0.37788, 0, 0, 1.38889], + "8622": [-0.13313, 0.36687, 0, 0, 1.0], + "8624": [0, 0.69224, 0, 0, 0.5], + "8625": [0, 0.69224, 0, 0, 0.5], + "8630": [0, 0.43056, 0, 0, 1.0], + "8631": [0, 0.43056, 0, 0, 1.0], + "8634": [0.08198, 0.58198, 0, 0, 0.77778], + "8635": [0.08198, 0.58198, 0, 0, 0.77778], + "8638": [0.19444, 0.69224, 0, 0, 0.41667], + "8639": [0.19444, 0.69224, 0, 0, 0.41667], + "8642": [0.19444, 0.69224, 0, 0, 0.41667], + "8643": [0.19444, 0.69224, 0, 0, 0.41667], + "8644": [0.1808, 0.675, 0, 0, 1.0], + "8646": [0.1808, 0.675, 0, 0, 1.0], + "8647": [0.1808, 0.675, 0, 0, 1.0], + "8648": [0.19444, 0.69224, 0, 0, 0.83334], + "8649": [0.1808, 0.675, 0, 0, 1.0], + "8650": [0.19444, 0.69224, 0, 0, 0.83334], + "8651": [0.01354, 0.52239, 0, 0, 1.0], + "8652": [0.01354, 0.52239, 0, 0, 1.0], + "8653": [-0.13313, 0.36687, 0, 0, 1.0], + "8654": [-0.13313, 0.36687, 0, 0, 1.0], + "8655": [-0.13313, 0.36687, 0, 0, 1.0], + "8666": [0.13667, 0.63667, 0, 0, 1.0], + "8667": [0.13667, 0.63667, 0, 0, 1.0], + "8669": [-0.13313, 0.37788, 0, 0, 1.0], + "8672": [-0.064, 0.437, 0, 0, 1.334], + "8674": [-0.064, 0.437, 0, 0, 1.334], + "8705": [0, 0.825, 0, 0, 0.5], + "8708": [0, 0.68889, 0, 0, 0.55556], + "8709": [0.08167, 0.58167, 0, 0, 0.77778], + "8717": [0, 0.43056, 0, 0, 0.42917], + "8722": [-0.03598, 0.46402, 0, 0, 0.5], + "8724": [0.08198, 0.69224, 0, 0, 0.77778], + "8726": [0.08167, 0.58167, 0, 0, 0.77778], + "8733": [0, 0.69224, 0, 0, 0.77778], + "8736": [0, 0.69224, 0, 0, 0.72222], + "8737": [0, 0.69224, 0, 0, 0.72222], + "8738": [0.03517, 0.52239, 0, 0, 0.72222], + "8739": [0.08167, 0.58167, 0, 0, 0.22222], + "8740": [0.25142, 0.74111, 0, 0, 0.27778], + "8741": [0.08167, 0.58167, 0, 0, 0.38889], + "8742": [0.25142, 0.74111, 0, 0, 0.5], + "8756": [0, 0.69224, 0, 0, 0.66667], + "8757": [0, 0.69224, 0, 0, 0.66667], + "8764": [-0.13313, 0.36687, 0, 0, 0.77778], + "8765": [-0.13313, 0.37788, 0, 0, 0.77778], + "8769": [-0.13313, 0.36687, 0, 0, 0.77778], + "8770": [-0.03625, 0.46375, 0, 0, 0.77778], + "8774": [0.30274, 0.79383, 0, 0, 0.77778], + "8776": [-0.01688, 0.48312, 0, 0, 0.77778], + "8778": [0.08167, 0.58167, 0, 0, 0.77778], + "8782": [0.06062, 0.54986, 0, 0, 0.77778], + "8783": [0.06062, 0.54986, 0, 0, 0.77778], + "8785": [0.08198, 0.58198, 0, 0, 0.77778], + "8786": [0.08198, 0.58198, 0, 0, 0.77778], + "8787": [0.08198, 0.58198, 0, 0, 0.77778], + "8790": [0, 0.69224, 0, 0, 0.77778], + "8791": [0.22958, 0.72958, 0, 0, 0.77778], + "8796": [0.08198, 0.91667, 0, 0, 0.77778], + "8806": [0.25583, 0.75583, 0, 0, 0.77778], + "8807": [0.25583, 0.75583, 0, 0, 0.77778], + "8808": [0.25142, 0.75726, 0, 0, 0.77778], + "8809": [0.25142, 0.75726, 0, 0, 0.77778], + "8812": [0.25583, 0.75583, 0, 0, 0.5], + "8814": [0.20576, 0.70576, 0, 0, 0.77778], + "8815": [0.20576, 0.70576, 0, 0, 0.77778], + "8816": [0.30274, 0.79383, 0, 0, 0.77778], + "8817": [0.30274, 0.79383, 0, 0, 0.77778], + "8818": [0.22958, 0.72958, 0, 0, 0.77778], + "8819": [0.22958, 0.72958, 0, 0, 0.77778], + "8822": [0.1808, 0.675, 0, 0, 0.77778], + "8823": [0.1808, 0.675, 0, 0, 0.77778], + "8828": [0.13667, 0.63667, 0, 0, 0.77778], + "8829": [0.13667, 0.63667, 0, 0, 0.77778], + "8830": [0.22958, 0.72958, 0, 0, 0.77778], + "8831": [0.22958, 0.72958, 0, 0, 0.77778], + "8832": [0.20576, 0.70576, 0, 0, 0.77778], + "8833": [0.20576, 0.70576, 0, 0, 0.77778], + "8840": [0.30274, 0.79383, 0, 0, 0.77778], + "8841": [0.30274, 0.79383, 0, 0, 0.77778], + "8842": [0.13597, 0.63597, 0, 0, 0.77778], + "8843": [0.13597, 0.63597, 0, 0, 0.77778], + "8847": [0.03517, 0.54986, 0, 0, 0.77778], + "8848": [0.03517, 0.54986, 0, 0, 0.77778], + "8858": [0.08198, 0.58198, 0, 0, 0.77778], + "8859": [0.08198, 0.58198, 0, 0, 0.77778], + "8861": [0.08198, 0.58198, 0, 0, 0.77778], + "8862": [0, 0.675, 0, 0, 0.77778], + "8863": [0, 0.675, 0, 0, 0.77778], + "8864": [0, 0.675, 0, 0, 0.77778], + "8865": [0, 0.675, 0, 0, 0.77778], + "8872": [0, 0.69224, 0, 0, 0.61111], + "8873": [0, 0.69224, 0, 0, 0.72222], + "8874": [0, 0.69224, 0, 0, 0.88889], + "8876": [0, 0.68889, 0, 0, 0.61111], + "8877": [0, 0.68889, 0, 0, 0.61111], + "8878": [0, 0.68889, 0, 0, 0.72222], + "8879": [0, 0.68889, 0, 0, 0.72222], + "8882": [0.03517, 0.54986, 0, 0, 0.77778], + "8883": [0.03517, 0.54986, 0, 0, 0.77778], + "8884": [0.13667, 0.63667, 0, 0, 0.77778], + "8885": [0.13667, 0.63667, 0, 0, 0.77778], + "8888": [0, 0.54986, 0, 0, 1.11111], + "8890": [0.19444, 0.43056, 0, 0, 0.55556], + "8891": [0.19444, 0.69224, 0, 0, 0.61111], + "8892": [0.19444, 0.69224, 0, 0, 0.61111], + "8901": [0, 0.54986, 0, 0, 0.27778], + "8903": [0.08167, 0.58167, 0, 0, 0.77778], + "8905": [0.08167, 0.58167, 0, 0, 0.77778], + "8906": [0.08167, 0.58167, 0, 0, 0.77778], + "8907": [0, 0.69224, 0, 0, 0.77778], + "8908": [0, 0.69224, 0, 0, 0.77778], + "8909": [-0.03598, 0.46402, 0, 0, 0.77778], + "8910": [0, 0.54986, 0, 0, 0.76042], + "8911": [0, 0.54986, 0, 0, 0.76042], + "8912": [0.03517, 0.54986, 0, 0, 0.77778], + "8913": [0.03517, 0.54986, 0, 0, 0.77778], + "8914": [0, 0.54986, 0, 0, 0.66667], + "8915": [0, 0.54986, 0, 0, 0.66667], + "8916": [0, 0.69224, 0, 0, 0.66667], + "8918": [0.0391, 0.5391, 0, 0, 0.77778], + "8919": [0.0391, 0.5391, 0, 0, 0.77778], + "8920": [0.03517, 0.54986, 0, 0, 1.33334], + "8921": [0.03517, 0.54986, 0, 0, 1.33334], + "8922": [0.38569, 0.88569, 0, 0, 0.77778], + "8923": [0.38569, 0.88569, 0, 0, 0.77778], + "8926": [0.13667, 0.63667, 0, 0, 0.77778], + "8927": [0.13667, 0.63667, 0, 0, 0.77778], + "8928": [0.30274, 0.79383, 0, 0, 0.77778], + "8929": [0.30274, 0.79383, 0, 0, 0.77778], + "8934": [0.23222, 0.74111, 0, 0, 0.77778], + "8935": [0.23222, 0.74111, 0, 0, 0.77778], + "8936": [0.23222, 0.74111, 0, 0, 0.77778], + "8937": [0.23222, 0.74111, 0, 0, 0.77778], + "8938": [0.20576, 0.70576, 0, 0, 0.77778], + "8939": [0.20576, 0.70576, 0, 0, 0.77778], + "8940": [0.30274, 0.79383, 0, 0, 0.77778], + "8941": [0.30274, 0.79383, 0, 0, 0.77778], + "8994": [0.19444, 0.69224, 0, 0, 0.77778], + "8995": [0.19444, 0.69224, 0, 0, 0.77778], + "9416": [0.15559, 0.69224, 0, 0, 0.90222], + "9484": [0, 0.69224, 0, 0, 0.5], + "9488": [0, 0.69224, 0, 0, 0.5], + "9492": [0, 0.37788, 0, 0, 0.5], + "9496": [0, 0.37788, 0, 0, 0.5], + "9585": [0.19444, 0.68889, 0, 0, 0.88889], + "9586": [0.19444, 0.74111, 0, 0, 0.88889], + "9632": [0, 0.675, 0, 0, 0.77778], + "9633": [0, 0.675, 0, 0, 0.77778], + "9650": [0, 0.54986, 0, 0, 0.72222], + "9651": [0, 0.54986, 0, 0, 0.72222], + "9654": [0.03517, 0.54986, 0, 0, 0.77778], + "9660": [0, 0.54986, 0, 0, 0.72222], + "9661": [0, 0.54986, 0, 0, 0.72222], + "9664": [0.03517, 0.54986, 0, 0, 0.77778], + "9674": [0.11111, 0.69224, 0, 0, 0.66667], + "9733": [0.19444, 0.69224, 0, 0, 0.94445], + "10003": [0, 0.69224, 0, 0, 0.83334], + "10016": [0, 0.69224, 0, 0, 0.83334], + "10731": [0.11111, 0.69224, 0, 0, 0.66667], + "10846": [0.19444, 0.75583, 0, 0, 0.61111], + "10877": [0.13667, 0.63667, 0, 0, 0.77778], + "10878": [0.13667, 0.63667, 0, 0, 0.77778], + "10885": [0.25583, 0.75583, 0, 0, 0.77778], + "10886": [0.25583, 0.75583, 0, 0, 0.77778], + "10887": [0.13597, 0.63597, 0, 0, 0.77778], + "10888": [0.13597, 0.63597, 0, 0, 0.77778], + "10889": [0.26167, 0.75726, 0, 0, 0.77778], + "10890": [0.26167, 0.75726, 0, 0, 0.77778], + "10891": [0.48256, 0.98256, 0, 0, 0.77778], + "10892": [0.48256, 0.98256, 0, 0, 0.77778], + "10901": [0.13667, 0.63667, 0, 0, 0.77778], + "10902": [0.13667, 0.63667, 0, 0, 0.77778], + "10933": [0.25142, 0.75726, 0, 0, 0.77778], + "10934": [0.25142, 0.75726, 0, 0, 0.77778], + "10935": [0.26167, 0.75726, 0, 0, 0.77778], + "10936": [0.26167, 0.75726, 0, 0, 0.77778], + "10937": [0.26167, 0.75726, 0, 0, 0.77778], + "10938": [0.26167, 0.75726, 0, 0, 0.77778], + "10949": [0.25583, 0.75583, 0, 0, 0.77778], + "10950": [0.25583, 0.75583, 0, 0, 0.77778], + "10955": [0.28481, 0.79383, 0, 0, 0.77778], + "10956": [0.28481, 0.79383, 0, 0, 0.77778], + "57350": [0.08167, 0.58167, 0, 0, 0.22222], + "57351": [0.08167, 0.58167, 0, 0, 0.38889], + "57352": [0.08167, 0.58167, 0, 0, 0.77778], + "57353": [0, 0.43056, 0.04028, 0, 0.66667], + "57356": [0.25142, 0.75726, 0, 0, 0.77778], + "57357": [0.25142, 0.75726, 0, 0, 0.77778], + "57358": [0.41951, 0.91951, 0, 0, 0.77778], + "57359": [0.30274, 0.79383, 0, 0, 0.77778], + "57360": [0.30274, 0.79383, 0, 0, 0.77778], + "57361": [0.41951, 0.91951, 0, 0, 0.77778], + "57366": [0.25142, 0.75726, 0, 0, 0.77778], + "57367": [0.25142, 0.75726, 0, 0, 0.77778], + "57368": [0.25142, 0.75726, 0, 0, 0.77778], + "57369": [0.25142, 0.75726, 0, 0, 0.77778], + "57370": [0.13597, 0.63597, 0, 0, 0.77778], + "57371": [0.13597, 0.63597, 0, 0, 0.77778] + }, + "Caligraphic-Regular": { + "32": [0, 0, 0, 0, 0.25], + "65": [0, 0.68333, 0, 0.19445, 0.79847], + "66": [0, 0.68333, 0.03041, 0.13889, 0.65681], + "67": [0, 0.68333, 0.05834, 0.13889, 0.52653], + "68": [0, 0.68333, 0.02778, 0.08334, 0.77139], + "69": [0, 0.68333, 0.08944, 0.11111, 0.52778], + "70": [0, 0.68333, 0.09931, 0.11111, 0.71875], + "71": [0.09722, 0.68333, 0.0593, 0.11111, 0.59487], + "72": [0, 0.68333, 0.00965, 0.11111, 0.84452], + "73": [0, 0.68333, 0.07382, 0, 0.54452], + "74": [0.09722, 0.68333, 0.18472, 0.16667, 0.67778], + "75": [0, 0.68333, 0.01445, 0.05556, 0.76195], + "76": [0, 0.68333, 0, 0.13889, 0.68972], + "77": [0, 0.68333, 0, 0.13889, 1.2009], + "78": [0, 0.68333, 0.14736, 0.08334, 0.82049], + "79": [0, 0.68333, 0.02778, 0.11111, 0.79611], + "80": [0, 0.68333, 0.08222, 0.08334, 0.69556], + "81": [0.09722, 0.68333, 0, 0.11111, 0.81667], + "82": [0, 0.68333, 0, 0.08334, 0.8475], + "83": [0, 0.68333, 0.075, 0.13889, 0.60556], + "84": [0, 0.68333, 0.25417, 0, 0.54464], + "85": [0, 0.68333, 0.09931, 0.08334, 0.62583], + "86": [0, 0.68333, 0.08222, 0, 0.61278], + "87": [0, 0.68333, 0.08222, 0.08334, 0.98778], + "88": [0, 0.68333, 0.14643, 0.13889, 0.7133], + "89": [0.09722, 0.68333, 0.08222, 0.08334, 0.66834], + "90": [0, 0.68333, 0.07944, 0.13889, 0.72473], + "160": [0, 0, 0, 0, 0.25] + }, + "Fraktur-Regular": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69141, 0, 0, 0.29574], + "34": [0, 0.69141, 0, 0, 0.21471], + "38": [0, 0.69141, 0, 0, 0.73786], + "39": [0, 0.69141, 0, 0, 0.21201], + "40": [0.24982, 0.74947, 0, 0, 0.38865], + "41": [0.24982, 0.74947, 0, 0, 0.38865], + "42": [0, 0.62119, 0, 0, 0.27764], + "43": [0.08319, 0.58283, 0, 0, 0.75623], + "44": [0, 0.10803, 0, 0, 0.27764], + "45": [0.08319, 0.58283, 0, 0, 0.75623], + "46": [0, 0.10803, 0, 0, 0.27764], + "47": [0.24982, 0.74947, 0, 0, 0.50181], + "48": [0, 0.47534, 0, 0, 0.50181], + "49": [0, 0.47534, 0, 0, 0.50181], + "50": [0, 0.47534, 0, 0, 0.50181], + "51": [0.18906, 0.47534, 0, 0, 0.50181], + "52": [0.18906, 0.47534, 0, 0, 0.50181], + "53": [0.18906, 0.47534, 0, 0, 0.50181], + "54": [0, 0.69141, 0, 0, 0.50181], + "55": [0.18906, 0.47534, 0, 0, 0.50181], + "56": [0, 0.69141, 0, 0, 0.50181], + "57": [0.18906, 0.47534, 0, 0, 0.50181], + "58": [0, 0.47534, 0, 0, 0.21606], + "59": [0.12604, 0.47534, 0, 0, 0.21606], + "61": [-0.13099, 0.36866, 0, 0, 0.75623], + "63": [0, 0.69141, 0, 0, 0.36245], + "65": [0, 0.69141, 0, 0, 0.7176], + "66": [0, 0.69141, 0, 0, 0.88397], + "67": [0, 0.69141, 0, 0, 0.61254], + "68": [0, 0.69141, 0, 0, 0.83158], + "69": [0, 0.69141, 0, 0, 0.66278], + "70": [0.12604, 0.69141, 0, 0, 0.61119], + "71": [0, 0.69141, 0, 0, 0.78539], + "72": [0.06302, 0.69141, 0, 0, 0.7203], + "73": [0, 0.69141, 0, 0, 0.55448], + "74": [0.12604, 0.69141, 0, 0, 0.55231], + "75": [0, 0.69141, 0, 0, 0.66845], + "76": [0, 0.69141, 0, 0, 0.66602], + "77": [0, 0.69141, 0, 0, 1.04953], + "78": [0, 0.69141, 0, 0, 0.83212], + "79": [0, 0.69141, 0, 0, 0.82699], + "80": [0.18906, 0.69141, 0, 0, 0.82753], + "81": [0.03781, 0.69141, 0, 0, 0.82699], + "82": [0, 0.69141, 0, 0, 0.82807], + "83": [0, 0.69141, 0, 0, 0.82861], + "84": [0, 0.69141, 0, 0, 0.66899], + "85": [0, 0.69141, 0, 0, 0.64576], + "86": [0, 0.69141, 0, 0, 0.83131], + "87": [0, 0.69141, 0, 0, 1.04602], + "88": [0, 0.69141, 0, 0, 0.71922], + "89": [0.18906, 0.69141, 0, 0, 0.83293], + "90": [0.12604, 0.69141, 0, 0, 0.60201], + "91": [0.24982, 0.74947, 0, 0, 0.27764], + "93": [0.24982, 0.74947, 0, 0, 0.27764], + "94": [0, 0.69141, 0, 0, 0.49965], + "97": [0, 0.47534, 0, 0, 0.50046], + "98": [0, 0.69141, 0, 0, 0.51315], + "99": [0, 0.47534, 0, 0, 0.38946], + "100": [0, 0.62119, 0, 0, 0.49857], + "101": [0, 0.47534, 0, 0, 0.40053], + "102": [0.18906, 0.69141, 0, 0, 0.32626], + "103": [0.18906, 0.47534, 0, 0, 0.5037], + "104": [0.18906, 0.69141, 0, 0, 0.52126], + "105": [0, 0.69141, 0, 0, 0.27899], + "106": [0, 0.69141, 0, 0, 0.28088], + "107": [0, 0.69141, 0, 0, 0.38946], + "108": [0, 0.69141, 0, 0, 0.27953], + "109": [0, 0.47534, 0, 0, 0.76676], + "110": [0, 0.47534, 0, 0, 0.52666], + "111": [0, 0.47534, 0, 0, 0.48885], + "112": [0.18906, 0.52396, 0, 0, 0.50046], + "113": [0.18906, 0.47534, 0, 0, 0.48912], + "114": [0, 0.47534, 0, 0, 0.38919], + "115": [0, 0.47534, 0, 0, 0.44266], + "116": [0, 0.62119, 0, 0, 0.33301], + "117": [0, 0.47534, 0, 0, 0.5172], + "118": [0, 0.52396, 0, 0, 0.5118], + "119": [0, 0.52396, 0, 0, 0.77351], + "120": [0.18906, 0.47534, 0, 0, 0.38865], + "121": [0.18906, 0.47534, 0, 0, 0.49884], + "122": [0.18906, 0.47534, 0, 0, 0.39054], + "160": [0, 0, 0, 0, 0.25], + "8216": [0, 0.69141, 0, 0, 0.21471], + "8217": [0, 0.69141, 0, 0, 0.21471], + "58112": [0, 0.62119, 0, 0, 0.49749], + "58113": [0, 0.62119, 0, 0, 0.4983], + "58114": [0.18906, 0.69141, 0, 0, 0.33328], + "58115": [0.18906, 0.69141, 0, 0, 0.32923], + "58116": [0.18906, 0.47534, 0, 0, 0.50343], + "58117": [0, 0.69141, 0, 0, 0.33301], + "58118": [0, 0.62119, 0, 0, 0.33409], + "58119": [0, 0.47534, 0, 0, 0.50073] + }, + "Main-Bold": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69444, 0, 0, 0.35], + "34": [0, 0.69444, 0, 0, 0.60278], + "35": [0.19444, 0.69444, 0, 0, 0.95833], + "36": [0.05556, 0.75, 0, 0, 0.575], + "37": [0.05556, 0.75, 0, 0, 0.95833], + "38": [0, 0.69444, 0, 0, 0.89444], + "39": [0, 0.69444, 0, 0, 0.31944], + "40": [0.25, 0.75, 0, 0, 0.44722], + "41": [0.25, 0.75, 0, 0, 0.44722], + "42": [0, 0.75, 0, 0, 0.575], + "43": [0.13333, 0.63333, 0, 0, 0.89444], + "44": [0.19444, 0.15556, 0, 0, 0.31944], + "45": [0, 0.44444, 0, 0, 0.38333], + "46": [0, 0.15556, 0, 0, 0.31944], + "47": [0.25, 0.75, 0, 0, 0.575], + "48": [0, 0.64444, 0, 0, 0.575], + "49": [0, 0.64444, 0, 0, 0.575], + "50": [0, 0.64444, 0, 0, 0.575], + "51": [0, 0.64444, 0, 0, 0.575], + "52": [0, 0.64444, 0, 0, 0.575], + "53": [0, 0.64444, 0, 0, 0.575], + "54": [0, 0.64444, 0, 0, 0.575], + "55": [0, 0.64444, 0, 0, 0.575], + "56": [0, 0.64444, 0, 0, 0.575], + "57": [0, 0.64444, 0, 0, 0.575], + "58": [0, 0.44444, 0, 0, 0.31944], + "59": [0.19444, 0.44444, 0, 0, 0.31944], + "60": [0.08556, 0.58556, 0, 0, 0.89444], + "61": [-0.10889, 0.39111, 0, 0, 0.89444], + "62": [0.08556, 0.58556, 0, 0, 0.89444], + "63": [0, 0.69444, 0, 0, 0.54305], + "64": [0, 0.69444, 0, 0, 0.89444], + "65": [0, 0.68611, 0, 0, 0.86944], + "66": [0, 0.68611, 0, 0, 0.81805], + "67": [0, 0.68611, 0, 0, 0.83055], + "68": [0, 0.68611, 0, 0, 0.88194], + "69": [0, 0.68611, 0, 0, 0.75555], + "70": [0, 0.68611, 0, 0, 0.72361], + "71": [0, 0.68611, 0, 0, 0.90416], + "72": [0, 0.68611, 0, 0, 0.9], + "73": [0, 0.68611, 0, 0, 0.43611], + "74": [0, 0.68611, 0, 0, 0.59444], + "75": [0, 0.68611, 0, 0, 0.90138], + "76": [0, 0.68611, 0, 0, 0.69166], + "77": [0, 0.68611, 0, 0, 1.09166], + "78": [0, 0.68611, 0, 0, 0.9], + "79": [0, 0.68611, 0, 0, 0.86388], + "80": [0, 0.68611, 0, 0, 0.78611], + "81": [0.19444, 0.68611, 0, 0, 0.86388], + "82": [0, 0.68611, 0, 0, 0.8625], + "83": [0, 0.68611, 0, 0, 0.63889], + "84": [0, 0.68611, 0, 0, 0.8], + "85": [0, 0.68611, 0, 0, 0.88472], + "86": [0, 0.68611, 0.01597, 0, 0.86944], + "87": [0, 0.68611, 0.01597, 0, 1.18888], + "88": [0, 0.68611, 0, 0, 0.86944], + "89": [0, 0.68611, 0.02875, 0, 0.86944], + "90": [0, 0.68611, 0, 0, 0.70277], + "91": [0.25, 0.75, 0, 0, 0.31944], + "92": [0.25, 0.75, 0, 0, 0.575], + "93": [0.25, 0.75, 0, 0, 0.31944], + "94": [0, 0.69444, 0, 0, 0.575], + "95": [0.31, 0.13444, 0.03194, 0, 0.575], + "97": [0, 0.44444, 0, 0, 0.55902], + "98": [0, 0.69444, 0, 0, 0.63889], + "99": [0, 0.44444, 0, 0, 0.51111], + "100": [0, 0.69444, 0, 0, 0.63889], + "101": [0, 0.44444, 0, 0, 0.52708], + "102": [0, 0.69444, 0.10903, 0, 0.35139], + "103": [0.19444, 0.44444, 0.01597, 0, 0.575], + "104": [0, 0.69444, 0, 0, 0.63889], + "105": [0, 0.69444, 0, 0, 0.31944], + "106": [0.19444, 0.69444, 0, 0, 0.35139], + "107": [0, 0.69444, 0, 0, 0.60694], + "108": [0, 0.69444, 0, 0, 0.31944], + "109": [0, 0.44444, 0, 0, 0.95833], + "110": [0, 0.44444, 0, 0, 0.63889], + "111": [0, 0.44444, 0, 0, 0.575], + "112": [0.19444, 0.44444, 0, 0, 0.63889], + "113": [0.19444, 0.44444, 0, 0, 0.60694], + "114": [0, 0.44444, 0, 0, 0.47361], + "115": [0, 0.44444, 0, 0, 0.45361], + "116": [0, 0.63492, 0, 0, 0.44722], + "117": [0, 0.44444, 0, 0, 0.63889], + "118": [0, 0.44444, 0.01597, 0, 0.60694], + "119": [0, 0.44444, 0.01597, 0, 0.83055], + "120": [0, 0.44444, 0, 0, 0.60694], + "121": [0.19444, 0.44444, 0.01597, 0, 0.60694], + "122": [0, 0.44444, 0, 0, 0.51111], + "123": [0.25, 0.75, 0, 0, 0.575], + "124": [0.25, 0.75, 0, 0, 0.31944], + "125": [0.25, 0.75, 0, 0, 0.575], + "126": [0.35, 0.34444, 0, 0, 0.575], + "160": [0, 0, 0, 0, 0.25], + "163": [0, 0.69444, 0, 0, 0.86853], + "168": [0, 0.69444, 0, 0, 0.575], + "172": [0, 0.44444, 0, 0, 0.76666], + "176": [0, 0.69444, 0, 0, 0.86944], + "177": [0.13333, 0.63333, 0, 0, 0.89444], + "184": [0.17014, 0, 0, 0, 0.51111], + "198": [0, 0.68611, 0, 0, 1.04166], + "215": [0.13333, 0.63333, 0, 0, 0.89444], + "216": [0.04861, 0.73472, 0, 0, 0.89444], + "223": [0, 0.69444, 0, 0, 0.59722], + "230": [0, 0.44444, 0, 0, 0.83055], + "247": [0.13333, 0.63333, 0, 0, 0.89444], + "248": [0.09722, 0.54167, 0, 0, 0.575], + "305": [0, 0.44444, 0, 0, 0.31944], + "338": [0, 0.68611, 0, 0, 1.16944], + "339": [0, 0.44444, 0, 0, 0.89444], + "567": [0.19444, 0.44444, 0, 0, 0.35139], + "710": [0, 0.69444, 0, 0, 0.575], + "711": [0, 0.63194, 0, 0, 0.575], + "713": [0, 0.59611, 0, 0, 0.575], + "714": [0, 0.69444, 0, 0, 0.575], + "715": [0, 0.69444, 0, 0, 0.575], + "728": [0, 0.69444, 0, 0, 0.575], + "729": [0, 0.69444, 0, 0, 0.31944], + "730": [0, 0.69444, 0, 0, 0.86944], + "732": [0, 0.69444, 0, 0, 0.575], + "733": [0, 0.69444, 0, 0, 0.575], + "915": [0, 0.68611, 0, 0, 0.69166], + "916": [0, 0.68611, 0, 0, 0.95833], + "920": [0, 0.68611, 0, 0, 0.89444], + "923": [0, 0.68611, 0, 0, 0.80555], + "926": [0, 0.68611, 0, 0, 0.76666], + "928": [0, 0.68611, 0, 0, 0.9], + "931": [0, 0.68611, 0, 0, 0.83055], + "933": [0, 0.68611, 0, 0, 0.89444], + "934": [0, 0.68611, 0, 0, 0.83055], + "936": [0, 0.68611, 0, 0, 0.89444], + "937": [0, 0.68611, 0, 0, 0.83055], + "8211": [0, 0.44444, 0.03194, 0, 0.575], + "8212": [0, 0.44444, 0.03194, 0, 1.14999], + "8216": [0, 0.69444, 0, 0, 0.31944], + "8217": [0, 0.69444, 0, 0, 0.31944], + "8220": [0, 0.69444, 0, 0, 0.60278], + "8221": [0, 0.69444, 0, 0, 0.60278], + "8224": [0.19444, 0.69444, 0, 0, 0.51111], + "8225": [0.19444, 0.69444, 0, 0, 0.51111], + "8242": [0, 0.55556, 0, 0, 0.34444], + "8407": [0, 0.72444, 0.15486, 0, 0.575], + "8463": [0, 0.69444, 0, 0, 0.66759], + "8465": [0, 0.69444, 0, 0, 0.83055], + "8467": [0, 0.69444, 0, 0, 0.47361], + "8472": [0.19444, 0.44444, 0, 0, 0.74027], + "8476": [0, 0.69444, 0, 0, 0.83055], + "8501": [0, 0.69444, 0, 0, 0.70277], + "8592": [-0.10889, 0.39111, 0, 0, 1.14999], + "8593": [0.19444, 0.69444, 0, 0, 0.575], + "8594": [-0.10889, 0.39111, 0, 0, 1.14999], + "8595": [0.19444, 0.69444, 0, 0, 0.575], + "8596": [-0.10889, 0.39111, 0, 0, 1.14999], + "8597": [0.25, 0.75, 0, 0, 0.575], + "8598": [0.19444, 0.69444, 0, 0, 1.14999], + "8599": [0.19444, 0.69444, 0, 0, 1.14999], + "8600": [0.19444, 0.69444, 0, 0, 1.14999], + "8601": [0.19444, 0.69444, 0, 0, 1.14999], + "8636": [-0.10889, 0.39111, 0, 0, 1.14999], + "8637": [-0.10889, 0.39111, 0, 0, 1.14999], + "8640": [-0.10889, 0.39111, 0, 0, 1.14999], + "8641": [-0.10889, 0.39111, 0, 0, 1.14999], + "8656": [-0.10889, 0.39111, 0, 0, 1.14999], + "8657": [0.19444, 0.69444, 0, 0, 0.70277], + "8658": [-0.10889, 0.39111, 0, 0, 1.14999], + "8659": [0.19444, 0.69444, 0, 0, 0.70277], + "8660": [-0.10889, 0.39111, 0, 0, 1.14999], + "8661": [0.25, 0.75, 0, 0, 0.70277], + "8704": [0, 0.69444, 0, 0, 0.63889], + "8706": [0, 0.69444, 0.06389, 0, 0.62847], + "8707": [0, 0.69444, 0, 0, 0.63889], + "8709": [0.05556, 0.75, 0, 0, 0.575], + "8711": [0, 0.68611, 0, 0, 0.95833], + "8712": [0.08556, 0.58556, 0, 0, 0.76666], + "8715": [0.08556, 0.58556, 0, 0, 0.76666], + "8722": [0.13333, 0.63333, 0, 0, 0.89444], + "8723": [0.13333, 0.63333, 0, 0, 0.89444], + "8725": [0.25, 0.75, 0, 0, 0.575], + "8726": [0.25, 0.75, 0, 0, 0.575], + "8727": [-0.02778, 0.47222, 0, 0, 0.575], + "8728": [-0.02639, 0.47361, 0, 0, 0.575], + "8729": [-0.02639, 0.47361, 0, 0, 0.575], + "8730": [0.18, 0.82, 0, 0, 0.95833], + "8733": [0, 0.44444, 0, 0, 0.89444], + "8734": [0, 0.44444, 0, 0, 1.14999], + "8736": [0, 0.69224, 0, 0, 0.72222], + "8739": [0.25, 0.75, 0, 0, 0.31944], + "8741": [0.25, 0.75, 0, 0, 0.575], + "8743": [0, 0.55556, 0, 0, 0.76666], + "8744": [0, 0.55556, 0, 0, 0.76666], + "8745": [0, 0.55556, 0, 0, 0.76666], + "8746": [0, 0.55556, 0, 0, 0.76666], + "8747": [0.19444, 0.69444, 0.12778, 0, 0.56875], + "8764": [-0.10889, 0.39111, 0, 0, 0.89444], + "8768": [0.19444, 0.69444, 0, 0, 0.31944], + "8771": [0.00222, 0.50222, 0, 0, 0.89444], + "8773": [0.027, 0.638, 0, 0, 0.894], + "8776": [0.02444, 0.52444, 0, 0, 0.89444], + "8781": [0.00222, 0.50222, 0, 0, 0.89444], + "8801": [0.00222, 0.50222, 0, 0, 0.89444], + "8804": [0.19667, 0.69667, 0, 0, 0.89444], + "8805": [0.19667, 0.69667, 0, 0, 0.89444], + "8810": [0.08556, 0.58556, 0, 0, 1.14999], + "8811": [0.08556, 0.58556, 0, 0, 1.14999], + "8826": [0.08556, 0.58556, 0, 0, 0.89444], + "8827": [0.08556, 0.58556, 0, 0, 0.89444], + "8834": [0.08556, 0.58556, 0, 0, 0.89444], + "8835": [0.08556, 0.58556, 0, 0, 0.89444], + "8838": [0.19667, 0.69667, 0, 0, 0.89444], + "8839": [0.19667, 0.69667, 0, 0, 0.89444], + "8846": [0, 0.55556, 0, 0, 0.76666], + "8849": [0.19667, 0.69667, 0, 0, 0.89444], + "8850": [0.19667, 0.69667, 0, 0, 0.89444], + "8851": [0, 0.55556, 0, 0, 0.76666], + "8852": [0, 0.55556, 0, 0, 0.76666], + "8853": [0.13333, 0.63333, 0, 0, 0.89444], + "8854": [0.13333, 0.63333, 0, 0, 0.89444], + "8855": [0.13333, 0.63333, 0, 0, 0.89444], + "8856": [0.13333, 0.63333, 0, 0, 0.89444], + "8857": [0.13333, 0.63333, 0, 0, 0.89444], + "8866": [0, 0.69444, 0, 0, 0.70277], + "8867": [0, 0.69444, 0, 0, 0.70277], + "8868": [0, 0.69444, 0, 0, 0.89444], + "8869": [0, 0.69444, 0, 0, 0.89444], + "8900": [-0.02639, 0.47361, 0, 0, 0.575], + "8901": [-0.02639, 0.47361, 0, 0, 0.31944], + "8902": [-0.02778, 0.47222, 0, 0, 0.575], + "8968": [0.25, 0.75, 0, 0, 0.51111], + "8969": [0.25, 0.75, 0, 0, 0.51111], + "8970": [0.25, 0.75, 0, 0, 0.51111], + "8971": [0.25, 0.75, 0, 0, 0.51111], + "8994": [-0.13889, 0.36111, 0, 0, 1.14999], + "8995": [-0.13889, 0.36111, 0, 0, 1.14999], + "9651": [0.19444, 0.69444, 0, 0, 1.02222], + "9657": [-0.02778, 0.47222, 0, 0, 0.575], + "9661": [0.19444, 0.69444, 0, 0, 1.02222], + "9667": [-0.02778, 0.47222, 0, 0, 0.575], + "9711": [0.19444, 0.69444, 0, 0, 1.14999], + "9824": [0.12963, 0.69444, 0, 0, 0.89444], + "9825": [0.12963, 0.69444, 0, 0, 0.89444], + "9826": [0.12963, 0.69444, 0, 0, 0.89444], + "9827": [0.12963, 0.69444, 0, 0, 0.89444], + "9837": [0, 0.75, 0, 0, 0.44722], + "9838": [0.19444, 0.69444, 0, 0, 0.44722], + "9839": [0.19444, 0.69444, 0, 0, 0.44722], + "10216": [0.25, 0.75, 0, 0, 0.44722], + "10217": [0.25, 0.75, 0, 0, 0.44722], + "10815": [0, 0.68611, 0, 0, 0.9], + "10927": [0.19667, 0.69667, 0, 0, 0.89444], + "10928": [0.19667, 0.69667, 0, 0, 0.89444], + "57376": [0.19444, 0.69444, 0, 0, 0] + }, + "Main-BoldItalic": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69444, 0.11417, 0, 0.38611], + "34": [0, 0.69444, 0.07939, 0, 0.62055], + "35": [0.19444, 0.69444, 0.06833, 0, 0.94444], + "37": [0.05556, 0.75, 0.12861, 0, 0.94444], + "38": [0, 0.69444, 0.08528, 0, 0.88555], + "39": [0, 0.69444, 0.12945, 0, 0.35555], + "40": [0.25, 0.75, 0.15806, 0, 0.47333], + "41": [0.25, 0.75, 0.03306, 0, 0.47333], + "42": [0, 0.75, 0.14333, 0, 0.59111], + "43": [0.10333, 0.60333, 0.03306, 0, 0.88555], + "44": [0.19444, 0.14722, 0, 0, 0.35555], + "45": [0, 0.44444, 0.02611, 0, 0.41444], + "46": [0, 0.14722, 0, 0, 0.35555], + "47": [0.25, 0.75, 0.15806, 0, 0.59111], + "48": [0, 0.64444, 0.13167, 0, 0.59111], + "49": [0, 0.64444, 0.13167, 0, 0.59111], + "50": [0, 0.64444, 0.13167, 0, 0.59111], + "51": [0, 0.64444, 0.13167, 0, 0.59111], + "52": [0.19444, 0.64444, 0.13167, 0, 0.59111], + "53": [0, 0.64444, 0.13167, 0, 0.59111], + "54": [0, 0.64444, 0.13167, 0, 0.59111], + "55": [0.19444, 0.64444, 0.13167, 0, 0.59111], + "56": [0, 0.64444, 0.13167, 0, 0.59111], + "57": [0, 0.64444, 0.13167, 0, 0.59111], + "58": [0, 0.44444, 0.06695, 0, 0.35555], + "59": [0.19444, 0.44444, 0.06695, 0, 0.35555], + "61": [-0.10889, 0.39111, 0.06833, 0, 0.88555], + "63": [0, 0.69444, 0.11472, 0, 0.59111], + "64": [0, 0.69444, 0.09208, 0, 0.88555], + "65": [0, 0.68611, 0, 0, 0.86555], + "66": [0, 0.68611, 0.0992, 0, 0.81666], + "67": [0, 0.68611, 0.14208, 0, 0.82666], + "68": [0, 0.68611, 0.09062, 0, 0.87555], + "69": [0, 0.68611, 0.11431, 0, 0.75666], + "70": [0, 0.68611, 0.12903, 0, 0.72722], + "71": [0, 0.68611, 0.07347, 0, 0.89527], + "72": [0, 0.68611, 0.17208, 0, 0.8961], + "73": [0, 0.68611, 0.15681, 0, 0.47166], + "74": [0, 0.68611, 0.145, 0, 0.61055], + "75": [0, 0.68611, 0.14208, 0, 0.89499], + "76": [0, 0.68611, 0, 0, 0.69777], + "77": [0, 0.68611, 0.17208, 0, 1.07277], + "78": [0, 0.68611, 0.17208, 0, 0.8961], + "79": [0, 0.68611, 0.09062, 0, 0.85499], + "80": [0, 0.68611, 0.0992, 0, 0.78721], + "81": [0.19444, 0.68611, 0.09062, 0, 0.85499], + "82": [0, 0.68611, 0.02559, 0, 0.85944], + "83": [0, 0.68611, 0.11264, 0, 0.64999], + "84": [0, 0.68611, 0.12903, 0, 0.7961], + "85": [0, 0.68611, 0.17208, 0, 0.88083], + "86": [0, 0.68611, 0.18625, 0, 0.86555], + "87": [0, 0.68611, 0.18625, 0, 1.15999], + "88": [0, 0.68611, 0.15681, 0, 0.86555], + "89": [0, 0.68611, 0.19803, 0, 0.86555], + "90": [0, 0.68611, 0.14208, 0, 0.70888], + "91": [0.25, 0.75, 0.1875, 0, 0.35611], + "93": [0.25, 0.75, 0.09972, 0, 0.35611], + "94": [0, 0.69444, 0.06709, 0, 0.59111], + "95": [0.31, 0.13444, 0.09811, 0, 0.59111], + "97": [0, 0.44444, 0.09426, 0, 0.59111], + "98": [0, 0.69444, 0.07861, 0, 0.53222], + "99": [0, 0.44444, 0.05222, 0, 0.53222], + "100": [0, 0.69444, 0.10861, 0, 0.59111], + "101": [0, 0.44444, 0.085, 0, 0.53222], + "102": [0.19444, 0.69444, 0.21778, 0, 0.4], + "103": [0.19444, 0.44444, 0.105, 0, 0.53222], + "104": [0, 0.69444, 0.09426, 0, 0.59111], + "105": [0, 0.69326, 0.11387, 0, 0.35555], + "106": [0.19444, 0.69326, 0.1672, 0, 0.35555], + "107": [0, 0.69444, 0.11111, 0, 0.53222], + "108": [0, 0.69444, 0.10861, 0, 0.29666], + "109": [0, 0.44444, 0.09426, 0, 0.94444], + "110": [0, 0.44444, 0.09426, 0, 0.64999], + "111": [0, 0.44444, 0.07861, 0, 0.59111], + "112": [0.19444, 0.44444, 0.07861, 0, 0.59111], + "113": [0.19444, 0.44444, 0.105, 0, 0.53222], + "114": [0, 0.44444, 0.11111, 0, 0.50167], + "115": [0, 0.44444, 0.08167, 0, 0.48694], + "116": [0, 0.63492, 0.09639, 0, 0.385], + "117": [0, 0.44444, 0.09426, 0, 0.62055], + "118": [0, 0.44444, 0.11111, 0, 0.53222], + "119": [0, 0.44444, 0.11111, 0, 0.76777], + "120": [0, 0.44444, 0.12583, 0, 0.56055], + "121": [0.19444, 0.44444, 0.105, 0, 0.56166], + "122": [0, 0.44444, 0.13889, 0, 0.49055], + "126": [0.35, 0.34444, 0.11472, 0, 0.59111], + "160": [0, 0, 0, 0, 0.25], + "168": [0, 0.69444, 0.11473, 0, 0.59111], + "176": [0, 0.69444, 0, 0, 0.94888], + "184": [0.17014, 0, 0, 0, 0.53222], + "198": [0, 0.68611, 0.11431, 0, 1.02277], + "216": [0.04861, 0.73472, 0.09062, 0, 0.88555], + "223": [0.19444, 0.69444, 0.09736, 0, 0.665], + "230": [0, 0.44444, 0.085, 0, 0.82666], + "248": [0.09722, 0.54167, 0.09458, 0, 0.59111], + "305": [0, 0.44444, 0.09426, 0, 0.35555], + "338": [0, 0.68611, 0.11431, 0, 1.14054], + "339": [0, 0.44444, 0.085, 0, 0.82666], + "567": [0.19444, 0.44444, 0.04611, 0, 0.385], + "710": [0, 0.69444, 0.06709, 0, 0.59111], + "711": [0, 0.63194, 0.08271, 0, 0.59111], + "713": [0, 0.59444, 0.10444, 0, 0.59111], + "714": [0, 0.69444, 0.08528, 0, 0.59111], + "715": [0, 0.69444, 0, 0, 0.59111], + "728": [0, 0.69444, 0.10333, 0, 0.59111], + "729": [0, 0.69444, 0.12945, 0, 0.35555], + "730": [0, 0.69444, 0, 0, 0.94888], + "732": [0, 0.69444, 0.11472, 0, 0.59111], + "733": [0, 0.69444, 0.11472, 0, 0.59111], + "915": [0, 0.68611, 0.12903, 0, 0.69777], + "916": [0, 0.68611, 0, 0, 0.94444], + "920": [0, 0.68611, 0.09062, 0, 0.88555], + "923": [0, 0.68611, 0, 0, 0.80666], + "926": [0, 0.68611, 0.15092, 0, 0.76777], + "928": [0, 0.68611, 0.17208, 0, 0.8961], + "931": [0, 0.68611, 0.11431, 0, 0.82666], + "933": [0, 0.68611, 0.10778, 0, 0.88555], + "934": [0, 0.68611, 0.05632, 0, 0.82666], + "936": [0, 0.68611, 0.10778, 0, 0.88555], + "937": [0, 0.68611, 0.0992, 0, 0.82666], + "8211": [0, 0.44444, 0.09811, 0, 0.59111], + "8212": [0, 0.44444, 0.09811, 0, 1.18221], + "8216": [0, 0.69444, 0.12945, 0, 0.35555], + "8217": [0, 0.69444, 0.12945, 0, 0.35555], + "8220": [0, 0.69444, 0.16772, 0, 0.62055], + "8221": [0, 0.69444, 0.07939, 0, 0.62055] + }, + "Main-Italic": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69444, 0.12417, 0, 0.30667], + "34": [0, 0.69444, 0.06961, 0, 0.51444], + "35": [0.19444, 0.69444, 0.06616, 0, 0.81777], + "37": [0.05556, 0.75, 0.13639, 0, 0.81777], + "38": [0, 0.69444, 0.09694, 0, 0.76666], + "39": [0, 0.69444, 0.12417, 0, 0.30667], + "40": [0.25, 0.75, 0.16194, 0, 0.40889], + "41": [0.25, 0.75, 0.03694, 0, 0.40889], + "42": [0, 0.75, 0.14917, 0, 0.51111], + "43": [0.05667, 0.56167, 0.03694, 0, 0.76666], + "44": [0.19444, 0.10556, 0, 0, 0.30667], + "45": [0, 0.43056, 0.02826, 0, 0.35778], + "46": [0, 0.10556, 0, 0, 0.30667], + "47": [0.25, 0.75, 0.16194, 0, 0.51111], + "48": [0, 0.64444, 0.13556, 0, 0.51111], + "49": [0, 0.64444, 0.13556, 0, 0.51111], + "50": [0, 0.64444, 0.13556, 0, 0.51111], + "51": [0, 0.64444, 0.13556, 0, 0.51111], + "52": [0.19444, 0.64444, 0.13556, 0, 0.51111], + "53": [0, 0.64444, 0.13556, 0, 0.51111], + "54": [0, 0.64444, 0.13556, 0, 0.51111], + "55": [0.19444, 0.64444, 0.13556, 0, 0.51111], + "56": [0, 0.64444, 0.13556, 0, 0.51111], + "57": [0, 0.64444, 0.13556, 0, 0.51111], + "58": [0, 0.43056, 0.0582, 0, 0.30667], + "59": [0.19444, 0.43056, 0.0582, 0, 0.30667], + "61": [-0.13313, 0.36687, 0.06616, 0, 0.76666], + "63": [0, 0.69444, 0.1225, 0, 0.51111], + "64": [0, 0.69444, 0.09597, 0, 0.76666], + "65": [0, 0.68333, 0, 0, 0.74333], + "66": [0, 0.68333, 0.10257, 0, 0.70389], + "67": [0, 0.68333, 0.14528, 0, 0.71555], + "68": [0, 0.68333, 0.09403, 0, 0.755], + "69": [0, 0.68333, 0.12028, 0, 0.67833], + "70": [0, 0.68333, 0.13305, 0, 0.65277], + "71": [0, 0.68333, 0.08722, 0, 0.77361], + "72": [0, 0.68333, 0.16389, 0, 0.74333], + "73": [0, 0.68333, 0.15806, 0, 0.38555], + "74": [0, 0.68333, 0.14028, 0, 0.525], + "75": [0, 0.68333, 0.14528, 0, 0.76888], + "76": [0, 0.68333, 0, 0, 0.62722], + "77": [0, 0.68333, 0.16389, 0, 0.89666], + "78": [0, 0.68333, 0.16389, 0, 0.74333], + "79": [0, 0.68333, 0.09403, 0, 0.76666], + "80": [0, 0.68333, 0.10257, 0, 0.67833], + "81": [0.19444, 0.68333, 0.09403, 0, 0.76666], + "82": [0, 0.68333, 0.03868, 0, 0.72944], + "83": [0, 0.68333, 0.11972, 0, 0.56222], + "84": [0, 0.68333, 0.13305, 0, 0.71555], + "85": [0, 0.68333, 0.16389, 0, 0.74333], + "86": [0, 0.68333, 0.18361, 0, 0.74333], + "87": [0, 0.68333, 0.18361, 0, 0.99888], + "88": [0, 0.68333, 0.15806, 0, 0.74333], + "89": [0, 0.68333, 0.19383, 0, 0.74333], + "90": [0, 0.68333, 0.14528, 0, 0.61333], + "91": [0.25, 0.75, 0.1875, 0, 0.30667], + "93": [0.25, 0.75, 0.10528, 0, 0.30667], + "94": [0, 0.69444, 0.06646, 0, 0.51111], + "95": [0.31, 0.12056, 0.09208, 0, 0.51111], + "97": [0, 0.43056, 0.07671, 0, 0.51111], + "98": [0, 0.69444, 0.06312, 0, 0.46], + "99": [0, 0.43056, 0.05653, 0, 0.46], + "100": [0, 0.69444, 0.10333, 0, 0.51111], + "101": [0, 0.43056, 0.07514, 0, 0.46], + "102": [0.19444, 0.69444, 0.21194, 0, 0.30667], + "103": [0.19444, 0.43056, 0.08847, 0, 0.46], + "104": [0, 0.69444, 0.07671, 0, 0.51111], + "105": [0, 0.65536, 0.1019, 0, 0.30667], + "106": [0.19444, 0.65536, 0.14467, 0, 0.30667], + "107": [0, 0.69444, 0.10764, 0, 0.46], + "108": [0, 0.69444, 0.10333, 0, 0.25555], + "109": [0, 0.43056, 0.07671, 0, 0.81777], + "110": [0, 0.43056, 0.07671, 0, 0.56222], + "111": [0, 0.43056, 0.06312, 0, 0.51111], + "112": [0.19444, 0.43056, 0.06312, 0, 0.51111], + "113": [0.19444, 0.43056, 0.08847, 0, 0.46], + "114": [0, 0.43056, 0.10764, 0, 0.42166], + "115": [0, 0.43056, 0.08208, 0, 0.40889], + "116": [0, 0.61508, 0.09486, 0, 0.33222], + "117": [0, 0.43056, 0.07671, 0, 0.53666], + "118": [0, 0.43056, 0.10764, 0, 0.46], + "119": [0, 0.43056, 0.10764, 0, 0.66444], + "120": [0, 0.43056, 0.12042, 0, 0.46389], + "121": [0.19444, 0.43056, 0.08847, 0, 0.48555], + "122": [0, 0.43056, 0.12292, 0, 0.40889], + "126": [0.35, 0.31786, 0.11585, 0, 0.51111], + "160": [0, 0, 0, 0, 0.25], + "168": [0, 0.66786, 0.10474, 0, 0.51111], + "176": [0, 0.69444, 0, 0, 0.83129], + "184": [0.17014, 0, 0, 0, 0.46], + "198": [0, 0.68333, 0.12028, 0, 0.88277], + "216": [0.04861, 0.73194, 0.09403, 0, 0.76666], + "223": [0.19444, 0.69444, 0.10514, 0, 0.53666], + "230": [0, 0.43056, 0.07514, 0, 0.71555], + "248": [0.09722, 0.52778, 0.09194, 0, 0.51111], + "338": [0, 0.68333, 0.12028, 0, 0.98499], + "339": [0, 0.43056, 0.07514, 0, 0.71555], + "710": [0, 0.69444, 0.06646, 0, 0.51111], + "711": [0, 0.62847, 0.08295, 0, 0.51111], + "713": [0, 0.56167, 0.10333, 0, 0.51111], + "714": [0, 0.69444, 0.09694, 0, 0.51111], + "715": [0, 0.69444, 0, 0, 0.51111], + "728": [0, 0.69444, 0.10806, 0, 0.51111], + "729": [0, 0.66786, 0.11752, 0, 0.30667], + "730": [0, 0.69444, 0, 0, 0.83129], + "732": [0, 0.66786, 0.11585, 0, 0.51111], + "733": [0, 0.69444, 0.1225, 0, 0.51111], + "915": [0, 0.68333, 0.13305, 0, 0.62722], + "916": [0, 0.68333, 0, 0, 0.81777], + "920": [0, 0.68333, 0.09403, 0, 0.76666], + "923": [0, 0.68333, 0, 0, 0.69222], + "926": [0, 0.68333, 0.15294, 0, 0.66444], + "928": [0, 0.68333, 0.16389, 0, 0.74333], + "931": [0, 0.68333, 0.12028, 0, 0.71555], + "933": [0, 0.68333, 0.11111, 0, 0.76666], + "934": [0, 0.68333, 0.05986, 0, 0.71555], + "936": [0, 0.68333, 0.11111, 0, 0.76666], + "937": [0, 0.68333, 0.10257, 0, 0.71555], + "8211": [0, 0.43056, 0.09208, 0, 0.51111], + "8212": [0, 0.43056, 0.09208, 0, 1.02222], + "8216": [0, 0.69444, 0.12417, 0, 0.30667], + "8217": [0, 0.69444, 0.12417, 0, 0.30667], + "8220": [0, 0.69444, 0.1685, 0, 0.51444], + "8221": [0, 0.69444, 0.06961, 0, 0.51444], + "8463": [0, 0.68889, 0, 0, 0.54028] + }, + "Main-Regular": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69444, 0, 0, 0.27778], + "34": [0, 0.69444, 0, 0, 0.5], + "35": [0.19444, 0.69444, 0, 0, 0.83334], + "36": [0.05556, 0.75, 0, 0, 0.5], + "37": [0.05556, 0.75, 0, 0, 0.83334], + "38": [0, 0.69444, 0, 0, 0.77778], + "39": [0, 0.69444, 0, 0, 0.27778], + "40": [0.25, 0.75, 0, 0, 0.38889], + "41": [0.25, 0.75, 0, 0, 0.38889], + "42": [0, 0.75, 0, 0, 0.5], + "43": [0.08333, 0.58333, 0, 0, 0.77778], + "44": [0.19444, 0.10556, 0, 0, 0.27778], + "45": [0, 0.43056, 0, 0, 0.33333], + "46": [0, 0.10556, 0, 0, 0.27778], + "47": [0.25, 0.75, 0, 0, 0.5], + "48": [0, 0.64444, 0, 0, 0.5], + "49": [0, 0.64444, 0, 0, 0.5], + "50": [0, 0.64444, 0, 0, 0.5], + "51": [0, 0.64444, 0, 0, 0.5], + "52": [0, 0.64444, 0, 0, 0.5], + "53": [0, 0.64444, 0, 0, 0.5], + "54": [0, 0.64444, 0, 0, 0.5], + "55": [0, 0.64444, 0, 0, 0.5], + "56": [0, 0.64444, 0, 0, 0.5], + "57": [0, 0.64444, 0, 0, 0.5], + "58": [0, 0.43056, 0, 0, 0.27778], + "59": [0.19444, 0.43056, 0, 0, 0.27778], + "60": [0.0391, 0.5391, 0, 0, 0.77778], + "61": [-0.13313, 0.36687, 0, 0, 0.77778], + "62": [0.0391, 0.5391, 0, 0, 0.77778], + "63": [0, 0.69444, 0, 0, 0.47222], + "64": [0, 0.69444, 0, 0, 0.77778], + "65": [0, 0.68333, 0, 0, 0.75], + "66": [0, 0.68333, 0, 0, 0.70834], + "67": [0, 0.68333, 0, 0, 0.72222], + "68": [0, 0.68333, 0, 0, 0.76389], + "69": [0, 0.68333, 0, 0, 0.68056], + "70": [0, 0.68333, 0, 0, 0.65278], + "71": [0, 0.68333, 0, 0, 0.78472], + "72": [0, 0.68333, 0, 0, 0.75], + "73": [0, 0.68333, 0, 0, 0.36111], + "74": [0, 0.68333, 0, 0, 0.51389], + "75": [0, 0.68333, 0, 0, 0.77778], + "76": [0, 0.68333, 0, 0, 0.625], + "77": [0, 0.68333, 0, 0, 0.91667], + "78": [0, 0.68333, 0, 0, 0.75], + "79": [0, 0.68333, 0, 0, 0.77778], + "80": [0, 0.68333, 0, 0, 0.68056], + "81": [0.19444, 0.68333, 0, 0, 0.77778], + "82": [0, 0.68333, 0, 0, 0.73611], + "83": [0, 0.68333, 0, 0, 0.55556], + "84": [0, 0.68333, 0, 0, 0.72222], + "85": [0, 0.68333, 0, 0, 0.75], + "86": [0, 0.68333, 0.01389, 0, 0.75], + "87": [0, 0.68333, 0.01389, 0, 1.02778], + "88": [0, 0.68333, 0, 0, 0.75], + "89": [0, 0.68333, 0.025, 0, 0.75], + "90": [0, 0.68333, 0, 0, 0.61111], + "91": [0.25, 0.75, 0, 0, 0.27778], + "92": [0.25, 0.75, 0, 0, 0.5], + "93": [0.25, 0.75, 0, 0, 0.27778], + "94": [0, 0.69444, 0, 0, 0.5], + "95": [0.31, 0.12056, 0.02778, 0, 0.5], + "97": [0, 0.43056, 0, 0, 0.5], + "98": [0, 0.69444, 0, 0, 0.55556], + "99": [0, 0.43056, 0, 0, 0.44445], + "100": [0, 0.69444, 0, 0, 0.55556], + "101": [0, 0.43056, 0, 0, 0.44445], + "102": [0, 0.69444, 0.07778, 0, 0.30556], + "103": [0.19444, 0.43056, 0.01389, 0, 0.5], + "104": [0, 0.69444, 0, 0, 0.55556], + "105": [0, 0.66786, 0, 0, 0.27778], + "106": [0.19444, 0.66786, 0, 0, 0.30556], + "107": [0, 0.69444, 0, 0, 0.52778], + "108": [0, 0.69444, 0, 0, 0.27778], + "109": [0, 0.43056, 0, 0, 0.83334], + "110": [0, 0.43056, 0, 0, 0.55556], + "111": [0, 0.43056, 0, 0, 0.5], + "112": [0.19444, 0.43056, 0, 0, 0.55556], + "113": [0.19444, 0.43056, 0, 0, 0.52778], + "114": [0, 0.43056, 0, 0, 0.39167], + "115": [0, 0.43056, 0, 0, 0.39445], + "116": [0, 0.61508, 0, 0, 0.38889], + "117": [0, 0.43056, 0, 0, 0.55556], + "118": [0, 0.43056, 0.01389, 0, 0.52778], + "119": [0, 0.43056, 0.01389, 0, 0.72222], + "120": [0, 0.43056, 0, 0, 0.52778], + "121": [0.19444, 0.43056, 0.01389, 0, 0.52778], + "122": [0, 0.43056, 0, 0, 0.44445], + "123": [0.25, 0.75, 0, 0, 0.5], + "124": [0.25, 0.75, 0, 0, 0.27778], + "125": [0.25, 0.75, 0, 0, 0.5], + "126": [0.35, 0.31786, 0, 0, 0.5], + "160": [0, 0, 0, 0, 0.25], + "163": [0, 0.69444, 0, 0, 0.76909], + "167": [0.19444, 0.69444, 0, 0, 0.44445], + "168": [0, 0.66786, 0, 0, 0.5], + "172": [0, 0.43056, 0, 0, 0.66667], + "176": [0, 0.69444, 0, 0, 0.75], + "177": [0.08333, 0.58333, 0, 0, 0.77778], + "182": [0.19444, 0.69444, 0, 0, 0.61111], + "184": [0.17014, 0, 0, 0, 0.44445], + "198": [0, 0.68333, 0, 0, 0.90278], + "215": [0.08333, 0.58333, 0, 0, 0.77778], + "216": [0.04861, 0.73194, 0, 0, 0.77778], + "223": [0, 0.69444, 0, 0, 0.5], + "230": [0, 0.43056, 0, 0, 0.72222], + "247": [0.08333, 0.58333, 0, 0, 0.77778], + "248": [0.09722, 0.52778, 0, 0, 0.5], + "305": [0, 0.43056, 0, 0, 0.27778], + "338": [0, 0.68333, 0, 0, 1.01389], + "339": [0, 0.43056, 0, 0, 0.77778], + "567": [0.19444, 0.43056, 0, 0, 0.30556], + "710": [0, 0.69444, 0, 0, 0.5], + "711": [0, 0.62847, 0, 0, 0.5], + "713": [0, 0.56778, 0, 0, 0.5], + "714": [0, 0.69444, 0, 0, 0.5], + "715": [0, 0.69444, 0, 0, 0.5], + "728": [0, 0.69444, 0, 0, 0.5], + "729": [0, 0.66786, 0, 0, 0.27778], + "730": [0, 0.69444, 0, 0, 0.75], + "732": [0, 0.66786, 0, 0, 0.5], + "733": [0, 0.69444, 0, 0, 0.5], + "915": [0, 0.68333, 0, 0, 0.625], + "916": [0, 0.68333, 0, 0, 0.83334], + "920": [0, 0.68333, 0, 0, 0.77778], + "923": [0, 0.68333, 0, 0, 0.69445], + "926": [0, 0.68333, 0, 0, 0.66667], + "928": [0, 0.68333, 0, 0, 0.75], + "931": [0, 0.68333, 0, 0, 0.72222], + "933": [0, 0.68333, 0, 0, 0.77778], + "934": [0, 0.68333, 0, 0, 0.72222], + "936": [0, 0.68333, 0, 0, 0.77778], + "937": [0, 0.68333, 0, 0, 0.72222], + "8211": [0, 0.43056, 0.02778, 0, 0.5], + "8212": [0, 0.43056, 0.02778, 0, 1.0], + "8216": [0, 0.69444, 0, 0, 0.27778], + "8217": [0, 0.69444, 0, 0, 0.27778], + "8220": [0, 0.69444, 0, 0, 0.5], + "8221": [0, 0.69444, 0, 0, 0.5], + "8224": [0.19444, 0.69444, 0, 0, 0.44445], + "8225": [0.19444, 0.69444, 0, 0, 0.44445], + "8230": [0, 0.123, 0, 0, 1.172], + "8242": [0, 0.55556, 0, 0, 0.275], + "8407": [0, 0.71444, 0.15382, 0, 0.5], + "8463": [0, 0.68889, 0, 0, 0.54028], + "8465": [0, 0.69444, 0, 0, 0.72222], + "8467": [0, 0.69444, 0, 0.11111, 0.41667], + "8472": [0.19444, 0.43056, 0, 0.11111, 0.63646], + "8476": [0, 0.69444, 0, 0, 0.72222], + "8501": [0, 0.69444, 0, 0, 0.61111], + "8592": [-0.13313, 0.36687, 0, 0, 1.0], + "8593": [0.19444, 0.69444, 0, 0, 0.5], + "8594": [-0.13313, 0.36687, 0, 0, 1.0], + "8595": [0.19444, 0.69444, 0, 0, 0.5], + "8596": [-0.13313, 0.36687, 0, 0, 1.0], + "8597": [0.25, 0.75, 0, 0, 0.5], + "8598": [0.19444, 0.69444, 0, 0, 1.0], + "8599": [0.19444, 0.69444, 0, 0, 1.0], + "8600": [0.19444, 0.69444, 0, 0, 1.0], + "8601": [0.19444, 0.69444, 0, 0, 1.0], + "8614": [0.011, 0.511, 0, 0, 1.0], + "8617": [0.011, 0.511, 0, 0, 1.126], + "8618": [0.011, 0.511, 0, 0, 1.126], + "8636": [-0.13313, 0.36687, 0, 0, 1.0], + "8637": [-0.13313, 0.36687, 0, 0, 1.0], + "8640": [-0.13313, 0.36687, 0, 0, 1.0], + "8641": [-0.13313, 0.36687, 0, 0, 1.0], + "8652": [0.011, 0.671, 0, 0, 1.0], + "8656": [-0.13313, 0.36687, 0, 0, 1.0], + "8657": [0.19444, 0.69444, 0, 0, 0.61111], + "8658": [-0.13313, 0.36687, 0, 0, 1.0], + "8659": [0.19444, 0.69444, 0, 0, 0.61111], + "8660": [-0.13313, 0.36687, 0, 0, 1.0], + "8661": [0.25, 0.75, 0, 0, 0.61111], + "8704": [0, 0.69444, 0, 0, 0.55556], + "8706": [0, 0.69444, 0.05556, 0.08334, 0.5309], + "8707": [0, 0.69444, 0, 0, 0.55556], + "8709": [0.05556, 0.75, 0, 0, 0.5], + "8711": [0, 0.68333, 0, 0, 0.83334], + "8712": [0.0391, 0.5391, 0, 0, 0.66667], + "8715": [0.0391, 0.5391, 0, 0, 0.66667], + "8722": [0.08333, 0.58333, 0, 0, 0.77778], + "8723": [0.08333, 0.58333, 0, 0, 0.77778], + "8725": [0.25, 0.75, 0, 0, 0.5], + "8726": [0.25, 0.75, 0, 0, 0.5], + "8727": [-0.03472, 0.46528, 0, 0, 0.5], + "8728": [-0.05555, 0.44445, 0, 0, 0.5], + "8729": [-0.05555, 0.44445, 0, 0, 0.5], + "8730": [0.2, 0.8, 0, 0, 0.83334], + "8733": [0, 0.43056, 0, 0, 0.77778], + "8734": [0, 0.43056, 0, 0, 1.0], + "8736": [0, 0.69224, 0, 0, 0.72222], + "8739": [0.25, 0.75, 0, 0, 0.27778], + "8741": [0.25, 0.75, 0, 0, 0.5], + "8743": [0, 0.55556, 0, 0, 0.66667], + "8744": [0, 0.55556, 0, 0, 0.66667], + "8745": [0, 0.55556, 0, 0, 0.66667], + "8746": [0, 0.55556, 0, 0, 0.66667], + "8747": [0.19444, 0.69444, 0.11111, 0, 0.41667], + "8764": [-0.13313, 0.36687, 0, 0, 0.77778], + "8768": [0.19444, 0.69444, 0, 0, 0.27778], + "8771": [-0.03625, 0.46375, 0, 0, 0.77778], + "8773": [-0.022, 0.589, 0, 0, 0.778], + "8776": [-0.01688, 0.48312, 0, 0, 0.77778], + "8781": [-0.03625, 0.46375, 0, 0, 0.77778], + "8784": [-0.133, 0.673, 0, 0, 0.778], + "8801": [-0.03625, 0.46375, 0, 0, 0.77778], + "8804": [0.13597, 0.63597, 0, 0, 0.77778], + "8805": [0.13597, 0.63597, 0, 0, 0.77778], + "8810": [0.0391, 0.5391, 0, 0, 1.0], + "8811": [0.0391, 0.5391, 0, 0, 1.0], + "8826": [0.0391, 0.5391, 0, 0, 0.77778], + "8827": [0.0391, 0.5391, 0, 0, 0.77778], + "8834": [0.0391, 0.5391, 0, 0, 0.77778], + "8835": [0.0391, 0.5391, 0, 0, 0.77778], + "8838": [0.13597, 0.63597, 0, 0, 0.77778], + "8839": [0.13597, 0.63597, 0, 0, 0.77778], + "8846": [0, 0.55556, 0, 0, 0.66667], + "8849": [0.13597, 0.63597, 0, 0, 0.77778], + "8850": [0.13597, 0.63597, 0, 0, 0.77778], + "8851": [0, 0.55556, 0, 0, 0.66667], + "8852": [0, 0.55556, 0, 0, 0.66667], + "8853": [0.08333, 0.58333, 0, 0, 0.77778], + "8854": [0.08333, 0.58333, 0, 0, 0.77778], + "8855": [0.08333, 0.58333, 0, 0, 0.77778], + "8856": [0.08333, 0.58333, 0, 0, 0.77778], + "8857": [0.08333, 0.58333, 0, 0, 0.77778], + "8866": [0, 0.69444, 0, 0, 0.61111], + "8867": [0, 0.69444, 0, 0, 0.61111], + "8868": [0, 0.69444, 0, 0, 0.77778], + "8869": [0, 0.69444, 0, 0, 0.77778], + "8872": [0.249, 0.75, 0, 0, 0.867], + "8900": [-0.05555, 0.44445, 0, 0, 0.5], + "8901": [-0.05555, 0.44445, 0, 0, 0.27778], + "8902": [-0.03472, 0.46528, 0, 0, 0.5], + "8904": [0.005, 0.505, 0, 0, 0.9], + "8942": [0.03, 0.903, 0, 0, 0.278], + "8943": [-0.19, 0.313, 0, 0, 1.172], + "8945": [-0.1, 0.823, 0, 0, 1.282], + "8968": [0.25, 0.75, 0, 0, 0.44445], + "8969": [0.25, 0.75, 0, 0, 0.44445], + "8970": [0.25, 0.75, 0, 0, 0.44445], + "8971": [0.25, 0.75, 0, 0, 0.44445], + "8994": [-0.14236, 0.35764, 0, 0, 1.0], + "8995": [-0.14236, 0.35764, 0, 0, 1.0], + "9136": [0.244, 0.744, 0, 0, 0.412], + "9137": [0.244, 0.745, 0, 0, 0.412], + "9651": [0.19444, 0.69444, 0, 0, 0.88889], + "9657": [-0.03472, 0.46528, 0, 0, 0.5], + "9661": [0.19444, 0.69444, 0, 0, 0.88889], + "9667": [-0.03472, 0.46528, 0, 0, 0.5], + "9711": [0.19444, 0.69444, 0, 0, 1.0], + "9824": [0.12963, 0.69444, 0, 0, 0.77778], + "9825": [0.12963, 0.69444, 0, 0, 0.77778], + "9826": [0.12963, 0.69444, 0, 0, 0.77778], + "9827": [0.12963, 0.69444, 0, 0, 0.77778], + "9837": [0, 0.75, 0, 0, 0.38889], + "9838": [0.19444, 0.69444, 0, 0, 0.38889], + "9839": [0.19444, 0.69444, 0, 0, 0.38889], + "10216": [0.25, 0.75, 0, 0, 0.38889], + "10217": [0.25, 0.75, 0, 0, 0.38889], + "10222": [0.244, 0.744, 0, 0, 0.412], + "10223": [0.244, 0.745, 0, 0, 0.412], + "10229": [0.011, 0.511, 0, 0, 1.609], + "10230": [0.011, 0.511, 0, 0, 1.638], + "10231": [0.011, 0.511, 0, 0, 1.859], + "10232": [0.024, 0.525, 0, 0, 1.609], + "10233": [0.024, 0.525, 0, 0, 1.638], + "10234": [0.024, 0.525, 0, 0, 1.858], + "10236": [0.011, 0.511, 0, 0, 1.638], + "10815": [0, 0.68333, 0, 0, 0.75], + "10927": [0.13597, 0.63597, 0, 0, 0.77778], + "10928": [0.13597, 0.63597, 0, 0, 0.77778], + "57376": [0.19444, 0.69444, 0, 0, 0] + }, + "Math-BoldItalic": { + "32": [0, 0, 0, 0, 0.25], + "48": [0, 0.44444, 0, 0, 0.575], + "49": [0, 0.44444, 0, 0, 0.575], + "50": [0, 0.44444, 0, 0, 0.575], + "51": [0.19444, 0.44444, 0, 0, 0.575], + "52": [0.19444, 0.44444, 0, 0, 0.575], + "53": [0.19444, 0.44444, 0, 0, 0.575], + "54": [0, 0.64444, 0, 0, 0.575], + "55": [0.19444, 0.44444, 0, 0, 0.575], + "56": [0, 0.64444, 0, 0, 0.575], + "57": [0.19444, 0.44444, 0, 0, 0.575], + "65": [0, 0.68611, 0, 0, 0.86944], + "66": [0, 0.68611, 0.04835, 0, 0.8664], + "67": [0, 0.68611, 0.06979, 0, 0.81694], + "68": [0, 0.68611, 0.03194, 0, 0.93812], + "69": [0, 0.68611, 0.05451, 0, 0.81007], + "70": [0, 0.68611, 0.15972, 0, 0.68889], + "71": [0, 0.68611, 0, 0, 0.88673], + "72": [0, 0.68611, 0.08229, 0, 0.98229], + "73": [0, 0.68611, 0.07778, 0, 0.51111], + "74": [0, 0.68611, 0.10069, 0, 0.63125], + "75": [0, 0.68611, 0.06979, 0, 0.97118], + "76": [0, 0.68611, 0, 0, 0.75555], + "77": [0, 0.68611, 0.11424, 0, 1.14201], + "78": [0, 0.68611, 0.11424, 0, 0.95034], + "79": [0, 0.68611, 0.03194, 0, 0.83666], + "80": [0, 0.68611, 0.15972, 0, 0.72309], + "81": [0.19444, 0.68611, 0, 0, 0.86861], + "82": [0, 0.68611, 0.00421, 0, 0.87235], + "83": [0, 0.68611, 0.05382, 0, 0.69271], + "84": [0, 0.68611, 0.15972, 0, 0.63663], + "85": [0, 0.68611, 0.11424, 0, 0.80027], + "86": [0, 0.68611, 0.25555, 0, 0.67778], + "87": [0, 0.68611, 0.15972, 0, 1.09305], + "88": [0, 0.68611, 0.07778, 0, 0.94722], + "89": [0, 0.68611, 0.25555, 0, 0.67458], + "90": [0, 0.68611, 0.06979, 0, 0.77257], + "97": [0, 0.44444, 0, 0, 0.63287], + "98": [0, 0.69444, 0, 0, 0.52083], + "99": [0, 0.44444, 0, 0, 0.51342], + "100": [0, 0.69444, 0, 0, 0.60972], + "101": [0, 0.44444, 0, 0, 0.55361], + "102": [0.19444, 0.69444, 0.11042, 0, 0.56806], + "103": [0.19444, 0.44444, 0.03704, 0, 0.5449], + "104": [0, 0.69444, 0, 0, 0.66759], + "105": [0, 0.69326, 0, 0, 0.4048], + "106": [0.19444, 0.69326, 0.0622, 0, 0.47083], + "107": [0, 0.69444, 0.01852, 0, 0.6037], + "108": [0, 0.69444, 0.0088, 0, 0.34815], + "109": [0, 0.44444, 0, 0, 1.0324], + "110": [0, 0.44444, 0, 0, 0.71296], + "111": [0, 0.44444, 0, 0, 0.58472], + "112": [0.19444, 0.44444, 0, 0, 0.60092], + "113": [0.19444, 0.44444, 0.03704, 0, 0.54213], + "114": [0, 0.44444, 0.03194, 0, 0.5287], + "115": [0, 0.44444, 0, 0, 0.53125], + "116": [0, 0.63492, 0, 0, 0.41528], + "117": [0, 0.44444, 0, 0, 0.68102], + "118": [0, 0.44444, 0.03704, 0, 0.56666], + "119": [0, 0.44444, 0.02778, 0, 0.83148], + "120": [0, 0.44444, 0, 0, 0.65903], + "121": [0.19444, 0.44444, 0.03704, 0, 0.59028], + "122": [0, 0.44444, 0.04213, 0, 0.55509], + "160": [0, 0, 0, 0, 0.25], + "915": [0, 0.68611, 0.15972, 0, 0.65694], + "916": [0, 0.68611, 0, 0, 0.95833], + "920": [0, 0.68611, 0.03194, 0, 0.86722], + "923": [0, 0.68611, 0, 0, 0.80555], + "926": [0, 0.68611, 0.07458, 0, 0.84125], + "928": [0, 0.68611, 0.08229, 0, 0.98229], + "931": [0, 0.68611, 0.05451, 0, 0.88507], + "933": [0, 0.68611, 0.15972, 0, 0.67083], + "934": [0, 0.68611, 0, 0, 0.76666], + "936": [0, 0.68611, 0.11653, 0, 0.71402], + "937": [0, 0.68611, 0.04835, 0, 0.8789], + "945": [0, 0.44444, 0, 0, 0.76064], + "946": [0.19444, 0.69444, 0.03403, 0, 0.65972], + "947": [0.19444, 0.44444, 0.06389, 0, 0.59003], + "948": [0, 0.69444, 0.03819, 0, 0.52222], + "949": [0, 0.44444, 0, 0, 0.52882], + "950": [0.19444, 0.69444, 0.06215, 0, 0.50833], + "951": [0.19444, 0.44444, 0.03704, 0, 0.6], + "952": [0, 0.69444, 0.03194, 0, 0.5618], + "953": [0, 0.44444, 0, 0, 0.41204], + "954": [0, 0.44444, 0, 0, 0.66759], + "955": [0, 0.69444, 0, 0, 0.67083], + "956": [0.19444, 0.44444, 0, 0, 0.70787], + "957": [0, 0.44444, 0.06898, 0, 0.57685], + "958": [0.19444, 0.69444, 0.03021, 0, 0.50833], + "959": [0, 0.44444, 0, 0, 0.58472], + "960": [0, 0.44444, 0.03704, 0, 0.68241], + "961": [0.19444, 0.44444, 0, 0, 0.6118], + "962": [0.09722, 0.44444, 0.07917, 0, 0.42361], + "963": [0, 0.44444, 0.03704, 0, 0.68588], + "964": [0, 0.44444, 0.13472, 0, 0.52083], + "965": [0, 0.44444, 0.03704, 0, 0.63055], + "966": [0.19444, 0.44444, 0, 0, 0.74722], + "967": [0.19444, 0.44444, 0, 0, 0.71805], + "968": [0.19444, 0.69444, 0.03704, 0, 0.75833], + "969": [0, 0.44444, 0.03704, 0, 0.71782], + "977": [0, 0.69444, 0, 0, 0.69155], + "981": [0.19444, 0.69444, 0, 0, 0.7125], + "982": [0, 0.44444, 0.03194, 0, 0.975], + "1009": [0.19444, 0.44444, 0, 0, 0.6118], + "1013": [0, 0.44444, 0, 0, 0.48333], + "57649": [0, 0.44444, 0, 0, 0.39352], + "57911": [0.19444, 0.44444, 0, 0, 0.43889] + }, + "Math-Italic": { + "32": [0, 0, 0, 0, 0.25], + "48": [0, 0.43056, 0, 0, 0.5], + "49": [0, 0.43056, 0, 0, 0.5], + "50": [0, 0.43056, 0, 0, 0.5], + "51": [0.19444, 0.43056, 0, 0, 0.5], + "52": [0.19444, 0.43056, 0, 0, 0.5], + "53": [0.19444, 0.43056, 0, 0, 0.5], + "54": [0, 0.64444, 0, 0, 0.5], + "55": [0.19444, 0.43056, 0, 0, 0.5], + "56": [0, 0.64444, 0, 0, 0.5], + "57": [0.19444, 0.43056, 0, 0, 0.5], + "65": [0, 0.68333, 0, 0.13889, 0.75], + "66": [0, 0.68333, 0.05017, 0.08334, 0.75851], + "67": [0, 0.68333, 0.07153, 0.08334, 0.71472], + "68": [0, 0.68333, 0.02778, 0.05556, 0.82792], + "69": [0, 0.68333, 0.05764, 0.08334, 0.7382], + "70": [0, 0.68333, 0.13889, 0.08334, 0.64306], + "71": [0, 0.68333, 0, 0.08334, 0.78625], + "72": [0, 0.68333, 0.08125, 0.05556, 0.83125], + "73": [0, 0.68333, 0.07847, 0.11111, 0.43958], + "74": [0, 0.68333, 0.09618, 0.16667, 0.55451], + "75": [0, 0.68333, 0.07153, 0.05556, 0.84931], + "76": [0, 0.68333, 0, 0.02778, 0.68056], + "77": [0, 0.68333, 0.10903, 0.08334, 0.97014], + "78": [0, 0.68333, 0.10903, 0.08334, 0.80347], + "79": [0, 0.68333, 0.02778, 0.08334, 0.76278], + "80": [0, 0.68333, 0.13889, 0.08334, 0.64201], + "81": [0.19444, 0.68333, 0, 0.08334, 0.79056], + "82": [0, 0.68333, 0.00773, 0.08334, 0.75929], + "83": [0, 0.68333, 0.05764, 0.08334, 0.6132], + "84": [0, 0.68333, 0.13889, 0.08334, 0.58438], + "85": [0, 0.68333, 0.10903, 0.02778, 0.68278], + "86": [0, 0.68333, 0.22222, 0, 0.58333], + "87": [0, 0.68333, 0.13889, 0, 0.94445], + "88": [0, 0.68333, 0.07847, 0.08334, 0.82847], + "89": [0, 0.68333, 0.22222, 0, 0.58056], + "90": [0, 0.68333, 0.07153, 0.08334, 0.68264], + "97": [0, 0.43056, 0, 0, 0.52859], + "98": [0, 0.69444, 0, 0, 0.42917], + "99": [0, 0.43056, 0, 0.05556, 0.43276], + "100": [0, 0.69444, 0, 0.16667, 0.52049], + "101": [0, 0.43056, 0, 0.05556, 0.46563], + "102": [0.19444, 0.69444, 0.10764, 0.16667, 0.48959], + "103": [0.19444, 0.43056, 0.03588, 0.02778, 0.47697], + "104": [0, 0.69444, 0, 0, 0.57616], + "105": [0, 0.65952, 0, 0, 0.34451], + "106": [0.19444, 0.65952, 0.05724, 0, 0.41181], + "107": [0, 0.69444, 0.03148, 0, 0.5206], + "108": [0, 0.69444, 0.01968, 0.08334, 0.29838], + "109": [0, 0.43056, 0, 0, 0.87801], + "110": [0, 0.43056, 0, 0, 0.60023], + "111": [0, 0.43056, 0, 0.05556, 0.48472], + "112": [0.19444, 0.43056, 0, 0.08334, 0.50313], + "113": [0.19444, 0.43056, 0.03588, 0.08334, 0.44641], + "114": [0, 0.43056, 0.02778, 0.05556, 0.45116], + "115": [0, 0.43056, 0, 0.05556, 0.46875], + "116": [0, 0.61508, 0, 0.08334, 0.36111], + "117": [0, 0.43056, 0, 0.02778, 0.57246], + "118": [0, 0.43056, 0.03588, 0.02778, 0.48472], + "119": [0, 0.43056, 0.02691, 0.08334, 0.71592], + "120": [0, 0.43056, 0, 0.02778, 0.57153], + "121": [0.19444, 0.43056, 0.03588, 0.05556, 0.49028], + "122": [0, 0.43056, 0.04398, 0.05556, 0.46505], + "160": [0, 0, 0, 0, 0.25], + "915": [0, 0.68333, 0.13889, 0.08334, 0.61528], + "916": [0, 0.68333, 0, 0.16667, 0.83334], + "920": [0, 0.68333, 0.02778, 0.08334, 0.76278], + "923": [0, 0.68333, 0, 0.16667, 0.69445], + "926": [0, 0.68333, 0.07569, 0.08334, 0.74236], + "928": [0, 0.68333, 0.08125, 0.05556, 0.83125], + "931": [0, 0.68333, 0.05764, 0.08334, 0.77986], + "933": [0, 0.68333, 0.13889, 0.05556, 0.58333], + "934": [0, 0.68333, 0, 0.08334, 0.66667], + "936": [0, 0.68333, 0.11, 0.05556, 0.61222], + "937": [0, 0.68333, 0.05017, 0.08334, 0.7724], + "945": [0, 0.43056, 0.0037, 0.02778, 0.6397], + "946": [0.19444, 0.69444, 0.05278, 0.08334, 0.56563], + "947": [0.19444, 0.43056, 0.05556, 0, 0.51773], + "948": [0, 0.69444, 0.03785, 0.05556, 0.44444], + "949": [0, 0.43056, 0, 0.08334, 0.46632], + "950": [0.19444, 0.69444, 0.07378, 0.08334, 0.4375], + "951": [0.19444, 0.43056, 0.03588, 0.05556, 0.49653], + "952": [0, 0.69444, 0.02778, 0.08334, 0.46944], + "953": [0, 0.43056, 0, 0.05556, 0.35394], + "954": [0, 0.43056, 0, 0, 0.57616], + "955": [0, 0.69444, 0, 0, 0.58334], + "956": [0.19444, 0.43056, 0, 0.02778, 0.60255], + "957": [0, 0.43056, 0.06366, 0.02778, 0.49398], + "958": [0.19444, 0.69444, 0.04601, 0.11111, 0.4375], + "959": [0, 0.43056, 0, 0.05556, 0.48472], + "960": [0, 0.43056, 0.03588, 0, 0.57003], + "961": [0.19444, 0.43056, 0, 0.08334, 0.51702], + "962": [0.09722, 0.43056, 0.07986, 0.08334, 0.36285], + "963": [0, 0.43056, 0.03588, 0, 0.57141], + "964": [0, 0.43056, 0.1132, 0.02778, 0.43715], + "965": [0, 0.43056, 0.03588, 0.02778, 0.54028], + "966": [0.19444, 0.43056, 0, 0.08334, 0.65417], + "967": [0.19444, 0.43056, 0, 0.05556, 0.62569], + "968": [0.19444, 0.69444, 0.03588, 0.11111, 0.65139], + "969": [0, 0.43056, 0.03588, 0, 0.62245], + "977": [0, 0.69444, 0, 0.08334, 0.59144], + "981": [0.19444, 0.69444, 0, 0.08334, 0.59583], + "982": [0, 0.43056, 0.02778, 0, 0.82813], + "1009": [0.19444, 0.43056, 0, 0.08334, 0.51702], + "1013": [0, 0.43056, 0, 0.05556, 0.4059], + "57649": [0, 0.43056, 0, 0.02778, 0.32246], + "57911": [0.19444, 0.43056, 0, 0.08334, 0.38403] + }, + "SansSerif-Bold": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69444, 0, 0, 0.36667], + "34": [0, 0.69444, 0, 0, 0.55834], + "35": [0.19444, 0.69444, 0, 0, 0.91667], + "36": [0.05556, 0.75, 0, 0, 0.55], + "37": [0.05556, 0.75, 0, 0, 1.02912], + "38": [0, 0.69444, 0, 0, 0.83056], + "39": [0, 0.69444, 0, 0, 0.30556], + "40": [0.25, 0.75, 0, 0, 0.42778], + "41": [0.25, 0.75, 0, 0, 0.42778], + "42": [0, 0.75, 0, 0, 0.55], + "43": [0.11667, 0.61667, 0, 0, 0.85556], + "44": [0.10556, 0.13056, 0, 0, 0.30556], + "45": [0, 0.45833, 0, 0, 0.36667], + "46": [0, 0.13056, 0, 0, 0.30556], + "47": [0.25, 0.75, 0, 0, 0.55], + "48": [0, 0.69444, 0, 0, 0.55], + "49": [0, 0.69444, 0, 0, 0.55], + "50": [0, 0.69444, 0, 0, 0.55], + "51": [0, 0.69444, 0, 0, 0.55], + "52": [0, 0.69444, 0, 0, 0.55], + "53": [0, 0.69444, 0, 0, 0.55], + "54": [0, 0.69444, 0, 0, 0.55], + "55": [0, 0.69444, 0, 0, 0.55], + "56": [0, 0.69444, 0, 0, 0.55], + "57": [0, 0.69444, 0, 0, 0.55], + "58": [0, 0.45833, 0, 0, 0.30556], + "59": [0.10556, 0.45833, 0, 0, 0.30556], + "61": [-0.09375, 0.40625, 0, 0, 0.85556], + "63": [0, 0.69444, 0, 0, 0.51945], + "64": [0, 0.69444, 0, 0, 0.73334], + "65": [0, 0.69444, 0, 0, 0.73334], + "66": [0, 0.69444, 0, 0, 0.73334], + "67": [0, 0.69444, 0, 0, 0.70278], + "68": [0, 0.69444, 0, 0, 0.79445], + "69": [0, 0.69444, 0, 0, 0.64167], + "70": [0, 0.69444, 0, 0, 0.61111], + "71": [0, 0.69444, 0, 0, 0.73334], + "72": [0, 0.69444, 0, 0, 0.79445], + "73": [0, 0.69444, 0, 0, 0.33056], + "74": [0, 0.69444, 0, 0, 0.51945], + "75": [0, 0.69444, 0, 0, 0.76389], + "76": [0, 0.69444, 0, 0, 0.58056], + "77": [0, 0.69444, 0, 0, 0.97778], + "78": [0, 0.69444, 0, 0, 0.79445], + "79": [0, 0.69444, 0, 0, 0.79445], + "80": [0, 0.69444, 0, 0, 0.70278], + "81": [0.10556, 0.69444, 0, 0, 0.79445], + "82": [0, 0.69444, 0, 0, 0.70278], + "83": [0, 0.69444, 0, 0, 0.61111], + "84": [0, 0.69444, 0, 0, 0.73334], + "85": [0, 0.69444, 0, 0, 0.76389], + "86": [0, 0.69444, 0.01528, 0, 0.73334], + "87": [0, 0.69444, 0.01528, 0, 1.03889], + "88": [0, 0.69444, 0, 0, 0.73334], + "89": [0, 0.69444, 0.0275, 0, 0.73334], + "90": [0, 0.69444, 0, 0, 0.67223], + "91": [0.25, 0.75, 0, 0, 0.34306], + "93": [0.25, 0.75, 0, 0, 0.34306], + "94": [0, 0.69444, 0, 0, 0.55], + "95": [0.35, 0.10833, 0.03056, 0, 0.55], + "97": [0, 0.45833, 0, 0, 0.525], + "98": [0, 0.69444, 0, 0, 0.56111], + "99": [0, 0.45833, 0, 0, 0.48889], + "100": [0, 0.69444, 0, 0, 0.56111], + "101": [0, 0.45833, 0, 0, 0.51111], + "102": [0, 0.69444, 0.07639, 0, 0.33611], + "103": [0.19444, 0.45833, 0.01528, 0, 0.55], + "104": [0, 0.69444, 0, 0, 0.56111], + "105": [0, 0.69444, 0, 0, 0.25556], + "106": [0.19444, 0.69444, 0, 0, 0.28611], + "107": [0, 0.69444, 0, 0, 0.53056], + "108": [0, 0.69444, 0, 0, 0.25556], + "109": [0, 0.45833, 0, 0, 0.86667], + "110": [0, 0.45833, 0, 0, 0.56111], + "111": [0, 0.45833, 0, 0, 0.55], + "112": [0.19444, 0.45833, 0, 0, 0.56111], + "113": [0.19444, 0.45833, 0, 0, 0.56111], + "114": [0, 0.45833, 0.01528, 0, 0.37222], + "115": [0, 0.45833, 0, 0, 0.42167], + "116": [0, 0.58929, 0, 0, 0.40417], + "117": [0, 0.45833, 0, 0, 0.56111], + "118": [0, 0.45833, 0.01528, 0, 0.5], + "119": [0, 0.45833, 0.01528, 0, 0.74445], + "120": [0, 0.45833, 0, 0, 0.5], + "121": [0.19444, 0.45833, 0.01528, 0, 0.5], + "122": [0, 0.45833, 0, 0, 0.47639], + "126": [0.35, 0.34444, 0, 0, 0.55], + "160": [0, 0, 0, 0, 0.25], + "168": [0, 0.69444, 0, 0, 0.55], + "176": [0, 0.69444, 0, 0, 0.73334], + "180": [0, 0.69444, 0, 0, 0.55], + "184": [0.17014, 0, 0, 0, 0.48889], + "305": [0, 0.45833, 0, 0, 0.25556], + "567": [0.19444, 0.45833, 0, 0, 0.28611], + "710": [0, 0.69444, 0, 0, 0.55], + "711": [0, 0.63542, 0, 0, 0.55], + "713": [0, 0.63778, 0, 0, 0.55], + "728": [0, 0.69444, 0, 0, 0.55], + "729": [0, 0.69444, 0, 0, 0.30556], + "730": [0, 0.69444, 0, 0, 0.73334], + "732": [0, 0.69444, 0, 0, 0.55], + "733": [0, 0.69444, 0, 0, 0.55], + "915": [0, 0.69444, 0, 0, 0.58056], + "916": [0, 0.69444, 0, 0, 0.91667], + "920": [0, 0.69444, 0, 0, 0.85556], + "923": [0, 0.69444, 0, 0, 0.67223], + "926": [0, 0.69444, 0, 0, 0.73334], + "928": [0, 0.69444, 0, 0, 0.79445], + "931": [0, 0.69444, 0, 0, 0.79445], + "933": [0, 0.69444, 0, 0, 0.85556], + "934": [0, 0.69444, 0, 0, 0.79445], + "936": [0, 0.69444, 0, 0, 0.85556], + "937": [0, 0.69444, 0, 0, 0.79445], + "8211": [0, 0.45833, 0.03056, 0, 0.55], + "8212": [0, 0.45833, 0.03056, 0, 1.10001], + "8216": [0, 0.69444, 0, 0, 0.30556], + "8217": [0, 0.69444, 0, 0, 0.30556], + "8220": [0, 0.69444, 0, 0, 0.55834], + "8221": [0, 0.69444, 0, 0, 0.55834] + }, + "SansSerif-Italic": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69444, 0.05733, 0, 0.31945], + "34": [0, 0.69444, 0.00316, 0, 0.5], + "35": [0.19444, 0.69444, 0.05087, 0, 0.83334], + "36": [0.05556, 0.75, 0.11156, 0, 0.5], + "37": [0.05556, 0.75, 0.03126, 0, 0.83334], + "38": [0, 0.69444, 0.03058, 0, 0.75834], + "39": [0, 0.69444, 0.07816, 0, 0.27778], + "40": [0.25, 0.75, 0.13164, 0, 0.38889], + "41": [0.25, 0.75, 0.02536, 0, 0.38889], + "42": [0, 0.75, 0.11775, 0, 0.5], + "43": [0.08333, 0.58333, 0.02536, 0, 0.77778], + "44": [0.125, 0.08333, 0, 0, 0.27778], + "45": [0, 0.44444, 0.01946, 0, 0.33333], + "46": [0, 0.08333, 0, 0, 0.27778], + "47": [0.25, 0.75, 0.13164, 0, 0.5], + "48": [0, 0.65556, 0.11156, 0, 0.5], + "49": [0, 0.65556, 0.11156, 0, 0.5], + "50": [0, 0.65556, 0.11156, 0, 0.5], + "51": [0, 0.65556, 0.11156, 0, 0.5], + "52": [0, 0.65556, 0.11156, 0, 0.5], + "53": [0, 0.65556, 0.11156, 0, 0.5], + "54": [0, 0.65556, 0.11156, 0, 0.5], + "55": [0, 0.65556, 0.11156, 0, 0.5], + "56": [0, 0.65556, 0.11156, 0, 0.5], + "57": [0, 0.65556, 0.11156, 0, 0.5], + "58": [0, 0.44444, 0.02502, 0, 0.27778], + "59": [0.125, 0.44444, 0.02502, 0, 0.27778], + "61": [-0.13, 0.37, 0.05087, 0, 0.77778], + "63": [0, 0.69444, 0.11809, 0, 0.47222], + "64": [0, 0.69444, 0.07555, 0, 0.66667], + "65": [0, 0.69444, 0, 0, 0.66667], + "66": [0, 0.69444, 0.08293, 0, 0.66667], + "67": [0, 0.69444, 0.11983, 0, 0.63889], + "68": [0, 0.69444, 0.07555, 0, 0.72223], + "69": [0, 0.69444, 0.11983, 0, 0.59722], + "70": [0, 0.69444, 0.13372, 0, 0.56945], + "71": [0, 0.69444, 0.11983, 0, 0.66667], + "72": [0, 0.69444, 0.08094, 0, 0.70834], + "73": [0, 0.69444, 0.13372, 0, 0.27778], + "74": [0, 0.69444, 0.08094, 0, 0.47222], + "75": [0, 0.69444, 0.11983, 0, 0.69445], + "76": [0, 0.69444, 0, 0, 0.54167], + "77": [0, 0.69444, 0.08094, 0, 0.875], + "78": [0, 0.69444, 0.08094, 0, 0.70834], + "79": [0, 0.69444, 0.07555, 0, 0.73611], + "80": [0, 0.69444, 0.08293, 0, 0.63889], + "81": [0.125, 0.69444, 0.07555, 0, 0.73611], + "82": [0, 0.69444, 0.08293, 0, 0.64584], + "83": [0, 0.69444, 0.09205, 0, 0.55556], + "84": [0, 0.69444, 0.13372, 0, 0.68056], + "85": [0, 0.69444, 0.08094, 0, 0.6875], + "86": [0, 0.69444, 0.1615, 0, 0.66667], + "87": [0, 0.69444, 0.1615, 0, 0.94445], + "88": [0, 0.69444, 0.13372, 0, 0.66667], + "89": [0, 0.69444, 0.17261, 0, 0.66667], + "90": [0, 0.69444, 0.11983, 0, 0.61111], + "91": [0.25, 0.75, 0.15942, 0, 0.28889], + "93": [0.25, 0.75, 0.08719, 0, 0.28889], + "94": [0, 0.69444, 0.0799, 0, 0.5], + "95": [0.35, 0.09444, 0.08616, 0, 0.5], + "97": [0, 0.44444, 0.00981, 0, 0.48056], + "98": [0, 0.69444, 0.03057, 0, 0.51667], + "99": [0, 0.44444, 0.08336, 0, 0.44445], + "100": [0, 0.69444, 0.09483, 0, 0.51667], + "101": [0, 0.44444, 0.06778, 0, 0.44445], + "102": [0, 0.69444, 0.21705, 0, 0.30556], + "103": [0.19444, 0.44444, 0.10836, 0, 0.5], + "104": [0, 0.69444, 0.01778, 0, 0.51667], + "105": [0, 0.67937, 0.09718, 0, 0.23889], + "106": [0.19444, 0.67937, 0.09162, 0, 0.26667], + "107": [0, 0.69444, 0.08336, 0, 0.48889], + "108": [0, 0.69444, 0.09483, 0, 0.23889], + "109": [0, 0.44444, 0.01778, 0, 0.79445], + "110": [0, 0.44444, 0.01778, 0, 0.51667], + "111": [0, 0.44444, 0.06613, 0, 0.5], + "112": [0.19444, 0.44444, 0.0389, 0, 0.51667], + "113": [0.19444, 0.44444, 0.04169, 0, 0.51667], + "114": [0, 0.44444, 0.10836, 0, 0.34167], + "115": [0, 0.44444, 0.0778, 0, 0.38333], + "116": [0, 0.57143, 0.07225, 0, 0.36111], + "117": [0, 0.44444, 0.04169, 0, 0.51667], + "118": [0, 0.44444, 0.10836, 0, 0.46111], + "119": [0, 0.44444, 0.10836, 0, 0.68334], + "120": [0, 0.44444, 0.09169, 0, 0.46111], + "121": [0.19444, 0.44444, 0.10836, 0, 0.46111], + "122": [0, 0.44444, 0.08752, 0, 0.43472], + "126": [0.35, 0.32659, 0.08826, 0, 0.5], + "160": [0, 0, 0, 0, 0.25], + "168": [0, 0.67937, 0.06385, 0, 0.5], + "176": [0, 0.69444, 0, 0, 0.73752], + "184": [0.17014, 0, 0, 0, 0.44445], + "305": [0, 0.44444, 0.04169, 0, 0.23889], + "567": [0.19444, 0.44444, 0.04169, 0, 0.26667], + "710": [0, 0.69444, 0.0799, 0, 0.5], + "711": [0, 0.63194, 0.08432, 0, 0.5], + "713": [0, 0.60889, 0.08776, 0, 0.5], + "714": [0, 0.69444, 0.09205, 0, 0.5], + "715": [0, 0.69444, 0, 0, 0.5], + "728": [0, 0.69444, 0.09483, 0, 0.5], + "729": [0, 0.67937, 0.07774, 0, 0.27778], + "730": [0, 0.69444, 0, 0, 0.73752], + "732": [0, 0.67659, 0.08826, 0, 0.5], + "733": [0, 0.69444, 0.09205, 0, 0.5], + "915": [0, 0.69444, 0.13372, 0, 0.54167], + "916": [0, 0.69444, 0, 0, 0.83334], + "920": [0, 0.69444, 0.07555, 0, 0.77778], + "923": [0, 0.69444, 0, 0, 0.61111], + "926": [0, 0.69444, 0.12816, 0, 0.66667], + "928": [0, 0.69444, 0.08094, 0, 0.70834], + "931": [0, 0.69444, 0.11983, 0, 0.72222], + "933": [0, 0.69444, 0.09031, 0, 0.77778], + "934": [0, 0.69444, 0.04603, 0, 0.72222], + "936": [0, 0.69444, 0.09031, 0, 0.77778], + "937": [0, 0.69444, 0.08293, 0, 0.72222], + "8211": [0, 0.44444, 0.08616, 0, 0.5], + "8212": [0, 0.44444, 0.08616, 0, 1.0], + "8216": [0, 0.69444, 0.07816, 0, 0.27778], + "8217": [0, 0.69444, 0.07816, 0, 0.27778], + "8220": [0, 0.69444, 0.14205, 0, 0.5], + "8221": [0, 0.69444, 0.00316, 0, 0.5] + }, + "SansSerif-Regular": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69444, 0, 0, 0.31945], + "34": [0, 0.69444, 0, 0, 0.5], + "35": [0.19444, 0.69444, 0, 0, 0.83334], + "36": [0.05556, 0.75, 0, 0, 0.5], + "37": [0.05556, 0.75, 0, 0, 0.83334], + "38": [0, 0.69444, 0, 0, 0.75834], + "39": [0, 0.69444, 0, 0, 0.27778], + "40": [0.25, 0.75, 0, 0, 0.38889], + "41": [0.25, 0.75, 0, 0, 0.38889], + "42": [0, 0.75, 0, 0, 0.5], + "43": [0.08333, 0.58333, 0, 0, 0.77778], + "44": [0.125, 0.08333, 0, 0, 0.27778], + "45": [0, 0.44444, 0, 0, 0.33333], + "46": [0, 0.08333, 0, 0, 0.27778], + "47": [0.25, 0.75, 0, 0, 0.5], + "48": [0, 0.65556, 0, 0, 0.5], + "49": [0, 0.65556, 0, 0, 0.5], + "50": [0, 0.65556, 0, 0, 0.5], + "51": [0, 0.65556, 0, 0, 0.5], + "52": [0, 0.65556, 0, 0, 0.5], + "53": [0, 0.65556, 0, 0, 0.5], + "54": [0, 0.65556, 0, 0, 0.5], + "55": [0, 0.65556, 0, 0, 0.5], + "56": [0, 0.65556, 0, 0, 0.5], + "57": [0, 0.65556, 0, 0, 0.5], + "58": [0, 0.44444, 0, 0, 0.27778], + "59": [0.125, 0.44444, 0, 0, 0.27778], + "61": [-0.13, 0.37, 0, 0, 0.77778], + "63": [0, 0.69444, 0, 0, 0.47222], + "64": [0, 0.69444, 0, 0, 0.66667], + "65": [0, 0.69444, 0, 0, 0.66667], + "66": [0, 0.69444, 0, 0, 0.66667], + "67": [0, 0.69444, 0, 0, 0.63889], + "68": [0, 0.69444, 0, 0, 0.72223], + "69": [0, 0.69444, 0, 0, 0.59722], + "70": [0, 0.69444, 0, 0, 0.56945], + "71": [0, 0.69444, 0, 0, 0.66667], + "72": [0, 0.69444, 0, 0, 0.70834], + "73": [0, 0.69444, 0, 0, 0.27778], + "74": [0, 0.69444, 0, 0, 0.47222], + "75": [0, 0.69444, 0, 0, 0.69445], + "76": [0, 0.69444, 0, 0, 0.54167], + "77": [0, 0.69444, 0, 0, 0.875], + "78": [0, 0.69444, 0, 0, 0.70834], + "79": [0, 0.69444, 0, 0, 0.73611], + "80": [0, 0.69444, 0, 0, 0.63889], + "81": [0.125, 0.69444, 0, 0, 0.73611], + "82": [0, 0.69444, 0, 0, 0.64584], + "83": [0, 0.69444, 0, 0, 0.55556], + "84": [0, 0.69444, 0, 0, 0.68056], + "85": [0, 0.69444, 0, 0, 0.6875], + "86": [0, 0.69444, 0.01389, 0, 0.66667], + "87": [0, 0.69444, 0.01389, 0, 0.94445], + "88": [0, 0.69444, 0, 0, 0.66667], + "89": [0, 0.69444, 0.025, 0, 0.66667], + "90": [0, 0.69444, 0, 0, 0.61111], + "91": [0.25, 0.75, 0, 0, 0.28889], + "93": [0.25, 0.75, 0, 0, 0.28889], + "94": [0, 0.69444, 0, 0, 0.5], + "95": [0.35, 0.09444, 0.02778, 0, 0.5], + "97": [0, 0.44444, 0, 0, 0.48056], + "98": [0, 0.69444, 0, 0, 0.51667], + "99": [0, 0.44444, 0, 0, 0.44445], + "100": [0, 0.69444, 0, 0, 0.51667], + "101": [0, 0.44444, 0, 0, 0.44445], + "102": [0, 0.69444, 0.06944, 0, 0.30556], + "103": [0.19444, 0.44444, 0.01389, 0, 0.5], + "104": [0, 0.69444, 0, 0, 0.51667], + "105": [0, 0.67937, 0, 0, 0.23889], + "106": [0.19444, 0.67937, 0, 0, 0.26667], + "107": [0, 0.69444, 0, 0, 0.48889], + "108": [0, 0.69444, 0, 0, 0.23889], + "109": [0, 0.44444, 0, 0, 0.79445], + "110": [0, 0.44444, 0, 0, 0.51667], + "111": [0, 0.44444, 0, 0, 0.5], + "112": [0.19444, 0.44444, 0, 0, 0.51667], + "113": [0.19444, 0.44444, 0, 0, 0.51667], + "114": [0, 0.44444, 0.01389, 0, 0.34167], + "115": [0, 0.44444, 0, 0, 0.38333], + "116": [0, 0.57143, 0, 0, 0.36111], + "117": [0, 0.44444, 0, 0, 0.51667], + "118": [0, 0.44444, 0.01389, 0, 0.46111], + "119": [0, 0.44444, 0.01389, 0, 0.68334], + "120": [0, 0.44444, 0, 0, 0.46111], + "121": [0.19444, 0.44444, 0.01389, 0, 0.46111], + "122": [0, 0.44444, 0, 0, 0.43472], + "126": [0.35, 0.32659, 0, 0, 0.5], + "160": [0, 0, 0, 0, 0.25], + "168": [0, 0.67937, 0, 0, 0.5], + "176": [0, 0.69444, 0, 0, 0.66667], + "184": [0.17014, 0, 0, 0, 0.44445], + "305": [0, 0.44444, 0, 0, 0.23889], + "567": [0.19444, 0.44444, 0, 0, 0.26667], + "710": [0, 0.69444, 0, 0, 0.5], + "711": [0, 0.63194, 0, 0, 0.5], + "713": [0, 0.60889, 0, 0, 0.5], + "714": [0, 0.69444, 0, 0, 0.5], + "715": [0, 0.69444, 0, 0, 0.5], + "728": [0, 0.69444, 0, 0, 0.5], + "729": [0, 0.67937, 0, 0, 0.27778], + "730": [0, 0.69444, 0, 0, 0.66667], + "732": [0, 0.67659, 0, 0, 0.5], + "733": [0, 0.69444, 0, 0, 0.5], + "915": [0, 0.69444, 0, 0, 0.54167], + "916": [0, 0.69444, 0, 0, 0.83334], + "920": [0, 0.69444, 0, 0, 0.77778], + "923": [0, 0.69444, 0, 0, 0.61111], + "926": [0, 0.69444, 0, 0, 0.66667], + "928": [0, 0.69444, 0, 0, 0.70834], + "931": [0, 0.69444, 0, 0, 0.72222], + "933": [0, 0.69444, 0, 0, 0.77778], + "934": [0, 0.69444, 0, 0, 0.72222], + "936": [0, 0.69444, 0, 0, 0.77778], + "937": [0, 0.69444, 0, 0, 0.72222], + "8211": [0, 0.44444, 0.02778, 0, 0.5], + "8212": [0, 0.44444, 0.02778, 0, 1.0], + "8216": [0, 0.69444, 0, 0, 0.27778], + "8217": [0, 0.69444, 0, 0, 0.27778], + "8220": [0, 0.69444, 0, 0, 0.5], + "8221": [0, 0.69444, 0, 0, 0.5] + }, + "Script-Regular": { + "32": [0, 0, 0, 0, 0.25], + "65": [0, 0.7, 0.22925, 0, 0.80253], + "66": [0, 0.7, 0.04087, 0, 0.90757], + "67": [0, 0.7, 0.1689, 0, 0.66619], + "68": [0, 0.7, 0.09371, 0, 0.77443], + "69": [0, 0.7, 0.18583, 0, 0.56162], + "70": [0, 0.7, 0.13634, 0, 0.89544], + "71": [0, 0.7, 0.17322, 0, 0.60961], + "72": [0, 0.7, 0.29694, 0, 0.96919], + "73": [0, 0.7, 0.19189, 0, 0.80907], + "74": [0.27778, 0.7, 0.19189, 0, 1.05159], + "75": [0, 0.7, 0.31259, 0, 0.91364], + "76": [0, 0.7, 0.19189, 0, 0.87373], + "77": [0, 0.7, 0.15981, 0, 1.08031], + "78": [0, 0.7, 0.3525, 0, 0.9015], + "79": [0, 0.7, 0.08078, 0, 0.73787], + "80": [0, 0.7, 0.08078, 0, 1.01262], + "81": [0, 0.7, 0.03305, 0, 0.88282], + "82": [0, 0.7, 0.06259, 0, 0.85], + "83": [0, 0.7, 0.19189, 0, 0.86767], + "84": [0, 0.7, 0.29087, 0, 0.74697], + "85": [0, 0.7, 0.25815, 0, 0.79996], + "86": [0, 0.7, 0.27523, 0, 0.62204], + "87": [0, 0.7, 0.27523, 0, 0.80532], + "88": [0, 0.7, 0.26006, 0, 0.94445], + "89": [0, 0.7, 0.2939, 0, 0.70961], + "90": [0, 0.7, 0.24037, 0, 0.8212], + "160": [0, 0, 0, 0, 0.25] + }, + "Size1-Regular": { + "32": [0, 0, 0, 0, 0.25], + "40": [0.35001, 0.85, 0, 0, 0.45834], + "41": [0.35001, 0.85, 0, 0, 0.45834], + "47": [0.35001, 0.85, 0, 0, 0.57778], + "91": [0.35001, 0.85, 0, 0, 0.41667], + "92": [0.35001, 0.85, 0, 0, 0.57778], + "93": [0.35001, 0.85, 0, 0, 0.41667], + "123": [0.35001, 0.85, 0, 0, 0.58334], + "125": [0.35001, 0.85, 0, 0, 0.58334], + "160": [0, 0, 0, 0, 0.25], + "710": [0, 0.72222, 0, 0, 0.55556], + "732": [0, 0.72222, 0, 0, 0.55556], + "770": [0, 0.72222, 0, 0, 0.55556], + "771": [0, 0.72222, 0, 0, 0.55556], + "8214": [-0.00099, 0.601, 0, 0, 0.77778], + "8593": [1e-05, 0.6, 0, 0, 0.66667], + "8595": [1e-05, 0.6, 0, 0, 0.66667], + "8657": [1e-05, 0.6, 0, 0, 0.77778], + "8659": [1e-05, 0.6, 0, 0, 0.77778], + "8719": [0.25001, 0.75, 0, 0, 0.94445], + "8720": [0.25001, 0.75, 0, 0, 0.94445], + "8721": [0.25001, 0.75, 0, 0, 1.05556], + "8730": [0.35001, 0.85, 0, 0, 1.0], + "8739": [-0.00599, 0.606, 0, 0, 0.33333], + "8741": [-0.00599, 0.606, 0, 0, 0.55556], + "8747": [0.30612, 0.805, 0.19445, 0, 0.47222], + "8748": [0.306, 0.805, 0.19445, 0, 0.47222], + "8749": [0.306, 0.805, 0.19445, 0, 0.47222], + "8750": [0.30612, 0.805, 0.19445, 0, 0.47222], + "8896": [0.25001, 0.75, 0, 0, 0.83334], + "8897": [0.25001, 0.75, 0, 0, 0.83334], + "8898": [0.25001, 0.75, 0, 0, 0.83334], + "8899": [0.25001, 0.75, 0, 0, 0.83334], + "8968": [0.35001, 0.85, 0, 0, 0.47222], + "8969": [0.35001, 0.85, 0, 0, 0.47222], + "8970": [0.35001, 0.85, 0, 0, 0.47222], + "8971": [0.35001, 0.85, 0, 0, 0.47222], + "9168": [-0.00099, 0.601, 0, 0, 0.66667], + "10216": [0.35001, 0.85, 0, 0, 0.47222], + "10217": [0.35001, 0.85, 0, 0, 0.47222], + "10752": [0.25001, 0.75, 0, 0, 1.11111], + "10753": [0.25001, 0.75, 0, 0, 1.11111], + "10754": [0.25001, 0.75, 0, 0, 1.11111], + "10756": [0.25001, 0.75, 0, 0, 0.83334], + "10758": [0.25001, 0.75, 0, 0, 0.83334] + }, + "Size2-Regular": { + "32": [0, 0, 0, 0, 0.25], + "40": [0.65002, 1.15, 0, 0, 0.59722], + "41": [0.65002, 1.15, 0, 0, 0.59722], + "47": [0.65002, 1.15, 0, 0, 0.81111], + "91": [0.65002, 1.15, 0, 0, 0.47222], + "92": [0.65002, 1.15, 0, 0, 0.81111], + "93": [0.65002, 1.15, 0, 0, 0.47222], + "123": [0.65002, 1.15, 0, 0, 0.66667], + "125": [0.65002, 1.15, 0, 0, 0.66667], + "160": [0, 0, 0, 0, 0.25], + "710": [0, 0.75, 0, 0, 1.0], + "732": [0, 0.75, 0, 0, 1.0], + "770": [0, 0.75, 0, 0, 1.0], + "771": [0, 0.75, 0, 0, 1.0], + "8719": [0.55001, 1.05, 0, 0, 1.27778], + "8720": [0.55001, 1.05, 0, 0, 1.27778], + "8721": [0.55001, 1.05, 0, 0, 1.44445], + "8730": [0.65002, 1.15, 0, 0, 1.0], + "8747": [0.86225, 1.36, 0.44445, 0, 0.55556], + "8748": [0.862, 1.36, 0.44445, 0, 0.55556], + "8749": [0.862, 1.36, 0.44445, 0, 0.55556], + "8750": [0.86225, 1.36, 0.44445, 0, 0.55556], + "8896": [0.55001, 1.05, 0, 0, 1.11111], + "8897": [0.55001, 1.05, 0, 0, 1.11111], + "8898": [0.55001, 1.05, 0, 0, 1.11111], + "8899": [0.55001, 1.05, 0, 0, 1.11111], + "8968": [0.65002, 1.15, 0, 0, 0.52778], + "8969": [0.65002, 1.15, 0, 0, 0.52778], + "8970": [0.65002, 1.15, 0, 0, 0.52778], + "8971": [0.65002, 1.15, 0, 0, 0.52778], + "10216": [0.65002, 1.15, 0, 0, 0.61111], + "10217": [0.65002, 1.15, 0, 0, 0.61111], + "10752": [0.55001, 1.05, 0, 0, 1.51112], + "10753": [0.55001, 1.05, 0, 0, 1.51112], + "10754": [0.55001, 1.05, 0, 0, 1.51112], + "10756": [0.55001, 1.05, 0, 0, 1.11111], + "10758": [0.55001, 1.05, 0, 0, 1.11111] + }, + "Size3-Regular": { + "32": [0, 0, 0, 0, 0.25], + "40": [0.95003, 1.45, 0, 0, 0.73611], + "41": [0.95003, 1.45, 0, 0, 0.73611], + "47": [0.95003, 1.45, 0, 0, 1.04445], + "91": [0.95003, 1.45, 0, 0, 0.52778], + "92": [0.95003, 1.45, 0, 0, 1.04445], + "93": [0.95003, 1.45, 0, 0, 0.52778], + "123": [0.95003, 1.45, 0, 0, 0.75], + "125": [0.95003, 1.45, 0, 0, 0.75], + "160": [0, 0, 0, 0, 0.25], + "710": [0, 0.75, 0, 0, 1.44445], + "732": [0, 0.75, 0, 0, 1.44445], + "770": [0, 0.75, 0, 0, 1.44445], + "771": [0, 0.75, 0, 0, 1.44445], + "8730": [0.95003, 1.45, 0, 0, 1.0], + "8968": [0.95003, 1.45, 0, 0, 0.58334], + "8969": [0.95003, 1.45, 0, 0, 0.58334], + "8970": [0.95003, 1.45, 0, 0, 0.58334], + "8971": [0.95003, 1.45, 0, 0, 0.58334], + "10216": [0.95003, 1.45, 0, 0, 0.75], + "10217": [0.95003, 1.45, 0, 0, 0.75] + }, + "Size4-Regular": { + "32": [0, 0, 0, 0, 0.25], + "40": [1.25003, 1.75, 0, 0, 0.79167], + "41": [1.25003, 1.75, 0, 0, 0.79167], + "47": [1.25003, 1.75, 0, 0, 1.27778], + "91": [1.25003, 1.75, 0, 0, 0.58334], + "92": [1.25003, 1.75, 0, 0, 1.27778], + "93": [1.25003, 1.75, 0, 0, 0.58334], + "123": [1.25003, 1.75, 0, 0, 0.80556], + "125": [1.25003, 1.75, 0, 0, 0.80556], + "160": [0, 0, 0, 0, 0.25], + "710": [0, 0.825, 0, 0, 1.8889], + "732": [0, 0.825, 0, 0, 1.8889], + "770": [0, 0.825, 0, 0, 1.8889], + "771": [0, 0.825, 0, 0, 1.8889], + "8730": [1.25003, 1.75, 0, 0, 1.0], + "8968": [1.25003, 1.75, 0, 0, 0.63889], + "8969": [1.25003, 1.75, 0, 0, 0.63889], + "8970": [1.25003, 1.75, 0, 0, 0.63889], + "8971": [1.25003, 1.75, 0, 0, 0.63889], + "9115": [0.64502, 1.155, 0, 0, 0.875], + "9116": [1e-05, 0.6, 0, 0, 0.875], + "9117": [0.64502, 1.155, 0, 0, 0.875], + "9118": [0.64502, 1.155, 0, 0, 0.875], + "9119": [1e-05, 0.6, 0, 0, 0.875], + "9120": [0.64502, 1.155, 0, 0, 0.875], + "9121": [0.64502, 1.155, 0, 0, 0.66667], + "9122": [-0.00099, 0.601, 0, 0, 0.66667], + "9123": [0.64502, 1.155, 0, 0, 0.66667], + "9124": [0.64502, 1.155, 0, 0, 0.66667], + "9125": [-0.00099, 0.601, 0, 0, 0.66667], + "9126": [0.64502, 1.155, 0, 0, 0.66667], + "9127": [1e-05, 0.9, 0, 0, 0.88889], + "9128": [0.65002, 1.15, 0, 0, 0.88889], + "9129": [0.90001, 0, 0, 0, 0.88889], + "9130": [0, 0.3, 0, 0, 0.88889], + "9131": [1e-05, 0.9, 0, 0, 0.88889], + "9132": [0.65002, 1.15, 0, 0, 0.88889], + "9133": [0.90001, 0, 0, 0, 0.88889], + "9143": [0.88502, 0.915, 0, 0, 1.05556], + "10216": [1.25003, 1.75, 0, 0, 0.80556], + "10217": [1.25003, 1.75, 0, 0, 0.80556], + "57344": [-0.00499, 0.605, 0, 0, 1.05556], + "57345": [-0.00499, 0.605, 0, 0, 1.05556], + "57680": [0, 0.12, 0, 0, 0.45], + "57681": [0, 0.12, 0, 0, 0.45], + "57682": [0, 0.12, 0, 0, 0.45], + "57683": [0, 0.12, 0, 0, 0.45] + }, + "Typewriter-Regular": { + "32": [0, 0, 0, 0, 0.525], + "33": [0, 0.61111, 0, 0, 0.525], + "34": [0, 0.61111, 0, 0, 0.525], + "35": [0, 0.61111, 0, 0, 0.525], + "36": [0.08333, 0.69444, 0, 0, 0.525], + "37": [0.08333, 0.69444, 0, 0, 0.525], + "38": [0, 0.61111, 0, 0, 0.525], + "39": [0, 0.61111, 0, 0, 0.525], + "40": [0.08333, 0.69444, 0, 0, 0.525], + "41": [0.08333, 0.69444, 0, 0, 0.525], + "42": [0, 0.52083, 0, 0, 0.525], + "43": [-0.08056, 0.53055, 0, 0, 0.525], + "44": [0.13889, 0.125, 0, 0, 0.525], + "45": [-0.08056, 0.53055, 0, 0, 0.525], + "46": [0, 0.125, 0, 0, 0.525], + "47": [0.08333, 0.69444, 0, 0, 0.525], + "48": [0, 0.61111, 0, 0, 0.525], + "49": [0, 0.61111, 0, 0, 0.525], + "50": [0, 0.61111, 0, 0, 0.525], + "51": [0, 0.61111, 0, 0, 0.525], + "52": [0, 0.61111, 0, 0, 0.525], + "53": [0, 0.61111, 0, 0, 0.525], + "54": [0, 0.61111, 0, 0, 0.525], + "55": [0, 0.61111, 0, 0, 0.525], + "56": [0, 0.61111, 0, 0, 0.525], + "57": [0, 0.61111, 0, 0, 0.525], + "58": [0, 0.43056, 0, 0, 0.525], + "59": [0.13889, 0.43056, 0, 0, 0.525], + "60": [-0.05556, 0.55556, 0, 0, 0.525], + "61": [-0.19549, 0.41562, 0, 0, 0.525], + "62": [-0.05556, 0.55556, 0, 0, 0.525], + "63": [0, 0.61111, 0, 0, 0.525], + "64": [0, 0.61111, 0, 0, 0.525], + "65": [0, 0.61111, 0, 0, 0.525], + "66": [0, 0.61111, 0, 0, 0.525], + "67": [0, 0.61111, 0, 0, 0.525], + "68": [0, 0.61111, 0, 0, 0.525], + "69": [0, 0.61111, 0, 0, 0.525], + "70": [0, 0.61111, 0, 0, 0.525], + "71": [0, 0.61111, 0, 0, 0.525], + "72": [0, 0.61111, 0, 0, 0.525], + "73": [0, 0.61111, 0, 0, 0.525], + "74": [0, 0.61111, 0, 0, 0.525], + "75": [0, 0.61111, 0, 0, 0.525], + "76": [0, 0.61111, 0, 0, 0.525], + "77": [0, 0.61111, 0, 0, 0.525], + "78": [0, 0.61111, 0, 0, 0.525], + "79": [0, 0.61111, 0, 0, 0.525], + "80": [0, 0.61111, 0, 0, 0.525], + "81": [0.13889, 0.61111, 0, 0, 0.525], + "82": [0, 0.61111, 0, 0, 0.525], + "83": [0, 0.61111, 0, 0, 0.525], + "84": [0, 0.61111, 0, 0, 0.525], + "85": [0, 0.61111, 0, 0, 0.525], + "86": [0, 0.61111, 0, 0, 0.525], + "87": [0, 0.61111, 0, 0, 0.525], + "88": [0, 0.61111, 0, 0, 0.525], + "89": [0, 0.61111, 0, 0, 0.525], + "90": [0, 0.61111, 0, 0, 0.525], + "91": [0.08333, 0.69444, 0, 0, 0.525], + "92": [0.08333, 0.69444, 0, 0, 0.525], + "93": [0.08333, 0.69444, 0, 0, 0.525], + "94": [0, 0.61111, 0, 0, 0.525], + "95": [0.09514, 0, 0, 0, 0.525], + "96": [0, 0.61111, 0, 0, 0.525], + "97": [0, 0.43056, 0, 0, 0.525], + "98": [0, 0.61111, 0, 0, 0.525], + "99": [0, 0.43056, 0, 0, 0.525], + "100": [0, 0.61111, 0, 0, 0.525], + "101": [0, 0.43056, 0, 0, 0.525], + "102": [0, 0.61111, 0, 0, 0.525], + "103": [0.22222, 0.43056, 0, 0, 0.525], + "104": [0, 0.61111, 0, 0, 0.525], + "105": [0, 0.61111, 0, 0, 0.525], + "106": [0.22222, 0.61111, 0, 0, 0.525], + "107": [0, 0.61111, 0, 0, 0.525], + "108": [0, 0.61111, 0, 0, 0.525], + "109": [0, 0.43056, 0, 0, 0.525], + "110": [0, 0.43056, 0, 0, 0.525], + "111": [0, 0.43056, 0, 0, 0.525], + "112": [0.22222, 0.43056, 0, 0, 0.525], + "113": [0.22222, 0.43056, 0, 0, 0.525], + "114": [0, 0.43056, 0, 0, 0.525], + "115": [0, 0.43056, 0, 0, 0.525], + "116": [0, 0.55358, 0, 0, 0.525], + "117": [0, 0.43056, 0, 0, 0.525], + "118": [0, 0.43056, 0, 0, 0.525], + "119": [0, 0.43056, 0, 0, 0.525], + "120": [0, 0.43056, 0, 0, 0.525], + "121": [0.22222, 0.43056, 0, 0, 0.525], + "122": [0, 0.43056, 0, 0, 0.525], + "123": [0.08333, 0.69444, 0, 0, 0.525], + "124": [0.08333, 0.69444, 0, 0, 0.525], + "125": [0.08333, 0.69444, 0, 0, 0.525], + "126": [0, 0.61111, 0, 0, 0.525], + "127": [0, 0.61111, 0, 0, 0.525], + "160": [0, 0, 0, 0, 0.525], + "176": [0, 0.61111, 0, 0, 0.525], + "184": [0.19445, 0, 0, 0, 0.525], + "305": [0, 0.43056, 0, 0, 0.525], + "567": [0.22222, 0.43056, 0, 0, 0.525], + "711": [0, 0.56597, 0, 0, 0.525], + "713": [0, 0.56555, 0, 0, 0.525], + "714": [0, 0.61111, 0, 0, 0.525], + "715": [0, 0.61111, 0, 0, 0.525], + "728": [0, 0.61111, 0, 0, 0.525], + "730": [0, 0.61111, 0, 0, 0.525], + "770": [0, 0.61111, 0, 0, 0.525], + "771": [0, 0.61111, 0, 0, 0.525], + "776": [0, 0.61111, 0, 0, 0.525], + "915": [0, 0.61111, 0, 0, 0.525], + "916": [0, 0.61111, 0, 0, 0.525], + "920": [0, 0.61111, 0, 0, 0.525], + "923": [0, 0.61111, 0, 0, 0.525], + "926": [0, 0.61111, 0, 0, 0.525], + "928": [0, 0.61111, 0, 0, 0.525], + "931": [0, 0.61111, 0, 0, 0.525], + "933": [0, 0.61111, 0, 0, 0.525], + "934": [0, 0.61111, 0, 0, 0.525], + "936": [0, 0.61111, 0, 0, 0.525], + "937": [0, 0.61111, 0, 0, 0.525], + "8216": [0, 0.61111, 0, 0, 0.525], + "8217": [0, 0.61111, 0, 0, 0.525], + "8242": [0, 0.61111, 0, 0, 0.525], + "9251": [0.11111, 0.21944, 0, 0, 0.525] + } +}); +;// ./src/fontMetrics.ts + +// This map contains a mapping from font name and character code to character +// metrics, including height, depth, italic correction, and skew (kern from the +// character to the corresponding \skewchar) +// This map is generated via `make metrics`. It should not be changed manually. + + +/** + * This file contains metrics regarding fonts and individual symbols. The sigma + * and xi variables, as well as the metricMap map contain data extracted from + * TeX, TeX font metrics, and the TTF files. These data are then exposed via the + * `metrics` variable and the getCharacterMetrics function. + */ + +// In TeX, there are actually three sets of dimensions, one for each of +// textstyle (size index 5 and higher: >=9pt), scriptstyle (size index 3 and 4: +// 7-8pt), and scriptscriptstyle (size index 1 and 2: 5-6pt). These are +// provided in the arrays below, in that order. +// +// The font metrics are stored in fonts cmsy10, cmsy7, and cmsy5 respectively. +// This was determined by running the following script: +// +// latex -interaction=nonstopmode \ +// '\documentclass{article}\usepackage{amsmath}\begin{document}' \ +// '$a$ \expandafter\show\the\textfont2' \ +// '\expandafter\show\the\scriptfont2' \ +// '\expandafter\show\the\scriptscriptfont2' \ +// '\stop' +// +// The metrics themselves were retrieved using the following commands: +// +// tftopl cmsy10 +// tftopl cmsy7 +// tftopl cmsy5 +// +// The output of each of these commands is quite lengthy. The only part we +// care about is the FONTDIMEN section. Each value is measured in EMs. +const sigmasAndXis = { + slant: [0.250, 0.250, 0.250], + // sigma1 + space: [0.000, 0.000, 0.000], + // sigma2 + stretch: [0.000, 0.000, 0.000], + // sigma3 + shrink: [0.000, 0.000, 0.000], + // sigma4 + xHeight: [0.431, 0.431, 0.431], + // sigma5 + quad: [1.000, 1.171, 1.472], + // sigma6 + extraSpace: [0.000, 0.000, 0.000], + // sigma7 + num1: [0.677, 0.732, 0.925], + // sigma8 + num2: [0.394, 0.384, 0.387], + // sigma9 + num3: [0.444, 0.471, 0.504], + // sigma10 + denom1: [0.686, 0.752, 1.025], + // sigma11 + denom2: [0.345, 0.344, 0.532], + // sigma12 + sup1: [0.413, 0.503, 0.504], + // sigma13 + sup2: [0.363, 0.431, 0.404], + // sigma14 + sup3: [0.289, 0.286, 0.294], + // sigma15 + sub1: [0.150, 0.143, 0.200], + // sigma16 + sub2: [0.247, 0.286, 0.400], + // sigma17 + supDrop: [0.386, 0.353, 0.494], + // sigma18 + subDrop: [0.050, 0.071, 0.100], + // sigma19 + delim1: [2.390, 1.700, 1.980], + // sigma20 + delim2: [1.010, 1.157, 1.420], + // sigma21 + axisHeight: [0.250, 0.250, 0.250], + // sigma22 + + // These font metrics are extracted from TeX by using tftopl on cmex10.tfm; + // they correspond to the font parameters of the extension fonts (family 3). + // See the TeXbook, page 441. In AMSTeX, the extension fonts scale; to + // match cmex7, we'd use cmex7.tfm values for script and scriptscript + // values. + defaultRuleThickness: [0.04, 0.049, 0.049], + // xi8; cmex7: 0.049 + bigOpSpacing1: [0.111, 0.111, 0.111], + // xi9 + bigOpSpacing2: [0.166, 0.166, 0.166], + // xi10 + bigOpSpacing3: [0.2, 0.2, 0.2], + // xi11 + bigOpSpacing4: [0.6, 0.611, 0.611], + // xi12; cmex7: 0.611 + bigOpSpacing5: [0.1, 0.143, 0.143], + // xi13; cmex7: 0.143 + + // The \sqrt rule width is taken from the height of the surd character. + // Since we use the same font at all sizes, this thickness doesn't scale. + sqrtRuleThickness: [0.04, 0.04, 0.04], + // This value determines how large a pt is, for metrics which are defined + // in terms of pts. + // This value is also used in katex.scss; if you change it make sure the + // values match. + ptPerEm: [10.0, 10.0, 10.0], + // The space between adjacent `|` columns in an array definition. From + // `\showthe\doublerulesep` in LaTeX. Equals 2.0 / ptPerEm. + doubleRuleSep: [0.2, 0.2, 0.2], + // The width of separator lines in {array} environments. From + // `\showthe\arrayrulewidth` in LaTeX. Equals 0.4 / ptPerEm. + arrayRuleWidth: [0.04, 0.04, 0.04], + // Two values from LaTeX source2e: + fboxsep: [0.3, 0.3, 0.3], + // 3 pt / ptPerEm + fboxrule: [0.04, 0.04, 0.04] // 0.4 pt / ptPerEm +}; + +// These are very rough approximations. We default to Times New Roman which +// should have Latin-1 and Cyrillic characters, but may not depending on the +// operating system. The metrics do not account for extra height from the +// accents. In the case of Cyrillic characters which have both ascenders and +// descenders we prefer approximations with ascenders, primarily to prevent +// the fraction bar or root line from intersecting the glyph. +// TODO(kevinb) allow union of multiple glyph metrics for better accuracy. +const extraCharacterMap = { + // Latin-1 + 'Ã…': 'A', + 'Ã�': 'D', + 'Þ': 'o', + 'Ã¥': 'a', + 'ð': 'd', + 'þ': 'o', + // Cyrillic + 'Ð�': 'A', + 'Б': 'B', + 'Ð’': 'B', + 'Г': 'F', + 'Д': 'A', + 'Е': 'E', + 'Ж': 'K', + 'З': '3', + 'И': 'N', + 'Й': 'N', + 'К': 'K', + 'Л': 'N', + 'М': 'M', + 'Ð�': 'H', + 'О': 'O', + 'П': 'N', + 'Р': 'P', + 'С': 'C', + 'Т': 'T', + 'У': 'y', + 'Ф': 'O', + 'Ð¥': 'X', + 'Ц': 'U', + 'Ч': 'h', + 'Ш': 'W', + 'Щ': 'W', + 'Ъ': 'B', + 'Ы': 'X', + 'Ь': 'B', + 'Э': '3', + 'Ю': 'X', + 'Я': 'R', + 'а': 'a', + 'б': 'b', + 'в': 'a', + 'г': 'r', + 'д': 'y', + 'е': 'e', + 'ж': 'm', + 'з': 'e', + 'и': 'n', + 'й': 'n', + 'к': 'n', + 'л': 'n', + 'м': 'm', + 'н': 'n', + 'о': 'o', + 'п': 'n', + 'Ñ€': 'p', + 'Ñ�': 'c', + 'Ñ‚': 'o', + 'у': 'y', + 'Ñ„': 'b', + 'Ñ…': 'x', + 'ц': 'n', + 'ч': 'n', + 'ш': 'w', + 'щ': 'w', + 'ÑŠ': 'a', + 'Ñ‹': 'm', + 'ÑŒ': 'a', + 'Ñ�': 'e', + 'ÑŽ': 'm', + 'Ñ�': 'r' +}; + +/** + * This function adds new font metrics to default metricMap + * It can also override existing metrics + */ +function setFontMetrics(fontName, metrics) { + fontMetricsData[fontName] = metrics; +} + +/** + * This function is a convenience function for looking up information in the + * metricMap table. It takes a character as a string, and a font. + * + * Note: the `width` property may be undefined if fontMetricsData.js wasn't + * built using `Make extended_metrics`. + */ +function getCharacterMetrics(character, font, mode) { + if (!fontMetricsData[font]) { + throw new Error("Font metrics not found for font: " + font + "."); + } + let ch = character.charCodeAt(0); + let metrics = fontMetricsData[font][ch]; + if (!metrics && character[0] in extraCharacterMap) { + ch = extraCharacterMap[character[0]].charCodeAt(0); + metrics = fontMetricsData[font][ch]; + } + if (!metrics && mode === 'text') { + // We don't typically have font metrics for Asian scripts. + // But since we support them in text mode, we need to return + // some sort of metrics. + // So if the character is in a script we support but we + // don't have metrics for it, just use the metrics for + // the Latin capital letter M. This is close enough because + // we (currently) only care about the height of the glyph + // not its width. + if (supportedCodepoint(ch)) { + metrics = fontMetricsData[font][77]; // 77 is the charcode for 'M' + } + } + if (metrics) { + return { + depth: metrics[0], + height: metrics[1], + italic: metrics[2], + skew: metrics[3], + width: metrics[4] + }; + } +} +const fontMetricsBySizeIndex = {}; + +/** + * Get the font metrics for a given size. + */ +function getGlobalMetrics(size) { + let sizeIndex; + if (size >= 5) { + sizeIndex = 0; + } else if (size >= 3) { + sizeIndex = 1; + } else { + sizeIndex = 2; + } + if (!fontMetricsBySizeIndex[sizeIndex]) { + const metrics = fontMetricsBySizeIndex[sizeIndex] = { + cssEmPerMu: sigmasAndXis.quad[sizeIndex] / 18 + }; + for (const key of Object.keys(sigmasAndXis)) { + metrics[key] = sigmasAndXis[key][sizeIndex]; + } + } + return fontMetricsBySizeIndex[sizeIndex]; +} +;// ./src/symbols.ts +/** + * This file holds a list of all no-argument functions and single-character + * symbols (like 'a' or ';'). + * + * For each of the symbols, there are three properties they can have: + * - font (required): the font to be used for this symbol. Either "main" (the + normal font), or "ams" (the ams fonts). + * - group (required): the ParseNode group type the symbol should have (i.e. + "textord", "mathord", etc). + See https://github.com/KaTeX/KaTeX/wiki/Examining-TeX#group-types + * - replace: the character that this symbol or function should be + * replaced with (i.e. "\phi" has a replace value of "\u03d5", the phi + * character in the main font). + * + * The outermost map in the table indicates what mode the symbols should be + * accepted in (e.g. "math" or "text"). + */ + +// Some of these have a "-token" suffix since these are also used as `ParseNode` +// types for raw text tokens, and we want to avoid conflicts with higher-level +// `ParseNode` types. These `ParseNode`s are constructed within `Parser` by +// looking up the `symbols` map. + +const symbols = { + "math": {}, + "text": {} +}; +/* harmony default export */ var src_symbols = (symbols); + +/** `acceptUnicodeChar = true` is only applicable if `replace` is set. */ +function defineSymbol(mode, font, group, replace, name, acceptUnicodeChar) { + symbols[mode][name] = { + font, + group, + replace + }; + if (acceptUnicodeChar && replace) { + symbols[mode][replace] = symbols[mode][name]; + } +} + +// Some abbreviations for commonly used strings. +// This helps minify the code, and also spotting typos using jshint. + +// modes: +const math = "math"; +const symbols_text = "text"; + +// fonts: +const main = "main"; +const ams = "ams"; + +// groups: +const accent = "accent-token"; +const bin = "bin"; +const symbols_close = "close"; +const inner = "inner"; +const mathord = "mathord"; +const op = "op-token"; +const symbols_open = "open"; +const punct = "punct"; +const rel = "rel"; +const spacing = "spacing"; +const textord = "textord"; + +// Now comes the symbol table + +// Relation Symbols +defineSymbol(math, main, rel, "\u2261", "\\equiv", true); +defineSymbol(math, main, rel, "\u227a", "\\prec", true); +defineSymbol(math, main, rel, "\u227b", "\\succ", true); +defineSymbol(math, main, rel, "\u223c", "\\sim", true); +defineSymbol(math, main, rel, "\u22a5", "\\perp"); +defineSymbol(math, main, rel, "\u2aaf", "\\preceq", true); +defineSymbol(math, main, rel, "\u2ab0", "\\succeq", true); +defineSymbol(math, main, rel, "\u2243", "\\simeq", true); +defineSymbol(math, main, rel, "\u2223", "\\mid", true); +defineSymbol(math, main, rel, "\u226a", "\\ll", true); +defineSymbol(math, main, rel, "\u226b", "\\gg", true); +defineSymbol(math, main, rel, "\u224d", "\\asymp", true); +defineSymbol(math, main, rel, "\u2225", "\\parallel"); +defineSymbol(math, main, rel, "\u22c8", "\\bowtie", true); +defineSymbol(math, main, rel, "\u2323", "\\smile", true); +defineSymbol(math, main, rel, "\u2291", "\\sqsubseteq", true); +defineSymbol(math, main, rel, "\u2292", "\\sqsupseteq", true); +defineSymbol(math, main, rel, "\u2250", "\\doteq", true); +defineSymbol(math, main, rel, "\u2322", "\\frown", true); +defineSymbol(math, main, rel, "\u220b", "\\ni", true); +defineSymbol(math, main, rel, "\u221d", "\\propto", true); +defineSymbol(math, main, rel, "\u22a2", "\\vdash", true); +defineSymbol(math, main, rel, "\u22a3", "\\dashv", true); +defineSymbol(math, main, rel, "\u220b", "\\owns"); + +// Punctuation +defineSymbol(math, main, punct, "\u002e", "\\ldotp"); +defineSymbol(math, main, punct, "\u22c5", "\\cdotp"); +// The KaTeX fonts do not contain U+00B7. Use the centered dot glyph at U+22C5 +// in both modes, but keep math-mode punctuation spacing only in math mode. +defineSymbol(math, main, punct, "\u22c5", "\u00b7"); +defineSymbol(symbols_text, main, textord, "\u22c5", "\u00b7"); + +// Misc Symbols +defineSymbol(math, main, textord, "\u0023", "\\#"); +defineSymbol(symbols_text, main, textord, "\u0023", "\\#"); +defineSymbol(math, main, textord, "\u0026", "\\&"); +defineSymbol(symbols_text, main, textord, "\u0026", "\\&"); +defineSymbol(math, main, textord, "\u2135", "\\aleph", true); +defineSymbol(math, main, textord, "\u2200", "\\forall", true); +defineSymbol(math, main, textord, "\u210f", "\\hbar", true); +defineSymbol(math, main, textord, "\u2203", "\\exists", true); +defineSymbol(math, main, textord, "\u2207", "\\nabla", true); +defineSymbol(math, main, textord, "\u266d", "\\flat", true); +defineSymbol(math, main, textord, "\u2113", "\\ell", true); +defineSymbol(math, main, textord, "\u266e", "\\natural", true); +defineSymbol(math, main, textord, "\u2663", "\\clubsuit", true); +defineSymbol(math, main, textord, "\u2118", "\\wp", true); +defineSymbol(math, main, textord, "\u266f", "\\sharp", true); +defineSymbol(math, main, textord, "\u2662", "\\diamondsuit", true); +defineSymbol(math, main, textord, "\u211c", "\\Re", true); +defineSymbol(math, main, textord, "\u2661", "\\heartsuit", true); +defineSymbol(math, main, textord, "\u2111", "\\Im", true); +defineSymbol(math, main, textord, "\u2660", "\\spadesuit", true); +defineSymbol(math, main, textord, "\u00a7", "\\S", true); +defineSymbol(symbols_text, main, textord, "\u00a7", "\\S"); +defineSymbol(math, main, textord, "\u00b6", "\\P", true); +defineSymbol(symbols_text, main, textord, "\u00b6", "\\P"); + +// Math and Text +defineSymbol(math, main, textord, "\u2020", "\\dag"); +defineSymbol(symbols_text, main, textord, "\u2020", "\\dag"); +defineSymbol(symbols_text, main, textord, "\u2020", "\\textdagger"); +defineSymbol(math, main, textord, "\u2021", "\\ddag"); +defineSymbol(symbols_text, main, textord, "\u2021", "\\ddag"); +defineSymbol(symbols_text, main, textord, "\u2021", "\\textdaggerdbl"); + +// Large Delimiters +defineSymbol(math, main, symbols_close, "\u23b1", "\\rmoustache", true); +defineSymbol(math, main, symbols_open, "\u23b0", "\\lmoustache", true); +defineSymbol(math, main, symbols_close, "\u27ef", "\\rgroup", true); +defineSymbol(math, main, symbols_open, "\u27ee", "\\lgroup", true); + +// Binary Operators +defineSymbol(math, main, bin, "\u2213", "\\mp", true); +defineSymbol(math, main, bin, "\u2296", "\\ominus", true); +defineSymbol(math, main, bin, "\u228e", "\\uplus", true); +defineSymbol(math, main, bin, "\u2293", "\\sqcap", true); +defineSymbol(math, main, bin, "\u2217", "\\ast"); +defineSymbol(math, main, bin, "\u2294", "\\sqcup", true); +defineSymbol(math, main, bin, "\u25ef", "\\bigcirc", true); +defineSymbol(math, main, bin, "\u2219", "\\bullet", true); +defineSymbol(math, main, bin, "\u2021", "\\ddagger"); +defineSymbol(math, main, bin, "\u2240", "\\wr", true); +defineSymbol(math, main, bin, "\u2a3f", "\\amalg"); +defineSymbol(math, main, bin, "\u0026", "\\And"); // from amsmath + +// Arrow Symbols +defineSymbol(math, main, rel, "\u27f5", "\\longleftarrow", true); +defineSymbol(math, main, rel, "\u21d0", "\\Leftarrow", true); +defineSymbol(math, main, rel, "\u27f8", "\\Longleftarrow", true); +defineSymbol(math, main, rel, "\u27f6", "\\longrightarrow", true); +defineSymbol(math, main, rel, "\u21d2", "\\Rightarrow", true); +defineSymbol(math, main, rel, "\u27f9", "\\Longrightarrow", true); +defineSymbol(math, main, rel, "\u2194", "\\leftrightarrow", true); +defineSymbol(math, main, rel, "\u27f7", "\\longleftrightarrow", true); +defineSymbol(math, main, rel, "\u21d4", "\\Leftrightarrow", true); +defineSymbol(math, main, rel, "\u27fa", "\\Longleftrightarrow", true); +defineSymbol(math, main, rel, "\u21a6", "\\mapsto", true); +defineSymbol(math, main, rel, "\u27fc", "\\longmapsto", true); +defineSymbol(math, main, rel, "\u2197", "\\nearrow", true); +defineSymbol(math, main, rel, "\u21a9", "\\hookleftarrow", true); +defineSymbol(math, main, rel, "\u21aa", "\\hookrightarrow", true); +defineSymbol(math, main, rel, "\u2198", "\\searrow", true); +defineSymbol(math, main, rel, "\u21bc", "\\leftharpoonup", true); +defineSymbol(math, main, rel, "\u21c0", "\\rightharpoonup", true); +defineSymbol(math, main, rel, "\u2199", "\\swarrow", true); +defineSymbol(math, main, rel, "\u21bd", "\\leftharpoondown", true); +defineSymbol(math, main, rel, "\u21c1", "\\rightharpoondown", true); +defineSymbol(math, main, rel, "\u2196", "\\nwarrow", true); +defineSymbol(math, main, rel, "\u21cc", "\\rightleftharpoons", true); + +// AMS Negated Binary Relations +defineSymbol(math, ams, rel, "\u226e", "\\nless", true); +// Symbol names preceded by "@" each have a corresponding macro. +defineSymbol(math, ams, rel, "\ue010", "\\@nleqslant"); +defineSymbol(math, ams, rel, "\ue011", "\\@nleqq"); +defineSymbol(math, ams, rel, "\u2a87", "\\lneq", true); +defineSymbol(math, ams, rel, "\u2268", "\\lneqq", true); +defineSymbol(math, ams, rel, "\ue00c", "\\@lvertneqq"); +defineSymbol(math, ams, rel, "\u22e6", "\\lnsim", true); +defineSymbol(math, ams, rel, "\u2a89", "\\lnapprox", true); +defineSymbol(math, ams, rel, "\u2280", "\\nprec", true); +// unicode-math maps \u22e0 to \npreccurlyeq. We'll use the AMS synonym. +defineSymbol(math, ams, rel, "\u22e0", "\\npreceq", true); +defineSymbol(math, ams, rel, "\u22e8", "\\precnsim", true); +defineSymbol(math, ams, rel, "\u2ab9", "\\precnapprox", true); +defineSymbol(math, ams, rel, "\u2241", "\\nsim", true); +defineSymbol(math, ams, rel, "\ue006", "\\@nshortmid"); +defineSymbol(math, ams, rel, "\u2224", "\\nmid", true); +defineSymbol(math, ams, rel, "\u22ac", "\\nvdash", true); +defineSymbol(math, ams, rel, "\u22ad", "\\nvDash", true); +defineSymbol(math, ams, rel, "\u22ea", "\\ntriangleleft"); +defineSymbol(math, ams, rel, "\u22ec", "\\ntrianglelefteq", true); +defineSymbol(math, ams, rel, "\u228a", "\\subsetneq", true); +defineSymbol(math, ams, rel, "\ue01a", "\\@varsubsetneq"); +defineSymbol(math, ams, rel, "\u2acb", "\\subsetneqq", true); +defineSymbol(math, ams, rel, "\ue017", "\\@varsubsetneqq"); +defineSymbol(math, ams, rel, "\u226f", "\\ngtr", true); +defineSymbol(math, ams, rel, "\ue00f", "\\@ngeqslant"); +defineSymbol(math, ams, rel, "\ue00e", "\\@ngeqq"); +defineSymbol(math, ams, rel, "\u2a88", "\\gneq", true); +defineSymbol(math, ams, rel, "\u2269", "\\gneqq", true); +defineSymbol(math, ams, rel, "\ue00d", "\\@gvertneqq"); +defineSymbol(math, ams, rel, "\u22e7", "\\gnsim", true); +defineSymbol(math, ams, rel, "\u2a8a", "\\gnapprox", true); +defineSymbol(math, ams, rel, "\u2281", "\\nsucc", true); +// unicode-math maps \u22e1 to \nsucccurlyeq. We'll use the AMS synonym. +defineSymbol(math, ams, rel, "\u22e1", "\\nsucceq", true); +defineSymbol(math, ams, rel, "\u22e9", "\\succnsim", true); +defineSymbol(math, ams, rel, "\u2aba", "\\succnapprox", true); +// unicode-math maps \u2246 to \simneqq. We'll use the AMS synonym. +defineSymbol(math, ams, rel, "\u2246", "\\ncong", true); +defineSymbol(math, ams, rel, "\ue007", "\\@nshortparallel"); +defineSymbol(math, ams, rel, "\u2226", "\\nparallel", true); +defineSymbol(math, ams, rel, "\u22af", "\\nVDash", true); +defineSymbol(math, ams, rel, "\u22eb", "\\ntriangleright"); +defineSymbol(math, ams, rel, "\u22ed", "\\ntrianglerighteq", true); +defineSymbol(math, ams, rel, "\ue018", "\\@nsupseteqq"); +defineSymbol(math, ams, rel, "\u228b", "\\supsetneq", true); +defineSymbol(math, ams, rel, "\ue01b", "\\@varsupsetneq"); +defineSymbol(math, ams, rel, "\u2acc", "\\supsetneqq", true); +defineSymbol(math, ams, rel, "\ue019", "\\@varsupsetneqq"); +defineSymbol(math, ams, rel, "\u22ae", "\\nVdash", true); +defineSymbol(math, ams, rel, "\u2ab5", "\\precneqq", true); +defineSymbol(math, ams, rel, "\u2ab6", "\\succneqq", true); +defineSymbol(math, ams, rel, "\ue016", "\\@nsubseteqq"); +defineSymbol(math, ams, bin, "\u22b4", "\\unlhd"); +defineSymbol(math, ams, bin, "\u22b5", "\\unrhd"); + +// AMS Negated Arrows +defineSymbol(math, ams, rel, "\u219a", "\\nleftarrow", true); +defineSymbol(math, ams, rel, "\u219b", "\\nrightarrow", true); +defineSymbol(math, ams, rel, "\u21cd", "\\nLeftarrow", true); +defineSymbol(math, ams, rel, "\u21cf", "\\nRightarrow", true); +defineSymbol(math, ams, rel, "\u21ae", "\\nleftrightarrow", true); +defineSymbol(math, ams, rel, "\u21ce", "\\nLeftrightarrow", true); + +// AMS Misc +defineSymbol(math, ams, rel, "\u25b3", "\\vartriangle"); +defineSymbol(math, ams, textord, "\u210f", "\\hslash"); +defineSymbol(math, ams, textord, "\u25bd", "\\triangledown"); +defineSymbol(math, ams, textord, "\u25ca", "\\lozenge"); +defineSymbol(math, ams, textord, "\u24c8", "\\circledS"); +defineSymbol(math, ams, textord, "\u00ae", "\\circledR"); +defineSymbol(symbols_text, ams, textord, "\u00ae", "\\circledR"); +defineSymbol(math, ams, textord, "\u2221", "\\measuredangle", true); +defineSymbol(math, ams, textord, "\u2204", "\\nexists"); +defineSymbol(math, ams, textord, "\u2127", "\\mho"); +defineSymbol(math, ams, textord, "\u2132", "\\Finv", true); +defineSymbol(math, ams, textord, "\u2141", "\\Game", true); +defineSymbol(math, ams, textord, "\u2035", "\\backprime"); +defineSymbol(math, ams, textord, "\u25b2", "\\blacktriangle"); +defineSymbol(math, ams, textord, "\u25bc", "\\blacktriangledown"); +defineSymbol(math, ams, textord, "\u25a0", "\\blacksquare"); +defineSymbol(math, ams, textord, "\u29eb", "\\blacklozenge"); +defineSymbol(math, ams, textord, "\u2605", "\\bigstar"); +defineSymbol(math, ams, textord, "\u2222", "\\sphericalangle", true); +defineSymbol(math, ams, textord, "\u2201", "\\complement", true); +// unicode-math maps U+F0 to \matheth. We map to AMS function \eth +defineSymbol(math, ams, textord, "\u00f0", "\\eth", true); +defineSymbol(symbols_text, main, textord, "\u00f0", "\u00f0"); +defineSymbol(math, ams, textord, "\u2571", "\\diagup"); +defineSymbol(math, ams, textord, "\u2572", "\\diagdown"); +defineSymbol(math, ams, textord, "\u25a1", "\\square"); +defineSymbol(math, ams, textord, "\u25a1", "\\Box"); +defineSymbol(math, ams, textord, "\u25ca", "\\Diamond"); +// unicode-math maps U+A5 to \mathyen. We map to AMS function \yen +defineSymbol(math, ams, textord, "\u00a5", "\\yen", true); +defineSymbol(symbols_text, ams, textord, "\u00a5", "\\yen", true); +defineSymbol(math, ams, textord, "\u2713", "\\checkmark", true); +defineSymbol(symbols_text, ams, textord, "\u2713", "\\checkmark"); + +// AMS Hebrew +defineSymbol(math, ams, textord, "\u2136", "\\beth", true); +defineSymbol(math, ams, textord, "\u2138", "\\daleth", true); +defineSymbol(math, ams, textord, "\u2137", "\\gimel", true); + +// AMS Greek +defineSymbol(math, ams, textord, "\u03dd", "\\digamma", true); +defineSymbol(math, ams, textord, "\u03f0", "\\varkappa"); + +// AMS Delimiters +defineSymbol(math, ams, symbols_open, "\u250c", "\\@ulcorner", true); +defineSymbol(math, ams, symbols_close, "\u2510", "\\@urcorner", true); +defineSymbol(math, ams, symbols_open, "\u2514", "\\@llcorner", true); +defineSymbol(math, ams, symbols_close, "\u2518", "\\@lrcorner", true); + +// AMS Binary Relations +defineSymbol(math, ams, rel, "\u2266", "\\leqq", true); +defineSymbol(math, ams, rel, "\u2a7d", "\\leqslant", true); +defineSymbol(math, ams, rel, "\u2a95", "\\eqslantless", true); +defineSymbol(math, ams, rel, "\u2272", "\\lesssim", true); +defineSymbol(math, ams, rel, "\u2a85", "\\lessapprox", true); +defineSymbol(math, ams, rel, "\u224a", "\\approxeq", true); +defineSymbol(math, ams, bin, "\u22d6", "\\lessdot"); +defineSymbol(math, ams, rel, "\u22d8", "\\lll", true); +defineSymbol(math, ams, rel, "\u2276", "\\lessgtr", true); +defineSymbol(math, ams, rel, "\u22da", "\\lesseqgtr", true); +defineSymbol(math, ams, rel, "\u2a8b", "\\lesseqqgtr", true); +defineSymbol(math, ams, rel, "\u2251", "\\doteqdot"); +defineSymbol(math, ams, rel, "\u2253", "\\risingdotseq", true); +defineSymbol(math, ams, rel, "\u2252", "\\fallingdotseq", true); +defineSymbol(math, ams, rel, "\u223d", "\\backsim", true); +defineSymbol(math, ams, rel, "\u22cd", "\\backsimeq", true); +defineSymbol(math, ams, rel, "\u2ac5", "\\subseteqq", true); +defineSymbol(math, ams, rel, "\u22d0", "\\Subset", true); +defineSymbol(math, ams, rel, "\u228f", "\\sqsubset", true); +defineSymbol(math, ams, rel, "\u227c", "\\preccurlyeq", true); +defineSymbol(math, ams, rel, "\u22de", "\\curlyeqprec", true); +defineSymbol(math, ams, rel, "\u227e", "\\precsim", true); +defineSymbol(math, ams, rel, "\u2ab7", "\\precapprox", true); +defineSymbol(math, ams, rel, "\u22b2", "\\vartriangleleft"); +defineSymbol(math, ams, rel, "\u22b4", "\\trianglelefteq"); +defineSymbol(math, ams, rel, "\u22a8", "\\vDash", true); +defineSymbol(math, ams, rel, "\u22aa", "\\Vvdash", true); +defineSymbol(math, ams, rel, "\u2323", "\\smallsmile"); +defineSymbol(math, ams, rel, "\u2322", "\\smallfrown"); +defineSymbol(math, ams, rel, "\u224f", "\\bumpeq", true); +defineSymbol(math, ams, rel, "\u224e", "\\Bumpeq", true); +defineSymbol(math, ams, rel, "\u2267", "\\geqq", true); +defineSymbol(math, ams, rel, "\u2a7e", "\\geqslant", true); +defineSymbol(math, ams, rel, "\u2a96", "\\eqslantgtr", true); +defineSymbol(math, ams, rel, "\u2273", "\\gtrsim", true); +defineSymbol(math, ams, rel, "\u2a86", "\\gtrapprox", true); +defineSymbol(math, ams, bin, "\u22d7", "\\gtrdot"); +defineSymbol(math, ams, rel, "\u22d9", "\\ggg", true); +defineSymbol(math, ams, rel, "\u2277", "\\gtrless", true); +defineSymbol(math, ams, rel, "\u22db", "\\gtreqless", true); +defineSymbol(math, ams, rel, "\u2a8c", "\\gtreqqless", true); +defineSymbol(math, ams, rel, "\u2256", "\\eqcirc", true); +defineSymbol(math, ams, rel, "\u2257", "\\circeq", true); +defineSymbol(math, ams, rel, "\u225c", "\\triangleq", true); +defineSymbol(math, ams, rel, "\u223c", "\\thicksim"); +defineSymbol(math, ams, rel, "\u2248", "\\thickapprox"); +defineSymbol(math, ams, rel, "\u2ac6", "\\supseteqq", true); +defineSymbol(math, ams, rel, "\u22d1", "\\Supset", true); +defineSymbol(math, ams, rel, "\u2290", "\\sqsupset", true); +defineSymbol(math, ams, rel, "\u227d", "\\succcurlyeq", true); +defineSymbol(math, ams, rel, "\u22df", "\\curlyeqsucc", true); +defineSymbol(math, ams, rel, "\u227f", "\\succsim", true); +defineSymbol(math, ams, rel, "\u2ab8", "\\succapprox", true); +defineSymbol(math, ams, rel, "\u22b3", "\\vartriangleright"); +defineSymbol(math, ams, rel, "\u22b5", "\\trianglerighteq"); +defineSymbol(math, ams, rel, "\u22a9", "\\Vdash", true); +defineSymbol(math, ams, rel, "\u2223", "\\shortmid"); +defineSymbol(math, ams, rel, "\u2225", "\\shortparallel"); +defineSymbol(math, ams, rel, "\u226c", "\\between", true); +defineSymbol(math, ams, rel, "\u22d4", "\\pitchfork", true); +defineSymbol(math, ams, rel, "\u221d", "\\varpropto"); +defineSymbol(math, ams, rel, "\u25c0", "\\blacktriangleleft"); +// unicode-math says that \therefore is a mathord atom. +// We kept the amssymb atom type, which is rel. +defineSymbol(math, ams, rel, "\u2234", "\\therefore", true); +defineSymbol(math, ams, rel, "\u220d", "\\backepsilon"); +defineSymbol(math, ams, rel, "\u25b6", "\\blacktriangleright"); +// unicode-math says that \because is a mathord atom. +// We kept the amssymb atom type, which is rel. +defineSymbol(math, ams, rel, "\u2235", "\\because", true); +defineSymbol(math, ams, rel, "\u22d8", "\\llless"); +defineSymbol(math, ams, rel, "\u22d9", "\\gggtr"); +defineSymbol(math, ams, bin, "\u22b2", "\\lhd"); +defineSymbol(math, ams, bin, "\u22b3", "\\rhd"); +defineSymbol(math, ams, rel, "\u2242", "\\eqsim", true); +defineSymbol(math, main, rel, "\u22c8", "\\Join"); +defineSymbol(math, ams, rel, "\u2251", "\\Doteq", true); + +// AMS Binary Operators +defineSymbol(math, ams, bin, "\u2214", "\\dotplus", true); +defineSymbol(math, ams, bin, "\u2216", "\\smallsetminus"); +defineSymbol(math, ams, bin, "\u22d2", "\\Cap", true); +defineSymbol(math, ams, bin, "\u22d3", "\\Cup", true); +defineSymbol(math, ams, bin, "\u2a5e", "\\doublebarwedge", true); +defineSymbol(math, ams, bin, "\u229f", "\\boxminus", true); +defineSymbol(math, ams, bin, "\u229e", "\\boxplus", true); +defineSymbol(math, ams, bin, "\u22c7", "\\divideontimes", true); +defineSymbol(math, ams, bin, "\u22c9", "\\ltimes", true); +defineSymbol(math, ams, bin, "\u22ca", "\\rtimes", true); +defineSymbol(math, ams, bin, "\u22cb", "\\leftthreetimes", true); +defineSymbol(math, ams, bin, "\u22cc", "\\rightthreetimes", true); +defineSymbol(math, ams, bin, "\u22cf", "\\curlywedge", true); +defineSymbol(math, ams, bin, "\u22ce", "\\curlyvee", true); +defineSymbol(math, ams, bin, "\u229d", "\\circleddash", true); +defineSymbol(math, ams, bin, "\u229b", "\\circledast", true); +defineSymbol(math, ams, bin, "\u22c5", "\\centerdot"); +defineSymbol(math, ams, bin, "\u22ba", "\\intercal", true); +defineSymbol(math, ams, bin, "\u22d2", "\\doublecap"); +defineSymbol(math, ams, bin, "\u22d3", "\\doublecup"); +defineSymbol(math, ams, bin, "\u22a0", "\\boxtimes", true); + +// AMS Arrows +// Note: unicode-math maps \u21e2 to their own function \rightdasharrow. +// We'll map it to AMS function \dashrightarrow. It produces the same atom. +defineSymbol(math, ams, rel, "\u21e2", "\\dashrightarrow", true); +// unicode-math maps \u21e0 to \leftdasharrow. We'll use the AMS synonym. +defineSymbol(math, ams, rel, "\u21e0", "\\dashleftarrow", true); +defineSymbol(math, ams, rel, "\u21c7", "\\leftleftarrows", true); +defineSymbol(math, ams, rel, "\u21c6", "\\leftrightarrows", true); +defineSymbol(math, ams, rel, "\u21da", "\\Lleftarrow", true); +defineSymbol(math, ams, rel, "\u219e", "\\twoheadleftarrow", true); +defineSymbol(math, ams, rel, "\u21a2", "\\leftarrowtail", true); +defineSymbol(math, ams, rel, "\u21ab", "\\looparrowleft", true); +defineSymbol(math, ams, rel, "\u21cb", "\\leftrightharpoons", true); +defineSymbol(math, ams, rel, "\u21b6", "\\curvearrowleft", true); +// unicode-math maps \u21ba to \acwopencirclearrow. We'll use the AMS synonym. +defineSymbol(math, ams, rel, "\u21ba", "\\circlearrowleft", true); +defineSymbol(math, ams, rel, "\u21b0", "\\Lsh", true); +defineSymbol(math, ams, rel, "\u21c8", "\\upuparrows", true); +defineSymbol(math, ams, rel, "\u21bf", "\\upharpoonleft", true); +defineSymbol(math, ams, rel, "\u21c3", "\\downharpoonleft", true); +defineSymbol(math, main, rel, "\u22b6", "\\origof", true); // not in font +defineSymbol(math, main, rel, "\u22b7", "\\imageof", true); // not in font +defineSymbol(math, ams, rel, "\u22b8", "\\multimap", true); +defineSymbol(math, ams, rel, "\u21ad", "\\leftrightsquigarrow", true); +defineSymbol(math, ams, rel, "\u21c9", "\\rightrightarrows", true); +defineSymbol(math, ams, rel, "\u21c4", "\\rightleftarrows", true); +defineSymbol(math, ams, rel, "\u21a0", "\\twoheadrightarrow", true); +defineSymbol(math, ams, rel, "\u21a3", "\\rightarrowtail", true); +defineSymbol(math, ams, rel, "\u21ac", "\\looparrowright", true); +defineSymbol(math, ams, rel, "\u21b7", "\\curvearrowright", true); +// unicode-math maps \u21bb to \cwopencirclearrow. We'll use the AMS synonym. +defineSymbol(math, ams, rel, "\u21bb", "\\circlearrowright", true); +defineSymbol(math, ams, rel, "\u21b1", "\\Rsh", true); +defineSymbol(math, ams, rel, "\u21ca", "\\downdownarrows", true); +defineSymbol(math, ams, rel, "\u21be", "\\upharpoonright", true); +defineSymbol(math, ams, rel, "\u21c2", "\\downharpoonright", true); +defineSymbol(math, ams, rel, "\u21dd", "\\rightsquigarrow", true); +defineSymbol(math, ams, rel, "\u21dd", "\\leadsto"); +defineSymbol(math, ams, rel, "\u21db", "\\Rrightarrow", true); +defineSymbol(math, ams, rel, "\u21be", "\\restriction"); +defineSymbol(math, main, textord, "\u2018", "`"); +defineSymbol(math, main, textord, "$", "\\$"); +defineSymbol(symbols_text, main, textord, "$", "\\$"); +defineSymbol(symbols_text, main, textord, "$", "\\textdollar"); +defineSymbol(math, main, textord, "%", "\\%"); +defineSymbol(symbols_text, main, textord, "%", "\\%"); +defineSymbol(math, main, textord, "_", "\\_"); +defineSymbol(symbols_text, main, textord, "_", "\\_"); +defineSymbol(symbols_text, main, textord, "_", "\\textunderscore"); +defineSymbol(math, main, textord, "\u2220", "\\angle", true); +defineSymbol(math, main, textord, "\u221e", "\\infty", true); +defineSymbol(math, main, textord, "\u2032", "\\prime"); +defineSymbol(math, main, textord, "\u25b3", "\\triangle"); +defineSymbol(math, main, textord, "\u0393", "\\Gamma", true); +defineSymbol(math, main, textord, "\u0394", "\\Delta", true); +defineSymbol(math, main, textord, "\u0398", "\\Theta", true); +defineSymbol(math, main, textord, "\u039b", "\\Lambda", true); +defineSymbol(math, main, textord, "\u039e", "\\Xi", true); +defineSymbol(math, main, textord, "\u03a0", "\\Pi", true); +defineSymbol(math, main, textord, "\u03a3", "\\Sigma", true); +defineSymbol(math, main, textord, "\u03a5", "\\Upsilon", true); +defineSymbol(math, main, textord, "\u03a6", "\\Phi", true); +defineSymbol(math, main, textord, "\u03a8", "\\Psi", true); +defineSymbol(math, main, textord, "\u03a9", "\\Omega", true); +defineSymbol(math, main, textord, "A", "\u0391"); +defineSymbol(math, main, textord, "B", "\u0392"); +defineSymbol(math, main, textord, "E", "\u0395"); +defineSymbol(math, main, textord, "Z", "\u0396"); +defineSymbol(math, main, textord, "H", "\u0397"); +defineSymbol(math, main, textord, "I", "\u0399"); +defineSymbol(math, main, textord, "K", "\u039A"); +defineSymbol(math, main, textord, "M", "\u039C"); +defineSymbol(math, main, textord, "N", "\u039D"); +defineSymbol(math, main, textord, "O", "\u039F"); +defineSymbol(math, main, textord, "P", "\u03A1"); +defineSymbol(math, main, textord, "T", "\u03A4"); +defineSymbol(math, main, textord, "X", "\u03A7"); +defineSymbol(math, main, textord, "\u00ac", "\\neg", true); +defineSymbol(math, main, textord, "\u00ac", "\\lnot"); +defineSymbol(math, main, textord, "\u22a4", "\\top"); +defineSymbol(math, main, textord, "\u22a5", "\\bot"); +defineSymbol(math, main, textord, "\u2205", "\\emptyset"); +defineSymbol(math, ams, textord, "\u2205", "\\varnothing"); +defineSymbol(math, main, mathord, "\u03b1", "\\alpha", true); +defineSymbol(math, main, mathord, "\u03b2", "\\beta", true); +defineSymbol(math, main, mathord, "\u03b3", "\\gamma", true); +defineSymbol(math, main, mathord, "\u03b4", "\\delta", true); +defineSymbol(math, main, mathord, "\u03f5", "\\epsilon", true); +defineSymbol(math, main, mathord, "\u03b6", "\\zeta", true); +defineSymbol(math, main, mathord, "\u03b7", "\\eta", true); +defineSymbol(math, main, mathord, "\u03b8", "\\theta", true); +defineSymbol(math, main, mathord, "\u03b9", "\\iota", true); +defineSymbol(math, main, mathord, "\u03ba", "\\kappa", true); +defineSymbol(math, main, mathord, "\u03bb", "\\lambda", true); +defineSymbol(math, main, mathord, "\u03bc", "\\mu", true); +defineSymbol(math, main, mathord, "\u03bd", "\\nu", true); +defineSymbol(math, main, mathord, "\u03be", "\\xi", true); +defineSymbol(math, main, mathord, "\u03bf", "\\omicron", true); +defineSymbol(math, main, mathord, "\u03c0", "\\pi", true); +defineSymbol(math, main, mathord, "\u03c1", "\\rho", true); +defineSymbol(math, main, mathord, "\u03c3", "\\sigma", true); +defineSymbol(math, main, mathord, "\u03c4", "\\tau", true); +defineSymbol(math, main, mathord, "\u03c5", "\\upsilon", true); +defineSymbol(math, main, mathord, "\u03d5", "\\phi", true); +defineSymbol(math, main, mathord, "\u03c7", "\\chi", true); +defineSymbol(math, main, mathord, "\u03c8", "\\psi", true); +defineSymbol(math, main, mathord, "\u03c9", "\\omega", true); +defineSymbol(math, main, mathord, "\u03b5", "\\varepsilon", true); +defineSymbol(math, main, mathord, "\u03d1", "\\vartheta", true); +defineSymbol(math, main, mathord, "\u03d6", "\\varpi", true); +defineSymbol(math, main, mathord, "\u03f1", "\\varrho", true); +defineSymbol(math, main, mathord, "\u03c2", "\\varsigma", true); +defineSymbol(math, main, mathord, "\u03c6", "\\varphi", true); +defineSymbol(math, main, bin, "\u2217", "*", true); +defineSymbol(math, main, bin, "+", "+"); +defineSymbol(math, main, bin, "\u2212", "-", true); +defineSymbol(math, main, bin, "\u22c5", "\\cdot", true); +defineSymbol(math, main, bin, "\u2218", "\\circ", true); +defineSymbol(math, main, bin, "\u00f7", "\\div", true); +defineSymbol(math, main, bin, "\u00b1", "\\pm", true); +defineSymbol(math, main, bin, "\u00d7", "\\times", true); +defineSymbol(math, main, bin, "\u2229", "\\cap", true); +defineSymbol(math, main, bin, "\u222a", "\\cup", true); +defineSymbol(math, main, bin, "\u2216", "\\setminus", true); +defineSymbol(math, main, bin, "\u2227", "\\land"); +defineSymbol(math, main, bin, "\u2228", "\\lor"); +defineSymbol(math, main, bin, "\u2227", "\\wedge", true); +defineSymbol(math, main, bin, "\u2228", "\\vee", true); +defineSymbol(math, main, textord, "\u221a", "\\surd"); +defineSymbol(math, main, symbols_open, "\u27e8", "\\langle", true); +defineSymbol(math, main, symbols_open, "\u2223", "\\lvert"); +defineSymbol(math, main, symbols_open, "\u2225", "\\lVert"); +defineSymbol(math, main, symbols_close, "?", "?"); +defineSymbol(math, main, symbols_close, "!", "!"); +defineSymbol(math, main, symbols_close, "\u27e9", "\\rangle", true); +defineSymbol(math, main, symbols_close, "\u2223", "\\rvert"); +defineSymbol(math, main, symbols_close, "\u2225", "\\rVert"); +defineSymbol(math, main, rel, "=", "="); +defineSymbol(math, main, rel, ":", ":"); +defineSymbol(math, main, rel, "\u2248", "\\approx", true); +defineSymbol(math, main, rel, "\u2245", "\\cong", true); +defineSymbol(math, main, rel, "\u2265", "\\ge"); +defineSymbol(math, main, rel, "\u2265", "\\geq", true); +defineSymbol(math, main, rel, "\u2190", "\\gets"); +defineSymbol(math, main, rel, ">", "\\gt", true); +defineSymbol(math, main, rel, "\u2208", "\\in", true); +defineSymbol(math, main, rel, "\ue020", "\\@not"); +defineSymbol(math, main, rel, "\u2282", "\\subset", true); +defineSymbol(math, main, rel, "\u2283", "\\supset", true); +defineSymbol(math, main, rel, "\u2286", "\\subseteq", true); +defineSymbol(math, main, rel, "\u2287", "\\supseteq", true); +defineSymbol(math, ams, rel, "\u2288", "\\nsubseteq", true); +defineSymbol(math, ams, rel, "\u2289", "\\nsupseteq", true); +defineSymbol(math, main, rel, "\u22a8", "\\models"); +defineSymbol(math, main, rel, "\u2190", "\\leftarrow", true); +defineSymbol(math, main, rel, "\u2264", "\\le"); +defineSymbol(math, main, rel, "\u2264", "\\leq", true); +defineSymbol(math, main, rel, "<", "\\lt", true); +defineSymbol(math, main, rel, "\u2192", "\\rightarrow", true); +defineSymbol(math, main, rel, "\u2192", "\\to"); +defineSymbol(math, ams, rel, "\u2271", "\\ngeq", true); +defineSymbol(math, ams, rel, "\u2270", "\\nleq", true); +defineSymbol(math, main, spacing, "\u00a0", "\\ "); +defineSymbol(math, main, spacing, "\u00a0", "\\space"); +// Ref: LaTeX Source 2e: \DeclareRobustCommand{\nobreakspace}{% +defineSymbol(math, main, spacing, "\u00a0", "\\nobreakspace"); +defineSymbol(symbols_text, main, spacing, "\u00a0", "\\ "); +defineSymbol(symbols_text, main, spacing, "\u00a0", " "); +defineSymbol(symbols_text, main, spacing, "\u00a0", "\\space"); +defineSymbol(symbols_text, main, spacing, "\u00a0", "\\nobreakspace"); +defineSymbol(math, main, spacing, "", "\\nobreak"); +defineSymbol(math, main, spacing, "", "\\allowbreak"); +defineSymbol(math, main, punct, ",", ","); +defineSymbol(math, main, punct, ";", ";"); +defineSymbol(math, ams, bin, "\u22bc", "\\barwedge", true); +defineSymbol(math, ams, bin, "\u22bb", "\\veebar", true); +defineSymbol(math, main, bin, "\u2299", "\\odot", true); +defineSymbol(math, main, bin, "\u2295", "\\oplus", true); +defineSymbol(math, main, bin, "\u2297", "\\otimes", true); +defineSymbol(math, main, textord, "\u2202", "\\partial", true); +defineSymbol(math, main, bin, "\u2298", "\\oslash", true); +defineSymbol(math, ams, bin, "\u229a", "\\circledcirc", true); +defineSymbol(math, ams, bin, "\u22a1", "\\boxdot", true); +defineSymbol(math, main, bin, "\u25b3", "\\bigtriangleup"); +defineSymbol(math, main, bin, "\u25bd", "\\bigtriangledown"); +defineSymbol(math, main, bin, "\u2020", "\\dagger"); +defineSymbol(math, main, bin, "\u22c4", "\\diamond"); +defineSymbol(math, main, bin, "\u22c6", "\\star"); +defineSymbol(math, main, bin, "\u25c3", "\\triangleleft"); +defineSymbol(math, main, bin, "\u25b9", "\\triangleright"); +defineSymbol(math, main, symbols_open, "{", "\\{"); +defineSymbol(symbols_text, main, textord, "{", "\\{"); +defineSymbol(symbols_text, main, textord, "{", "\\textbraceleft"); +defineSymbol(math, main, symbols_close, "}", "\\}"); +defineSymbol(symbols_text, main, textord, "}", "\\}"); +defineSymbol(symbols_text, main, textord, "}", "\\textbraceright"); +defineSymbol(math, main, symbols_open, "{", "\\lbrace"); +defineSymbol(math, main, symbols_close, "}", "\\rbrace"); +defineSymbol(math, main, symbols_open, "[", "\\lbrack", true); +defineSymbol(symbols_text, main, textord, "[", "\\lbrack", true); +defineSymbol(math, main, symbols_close, "]", "\\rbrack", true); +defineSymbol(symbols_text, main, textord, "]", "\\rbrack", true); +defineSymbol(math, main, symbols_open, "(", "\\lparen", true); +defineSymbol(math, main, symbols_close, ")", "\\rparen", true); +defineSymbol(symbols_text, main, textord, "<", "\\textless", true); // in T1 fontenc +defineSymbol(symbols_text, main, textord, ">", "\\textgreater", true); // in T1 fontenc +defineSymbol(math, main, symbols_open, "\u230a", "\\lfloor", true); +defineSymbol(math, main, symbols_close, "\u230b", "\\rfloor", true); +defineSymbol(math, main, symbols_open, "\u2308", "\\lceil", true); +defineSymbol(math, main, symbols_close, "\u2309", "\\rceil", true); +defineSymbol(math, main, textord, "\\", "\\backslash"); +defineSymbol(math, main, textord, "\u2223", "|"); +defineSymbol(math, main, textord, "\u2223", "\\vert"); +defineSymbol(symbols_text, main, textord, "|", "\\textbar", true); // in T1 fontenc +defineSymbol(math, main, textord, "\u2225", "\\|"); +defineSymbol(math, main, textord, "\u2225", "\\Vert"); +defineSymbol(symbols_text, main, textord, "\u2225", "\\textbardbl"); +defineSymbol(symbols_text, main, textord, "~", "\\textasciitilde"); +defineSymbol(symbols_text, main, textord, "\\", "\\textbackslash"); +defineSymbol(symbols_text, main, textord, "^", "\\textasciicircum"); +defineSymbol(math, main, rel, "\u2191", "\\uparrow", true); +defineSymbol(math, main, rel, "\u21d1", "\\Uparrow", true); +defineSymbol(math, main, rel, "\u2193", "\\downarrow", true); +defineSymbol(math, main, rel, "\u21d3", "\\Downarrow", true); +defineSymbol(math, main, rel, "\u2195", "\\updownarrow", true); +defineSymbol(math, main, rel, "\u21d5", "\\Updownarrow", true); +defineSymbol(math, main, op, "\u2210", "\\coprod"); +defineSymbol(math, main, op, "\u22c1", "\\bigvee"); +defineSymbol(math, main, op, "\u22c0", "\\bigwedge"); +defineSymbol(math, main, op, "\u2a04", "\\biguplus"); +defineSymbol(math, main, op, "\u22c2", "\\bigcap"); +defineSymbol(math, main, op, "\u22c3", "\\bigcup"); +defineSymbol(math, main, op, "\u222b", "\\int"); +defineSymbol(math, main, op, "\u222b", "\\intop"); +defineSymbol(math, main, op, "\u222c", "\\iint"); +defineSymbol(math, main, op, "\u222d", "\\iiint"); +defineSymbol(math, main, op, "\u220f", "\\prod"); +defineSymbol(math, main, op, "\u2211", "\\sum"); +defineSymbol(math, main, op, "\u2a02", "\\bigotimes"); +defineSymbol(math, main, op, "\u2a01", "\\bigoplus"); +defineSymbol(math, main, op, "\u2a00", "\\bigodot"); +defineSymbol(math, main, op, "\u222e", "\\oint"); +defineSymbol(math, main, op, "\u222f", "\\oiint"); +defineSymbol(math, main, op, "\u2230", "\\oiiint"); +defineSymbol(math, main, op, "\u2a06", "\\bigsqcup"); +defineSymbol(math, main, op, "\u222b", "\\smallint"); +defineSymbol(symbols_text, main, inner, "\u2026", "\\textellipsis"); +defineSymbol(math, main, inner, "\u2026", "\\mathellipsis"); +defineSymbol(symbols_text, main, inner, "\u2026", "\\ldots", true); +defineSymbol(math, main, inner, "\u2026", "\\ldots", true); +defineSymbol(math, main, inner, "\u22ef", "\\@cdots", true); +defineSymbol(math, main, inner, "\u22f1", "\\ddots", true); +// \vdots is a macro that uses one of these two symbols (with made-up names): +defineSymbol(math, main, textord, "\u22ee", "\\varvdots"); +defineSymbol(symbols_text, main, textord, "\u22ee", "\\varvdots"); +defineSymbol(math, main, accent, "\u02ca", "\\acute"); +defineSymbol(math, main, accent, "\u02cb", "\\grave"); +defineSymbol(math, main, accent, "\u00a8", "\\ddot"); +defineSymbol(math, main, accent, "\u007e", "\\tilde"); +defineSymbol(math, main, accent, "\u02c9", "\\bar"); +defineSymbol(math, main, accent, "\u02d8", "\\breve"); +defineSymbol(math, main, accent, "\u02c7", "\\check"); +defineSymbol(math, main, accent, "\u005e", "\\hat"); +defineSymbol(math, main, accent, "\u20d7", "\\vec"); +defineSymbol(math, main, accent, "\u02d9", "\\dot"); +defineSymbol(math, main, accent, "\u02da", "\\mathring"); +// \imath and \jmath should be invariant to \mathrm, \mathbf, etc., so use PUA +defineSymbol(math, main, mathord, "\ue131", "\\@imath"); +defineSymbol(math, main, mathord, "\ue237", "\\@jmath"); +defineSymbol(math, main, textord, "\u0131", "\u0131"); +defineSymbol(math, main, textord, "\u0237", "\u0237"); +defineSymbol(symbols_text, main, textord, "\u0131", "\\i", true); +defineSymbol(symbols_text, main, textord, "\u0237", "\\j", true); +defineSymbol(symbols_text, main, textord, "\u00df", "\\ss", true); +defineSymbol(symbols_text, main, textord, "\u00e6", "\\ae", true); +defineSymbol(symbols_text, main, textord, "\u0153", "\\oe", true); +defineSymbol(symbols_text, main, textord, "\u00f8", "\\o", true); +defineSymbol(symbols_text, main, textord, "\u00c6", "\\AE", true); +defineSymbol(symbols_text, main, textord, "\u0152", "\\OE", true); +defineSymbol(symbols_text, main, textord, "\u00d8", "\\O", true); +defineSymbol(symbols_text, main, accent, "\u02ca", "\\'"); // acute +defineSymbol(symbols_text, main, accent, "\u02cb", "\\`"); // grave +defineSymbol(symbols_text, main, accent, "\u02c6", "\\^"); // circumflex +defineSymbol(symbols_text, main, accent, "\u02dc", "\\~"); // tilde +defineSymbol(symbols_text, main, accent, "\u02c9", "\\="); // macron +defineSymbol(symbols_text, main, accent, "\u02d8", "\\u"); // breve +defineSymbol(symbols_text, main, accent, "\u02d9", "\\."); // dot above +defineSymbol(symbols_text, main, accent, "\u00b8", "\\c"); // cedilla +defineSymbol(symbols_text, main, accent, "\u02da", "\\r"); // ring above +defineSymbol(symbols_text, main, accent, "\u02c7", "\\v"); // caron +defineSymbol(symbols_text, main, accent, "\u00a8", '\\"'); // diaeresis +defineSymbol(symbols_text, main, accent, "\u02dd", "\\H"); // double acute +defineSymbol(symbols_text, main, accent, "\u25ef", "\\textcircled"); // \bigcirc glyph + +// These ligatures are detected and created in Parser.js's `formLigatures`. +const ligatures = { + "--": true, + "---": true, + "``": true, + "''": true +}; +defineSymbol(symbols_text, main, textord, "\u2013", "--", true); +defineSymbol(symbols_text, main, textord, "\u2013", "\\textendash"); +defineSymbol(symbols_text, main, textord, "\u2014", "---", true); +defineSymbol(symbols_text, main, textord, "\u2014", "\\textemdash"); +defineSymbol(symbols_text, main, textord, "\u2018", "`", true); +defineSymbol(symbols_text, main, textord, "\u2018", "\\textquoteleft"); +defineSymbol(symbols_text, main, textord, "\u2019", "'", true); +defineSymbol(symbols_text, main, textord, "\u2019", "\\textquoteright"); +defineSymbol(symbols_text, main, textord, "\u201c", "``", true); +defineSymbol(symbols_text, main, textord, "\u201c", "\\textquotedblleft"); +defineSymbol(symbols_text, main, textord, "\u201d", "''", true); +defineSymbol(symbols_text, main, textord, "\u201d", "\\textquotedblright"); +// \degree from gensymb package +defineSymbol(math, main, textord, "\u00b0", "\\degree", true); +defineSymbol(symbols_text, main, textord, "\u00b0", "\\degree"); +// \textdegree from inputenc package +defineSymbol(symbols_text, main, textord, "\u00b0", "\\textdegree", true); +// TODO: In LaTeX, \pounds can generate a different character in text and math +// mode, but among our fonts, only Main-Regular defines this character "163". +defineSymbol(math, main, textord, "\u00a3", "\\pounds"); +defineSymbol(math, main, textord, "\u00a3", "\\mathsterling", true); +defineSymbol(symbols_text, main, textord, "\u00a3", "\\pounds"); +defineSymbol(symbols_text, main, textord, "\u00a3", "\\textsterling", true); +defineSymbol(math, ams, textord, "\u2720", "\\maltese"); +defineSymbol(symbols_text, ams, textord, "\u2720", "\\maltese"); + +// There are lots of symbols which are the same, so we add them in afterwards. +// All of these are textords in math mode +const mathTextSymbols = "0123456789/@.\""; +for (let i = 0; i < mathTextSymbols.length; i++) { + const ch = mathTextSymbols.charAt(i); + defineSymbol(math, main, textord, ch, ch); +} + +// All of these are textords in text mode +const textSymbols = "0123456789!@*()-=+\";:?/.,"; +for (let i = 0; i < textSymbols.length; i++) { + const ch = textSymbols.charAt(i); + defineSymbol(symbols_text, main, textord, ch, ch); +} + +// All of these are textords in text mode, and mathords in math mode +const letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; +for (let i = 0; i < letters.length; i++) { + const ch = letters.charAt(i); + defineSymbol(math, main, mathord, ch, ch); + defineSymbol(symbols_text, main, textord, ch, ch); +} + +// Blackboard bold and script letters in Unicode range +defineSymbol(math, ams, textord, "C", "\u2102"); // blackboard bold +defineSymbol(symbols_text, ams, textord, "C", "\u2102"); +defineSymbol(math, ams, textord, "H", "\u210D"); +defineSymbol(symbols_text, ams, textord, "H", "\u210D"); +defineSymbol(math, ams, textord, "N", "\u2115"); +defineSymbol(symbols_text, ams, textord, "N", "\u2115"); +defineSymbol(math, ams, textord, "P", "\u2119"); +defineSymbol(symbols_text, ams, textord, "P", "\u2119"); +defineSymbol(math, ams, textord, "Q", "\u211A"); +defineSymbol(symbols_text, ams, textord, "Q", "\u211A"); +defineSymbol(math, ams, textord, "R", "\u211D"); +defineSymbol(symbols_text, ams, textord, "R", "\u211D"); +defineSymbol(math, ams, textord, "Z", "\u2124"); +defineSymbol(symbols_text, ams, textord, "Z", "\u2124"); +defineSymbol(math, main, mathord, "h", "\u210E"); // italic h, Planck constant +defineSymbol(symbols_text, main, mathord, "h", "\u210E"); + +// The next loop loads wide (surrogate pair) characters. +// We support some letters in the Unicode range U+1D400 to U+1D7FF, +// Mathematical Alphanumeric Symbols. +// Some editors do not deal well with wide characters. So don't write the +// string into this file. Instead, create the string from the surrogate pair. +let wideChar; +for (let i = 0; i < letters.length; i++) { + const ch = letters.charAt(i); + + // The hex numbers in the next line are a surrogate pair. + // 0xD835 is the high surrogate for all letters in the range we support. + // 0xDC00 is the low surrogate for bold A. + wideChar = String.fromCharCode(0xD835, 0xDC00 + i); // A-Z a-z bold + defineSymbol(math, main, mathord, ch, wideChar); + defineSymbol(symbols_text, main, textord, ch, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDC34 + i); // A-Z a-z italic + defineSymbol(math, main, mathord, ch, wideChar); + defineSymbol(symbols_text, main, textord, ch, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDC68 + i); // A-Z a-z bold italic + defineSymbol(math, main, mathord, ch, wideChar); + defineSymbol(symbols_text, main, textord, ch, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDD04 + i); // A-Z a-z Fraktur + defineSymbol(math, main, mathord, ch, wideChar); + defineSymbol(symbols_text, main, textord, ch, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDD6C + i); // A-Z a-z bold Fraktur + defineSymbol(math, main, mathord, ch, wideChar); + defineSymbol(symbols_text, main, textord, ch, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDDA0 + i); // A-Z a-z sans-serif + defineSymbol(math, main, mathord, ch, wideChar); + defineSymbol(symbols_text, main, textord, ch, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDDD4 + i); // A-Z a-z sans bold + defineSymbol(math, main, mathord, ch, wideChar); + defineSymbol(symbols_text, main, textord, ch, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDE08 + i); // A-Z a-z sans italic + defineSymbol(math, main, mathord, ch, wideChar); + defineSymbol(symbols_text, main, textord, ch, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDE70 + i); // A-Z a-z monospace + defineSymbol(math, main, mathord, ch, wideChar); + defineSymbol(symbols_text, main, textord, ch, wideChar); + if (i < 26) { + // KaTeX fonts have only capital letters for blackboard bold and script. + // See exception for k below. + wideChar = String.fromCharCode(0xD835, 0xDD38 + i); // A-Z double struck + defineSymbol(math, main, mathord, ch, wideChar); + defineSymbol(symbols_text, main, textord, ch, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDC9C + i); // A-Z script + defineSymbol(math, main, mathord, ch, wideChar); + defineSymbol(symbols_text, main, textord, ch, wideChar); + } + + // TODO: Add bold script when it is supported by a KaTeX font. +} +// "k" is the only double struck lower case letter in the KaTeX fonts. +wideChar = String.fromCharCode(0xD835, 0xDD5C); // k double struck +defineSymbol(math, main, mathord, "k", wideChar); +defineSymbol(symbols_text, main, textord, "k", wideChar); + +// Next, some wide character numerals +for (let i = 0; i < 10; i++) { + const ch = i.toString(); + wideChar = String.fromCharCode(0xD835, 0xDFCE + i); // 0-9 bold + defineSymbol(math, main, mathord, ch, wideChar); + defineSymbol(symbols_text, main, textord, ch, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDFE2 + i); // 0-9 sans serif + defineSymbol(math, main, mathord, ch, wideChar); + defineSymbol(symbols_text, main, textord, ch, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDFEC + i); // 0-9 bold sans + defineSymbol(math, main, mathord, ch, wideChar); + defineSymbol(symbols_text, main, textord, ch, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDFF6 + i); // 0-9 monospace + defineSymbol(math, main, mathord, ch, wideChar); + defineSymbol(symbols_text, main, textord, ch, wideChar); +} + +// We add these Latin-1 letters as symbols for backwards-compatibility, +// but they are not actually in the font, nor are they supported by the +// Unicode accent mechanism, so they fall back to Times font and look ugly. +// TODO(edemaine): Fix this. +const extraLatin = "\u00d0\u00de\u00fe"; +for (let i = 0; i < extraLatin.length; i++) { + const ch = extraLatin.charAt(i); + defineSymbol(math, main, mathord, ch, ch); + defineSymbol(symbols_text, main, textord, ch, ch); +} +;// ./src/wide-character.ts +/** + * This file provides support for Unicode range U+1D400 to U+1D7FF, + * Mathematical Alphanumeric Symbols. + * + * Function wideCharacterFont takes a wide character as input and returns + * the font information necessary to render it properly. + */ + + +const boldUpright = { + mathClass: "mathbf", + textClass: "textbf", + font: "Main-Bold" +}; +const italic = { + mathClass: "mathnormal", + textClass: "textit", + font: "Math-Italic" +}; +const boldItalic = { + mathClass: "boldsymbol", + textClass: "boldsymbol", + font: "Main-BoldItalic" +}; +const script = { + mathClass: "mathscr", + textClass: "textscr", + font: "Script-Regular" +}; +const noFont = { + mathClass: "", + textClass: "", + font: "" +}; +const fraktur = { + mathClass: "mathfrak", + textClass: "textfrak", + font: "Fraktur-Regular" +}; +const doubleStruck = { + mathClass: "mathbb", + textClass: "textbb", + font: "AMS-Regular" +}; +const boldFraktur = { + mathClass: "mathboldfrak", + textClass: "textboldfrak", + font: "Fraktur-Regular" +}; +const sansSerif = { + mathClass: "mathsf", + textClass: "textsf", + font: "SansSerif-Regular" +}; +const boldSansSerif = { + mathClass: "mathboldsf", + textClass: "textboldsf", + font: "SansSerif-Bold" +}; +const italicSansSerif = { + mathClass: "mathitsf", + textClass: "textitsf", + font: "SansSerif-Italic" +}; +const monospace = { + mathClass: "mathtt", + textClass: "texttt", + font: "Typewriter-Regular" +}; + +/** + * Data below is from https://www.unicode.org/charts/PDF/U1D400.pdf + * That document sorts characters into groups by font type, say bold or italic. + * + * In the arrays below, each object consists of three properties: + * * The CSS class of that group when in math mode. + * * The CSS class of that group when in text mode. + * * The font name, so that KaTeX can get font metrics. + */ + +const wideLatinLetterData = [boldUpright, boldUpright, +// A-Z, a-z +italic, italic, +// A-Z, a-z +boldItalic, boldItalic, +// A-Z, a-z +// Map fancy A-Z letters to script, not calligraphic. +// This aligns with unicode-math and math fonts (except Cambria Math). +script, noFont, +// A-Z script, a-z — no font +noFont, noFont, +// A-Z bold script, a-z bold script — no font +fraktur, fraktur, +// A-Z, a-z +doubleStruck, doubleStruck, +// A-Z double-struck, k double-struck +// Note that we are using a bold font, but font metrics for regular Fraktur. +boldFraktur, boldFraktur, +// A-Z, a-z +sansSerif, sansSerif, +// A-Z, a-z +boldSansSerif, boldSansSerif, +// A-Z, a-z +italicSansSerif, italicSansSerif, +// A-Z, a-z +noFont, noFont, +// A-Z bold italic sans, a-z bold italic sans - no font +monospace, monospace // A-Z, a-z +]; +const wideNumeralData = [boldUpright, +// 0-9 +noFont, +// 0-9 double-struck. No KaTeX font. +sansSerif, +// 0-9 +boldSansSerif, +// 0-9 +monospace // 0-9 +]; +const wideCharacterFont = wideChar => { + // IE doesn't support codePointAt(). So work with the surrogate pair. + const H = wideChar.charCodeAt(0); // high surrogate + const L = wideChar.charCodeAt(1); // low surrogate + const codePoint = (H - 0xD800) * 0x400 + (L - 0xDC00) + 0x10000; + if (0x1D400 <= codePoint && codePoint < 0x1D6A4) { + // wideLatinLetterData contains exactly 26 chars on each row. + // So we can calculate the relevant row. No traverse necessary. + const i = Math.floor((codePoint - 0x1D400) / 26); + return wideLatinLetterData[i]; + } else if (0x1D7CE <= codePoint && codePoint <= 0x1D7FF) { + // Numerals, ten per row. + const i = Math.floor((codePoint - 0x1D7CE) / 10); + return wideNumeralData[i]; + } else if (codePoint === 0x1D6A5 || codePoint === 0x1D6A6) { + // dotless i or j + return wideLatinLetterData[0]; + } else if (0x1D6A6 < codePoint && codePoint < 0x1D7CE) { + // Greek letters. Not supported, yet. + return noFont; + } else { + // We don't support any wide characters outside 1D400–1D7FF. + throw new src_ParseError("Unsupported character: " + wideChar); + } +}; +;// ./src/strict.ts +/* eslint no-console:0 */ + + + +/** + * Dispatch LaTeX-incompatible (nonstrict) input according to the `strict` + * setting. Can safely not be called if `strict` is `false`. + * + * With `report: true`, reports the transgression and returns nothing: + * `"error"`/`true` throws a `ParseError`, `"warn"` warns via `console.warn`, + * and `"ignore"`/`false` does nothing. An exception thrown by a `strict` + * callback propagates to the caller. + * + * With `report: false`, checks whether to apply strict (LaTeX-adhering) + * behavior for unusual input (like `\\`) and never throws: `"error"`/`true` + * returns `true`, `"ignore"`/`false` returns `false`, and `"warn"` warns and + * returns `false`. An exception thrown by a `strict` callback is treated as + * `"error"`. This is for the second category of `errorCode`s listed in + * `docs/options.md`. + */ + +function handleStrict(params) { + const strict = params.strict, + errorCode = params.errorCode, + errorMsg = params.errorMsg, + token = params.token, + report = params.report; + let behavior = strict; + if (typeof strict === "function") { + if (report) { + behavior = strict(errorCode, errorMsg, token); + } else { + try { + behavior = strict(errorCode, errorMsg, token); + } catch (error) { + behavior = "error"; + } + } + } + switch (behavior) { + case true: + case "error": + if (report) { + throw new src_ParseError("LaTeX-incompatible input and strict mode is set to 'error': " + (errorMsg + " [" + errorCode + "]"), token); + } else { + return true; + } + case false: + case "ignore": + if (!report) { + return false; + } + break; + case "warn": + default: + typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to 'warn': " + (errorMsg + " [" + errorCode + "]")); + if (!report) { + return false; + } + break; + } +} +;// ./src/buildCommon.ts +/** + * This module contains general functions that can be used for building + * different kinds of domTree nodes in a consistent manner. + */ + + + + + + + + +/** + * Looks up the given symbol in fontMetrics, after applying any symbol + * replacements defined in symbol.js + */ +const lookupSymbol = function (value, fontName, mode) { + // Replace the value with its replaced value from symbol.js + if (src_symbols[mode][value]) { + const replacement = src_symbols[mode][value].replace; + if (replacement) { + value = replacement; + } + } + return { + value, + metrics: getCharacterMetrics(value, fontName, mode) + }; +}; + +/** + * Makes a symbolNode after translation via the list of symbols in symbols.js. + * Correctly pulls out metrics for the character, and optionally takes a list of + * classes to be attached to the node. + * + * TODO: make argument order closer to makeSpan + * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which + * should if present come first in `classes`. + */ +const makeSymbol = function (value, fontName, mode, options, classes) { + const lookup = lookupSymbol(value, fontName, mode); + const metrics = lookup.metrics; + value = lookup.value; + let symbolNode; + if (metrics) { + let italic = metrics.italic; + if (mode === "text" || options && options.font === "mathit") { + italic = 0; + } + symbolNode = new SymbolNode(value, metrics.height, metrics.depth, italic, metrics.skew, metrics.width, classes); + } else { + handleStrict({ + strict: options.strict, + errorCode: "symbolNotInFont", + errorMsg: "No character metrics for '" + value + "' in style '" + fontName + "' and mode '" + mode + "'", + report: true + }); + symbolNode = new SymbolNode(value, 0, 0, 0, 0, 0, classes); + } + symbolNode.maxFontSize = options.sizeMultiplier; + if (options.style.isTight()) { + symbolNode.classes.push("mtight"); + } + const color = options.getColor(); + if (color) { + symbolNode.style.color = color; + } + return symbolNode; +}; + +/** + * Makes a symbol in Main-Regular or AMS-Regular. + * Used for rel, bin, open, close, inner, and punct. + */ +const mathsym = function (value, mode, options, classes) { + if (classes === void 0) { + classes = []; + } + // Decide what font to render the symbol in by its entry in the symbols + // table. + // Have a special case for when the value = \ because the \ is used as a + // textord in unsupported command errors but cannot be parsed as a regular + // text ordinal and is therefore not present as a symbol in the symbols + // table for text, as well as a special case for boldsymbol because it + // can be used for bold + and - + if (options.font === "boldsymbol" && lookupSymbol(value, "Main-Bold", mode).metrics) { + return makeSymbol(value, "Main-Bold", mode, options, classes.concat(["mathbf"])); + } else if (value === "\\" || src_symbols[mode][value].font === "main") { + return makeSymbol(value, "Main-Regular", mode, options, classes); + } else { + return makeSymbol(value, "AMS-Regular", mode, options, classes.concat(["amsrm"])); + } +}; + +/** + * Determines which of the two font names (Main-Bold and Math-BoldItalic) and + * corresponding style tags (mathbf or boldsymbol) to use for font "boldsymbol", + * depending on the symbol. Use this function instead of fontMap for font + * "boldsymbol". + */ +const boldSymbol = function (value, mode, type) { + if (type !== "textord" && lookupSymbol(value, "Math-BoldItalic", mode).metrics) { + return { + fontName: "Math-BoldItalic", + fontClass: "boldsymbol" + }; + } else { + // Some glyphs do not exist in Math-BoldItalic so we need to use + // Main-Bold instead. + return { + fontName: "Main-Bold", + fontClass: "mathbf" + }; + } +}; + +/** + * Makes either a mathord or textord in the correct font and color. + */ +const makeOrd = function (group, options) { + // Spacing nodes are rendered as textord. + const type = group.type === "mathord" ? "mathord" : "textord"; + const mode = group.mode; + const text = group.text; + const classes = ["mord"]; + const font = options.font, + fontFamily = options.fontFamily, + fontWeight = options.fontWeight, + fontShape = options.fontShape; + + // Math mode or Old font (i.e. \rm) + const useFont = mode === "math" || mode === "text" && !!font; + const fontOrFamily = useFont ? font : fontFamily; + let wideFontName = ""; + let wideFontClass = ""; + if (text.charCodeAt(0) === 0xD835) { + const wideCharData = wideCharacterFont(text); + wideFontName = wideCharData.font; + wideFontClass = wideCharData[mode + "Class"]; + } + if (wideFontName) { + // surrogate pairs get special treatment + return makeSymbol(text, wideFontName, mode, options, classes.concat(wideFontClass)); + } else if (fontOrFamily) { + let fontName; + let fontClasses; + if (fontOrFamily === "boldsymbol") { + const fontData = boldSymbol(text, mode, type); + fontName = fontData.fontName; + fontClasses = [fontData.fontClass]; + } else if (useFont) { + fontName = fontMap[font].fontName; + fontClasses = [font]; + } else { + fontName = retrieveTextFontName(fontFamily, fontWeight, fontShape); + fontClasses = [fontFamily, fontWeight, fontShape]; + } + if (lookupSymbol(text, fontName, mode).metrics) { + return makeSymbol(text, fontName, mode, options, classes.concat(fontClasses)); + } else if (Object.prototype.hasOwnProperty.call(ligatures, text) && fontName.slice(0, 10) === "Typewriter") { + // Deconstruct ligatures in monospace fonts (\texttt, \tt). + const parts = []; + for (let i = 0; i < text.length; i++) { + parts.push(makeSymbol(text[i], fontName, mode, options, classes.concat(fontClasses))); + } + return makeFragment(parts); + } + } + + // Makes a symbol in the default font for mathords and textords. + if (type === "mathord") { + return makeSymbol(text, "Math-Italic", mode, options, classes.concat(["mathnormal"])); + } else if (type === "textord") { + const font = src_symbols[mode][text] && src_symbols[mode][text].font; + if (font === "ams") { + const fontName = retrieveTextFontName("amsrm", fontWeight, fontShape); + return makeSymbol(text, fontName, mode, options, classes.concat("amsrm", fontWeight, fontShape)); + } else if (font === "main" || !font) { + const fontName = retrieveTextFontName("textrm", fontWeight, fontShape); + return makeSymbol(text, fontName, mode, options, classes.concat(fontWeight, fontShape)); + } else { + // fonts added by plugins + const fontName = retrieveTextFontName(font, fontWeight, fontShape); + // We add font name as a css class + return makeSymbol(text, fontName, mode, options, classes.concat(fontName, fontWeight, fontShape)); + } + } else { + throw new Error("unexpected type: " + type + " in makeOrd"); + } +}; + +/** + * Returns true if subsequent symbolNodes have the same classes, skew, maxFont, + * and styles. For mathnormal text, the left node must also have zero italic + * correction so we don't lose spacing between combined glyphs. + */ +const canCombine = (prev, next) => { + if (createClass(prev.classes) !== createClass(next.classes) || prev.skew !== next.skew || prev.maxFontSize !== next.maxFontSize || prev.italic !== 0 && prev.hasClass("mathnormal")) { + return false; + } + + // If prev and next both are just "mbin"s or "mord"s we don't combine them + // so that the proper spacing can be preserved. + if (prev.classes.length === 1) { + const cls = prev.classes[0]; + if (cls === "mbin" || cls === "mord") { + return false; + } + } + for (const key of Object.keys(prev.style)) { + if (prev.style[key] !== next.style[key]) { + return false; + } + } + for (const key of Object.keys(next.style)) { + if (prev.style[key] !== next.style[key]) { + return false; + } + } + return true; +}; + +/** + * Combine consecutive domTree.symbolNodes into a single symbolNode. + * Note: this function mutates the argument. + */ +const tryCombineChars = chars => { + for (let i = 0; i < chars.length - 1; i++) { + const prev = chars[i]; + const next = chars[i + 1]; + if (prev instanceof SymbolNode && next instanceof SymbolNode && canCombine(prev, next)) { + prev.text += next.text; + prev.height = Math.max(prev.height, next.height); + prev.depth = Math.max(prev.depth, next.depth); + // Use the last character's italic correction since we use + // it to add padding to the right of the span created from + // the combined characters. + prev.italic = next.italic; + chars.splice(i + 1, 1); + i--; + } + } + return chars; +}; + +/** + * Calculate the height, depth, and maxFontSize of an element based on its + * children. + */ +const sizeElementFromChildren = function (elem) { + let height = 0; + let depth = 0; + let maxFontSize = 0; + for (let i = 0; i < elem.children.length; i++) { + const child = elem.children[i]; + if (child.height > height) { + height = child.height; + } + if (child.depth > depth) { + depth = child.depth; + } + if (child.maxFontSize > maxFontSize) { + maxFontSize = child.maxFontSize; + } + } + elem.height = height; + elem.depth = depth; + elem.maxFontSize = maxFontSize; +}; + +/** + * Makes a span with the given list of classes, list of children, and options. + * + * TODO(#953): Ensure that `options` is always provided (currently some call + * sites don't pass it) and make the type below mandatory. + * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which + * should if present come first in `classes`. + */ +const makeSpan = function (classes, children, options, style) { + const span = new Span(classes, children, options, style); + sizeElementFromChildren(span); + return span; +}; + +// SVG one is simpler -- doesn't require height, depth, max-font setting. +// This is also a separate method for typesafety. +const makeSvgSpan = (classes, children, options, style) => new Span(classes, children, options, style); +const makeLineSpan = function (className, options, thickness) { + const line = makeSpan([className], [], options); + line.height = Math.max(thickness || options.fontMetrics().defaultRuleThickness, options.minRuleThickness); + line.style.borderBottomWidth = makeEm(line.height); + line.maxFontSize = 1.0; + return line; +}; + +/** + * Makes an anchor with the given href, list of classes, list of children, + * and options. + */ +const makeAnchor = function (href, classes, children, options) { + const anchor = new Anchor(href, classes, children, options); + sizeElementFromChildren(anchor); + return anchor; +}; + +/** + * Makes a document fragment with the given list of children. + */ +const makeFragment = function (children) { + const fragment = new DocumentFragment(children); + sizeElementFromChildren(fragment); + return fragment; +}; + +/** + * Wraps group in a span if it's a document fragment, allowing to apply classes + * and styles + */ +const wrapFragment = function (group, options) { + if (group instanceof DocumentFragment) { + return makeSpan([], [group], options); + } + return group; +}; + +// A list of child or kern nodes to be stacked on top of each other (i.e. the +// first element will be at the bottom, and the last at the top). + +// Computes the updated `children` list and the overall depth. +// +// This helper function for makeVList makes it easier to enforce type safety by +// allowing early exits (returns) in the logic. +const getVListChildrenAndDepth = function (params) { + if (params.positionType === "individualShift") { + const oldChildren = params.children; + const children = [oldChildren[0]]; + + // Add in kerns to the list of params.children to get each element to be + // shifted to the correct specified shift + const depth = -oldChildren[0].shift - oldChildren[0].elem.depth; + let currPos = depth; + for (let i = 1; i < oldChildren.length; i++) { + const diff = -oldChildren[i].shift - currPos - oldChildren[i].elem.depth; + const size = diff - (oldChildren[i - 1].elem.height + oldChildren[i - 1].elem.depth); + currPos = currPos + diff; + children.push({ + type: "kern", + size + }); + children.push(oldChildren[i]); + } + return { + children, + depth + }; + } + let depth; + if (params.positionType === "top") { + // We always start at the bottom, so calculate the bottom by adding up + // all the sizes + let bottom = params.positionData; + for (let i = 0; i < params.children.length; i++) { + const child = params.children[i]; + bottom -= child.type === "kern" ? child.size : child.elem.height + child.elem.depth; + } + depth = bottom; + } else if (params.positionType === "bottom") { + depth = -params.positionData; + } else { + const firstChild = params.children[0]; + if (firstChild.type !== "elem") { + throw new Error('First child must have type "elem".'); + } + if (params.positionType === "shift") { + depth = -firstChild.elem.depth - params.positionData; + } else if (params.positionType === "firstBaseline") { + depth = -firstChild.elem.depth; + } else { + throw new Error("Invalid positionType " + params.positionType + "."); + } + } + return { + children: params.children, + depth + }; +}; + +/** + * Makes a vertical list by stacking elements and kerns on top of each other. + * Allows for many different ways of specifying the positioning method. + * + * See VListParam documentation above. + */ +const makeVList = function (params, options) { + const _getVListChildrenAndD = getVListChildrenAndDepth(params), + children = _getVListChildrenAndD.children, + depth = _getVListChildrenAndD.depth; + + // Create a strut that is taller than any list item. The strut is added to + // each item, where it will determine the item's baseline. Since it has + // `overflow:hidden`, the strut's top edge will sit on the item's line box's + // top edge and the strut's bottom edge will sit on the item's baseline, + // with no additional line-height spacing. This allows the item baseline to + // be positioned precisely without worrying about font ascent and + // line-height. + let pstrutSize = 0; + for (let i = 0; i < children.length; i++) { + const child = children[i]; + if (child.type === "elem") { + const elem = child.elem; + pstrutSize = Math.max(pstrutSize, elem.maxFontSize, elem.height); + } + } + pstrutSize += 2; + const pstrut = makeSpan(["pstrut"], []); + pstrut.style.height = makeEm(pstrutSize); + + // Create a new list of actual children at the correct offsets + const realChildren = []; + let minPos = depth; + let maxPos = depth; + let currPos = depth; + for (let i = 0; i < children.length; i++) { + const child = children[i]; + if (child.type === "kern") { + currPos += child.size; + } else { + const elem = child.elem; + const classes = child.wrapperClasses || []; + const style = child.wrapperStyle || {}; + const childWrap = makeSpan(classes, [pstrut, elem], undefined, style); + childWrap.style.top = makeEm(-pstrutSize - currPos - elem.depth); + if (child.marginLeft) { + childWrap.style.marginLeft = child.marginLeft; + } + if (child.marginRight) { + childWrap.style.marginRight = child.marginRight; + } + realChildren.push(childWrap); + currPos += elem.height + elem.depth; + } + minPos = Math.min(minPos, currPos); + maxPos = Math.max(maxPos, currPos); + } + + // The vlist contents go in a table-cell with `vertical-align:bottom`. + // This cell's bottom edge will determine the containing table's baseline + // without overly expanding the containing line-box. + const vlist = makeSpan(["vlist"], realChildren); + vlist.style.height = makeEm(maxPos); + + // A second row is used if necessary to represent the vlist's depth. + let rows; + if (minPos < 0) { + // We will define depth in an empty span with display: table-cell. + // It should render with the height that we define. But Chrome, in + // contenteditable mode only, treats that span as if it contains some + // text content. And that min-height over-rides our desired height. + // So we put another empty span inside the depth strut span. + const emptySpan = makeSpan([], []); + const depthStrut = makeSpan(["vlist"], [emptySpan]); + depthStrut.style.height = makeEm(-minPos); + + // Safari wants the first row to have inline content; otherwise it + // puts the bottom of the *second* row on the baseline. + const topStrut = makeSpan(["vlist-s"], [new SymbolNode("\u200b")]); + rows = [makeSpan(["vlist-r"], [vlist, topStrut]), makeSpan(["vlist-r"], [depthStrut])]; + } else { + rows = [makeSpan(["vlist-r"], [vlist])]; + } + const vtable = makeSpan(["vlist-t"], rows); + if (rows.length === 2) { + vtable.classes.push("vlist-t2"); + } + vtable.height = maxPos; + vtable.depth = -minPos; + return vtable; +}; + +// Glue is a concept from TeX which is a flexible space between elements in +// either a vertical or horizontal list. In KaTeX, at least for now, it's +// static space between elements in a horizontal layout. +const makeGlue = (measurement, options) => { + // Make an empty span for the space + const rule = makeSpan(["mspace"], [], options); + const size = calculateSize(measurement, options); + rule.style.marginRight = makeEm(size); + return rule; +}; + +// Takes font options, and returns the appropriate fontLookup name +const retrieveTextFontName = (fontFamily, fontWeight, fontShape) => { + let baseFontName; + let fontStylesName; + switch (fontFamily) { + case "amsrm": + baseFontName = "AMS"; + break; + case "textrm": + baseFontName = "Main"; + break; + case "textsf": + baseFontName = "SansSerif"; + break; + case "texttt": + baseFontName = "Typewriter"; + break; + default: + baseFontName = fontFamily; + // use fonts added by a plugin + } + if (fontWeight === "textbf" && fontShape === "textit") { + fontStylesName = "BoldItalic"; + } else if (fontWeight === "textbf") { + fontStylesName = "Bold"; + } else if (fontShape === "textit") { + fontStylesName = "Italic"; + } else { + fontStylesName = "Regular"; + } + return baseFontName + "-" + fontStylesName; +}; + +/** + * Maps TeX font commands to objects containing: + * - variant: string used for "mathvariant" attribute in buildMathML.js + * - fontName: the "style" parameter to fontMetrics.getCharacterMetrics + */ +// A map between tex font commands an MathML mathvariant attribute values +const fontMap = { + // styles + "mathbf": { + variant: "bold", + fontName: "Main-Bold" + }, + "mathrm": { + variant: "normal", + fontName: "Main-Regular" + }, + "textit": { + variant: "italic", + fontName: "Main-Italic" + }, + "mathit": { + variant: "italic", + fontName: "Main-Italic" + }, + "mathnormal": { + variant: "italic", + fontName: "Math-Italic" + }, + "mathsfit": { + variant: "sans-serif-italic", + fontName: "SansSerif-Italic" + }, + // "boldsymbol" is missing because they require the use of multiple fonts: + // Math-BoldItalic and Main-Bold. This is handled by a special case in + // makeOrd which ends up calling boldsymbol. + + // families + "mathbb": { + variant: "double-struck", + fontName: "AMS-Regular" + }, + "mathcal": { + variant: "script", + fontName: "Caligraphic-Regular" + }, + "mathfrak": { + variant: "fraktur", + fontName: "Fraktur-Regular" + }, + "mathscr": { + variant: "script", + fontName: "Script-Regular" + }, + "mathsf": { + variant: "sans-serif", + fontName: "SansSerif-Regular" + }, + "mathtt": { + variant: "monospace", + fontName: "Typewriter-Regular" + } +}; +const svgData = { + // path, width, height + vec: ["vec", 0.471, 0.714], + // values from the font glyph + oiintSize1: ["oiintSize1", 0.957, 0.499], + // oval to overlay the integrand + oiintSize2: ["oiintSize2", 1.472, 0.659], + oiiintSize1: ["oiiintSize1", 1.304, 0.499], + oiiintSize2: ["oiiintSize2", 1.98, 0.659] +}; +const staticSvg = function (value, options) { + // Create a span with inline SVG for the element. + const _svgData$value = svgData[value], + pathName = _svgData$value[0], + width = _svgData$value[1], + height = _svgData$value[2]; + const path = new PathNode(pathName); + const svgNode = new SvgNode([path], { + "width": makeEm(width), + "height": makeEm(height), + // Override CSS rule `.katex svg { width: 100% }` + "style": "width:" + makeEm(width), + "viewBox": "0 0 " + 1000 * width + " " + 1000 * height, + "preserveAspectRatio": "xMinYMin" + }); + const span = makeSvgSpan(["katex-overlay"], [svgNode], options); + span.height = height; + span.style.height = makeEm(height); + span.style.width = makeEm(width); + return span; +}; +;// ./src/spacingData.ts +/** + * Describes spaces between different classes of atoms. + */ + +const thinspace = { + number: 3, + unit: "mu" +}; +const mediumspace = { + number: 4, + unit: "mu" +}; +const thickspace = { + number: 5, + unit: "mu" +}; + +// Making the type below exact with all optional fields doesn't work due to +// - https://github.com/facebook/flow/issues/4582 +// - https://github.com/facebook/flow/issues/5688 +// However, since *all* fields are optional, $Shape<> works as suggested in 5688 +// above. + +// Spacing relationships for display and text styles +const spacings = { + mord: { + mop: thinspace, + mbin: mediumspace, + mrel: thickspace, + minner: thinspace + }, + mop: { + mord: thinspace, + mop: thinspace, + mrel: thickspace, + minner: thinspace + }, + mbin: { + mord: mediumspace, + mop: mediumspace, + mopen: mediumspace, + minner: mediumspace + }, + mrel: { + mord: thickspace, + mop: thickspace, + mopen: thickspace, + minner: thickspace + }, + mopen: {}, + mclose: { + mop: thinspace, + mbin: mediumspace, + mrel: thickspace, + minner: thinspace + }, + mpunct: { + mord: thinspace, + mop: thinspace, + mrel: thickspace, + mopen: thinspace, + mclose: thinspace, + mpunct: thinspace, + minner: thinspace + }, + minner: { + mord: thinspace, + mop: thinspace, + mbin: mediumspace, + mrel: thickspace, + mopen: thinspace, + mpunct: thinspace, + minner: thinspace + } +}; + +// Spacing relationships for script and scriptscript styles +const tightSpacings = { + mord: { + mop: thinspace + }, + mop: { + mord: thinspace, + mop: thinspace + }, + mbin: {}, + mrel: {}, + mopen: {}, + mclose: { + mop: thinspace + }, + mpunct: {}, + minner: { + mop: thinspace + } +}; +;// ./src/defineFunction.ts +/** Context provided to function handlers for error messages. */ + +// Note: reverse the order of the return type union will cause a flow error. +// See https://github.com/facebook/flow/issues/3663. + +// More general version of `HtmlBuilder` for nodes (e.g. \sum, accent types) +// whose presence impacts super/subscripting. In this case, ParseNode<"supsub"> +// delegates its HTML building to the HtmlBuilder corresponding to these nodes. + +/** + * Parser-facing function spec. Optional properties should use the defaults + * documented below. + */ + +/** + * Builder fields consumed during registration. These are stored separately in + * `_htmlGroupBuilders` and `_mathmlGroupBuilders`, and are not used by Parser. + */ + +/** + * Full registration spec passed to `defineFunction`. It combines the + * parser-facing fields with optional builder fields and the names being + * registered. + */ + +/** + * All registered functions. + * `functions.js` just exports this same dictionary again and makes it public. + * `Parser.js` requires this dictionary. + */ +const _functions = {}; + +/** + * All HTML builders. Should be only used in the `define*` and the `build*ML` + * functions. + * + * Builders for different node types are stored side by side, but + * `HtmlBuilder` is contravariant in `T`, so there is no single type + * argument that makes storing/retrieving them typecheck. `any` is used + * as an existential-quantifier escape hatch. + */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +const _htmlGroupBuilders = {}; + +/** + * All MathML builders. Should be only used in the `define*` and the `build*ML` + * functions. See `_htmlGroupBuilders` above for the rationale behind `any`. + */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +const _mathmlGroupBuilders = {}; +function defineFunction(data) { + const type = data.type, + names = data.names, + htmlBuilder = data.htmlBuilder, + mathmlBuilder = data.mathmlBuilder; + for (let i = 0; i < names.length; ++i) { + // To avoid destructuring and rebuilding an object, + // we store the entire FunctionDefSpec object, + // even though Parser only needs the FunctionSpec fields. + _functions[names[i]] = data; + } + if (type) { + if (htmlBuilder) { + _htmlGroupBuilders[type] = htmlBuilder; + } + if (mathmlBuilder) { + _mathmlGroupBuilders[type] = mathmlBuilder; + } + } +} + +/** + * Use this to register only the HTML and MathML builders for a function (e.g. + * if the function's ParseNode is generated in Parser.js rather than via a + * stand-alone handler provided to `defineFunction`). + */ +function defineFunctionBuilders(_ref) { + let type = _ref.type, + htmlBuilder = _ref.htmlBuilder, + mathmlBuilder = _ref.mathmlBuilder; + if (htmlBuilder) { + _htmlGroupBuilders[type] = htmlBuilder; + } + if (mathmlBuilder) { + _mathmlGroupBuilders[type] = mathmlBuilder; + } +} +const normalizeArgument = function (arg) { + return arg.type === "ordgroup" && arg.body.length === 1 ? arg.body[0] : arg; +}; + +// Since the corresponding buildHTML/buildMathML function expects a +// list of elements, we normalize for different kinds of arguments +const ordargument = function (arg) { + return arg.type === "ordgroup" ? arg.body : [arg]; +}; +;// ./src/buildHTML.ts +/** + * This file does the main work of building a domTree structure from a parse + * tree. The entry point is the `buildHTML` function, which takes a parse tree. + * Then, the buildExpression, buildGroup, and various groupBuilders functions + * are called, to produce a final HTML tree. + */ + + + + + + + + + +// Binary atoms (first class `mbin`) change into ordinary atoms (`mord`) +// depending on their surroundings. See TeXbook pg. 442-446, Rules 5 and 6, +// and the text before Rule 19. +const binLeftCanceller = new Set(["leftmost", "mbin", "mopen", "mrel", "mop", "mpunct"]); +const binRightCanceller = new Set(["rightmost", "mrel", "mclose", "mpunct"]); +const styleMap = { + "display": src_Style.DISPLAY, + "text": src_Style.TEXT, + "script": src_Style.SCRIPT, + "scriptscript": src_Style.SCRIPTSCRIPT +}; +const DomEnum = { + mord: "mord", + mop: "mop", + mbin: "mbin", + mrel: "mrel", + mopen: "mopen", + mclose: "mclose", + mpunct: "mpunct", + minner: "minner" +}; +/** + * Take a list of nodes, build them in order, and return a list of the built + * nodes. documentFragments are flattened into their contents, so the + * returned list contains no fragments. `isRealGroup` is true if `expression` + * is a real group (no atoms will be added on either side), as opposed to + * a partial group (e.g. one created by \color). `surrounding` is an array + * consisting type of nodes that will be added to the left and right. + */ +const buildExpression = function (expression, options, isRealGroup, surrounding) { + if (surrounding === void 0) { + surrounding = [null, null]; + } + // Parse expressions into `groups`. + const groups = []; + for (let i = 0; i < expression.length; i++) { + const output = buildGroup(expression[i], options); + if (output instanceof DocumentFragment) { + const children = output.children; + groups.push(...children); + } else { + groups.push(output); + } + } + + // Combine consecutive domTree.symbolNodes into a single symbolNode. + tryCombineChars(groups); + + // If `expression` is a partial group, let the parent handle spacings + // to avoid processing groups multiple times. + if (!isRealGroup) { + return groups; + } + let glueOptions = options; + if (expression.length === 1) { + const node = expression[0]; + if (node.type === "sizing") { + glueOptions = options.havingSize(node.size); + } else if (node.type === "styling") { + glueOptions = options.havingStyle(styleMap[node.style]); + } + } + + // Dummy spans for determining spacings between surrounding atoms. + // If `expression` has no atoms on the left or right, class "leftmost" + // or "rightmost", respectively, is used to indicate it. + const dummyPrev = makeSpan([surrounding[0] || "leftmost"], [], options); + const dummyNext = makeSpan([surrounding[1] || "rightmost"], [], options); + + // TODO: These code assumes that a node's math class is the first element + // of its `classes` array. A later cleanup should ensure this, for + // instance by changing the signature of `makeSpan`. + + // Before determining what spaces to insert, perform bin cancellation. + // Binary operators change to ordinary symbols in some contexts. + const isRoot = isRealGroup === "root"; + traverseNonSpaceNodes(groups, (node, prev) => { + const prevType = prev.classes[0]; + const type = node.classes[0]; + if (prevType === "mbin" && binRightCanceller.has(type)) { + prev.classes[0] = "mord"; + } else if (type === "mbin" && binLeftCanceller.has(prevType)) { + node.classes[0] = "mord"; + } + }, { + node: dummyPrev + }, dummyNext, isRoot); + traverseNonSpaceNodes(groups, (node, prev) => { + var _tightSpacings$prevTy, _spacings$prevType; + const prevType = getTypeOfDomTree(prev); + const type = getTypeOfDomTree(node); + + // 'mtight' indicates that the node is script or scriptscript style. + const space = prevType && type ? node.hasClass("mtight") ? (_tightSpacings$prevTy = tightSpacings[prevType]) == null ? void 0 : _tightSpacings$prevTy[type] : (_spacings$prevType = spacings[prevType]) == null ? void 0 : _spacings$prevType[type] : null; + if (space) { + // Insert glue (spacing) after the `prev`. + return makeGlue(space, glueOptions); + } + }, { + node: dummyPrev + }, dummyNext, isRoot); + return groups; +}; + +// Depth-first traverse non-space `nodes`, calling `callback` with the current and +// previous node as arguments, optionally returning a node to insert after the +// previous node. `prev` is an object with the previous node and `insertAfter` +// function to insert after it. `next` is a node that will be added to the right. +// Used for bin cancellation and inserting spacings. +const traverseNonSpaceNodes = function (nodes, callback, prev, next, isRoot) { + if (next) { + // temporarily append the right node, if exists + nodes.push(next); + } + let i = 0; + for (; i < nodes.length; i++) { + const node = nodes[i]; + const partialGroup = checkPartialGroup(node); + if (partialGroup) { + // Recursive DFS + // TODO(ts): partialGroup.children is ReadonlyArray but this + // function mutates the array (insertAfter splices into it). + traverseNonSpaceNodes(partialGroup.children, callback, prev, null, isRoot); + continue; + } + + // Ignore explicit spaces (e.g., \;, \,) when determining what implicit + // spacing should go between atoms of different classes + const nonspace = !node.hasClass("mspace"); + if (nonspace) { + const result = callback(node, prev.node); + if (result) { + if (prev.insertAfter) { + prev.insertAfter(result); + } else { + // insert at front + nodes.unshift(result); + i++; + } + } + } + if (nonspace) { + prev.node = node; + } else if (isRoot && node.hasClass("katex-newline")) { + prev.node = makeSpan(["leftmost"]); // treat like beginning of line + } + prev.insertAfter = (index => n => { + nodes.splice(index + 1, 0, n); + i++; + })(i); + } + if (next) { + nodes.pop(); + } +}; + +// Check if given node is a partial group, i.e., does not affect spacing around. +const checkPartialGroup = function (node) { + if (node instanceof DocumentFragment || node instanceof Anchor || node instanceof Span && node.hasClass("enclosing")) { + return node; + } + return null; +}; + +// Return the outermost node of a domTree. +const getOutermostNode = function (node, side) { + const partialGroup = checkPartialGroup(node); + if (partialGroup) { + const children = partialGroup.children; + if (children.length) { + if (side === "right") { + return getOutermostNode(children[children.length - 1], "right"); + } else if (side === "left") { + return getOutermostNode(children[0], "left"); + } + } + } + return node; +}; + +// Return math atom class (mclass) of a domTree. +// If `side` is given, it will get the type of the outermost node at given side. +const getTypeOfDomTree = function (node, side) { + if (!node) { + return null; + } + if (side) { + node = getOutermostNode(node, side); + } + // This makes a lot of assumptions as to where the type of atom + // appears. We should do a better job of enforcing this. + const className = node.classes[0]; + return DomEnum[className] || null; +}; +const makeNullDelimiter = function (options, classes) { + const moreClasses = ["nulldelimiter"].concat(options.baseSizingClasses()); + return makeSpan(classes.concat(moreClasses)); +}; + +/** + * buildGroup is the function that takes a group and calls the correct groupType + * function for it. It also handles the interaction of size and style changes + * between parents and children. + */ +const buildGroup = function (group, options, baseOptions) { + if (!group) { + return makeSpan(); + } + if (_htmlGroupBuilders[group.type]) { + // TODO(ts): groupBuilders is Record>; + // a type-safe registry would need a mapped type keyed by NodeType. + let groupNode = _htmlGroupBuilders[group.type](group, options); + + // If the size changed between the parent and the current group, account + // for that size difference. + if (baseOptions && options.size !== baseOptions.size) { + groupNode = makeSpan(options.sizingClasses(baseOptions), [groupNode], options); + const multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier; + groupNode.height *= multiplier; + groupNode.depth *= multiplier; + } + return groupNode; + } else { + throw new src_ParseError("Got group of unknown type: '" + group.type + "'"); + } +}; + +/** + * Combine an array of HTML DOM nodes (e.g., the output of `buildExpression`) + * into an unbreakable HTML node of class .katex-base, with proper struts to + * guarantee correct vertical extent. `buildHTML` calls this repeatedly to + * make up the entire expression as a sequence of unbreakable units. + */ +function buildHTMLUnbreakable(children, options) { + // Compute height and depth of this chunk. + const body = makeSpan(["katex-base"], children, options); + + // Add strut, which ensures that the top of the HTML element falls at + // the height of the expression, and the bottom of the HTML element + // falls at the depth of the expression. + const strut = makeSpan(["katex-strut"]); + strut.style.height = makeEm(body.height + body.depth); + if (body.depth) { + strut.style.verticalAlign = makeEm(-body.depth); + } + body.children.unshift(strut); + return body; +} + +/** + * Take an entire parse tree, and build it into an appropriate set of HTML + * nodes. + */ +function buildHTML(tree, options) { + // Strip off outer tag wrapper for processing below. + let tag = null; + if (tree.length === 1 && tree[0].type === "tag") { + tag = tree[0].tag; + tree = tree[0].body; + } + + // Build the expression contained in the tree + const expression = buildExpression(tree, options, "root"); + let eqnNum; + if (expression.length === 2 && expression[1].hasClass("katex-tag")) { + // An environment with automatic equation numbers, e.g. {gather}. + eqnNum = expression.pop(); + } + const children = []; + + // Create one base node for each chunk between potential line breaks. + // The TeXBook [p.173] says "A formula will be broken only after a + // relation symbol like $=$ or $<$ or $\rightarrow$, or after a binary + // operation symbol like $+$ or $-$ or $\times$, where the relation or + // binary operation is on the ``outer level'' of the formula (i.e., not + // enclosed in {...} and not part of an \over construction)." + + let parts = []; + for (let i = 0; i < expression.length; i++) { + parts.push(expression[i]); + if (expression[i].hasClass("mbin") || expression[i].hasClass("mrel") || expression[i].hasClass("allowbreak")) { + // Put any post-operator glue on same line as operator. + // Watch for \nobreak along the way, and stop at \newline. + let nobreak = false; + while (i < expression.length - 1 && expression[i + 1].hasClass("mspace") && !expression[i + 1].hasClass("katex-newline")) { + i++; + parts.push(expression[i]); + if (expression[i].hasClass("nobreak")) { + nobreak = true; + } + } + // Don't allow break if \nobreak among the post-operator glue. + if (!nobreak) { + children.push(buildHTMLUnbreakable(parts, options)); + parts = []; + } + } else if (expression[i].hasClass("katex-newline")) { + // Write the line except the newline + parts.pop(); + if (parts.length > 0) { + children.push(buildHTMLUnbreakable(parts, options)); + parts = []; + } + // Put the newline at the top level + children.push(expression[i]); + } + } + if (parts.length > 0) { + children.push(buildHTMLUnbreakable(parts, options)); + } + + // Now, if there was a tag, build it too and append it as a final child. + let tagChild; + if (tag) { + tagChild = buildHTMLUnbreakable(buildExpression(tag, options, true), options); + tagChild.classes = ["katex-tag"]; + children.push(tagChild); + } else if (eqnNum) { + children.push(eqnNum); + } + const htmlNode = makeSpan(["katex-html"], children); + htmlNode.setAttribute("aria-hidden", "true"); + + // Adjust the strut of the tag to be the maximum height of all children + // (the height of the enclosing htmlNode) for proper vertical alignment. + if (tagChild) { + const strut = tagChild.children[0]; + strut.style.height = makeEm(htmlNode.height + htmlNode.depth); + if (htmlNode.depth) { + strut.style.verticalAlign = makeEm(-htmlNode.depth); + } + } + return htmlNode; +} +;// ./src/mathMLTree.ts +/** + * These objects store data about MathML nodes. This is the MathML equivalent + * of the types in domTree.js. Since MathML handles its own rendering, and + * since we're mainly using MathML to improve accessibility, we don't manage + * any of the styling state that the plain DOM nodes do. + * + * The `toNode` and `toMarkup` functions work similarly to how they do in + * domTree.js, creating namespaced DOM nodes and HTML text markup respectively. + */ + + + + + + +/** + * MathML node types used in KaTeX. For a complete list of MathML nodes, see + * https://developer.mozilla.org/en-US/docs/Web/MathML/Element. + */ + +function newDocumentFragment(children) { + return new DocumentFragment(children); +} + +/** + * This node represents a general purpose MathML node of any type. The + * constructor requires the type of node to create (for example, `"mo"` or + * `"mspace"`, corresponding to `` and `` tags). + */ +class MathNode { + constructor(type, children, classes) { + this.type = void 0; + this.attributes = void 0; + this.children = void 0; + this.classes = void 0; + this.type = type; + this.attributes = {}; + this.children = children || []; + this.classes = classes || []; + } + + /** + * Sets an attribute on a MathML node. MathML depends on attributes to convey a + * semantic content, so this is used heavily. + */ + setAttribute(name, value) { + this.attributes[name] = value; + } + + /** + * Gets an attribute on a MathML node. + */ + getAttribute(name) { + return this.attributes[name]; + } + + /** + * Converts the math node into a MathML-namespaced DOM element. + */ + toNode() { + const node = document.createElementNS("http://www.w3.org/1998/Math/MathML", this.type); + for (const _ref of Object.entries(this.attributes)) { + const attr = _ref[0]; + const value = _ref[1]; + node.setAttribute(attr, value); + } + if (this.classes.length > 0) { + node.className = createClass(this.classes); + } + for (let i = 0; i < this.children.length; i++) { + // Combine multiple TextNodes into one TextNode, to prevent + // screen readers from reading each as a separate word [#3995] + if (this.children[i] instanceof TextNode && this.children[i + 1] instanceof TextNode) { + let text = this.children[i].toText() + this.children[++i].toText(); + while (this.children[i + 1] instanceof TextNode) { + text += this.children[++i].toText(); + } + node.appendChild(new TextNode(text).toNode()); + } else { + node.appendChild(this.children[i].toNode()); + } + } + return node; + } + + /** + * Converts the math node into an HTML markup string. + */ + toMarkup() { + let markup = "<" + this.type; + + // Add the attributes + for (const _ref2 of Object.entries(this.attributes)) { + const attr = _ref2[0]; + const value = _ref2[1]; + markup += " " + attr + "=\""; + markup += utils_escape(value); + markup += "\""; + } + if (this.classes.length > 0) { + markup += " class =\"" + utils_escape(createClass(this.classes)) + "\""; + } + markup += ">"; + for (let i = 0; i < this.children.length; i++) { + markup += this.children[i].toMarkup(); + } + markup += ""; + return markup; + } + + /** + * Converts the math node into a string, similar to innerText, but escaped. + */ + toText() { + return this.children.map(child => child.toText()).join(""); + } +} + +/** + * This node represents a piece of text. + */ +class TextNode { + constructor(text) { + this.text = void 0; + this.text = text; + } + + /** + * Converts the text node into a DOM text node. + */ + toNode() { + return document.createTextNode(this.text); + } + + /** + * Converts the text node into escaped HTML markup + * (representing the text itself). + */ + toMarkup() { + return utils_escape(this.toText()); + } + + /** + * Converts the text node into a string + * (representing the text itself). + */ + toText() { + return this.text; + } +} + +/** + * This node represents a space, but may render as or as text, + * depending on the width. + */ +class SpaceNode { + /** + * Create a Space node with width given in CSS ems. + */ + constructor(width) { + this.width = void 0; + this.character = void 0; + this.width = width; + // See https://www.w3.org/TR/2000/WD-MathML2-20000328/chapter6.html + // for a table of space-like characters. We use Unicode + // representations instead of &LongNames; as it's not clear how to + // make the latter via document.createTextNode. + if (width >= 0.05555 && width <= 0.05556) { + this.character = "\u200a"; //   + } else if (width >= 0.1666 && width <= 0.1667) { + this.character = "\u2009"; //   + } else if (width >= 0.2222 && width <= 0.2223) { + this.character = "\u2005"; //   + } else if (width >= 0.2777 && width <= 0.2778) { + this.character = "\u2005\u200a"; //    + } else if (width >= -0.05556 && width <= -0.05555) { + this.character = "\u200a\u2063"; // ​ + } else if (width >= -0.1667 && width <= -0.1666) { + this.character = "\u2009\u2063"; // ​ + } else if (width >= -0.2223 && width <= -0.2222) { + this.character = "\u205f\u2063"; // ​ + } else if (width >= -0.2778 && width <= -0.2777) { + this.character = "\u2005\u2063"; // ​ + } else { + this.character = null; + } + } + + /** + * Converts the math node into a MathML-namespaced DOM element. + */ + toNode() { + if (this.character) { + return document.createTextNode(this.character); + } else { + const node = document.createElementNS("http://www.w3.org/1998/Math/MathML", "mspace"); + node.setAttribute("width", makeEm(this.width)); + return node; + } + } + + /** + * Converts the math node into an HTML markup string. + */ + toMarkup() { + if (this.character) { + return "" + this.character + ""; + } else { + return ""; + } + } + + /** + * Converts the math node into a string, similar to innerText. + */ + toText() { + if (this.character) { + return this.character; + } else { + return " "; + } + } +} +;// ./src/buildMathML.ts +/** + * This file converts a parse tree into a corresponding MathML tree. The main + * entry point is the `buildMathML` function, which takes a parse tree from the + * parser. + */ + + + + + + + +const noVariantSymbols = new Set(["\\imath", "\\jmath"]); +const rowLikeTypes = new Set(["mrow", "mtable"]); + +/** + * Takes a symbol and converts it into a MathML text node after performing + * optional replacement from symbols.js. + */ +const makeText = function (text, mode, options) { + var _options$fontFamily, _options$font; + if (src_symbols[mode][text] && src_symbols[mode][text].replace && text.charCodeAt(0) !== 0xD835 && !(Object.prototype.hasOwnProperty.call(ligatures, text) && ((options == null || (_options$fontFamily = options.fontFamily) == null ? void 0 : _options$fontFamily.slice(4, 6)) === "tt" || (options == null || (_options$font = options.font) == null ? void 0 : _options$font.slice(4, 6)) === "tt"))) { + text = src_symbols[mode][text].replace; + } + return new TextNode(text); +}; + +/** + * Wrap the given array of nodes in an node if needed, i.e., + * unless the array has length 1. Always returns a single node. + */ +const makeRow = function (body) { + if (body.length === 1) { + return body[0]; + } else { + return new MathNode("mrow", body); + } +}; +const mathFontVariants = { + mathit: "italic", + boldsymbol: group => group.type === "textord" ? "bold" : "bold-italic", + mathbf: "bold", + mathbb: "double-struck", + mathsfit: "sans-serif-italic", + mathfrak: "fraktur", + mathscr: "script", + mathcal: "script", + mathsf: "sans-serif", + mathtt: "monospace" +}; + +/** + * Returns the math variant as a string or null if none is required. + */ +const getVariant = (group, options) => { + // Handle \text... font specifiers as best we can. + // MathML has a limited list of allowable mathvariant specifiers; see + // https://www.w3.org/TR/MathML3/chapter3.html#presm.commatt + if (group.mode === "text") { + if (options.fontFamily === "texttt") { + return "monospace"; + } else if (options.fontFamily === "textsf") { + if (options.fontShape === "textit" && options.fontWeight === "textbf") { + return "sans-serif-bold-italic"; + } else if (options.fontShape === "textit") { + return "sans-serif-italic"; + } else if (options.fontWeight === "textbf") { + return "bold-sans-serif"; + } else { + return "sans-serif"; + } + } else if (options.fontShape === "textit" && options.fontWeight === "textbf") { + return "bold-italic"; + } else if (options.fontShape === "textit") { + return "italic"; + } else if (options.fontWeight === "textbf") { + return "bold"; + } + } + const font = options.font; + if (!font || font === "mathnormal") { + return null; + } + const mode = group.mode; + const mathVariant = mathFontVariants[font]; + if (mathVariant) { + return typeof mathVariant === "function" ? mathVariant(group) : mathVariant; + } + let text = group.text; + if (noVariantSymbols.has(text)) { + return null; + } + if (src_symbols[mode][text]) { + const replacement = src_symbols[mode][text].replace; + if (replacement) { + text = replacement; + } + } + const fontName = fontMap[font].fontName; + if (getCharacterMetrics(text, fontName, mode)) { + return fontMap[font].variant; + } + return null; +}; + +/** + * Check for . which is how a dot renders in MathML, + * or , + * which is how a braced comma {,} renders in MathML + */ +function isNumberPunctuation(group) { + if (!group) { + return false; + } + if (group.type === 'mi' && group.children.length === 1) { + const child = group.children[0]; + return child instanceof TextNode && child.text === '.'; + } else if (group.type === 'mo' && group.children.length === 1 && group.getAttribute('separator') === 'true' && group.getAttribute('lspace') === '0em' && group.getAttribute('rspace') === '0em') { + const child = group.children[0]; + return child instanceof TextNode && child.text === ','; + } else { + return false; + } +} + +/** + * Takes a list of nodes, builds them, and returns a list of the generated + * MathML nodes. Also combine consecutive outputs into a single + * tag. + */ +const buildMathML_buildExpression = function (expression, options, isOrdgroup) { + if (expression.length === 1) { + const group = buildMathML_buildGroup(expression[0], options); + if (isOrdgroup && group instanceof MathNode && group.type === "mo") { + // When TeX writers want to suppress spacing on an operator, + // they often put the operator by itself inside braces. + group.setAttribute("lspace", "0em"); + group.setAttribute("rspace", "0em"); + } + return [group]; + } + const groups = []; + let lastGroup; + for (let i = 0; i < expression.length; i++) { + const group = buildMathML_buildGroup(expression[i], options); + if (group instanceof MathNode && lastGroup instanceof MathNode) { + // Concatenate adjacent s + if (group.type === 'mtext' && lastGroup.type === 'mtext' && group.getAttribute('mathvariant') === lastGroup.getAttribute('mathvariant')) { + lastGroup.children.push(...group.children); + continue; + // Concatenate adjacent s + } else if (group.type === 'mn' && lastGroup.type === 'mn') { + lastGroup.children.push(...group.children); + continue; + // Concatenate ... followed by . + } else if (isNumberPunctuation(group) && lastGroup.type === 'mn') { + lastGroup.children.push(...group.children); + continue; + // Concatenate . followed by ... + } else if (group.type === 'mn' && isNumberPunctuation(lastGroup)) { + group.children = [...lastGroup.children, ...group.children]; + groups.pop(); + // Put preceding ... or . inside base of + // ...base......exponent... (or ) + } else if ((group.type === 'msup' || group.type === 'msub') && group.children.length >= 1 && (lastGroup.type === 'mn' || isNumberPunctuation(lastGroup))) { + const base = group.children[0]; + if (base instanceof MathNode && base.type === 'mn') { + base.children = [...lastGroup.children, ...base.children]; + groups.pop(); + } + // \not + } else if (lastGroup.type === 'mi' && lastGroup.children.length === 1) { + const lastChild = lastGroup.children[0]; + if (lastChild instanceof TextNode && lastChild.text === '\u0338' && (group.type === 'mo' || group.type === 'mi' || group.type === 'mn')) { + const child = group.children[0]; + if (child instanceof TextNode && child.text.length > 0) { + // Overlay with combining character long solidus + child.text = child.text.slice(0, 1) + "\u0338" + child.text.slice(1); + groups.pop(); + } + } + } + } + groups.push(group); + lastGroup = group; + } + return groups; +}; + +/** + * Equivalent to buildExpression, but wraps the elements in an + * if there's more than one. Returns a single node instead of an array. + */ +const buildExpressionRow = function (expression, options, isOrdgroup) { + return makeRow(buildMathML_buildExpression(expression, options, isOrdgroup)); +}; + +/** + * Takes a group from the parser and calls the appropriate groupBuilders function + * on it to produce a MathML node. + */ +const buildMathML_buildGroup = function (group, options) { + if (!group) { + return new MathNode("mrow"); + } + if (_mathmlGroupBuilders[group.type]) { + // TODO(ts): MathMLBuilder returns MathDomNode but all concrete + // builders return MathNode. Widening the return type here would + // require updating all callers that assume MathNode. + return _mathmlGroupBuilders[group.type](group, options); + } else { + throw new src_ParseError("Got group of unknown type: '" + group.type + "'"); + } +}; + +/** + * Takes a full parse tree and settings and builds a MathML representation of + * it. In particular, we put the elements from building the parse tree into a + * tag so we can also include that TeX source as an annotation. + * + * Note that we actually return a domTree element with a `` inside it so + * we can do appropriate styling. + */ +function buildMathML(tree, texExpression, options, isDisplayMode, forMathmlOnly) { + const expression = buildMathML_buildExpression(tree, options); + + // TODO: Make a pass thru the MathML similar to buildHTML.traverseNonSpaceNodes + // and add spacing nodes. This is necessary only adjacent to math operators + // like \sin or \lim or to subsup elements that contain math operators. + // MathML takes care of the other spacing issues. + + // Wrap up the expression in an mrow so it is presented in the semantics + // tag correctly, unless it's a single or . + let wrapper; + if (expression.length === 1 && expression[0] instanceof MathNode && rowLikeTypes.has(expression[0].type)) { + wrapper = expression[0]; + } else { + wrapper = new MathNode("mrow", expression); + } + + // Build a TeX annotation of the source + const annotation = new MathNode("annotation", [new TextNode(texExpression)]); + annotation.setAttribute("encoding", "application/x-tex"); + const semantics = new MathNode("semantics", [wrapper, annotation]); + const math = new MathNode("math", [semantics]); + math.setAttribute("xmlns", "http://www.w3.org/1998/Math/MathML"); + if (isDisplayMode) { + math.setAttribute("display", "block"); + } + + // You can't style nodes, so we wrap the node in a span. + // NOTE: The span class is not typed to have nodes as children, and + // we don't want to make the children type more generic since the children + // of span are expected to have more fields in `buildHtml` contexts. + // The MathNode implements VirtualNode (toNode/toMarkup) which is all that + // Span needs from its children for rendering. + // TODO(ts): Span's child type is HtmlDomNode, but MathNode only implements + // VirtualNode. The double-cast acknowledges this architectural limitation. + const wrapperClass = forMathmlOnly ? "katex" : "katex-mathml"; + return makeSpan([wrapperClass], [math]); +} +;// ./src/Options.ts +/** + * This file contains information about the options that the Parser carries + * around with it while parsing. Data is held in an `Options` object, and when + * recursing, a new `Options` object can be created with the `.with*` and + * `.reset` functions. + */ + + +const sizeStyleMap = [ +// Each element contains [textsize, scriptsize, scriptscriptsize]. +// The size mappings are taken from TeX with \normalsize=10pt. +[1, 1, 1], +// size1: [5, 5, 5] \tiny +[2, 1, 1], +// size2: [6, 5, 5] +[3, 1, 1], +// size3: [7, 5, 5] \scriptsize +[4, 2, 1], +// size4: [8, 6, 5] \footnotesize +[5, 2, 1], +// size5: [9, 6, 5] \small +[6, 3, 1], +// size6: [10, 7, 5] \normalsize +[7, 4, 2], +// size7: [12, 8, 6] \large +[8, 6, 3], +// size8: [14.4, 10, 7] \Large +[9, 7, 6], +// size9: [17.28, 12, 10] \LARGE +[10, 8, 7], +// size10: [20.74, 14.4, 12] \huge +[11, 10, 9] // size11: [24.88, 20.74, 17.28] \HUGE +]; +const sizeMultipliers = [ +// fontMetrics.js:getGlobalMetrics also uses size indexes, so if +// you change size indexes, change that function. +0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.2, 1.44, 1.728, 2.074, 2.488]; +const sizeAtStyle = function (size, style) { + return style.size < 2 ? size : sizeStyleMap[size - 1][style.size - 1]; +}; +/** + * This is the main options class. It contains the current style, size, color, + * and font. + * + * Options objects should not be modified. To create a new Options with + * different properties, call a `.having*` method. + */ +class Options { + constructor(data) { + this.style = void 0; + this.color = void 0; + this.size = void 0; + this.textSize = void 0; + this.phantom = void 0; + // A font family applies to a group of fonts (i.e. SansSerif), while a font + // represents a specific font (i.e. SansSerif Bold). + // See: https://tex.stackexchange.com/questions/22350/difference-between-textrm-and-mathrm + this.font = void 0; + this.fontFamily = void 0; + this.fontWeight = void 0; + this.fontShape = void 0; + this.sizeMultiplier = void 0; + this.maxSize = void 0; + this.minRuleThickness = void 0; + this._fontMetrics = void 0; + this.strict = void 0; + this.style = data.style; + this.color = data.color; + this.size = data.size || Options.BASESIZE; + this.textSize = data.textSize || this.size; + this.phantom = !!data.phantom; + this.font = data.font || ""; + this.fontFamily = data.fontFamily || ""; + this.fontWeight = data.fontWeight || ""; + this.fontShape = data.fontShape || ""; + this.sizeMultiplier = sizeMultipliers[this.size - 1]; + this.maxSize = data.maxSize; + this.minRuleThickness = data.minRuleThickness; + this.strict = data.strict; + this._fontMetrics = undefined; + } + + /** + * Returns a new options object with the same properties as "this". Properties + * from "extension" will be copied to the new options object. + */ + extend(extension) { + const data = { + style: this.style, + size: this.size, + textSize: this.textSize, + color: this.color, + phantom: this.phantom, + font: this.font, + fontFamily: this.fontFamily, + fontWeight: this.fontWeight, + fontShape: this.fontShape, + maxSize: this.maxSize, + minRuleThickness: this.minRuleThickness, + strict: this.strict + }; + Object.assign(data, extension); + return new Options(data); + } + + /** + * Return an options object with the given style. If `this.style === style`, + * returns `this`. + */ + havingStyle(style) { + if (this.style === style) { + return this; + } else { + return this.extend({ + style: style, + size: sizeAtStyle(this.textSize, style) + }); + } + } + + /** + * Return an options object with a cramped version of the current style. If + * the current style is cramped, returns `this`. + */ + havingCrampedStyle() { + return this.havingStyle(this.style.cramp()); + } + + /** + * Return an options object with the given size and in at least `\textstyle`. + * Returns `this` if appropriate. + */ + havingSize(size) { + if (this.size === size && this.textSize === size) { + return this; + } else { + return this.extend({ + style: this.style.text(), + size: size, + textSize: size, + sizeMultiplier: sizeMultipliers[size - 1] + }); + } + } + + /** + * Like `this.havingSize(BASESIZE).havingStyle(style)`. If `style` is omitted, + * changes to at least `\textstyle`. + */ + havingBaseStyle(style) { + style = style || this.style.text(); + const wantSize = sizeAtStyle(Options.BASESIZE, style); + if (this.size === wantSize && this.textSize === Options.BASESIZE && this.style === style) { + return this; + } else { + return this.extend({ + style: style, + size: wantSize + }); + } + } + + /** + * Remove the effect of sizing changes such as \Huge. + * Keep the effect of the current style, such as \scriptstyle. + */ + havingBaseSizing() { + let size; + switch (this.style.id) { + case 4: + case 5: + size = 3; // normalsize in scriptstyle + break; + case 6: + case 7: + size = 1; // normalsize in scriptscriptstyle + break; + default: + size = 6; + // normalsize in textstyle or displaystyle + } + return this.extend({ + style: this.style.text(), + size: size + }); + } + + /** + * Create a new options object with the given color. + */ + withColor(color) { + return this.extend({ + color: color + }); + } + + /** + * Create a new options object with "phantom" set to true. + */ + withPhantom() { + return this.extend({ + phantom: true + }); + } + + /** + * Creates a new options object with the given math font or old text font. + * @type {[type]} + */ + withFont(font) { + return this.extend({ + font + }); + } + + /** + * Create a new options objects with the given fontFamily. + */ + withTextFontFamily(fontFamily) { + return this.extend({ + fontFamily, + font: "" + }); + } + + /** + * Creates a new options object with the given font weight + */ + withTextFontWeight(fontWeight) { + return this.extend({ + fontWeight, + font: "" + }); + } + + /** + * Creates a new options object with the given font weight + */ + withTextFontShape(fontShape) { + return this.extend({ + fontShape, + font: "" + }); + } + + /** + * Return the CSS sizing classes required to switch from enclosing options + * `oldOptions` to `this`. Returns an array of classes. + */ + sizingClasses(oldOptions) { + if (oldOptions.size !== this.size) { + return ["katex-sizing", "reset-size" + oldOptions.size, "size" + this.size]; + } else { + return []; + } + } + + /** + * Return the CSS sizing classes required to switch to the base size. Like + * `this.havingSize(BASESIZE).sizingClasses(this)`. + */ + baseSizingClasses() { + if (this.size !== Options.BASESIZE) { + return ["katex-sizing", "reset-size" + this.size, "size" + Options.BASESIZE]; + } else { + return []; + } + } + + /** + * Return the font metrics for this size. + */ + fontMetrics() { + if (!this._fontMetrics) { + this._fontMetrics = getGlobalMetrics(this.size); + } + return this._fontMetrics; + } + + /** + * Gets the CSS color of the current options object + */ + getColor() { + if (this.phantom) { + return "transparent"; + } else { + return this.color; + } + } +} +/** + * The base size index. + */ +Options.BASESIZE = 6; +/* harmony default export */ var src_Options = (Options); +;// ./src/buildTree.ts + + + + + +const optionsFromSettings = settings => new src_Options({ + style: settings.displayMode ? src_Style.DISPLAY : src_Style.TEXT, + maxSize: settings.maxSize, + minRuleThickness: settings.minRuleThickness, + strict: settings.strict +}); +const displayWrap = function (node, settings) { + if (settings.displayMode) { + const classes = ["katex-display"]; + if (settings.leqno) { + classes.push("leqno"); + } + if (settings.fleqn) { + classes.push("fleqn"); + } + node = makeSpan(classes, [node]); + } + return node; +}; +const buildTree = function (tree, expression, settings) { + const options = optionsFromSettings(settings); + let katexNode; + if (settings.output === "mathml") { + return buildMathML(tree, expression, options, settings.displayMode, true); + } else if (settings.output === "html") { + const htmlNode = buildHTML(tree, options); + katexNode = makeSpan(["katex"], [htmlNode]); + } else { + const mathMLNode = buildMathML(tree, expression, options, settings.displayMode, false); + const htmlNode = buildHTML(tree, options); + katexNode = makeSpan(["katex"], [mathMLNode, htmlNode]); + } + return displayWrap(katexNode, settings); +}; +const buildHTMLTree = function (tree, settings) { + const options = optionsFromSettings(settings); + const htmlNode = buildHTML(tree, options); + const katexNode = makeSpan(["katex"], [htmlNode]); + return displayWrap(katexNode, settings); +}; +/* harmony default export */ var src_buildTree = ((/* unused pure expression or super */ null && (buildTree))); +;// ./src/stretchy.ts +/** + * This file provides support to buildMathML.js and buildHTML.js + * for stretchy wide elements rendered from SVG files + * and other CSS trickery. + */ + + + + + +const stretchyCodePoint = { + widehat: "^", + widecheck: "ˇ", + widetilde: "~", + utilde: "~", + overleftarrow: "\u2190", + underleftarrow: "\u2190", + xleftarrow: "\u2190", + overrightarrow: "\u2192", + underrightarrow: "\u2192", + xrightarrow: "\u2192", + underbrace: "\u23df", + overbrace: "\u23de", + underbracket: "\u23b5", + overbracket: "\u23b4", + overgroup: "\u23e0", + undergroup: "\u23e1", + overleftrightarrow: "\u2194", + underleftrightarrow: "\u2194", + xleftrightarrow: "\u2194", + Overrightarrow: "\u21d2", + xRightarrow: "\u21d2", + overleftharpoon: "\u21bc", + xleftharpoonup: "\u21bc", + overrightharpoon: "\u21c0", + xrightharpoonup: "\u21c0", + xLeftarrow: "\u21d0", + xLeftrightarrow: "\u21d4", + xhookleftarrow: "\u21a9", + xhookrightarrow: "\u21aa", + xmapsto: "\u21a6", + xrightharpoondown: "\u21c1", + xleftharpoondown: "\u21bd", + xrightleftharpoons: "\u21cc", + xleftrightharpoons: "\u21cb", + xtwoheadleftarrow: "\u219e", + xtwoheadrightarrow: "\u21a0", + xlongequal: "=", + xtofrom: "\u21c4", + xrightleftarrows: "\u21c4", + xrightequilibrium: "\u21cc", + // Not a perfect match. + xleftequilibrium: "\u21cb", + // None better available. + "\\cdrightarrow": "\u2192", + "\\cdleftarrow": "\u2190", + "\\cdlongequal": "=" +}; +const stretchyMathML = function (label) { + const node = new MathNode("mo", [new TextNode(stretchyCodePoint[label.replace(/^\\/, '')])]); + node.setAttribute("stretchy", "true"); + return node; +}; + +// Many of the KaTeX SVG images have been adapted from glyphs in KaTeX fonts. +// Copyright (c) 2009-2010, Design Science, Inc. () +// Copyright (c) 2014-2017 Khan Academy () +// Licensed under the SIL Open Font License, Version 1.1. +// See \nhttp://scripts.sil.org/OFL + +// Very Long SVGs +// Many of the KaTeX stretchy wide elements use a long SVG image and an +// overflow: hidden tactic to achieve a stretchy image while avoiding +// distortion of arrowheads or brace corners. + +// The SVG typically contains a very long (400 em) arrow. + +// The SVG is in a container span that has overflow: hidden, so the span +// acts like a window that exposes only part of the SVG. + +// The SVG always has a longer, thinner aspect ratio than the container span. +// After the SVG fills 100% of the height of the container span, +// there is a long arrow shaft left over. That left-over shaft is not shown. +// Instead, it is sliced off because the span's CSS has overflow: hidden. + +// Thus, the reader sees an arrow that matches the subject matter width +// without distortion. + +// Some functions, such as \cancel, need to vary their aspect ratio. These +// functions do not get the overflow SVG treatment. + +// In the katexImagesData object just below, the dimensions all +// correspond to path geometry inside the relevant SVG. +// For example, \overrightarrow uses the same arrowhead as glyph U+2192 +// from the KaTeX Main font. The scaling factor is 1000. +// That is, inside the font, that arrowhead is 522 units tall, which +// corresponds to 0.522 em inside the document. + +const katexImagesData = { + // path(s), minWidth, height, align + overrightarrow: [["rightarrow"], 0.888, 522, "xMaxYMin"], + overleftarrow: [["leftarrow"], 0.888, 522, "xMinYMin"], + underrightarrow: [["rightarrow"], 0.888, 522, "xMaxYMin"], + underleftarrow: [["leftarrow"], 0.888, 522, "xMinYMin"], + xrightarrow: [["rightarrow"], 1.469, 522, "xMaxYMin"], + "\\cdrightarrow": [["rightarrow"], 3.0, 522, "xMaxYMin"], + // CD minwwidth2.5pc + xleftarrow: [["leftarrow"], 1.469, 522, "xMinYMin"], + "\\cdleftarrow": [["leftarrow"], 3.0, 522, "xMinYMin"], + Overrightarrow: [["doublerightarrow"], 0.888, 560, "xMaxYMin"], + xRightarrow: [["doublerightarrow"], 1.526, 560, "xMaxYMin"], + xLeftarrow: [["doubleleftarrow"], 1.526, 560, "xMinYMin"], + overleftharpoon: [["leftharpoon"], 0.888, 522, "xMinYMin"], + xleftharpoonup: [["leftharpoon"], 0.888, 522, "xMinYMin"], + xleftharpoondown: [["leftharpoondown"], 0.888, 522, "xMinYMin"], + overrightharpoon: [["rightharpoon"], 0.888, 522, "xMaxYMin"], + xrightharpoonup: [["rightharpoon"], 0.888, 522, "xMaxYMin"], + xrightharpoondown: [["rightharpoondown"], 0.888, 522, "xMaxYMin"], + xlongequal: [["longequal"], 0.888, 334, "xMinYMin"], + "\\cdlongequal": [["longequal"], 3.0, 334, "xMinYMin"], + xtwoheadleftarrow: [["twoheadleftarrow"], 0.888, 334, "xMinYMin"], + xtwoheadrightarrow: [["twoheadrightarrow"], 0.888, 334, "xMaxYMin"], + overleftrightarrow: [["leftarrow", "rightarrow"], 0.888, 522], + overbrace: [["leftbrace", "midbrace", "rightbrace"], 1.6, 548], + underbrace: [["leftbraceunder", "midbraceunder", "rightbraceunder"], 1.6, 548], + underleftrightarrow: [["leftarrow", "rightarrow"], 0.888, 522], + xleftrightarrow: [["leftarrow", "rightarrow"], 1.75, 522], + xLeftrightarrow: [["doubleleftarrow", "doublerightarrow"], 1.75, 560], + xrightleftharpoons: [["leftharpoondownplus", "rightharpoonplus"], 1.75, 716], + xleftrightharpoons: [["leftharpoonplus", "rightharpoondownplus"], 1.75, 716], + xhookleftarrow: [["leftarrow", "righthook"], 1.08, 522], + xhookrightarrow: [["lefthook", "rightarrow"], 1.08, 522], + overlinesegment: [["leftlinesegment", "rightlinesegment"], 0.888, 522], + underlinesegment: [["leftlinesegment", "rightlinesegment"], 0.888, 522], + overbracket: [["leftbracketover", "rightbracketover"], 1.6, 440], + underbracket: [["leftbracketunder", "rightbracketunder"], 1.6, 410], + overgroup: [["leftgroup", "rightgroup"], 0.888, 342], + undergroup: [["leftgroupunder", "rightgroupunder"], 0.888, 342], + xmapsto: [["leftmapsto", "rightarrow"], 1.5, 522], + xtofrom: [["leftToFrom", "rightToFrom"], 1.75, 528], + // The next three arrows are from the mhchem package. + // In mhchem.sty, min-length is 2.0em. But these arrows might appear in the + // document as \xrightarrow or \xrightleftharpoons. Those have + // min-length = 1.75em, so we set min-length on these next three to match. + xrightleftarrows: [["baraboveleftarrow", "rightarrowabovebar"], 1.75, 901], + xrightequilibrium: [["baraboveshortleftharpoon", "rightharpoonaboveshortbar"], 1.75, 716], + xleftequilibrium: [["shortbaraboveleftharpoon", "shortrightharpoonabovebar"], 1.75, 716] +}; +const wideAccentLabels = new Set(["widehat", "widecheck", "widetilde", "utilde"]); +const stretchySvg = function (group, options) { + // Create a span with inline SVG for the element. + function buildSvgSpan_() { + let viewBoxWidth = 400000; // default + const label = group.label.slice(1); + if (wideAccentLabels.has(label) && 'base' in group) { + // There are four SVG images available for each function. + // Choose a taller image when there are more characters. + const numChars = group.base.type === "ordgroup" ? group.base.body.length : 1; + let viewBoxHeight; + let pathName; + let height; + if (numChars > 5) { + if (label === "widehat" || label === "widecheck") { + viewBoxHeight = 420; + viewBoxWidth = 2364; + height = 0.42; + pathName = label + "4"; + } else { + viewBoxHeight = 312; + viewBoxWidth = 2340; + height = 0.34; + pathName = "tilde4"; + } + } else { + const imgIndex = [1, 1, 2, 2, 3, 3][numChars]; + if (label === "widehat" || label === "widecheck") { + viewBoxWidth = [0, 1062, 2364, 2364, 2364][imgIndex]; + viewBoxHeight = [0, 239, 300, 360, 420][imgIndex]; + height = [0, 0.24, 0.3, 0.3, 0.36, 0.42][imgIndex]; + pathName = label + imgIndex; + } else { + viewBoxWidth = [0, 600, 1033, 2339, 2340][imgIndex]; + viewBoxHeight = [0, 260, 286, 306, 312][imgIndex]; + height = [0, 0.26, 0.286, 0.3, 0.306, 0.34][imgIndex]; + pathName = "tilde" + imgIndex; + } + } + const path = new PathNode(pathName); + const svgNode = new SvgNode([path], { + "width": "100%", + "height": makeEm(height), + "viewBox": "0 0 " + viewBoxWidth + " " + viewBoxHeight, + "preserveAspectRatio": "none" + }); + return { + span: makeSvgSpan([], [svgNode], options), + minWidth: 0, + height + }; + } else { + const spans = []; + const data = katexImagesData[label]; + if (!data) { + throw new Error("No SVG data for \"" + label + "\"."); + } + const paths = data[0], + minWidth = data[1], + viewBoxHeight = data[2]; + const height = viewBoxHeight / 1000; + const numSvgChildren = paths.length; + let widthClasses; + let aligns; + if (numSvgChildren === 1) { + if (data.length !== 4) { + throw new Error("Expected 4-tuple for single-path SVG data \"" + label + "\"."); + } + widthClasses = ["hide-tail"]; + aligns = [data[3]]; + } else if (numSvgChildren === 2) { + widthClasses = ["halfarrow-left", "halfarrow-right"]; + aligns = ["xMinYMin", "xMaxYMin"]; + } else if (numSvgChildren === 3) { + widthClasses = ["brace-left", "brace-center", "brace-right"]; + aligns = ["xMinYMin", "xMidYMin", "xMaxYMin"]; + } else { + throw new Error("Correct katexImagesData or update code here to support\n " + numSvgChildren + " children."); + } + for (let i = 0; i < numSvgChildren; i++) { + const path = new PathNode(paths[i]); + const svgNode = new SvgNode([path], { + "width": "400em", + "height": makeEm(height), + "viewBox": "0 0 " + viewBoxWidth + " " + viewBoxHeight, + "preserveAspectRatio": aligns[i] + " slice" + }); + const span = makeSvgSpan([widthClasses[i]], [svgNode], options); + if (numSvgChildren === 1) { + return { + span, + minWidth, + height + }; + } else { + span.style.height = makeEm(height); + spans.push(span); + } + } + return { + span: makeSpan(["katex-stretchy"], spans, options), + minWidth, + height + }; + } + } // buildSvgSpan_() + const _buildSvgSpan_ = buildSvgSpan_(), + span = _buildSvgSpan_.span, + minWidth = _buildSvgSpan_.minWidth, + height = _buildSvgSpan_.height; + + // Note that we are returning span.depth = 0. + // Any adjustments relative to the baseline must be done in buildHTML. + span.height = height; + span.style.height = makeEm(height); + if (minWidth > 0) { + span.style.minWidth = makeEm(minWidth); + } + return span; +}; +const stretchyEnclose = function (inner, label, topPad, bottomPad, options) { + // Return an image span for \cancel, \bcancel, \xcancel, \fbox, or \angl + let img; + const totalHeight = inner.height + inner.depth + topPad + bottomPad; + if (/fbox|color|angl/.test(label)) { + img = makeSpan(["katex-stretchy", label], [], options); + if (label === "fbox") { + const color = options.color && options.getColor(); + if (color) { + img.style.borderColor = color; + } + } + } else { + // \cancel, \bcancel, or \xcancel + // Since \cancel's SVG is inline and it omits the viewBox attribute, + // its stroke-width will not vary with span area. + + const lines = []; + if (/^[bx]cancel$/.test(label)) { + lines.push(new LineNode({ + "x1": "0", + "y1": "0", + "x2": "100%", + "y2": "100%", + "stroke-width": "0.046em" + })); + } + if (/^x?cancel$/.test(label)) { + lines.push(new LineNode({ + "x1": "0", + "y1": "100%", + "x2": "100%", + "y2": "0", + "stroke-width": "0.046em" + })); + } + const svgNode = new SvgNode(lines, { + "width": "100%", + "height": makeEm(totalHeight) + }); + img = makeSvgSpan([], [svgNode], options); + } + img.height = totalHeight; + img.style.height = makeEm(totalHeight); + return img; +}; +;// ./src/atoms.ts +/** + * Small module for atom-group constants and type guard. Kept separate from + * `symbols.ts` so that consumers (notably `contrib/render-a11y-string`) can + * pull in `isAtom` without dragging in the ~870-line symbol tables. + */ + +const atomList = ["bin", "close", "inner", "open", "punct", "rel"]; +const nonAtomList = ["accent-token", "mathord", "op-token", "spacing", "textord"]; +const Atoms = new Set(atomList); +const NonAtoms = new Set(nonAtomList); +function isAtom(value) { + return Atoms.has(value); +} +;// ./src/parseNode.ts + + +/** + * Asserts that the node is of the given type and returns it with stricter + * typing. Throws if the node's type does not match. + */ +function assertNodeType(node, type) { + if (!node || node.type !== type) { + throw new Error("Expected node of type " + type + ", but got " + (node ? "node of type " + node.type : String(node))); + } + return node; +} + +/** + * Returns the node more strictly typed iff it is of the given type. Otherwise, + * returns null. + */ +function assertSymbolNodeType(node) { + const typedNode = checkSymbolNodeType(node); + if (!typedNode) { + throw new Error("Expected node of symbol group type, but got " + (node ? "node of type " + node.type : String(node))); + } + return typedNode; +} + +/** + * Returns the node more strictly typed if it is of the given type. Otherwise, + * returns null. + */ +function checkSymbolNodeType(node) { + if (node.type === "atom" || NonAtoms.has(node.type)) { + return node; + } + return null; +} + +/** + * Returns the string spelled out by a group of plain characters, throwing the + * given ParseError if the group holds anything else. With allowSpaces, a + * literal space counts as a character; `~` and `\ ` do not. + */ +function assertCharacterGroup(group, errorMessage, allowSpaces) { + let text = ""; + for (const node of group.body) { + if (node.type === "textord") { + text += node.text; + } else if (allowSpaces && node.type === "spacing" && node.text === " ") { + text += " "; + } else { + throw new src_ParseError(errorMessage, group); + } + } + return text; +} +;// ./src/functions/accent.ts + + + + + + + + + + + +const getBaseSymbol = group => { + if (group instanceof SymbolNode) { + return group; + } + if (hasHtmlDomChildren(group) && group.children.length === 1) { + return getBaseSymbol(group.children[0]); + } +}; + +// NOTE: Unlike most `htmlBuilder`s, this one handles not only "accent", but +// also "supsub" since an accent can affect super/subscripting. +const htmlBuilder = (grp, options) => { + // Accents are handled in the TeXbook pg. 443, rule 12. + let base; + let group; + let supSubGroup; + if (grp && grp.type === "supsub") { + // If our base is a character box, and we have superscripts and + // subscripts, the supsub will defer to us. In particular, we want + // to attach the superscripts and subscripts to the inner body (so + // that the position of the superscripts and subscripts won't be + // affected by the height of the accent). We accomplish this by + // sticking the base of the accent into the base of the supsub, and + // rendering that, while keeping track of where the accent is. + + // The real accent group is the base of the supsub group + group = assertNodeType(grp.base, "accent"); + // The character box is the base of the accent group + base = group.base; + // Stick the character box into the base of the supsub group + grp.base = base; + + // Rerender the supsub group with its new base, and store that + // result. + supSubGroup = assertSpan(buildGroup(grp, options)); + + // reset original base + grp.base = group; + } else { + group = assertNodeType(grp, "accent"); + base = group.base; + } + + // Build the base group + const body = buildGroup(base, options.havingCrampedStyle()); + + // Does the accent need to shift for the skew of a character? + const mustShift = group.isShifty && isCharacterBox(base); + + // Calculate the skew of the accent. This is based on the line "If the + // nucleus is not a single character, let s = 0; otherwise set s to the + // kern amount for the nucleus followed by the \skewchar of its font." + // Note that our skew metrics are just the kern between each character + // and the skewchar. + let skew = 0; + if (mustShift) { + var _getBaseSymbol$skew, _getBaseSymbol; + // Read the skew from the rendered base symbol. + // This preserves font metrics from font wrappers like \mathbb. + skew = (_getBaseSymbol$skew = (_getBaseSymbol = getBaseSymbol(body)) == null ? void 0 : _getBaseSymbol.skew) != null ? _getBaseSymbol$skew : 0; + } + const accentBelow = group.label === "\\c"; + + // calculate the amount of space between the body and the accent + let clearance = accentBelow ? body.height + body.depth : Math.min(body.height, options.fontMetrics().xHeight); + + // Build the accent + let accentBody; + if (!group.isStretchy) { + let accent; + let width; + if (group.label === "\\vec") { + // Before version 0.9, \vec used the combining font glyph U+20D7. + // But browsers, especially Safari, are not consistent in how they + // render combining characters when not preceded by a character. + // So now we use an SVG. + // If Safari reforms, we should consider reverting to the glyph. + accent = staticSvg("vec", options); + width = svgData.vec[1]; + } else { + accent = makeOrd({ + type: "textord", + mode: group.mode, + text: group.label + }, options); + accent = assertSymbolDomNode(accent); + // Remove the italic correction of the accent, because it only serves to + // shift the accent over to a place we don't want. + accent.italic = 0; + width = accent.width; + if (accentBelow) { + clearance += accent.depth; + } + } + accentBody = makeSpan(["accent-body"], [accent]); + + // "Full" accents expand the width of the resulting symbol to be + // at least the width of the accent, and overlap directly onto the + // character without any vertical offset. + const accentFull = group.label === "\\textcircled"; + if (accentFull) { + accentBody.classes.push('accent-full'); + clearance = body.height; + } + + // Shift the accent over by the skew. + let left = skew; + + // CSS defines `.katex .katex-accent .accent-body:not(.accent-full) { width: 0 }` + // so that the accent doesn't contribute to the bounding box. + // We need to shift the character by its width (effectively half + // its width) to compensate. + if (!accentFull) { + left -= width / 2; + } + accentBody.style.left = makeEm(left); + + // \textcircled uses the \bigcirc glyph, so it needs some + // vertical adjustment to match LaTeX. + if (group.label === "\\textcircled") { + accentBody.style.top = ".2em"; + } + accentBody = makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: body + }, { + type: "kern", + size: -clearance + }, { + type: "elem", + elem: accentBody + }] + }, options); + } else { + accentBody = stretchySvg(group, options); + accentBody = makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: body + }, { + type: "elem", + elem: accentBody, + wrapperClasses: ["svg-align"], + wrapperStyle: skew > 0 ? { + width: "calc(100% - " + makeEm(2 * skew) + ")", + marginLeft: makeEm(2 * skew) + } : undefined + }] + }, options); + } + const accentWrap = makeSpan(["mord", "katex-accent"], [accentBody], options); + if (supSubGroup) { + // Here, we replace the "base" child of the supsub with our newly + // generated accent. + supSubGroup.children[0] = accentWrap; + + // Since we don't rerun the height calculation after replacing the + // accent, we manually recalculate height. + supSubGroup.height = Math.max(accentWrap.height, supSubGroup.height); + + // Accents should always be ords, even when their innards are not. + supSubGroup.classes[0] = "mord"; + return supSubGroup; + } else { + return accentWrap; + } +}; +const mathmlBuilder = (group, options) => { + const accentNode = group.isStretchy ? stretchyMathML(group.label) : new MathNode("mo", [makeText(group.label, group.mode)]); + const node = new MathNode("mover", [buildMathML_buildGroup(group.base, options), accentNode]); + node.setAttribute("accent", "true"); + return node; +}; +const NON_STRETCHY_ACCENT_REGEX = new RegExp(["\\acute", "\\grave", "\\ddot", "\\tilde", "\\bar", "\\breve", "\\check", "\\hat", "\\vec", "\\dot", "\\mathring"].map(accent => "\\" + accent).join("|")); + +// Accents +defineFunction({ + type: "accent", + names: ["\\acute", "\\grave", "\\ddot", "\\tilde", "\\bar", "\\breve", "\\check", "\\hat", "\\vec", "\\dot", "\\mathring", "\\widecheck", "\\widehat", "\\widetilde", "\\overrightarrow", "\\overleftarrow", "\\Overrightarrow", "\\overleftrightarrow", "\\overgroup", "\\overlinesegment", "\\overleftharpoon", "\\overrightharpoon"], + numArgs: 1, + handler: (context, args) => { + const base = normalizeArgument(args[0]); + const isStretchy = !NON_STRETCHY_ACCENT_REGEX.test(context.funcName); + const isShifty = !isStretchy || context.funcName === "\\widehat" || context.funcName === "\\widetilde" || context.funcName === "\\widecheck"; + return { + type: "accent", + mode: context.parser.mode, + label: context.funcName, + isStretchy: isStretchy, + isShifty: isShifty, + base: base + }; + }, + htmlBuilder, + mathmlBuilder +}); + +// Text-mode accents +defineFunction({ + type: "accent", + names: ["\\'", "\\`", "\\^", "\\~", "\\=", "\\u", "\\.", '\\"', "\\c", "\\r", "\\H", "\\v", "\\textcircled"], + numArgs: 1, + allowedInText: true, + allowedInMath: true, + // unless in strict mode + argTypes: ["primitive"], + handler: (context, args) => { + const base = args[0]; + let mode = context.parser.mode; + if (mode === "math") { + handleStrict({ + strict: context.parser.settings.strict, + errorCode: "mathVsTextAccents", + errorMsg: "LaTeX's accent " + context.funcName + " works only in text mode", + report: true + }); + mode = "text"; + } + return { + type: "accent", + mode: mode, + label: context.funcName, + isStretchy: false, + isShifty: true, + base: base + }; + } +}); +;// ./src/functions/accentunder.ts +// Horizontal overlap functions + + + + + + +defineFunction({ + type: "accentUnder", + names: ["\\underleftarrow", "\\underrightarrow", "\\underleftrightarrow", "\\undergroup", "\\underlinesegment", "\\utilde"], + numArgs: 1, + handler: (_ref, args) => { + let parser = _ref.parser, + funcName = _ref.funcName; + const base = args[0]; + return { + type: "accentUnder", + mode: parser.mode, + label: funcName, + base: base + }; + }, + htmlBuilder: (group, options) => { + // Treat under accents much like underlines. + const innerGroup = buildGroup(group.base, options); + const accentBody = stretchySvg(group, options); + const kern = group.label === "\\utilde" ? 0.12 : 0; + + // Generate the vlist, with the appropriate kerns + const vlist = makeVList({ + positionType: "top", + positionData: innerGroup.height, + children: [{ + type: "elem", + elem: accentBody, + wrapperClasses: ["svg-align"] + }, { + type: "kern", + size: kern + }, { + type: "elem", + elem: innerGroup + }] + }, options); + return makeSpan(["mord", "accentunder"], [vlist], options); + }, + mathmlBuilder: (group, options) => { + const accentNode = stretchyMathML(group.label); + const node = new MathNode("munder", [buildMathML_buildGroup(group.base, options), accentNode]); + node.setAttribute("accentunder", "true"); + return node; + } +}); +;// ./src/functions/arrow.ts + + + + + + +// Helper function +const paddedNode = group => { + const node = new MathNode("mpadded", group ? [group] : []); + node.setAttribute("width", "+0.6em"); + node.setAttribute("lspace", "0.3em"); + return node; +}; + +// Stretchy arrows with an optional argument +defineFunction({ + type: "xArrow", + names: ["\\xleftarrow", "\\xrightarrow", "\\xLeftarrow", "\\xRightarrow", "\\xleftrightarrow", "\\xLeftrightarrow", "\\xhookleftarrow", "\\xhookrightarrow", "\\xmapsto", "\\xrightharpoondown", "\\xrightharpoonup", "\\xleftharpoondown", "\\xleftharpoonup", "\\xrightleftharpoons", "\\xleftrightharpoons", "\\xlongequal", "\\xtwoheadrightarrow", "\\xtwoheadleftarrow", "\\xtofrom", + // The next 3 functions are here to support the mhchem extension. + // Direct use of these functions is discouraged and may break someday. + "\\xrightleftarrows", "\\xrightequilibrium", "\\xleftequilibrium", + // The next 3 functions are here only to support the {CD} environment. + "\\\\cdrightarrow", "\\\\cdleftarrow", "\\\\cdlongequal"], + numArgs: 1, + numOptionalArgs: 1, + handler(_ref, args, optArgs) { + let parser = _ref.parser, + funcName = _ref.funcName; + return { + type: "xArrow", + mode: parser.mode, + label: funcName, + body: args[0], + below: optArgs[0] + }; + }, + htmlBuilder(group, options) { + const style = options.style; + + // Build the argument groups in the appropriate style. + // Ref: amsmath.dtx: \hbox{$\scriptstyle\mkern#3mu{#6}\mkern#4mu$}% + + // Some groups can return document fragments. Handle those by wrapping + // them in a span. + let newOptions = options.havingStyle(style.sup()); + const upperGroup = wrapFragment(buildGroup(group.body, newOptions, options), options); + const arrowPrefix = group.label.slice(0, 2) === "\\x" ? "x" : "cd"; + upperGroup.classes.push(arrowPrefix + "-arrow-pad"); + let lowerGroup; + if (group.below) { + // Build the lower group + newOptions = options.havingStyle(style.sub()); + lowerGroup = wrapFragment(buildGroup(group.below, newOptions, options), options); + lowerGroup.classes.push(arrowPrefix + "-arrow-pad"); + } + const arrowBody = stretchySvg(group, options); + + // Re shift: Note that stretchySvg returned arrowBody.depth = 0. + // The point we want on the math axis is at 0.5 * arrowBody.height. + const arrowShift = -options.fontMetrics().axisHeight + 0.5 * arrowBody.height; + // 2 mu kern. Ref: amsmath.dtx: #7\if0#2\else\mkern#2mu\fi + let upperShift = -options.fontMetrics().axisHeight - 0.5 * arrowBody.height - 0.111; // 0.111 em = 2 mu + if (upperGroup.depth > 0.25 || group.label === "\\xleftequilibrium") { + upperShift -= upperGroup.depth; // shift up if depth encroaches + } + + // Generate the vlist + let vlist; + if (lowerGroup) { + const lowerShift = -options.fontMetrics().axisHeight + lowerGroup.height + 0.5 * arrowBody.height + 0.111; + vlist = makeVList({ + positionType: "individualShift", + children: [{ + type: "elem", + elem: upperGroup, + shift: upperShift + }, { + type: "elem", + elem: arrowBody, + shift: arrowShift, + wrapperClasses: ["svg-align"] + }, { + type: "elem", + elem: lowerGroup, + shift: lowerShift + }] + }, options); + } else { + vlist = makeVList({ + positionType: "individualShift", + children: [{ + type: "elem", + elem: upperGroup, + shift: upperShift + }, { + type: "elem", + elem: arrowBody, + shift: arrowShift, + wrapperClasses: ["svg-align"] + }] + }, options); + } + return makeSpan(["mrel", "x-arrow"], [vlist], options); + }, + mathmlBuilder(group, options) { + const arrowNode = stretchyMathML(group.label); + arrowNode.setAttribute("minsize", group.label.charAt(0) === "x" ? "1.75em" : "3.0em"); + let node; + if (group.body) { + const upperNode = paddedNode(buildMathML_buildGroup(group.body, options)); + if (group.below) { + const lowerNode = paddedNode(buildMathML_buildGroup(group.below, options)); + node = new MathNode("munderover", [arrowNode, lowerNode, upperNode]); + } else { + node = new MathNode("mover", [arrowNode, upperNode]); + } + } else if (group.below) { + const lowerNode = paddedNode(buildMathML_buildGroup(group.below, options)); + node = new MathNode("munder", [arrowNode, lowerNode]); + } else { + // This should never happen. + // Parser.js throws an error if there is no argument. + node = paddedNode(); + node = new MathNode("mover", [arrowNode, node]); + } + return node; + } +}); +;// ./src/functions/mclass.ts + + + + + + +function mclass_htmlBuilder(group, options) { + const elements = buildExpression(group.body, options, true); + return makeSpan([group.mclass], elements, options); +} +function mclass_mathmlBuilder(group, options) { + let node; + const inner = buildMathML_buildExpression(group.body, options); + if (group.mclass === "minner") { + node = new MathNode("mpadded", inner); + } else if (group.mclass === "mord") { + if (group.isCharacterBox) { + node = inner[0]; + node.type = "mi"; + } else { + node = new MathNode("mi", inner); + } + } else { + if (group.isCharacterBox) { + node = inner[0]; + node.type = "mo"; + } else { + node = new MathNode("mo", inner); + } + + // Set spacing based on what is the most likely adjacent atom type. + // See TeXbook p170. + if (group.mclass === "mbin") { + node.attributes.lspace = "0.22em"; // medium space + node.attributes.rspace = "0.22em"; + } else if (group.mclass === "mpunct") { + node.attributes.lspace = "0em"; + node.attributes.rspace = "0.17em"; // thinspace + } else if (group.mclass === "mopen" || group.mclass === "mclose") { + node.attributes.lspace = "0em"; + node.attributes.rspace = "0em"; + } + // MathML default space is 5/18 em, so needs no action. + // Ref: https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mo + } + return node; +} + +// Math class commands except \mathop +defineFunction({ + type: "mclass", + names: ["\\mathord", "\\mathbin", "\\mathrel", "\\mathopen", "\\mathclose", "\\mathpunct", "\\mathinner"], + numArgs: 1, + primitive: true, + handler(_ref, args) { + let parser = _ref.parser, + funcName = _ref.funcName; + const body = args[0]; + return { + type: "mclass", + mode: parser.mode, + mclass: "m" + funcName.slice(5), + body: ordargument(body), + isCharacterBox: isCharacterBox(body) + }; + }, + htmlBuilder: mclass_htmlBuilder, + mathmlBuilder: mclass_mathmlBuilder +}); +const binrelClass = arg => { + // \binrel@ spacing varies with (bin|rel|ord) of the atom in the argument. + // (by rendering separately and with {}s before and after, and measuring + // the change in spacing). We'll do roughly the same by detecting the + // atom type directly. + const atom = arg.type === "ordgroup" && arg.body.length ? arg.body[0] : arg; + if (atom.type === "atom" && (atom.family === "bin" || atom.family === "rel")) { + return "m" + atom.family; + } else { + return "mord"; + } +}; + +// \@binrel{x}{y} renders like y but as mbin/mrel/mord if x is mbin/mrel/mord. +// This is equivalent to \binrel@{x}\binrel@@{y} in AMSTeX. +defineFunction({ + type: "mclass", + names: ["\\@binrel"], + numArgs: 2, + handler(_ref2, args) { + let parser = _ref2.parser; + return { + type: "mclass", + mode: parser.mode, + mclass: binrelClass(args[0]), + body: ordargument(args[1]), + isCharacterBox: isCharacterBox(args[1]) + }; + } +}); + +// Build a relation or stacked op by placing one symbol on top of another +defineFunction({ + type: "mclass", + names: ["\\stackrel", "\\overset", "\\underset"], + numArgs: 2, + handler(_ref3, args) { + let parser = _ref3.parser, + funcName = _ref3.funcName; + const baseArg = args[1]; + const shiftedArg = args[0]; + let mclass; + if (funcName !== "\\stackrel") { + // LaTeX applies \binrel spacing to \overset and \underset. + mclass = binrelClass(baseArg); + } else { + mclass = "mrel"; // for \stackrel + } + const baseOp = { + type: "op", + mode: baseArg.mode, + limits: true, + alwaysHandleSupSub: true, + parentIsSupSub: false, + symbol: false, + suppressBaseShift: funcName !== "\\stackrel", + body: ordargument(baseArg) + }; + const supsub = funcName === "\\underset" ? { + type: "supsub", + mode: shiftedArg.mode, + base: baseOp, + sub: shiftedArg + } : { + type: "supsub", + mode: shiftedArg.mode, + base: baseOp, + sup: shiftedArg + }; + return { + type: "mclass", + mode: parser.mode, + mclass, + body: [supsub], + isCharacterBox: isCharacterBox(supsub) + }; + } +}); +;// ./src/functions/pmb.ts + + + + + + +// \pmb is a simulation of bold font. +// The version of \pmb in ambsy.sty works by typesetting three copies +// with small offsets. We use CSS text-shadow. +// It's a hack. Not as good as a real bold font. Better than nothing. + +defineFunction({ + type: "pmb", + names: ["\\pmb"], + numArgs: 1, + allowedInText: true, + handler(_ref, args) { + let parser = _ref.parser; + return { + type: "pmb", + mode: parser.mode, + mclass: binrelClass(args[0]), + body: ordargument(args[0]) + }; + }, + htmlBuilder(group, options) { + const elements = buildExpression(group.body, options, true); + const node = makeSpan([group.mclass], elements, options); + node.style.textShadow = "0.02em 0.01em 0.04px"; + return node; + }, + mathmlBuilder(group, style) { + const inner = buildMathML_buildExpression(group.body, style); + // Wrap with an element. + const node = new MathNode("mstyle", inner); + node.setAttribute("style", "text-shadow: 0.02em 0.01em 0.04px"); + return node; + } +}); +;// ./src/environments/cd.ts + + + + + + + + +const cdArrowFunctionName = { + ">": "\\\\cdrightarrow", + "<": "\\\\cdleftarrow", + "=": "\\\\cdlongequal", + "A": "\\uparrow", + "V": "\\downarrow", + "|": "\\Vert", + ".": "no arrow" +}; +const newCell = () => { + // Create an empty cell, to be filled below with parse nodes. + // The parseTree from this module must be constructed like the + // one created by parseArray(), so an empty CD cell must + // be a ParseNode<"styling">. And CD is always displaystyle. + return { + type: "styling", + body: [], + mode: "math", + style: "display", + resetFont: true + }; +}; +const isStartOfArrow = node => { + return node.type === "textord" && node.text === "@"; +}; +const isLabelEnd = (node, endChar) => { + return (node.type === "mathord" || node.type === "atom") && node.text === endChar; +}; +function cdArrow(arrowChar, labels, parser) { + // Return a parse tree of an arrow and its labels. + // This acts in a way similar to a macro expansion. + const funcName = cdArrowFunctionName[arrowChar]; + switch (funcName) { + case "\\\\cdrightarrow": + case "\\\\cdleftarrow": + return parser.callFunction(funcName, [labels[0]], [labels[1]]); + case "\\uparrow": + case "\\downarrow": + { + const leftLabel = parser.callFunction("\\\\cdleft", [labels[0]], []); + const bareArrow = { + type: "atom", + text: funcName, + mode: "math", + family: "rel" + }; + const sizedArrow = parser.callFunction("\\Big", [bareArrow], []); + const rightLabel = parser.callFunction("\\\\cdright", [labels[1]], []); + const arrowGroup = { + type: "ordgroup", + mode: "math", + body: [leftLabel, sizedArrow, rightLabel] + }; + return parser.callFunction("\\\\cdparent", [arrowGroup], []); + } + case "\\\\cdlongequal": + return parser.callFunction("\\\\cdlongequal", [], []); + case "\\Vert": + { + const arrow = { + type: "textord", + text: "\\Vert", + mode: "math" + }; + return parser.callFunction("\\Big", [arrow], []); + } + default: + return { + type: "textord", + text: " ", + mode: "math" + }; + } +} +function parseCD(parser) { + // Get the array's parse nodes with \\ temporarily mapped to \cr. + const parsedRows = []; + parser.gullet.beginGroup(); + parser.gullet.macros.set("\\cr", "\\\\\\relax"); + parser.gullet.beginGroup(); + while (true) { + // Get the parse nodes for the next row. + parsedRows.push(parser.parseExpression(false, "\\\\")); + parser.gullet.endGroup(); + parser.gullet.beginGroup(); + const next = parser.fetch().text; + if (next === "&" || next === "\\\\") { + parser.consume(); + } else if (next === "\\end") { + if (parsedRows[parsedRows.length - 1].length === 0) { + parsedRows.pop(); // final row ended in \\ + } + break; + } else { + throw new src_ParseError("Expected \\\\ or \\cr or \\end", parser.nextToken); + } + } + let row = []; + const body = [row]; + + // Loop thru the parse nodes. Collect them into cells and arrows. + for (let i = 0; i < parsedRows.length; i++) { + // Start a new row. + const rowNodes = parsedRows[i]; + // Create the first cell. + let cell = newCell(); + for (let j = 0; j < rowNodes.length; j++) { + if (!isStartOfArrow(rowNodes[j])) { + // If a parseNode is not an arrow, it goes into a cell. + cell.body.push(rowNodes[j]); + } else { + // Parse node j is an "@", the start of an arrow. + // Before starting on the arrow, push the cell into `row`. + row.push(cell); + + // Now collect parseNodes into an arrow. + // The character after "@" defines the arrow type. + j += 1; + const arrowChar = assertSymbolNodeType(rowNodes[j]).text; + + // Create two empty label nodes. We may or may not use them. + const labels = new Array(2); + labels[0] = { + type: "ordgroup", + mode: "math", + body: [] + }; + labels[1] = { + type: "ordgroup", + mode: "math", + body: [] + }; + + // Process the arrow. + if ("=|.".includes(arrowChar)) { + // Three "arrows", ``@=`, `@|`, and `@.`, do not take labels. + // Do nothing here. + } else if ("<>AV".includes(arrowChar)) { + // Four arrows, `@>>>`, `@<<<`, `@AAA`, and `@VVV`, each take + // two optional labels. E.g. the right-point arrow syntax is + // really: @>{optional label}>{optional label}> + // Collect parseNodes into labels. + for (let labelNum = 0; labelNum < 2; labelNum++) { + let inLabel = true; + for (let k = j + 1; k < rowNodes.length; k++) { + if (isLabelEnd(rowNodes[k], arrowChar)) { + inLabel = false; + j = k; + break; + } + if (isStartOfArrow(rowNodes[k])) { + throw new src_ParseError("Missing a " + arrowChar + " character to complete a CD arrow.", rowNodes[k]); + } + labels[labelNum].body.push(rowNodes[k]); + } + if (inLabel) { + // isLabelEnd never returned a true. + throw new src_ParseError("Missing a " + arrowChar + " character to complete a CD arrow.", rowNodes[j]); + } + } + } else { + throw new src_ParseError("Expected one of \"<>AV=|.\" after @", rowNodes[j]); + } + + // Now join the arrow to its labels. + const arrow = cdArrow(arrowChar, labels, parser); + + // Wrap the arrow in ParseNode<"styling">. + // This is done to match parseArray() behavior. + const wrappedArrow = { + type: "styling", + body: [arrow], + mode: "math", + style: "display", + // CD is always displaystyle. + resetFont: true + }; + row.push(wrappedArrow); + // In CD's syntax, cells are implicit. That is, everything that + // is not an arrow gets collected into a cell. So create an empty + // cell now. It will collect upcoming parseNodes. + cell = newCell(); + } + } + if (i % 2 === 0) { + // Even-numbered rows consist of: cell, arrow, cell, arrow, ... cell + // The last cell is not yet pushed into `row`, so: + row.push(cell); + } else { + // Odd-numbered rows consist of: vert arrow, empty cell, ... vert arrow + // Remove the empty cell that was placed at the beginning of `row`. + row.shift(); + } + row = []; + body.push(row); + } + + // End row group + parser.gullet.endGroup(); + // End array group defining \\ + parser.gullet.endGroup(); + + // define column separation. + const cols = new Array(body[0].length).fill({ + type: "align", + align: "c", + pregap: 0.25, + // CD package sets \enskip between columns. + postgap: 0.25 // So pre and post each get half an \enskip, i.e. 0.25em. + }); + return { + type: "array", + mode: "math", + body, + arraystretch: 1, + addJot: true, + rowGaps: [null], + cols, + colSeparationType: "CD", + hLinesBeforeRow: new Array(body.length + 1).fill([]) + }; +} + +// The functions below are not available for general use. +// They are here only for internal use by the {CD} environment in placing labels +// next to vertical arrows. + +// We don't need any such functions for horizontal arrows because we can reuse +// the functionality that already exists for extensible arrows. + +defineFunction({ + type: "cdlabel", + names: ["\\\\cdleft", "\\\\cdright"], + numArgs: 1, + handler(_ref, args) { + let parser = _ref.parser, + funcName = _ref.funcName; + return { + type: "cdlabel", + mode: parser.mode, + side: funcName.slice(4), + label: args[0] + }; + }, + htmlBuilder(group, options) { + const newOptions = options.havingStyle(options.style.sup()); + const label = wrapFragment(buildGroup(group.label, newOptions, options), options); + label.classes.push("cd-label-" + group.side); + label.style.bottom = makeEm(0.8 - label.depth); + // Zero out label height & depth, so vertical align of arrow is set + // by the arrow height, not by the label. + label.height = 0; + label.depth = 0; + return label; + }, + mathmlBuilder(group, options) { + let label = new MathNode("mrow", [buildMathML_buildGroup(group.label, options)]); + label = new MathNode("mpadded", [label]); + label.setAttribute("width", "0"); + if (group.side === "left") { + label.setAttribute("lspace", "-1width"); + } + // We have to guess at vertical alignment. We know the arrow is 1.8em tall, + // But we don't know the height or depth of the label. + label.setAttribute("voffset", "0.7em"); + label = new MathNode("mstyle", [label]); + label.setAttribute("displaystyle", "false"); + label.setAttribute("scriptlevel", "1"); + return label; + } +}); +defineFunction({ + type: "cdlabelparent", + names: ["\\\\cdparent"], + numArgs: 1, + handler(_ref2, args) { + let parser = _ref2.parser; + return { + type: "cdlabelparent", + mode: parser.mode, + fragment: args[0] + }; + }, + htmlBuilder(group, options) { + // Wrap the vertical arrow and its labels. + // The parent gets position: relative. The child gets position: absolute. + // So CSS can locate the label correctly. + const parent = wrapFragment(buildGroup(group.fragment, options), options); + parent.classes.push("cd-vert-arrow"); + return parent; + }, + mathmlBuilder(group, options) { + return new MathNode("mrow", [buildMathML_buildGroup(group.fragment, options)]); + } +}); +;// ./src/functions/char.ts + + + + +// \@char is an internal function that takes a grouped decimal argument like +// {123} and converts into symbol with code 123. It is used by the *macro* +// \char defined in macros.js. +defineFunction({ + type: "textord", + names: ["\\@char"], + numArgs: 1, + allowedInText: true, + handler(_ref, args) { + let parser = _ref.parser; + const arg = assertNodeType(args[0], "ordgroup"); + const number = assertCharacterGroup(arg, "\\@char has non-numeric argument"); + let code = parseInt(number); + let text; + if (isNaN(code)) { + throw new src_ParseError("\\@char has non-numeric argument " + number); + // If we drop IE support, the following code could be replaced with + // text = String.fromCodePoint(code) + } else if (code < 0 || code > 0x10ffff) { + throw new src_ParseError("\\@char with invalid code point " + number); + } else if (code <= 0xffff) { + text = String.fromCharCode(code); + } else { + // Astral code point; split into surrogate halves + code -= 0x10000; + text = String.fromCharCode((code >> 10) + 0xd800, (code & 0x3ff) + 0xdc00); + } + return { + type: "textord", + mode: parser.mode, + text: text + }; + } +}); +;// ./src/functions/color.ts + + + + + + +const color_htmlBuilder = (group, options) => { + const elements = buildExpression(group.body, options.withColor(group.color), false); + + // \color isn't supposed to affect the type of the elements it contains. + // To accomplish this, we wrap the results in a fragment, so the inner + // elements will be able to directly interact with their neighbors. For + // example, `\color{red}{2 +} 3` has the same spacing as `2 + 3` + return makeFragment(elements); +}; +const color_mathmlBuilder = (group, options) => { + const inner = buildMathML_buildExpression(group.body, options.withColor(group.color)); + const node = new MathNode("mstyle", inner); + node.setAttribute("mathcolor", group.color); + return node; +}; +defineFunction({ + type: "color", + names: ["\\textcolor"], + numArgs: 2, + allowedInText: true, + argTypes: ["color", "original"], + handler(_ref, args) { + let parser = _ref.parser; + const color = assertNodeType(args[0], "color-token").color; + const body = args[1]; + return { + type: "color", + mode: parser.mode, + color, + body: ordargument(body) + }; + }, + htmlBuilder: color_htmlBuilder, + mathmlBuilder: color_mathmlBuilder +}); +defineFunction({ + type: "color", + names: ["\\color"], + numArgs: 1, + allowedInText: true, + argTypes: ["color"], + handler(_ref2, args) { + let parser = _ref2.parser, + breakOnTokenText = _ref2.breakOnTokenText; + const color = assertNodeType(args[0], "color-token").color; + + // Set macro \current@color in current namespace to store the current + // color, mimicking the behavior of color.sty. + // This is currently used just to correctly color a \right + // that follows a \color command. + parser.gullet.macros.set("\\current@color", color); + + // Parse out the implicit body that should be colored. + const body = parser.parseExpression(true, breakOnTokenText); + return { + type: "color", + mode: parser.mode, + color, + body + }; + } +}); +;// ./src/functions/cr.ts +// Row breaks within tabular environments, and line breaks at top level + + + + + + + + +// \DeclareRobustCommand\\{...\@xnewline} +defineFunction({ + type: "cr", + names: ["\\\\"], + numArgs: 0, + numOptionalArgs: 0, + allowedInText: true, + handler(_ref) { + let parser = _ref.parser; + const size = parser.gullet.future().text === "[" ? parser.parseSizeGroup(true) : null; + const newLine = !parser.settings.displayMode || !handleStrict({ + strict: parser.settings.strict, + errorCode: "newLineInDisplayMode", + errorMsg: "In LaTeX, \\\\ or \\newline does nothing in display mode", + report: false + }); + return { + type: "cr", + mode: parser.mode, + newLine, + size: size && assertNodeType(size, "size").value + }; + }, + // The following builders are called only at the top level, + // not within tabular/array environments. + + htmlBuilder(group, options) { + const span = makeSpan(["mspace"], [], options); + if (group.newLine) { + span.classes.push("katex-newline"); + if (group.size) { + span.style.marginTop = makeEm(calculateSize(group.size, options)); + } + } + return span; + }, + mathmlBuilder(group, options) { + const node = new MathNode("mspace"); + if (group.newLine) { + node.setAttribute("linebreak", "newline"); + if (group.size) { + node.setAttribute("height", makeEm(calculateSize(group.size, options))); + } + } + return node; + } +}); +;// ./src/functions/def.ts + + + +const globalMap = { + "\\global": "\\global", + "\\long": "\\\\globallong", + "\\\\globallong": "\\\\globallong", + "\\def": "\\gdef", + "\\gdef": "\\gdef", + "\\edef": "\\xdef", + "\\xdef": "\\xdef", + "\\let": "\\\\globallet", + "\\futurelet": "\\\\globalfuture" +}; +const checkControlSequence = tok => { + const name = tok.text; + if (/^(?:[\\{}$&#^_]|EOF)$/.test(name)) { + throw new src_ParseError("Expected a control sequence", tok); + } + return name; +}; +const getRHS = parser => { + let tok = parser.gullet.popToken(); + if (tok.text === "=") { + // consume optional equals + tok = parser.gullet.popToken(); + if (tok.text === " ") { + // consume one optional space + tok = parser.gullet.popToken(); + } + } + return tok; +}; +const letCommand = (parser, name, tok, global) => { + let macro = parser.gullet.macros.get(tok.text); + if (macro == null) { + // don't expand it later even if a macro with the same name is defined + // e.g., \let\foo=\frac \def\frac{\relax} \frac12 + tok.noexpand = true; + macro = { + tokens: [tok], + numArgs: 0, + // reproduce the same behavior in expansion + unexpandable: !parser.gullet.isExpandable(tok.text) + }; + } + parser.gullet.macros.set(name, macro, global); +}; + +// -> | +// -> |\global +// -> | +// -> \global|\long|\outer +defineFunction({ + type: "internal", + names: ["\\global", "\\long", "\\\\globallong" // can’t be entered directly + ], + numArgs: 0, + allowedInText: true, + handler(_ref) { + let parser = _ref.parser, + funcName = _ref.funcName; + parser.consumeSpaces(); + const token = parser.fetch(); + if (globalMap[token.text]) { + // KaTeX doesn't have \par, so ignore \long + if (funcName === "\\global" || funcName === "\\\\globallong") { + token.text = globalMap[token.text]; + } + return assertNodeType(parser.parseFunction(), "internal"); + } + throw new src_ParseError("Invalid token after macro prefix", token); + } +}); + +// Basic support for macro definitions: \def, \gdef, \edef, \xdef +// -> +// -> \def|\gdef|\edef|\xdef +// -> +defineFunction({ + type: "internal", + names: ["\\def", "\\gdef", "\\edef", "\\xdef"], + numArgs: 0, + allowedInText: true, + primitive: true, + handler(_ref2) { + let parser = _ref2.parser, + funcName = _ref2.funcName; + let tok = parser.gullet.popToken(); + const name = tok.text; + if (/^(?:[\\{}$&#^_]|EOF)$/.test(name)) { + throw new src_ParseError("Expected a control sequence", tok); + } + let numArgs = 0; + let insert; + const delimiters = [[]]; + // contains no braces + while (parser.gullet.future().text !== "{") { + tok = parser.gullet.popToken(); + if (tok.text === "#") { + // If the very last character of the is #, so that + // this # is immediately followed by {, TeX will behave as if the { + // had been inserted at the right end of both the parameter text + // and the replacement text. + if (parser.gullet.future().text === "{") { + insert = parser.gullet.future(); + delimiters[numArgs].push("{"); + break; + } + + // A parameter, the first appearance of # must be followed by 1, + // the next by 2, and so on; up to nine #’s are allowed + tok = parser.gullet.popToken(); + if (!/^[1-9]$/.test(tok.text)) { + throw new src_ParseError("Invalid argument number \"" + tok.text + "\""); + } + if (parseInt(tok.text) !== numArgs + 1) { + throw new src_ParseError("Argument number \"" + tok.text + "\" out of order"); + } + numArgs++; + delimiters.push([]); + } else if (tok.text === "EOF") { + throw new src_ParseError("Expected a macro definition"); + } else { + delimiters[numArgs].push(tok.text); + } + } + // replacement text, enclosed in '{' and '}' and properly nested + let _parser$gullet$consum = parser.gullet.consumeArg(), + tokens = _parser$gullet$consum.tokens; + if (insert) { + tokens.unshift(insert); + } + if (funcName === "\\edef" || funcName === "\\xdef") { + tokens = parser.gullet.expandTokens(tokens); + tokens.reverse(); // to fit in with stack order + } + // Final arg is the expansion of the macro + parser.gullet.macros.set(name, { + tokens, + numArgs, + delimiters + }, funcName === globalMap[funcName]); + return { + type: "internal", + mode: parser.mode + }; + } +}); + +// -> +// -> \futurelet +// | \let +// -> |= +defineFunction({ + type: "internal", + names: ["\\let", "\\\\globallet" // can’t be entered directly + ], + numArgs: 0, + allowedInText: true, + primitive: true, + handler(_ref3) { + let parser = _ref3.parser, + funcName = _ref3.funcName; + const name = checkControlSequence(parser.gullet.popToken()); + parser.gullet.consumeSpaces(); + const tok = getRHS(parser); + letCommand(parser, name, tok, funcName === "\\\\globallet"); + return { + type: "internal", + mode: parser.mode + }; + } +}); + +// ref: https://www.tug.org/TUGboat/tb09-3/tb22bechtolsheim.pdf +defineFunction({ + type: "internal", + names: ["\\futurelet", "\\\\globalfuture" // can’t be entered directly + ], + numArgs: 0, + allowedInText: true, + primitive: true, + handler(_ref4) { + let parser = _ref4.parser, + funcName = _ref4.funcName; + const name = checkControlSequence(parser.gullet.popToken()); + const middle = parser.gullet.popToken(); + const tok = parser.gullet.popToken(); + letCommand(parser, name, tok, funcName === "\\\\globalfuture"); + parser.gullet.pushToken(tok); + parser.gullet.pushToken(middle); + return { + type: "internal", + mode: parser.mode + }; + } +}); +;// ./src/delimiter.ts +/** + * This file deals with creating delimiters of various sizes. The TeXbook + * discusses these routines on page 441-442, in the "Another subroutine sets box + * x to a specified variable delimiter" paragraph. + * + * There are three main routines here. `makeSmallDelim` makes a delimiter in the + * normal font, but in either text, script, or scriptscript style. + * `makeLargeDelim` makes a delimiter in textstyle, but in one of the Size1, + * Size2, Size3, or Size4 fonts. `makeStackedDelim` makes a delimiter out of + * smaller pieces that are stacked on top of one another. + * + * The functions take a parameter `center`, which determines if the delimiter + * should be centered around the axis. + * + * Then, there are three exposed functions. `sizedDelim` makes a delimiter in + * one of the given sizes. This is used for things like `\bigl`. + * `customSizedDelim` makes a delimiter with a given total height+depth. It is + * called in places like `\sqrt`. `leftRightDelim` makes an appropriate + * delimiter which surrounds an expression of a given height an depth. It is + * used in `\left` and `\right`. + */ + + + + + + + + + + +/** + * Get the metrics for a given symbol and font, after transformation (i.e. + * after following replacement from symbols.js) + */ +const getMetrics = function (symbol, font, mode) { + const replace = src_symbols.math[symbol] && src_symbols.math[symbol].replace; + const metrics = getCharacterMetrics(replace || symbol, font, mode); + if (!metrics) { + throw new Error("Unsupported symbol " + symbol + " and font size " + font + "."); + } + return metrics; +}; + +/** + * Puts a delimiter span in a given style, and adds appropriate height, depth, + * and maxFontSizes. + */ +const styleWrap = function (delim, toStyle, options, classes) { + const newOptions = options.havingBaseStyle(toStyle); + const span = makeSpan(classes.concat(newOptions.sizingClasses(options)), [delim], options); + const delimSizeMultiplier = newOptions.sizeMultiplier / options.sizeMultiplier; + span.height *= delimSizeMultiplier; + span.depth *= delimSizeMultiplier; + span.maxFontSize = newOptions.sizeMultiplier; + return span; +}; +const centerSpan = function (span, options, style) { + const newOptions = options.havingBaseStyle(style); + const shift = (1 - options.sizeMultiplier / newOptions.sizeMultiplier) * options.fontMetrics().axisHeight; + span.classes.push("delimcenter"); + span.style.top = makeEm(shift); + span.height -= shift; + span.depth += shift; +}; + +/** + * Makes a small delimiter. This is a delimiter that comes in the Main-Regular + * font, but is restyled to either be in textstyle, scriptstyle, or + * scriptscriptstyle. + */ +const makeSmallDelim = function (delim, style, center, options, mode, classes) { + const text = makeSymbol(delim, "Main-Regular", mode, options); + const span = styleWrap(text, style, options, classes); + if (center) { + centerSpan(span, options, style); + } + return span; +}; + +/** + * Builds a symbol in the given font size (note size is an integer) + */ +const mathrmSize = function (value, size, mode, options) { + return makeSymbol(value, "Size" + size + "-Regular", mode, options); +}; + +/** + * Makes a large delimiter. This is a delimiter that comes in the Size1, Size2, + * Size3, or Size4 fonts. It is always rendered in textstyle. + */ +const makeLargeDelim = function (delim, size, center, options, mode, classes) { + const inner = mathrmSize(delim, size, mode, options); + const span = styleWrap(makeSpan(["delimsizing", "size" + size], [inner], options), src_Style.TEXT, options, classes); + if (center) { + centerSpan(span, options, src_Style.TEXT); + } + return span; +}; + +/** + * Make a span from a font glyph with the given offset and in the given font. + * This is used in makeStackedDelim to make the stacking pieces for the delimiter. + */ +const makeGlyphSpan = function (symbol, font, mode, options) { + let sizeClass; + // Apply the correct CSS class to choose the right font. + if (font === "Size1-Regular") { + sizeClass = "delim-size1"; + } else /* if (font === "Size4-Regular") */{ + sizeClass = "delim-size4"; + } + const corner = makeSpan(["delimsizinginner", sizeClass], [makeSpan([], [makeSymbol(symbol, font, mode, options)])]); + + // Since this will be passed into `makeVList` in the end, wrap the element + // in the appropriate tag that VList uses. + return { + type: "elem", + elem: corner + }; +}; +const makeInner = function (ch, height, options) { + // Create a span with inline SVG for the inner part of a tall stacked delimiter. + const width = fontMetricsData['Size4-Regular'][ch.charCodeAt(0)] ? fontMetricsData['Size4-Regular'][ch.charCodeAt(0)][4] : fontMetricsData['Size1-Regular'][ch.charCodeAt(0)][4]; + const path = new PathNode("inner", innerPath(ch, Math.round(1000 * height))); + const svgNode = new SvgNode([path], { + "width": makeEm(width), + "height": makeEm(height), + // Override CSS rule `.katex svg { width: 100% }` + "style": "width:" + makeEm(width), + "viewBox": "0 0 " + 1000 * width + " " + Math.round(1000 * height), + "preserveAspectRatio": "xMinYMin" + }); + const span = makeSvgSpan([], [svgNode], options); + span.height = height; + span.style.height = makeEm(height); + span.style.width = makeEm(width); + return { + type: "elem", + elem: span + }; +}; + +// Helpers for makeStackedDelim +const lapInEms = 0.008; +const lap = { + type: "kern", + size: -1 * lapInEms +}; +const verts = new Set(["|", "\\lvert", "\\rvert", "\\vert"]); +const doubleVerts = new Set(["\\|", "\\lVert", "\\rVert", "\\Vert"]); + +/** + * Make a stacked delimiter out of a given delimiter, with the total height at + * least `heightTotal`. This routine is mentioned on page 442 of the TeXbook. + */ +const makeStackedDelim = function (delim, heightTotal, center, options, mode, classes) { + // There are four parts, the top, an optional middle, a repeated part, and a + // bottom. + let top; + let middle; + let repeat; + let bottom; + let svgLabel = ""; + let viewBoxWidth = 0; + top = repeat = bottom = delim; + middle = null; + // Also keep track of what font the delimiters are in + let font = "Size1-Regular"; + + // We set the parts and font based on the symbol. Note that we use + // '\u23d0' instead of '|' and '\u2016' instead of '\\|' for the + // repeats of the arrows + if (delim === "\\uparrow") { + repeat = bottom = "\u23d0"; + } else if (delim === "\\Uparrow") { + repeat = bottom = "\u2016"; + } else if (delim === "\\downarrow") { + top = repeat = "\u23d0"; + } else if (delim === "\\Downarrow") { + top = repeat = "\u2016"; + } else if (delim === "\\updownarrow") { + top = "\\uparrow"; + repeat = "\u23d0"; + bottom = "\\downarrow"; + } else if (delim === "\\Updownarrow") { + top = "\\Uparrow"; + repeat = "\u2016"; + bottom = "\\Downarrow"; + } else if (verts.has(delim)) { + repeat = "\u2223"; + svgLabel = "vert"; + viewBoxWidth = 333; + } else if (doubleVerts.has(delim)) { + repeat = "\u2225"; + svgLabel = "doublevert"; + viewBoxWidth = 556; + } else if (delim === "[" || delim === "\\lbrack") { + top = "\u23a1"; + repeat = "\u23a2"; + bottom = "\u23a3"; + font = "Size4-Regular"; + svgLabel = "lbrack"; + viewBoxWidth = 667; + } else if (delim === "]" || delim === "\\rbrack") { + top = "\u23a4"; + repeat = "\u23a5"; + bottom = "\u23a6"; + font = "Size4-Regular"; + svgLabel = "rbrack"; + viewBoxWidth = 667; + } else if (delim === "\\lfloor" || delim === "\u230a") { + repeat = top = "\u23a2"; + bottom = "\u23a3"; + font = "Size4-Regular"; + svgLabel = "lfloor"; + viewBoxWidth = 667; + } else if (delim === "\\lceil" || delim === "\u2308") { + top = "\u23a1"; + repeat = bottom = "\u23a2"; + font = "Size4-Regular"; + svgLabel = "lceil"; + viewBoxWidth = 667; + } else if (delim === "\\rfloor" || delim === "\u230b") { + repeat = top = "\u23a5"; + bottom = "\u23a6"; + font = "Size4-Regular"; + svgLabel = "rfloor"; + viewBoxWidth = 667; + } else if (delim === "\\rceil" || delim === "\u2309") { + top = "\u23a4"; + repeat = bottom = "\u23a5"; + font = "Size4-Regular"; + svgLabel = "rceil"; + viewBoxWidth = 667; + } else if (delim === "(" || delim === "\\lparen") { + top = "\u239b"; + repeat = "\u239c"; + bottom = "\u239d"; + font = "Size4-Regular"; + svgLabel = "lparen"; + viewBoxWidth = 875; + } else if (delim === ")" || delim === "\\rparen") { + top = "\u239e"; + repeat = "\u239f"; + bottom = "\u23a0"; + font = "Size4-Regular"; + svgLabel = "rparen"; + viewBoxWidth = 875; + } else if (delim === "\\{" || delim === "\\lbrace") { + top = "\u23a7"; + middle = "\u23a8"; + bottom = "\u23a9"; + repeat = "\u23aa"; + font = "Size4-Regular"; + } else if (delim === "\\}" || delim === "\\rbrace") { + top = "\u23ab"; + middle = "\u23ac"; + bottom = "\u23ad"; + repeat = "\u23aa"; + font = "Size4-Regular"; + } else if (delim === "\\lgroup" || delim === "\u27ee") { + top = "\u23a7"; + bottom = "\u23a9"; + repeat = "\u23aa"; + font = "Size4-Regular"; + } else if (delim === "\\rgroup" || delim === "\u27ef") { + top = "\u23ab"; + bottom = "\u23ad"; + repeat = "\u23aa"; + font = "Size4-Regular"; + } else if (delim === "\\lmoustache" || delim === "\u23b0") { + top = "\u23a7"; + bottom = "\u23ad"; + repeat = "\u23aa"; + font = "Size4-Regular"; + } else if (delim === "\\rmoustache" || delim === "\u23b1") { + top = "\u23ab"; + bottom = "\u23a9"; + repeat = "\u23aa"; + font = "Size4-Regular"; + } + + // Get the metrics of the four sections + const topMetrics = getMetrics(top, font, mode); + const topHeightTotal = topMetrics.height + topMetrics.depth; + const repeatMetrics = getMetrics(repeat, font, mode); + const repeatHeightTotal = repeatMetrics.height + repeatMetrics.depth; + const bottomMetrics = getMetrics(bottom, font, mode); + const bottomHeightTotal = bottomMetrics.height + bottomMetrics.depth; + let middleHeightTotal = 0; + let middleFactor = 1; + if (middle !== null) { + const middleMetrics = getMetrics(middle, font, mode); + middleHeightTotal = middleMetrics.height + middleMetrics.depth; + middleFactor = 2; // repeat symmetrically above and below middle + } + + // Calculate the minimal height that the delimiter can have. + // It is at least the size of the top, bottom, and optional middle combined. + const minHeight = topHeightTotal + bottomHeightTotal + middleHeightTotal; + + // Compute the number of copies of the repeat symbol we will need + const repeatCount = Math.max(0, Math.ceil((heightTotal - minHeight) / (middleFactor * repeatHeightTotal))); + + // Compute the total height of the delimiter including all the symbols + const realHeightTotal = minHeight + repeatCount * middleFactor * repeatHeightTotal; + + // The center of the delimiter is placed at the center of the axis. Note + // that in this context, "center" means that the delimiter should be + // centered around the axis in the current style, while normally it is + // centered around the axis in textstyle. + let axisHeight = options.fontMetrics().axisHeight; + if (center) { + axisHeight *= options.sizeMultiplier; + } + // Calculate the depth + const depth = realHeightTotal / 2 - axisHeight; + + // Now, we start building the pieces that will go into the vlist + // Keep a list of the pieces of the stacked delimiter + const stack = []; + if (svgLabel.length > 0) { + // Instead of stacking glyphs, create a single SVG. + // This evades browser problems with imprecise positioning of spans. + const midHeight = realHeightTotal - topHeightTotal - bottomHeightTotal; + const viewBoxHeight = Math.round(realHeightTotal * 1000); + const pathStr = tallDelim(svgLabel, Math.round(midHeight * 1000)); + const path = new PathNode(svgLabel, pathStr); + const width = makeEm(viewBoxWidth / 1000); + const height = makeEm(viewBoxHeight / 1000); + const svg = new SvgNode([path], { + "width": width, + "height": height, + "viewBox": "0 0 " + viewBoxWidth + " " + viewBoxHeight + }); + const wrapper = makeSvgSpan([], [svg], options); + wrapper.height = viewBoxHeight / 1000; + wrapper.style.width = width; + wrapper.style.height = height; + stack.push({ + type: "elem", + elem: wrapper + }); + } else { + // Stack glyphs + // Start by adding the bottom symbol + stack.push(makeGlyphSpan(bottom, font, mode, options)); + stack.push(lap); // overlap + + if (middle === null) { + // The middle section will be an SVG. Make it an extra 0.016em tall. + // We'll overlap by 0.008em at top and bottom. + const innerHeight = realHeightTotal - topHeightTotal - bottomHeightTotal + 2 * lapInEms; + stack.push(makeInner(repeat, innerHeight, options)); + } else { + // When there is a middle bit, we need the middle part and two repeated + // sections + const innerHeight = (realHeightTotal - topHeightTotal - bottomHeightTotal - middleHeightTotal) / 2 + 2 * lapInEms; + stack.push(makeInner(repeat, innerHeight, options)); + // Now insert the middle of the brace. + stack.push(lap); + stack.push(makeGlyphSpan(middle, font, mode, options)); + stack.push(lap); + stack.push(makeInner(repeat, innerHeight, options)); + } + + // Add the top symbol + stack.push(lap); + stack.push(makeGlyphSpan(top, font, mode, options)); + } + + // Finally, build the vlist + const newOptions = options.havingBaseStyle(src_Style.TEXT); + const inner = makeVList({ + positionType: "bottom", + positionData: depth, + children: stack + }, newOptions); + return styleWrap(makeSpan(["delimsizing", "mult"], [inner], newOptions), src_Style.TEXT, options, classes); +}; + +// All surds have 0.08em padding above the vinculum inside the SVG. +// That keeps browser span height rounding error from pinching the line. +const vbPad = 80; // padding above the surd, measured inside the viewBox. +const emPad = 0.08; // padding, in ems, measured in the document. + +const sqrtSvg = function (sqrtName, height, viewBoxHeight, extraVinculum, options) { + const path = sqrtPath(sqrtName, extraVinculum, viewBoxHeight); + const pathNode = new PathNode(sqrtName, path); + const svg = new SvgNode([pathNode], { + // Note: 1000:1 ratio of viewBox to document em width. + "width": "400em", + "height": makeEm(height), + "viewBox": "0 0 400000 " + viewBoxHeight, + "preserveAspectRatio": "xMinYMin slice" + }); + return makeSvgSpan(["hide-tail"], [svg], options); +}; + +/** + * Make a sqrt image of the given height, + */ +const makeSqrtImage = function (height, options) { + // Define a newOptions that removes the effect of size changes such as \Huge. + // We don't pick different a height surd for \Huge. For it, we scale up. + const newOptions = options.havingBaseSizing(); + + // Pick the desired surd glyph from a sequence of surds. + const delim = traverseSequence("\\surd", height * newOptions.sizeMultiplier, stackLargeDelimiterSequence, newOptions); + let sizeMultiplier = newOptions.sizeMultiplier; // default + + // The standard sqrt SVGs each have a 0.04em thick vinculum. + // If Settings.minRuleThickness is larger than that, we add extraVinculum. + const extraVinculum = Math.max(0, options.minRuleThickness - options.fontMetrics().sqrtRuleThickness); + + // Create a span containing an SVG image of a sqrt symbol. + let span; + let spanHeight; + let texHeight; + let viewBoxHeight; + let advanceWidth; + + // We create viewBoxes with 80 units of "padding" above each surd. + // Then browser rounding error on the parent span height will not + // encroach on the ink of the vinculum. But that padding is not + // included in the TeX-like `height` used for calculation of + // vertical alignment. So texHeight = span.height < span.style.height. + + if (delim.type === "small") { + // Get an SVG that is derived from glyph U+221A in font KaTeX-Main. + // 1000 unit normal glyph height. + viewBoxHeight = 1000 + 1000 * extraVinculum + vbPad; + if (height < 1.0) { + sizeMultiplier = 1.0; // mimic a \textfont radical + } else if (height < 1.4) { + sizeMultiplier = 0.7; // mimic a \scriptfont radical + } + spanHeight = (1.0 + extraVinculum + emPad) / sizeMultiplier; + texHeight = (1.00 + extraVinculum) / sizeMultiplier; + span = sqrtSvg("sqrtMain", spanHeight, viewBoxHeight, extraVinculum, options); + span.style.minWidth = "0.853em"; + advanceWidth = 0.833 / sizeMultiplier; // from the font. + } else if (delim.type === "large") { + // These SVGs come from fonts: KaTeX_Size1, _Size2, etc. + viewBoxHeight = (1000 + vbPad) * sizeToMaxHeight[delim.size]; + texHeight = (sizeToMaxHeight[delim.size] + extraVinculum) / sizeMultiplier; + spanHeight = (sizeToMaxHeight[delim.size] + extraVinculum + emPad) / sizeMultiplier; + span = sqrtSvg("sqrtSize" + delim.size, spanHeight, viewBoxHeight, extraVinculum, options); + span.style.minWidth = "1.02em"; + advanceWidth = 1.0 / sizeMultiplier; // 1.0 from the font. + } else { + // Tall sqrt. In TeX, this would be stacked using multiple glyphs. + // We'll use a single SVG to accomplish the same thing. + spanHeight = height + extraVinculum + emPad; + texHeight = height + extraVinculum; + viewBoxHeight = Math.floor(1000 * height + extraVinculum) + vbPad; + span = sqrtSvg("sqrtTall", spanHeight, viewBoxHeight, extraVinculum, options); + span.style.minWidth = "0.742em"; + advanceWidth = 1.056; + } + span.height = texHeight; + span.style.height = makeEm(spanHeight); + return { + span, + advanceWidth, + // Calculate the actual line width. + // This actually should depend on the chosen font -- e.g. \boldmath + // should use the thicker surd symbols from e.g. KaTeX_Main-Bold, and + // have thicker rules. + ruleWidth: (options.fontMetrics().sqrtRuleThickness + extraVinculum) * sizeMultiplier + }; +}; + +// There are three kinds of delimiters, delimiters that stack when they become +// too large +const stackLargeDelimiters = new Set(["(", "\\lparen", ")", "\\rparen", "[", "\\lbrack", "]", "\\rbrack", "\\{", "\\lbrace", "\\}", "\\rbrace", "\\lfloor", "\\rfloor", "\u230a", "\u230b", "\\lceil", "\\rceil", "\u2308", "\u2309", "\\surd"]); + +// delimiters that always stack +const stackAlwaysDelimiters = new Set(["\\uparrow", "\\downarrow", "\\updownarrow", "\\Uparrow", "\\Downarrow", "\\Updownarrow", "|", "\\|", "\\vert", "\\Vert", "\\lvert", "\\rvert", "\\lVert", "\\rVert", "\\lgroup", "\\rgroup", "\u27ee", "\u27ef", "\\lmoustache", "\\rmoustache", "\u23b0", "\u23b1"]); + +// and delimiters that never stack +const stackNeverDelimiters = new Set(["<", ">", "\\langle", "\\rangle", "/", "\\backslash", "\\lt", "\\gt"]); + +// Metrics of the different sizes. Found by looking at TeX's output of +// $\bigl| // \Bigl| \biggl| \Biggl| \showlists$ +// Used to create stacked delimiters of appropriate sizes in makeSizedDelim. +const sizeToMaxHeight = [0, 1.2, 1.8, 2.4, 3.0]; + +/** + * Used to create a delimiter of a specific size, where `size` is 1, 2, 3, or 4. + */ +const makeSizedDelim = function (delim, size, options, mode, classes) { + // < and > turn into \langle and \rangle in delimiters + if (delim === "<" || delim === "\\lt" || delim === "\u27e8") { + delim = "\\langle"; + } else if (delim === ">" || delim === "\\gt" || delim === "\u27e9") { + delim = "\\rangle"; + } + + // Sized delimiters are never centered. + if (stackLargeDelimiters.has(delim) || stackNeverDelimiters.has(delim)) { + return makeLargeDelim(delim, size, false, options, mode, classes); + } else if (stackAlwaysDelimiters.has(delim)) { + return makeStackedDelim(delim, sizeToMaxHeight[size], false, options, mode, classes); + } else { + throw new src_ParseError("Illegal delimiter: '" + delim + "'"); + } +}; + +/** + * There are three different sequences of delimiter sizes that the delimiters + * follow depending on the kind of delimiter. This is used when creating custom + * sized delimiters to decide whether to create a small, large, or stacked + * delimiter. + * + * In real TeX, these sequences aren't explicitly defined, but are instead + * defined inside the font metrics. Since there are only three sequences that + * are possible for the delimiters that TeX defines, it is easier to just encode + * them explicitly here. + */ + +// Delimiters that never stack try small delimiters and large delimiters only +const stackNeverDelimiterSequence = [{ + type: "small", + style: src_Style.SCRIPTSCRIPT +}, { + type: "small", + style: src_Style.SCRIPT +}, { + type: "small", + style: src_Style.TEXT +}, { + type: "large", + size: 1 +}, { + type: "large", + size: 2 +}, { + type: "large", + size: 3 +}, { + type: "large", + size: 4 +}]; + +// Delimiters that always stack try the small delimiters first, then stack +const stackAlwaysDelimiterSequence = [{ + type: "small", + style: src_Style.SCRIPTSCRIPT +}, { + type: "small", + style: src_Style.SCRIPT +}, { + type: "small", + style: src_Style.TEXT +}, { + type: "stack" +}]; + +// Delimiters that stack when large try the small and then large delimiters, and +// stack afterwards +const stackLargeDelimiterSequence = [{ + type: "small", + style: src_Style.SCRIPTSCRIPT +}, { + type: "small", + style: src_Style.SCRIPT +}, { + type: "small", + style: src_Style.TEXT +}, { + type: "large", + size: 1 +}, { + type: "large", + size: 2 +}, { + type: "large", + size: 3 +}, { + type: "large", + size: 4 +}, { + type: "stack" +}]; + +/** + * Get the font used in a delimiter based on what kind of delimiter it is. + * TODO(#963) Use more specific font family return type once that is introduced. + */ +const delimTypeToFont = function (type) { + if (type.type === "small") { + return "Main-Regular"; + } else if (type.type === "large") { + return "Size" + type.size + "-Regular"; + } else if (type.type === "stack") { + return "Size4-Regular"; + } else { + const delimKind = type.type; + throw new Error("Add support for delim type '" + delimKind + "' here."); + } +}; + +/** + * Traverse a sequence of types of delimiters to decide what kind of delimiter + * should be used to create a delimiter of the given height+depth. + */ +const traverseSequence = function (delim, height, sequence, options) { + // Here, we choose the index we should start at in the sequences. In smaller + // sizes (which correspond to larger numbers in style.size) we start earlier + // in the sequence. Thus, scriptscript starts at index 3-3=0, script starts + // at index 3-2=1, text starts at 3-1=2, and display starts at min(2,3-0)=2 + const start = Math.min(2, 3 - options.style.size); + for (let i = start; i < sequence.length; i++) { + const delimType = sequence[i]; + if (delimType.type === "stack") { + // This is always the last delimiter, so we just break the loop now. + break; + } + const metrics = getMetrics(delim, delimTypeToFont(delimType), "math"); + let heightDepth = metrics.height + metrics.depth; + + // Small delimiters are scaled down versions of the same font, so we + // account for the style change size. + if (delimType.type === "small") { + const newOptions = options.havingBaseStyle(delimType.style); + heightDepth *= newOptions.sizeMultiplier; + } + + // Check if the delimiter at this size works for the given height. + if (heightDepth > height) { + return delimType; + } + } + + // If we reached the end of the sequence, return the last sequence element. + return sequence[sequence.length - 1]; +}; + +/** + * Make a delimiter of a given height+depth, with optional centering. Here, we + * traverse the sequences, and create a delimiter that the sequence tells us to. + */ +const makeCustomSizedDelim = function (delim, height, center, options, mode, classes) { + if (delim === "<" || delim === "\\lt" || delim === "\u27e8") { + delim = "\\langle"; + } else if (delim === ">" || delim === "\\gt" || delim === "\u27e9") { + delim = "\\rangle"; + } + + // Decide what sequence to use + let sequence; + if (stackNeverDelimiters.has(delim)) { + sequence = stackNeverDelimiterSequence; + } else if (stackLargeDelimiters.has(delim)) { + sequence = stackLargeDelimiterSequence; + } else { + sequence = stackAlwaysDelimiterSequence; + } + + // Look through the sequence + const delimType = traverseSequence(delim, height, sequence, options); + + // Get the delimiter from font glyphs. + // Depending on the sequence element we decided on, call the + // appropriate function. + if (delimType.type === "small") { + return makeSmallDelim(delim, delimType.style, center, options, mode, classes); + } else if (delimType.type === "large") { + return makeLargeDelim(delim, delimType.size, center, options, mode, classes); + } else /* if (delimType.type === "stack") */{ + return makeStackedDelim(delim, height, center, options, mode, classes); + } +}; + +/** + * Make a delimiter for use with `\left` and `\right`, given a height and depth + * of an expression that the delimiters surround. + */ +const makeLeftRightDelim = function (delim, height, depth, options, mode, classes) { + // We always center \left/\right delimiters, so the axis is always shifted + const axisHeight = options.fontMetrics().axisHeight * options.sizeMultiplier; + + // Taken from TeX source, tex.web, function make_left_right + const delimiterFactor = 901; + const delimiterExtend = 5.0 / options.fontMetrics().ptPerEm; + const maxDistFromAxis = Math.max(height - axisHeight, depth + axisHeight); + const totalHeight = Math.max( + // In real TeX, calculations are done using integral values which are + // 65536 per pt, or 655360 per em. So, the division here truncates in + // TeX but doesn't here, producing different results. If we wanted to + // exactly match TeX's calculation, we could do + // Math.floor(655360 * maxDistFromAxis / 500) * + // delimiterFactor / 655360 + // (To see the difference, compare + // x^{x^{\left(\rule{0.1em}{0.68em}\right)}} + // in TeX and KaTeX) + maxDistFromAxis / 500 * delimiterFactor, 2 * maxDistFromAxis - delimiterExtend); + + // Finally, we defer to `makeCustomSizedDelim` with our calculated total + // height + return makeCustomSizedDelim(delim, totalHeight, true, options, mode, classes); +}; +;// ./src/functions/delimsizing.ts + + + + + + + + + +// Extra data needed for the delimiter handler down below +const delimiterSizes = { + "\\bigl": { + mclass: "mopen", + size: 1 + }, + "\\Bigl": { + mclass: "mopen", + size: 2 + }, + "\\biggl": { + mclass: "mopen", + size: 3 + }, + "\\Biggl": { + mclass: "mopen", + size: 4 + }, + "\\bigr": { + mclass: "mclose", + size: 1 + }, + "\\Bigr": { + mclass: "mclose", + size: 2 + }, + "\\biggr": { + mclass: "mclose", + size: 3 + }, + "\\Biggr": { + mclass: "mclose", + size: 4 + }, + "\\bigm": { + mclass: "mrel", + size: 1 + }, + "\\Bigm": { + mclass: "mrel", + size: 2 + }, + "\\biggm": { + mclass: "mrel", + size: 3 + }, + "\\Biggm": { + mclass: "mrel", + size: 4 + }, + "\\big": { + mclass: "mord", + size: 1 + }, + "\\Big": { + mclass: "mord", + size: 2 + }, + "\\bigg": { + mclass: "mord", + size: 3 + }, + "\\Bigg": { + mclass: "mord", + size: 4 + } +}; +const delimiters = new Set(["(", "\\lparen", ")", "\\rparen", "[", "\\lbrack", "]", "\\rbrack", "\\{", "\\lbrace", "\\}", "\\rbrace", "\\lfloor", "\\rfloor", "\u230a", "\u230b", "\\lceil", "\\rceil", "\u2308", "\u2309", "<", ">", "\\langle", "\u27e8", "\\rangle", "\u27e9", "\\lt", "\\gt", "\\lvert", "\\rvert", "\\lVert", "\\rVert", "\\lgroup", "\\rgroup", "\u27ee", "\u27ef", "\\lmoustache", "\\rmoustache", "\u23b0", "\u23b1", "/", "\\backslash", "|", "\\vert", "\\|", "\\Vert", "\\uparrow", "\\Uparrow", "\\downarrow", "\\Downarrow", "\\updownarrow", "\\Updownarrow", "."]); + +/** + * An HtmlDomNode that carries an `isMiddle` property, used by the + * \middle command to communicate delimiter info to the \left/\right builder. + */ + +function isMiddleDelimNode(node) { + return 'isMiddle' in node; +} + +// Delimiter functions +function checkDelimiter(delim, context) { + const symDelim = checkSymbolNodeType(delim); + if (symDelim && delimiters.has(symDelim.text)) { + return symDelim; + } else if (symDelim) { + throw new src_ParseError("Invalid delimiter '" + symDelim.text + "' after '" + context.funcName + "'", delim); + } else { + throw new src_ParseError("Invalid delimiter type '" + delim.type + "'", delim); + } +} +defineFunction({ + type: "delimsizing", + names: ["\\bigl", "\\Bigl", "\\biggl", "\\Biggl", "\\bigr", "\\Bigr", "\\biggr", "\\Biggr", "\\bigm", "\\Bigm", "\\biggm", "\\Biggm", "\\big", "\\Big", "\\bigg", "\\Bigg"], + numArgs: 1, + argTypes: ["primitive"], + handler: (context, args) => { + const delim = checkDelimiter(normalizeArgument(args[0]), context); + return { + type: "delimsizing", + mode: context.parser.mode, + size: delimiterSizes[context.funcName].size, + mclass: delimiterSizes[context.funcName].mclass, + delim: delim.text + }; + }, + htmlBuilder: (group, options) => { + if (group.delim === ".") { + // Empty delimiters still count as elements, even though they don't + // show anything. + return makeSpan([group.mclass]); + } + return makeSizedDelim(group.delim, group.size, options, group.mode, [group.mclass]); + }, + mathmlBuilder: group => { + const children = []; + if (group.delim !== ".") { + children.push(makeText(group.delim, group.mode)); + } + const node = new MathNode("mo", children); + if (group.mclass === "mopen" || group.mclass === "mclose") { + // Only some of the delimsizing functions act as fences, and they + // return "mopen" or "mclose" mclass. + node.setAttribute("fence", "true"); + } else { + // Explicitly disable fencing if it's not a fence, to override the + // defaults. + node.setAttribute("fence", "false"); + } + node.setAttribute("stretchy", "true"); + const size = makeEm(sizeToMaxHeight[group.size]); + node.setAttribute("minsize", size); + node.setAttribute("maxsize", size); + return node; + } +}); +function assertParsed(group) { + if (!group.body) { + throw new Error("Bug: The leftright ParseNode wasn't fully parsed."); + } +} +defineFunction({ + type: "leftright-right", + names: ["\\right"], + numArgs: 1, + primitive: true, + handler: (context, args) => { + // \left case below triggers parsing of \right in + // `const right = parser.parseFunction();` + // uses this return value. + const color = context.parser.gullet.macros.get("\\current@color"); + if (color && typeof color !== "string") { + throw new src_ParseError("\\current@color set to non-string in \\right"); + } + return { + type: "leftright-right", + mode: context.parser.mode, + delim: checkDelimiter(args[0], context).text, + color // undefined if not set via \color + }; + } +}); +defineFunction({ + type: "leftright", + names: ["\\left"], + numArgs: 1, + primitive: true, + handler: (context, args) => { + const delim = checkDelimiter(args[0], context); + const parser = context.parser; + // Parse out the implicit body + ++parser.leftrightDepth; + // parseExpression stops before '\\right' + const body = parser.parseExpression(false); + --parser.leftrightDepth; + // Check the next token + parser.expect("\\right", false); + const right = assertNodeType(parser.parseFunction(), "leftright-right"); + return { + type: "leftright", + mode: parser.mode, + body, + left: delim.text, + right: right.delim, + rightColor: right.color + }; + }, + htmlBuilder: (group, options) => { + assertParsed(group); + // Build the inner expression + const inner = buildExpression(group.body, options, true, ["mopen", "mclose"]); + let innerHeight = 0; + let innerDepth = 0; + let hadMiddle = false; + + // Calculate its height and depth + for (let i = 0; i < inner.length; i++) { + const node = inner[i]; + if (isMiddleDelimNode(node)) { + hadMiddle = true; + } else { + innerHeight = Math.max(inner[i].height, innerHeight); + innerDepth = Math.max(inner[i].depth, innerDepth); + } + } + + // The size of delimiters is the same, regardless of what style we are + // in. Thus, to correctly calculate the size of delimiter we need around + // a group, we scale down the inner size based on the size. + innerHeight *= options.sizeMultiplier; + innerDepth *= options.sizeMultiplier; + let leftDelim; + if (group.left === ".") { + // Empty delimiters in \left and \right make null delimiter spaces. + leftDelim = makeNullDelimiter(options, ["mopen"]); + } else { + // Otherwise, use leftRightDelim to generate the correct sized + // delimiter. + leftDelim = makeLeftRightDelim(group.left, innerHeight, innerDepth, options, group.mode, ["mopen"]); + } + // Add it to the beginning of the expression + inner.unshift(leftDelim); + + // Handle middle delimiters + if (hadMiddle) { + for (let i = 1; i < inner.length; i++) { + const middleDelim = inner[i]; + if (isMiddleDelimNode(middleDelim)) { + const isMiddle = middleDelim.isMiddle; + // Apply the options that were active when \middle was called + inner[i] = makeLeftRightDelim(isMiddle.delim, innerHeight, innerDepth, isMiddle.options, group.mode, []); + } + } + } + let rightDelim; + // Same for the right delimiter, but using color specified by \color + if (group.right === ".") { + rightDelim = makeNullDelimiter(options, ["mclose"]); + } else { + const colorOptions = group.rightColor ? options.withColor(group.rightColor) : options; + rightDelim = makeLeftRightDelim(group.right, innerHeight, innerDepth, colorOptions, group.mode, ["mclose"]); + } + // Add it to the end of the expression. + inner.push(rightDelim); + return makeSpan(["minner"], inner, options); + }, + mathmlBuilder: (group, options) => { + assertParsed(group); + const inner = buildMathML_buildExpression(group.body, options); + if (group.left !== ".") { + const leftNode = new MathNode("mo", [makeText(group.left, group.mode)]); + leftNode.setAttribute("fence", "true"); + inner.unshift(leftNode); + } + if (group.right !== ".") { + const rightNode = new MathNode("mo", [makeText(group.right, group.mode)]); + rightNode.setAttribute("fence", "true"); + if (group.rightColor) { + rightNode.setAttribute("mathcolor", group.rightColor); + } + inner.push(rightNode); + } + return makeRow(inner); + } +}); +defineFunction({ + type: "middle", + names: ["\\middle"], + numArgs: 1, + primitive: true, + handler: (context, args) => { + const delim = checkDelimiter(args[0], context); + if (!context.parser.leftrightDepth) { + throw new src_ParseError("\\middle without preceding \\left", delim); + } + return { + type: "middle", + mode: context.parser.mode, + delim: delim.text + }; + }, + htmlBuilder: (group, options) => { + let middleDelim; + if (group.delim === ".") { + middleDelim = makeNullDelimiter(options, []); + } else { + middleDelim = makeSizedDelim(group.delim, 1, options, group.mode, []); + + // Patch an ad-hoc property onto the node so the \left/\right + // builder can reconstruct appropriately sized middle delimiters. + // isMiddle is not part of HtmlDomNode; the read side uses + // isMiddleDelimNode() to check before accessing. + middleDelim.isMiddle = { + delim: group.delim, + options + }; + } + return middleDelim; + }, + mathmlBuilder: (group, options) => { + // A Firefox \middle will stretch a character vertically only if it + // is in the fence part of the operator dictionary at: + // https://www.w3.org/TR/MathML3/appendixc.html. + // So we need to avoid U+2223 and use plain "|" instead. + const textNode = group.delim === "\\vert" || group.delim === "|" ? makeText("|", "text") : makeText(group.delim, group.mode); + const middleNode = new MathNode("mo", [textNode]); + middleNode.setAttribute("fence", "true"); + // MathML gives 5/18em spacing to each element. + // \middle should get delimiter spacing instead. + middleNode.setAttribute("lspace", "0.05em"); + middleNode.setAttribute("rspace", "0.05em"); + return middleNode; + } +}); +;// ./src/functions/enclose.ts + + + + + + + + + + + + +const enclose_htmlBuilder = (group, options) => { + // \cancel, \bcancel, \xcancel, \sout, \fbox, \colorbox, \fcolorbox, \phase + // Some groups can return document fragments. Handle those by wrapping + // them in a span. + const inner = wrapFragment(buildGroup(group.body, options), options); + const label = group.label.slice(1); + let scale = options.sizeMultiplier; + let img; + let imgShift; + + // In the LaTeX cancel package, line geometry is slightly different + // depending on whether the subject is wider than it is tall, or vice versa. + // We don't know the width of a group, so as a proxy, we test if + // the subject is a single character. This captures most of the + // subjects that should get the "tall" treatment. + const isSingleChar = isCharacterBox(group.body); + if (label === "sout") { + img = makeSpan(["katex-stretchy", "katex-sout"]); + img.height = options.fontMetrics().defaultRuleThickness / scale; + imgShift = -0.5 * options.fontMetrics().xHeight; + } else if (label === "phase") { + // Set a couple of dimensions from the steinmetz package. + const lineWeight = calculateSize({ + number: 0.6, + unit: "pt" + }, options); + const clearance = calculateSize({ + number: 0.35, + unit: "ex" + }, options); + + // Prevent size changes like \Huge from affecting line thickness + const newOptions = options.havingBaseSizing(); + scale = scale / newOptions.sizeMultiplier; + const angleHeight = inner.height + inner.depth + lineWeight + clearance; + // Reserve a left pad for the angle. + inner.style.paddingLeft = makeEm(angleHeight / 2 + lineWeight); + + // Create an SVG + const viewBoxHeight = Math.floor(1000 * angleHeight * scale); + const path = phasePath(viewBoxHeight); + const svgNode = new SvgNode([new PathNode("phase", path)], { + "width": "400em", + "height": makeEm(viewBoxHeight / 1000), + "viewBox": "0 0 400000 " + viewBoxHeight, + "preserveAspectRatio": "xMinYMin slice" + }); + // Wrap it in a span with overflow: hidden. + img = makeSvgSpan(["hide-tail"], [svgNode], options); + img.style.height = makeEm(angleHeight); + imgShift = inner.depth + lineWeight + clearance; + } else { + // Add horizontal padding + if (/cancel/.test(label)) { + if (!isSingleChar) { + inner.classes.push("cancel-pad"); + } + } else if (label === "angl") { + inner.classes.push("anglpad"); + } else { + inner.classes.push("boxpad"); + } + + // Add vertical padding + let topPad; + let bottomPad; + let ruleThickness = 0; + // ref: cancel package: \advance\totalheight2\p@ % "+2" + if (/box/.test(label)) { + ruleThickness = Math.max(options.fontMetrics().fboxrule, + // default + options.minRuleThickness // User override. + ); + topPad = options.fontMetrics().fboxsep + (label === "colorbox" ? 0 : ruleThickness); + bottomPad = topPad; + } else if (label === "angl") { + ruleThickness = Math.max(options.fontMetrics().defaultRuleThickness, options.minRuleThickness); + topPad = 4 * ruleThickness; // gap = 3 × line, plus the line itself. + bottomPad = Math.max(0, 0.25 - inner.depth); + } else { + topPad = isSingleChar ? 0.2 : 0; + bottomPad = topPad; + } + img = stretchyEnclose(inner, label, topPad, bottomPad, options); + if (/fbox|boxed|fcolorbox/.test(label)) { + img.style.borderStyle = "solid"; + img.style.borderWidth = makeEm(ruleThickness); + } else if (label === "angl" && ruleThickness !== 0.049) { + img.style.borderTopWidth = makeEm(ruleThickness); + img.style.borderRightWidth = makeEm(ruleThickness); + } + imgShift = inner.depth + bottomPad; + if (group.backgroundColor) { + img.style.backgroundColor = group.backgroundColor; + if (group.borderColor) { + img.style.borderColor = group.borderColor; + } + } + } + let vlist; + if (group.backgroundColor) { + vlist = makeVList({ + positionType: "individualShift", + children: [ + // Put the color background behind inner; + { + type: "elem", + elem: img, + shift: imgShift + }, { + type: "elem", + elem: inner, + shift: 0 + }] + }, options); + } else { + const classes = /cancel|phase/.test(label) ? ["svg-align"] : []; + vlist = makeVList({ + positionType: "individualShift", + children: [ + // Write the \cancel stroke on top of inner. + { + type: "elem", + elem: inner, + shift: 0 + }, { + type: "elem", + elem: img, + shift: imgShift, + wrapperClasses: classes + }] + }, options); + } + if (/cancel/.test(label)) { + // The cancel package documentation says that cancel lines add their height + // to the expression, but tests show that isn't how it actually works. + vlist.height = inner.height; + vlist.depth = inner.depth; + } + if (/cancel/.test(label) && !isSingleChar) { + // cancel does not create horiz space for its line extension. + return makeSpan(["mord", "cancel-lap"], [vlist], options); + } else { + return makeSpan(["mord"], [vlist], options); + } +}; +const enclose_mathmlBuilder = (group, options) => { + let fboxsep; + const node = new MathNode(group.label.includes("colorbox") ? "mpadded" : "menclose", [buildMathML_buildGroup(group.body, options)]); + switch (group.label) { + case "\\cancel": + node.setAttribute("notation", "updiagonalstrike"); + break; + case "\\bcancel": + node.setAttribute("notation", "downdiagonalstrike"); + break; + case "\\phase": + node.setAttribute("notation", "phasorangle"); + break; + case "\\sout": + node.setAttribute("notation", "horizontalstrike"); + break; + case "\\fbox": + node.setAttribute("notation", "box"); + break; + case "\\angl": + node.setAttribute("notation", "actuarial"); + break; + case "\\fcolorbox": + case "\\colorbox": + // doesn't have a good notation option. So use + // instead. Set some attributes that come included with . + fboxsep = options.fontMetrics().fboxsep * options.fontMetrics().ptPerEm; + node.setAttribute("width", "+" + 2 * fboxsep + "pt"); + node.setAttribute("height", "+" + 2 * fboxsep + "pt"); + node.setAttribute("lspace", fboxsep + "pt"); // + node.setAttribute("voffset", fboxsep + "pt"); + if (group.label === "\\fcolorbox") { + const thk = Math.max(options.fontMetrics().fboxrule, + // default + options.minRuleThickness // user override + ); + node.setAttribute("style", "border: " + makeEm(thk) + " solid " + group.borderColor); + } + break; + case "\\xcancel": + node.setAttribute("notation", "updiagonalstrike downdiagonalstrike"); + break; + } + if (group.backgroundColor) { + node.setAttribute("mathbackground", group.backgroundColor); + } + return node; +}; +defineFunction({ + type: "enclose", + names: ["\\colorbox"], + numArgs: 2, + allowedInText: true, + argTypes: ["color", "hbox"], + handler(_ref, args, optArgs) { + let parser = _ref.parser, + funcName = _ref.funcName; + const color = assertNodeType(args[0], "color-token").color; + const body = args[1]; + return { + type: "enclose", + mode: parser.mode, + label: funcName, + backgroundColor: color, + body + }; + }, + htmlBuilder: enclose_htmlBuilder, + mathmlBuilder: enclose_mathmlBuilder +}); +defineFunction({ + type: "enclose", + names: ["\\fcolorbox"], + numArgs: 3, + allowedInText: true, + argTypes: ["color", "color", "hbox"], + handler(_ref2, args, optArgs) { + let parser = _ref2.parser, + funcName = _ref2.funcName; + const borderColor = assertNodeType(args[0], "color-token").color; + const backgroundColor = assertNodeType(args[1], "color-token").color; + const body = args[2]; + return { + type: "enclose", + mode: parser.mode, + label: funcName, + backgroundColor, + borderColor, + body + }; + } +}); +defineFunction({ + type: "enclose", + names: ["\\fbox"], + numArgs: 1, + argTypes: ["hbox"], + allowedInText: true, + handler(_ref3, args) { + let parser = _ref3.parser; + return { + type: "enclose", + mode: parser.mode, + label: "\\fbox", + body: args[0] + }; + } +}); +defineFunction({ + type: "enclose", + names: ["\\cancel", "\\bcancel", "\\xcancel", "\\phase"], + numArgs: 1, + handler(_ref4, args) { + let parser = _ref4.parser, + funcName = _ref4.funcName; + const body = args[0]; + return { + type: "enclose", + mode: parser.mode, + label: funcName, + body + }; + } +}); +defineFunction({ + type: "enclose", + names: ["\\sout"], + numArgs: 1, + allowedInText: true, + handler(_ref5, args) { + let parser = _ref5.parser, + funcName = _ref5.funcName; + if (parser.mode === "math") { + handleStrict({ + strict: parser.settings.strict, + errorCode: "mathVsSout", + errorMsg: "LaTeX's \\sout works only in text mode", + report: true + }); + } + const body = args[0]; + return { + type: "enclose", + mode: parser.mode, + label: funcName, + body + }; + } +}); +defineFunction({ + type: "enclose", + names: ["\\angl"], + numArgs: 1, + argTypes: ["hbox"], + allowedInText: false, + handler(_ref6, args) { + let parser = _ref6.parser; + return { + type: "enclose", + mode: parser.mode, + label: "\\angl", + body: args[0] + }; + } +}); +;// ./src/defineEnvironment.ts + + +/** + * The context contains the following properties: + * - mode: current parsing mode. + * - envName: the name of the environment, one of the listed names. + * - parser: the parser object. + */ + +/** + * - context: information and references provided by the parser + * - args: an array of arguments passed to \begin{name} + * - optArgs: an array of optional arguments passed to \begin{name} + */ + +/** + * - numArgs: (default 0) The number of arguments after the \begin{name} function. + * - argTypes: (optional) Just like for a function + * - allowedInText: (default false) Whether or not the environment is allowed + * inside text mode (not enforced yet). + * - numOptionalArgs: (default 0) Just like for a function + */ + +/** + * Final environment spec for use at parse time. + * This is almost identical to `EnvDefSpec`, except it + * 1. includes the function handler + * 2. requires all arguments except argType + * It is generated by `defineEnvironment()` below. + */ + +/** + * All registered environments. + * `environments.js` exports this same dictionary again and makes it public. + * `Parser.js` requires this dictionary via `environments.js`. + */ +const _environments = {}; +function defineEnvironment(_ref) { + let type = _ref.type, + names = _ref.names, + props = _ref.props, + handler = _ref.handler, + htmlBuilder = _ref.htmlBuilder, + mathmlBuilder = _ref.mathmlBuilder; + // Set default values of environments. + const data = { + type, + numArgs: props.numArgs || 0, + allowedInText: false, + numOptionalArgs: 0, + handler + }; + for (let i = 0; i < names.length; ++i) { + // TODO: The value type of _environments should be a type union of all + // possible `EnvSpec<>` possibilities instead of `EnvSpec<*>`, which is + // an existential type. + _environments[names[i]] = data; + } + if (htmlBuilder) { + _htmlGroupBuilders[type] = htmlBuilder; + } + if (mathmlBuilder) { + _mathmlGroupBuilders[type] = mathmlBuilder; + } +} +;// ./src/defineMacro.ts +/** + * Provides context to macros defined by functions. Implemented by + * MacroExpander. + */ + +/** Macro tokens (in reverse order). */ + +/** + * All registered global/built-in macros. + * `macros.js` exports this same dictionary again and makes it public. + * `Parser.js` requires this dictionary via `macros.js`. + */ +const _macros = {}; + +// This function might one day accept an additional argument and do more things. +function defineMacro(name, body) { + _macros[name] = body; +} +;// ./src/SourceLocation.ts +/** + * Lexing or parsing positional information for error reporting. + * This object is immutable. + */ +class SourceLocation { + // End offset, zero-based exclusive. + + constructor(lexer, start, end) { + // The + prefix indicates that these fields aren't writeable + this.lexer = void 0; + // Lexer holding the input string. + this.start = void 0; + // Start offset, zero-based inclusive. + this.end = void 0; + this.lexer = lexer; + this.start = start; + this.end = end; + } + + /** + * Merges two `SourceLocation`s from location providers, given they are + * provided in order of appearance. + * - Returns the first one's location if only the first is provided. + * - Returns a merged range of the first and the last if both are provided + * and their lexers match. + * - Otherwise, returns null. + */ + static range(first, second) { + if (!second) { + return first && first.loc; + } else if (!first || !first.loc || !second.loc || first.loc.lexer !== second.loc.lexer) { + return null; + } else { + return new SourceLocation(first.loc.lexer, first.loc.start, second.loc.end); + } + } +} +;// ./src/Token.ts + + +/** + * Interface required to break circular dependency between Token, Lexer, and + * ParseError. + */ + +/** + * The resulting token returned from `lex`. + * + * It consists of the token text plus some position information. + * The position information is essentially a range in an input string, + * but instead of referencing the bare input string, we refer to the lexer. + * That way it is possible to attach extra metadata to the input string, + * like for example a file name or similar. + * + * The position information is optional, so it is OK to construct synthetic + * tokens if appropriate. Not providing available position information may + * lead to degraded error reporting, though. + */ +class Token { + // used in \noexpand + + constructor(text, + // the text of this token + loc) { + this.text = void 0; + this.loc = void 0; + this.noexpand = void 0; + // don't expand the token + this.treatAsRelax = void 0; + this.text = text; + this.loc = loc; + } + + /** + * Given a pair of tokens (this and endToken), compute a `Token` encompassing + * the whole input range enclosed by these two. + */ + range(endToken, + // last token of the range, inclusive + text // the text of the newly constructed token + ) { + return new Token(text, SourceLocation.range(this, endToken)); + } +} +;// ./src/environments/array.ts + + + + + + + + + + + + + + + +// Data stored in the ParseNode associated with the environment. + +// Type to indicate column separation in MathML + +// Helper functions +function getHLines(parser) { + // Return an array. The array length = number of hlines. + // Each element in the array tells if the line is dashed. + const hlineInfo = []; + parser.consumeSpaces(); + let nxt = parser.fetch().text; + if (nxt === "\\relax") { + // \relax is an artifact of the \cr macro below + parser.consume(); + parser.consumeSpaces(); + nxt = parser.fetch().text; + } + while (nxt === "\\hline" || nxt === "\\hdashline") { + parser.consume(); + hlineInfo.push(nxt === "\\hdashline"); + parser.consumeSpaces(); + nxt = parser.fetch().text; + } + return hlineInfo; +} +const validateAmsEnvironmentContext = context => { + const settings = context.parser.settings; + if (!settings.displayMode) { + throw new src_ParseError("{" + context.envName + "} can be used only in" + " display mode."); + } +}; +const gatherEnvironments = new Set(["gather", "gather*"]); + +// autoTag (an argument to parseArray) can be one of three values: +// * undefined: Regular (not-top-level) array; no tags on each row +// * true: Automatic equation numbering, overridable by \tag +// * false: Tags allowed on each row, but no automatic numbering +// This function *doesn't* work with the "split" environment name. +function getAutoTag(name) { + if (!name.includes("ed")) { + return !name.includes("*"); + } + // return undefined; +} + +/** + * Parse the body of the environment, with rows delimited by \\ and + * columns delimited by &, and create a nested list in row-major order + * with one group per cell. If given an optional argument style + * ("text", "display", etc.), then each cell is cast into that style. + */ +function parseArray(parser, _ref, style) { + let hskipBeforeAndAfter = _ref.hskipBeforeAndAfter, + addJot = _ref.addJot, + cols = _ref.cols, + arraystretch = _ref.arraystretch, + colSeparationType = _ref.colSeparationType, + autoTag = _ref.autoTag, + singleRow = _ref.singleRow, + emptySingleRow = _ref.emptySingleRow, + maxNumCols = _ref.maxNumCols, + leqno = _ref.leqno; + parser.gullet.beginGroup(); + if (!singleRow) { + // \cr is equivalent to \\ without the optional size argument (see below) + // TODO: provide helpful error when \cr is used outside array environment + parser.gullet.macros.set("\\cr", "\\\\\\relax"); + } + + // Get current arraystretch if it's not set by the environment + if (!arraystretch) { + const stretch = parser.gullet.expandMacroAsText("\\arraystretch"); + if (stretch == null) { + // Default \arraystretch from lttab.dtx + arraystretch = 1; + } else { + arraystretch = parseFloat(stretch); + if (!arraystretch || arraystretch < 0) { + throw new src_ParseError("Invalid \\arraystretch: " + stretch); + } + } + } + + // Start group for first cell + parser.gullet.beginGroup(); + let row = []; + const body = [row]; + const rowGaps = []; + const hLinesBeforeRow = []; + const tags = autoTag != null ? [] : undefined; + + // amsmath uses \global\@eqnswtrue and \global\@eqnswfalse to represent + // whether this row should have an equation number. Simulate this with + // a \@eqnsw macro set to 1 or 0. + function beginRow() { + if (autoTag) { + parser.gullet.macros.set("\\@eqnsw", "1", true); + } + } + function endRow() { + if (tags) { + if (parser.gullet.macros.get("\\df@tag")) { + tags.push(parser.subparse([new Token("\\df@tag")])); + parser.gullet.macros.set("\\df@tag", undefined, true); + } else { + tags.push(Boolean(autoTag) && parser.gullet.macros.get("\\@eqnsw") === "1"); + } + } + } + beginRow(); + + // Test for \hline at the top of the array. + hLinesBeforeRow.push(getHLines(parser)); + while (true) { + // Parse each cell in its own group (namespace) + const cellBody = parser.parseExpression(false, singleRow ? "\\end" : "\\\\"); + parser.gullet.endGroup(); + parser.gullet.beginGroup(); + let cell = { + type: "ordgroup", + mode: parser.mode, + body: cellBody + }; + if (style) { + cell = { + type: "styling", + mode: parser.mode, + style, + resetFont: true, + body: [cell] + }; + } + row.push(cell); + const next = parser.fetch().text; + if (next === "&") { + if (maxNumCols && row.length === maxNumCols) { + if (singleRow || colSeparationType) { + // {equation} or {split} + throw new src_ParseError("Too many tab characters: &", parser.nextToken); + } else { + // {array} environment + handleStrict({ + strict: parser.settings.strict, + errorCode: "textEnv", + errorMsg: "Too few columns specified in the {array} column argument.", + report: true + }); + } + } + parser.consume(); + } else if (next === "\\end") { + endRow(); + // Arrays terminate newlines with `\crcr` which consumes a `\cr` if + // the last line is empty. However, AMS environments keep the + // empty row if it's the only one, has a manual tag, or is an + // automatically numbered row explicitly ended with `\\`. + // NOTE: Currently, `cell` is the last item added into `row`. + if (row.length === 1 && cell.type === "styling" && cell.body.length === 1 && cell.body[0].type === "ordgroup" && cell.body[0].body.length === 0 && (body.length > 1 || !emptySingleRow) && !Array.isArray(tags == null ? void 0 : tags[tags.length - 1]) && !(autoTag && (tags == null ? void 0 : tags[tags.length - 1]) === true)) { + body.pop(); + } + if (hLinesBeforeRow.length < body.length + 1) { + hLinesBeforeRow.push([]); + } + break; + } else if (next === "\\\\") { + parser.consume(); + let size; + // \def\Let@{\let\\\math@cr} + // \def\math@cr{...\math@cr@} + // \def\math@cr@{\new@ifnextchar[\math@cr@@{\math@cr@@[\z@]}} + // \def\math@cr@@[#1]{...\math@cr@@@...} + // \def\math@cr@@@{\cr} + if (parser.gullet.future().text !== " ") { + size = parser.parseSizeGroup(true); + } + rowGaps.push(size ? size.value : null); + endRow(); + + // check for \hline(s) following the row separator + hLinesBeforeRow.push(getHLines(parser)); + row = []; + body.push(row); + beginRow(); + } else { + throw new src_ParseError("Expected & or \\\\ or \\cr or \\end", parser.nextToken); + } + } + + // End cell group + parser.gullet.endGroup(); + // End array group defining \cr + parser.gullet.endGroup(); + return { + type: "array", + mode: parser.mode, + addJot, + arraystretch, + body, + cols, + rowGaps, + hskipBeforeAndAfter, + hLinesBeforeRow, + colSeparationType, + tags, + leqno + }; +} + +// Decides on a style for cells in an array according to whether the given +// environment name starts with the letter 'd'. +function dCellStyle(envName) { + if (envName.slice(0, 1) === "d") { + return "display"; + } else { + return "text"; + } +} +const array_htmlBuilder = function (group, options) { + let r; + let c; + const nr = group.body.length; + const hLinesBeforeRow = group.hLinesBeforeRow; + let nc = 0; + const body = new Array(nr); + const hlines = []; + const ruleThickness = Math.max( + // From LaTeX \showthe\arrayrulewidth. Equals 0.04 em. + options.fontMetrics().arrayRuleWidth, options.minRuleThickness // User override. + ); + + // Horizontal spacing + const pt = 1 / options.fontMetrics().ptPerEm; + let arraycolsep = 5 * pt; // default value, i.e. \arraycolsep in article.cls + if (group.colSeparationType && group.colSeparationType === "small") { + // We're in a {smallmatrix}. Default column space is \thickspace, + // i.e. 5/18em = 0.2778em, per amsmath.dtx for {smallmatrix}. + // But that needs adjustment because LaTeX applies \scriptstyle to the + // entire array, including the colspace, but this function applies + // \scriptstyle only inside each element. + const localMultiplier = options.havingStyle(src_Style.SCRIPT).sizeMultiplier; + arraycolsep = 0.2778 * (localMultiplier / options.sizeMultiplier); + } + + // Vertical spacing + const baselineskip = group.colSeparationType === "CD" ? calculateSize({ + number: 3, + unit: "ex" + }, options) : 12 * pt; // see size10.clo + // Default \jot from ltmath.dtx + // TODO(edemaine): allow overriding \jot via \setlength (#687) + const jot = 3 * pt; + const arrayskip = group.arraystretch * baselineskip; + const arstrutHeight = 0.7 * arrayskip; // \strutbox in ltfsstrc.dtx and + const arstrutDepth = 0.3 * arrayskip; // \@arstrutbox in lttab.dtx + + let totalHeight = 0; + + // Set a position for \hline(s) at the top of the array, if any. + function setHLinePos(hlinesInGap) { + for (let i = 0; i < hlinesInGap.length; ++i) { + if (i > 0) { + totalHeight += 0.25; + } + hlines.push({ + pos: totalHeight, + isDashed: hlinesInGap[i] + }); + } + } + setHLinePos(hLinesBeforeRow[0]); + for (r = 0; r < group.body.length; ++r) { + const inrow = group.body[r]; + let height = arstrutHeight; // \@array adds an \@arstrut + let depth = arstrutDepth; // to each tow (via the template) + + if (nc < inrow.length) { + nc = inrow.length; + } + const outrow = { + cells: new Array(inrow.length), + height: 0, + depth: 0, + pos: 0 + }; + for (c = 0; c < inrow.length; ++c) { + const elt = buildGroup(inrow[c], options); + if (depth < elt.depth) { + depth = elt.depth; + } + if (height < elt.height) { + height = elt.height; + } + outrow.cells[c] = elt; + } + const rowGap = group.rowGaps[r]; + let gap = 0; + if (rowGap) { + gap = calculateSize(rowGap, options); + if (gap > 0) { + // \@argarraycr + gap += arstrutDepth; + if (depth < gap) { + depth = gap; // \@xargarraycr + } + gap = 0; + } + } + // In AMS multiline environments such as aligned and gathered, rows + // correspond to lines that have additional \jot added between lines + // via \openup. + // We simulate this by adding \jot depth to each row except the last. + if (group.addJot && r < group.body.length - 1) { + depth += jot; + } + outrow.height = height; + outrow.depth = depth; + totalHeight += height; + outrow.pos = totalHeight; + totalHeight += depth + gap; // \@yargarraycr + body[r] = outrow; + + // Set a position for \hline(s), if any. + setHLinePos(hLinesBeforeRow[r + 1]); + } + const offset = totalHeight / 2 + options.fontMetrics().axisHeight; + const colDescriptions = group.cols || []; + const cols = []; + let colSep; + let colDescrNum; + const tagSpans = []; + if (group.tags && group.tags.some(tag => tag)) { + // An environment with manual tags and/or automatic equation numbers. + // Create node(s), the latter of which trigger CSS counter increment. + for (r = 0; r < nr; ++r) { + const rw = body[r]; + const shift = rw.pos - offset; + const tag = group.tags[r]; + let tagSpan; + if (tag === true) { + // automatic numbering + tagSpan = makeSpan(["eqn-num"], [], options); + } else if (tag === false) { + // \nonumber/\notag or starred environment + tagSpan = makeSpan([], [], options); + } else { + // manual \tag + tagSpan = makeSpan([], buildExpression(tag, options, true), options); + } + tagSpan.depth = rw.depth; + tagSpan.height = rw.height; + tagSpans.push({ + type: "elem", + elem: tagSpan, + shift + }); + } + } + for (c = 0, colDescrNum = 0; + // Continue while either there are more columns or more column + // descriptions, so trailing separators don't get lost. + c < nc || colDescrNum < colDescriptions.length; ++c, ++colDescrNum) { + var _colDescr3; + let colDescr = colDescriptions[colDescrNum]; + let firstSeparator = true; + while (((_colDescr = colDescr) == null ? void 0 : _colDescr.type) === "separator") { + var _colDescr; + // If there is more than one separator in a row, add a space + // between them. + if (!firstSeparator) { + colSep = makeSpan(["arraycolsep"], []); + colSep.style.width = makeEm(options.fontMetrics().doubleRuleSep); + cols.push(colSep); + } + if (colDescr.separator === "|" || colDescr.separator === ":") { + const lineType = colDescr.separator === "|" ? "solid" : "dashed"; + const separator = makeSpan(["vertical-separator"], [], options); + separator.style.height = makeEm(totalHeight); + separator.style.borderRightWidth = makeEm(ruleThickness); + separator.style.borderRightStyle = lineType; + separator.style.margin = "0 " + makeEm(-ruleThickness / 2); + const shift = totalHeight - offset; + if (shift) { + separator.style.verticalAlign = makeEm(-shift); + } + cols.push(separator); + } else { + throw new src_ParseError("Invalid separator type: " + colDescr.separator); + } + colDescrNum++; + colDescr = colDescriptions[colDescrNum]; + firstSeparator = false; + } + if (c >= nc) { + continue; + } + let sepwidth; + if (c > 0 || group.hskipBeforeAndAfter) { + var _colDescr$pregap, _colDescr2; + sepwidth = (_colDescr$pregap = (_colDescr2 = colDescr) == null ? void 0 : _colDescr2.pregap) != null ? _colDescr$pregap : arraycolsep; + if (sepwidth !== 0) { + colSep = makeSpan(["arraycolsep"], []); + colSep.style.width = makeEm(sepwidth); + cols.push(colSep); + } + } + const colElems = []; + for (r = 0; r < nr; ++r) { + const row = body[r]; + const elem = row.cells[c]; + if (!elem) { + continue; + } + const shift = row.pos - offset; + elem.depth = row.depth; + elem.height = row.height; + colElems.push({ + type: "elem", + elem: elem, + shift: shift + }); + } + const colVList = makeVList({ + positionType: "individualShift", + children: colElems + }, options); + const colSpan = makeSpan(["col-align-" + (((_colDescr3 = colDescr) == null ? void 0 : _colDescr3.align) || "c")], [colVList]); + cols.push(colSpan); + if (c < nc - 1 || group.hskipBeforeAndAfter) { + var _colDescr$postgap, _colDescr4; + sepwidth = (_colDescr$postgap = (_colDescr4 = colDescr) == null ? void 0 : _colDescr4.postgap) != null ? _colDescr$postgap : arraycolsep; + if (sepwidth !== 0) { + colSep = makeSpan(["arraycolsep"], []); + colSep.style.width = makeEm(sepwidth); + cols.push(colSep); + } + } + } + let tableBody = makeSpan(["mtable"], cols); + + // Add \hline(s), if any. + if (hlines.length > 0) { + const line = makeLineSpan("katex-hline", options, ruleThickness); + const dashes = makeLineSpan("katex-hdashline", options, ruleThickness); + const vListElems = [{ + type: "elem", + elem: tableBody, + shift: 0 + }]; + while (hlines.length > 0) { + const hline = hlines.pop(); + const lineShift = hline.pos - offset; + if (hline.isDashed) { + vListElems.push({ + type: "elem", + elem: dashes, + shift: lineShift + }); + } else { + vListElems.push({ + type: "elem", + elem: line, + shift: lineShift + }); + } + } + tableBody = makeVList({ + positionType: "individualShift", + children: vListElems + }, options); + } + if (tagSpans.length === 0) { + return makeSpan(["mord"], [tableBody], options); + } else { + const eqnNumCol = makeVList({ + positionType: "individualShift", + children: tagSpans + }, options); + const tagCol = makeSpan(["katex-tag"], [eqnNumCol], options); + return makeFragment([tableBody, tagCol]); + } +}; +const alignMap = { + c: "center ", + l: "left ", + r: "right " +}; +const array_mathmlBuilder = function (group, options) { + const tbl = []; + const glue = new MathNode("mtd", [], ["mtr-glue"]); + const tag = new MathNode("mtd", [], ["mml-eqn-num"]); + for (let i = 0; i < group.body.length; i++) { + const rw = group.body[i]; + const row = []; + for (let j = 0; j < rw.length; j++) { + row.push(new MathNode("mtd", [buildMathML_buildGroup(rw[j], options)])); + } + if (group.tags && group.tags[i]) { + row.unshift(glue); + row.push(glue); + if (group.leqno) { + row.unshift(tag); + } else { + row.push(tag); + } + } + tbl.push(new MathNode("mtr", row)); + } + let table = new MathNode("mtable", tbl); + + // Set column alignment, row spacing, column spacing, and + // array lines by setting attributes on the table element. + + // Set the row spacing. In MathML, we specify a gap distance. + // We do not use rowGap[] because MathML automatically increases + // cell height with the height/depth of the element content. + + // LaTeX \arraystretch multiplies the row baseline-to-baseline distance. + // We simulate this by adding (arraystretch - 1)em to the gap. This + // does a reasonable job of adjusting arrays containing 1 em tall content. + + // The 0.16 and 0.09 values are found empirically. They produce an array + // similar to LaTeX and in which content does not interfere with \hlines. + const gap = group.arraystretch === 0.5 ? 0.1 // {smallmatrix}, {subarray} + : 0.16 + group.arraystretch - 1 + (group.addJot ? 0.09 : 0); + table.setAttribute("rowspacing", makeEm(gap)); + + // MathML table lines go only between cells. + // To place a line on an edge we'll use , if necessary. + let menclose = ""; + let align = ""; + if (group.cols && group.cols.length > 0) { + // Find column alignment, column spacing, and vertical lines. + const cols = group.cols; + let columnLines = ""; + let prevTypeWasAlign = false; + let iStart = 0; + let iEnd = cols.length; + if (cols[0].type === "separator") { + menclose += "top "; + iStart = 1; + } + if (cols[cols.length - 1].type === "separator") { + menclose += "bottom "; + iEnd -= 1; + } + for (let i = iStart; i < iEnd; i++) { + const col = cols[i]; + if (col.type === "align") { + align += alignMap[col.align]; + if (prevTypeWasAlign) { + columnLines += "none "; + } + prevTypeWasAlign = true; + } else if (col.type === "separator") { + // MathML accepts only single lines between cells. + // So we read only the first of consecutive separators. + if (prevTypeWasAlign) { + columnLines += col.separator === "|" ? "solid " : "dashed "; + prevTypeWasAlign = false; + } + } + } + table.setAttribute("columnalign", align.trim()); + if (/[sd]/.test(columnLines)) { + table.setAttribute("columnlines", columnLines.trim()); + } + } + + // Set column spacing. + if (group.colSeparationType === "align") { + const cols = group.cols || []; + let spacing = ""; + for (let i = 1; i < cols.length; i++) { + spacing += i % 2 ? "0em " : "1em "; + } + table.setAttribute("columnspacing", spacing.trim()); + } else if (group.colSeparationType === "alignat" || group.colSeparationType === "gather") { + table.setAttribute("columnspacing", "0em"); + } else if (group.colSeparationType === "small") { + table.setAttribute("columnspacing", "0.2778em"); + } else if (group.colSeparationType === "CD") { + table.setAttribute("columnspacing", "0.5em"); + } else { + table.setAttribute("columnspacing", "1em"); + } + + // Address \hline and \hdashline + let rowLines = ""; + const hlines = group.hLinesBeforeRow; + menclose += hlines[0].length > 0 ? "left " : ""; + menclose += hlines[hlines.length - 1].length > 0 ? "right " : ""; + for (let i = 1; i < hlines.length - 1; i++) { + rowLines += hlines[i].length === 0 ? "none " + // MathML accepts only a single line between rows. Read one element. + : hlines[i][0] ? "dashed " : "solid "; + } + if (/[sd]/.test(rowLines)) { + table.setAttribute("rowlines", rowLines.trim()); + } + if (menclose !== "") { + table = new MathNode("menclose", [table]); + table.setAttribute("notation", menclose.trim()); + } + if (group.arraystretch && group.arraystretch < 1) { + // A small array. Wrap in scriptstyle so row gap is not too large. + table = new MathNode("mstyle", [table]); + table.setAttribute("scriptlevel", "1"); + } + return table; +}; + +// Convenience function for align, align*, aligned, alignat, alignat*, alignedat. +const alignedHandler = function (context, args) { + if (!context.envName.includes("ed")) { + validateAmsEnvironmentContext(context); + } + const cols = []; + const isSplit = context.envName === "split"; + const res = parseArray(context.parser, { + cols, + addJot: true, + autoTag: isSplit ? undefined : getAutoTag(context.envName), + emptySingleRow: true, + colSeparationType: context.envName.includes("at") ? "alignat" : "align", + maxNumCols: isSplit ? 2 : undefined, + leqno: context.parser.settings.leqno + }, "display"); + + // Determining number of columns. + // 1. If the first argument is given, we use it as a number of columns, + // and makes sure that each row doesn't exceed that number. + // 2. Otherwise, just count number of columns = maximum number + // of cells in each row ("aligned" mode -- isAligned will be true). + // + // At the same time, prepend empty group {} at beginning of every second + // cell in each row (starting with second cell) so that operators become + // binary. This behavior is implemented in amsmath's \start@aligned. + let numMaths = 0; + let numCols = 0; + const emptyGroup = { + type: "ordgroup", + mode: context.mode, + body: [] + }; + if (args[0] && args[0].type === "ordgroup") { + const message = "Number of columns should be a positive integer"; + const numColumns = assertCharacterGroup(args[0], message); + if (!/^[0-9]+$/.test(numColumns) || Number(numColumns) < 1) { + throw new src_ParseError(message, args[0]); + } + numMaths = Number(numColumns); + numCols = numMaths * 2; + } + const isAligned = !numCols; + res.body.forEach(function (row) { + for (let i = 1; i < row.length; i += 2) { + // Modify ordgroup node within styling node + const styling = assertNodeType(row[i], "styling"); + const ordgroup = assertNodeType(styling.body[0], "ordgroup"); + ordgroup.body.unshift(emptyGroup); + } + if (!isAligned) { + // Case 1 + const curMaths = row.length / 2; + if (numMaths < curMaths) { + throw new src_ParseError("Too many math in a row: " + ("expected " + numMaths + ", but got " + curMaths), row[0]); + } + } else if (numCols < row.length) { + // Case 2 + numCols = row.length; + } + }); + + // Adjusting alignment. + // In aligned mode, we add one \qquad between columns; + // otherwise we add nothing. + for (let i = 0; i < numCols; ++i) { + let align = "r"; + let pregap = 0; + if (i % 2 === 1) { + align = "l"; + } else if (i > 0 && isAligned) { + // "aligned" mode. + pregap = 1; // add one \quad + } + cols[i] = { + type: "align", + align: align, + pregap: pregap, + postgap: 0 + }; + } + res.colSeparationType = isAligned ? "align" : "alignat"; + return res; +}; + +// Arrays are part of LaTeX, defined in lttab.dtx so its documentation +// is part of the source2e.pdf file of LaTeX2e source documentation. +// {darray} is an {array} environment where cells are set in \displaystyle, +// as defined in nccmath.sty. +defineEnvironment({ + type: "array", + names: ["array", "darray"], + props: { + numArgs: 1 + }, + handler(context, args) { + // Since no types are specified above, the two possibilities are + // - The argument is wrapped in {} or [], in which case Parser's + // parseGroup() returns an "ordgroup" wrapping some symbol node. + // - The argument is a bare symbol node. + const symNode = checkSymbolNodeType(args[0]); + const colalign = symNode ? [args[0]] : assertNodeType(args[0], "ordgroup").body; + const cols = colalign.map(function (nde) { + const node = assertSymbolNodeType(nde); + const ca = node.text; + if ("lcr".includes(ca)) { + return { + type: "align", + align: ca + }; + } else if (ca === "|") { + return { + type: "separator", + separator: "|" + }; + } else if (ca === ":") { + return { + type: "separator", + separator: ":" + }; + } + throw new src_ParseError("Unknown column alignment: " + ca, nde); + }); + const res = { + cols, + hskipBeforeAndAfter: true, + // \@preamble in lttab.dtx + maxNumCols: cols.length + }; + return parseArray(context.parser, res, dCellStyle(context.envName)); + }, + htmlBuilder: array_htmlBuilder, + mathmlBuilder: array_mathmlBuilder +}); + +// The matrix environments of amsmath builds on the array environment +// of LaTeX, which is discussed above. +// The mathtools package adds starred versions of the same environments. +// These have an optional argument to choose left|center|right justification. +defineEnvironment({ + type: "array", + names: ["matrix", "pmatrix", "bmatrix", "Bmatrix", "vmatrix", "Vmatrix", "matrix*", "pmatrix*", "bmatrix*", "Bmatrix*", "vmatrix*", "Vmatrix*"], + props: { + numArgs: 0 + }, + handler(context) { + const delimiters = { + "matrix": null, + "pmatrix": ["(", ")"], + "bmatrix": ["[", "]"], + "Bmatrix": ["\\{", "\\}"], + "vmatrix": ["|", "|"], + "Vmatrix": ["\\Vert", "\\Vert"] + }[context.envName.replace("*", "")]; + // \hskip -\arraycolsep in amsmath + let colAlign = "c"; + const payload = { + hskipBeforeAndAfter: false, + cols: [{ + type: "align", + align: colAlign + }] + }; + if (context.envName.charAt(context.envName.length - 1) === "*") { + // It's one of the mathtools starred functions. + // Parse the optional alignment argument. + const parser = context.parser; + parser.consumeSpaces(); + if (parser.fetch().text === "[") { + parser.consume(); + parser.consumeSpaces(); + colAlign = parser.fetch().text; + if (!"lcr".includes(colAlign)) { + throw new src_ParseError("Expected l or c or r", parser.nextToken); + } + parser.consume(); + parser.consumeSpaces(); + parser.expect("]"); + parser.consume(); + payload.cols = [{ + type: "align", + align: colAlign + }]; + } + } + const res = parseArray(context.parser, payload, dCellStyle(context.envName)); + // Populate cols with the correct number of column alignment specs. + const numCols = Math.max(0, ...res.body.map(row => row.length)); + res.cols = new Array(numCols).fill({ + type: "align", + align: colAlign + }); + return delimiters ? { + type: "leftright", + mode: context.mode, + body: [res], + left: delimiters[0], + right: delimiters[1], + rightColor: undefined // \right uninfluenced by \color in array + } : res; + }, + htmlBuilder: array_htmlBuilder, + mathmlBuilder: array_mathmlBuilder +}); +defineEnvironment({ + type: "array", + names: ["smallmatrix"], + props: { + numArgs: 0 + }, + handler(context) { + const payload = { + arraystretch: 0.5 + }; + const res = parseArray(context.parser, payload, "script"); + res.colSeparationType = "small"; + return res; + }, + htmlBuilder: array_htmlBuilder, + mathmlBuilder: array_mathmlBuilder +}); +defineEnvironment({ + type: "array", + names: ["subarray"], + props: { + numArgs: 1 + }, + handler(context, args) { + // Parsing of {subarray} is similar to {array} + const symNode = checkSymbolNodeType(args[0]); + const colalign = symNode ? [args[0]] : assertNodeType(args[0], "ordgroup").body; + const cols = colalign.map(function (nde) { + const node = assertSymbolNodeType(nde); + const ca = node.text; + // {subarray} only recognizes "l" & "c" + if ("lc".includes(ca)) { + return { + type: "align", + align: ca + }; + } + throw new src_ParseError("Unknown column alignment: " + ca, nde); + }); + if (cols.length > 1) { + throw new src_ParseError("{subarray} can contain only one column"); + } + const payload = { + cols, + hskipBeforeAndAfter: false, + arraystretch: 0.5 + }; + const res = parseArray(context.parser, payload, "script"); + if (res.body.length > 0 && res.body[0].length > 1) { + throw new src_ParseError("{subarray} can contain only one column"); + } + return res; + }, + htmlBuilder: array_htmlBuilder, + mathmlBuilder: array_mathmlBuilder +}); + +// A cases environment (in amsmath.sty) is almost equivalent to +// \def\arraystretch{1.2}% +// \left\{\begin{array}{@{}l@{\quad}l@{}} … \end{array}\right. +// {dcases} is a {cases} environment where cells are set in \displaystyle, +// as defined in mathtools.sty. +// {rcases} is another mathtools environment. It's brace is on the right side. +defineEnvironment({ + type: "array", + names: ["cases", "dcases", "rcases", "drcases"], + props: { + numArgs: 0 + }, + handler(context) { + const payload = { + arraystretch: 1.2, + cols: [{ + type: "align", + align: "l", + pregap: 0, + // TODO(kevinb) get the current style. + // For now we use the metrics for TEXT style which is what we were + // doing before. Before attempting to get the current style we + // should look at TeX's behavior especially for \over and matrices. + postgap: 1.0 /* 1em quad */ + }, { + type: "align", + align: "l", + pregap: 0, + postgap: 0 + }] + }; + const res = parseArray(context.parser, payload, dCellStyle(context.envName)); + return { + type: "leftright", + mode: context.mode, + body: [res], + left: context.envName.includes("r") ? "." : "\\{", + right: context.envName.includes("r") ? "\\}" : ".", + rightColor: undefined + }; + }, + htmlBuilder: array_htmlBuilder, + mathmlBuilder: array_mathmlBuilder +}); + +// In the align environment, one uses ampersands, &, to specify number of +// columns in each row, and to locate spacing between each column. +// align gets automatic numbering. align* and aligned do not. +// The alignedat environment can be used in math mode. +// Note that we assume \nomallineskiplimit to be zero, +// so that \strut@ is the same as \strut. +defineEnvironment({ + type: "array", + names: ["align", "align*", "aligned", "split"], + props: { + numArgs: 0 + }, + handler: alignedHandler, + htmlBuilder: array_htmlBuilder, + mathmlBuilder: array_mathmlBuilder +}); + +// A gathered environment is like an array environment with one centered +// column, but where rows are considered lines so get \jot line spacing +// and contents are set in \displaystyle. +defineEnvironment({ + type: "array", + names: ["gathered", "gather", "gather*"], + props: { + numArgs: 0 + }, + handler(context) { + if (gatherEnvironments.has(context.envName)) { + validateAmsEnvironmentContext(context); + } + const res = { + cols: [{ + type: "align", + align: "c" + }], + addJot: true, + colSeparationType: "gather", + autoTag: getAutoTag(context.envName), + emptySingleRow: true, + leqno: context.parser.settings.leqno + }; + return parseArray(context.parser, res, "display"); + }, + htmlBuilder: array_htmlBuilder, + mathmlBuilder: array_mathmlBuilder +}); + +// alignat environment is like an align environment, but one must explicitly +// specify maximum number of columns in each row, and can adjust spacing between +// each columns. +defineEnvironment({ + type: "array", + names: ["alignat", "alignat*", "alignedat"], + props: { + numArgs: 1 + }, + handler: alignedHandler, + htmlBuilder: array_htmlBuilder, + mathmlBuilder: array_mathmlBuilder +}); +defineEnvironment({ + type: "array", + names: ["equation", "equation*"], + props: { + numArgs: 0 + }, + handler(context) { + validateAmsEnvironmentContext(context); + const res = { + autoTag: getAutoTag(context.envName), + emptySingleRow: true, + singleRow: true, + maxNumCols: 1, + leqno: context.parser.settings.leqno + }; + return parseArray(context.parser, res, "display"); + }, + htmlBuilder: array_htmlBuilder, + mathmlBuilder: array_mathmlBuilder +}); +defineEnvironment({ + type: "array", + names: ["CD"], + props: { + numArgs: 0 + }, + handler(context) { + validateAmsEnvironmentContext(context); + return parseCD(context.parser); + }, + htmlBuilder: array_htmlBuilder, + mathmlBuilder: array_mathmlBuilder +}); +defineMacro("\\nonumber", "\\gdef\\@eqnsw{0}"); +defineMacro("\\notag", "\\nonumber"); + +// Catch \hline outside array environment +defineFunction({ + type: "text", + // Doesn't matter what this is. + names: ["\\hline", "\\hdashline"], + numArgs: 0, + allowedInText: true, + allowedInMath: true, + handler(context, args) { + throw new src_ParseError(context.funcName + " valid only within array environment"); + } +}); +;// ./src/environments.ts + +const environments = _environments; +/* harmony default export */ var src_environments = (environments); + +// All environment definitions should be imported below + +;// ./src/functions/environment.ts + + + + +// Environment delimiters. HTML/MathML rendering is defined in the corresponding +// defineEnvironment definitions. +defineFunction({ + type: "environment", + names: ["\\begin", "\\end"], + numArgs: 1, + argTypes: ["text"], + handler(_ref, args) { + let parser = _ref.parser, + funcName = _ref.funcName; + const nameGroup = args[0]; + if (nameGroup.type !== "ordgroup") { + throw new src_ParseError("Invalid environment name", nameGroup); + } + const envName = assertCharacterGroup(nameGroup, "Environment name should contain only text characters and spaces", true); + if (funcName === "\\begin") { + // begin...end is similar to left...right + if (!Object.prototype.hasOwnProperty.call(src_environments, envName)) { + throw new src_ParseError("No such environment: " + envName, nameGroup); + } + // Build the environment object. Arguments and other information will + // be made available to the begin and end methods using properties. + const env = src_environments[envName]; + const _parser$parseArgument = parser.parseArguments("\\begin{" + envName + "}", env), + args = _parser$parseArgument.args, + optArgs = _parser$parseArgument.optArgs; + const context = { + mode: parser.mode, + envName, + parser + }; + const result = env.handler(context, args, optArgs); + parser.expect("\\end", false); + const endNameToken = parser.nextToken; + const end = assertNodeType(parser.parseFunction(), "environment"); + if (end.name !== envName) { + throw new src_ParseError("Mismatch: \\begin{" + envName + "} matched by \\end{" + end.name + "}", endNameToken); + } + // env.handler returns the specific node type (e.g. "array"), + // not "environment". This cast is unavoidable: defineFunction + // requires the handler to return ParseNode<"environment"> but + // \begin delegates to environment handlers with different types. + return result; + } + return { + type: "environment", + mode: parser.mode, + name: envName, + nameGroup + }; + } +}); +;// ./src/functions/font.ts +// TODO(kevinb): implement \\sl and \\sc + + + + + + +const font_htmlBuilder = (group, options) => { + const font = group.font; + const newOptions = options.withFont(font); + return buildGroup(group.body, newOptions); +}; +const font_mathmlBuilder = (group, options) => { + const font = group.font; + const newOptions = options.withFont(font); + return buildMathML_buildGroup(group.body, newOptions); +}; +const fontAliases = { + "\\Bbb": "\\mathbb", + "\\bold": "\\mathbf", + "\\frak": "\\mathfrak" +}; +defineFunction({ + type: "font", + names: [ + // styles, except \boldsymbol defined below + "\\mathrm", "\\mathit", "\\mathbf", "\\mathnormal", "\\mathsfit", + // families + "\\mathbb", "\\mathcal", "\\mathfrak", "\\mathscr", "\\mathsf", "\\mathtt", + // aliases, except \bm defined below + "\\Bbb", "\\bold", "\\frak"], + numArgs: 1, + allowedInArgument: true, + handler: (_ref, args) => { + let parser = _ref.parser, + funcName = _ref.funcName; + const body = normalizeArgument(args[0]); + const func = funcName in fontAliases ? fontAliases[funcName] : funcName; + return { + type: "font", + mode: parser.mode, + font: func.slice(1), + body + }; + }, + htmlBuilder: font_htmlBuilder, + mathmlBuilder: font_mathmlBuilder +}); +defineFunction({ + type: "mclass", + names: ["\\boldsymbol", "\\bm"], + numArgs: 1, + handler: (_ref2, args) => { + let parser = _ref2.parser; + const body = args[0]; + // amsbsy.sty's \boldsymbol uses \binrel spacing to inherit the + // argument's bin|rel|ord status + return { + type: "mclass", + mode: parser.mode, + mclass: binrelClass(body), + body: [{ + type: "font", + mode: parser.mode, + font: "boldsymbol", + body + }], + isCharacterBox: isCharacterBox(body) + }; + } +}); + +// Old font changing functions +defineFunction({ + type: "font", + names: ["\\rm", "\\sf", "\\tt", "\\bf", "\\it", "\\cal"], + numArgs: 0, + allowedInText: true, + handler: (_ref3, args) => { + let parser = _ref3.parser, + funcName = _ref3.funcName, + breakOnTokenText = _ref3.breakOnTokenText; + const mode = parser.mode; + const body = parser.parseExpression(true, breakOnTokenText); + return { + type: "font", + mode: mode, + font: "math" + funcName.slice(1), + body: { + type: "ordgroup", + mode: parser.mode, + body + } + }; + } +}); +;// ./src/functions/genfrac.ts + + + + + + + + + +const genfrac_htmlBuilder = (group, options) => { + // Fractions are handled in the TeXbook on pages 444-445, rules 15(a-e). + const style = options.style; + const nstyle = style.fracNum(); + const dstyle = style.fracDen(); + let newOptions; + newOptions = options.havingStyle(nstyle); + const numerm = buildGroup(group.numer, newOptions, options); + if (group.continued) { + // \cfrac inserts a \strut into the numerator. + // Get \strut dimensions from TeXbook page 353. + const hStrut = 8.5 / options.fontMetrics().ptPerEm; + const dStrut = 3.5 / options.fontMetrics().ptPerEm; + numerm.height = numerm.height < hStrut ? hStrut : numerm.height; + numerm.depth = numerm.depth < dStrut ? dStrut : numerm.depth; + } + newOptions = options.havingStyle(dstyle); + const denomm = buildGroup(group.denom, newOptions, options); + let rule; + let ruleWidth; + let ruleSpacing; + if (group.hasBarLine) { + if (group.barSize) { + ruleWidth = calculateSize(group.barSize, options); + rule = makeLineSpan("frac-line", options, ruleWidth); + } else { + rule = makeLineSpan("frac-line", options); + } + ruleWidth = rule.height; + ruleSpacing = rule.height; + } else { + rule = null; + ruleWidth = 0; + ruleSpacing = options.fontMetrics().defaultRuleThickness; + } + + // Rule 15b + let numShift; + let clearance; + let denomShift; + if (style.size === src_Style.DISPLAY.size) { + numShift = options.fontMetrics().num1; + if (ruleWidth > 0) { + clearance = 3 * ruleSpacing; + } else { + clearance = 7 * ruleSpacing; + } + denomShift = options.fontMetrics().denom1; + } else { + if (ruleWidth > 0) { + numShift = options.fontMetrics().num2; + clearance = ruleSpacing; + } else { + numShift = options.fontMetrics().num3; + clearance = 3 * ruleSpacing; + } + denomShift = options.fontMetrics().denom2; + } + let frac; + if (!rule) { + // Rule 15c + const candidateClearance = numShift - numerm.depth - (denomm.height - denomShift); + if (candidateClearance < clearance) { + numShift += 0.5 * (clearance - candidateClearance); + denomShift += 0.5 * (clearance - candidateClearance); + } + frac = makeVList({ + positionType: "individualShift", + children: [{ + type: "elem", + elem: denomm, + shift: denomShift + }, { + type: "elem", + elem: numerm, + shift: -numShift + }] + }, options); + } else { + // Rule 15d + const axisHeight = options.fontMetrics().axisHeight; + if (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth) < clearance) { + numShift += clearance - (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth)); + } + if (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift) < clearance) { + denomShift += clearance - (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift)); + } + const midShift = -(axisHeight - 0.5 * ruleWidth); + frac = makeVList({ + positionType: "individualShift", + children: [{ + type: "elem", + elem: denomm, + shift: denomShift + }, { + type: "elem", + elem: rule, + shift: midShift + }, { + type: "elem", + elem: numerm, + shift: -numShift + }] + }, options); + } + + // Since we manually change the style sometimes (with \dfrac or \tfrac), + // account for the possible size change here. + newOptions = options.havingStyle(style); + frac.height *= newOptions.sizeMultiplier / options.sizeMultiplier; + frac.depth *= newOptions.sizeMultiplier / options.sizeMultiplier; + + // Rule 15e + let delimSize; + if (style.size === src_Style.DISPLAY.size) { + delimSize = options.fontMetrics().delim1; + } else if (style.size === src_Style.SCRIPTSCRIPT.size) { + delimSize = options.havingStyle(src_Style.SCRIPT).fontMetrics().delim2; + } else { + delimSize = options.fontMetrics().delim2; + } + let leftDelim; + let rightDelim; + if (group.leftDelim == null) { + leftDelim = makeNullDelimiter(options, ["mopen"]); + } else { + leftDelim = makeCustomSizedDelim(group.leftDelim, delimSize, true, options.havingStyle(style), group.mode, ["mopen"]); + } + if (group.continued) { + rightDelim = makeSpan([]); // zero width for \cfrac + } else if (group.rightDelim == null) { + rightDelim = makeNullDelimiter(options, ["mclose"]); + } else { + rightDelim = makeCustomSizedDelim(group.rightDelim, delimSize, true, options.havingStyle(style), group.mode, ["mclose"]); + } + return makeSpan(["mord"].concat(newOptions.sizingClasses(options)), [leftDelim, makeSpan(["mfrac"], [frac]), rightDelim], options); +}; +const genfrac_mathmlBuilder = (group, options) => { + const node = new MathNode("mfrac", [buildMathML_buildGroup(group.numer, options), buildMathML_buildGroup(group.denom, options)]); + if (!group.hasBarLine) { + node.setAttribute("linethickness", "0px"); + } else if (group.barSize) { + const ruleWidth = calculateSize(group.barSize, options); + node.setAttribute("linethickness", makeEm(ruleWidth)); + } + if (group.leftDelim != null || group.rightDelim != null) { + const withDelims = []; + if (group.leftDelim != null) { + const leftOp = new MathNode("mo", [new TextNode(group.leftDelim.replace("\\", ""))]); + leftOp.setAttribute("fence", "true"); + withDelims.push(leftOp); + } + withDelims.push(node); + if (group.rightDelim != null) { + const rightOp = new MathNode("mo", [new TextNode(group.rightDelim.replace("\\", ""))]); + rightOp.setAttribute("fence", "true"); + withDelims.push(rightOp); + } + return makeRow(withDelims); + } + return node; +}; +const wrapWithStyle = (frac, style) => { + if (!style) { + return frac; + } + const wrapper = { + type: "styling", + mode: frac.mode, + style, + body: [frac] + }; + + // @ts-ignore defineFunction handler needs to return ParseNode<"genfrac"> + return wrapper; +}; +defineFunction({ + type: "genfrac", + names: ["\\cfrac", "\\dfrac", "\\frac", "\\tfrac", "\\dbinom", "\\binom", "\\tbinom", "\\\\atopfrac", + // can’t be entered directly + "\\\\bracefrac", "\\\\brackfrac" // ditto + ], + numArgs: 2, + allowedInArgument: true, + handler: (_ref, args) => { + let parser = _ref.parser, + funcName = _ref.funcName; + const numer = args[0]; + const denom = args[1]; + let hasBarLine; + let leftDelim = null; + let rightDelim = null; + switch (funcName) { + case "\\cfrac": + case "\\dfrac": + case "\\frac": + case "\\tfrac": + hasBarLine = true; + break; + case "\\\\atopfrac": + hasBarLine = false; + break; + case "\\dbinom": + case "\\binom": + case "\\tbinom": + hasBarLine = false; + leftDelim = "("; + rightDelim = ")"; + break; + case "\\\\bracefrac": + hasBarLine = false; + leftDelim = "\\{"; + rightDelim = "\\}"; + break; + case "\\\\brackfrac": + hasBarLine = false; + leftDelim = "["; + rightDelim = "]"; + break; + default: + throw new Error("Unrecognized genfrac command"); + } + const continued = funcName === "\\cfrac"; + let style = null; + if (continued || funcName.startsWith("\\d")) { + style = "display"; + } else if (funcName.startsWith("\\t")) { + style = "text"; + } + return wrapWithStyle({ + type: "genfrac", + mode: parser.mode, + numer, + denom, + continued, + hasBarLine, + leftDelim, + rightDelim, + barSize: null + }, style); + }, + htmlBuilder: genfrac_htmlBuilder, + mathmlBuilder: genfrac_mathmlBuilder +}); + +// Infix generalized fractions -- these are not rendered directly, but replaced +// immediately by one of the variants above. +defineFunction({ + type: "infix", + names: ["\\over", "\\choose", "\\atop", "\\brace", "\\brack"], + numArgs: 0, + infix: true, + handler(_ref2) { + let parser = _ref2.parser, + funcName = _ref2.funcName, + token = _ref2.token; + let replaceWith; + switch (funcName) { + case "\\over": + replaceWith = "\\frac"; + break; + case "\\choose": + replaceWith = "\\binom"; + break; + case "\\atop": + replaceWith = "\\\\atopfrac"; + break; + case "\\brace": + replaceWith = "\\\\bracefrac"; + break; + case "\\brack": + replaceWith = "\\\\brackfrac"; + break; + default: + throw new Error("Unrecognized infix genfrac command"); + } + return { + type: "infix", + mode: parser.mode, + replaceWith, + token + }; + } +}); +const stylArray = ["display", "text", "script", "scriptscript"]; +const delimFromValue = function (delimString) { + let delim = null; + if (delimString.length > 0) { + delim = delimString; + delim = delim === "." ? null : delim; + } + return delim; +}; +defineFunction({ + type: "genfrac", + names: ["\\genfrac"], + numArgs: 6, + allowedInArgument: true, + argTypes: ["math", "math", "size", "text", "math", "math"], + handler(_ref3, args) { + let parser = _ref3.parser; + const numer = args[4]; + const denom = args[5]; + + // Look into the parse nodes to get the desired delimiters. + const leftNode = normalizeArgument(args[0]); + const leftDelim = leftNode.type === "atom" && leftNode.family === "open" ? delimFromValue(leftNode.text) : null; + const rightNode = normalizeArgument(args[1]); + const rightDelim = rightNode.type === "atom" && rightNode.family === "close" ? delimFromValue(rightNode.text) : null; + const barNode = assertNodeType(args[2], "size"); + let hasBarLine; + let barSize = null; + if (barNode.isBlank) { + // \genfrac acts differently than \above. + // \genfrac treats an empty size group as a signal to use a + // standard bar size. \above would see size = 0 and omit the bar. + hasBarLine = true; + } else { + barSize = barNode.value; + hasBarLine = barSize.number > 0; + } + + // Find out if we want displaystyle, textstyle, etc. + let size = null; + let styl = args[3]; + if (styl.type === "ordgroup") { + if (styl.body.length > 0) { + const textOrd = assertNodeType(styl.body[0], "textord"); + size = stylArray[Number(textOrd.text)]; + } + } else { + styl = assertNodeType(styl, "textord"); + size = stylArray[Number(styl.text)]; + } + return wrapWithStyle({ + type: "genfrac", + mode: parser.mode, + numer, + denom, + continued: false, + hasBarLine, + barSize, + leftDelim, + rightDelim + }, size); + } +}); + +// \above is an infix fraction that also defines a fraction bar size. +defineFunction({ + type: "infix", + names: ["\\above"], + numArgs: 1, + argTypes: ["size"], + infix: true, + handler(_ref4, args) { + let parser = _ref4.parser, + funcName = _ref4.funcName, + token = _ref4.token; + return { + type: "infix", + mode: parser.mode, + replaceWith: "\\\\abovefrac", + size: assertNodeType(args[0], "size").value, + token + }; + } +}); +defineFunction({ + type: "genfrac", + names: ["\\\\abovefrac"], + numArgs: 3, + argTypes: ["math", "size", "math"], + handler: (_ref5, args) => { + let parser = _ref5.parser, + funcName = _ref5.funcName; + const numer = args[0]; + const barSize = assertNodeType(args[1], "infix").size; + if (!barSize) { + throw new Error("\\\\abovefrac expected size, but got " + String(barSize)); + } + const denom = args[2]; + const hasBarLine = barSize.number > 0; + return { + type: "genfrac", + mode: parser.mode, + numer, + denom, + continued: false, + hasBarLine, + barSize, + leftDelim: null, + rightDelim: null + }; + } +}); +;// ./src/functions/horizBrace.ts + + + + + + + + +// NOTE: Unlike most `htmlBuilder`s, this one handles not only "horizBrace", but +// also "supsub" since an over/underbrace can affect super/subscripting. +const horizBrace_htmlBuilder = (grp, options) => { + const style = options.style; + + // Pull out the `ParseNode<"horizBrace">` if `grp` is a "supsub" node. + let supSubGroup; + let group; + if (grp.type === "supsub") { + // Ref: LaTeX source2e: }}}}\limits} + // i.e. LaTeX treats the brace similar to an op and passes it + // with \limits, so we need to assign supsub style. + supSubGroup = grp.sup ? buildGroup(grp.sup, options.havingStyle(style.sup()), options) : buildGroup(grp.sub, options.havingStyle(style.sub()), options); + group = assertNodeType(grp.base, "horizBrace"); + } else { + group = assertNodeType(grp, "horizBrace"); + } + + // Build the base group + const body = buildGroup(group.base, options.havingBaseStyle(src_Style.DISPLAY)); + + // Create the stretchy element + const braceBody = stretchySvg(group, options); + + // Generate the vlist, with the appropriate kerns â”�â”�â”�â”�â”�â”�â”�â”�â”�┓ + // This first vlist contains the content and the brace: equation + let vlist; + if (group.isOver) { + vlist = makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: body + }, { + type: "kern", + size: 0.1 + }, { + type: "elem", + elem: braceBody, + wrapperClasses: ["svg-align"] + }] + }, options); + } else { + vlist = makeVList({ + positionType: "bottom", + positionData: body.depth + 0.1 + braceBody.height, + children: [{ + type: "elem", + elem: braceBody, + wrapperClasses: ["svg-align"] + }, { + type: "kern", + size: 0.1 + }, { + type: "elem", + elem: body + }] + }, options); + } + if (supSubGroup) { + // To write the supsub, wrap the first vlist in another vlist: + // They can't all go in the same vlist, because the note might be + // wider than the equation. We want the equation to control the + // brace width. + + // note long note long note + // â”�â”�â”�â”�â”�â”�â”�â”�â”�┓ or â”�â”�â”�â”�┓ not â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�┓ + // equation eqn eqn + + const vSpan = makeSpan(["minner", group.isOver ? "mover" : "munder"], [vlist], options); + if (group.isOver) { + vlist = makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: vSpan + }, { + type: "kern", + size: 0.2 + }, { + type: "elem", + elem: supSubGroup + }] + }, options); + } else { + vlist = makeVList({ + positionType: "bottom", + positionData: vSpan.depth + 0.2 + supSubGroup.height + supSubGroup.depth, + children: [{ + type: "elem", + elem: supSubGroup + }, { + type: "kern", + size: 0.2 + }, { + type: "elem", + elem: vSpan + }] + }, options); + } + } + return makeSpan(["minner", group.isOver ? "mover" : "munder"], [vlist], options); +}; +const horizBrace_mathmlBuilder = (group, options) => { + const accentNode = stretchyMathML(group.label); + return new MathNode(group.isOver ? "mover" : "munder", [buildMathML_buildGroup(group.base, options), accentNode]); +}; + +// Horizontal stretchy braces +defineFunction({ + type: "horizBrace", + names: ["\\overbrace", "\\underbrace", "\\overbracket", "\\underbracket"], + numArgs: 1, + handler(_ref, args) { + let parser = _ref.parser, + funcName = _ref.funcName; + return { + type: "horizBrace", + mode: parser.mode, + label: funcName, + isOver: funcName.includes("\\over"), + base: args[0] + }; + }, + htmlBuilder: horizBrace_htmlBuilder, + mathmlBuilder: horizBrace_mathmlBuilder +}); +;// ./src/functions/href.ts + + + + + + +defineFunction({ + type: "href", + names: ["\\href"], + numArgs: 2, + argTypes: ["url", "original"], + allowedInText: true, + handler: (_ref, args) => { + let parser = _ref.parser; + const body = args[1]; + const href = assertNodeType(args[0], "url").url; + if (!parser.settings.isTrusted({ + command: "\\href", + url: href + })) { + return parser.formatUnsupportedCmd("\\href"); + } + return { + type: "href", + mode: parser.mode, + href, + body: ordargument(body) + }; + }, + htmlBuilder: (group, options) => { + const elements = buildExpression(group.body, options, false); + return makeAnchor(group.href, [], elements, options); + }, + mathmlBuilder: (group, options) => { + let math = buildExpressionRow(group.body, options); + if (!(math instanceof MathNode)) { + math = new MathNode("mrow", [math]); + } + math.setAttribute("href", group.href); + return math; + } +}); +defineFunction({ + type: "href", + names: ["\\url"], + numArgs: 1, + argTypes: ["url"], + allowedInText: true, + handler: (_ref2, args) => { + let parser = _ref2.parser; + const href = assertNodeType(args[0], "url").url; + if (!parser.settings.isTrusted({ + command: "\\url", + url: href + })) { + return parser.formatUnsupportedCmd("\\url"); + } + const chars = []; + for (let i = 0; i < href.length; i++) { + let c = href[i]; + if (c === "~") { + c = "\\textasciitilde"; + } + chars.push({ + type: "textord", + mode: "text", + text: c + }); + } + const body = { + type: "text", + mode: parser.mode, + font: "\\texttt", + body: chars + }; + return { + type: "href", + mode: parser.mode, + href, + body: ordargument(body) + }; + } +}); +;// ./src/functions/hbox.ts + + + + + + +// \hbox is provided for compatibility with LaTeX \vcenter. +// In LaTeX, \vcenter can act only on a box, as in +// \vcenter{\hbox{$\frac{a+b}{\dfrac{c}{d}}$}} +// This function by itself doesn't do anything but prevent a soft line break. + +defineFunction({ + type: "hbox", + names: ["\\hbox"], + numArgs: 1, + argTypes: ["text"], + allowedInText: true, + primitive: true, + handler(_ref, args) { + let parser = _ref.parser; + return { + type: "hbox", + mode: parser.mode, + body: ordargument(args[0]) + }; + }, + htmlBuilder(group, options) { + const elements = buildExpression(group.body, options.withFont(''), false); + return makeFragment(elements); + }, + mathmlBuilder(group, options) { + return new MathNode("mrow", buildMathML_buildExpression(group.body, options.withFont(''))); + } +}); +;// ./src/functions/html.ts + + + + + + + +defineFunction({ + type: "html", + names: ["\\htmlClass", "\\htmlId", "\\htmlStyle", "\\htmlData"], + numArgs: 2, + argTypes: ["raw", "original"], + allowedInText: true, + handler: (_ref, args) => { + let parser = _ref.parser, + funcName = _ref.funcName, + token = _ref.token; + const value = assertNodeType(args[0], "raw").string; + const body = args[1]; + if (parser.settings.strict) { + handleStrict({ + strict: parser.settings.strict, + errorCode: "htmlExtension", + errorMsg: "HTML extension is disabled on strict mode", + report: true + }); + } + let trustContext; + const attributes = {}; + switch (funcName) { + case "\\htmlClass": + attributes.class = value; + trustContext = { + command: "\\htmlClass", + class: value + }; + break; + case "\\htmlId": + attributes.id = value; + trustContext = { + command: "\\htmlId", + id: value + }; + break; + case "\\htmlStyle": + attributes.style = value; + trustContext = { + command: "\\htmlStyle", + style: value + }; + break; + case "\\htmlData": + { + // `{,}` escapes a literal comma. Braces are used rather than a + // backslash because `\,` is a macro (a thin space) that expands + // away before this raw argument is ever read. + const ESCAPED_COMMA = "{,}"; + const data = []; + let current = ""; + for (let i = 0; i < value.length; i++) { + if (value.startsWith(ESCAPED_COMMA, i)) { + current += ","; + i += ESCAPED_COMMA.length - 1; + } else if (value[i] === ",") { + data.push(current); + current = ""; + } else { + current += value[i]; + } + } + data.push(current); + for (let i = 0; i < data.length; i++) { + const item = data[i]; + const firstEquals = item.indexOf("="); + if (firstEquals < 0) { + throw new src_ParseError("\\htmlData key/value '" + item + "'" + " missing equals sign"); + } + const key = item.slice(0, firstEquals); + const value = item.slice(firstEquals + 1); + attributes["data-" + key.trim()] = value; + } + trustContext = { + command: "\\htmlData", + attributes + }; + break; + } + default: + throw new Error("Unrecognized html command"); + } + if (!parser.settings.isTrusted(trustContext)) { + return parser.formatUnsupportedCmd(funcName); + } + return { + type: "html", + mode: parser.mode, + attributes, + body: ordargument(body) + }; + }, + htmlBuilder: (group, options) => { + const elements = buildExpression(group.body, options, false); + const classes = ["enclosing"]; + if (group.attributes.class) { + classes.push(...group.attributes.class.trim().split(/\s+/)); + } + const span = makeSpan(classes, elements, options); + for (const _ref2 of Object.entries(group.attributes)) { + const attr = _ref2[0]; + const value = _ref2[1]; + if (attr !== "class") { + span.setAttribute(attr, value); + } + } + return span; + }, + mathmlBuilder: (group, options) => { + return buildExpressionRow(group.body, options); + } +}); +;// ./src/functions/htmlmathml.ts + + + + +defineFunction({ + type: "htmlmathml", + names: ["\\html@mathml"], + numArgs: 2, + allowedInArgument: true, + allowedInText: true, + handler: (_ref, args) => { + let parser = _ref.parser; + return { + type: "htmlmathml", + mode: parser.mode, + html: ordargument(args[0]), + mathml: ordargument(args[1]) + }; + }, + htmlBuilder: (group, options) => { + const elements = buildExpression(group.html, options, false); + return makeFragment(elements); + }, + mathmlBuilder: (group, options) => { + return buildExpressionRow(group.mathml, options); + } +}); +;// ./src/functions/includegraphics.ts + + + + + + +const sizeData = function (str) { + if (/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(str)) { + // str is a number with no unit specified. + // default unit is bp, per graphix package. + return { + number: +str, + unit: "bp" + }; + } else { + const match = /([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(str); + if (!match) { + throw new src_ParseError("Invalid size: '" + str + "' in \\includegraphics"); + } + const data = { + number: +(match[1] + match[2]), + // sign + magnitude, cast to number + unit: match[3] + }; + if (!validUnit(data)) { + throw new src_ParseError("Invalid unit: '" + data.unit + "' in \\includegraphics."); + } + return data; + } +}; +defineFunction({ + type: "includegraphics", + names: ["\\includegraphics"], + numArgs: 1, + numOptionalArgs: 1, + argTypes: ["raw", "url"], + allowedInText: false, + handler: (_ref, args, optArgs) => { + let parser = _ref.parser; + let width = { + number: 0, + unit: "em" + }; + let height = { + number: 0.9, + unit: "em" + }; // sorta character sized. + let totalheight = { + number: 0, + unit: "em" + }; + let alt = ""; + if (optArgs[0]) { + const attributeStr = assertNodeType(optArgs[0], "raw").string; + + // Parser.js does not parse key/value pairs. We get a string. + const attributes = attributeStr.split(","); + for (let i = 0; i < attributes.length; i++) { + const keyVal = attributes[i].split("="); + if (keyVal.length === 2) { + const str = keyVal[1].trim(); + switch (keyVal[0].trim()) { + case "alt": + alt = str; + break; + case "width": + width = sizeData(str); + break; + case "height": + height = sizeData(str); + break; + case "totalheight": + totalheight = sizeData(str); + break; + default: + throw new src_ParseError("Invalid key: '" + keyVal[0] + "' in \\includegraphics."); + } + } + } + } + const src = assertNodeType(args[0], "url").url; + if (alt === "") { + // No alt given. Use the file name. Strip away the path. + alt = src; + alt = alt.replace(/^.*[\\/]/, ''); + alt = alt.substring(0, alt.lastIndexOf('.')); + } + if (!parser.settings.isTrusted({ + command: "\\includegraphics", + url: src + })) { + return parser.formatUnsupportedCmd("\\includegraphics"); + } + return { + type: "includegraphics", + mode: parser.mode, + alt: alt, + width: width, + height: height, + totalheight: totalheight, + src: src + }; + }, + htmlBuilder: (group, options) => { + const height = calculateSize(group.height, options); + let depth = 0; + if (group.totalheight.number > 0) { + depth = calculateSize(group.totalheight, options) - height; + } + let width = 0; + if (group.width.number > 0) { + width = calculateSize(group.width, options); + } + const style = { + height: makeEm(height + depth) + }; + if (width > 0) { + style.width = makeEm(width); + } + if (depth > 0) { + style.verticalAlign = makeEm(-depth); + } + const node = new Img(group.src, group.alt, style); + node.height = height; + node.depth = depth; + return node; + }, + mathmlBuilder: (group, options) => { + const node = new MathNode("mglyph", []); + node.setAttribute("alt", group.alt); + const height = calculateSize(group.height, options); + let depth = 0; + if (group.totalheight.number > 0) { + depth = calculateSize(group.totalheight, options) - height; + node.setAttribute("valign", makeEm(-depth)); + } + node.setAttribute("height", makeEm(height + depth)); + if (group.width.number > 0) { + const width = calculateSize(group.width, options); + node.setAttribute("width", makeEm(width)); + } + node.setAttribute("src", group.src); + return node; + } +}); +;// ./src/functions/kern.ts +// Horizontal spacing commands + + + + + + + + +// TODO: \hskip and \mskip should support plus and minus in lengths + +defineFunction({ + type: "kern", + names: ["\\kern", "\\mkern", "\\hskip", "\\mskip"], + numArgs: 1, + argTypes: ["size"], + primitive: true, + allowedInText: true, + handler(_ref, args) { + let parser = _ref.parser, + funcName = _ref.funcName; + const size = assertNodeType(args[0], "size"); + if (parser.settings.strict) { + const mathFunction = funcName[1] === 'm'; // \mkern, \mskip + const muUnit = size.value.unit === 'mu'; + if (mathFunction) { + if (!muUnit) { + handleStrict({ + strict: parser.settings.strict, + errorCode: "mathVsTextUnits", + errorMsg: "LaTeX's " + funcName + " supports only mu units, " + ("not " + size.value.unit + " units"), + report: true + }); + } + if (parser.mode !== "math") { + handleStrict({ + strict: parser.settings.strict, + errorCode: "mathVsTextUnits", + errorMsg: "LaTeX's " + funcName + " works only in math mode", + report: true + }); + } + } else { + // !mathFunction + if (muUnit) { + handleStrict({ + strict: parser.settings.strict, + errorCode: "mathVsTextUnits", + errorMsg: "LaTeX's " + funcName + " doesn't support mu units", + report: true + }); + } + } + } + return { + type: "kern", + mode: parser.mode, + dimension: size.value + }; + }, + htmlBuilder(group, options) { + return makeGlue(group.dimension, options); + }, + mathmlBuilder(group, options) { + const dimension = calculateSize(group.dimension, options); + return new SpaceNode(dimension); + } +}); +;// ./src/functions/lap.ts +// Horizontal overlap functions + + + + + + +defineFunction({ + type: "lap", + names: ["\\mathllap", "\\mathrlap", "\\mathclap"], + numArgs: 1, + allowedInText: true, + handler: (_ref, args) => { + let parser = _ref.parser, + funcName = _ref.funcName; + const body = args[0]; + return { + type: "lap", + mode: parser.mode, + alignment: funcName.slice(5), + body + }; + }, + htmlBuilder: (group, options) => { + // mathllap, mathrlap, mathclap + let inner; + if (group.alignment === "clap") { + // ref: https://www.math.lsu.edu/~aperlis/publications/mathclap/ + inner = makeSpan([], [buildGroup(group.body, options)]); + // wrap, since CSS will center a .clap > .katex-inner > span + inner = makeSpan(["katex-inner"], [inner], options); + } else { + inner = makeSpan(["katex-inner"], [buildGroup(group.body, options)]); + } + const fix = makeSpan(["katex-fix"], []); + let node = makeSpan([group.alignment], [inner, fix], options); + + // At this point, we have correctly set horizontal alignment of the + // two items involved in the lap. + // Next, use a strut to set the height of the HTML bounding box. + // Otherwise, a tall argument may be misplaced. + // This code resolved issue #1153 + const strut = makeSpan(["katex-strut"]); + strut.style.height = makeEm(node.height + node.depth); + if (node.depth) { + strut.style.verticalAlign = makeEm(-node.depth); + } + node.children.unshift(strut); + + // Next, prevent vertical misplacement when next to something tall. + // This code resolves issue #1234 + node = makeSpan(["katex-thinbox"], [node], options); + return makeSpan(["mord", "katex-vbox"], [node], options); + }, + mathmlBuilder: (group, options) => { + // mathllap, mathrlap, mathclap + const node = new MathNode("mpadded", [buildMathML_buildGroup(group.body, options)]); + if (group.alignment !== "rlap") { + const offset = group.alignment === "llap" ? "-1" : "-0.5"; + node.setAttribute("lspace", offset + "width"); + } + node.setAttribute("width", "0px"); + return node; + } +}); +;// ./src/functions/math.ts + + + +// Switching from text mode back to math mode +defineFunction({ + type: "styling", + names: ["\\(", "$"], + numArgs: 0, + allowedInText: true, + allowedInMath: false, + handler(_ref, args) { + let funcName = _ref.funcName, + parser = _ref.parser; + const outerMode = parser.mode; + parser.switchMode("math"); + const close = funcName === "\\(" ? "\\)" : "$"; + const body = parser.parseExpression(false, close); + parser.expect(close); + parser.switchMode(outerMode); + return { + type: "styling", + mode: parser.mode, + style: "text", + resetFont: true, + body + }; + } +}); + +// Check for extra closing math delimiters +defineFunction({ + type: "text", + // Doesn't matter what this is. + names: ["\\)", "\\]"], + numArgs: 0, + allowedInText: true, + allowedInMath: false, + handler(context, args) { + throw new src_ParseError("Mismatched " + context.funcName); + } +}); +;// ./src/functions/mathchoice.ts + + + + + +const chooseMathStyle = (group, options) => { + switch (options.style.size) { + case src_Style.DISPLAY.size: + return group.display; + case src_Style.TEXT.size: + return group.text; + case src_Style.SCRIPT.size: + return group.script; + case src_Style.SCRIPTSCRIPT.size: + return group.scriptscript; + default: + return group.text; + } +}; +defineFunction({ + type: "mathchoice", + names: ["\\mathchoice"], + numArgs: 4, + primitive: true, + handler: (_ref, args) => { + let parser = _ref.parser; + return { + type: "mathchoice", + mode: parser.mode, + display: ordargument(args[0]), + text: ordargument(args[1]), + script: ordargument(args[2]), + scriptscript: ordargument(args[3]) + }; + }, + htmlBuilder: (group, options) => { + const body = chooseMathStyle(group, options); + const elements = buildExpression(body, options, false); + return makeFragment(elements); + }, + mathmlBuilder: (group, options) => { + const body = chooseMathStyle(group, options); + return buildExpressionRow(body, options); + } +}); +;// ./src/functions/utils/assembleSupSub.ts + + + + + +// For an operator with limits, assemble the base, sup, and sub into a span. + +const assembleSupSub = (base, supGroup, subGroup, options, style, slant, baseShift) => { + base = makeSpan([], [base]); + const subIsSingleCharacter = subGroup && isCharacterBox(subGroup); + let sub; + let sup; + // We manually have to handle the superscripts and subscripts. This, + // aside from the kern calculations, is copied from supsub. + if (supGroup) { + const elem = buildGroup(supGroup, options.havingStyle(style.sup()), options); + sup = { + elem, + kern: Math.max(options.fontMetrics().bigOpSpacing1, options.fontMetrics().bigOpSpacing3 - elem.depth) + }; + } + if (subGroup) { + const elem = buildGroup(subGroup, options.havingStyle(style.sub()), options); + sub = { + elem, + kern: Math.max(options.fontMetrics().bigOpSpacing2, options.fontMetrics().bigOpSpacing4 - elem.height) + }; + } + + // Build the final group as a vlist of the possible subscript, base, + // and possible superscript. + let finalGroup; + if (sup && sub) { + const bottom = options.fontMetrics().bigOpSpacing5 + sub.elem.height + sub.elem.depth + sub.kern + base.depth + baseShift; + finalGroup = makeVList({ + positionType: "bottom", + positionData: bottom, + children: [{ + type: "kern", + size: options.fontMetrics().bigOpSpacing5 + }, { + type: "elem", + elem: sub.elem, + marginLeft: makeEm(-slant) + }, { + type: "kern", + size: sub.kern + }, { + type: "elem", + elem: base + }, { + type: "kern", + size: sup.kern + }, { + type: "elem", + elem: sup.elem, + marginLeft: makeEm(slant) + }, { + type: "kern", + size: options.fontMetrics().bigOpSpacing5 + }] + }, options); + } else if (sub) { + const top = base.height - baseShift; + + // Shift the limits by the slant of the symbol. Note + // that we are supposed to shift the limits by 1/2 of the slant, + // but since we are centering the limits adding a full slant of + // margin will shift by 1/2 that. + finalGroup = makeVList({ + positionType: "top", + positionData: top, + children: [{ + type: "kern", + size: options.fontMetrics().bigOpSpacing5 + }, { + type: "elem", + elem: sub.elem, + marginLeft: makeEm(-slant) + }, { + type: "kern", + size: sub.kern + }, { + type: "elem", + elem: base + }] + }, options); + } else if (sup) { + const bottom = base.depth + baseShift; + finalGroup = makeVList({ + positionType: "bottom", + positionData: bottom, + children: [{ + type: "elem", + elem: base + }, { + type: "kern", + size: sup.kern + }, { + type: "elem", + elem: sup.elem, + marginLeft: makeEm(slant) + }, { + type: "kern", + size: options.fontMetrics().bigOpSpacing5 + }] + }, options); + } else { + // This case probably shouldn't occur (this would mean the + // supsub was sending us a group with no superscript or + // subscript) but be safe. + return base; + } + const parts = [finalGroup]; + if (sub && slant !== 0 && !subIsSingleCharacter) { + // A negative margin-left was applied to the lower limit. + // Avoid an overlap by placing a spacer on the left on the group. + const spacer = makeSpan(["mspace"], [], options); + spacer.style.marginRight = makeEm(slant); + parts.unshift(spacer); + } + return makeSpan(["mop", "op-limits"], parts, options); +}; +;// ./src/functions/op.ts +// Limits, symbols + + + + + + + + + + +// Most operators have a large successor symbol, but these don't. +const noSuccessor = new Set(["\\smallint"]); + +// NOTE: Unlike most `htmlBuilder`s, this one handles not only "op", but also +// "supsub" since some of them (like \int) can affect super/subscripting. +const op_htmlBuilder = (grp, options) => { + // Operators are handled in the TeXbook pg. 443-444, rule 13(a). + let supGroup; + let subGroup; + let hasLimits = false; + let group; + if (grp.type === "supsub") { + // If we have limits, supsub will pass us its group to handle. Pull + // out the superscript and subscript and set the group to the op in + // its base. + supGroup = grp.sup; + subGroup = grp.sub; + group = assertNodeType(grp.base, "op"); + hasLimits = true; + } else { + group = assertNodeType(grp, "op"); + } + const style = options.style; + let large = false; + if (style.size === src_Style.DISPLAY.size && group.symbol && !noSuccessor.has(group.name)) { + // Most symbol operators get larger in displaystyle (rule 13) + large = true; + } + let base; + // Italic correction from the symbol glyph, captured before the symbol + // may be wrapped in a vlist (for \oiint/\oiiint). Stays 0 for non-symbol ops. + let symbolItalic; + if (group.symbol) { + // If this is a symbol, create the symbol. + const fontName = large ? "Size2-Regular" : "Size1-Regular"; + let stash = ""; + if (group.name === "\\oiint" || group.name === "\\oiiint") { + // No font glyphs yet, so use a glyph w/o the oval. + // TODO: When font glyphs are available, delete this code. + stash = group.name.slice(1); + group.name = stash === "oiint" ? "\\iint" : "\\iiint"; + } + base = makeSymbol(group.name, fontName, "math", options, ["mop", "op-symbol", large ? "large-op" : "small-op"]); + symbolItalic = base.italic; + if (stash.length > 0) { + // We're in \oiint or \oiiint. Overlay the oval. + // TODO: When font glyphs are available, delete this code. + const oval = staticSvg(stash + "Size" + (large ? "2" : "1"), options); + base = makeVList({ + positionType: "individualShift", + children: [{ + type: "elem", + elem: base, + shift: 0 + }, { + type: "elem", + elem: oval, + shift: large ? 0.08 : 0 + }] + }, options); + group.name = "\\" + stash; + base.classes.unshift("mop"); + // Carry the italic correction from the original symbol to the + // vlist wrapper so supsub can use it for subscript positioning. + base.italic = symbolItalic; + } + } else if (group.body) { + // If this is a list, compose that list. + const inner = buildExpression(group.body, options, true); + if (inner.length === 1 && inner[0] instanceof SymbolNode) { + base = inner[0]; + base.classes[0] = "mop"; // replace old mclass + } else { + base = makeSpan(["mop"], inner, options); + } + } else { + // Otherwise, this is a text operator. Build the text from the + // operator's name. + const output = []; + for (let i = 1; i < group.name.length; i++) { + output.push(mathsym(group.name[i], group.mode, options)); + } + base = makeSpan(["mop"], output, options); + } + + // If content of op is a single symbol, shift it vertically. + let baseShift = 0; + let slant = 0; + if ((base instanceof SymbolNode || group.name === "\\oiint" || group.name === "\\oiiint") && !group.suppressBaseShift) { + var _base$italic; + // We suppress the shift of the base of \overset and \underset. Otherwise, + // shift the symbol so its center lies on the axis (rule 13). It + // appears that our fonts have the centers of the symbols already + // almost on the axis, so these numbers are very small. Note we + // don't actually apply this here, but instead it is used either in + // the vlist creation or separately when there are no limits. + baseShift = (base.height - base.depth) / 2 - options.fontMetrics().axisHeight; + + // The slant of the symbol is just its italic correction. + // SymbolNode carries .italic natively; Span (for \oiint/\oiiint) + // only has it set when nonzero, so default to 0. + slant = (_base$italic = base.italic) != null ? _base$italic : 0; + } + if (hasLimits) { + return assembleSupSub(base, supGroup, subGroup, options, style, slant, baseShift); + } else { + if (baseShift) { + base.style.position = "relative"; + base.style.top = makeEm(baseShift); + } + return base; + } +}; +const op_mathmlBuilder = (group, options) => { + let node; + if (group.symbol) { + // This is a symbol. Just add the symbol. + node = new MathNode("mo", [makeText(group.name, group.mode)]); + if (noSuccessor.has(group.name)) { + node.setAttribute("largeop", "false"); + } + } else if (group.body) { + // This is an operator with children. Add them. + node = new MathNode("mo", buildMathML_buildExpression(group.body, options)); + } else { + // This is a text operator. Add all the characters from the + // operator's name. + node = new MathNode("mi", [new TextNode(group.name.slice(1))]); + // Append an ⁡. + // ref: https://www.w3.org/TR/REC-MathML/chap3_2.html#sec3.2.4 + const operator = new MathNode("mo", [makeText("\u2061", "text")]); + if (group.parentIsSupSub) { + node = new MathNode("mrow", [node, operator]); + } else { + node = newDocumentFragment([node, operator]); + } + } + return node; +}; +const singleCharBigOps = { + "\u220F": "\\prod", + "\u2210": "\\coprod", + "\u2211": "\\sum", + "\u22c0": "\\bigwedge", + "\u22c1": "\\bigvee", + "\u22c2": "\\bigcap", + "\u22c3": "\\bigcup", + "\u2a00": "\\bigodot", + "\u2a01": "\\bigoplus", + "\u2a02": "\\bigotimes", + "\u2a04": "\\biguplus", + "\u2a06": "\\bigsqcup" +}; +defineFunction({ + type: "op", + names: ["\\coprod", "\\bigvee", "\\bigwedge", "\\biguplus", "\\bigcap", "\\bigcup", "\\intop", "\\prod", "\\sum", "\\bigotimes", "\\bigoplus", "\\bigodot", "\\bigsqcup", "\\smallint", "\u220F", "\u2210", "\u2211", "\u22c0", "\u22c1", "\u22c2", "\u22c3", "\u2a00", "\u2a01", "\u2a02", "\u2a04", "\u2a06"], + numArgs: 0, + handler: (_ref, args) => { + let parser = _ref.parser, + funcName = _ref.funcName; + let fName = funcName; + if (fName.length === 1) { + fName = singleCharBigOps[fName]; + } + return { + type: "op", + mode: parser.mode, + limits: true, + parentIsSupSub: false, + symbol: true, + name: fName + }; + }, + htmlBuilder: op_htmlBuilder, + mathmlBuilder: op_mathmlBuilder +}); +defineFunction({ + type: "op", + names: ["\\mathop"], + numArgs: 1, + primitive: true, + handler: (_ref2, args) => { + let parser = _ref2.parser; + const body = args[0]; + return { + type: "op", + mode: parser.mode, + limits: false, + parentIsSupSub: false, + symbol: false, + body: ordargument(body) + }; + } +}); + +// There are 2 flags for operators; whether they produce limits in +// displaystyle, and whether they are symbols and should grow in +// displaystyle. These four groups cover the four possible choices. +const singleCharIntegrals = { + "\u222b": "\\int", + "\u222c": "\\iint", + "\u222d": "\\iiint", + "\u222e": "\\oint", + "\u222f": "\\oiint", + "\u2230": "\\oiiint" +}; + +// No limits, not symbols +defineFunction({ + type: "op", + names: ["\\arcsin", "\\arccos", "\\arctan", "\\arctg", "\\arcctg", "\\arg", "\\ch", "\\cos", "\\cosec", "\\cosh", "\\cot", "\\cotg", "\\coth", "\\csc", "\\ctg", "\\cth", "\\deg", "\\dim", "\\exp", "\\hom", "\\ker", "\\lg", "\\ln", "\\log", "\\sec", "\\sin", "\\sinh", "\\sh", "\\tan", "\\tanh", "\\tg", "\\th"], + numArgs: 0, + handler(_ref3) { + let parser = _ref3.parser, + funcName = _ref3.funcName; + return { + type: "op", + mode: parser.mode, + limits: false, + parentIsSupSub: false, + symbol: false, + name: funcName + }; + } +}); + +// Limits, not symbols +defineFunction({ + type: "op", + names: ["\\det", "\\gcd", "\\inf", "\\lim", "\\max", "\\min", "\\Pr", "\\sup"], + numArgs: 0, + handler(_ref4) { + let parser = _ref4.parser, + funcName = _ref4.funcName; + return { + type: "op", + mode: parser.mode, + limits: true, + parentIsSupSub: false, + symbol: false, + name: funcName + }; + } +}); + +// No limits, symbols +defineFunction({ + type: "op", + names: ["\\int", "\\iint", "\\iiint", "\\oint", "\\oiint", "\\oiiint", "\u222b", "\u222c", "\u222d", "\u222e", "\u222f", "\u2230"], + numArgs: 0, + allowedInArgument: true, + handler(_ref5) { + let parser = _ref5.parser, + funcName = _ref5.funcName; + let fName = funcName; + if (fName.length === 1) { + fName = singleCharIntegrals[fName]; + } + return { + type: "op", + mode: parser.mode, + limits: false, + parentIsSupSub: false, + symbol: true, + name: fName + }; + } +}); +;// ./src/functions/operatorname.ts + + + + + + + + + +// NOTE: Unlike most `htmlBuilder`s, this one handles not only +// "operatorname", but also "supsub" since \operatorname* can +// affect super/subscripting. +const operatorname_htmlBuilder = (grp, options) => { + // Operators are handled in the TeXbook pg. 443-444, rule 13(a). + let supGroup; + let subGroup; + let hasLimits = false; + let group; + if (grp.type === "supsub") { + // If we have limits, supsub will pass us its group to handle. Pull + // out the superscript and subscript and set the group to the op in + // its base. + supGroup = grp.sup; + subGroup = grp.sub; + group = assertNodeType(grp.base, "operatorname"); + hasLimits = true; + } else { + group = assertNodeType(grp, "operatorname"); + } + let base; + if (group.body.length > 0) { + const body = group.body.map(child => { + const childText = "text" in child ? child.text : undefined; + if (typeof childText === "string") { + return { + type: "textord", + mode: child.mode, + text: childText + }; + } else { + return child; + } + }); + + // Consolidate function names into symbol characters. + const expression = buildExpression(body, options.withFont("mathrm"), true); + for (let i = 0; i < expression.length; i++) { + const child = expression[i]; + if (child instanceof SymbolNode) { + // Per amsopn package, + // change minus to hyphen and \ast to asterisk + child.text = child.text.replace(/\u2212/, "-").replace(/\u2217/, "*"); + } + } + base = makeSpan(["mop"], expression, options); + } else { + base = makeSpan(["mop"], [], options); + } + if (hasLimits) { + return assembleSupSub(base, supGroup, subGroup, options, options.style, 0, 0); + } else { + return base; + } +}; +const operatorname_mathmlBuilder = (group, options) => { + // The steps taken here are similar to the html version. + let expression = buildMathML_buildExpression(group.body, options.withFont("mathrm")); + + // Is expression a string or has it something like a fraction? + let isAllString = true; // default + for (let i = 0; i < expression.length; i++) { + const node = expression[i]; + if (node instanceof SpaceNode) { + // Do nothing + } else if (node instanceof MathNode) { + switch (node.type) { + case "mi": + case "mn": + case "mspace": + case "mtext": + break; + // Do nothing yet. + case "mo": + { + const child = node.children[0]; + if (node.children.length === 1 && child instanceof TextNode) { + child.text = child.text.replace(/\u2212/, "-").replace(/\u2217/, "*"); + } else { + isAllString = false; + } + break; + } + default: + isAllString = false; + } + } else { + isAllString = false; + } + } + if (isAllString) { + // Write a single TextNode instead of multiple nested tags. + const word = expression.map(node => node.toText()).join(""); + expression = [new TextNode(word)]; + } + const identifier = new MathNode("mi", expression); + identifier.setAttribute("mathvariant", "normal"); + + // \u2061 is the same as ⁡ + // ref: https://www.w3schools.com/charsets/ref_html_entities_a.asp + const operator = new MathNode("mo", [makeText("\u2061", "text")]); + if (group.parentIsSupSub) { + return new MathNode("mrow", [identifier, operator]); + } else { + return newDocumentFragment([identifier, operator]); + } +}; + +// \operatorname +// amsopn.dtx: \mathop{#1\kern\z@\operator@font#3}\newmcodes@ +defineFunction({ + type: "operatorname", + names: ["\\operatorname@", "\\operatornamewithlimits"], + numArgs: 1, + handler: (_ref, args) => { + let parser = _ref.parser, + funcName = _ref.funcName; + const body = args[0]; + return { + type: "operatorname", + mode: parser.mode, + body: ordargument(body), + alwaysHandleSupSub: funcName === "\\operatornamewithlimits", + limits: false, + parentIsSupSub: false + }; + }, + htmlBuilder: operatorname_htmlBuilder, + mathmlBuilder: operatorname_mathmlBuilder +}); +defineMacro("\\operatorname", "\\@ifstar\\operatornamewithlimits\\operatorname@"); +;// ./src/functions/ordgroup.ts + + + + +defineFunctionBuilders({ + type: "ordgroup", + htmlBuilder(group, options) { + if (group.semisimple) { + return makeFragment(buildExpression(group.body, options, false)); + } + return makeSpan(["mord"], buildExpression(group.body, options, true), options); + }, + mathmlBuilder(group, options) { + return buildExpressionRow(group.body, options, true); + } +}); +;// ./src/functions/overline.ts + + + + + +defineFunction({ + type: "overline", + names: ["\\overline"], + numArgs: 1, + handler(_ref, args) { + let parser = _ref.parser; + const body = args[0]; + return { + type: "overline", + mode: parser.mode, + body + }; + }, + htmlBuilder(group, options) { + // Overlines are handled in the TeXbook pg 443, Rule 9. + + // Build the inner group in the cramped style. + const innerGroup = buildGroup(group.body, options.havingCrampedStyle()); + + // Create the line above the body + const line = makeLineSpan("overline-line", options); + + // Generate the vlist, with the appropriate kerns + const defaultRuleThickness = options.fontMetrics().defaultRuleThickness; + const vlist = makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: innerGroup + }, { + type: "kern", + size: 3 * defaultRuleThickness + }, { + type: "elem", + elem: line + }, { + type: "kern", + size: defaultRuleThickness + }] + }, options); + return makeSpan(["mord", "katex-overline"], [vlist], options); + }, + mathmlBuilder(group, options) { + const operator = new MathNode("mo", [new TextNode("\u203e")]); + operator.setAttribute("stretchy", "true"); + const node = new MathNode("mover", [buildMathML_buildGroup(group.body, options), operator]); + node.setAttribute("accent", "true"); + return node; + } +}); +;// ./src/functions/phantom.ts + + + + + + +defineFunction({ + type: "phantom", + names: ["\\phantom"], + numArgs: 1, + allowedInText: true, + handler: (_ref, args) => { + let parser = _ref.parser; + const body = args[0]; + return { + type: "phantom", + mode: parser.mode, + body: ordargument(body) + }; + }, + htmlBuilder: (group, options) => { + const elements = buildExpression(group.body, options.withPhantom(), false); + + // \phantom isn't supposed to affect the elements it contains. + // See "color" for more details. + return makeFragment(elements); + }, + mathmlBuilder: (group, options) => { + const inner = buildMathML_buildExpression(group.body, options); + return new MathNode("mphantom", inner); + } +}); +defineMacro("\\hphantom", "\\smash{\\phantom{#1}}"); +defineFunction({ + type: "vphantom", + names: ["\\vphantom"], + numArgs: 1, + allowedInText: true, + handler: (_ref2, args) => { + let parser = _ref2.parser; + const body = args[0]; + return { + type: "vphantom", + mode: parser.mode, + body + }; + }, + htmlBuilder: (group, options) => { + const inner = makeSpan(["katex-inner"], [buildGroup(group.body, options.withPhantom())]); + const fix = makeSpan(["katex-fix"], []); + return makeSpan(["mord", "rlap"], [inner, fix], options); + }, + mathmlBuilder: (group, options) => { + const inner = buildMathML_buildExpression(ordargument(group.body), options); + const phantom = new MathNode("mphantom", inner); + const node = new MathNode("mpadded", [phantom]); + node.setAttribute("width", "0px"); + return node; + } +}); +;// ./src/functions/raisebox.ts + + + + + + + + +// Box manipulation +defineFunction({ + type: "raisebox", + names: ["\\raisebox"], + numArgs: 2, + argTypes: ["size", "hbox"], + allowedInText: true, + handler(_ref, args) { + let parser = _ref.parser; + const amount = assertNodeType(args[0], "size").value; + const body = args[1]; + return { + type: "raisebox", + mode: parser.mode, + dy: amount, + body + }; + }, + htmlBuilder(group, options) { + const body = buildGroup(group.body, options); + const dy = calculateSize(group.dy, options); + return makeVList({ + positionType: "shift", + positionData: -dy, + children: [{ + type: "elem", + elem: body + }] + }, options); + }, + mathmlBuilder(group, options) { + const node = new MathNode("mpadded", [buildMathML_buildGroup(group.body, options)]); + const dy = group.dy.number + group.dy.unit; + node.setAttribute("voffset", dy); + return node; + } +}); +;// ./src/functions/reflectbox.ts + + + + +const handler = (_ref, args) => { + let parser = _ref.parser; + return { + type: "reflectbox", + mode: parser.mode, + body: args[0] + }; +}; +defineFunction({ + type: "reflectbox", + names: ["\\reflectbox"], + numArgs: 1, + argTypes: ["hbox"], + allowedInText: true, + handler, + htmlBuilder(group, options) { + return makeSpan(["mord", "reflectbox"], [buildGroup(group.body, options)], options); + }, + mathmlBuilder(group, options) { + return buildMathML_buildGroup(group.body, options); + } +}); + +// Parse math directly so the shared builders inherit the surrounding style. +// \reflectbox instead uses an hbox argument for LaTeX's text-box behavior. +defineFunction({ + type: "reflectbox", + names: ["\\mathreflectbox"], + numArgs: 1, + argTypes: ["math"], + handler +}); +;// ./src/functions/relax.ts + +defineFunction({ + type: "internal", + names: ["\\relax"], + numArgs: 0, + allowedInText: true, + allowedInArgument: true, + handler(_ref) { + let parser = _ref.parser; + return { + type: "internal", + mode: parser.mode + }; + } +}); +;// ./src/functions/rule.ts + + + + + +defineFunction({ + type: "rule", + names: ["\\rule"], + numArgs: 2, + numOptionalArgs: 1, + allowedInText: true, + allowedInMath: true, + argTypes: ["size", "size", "size"], + handler(_ref, args, optArgs) { + let parser = _ref.parser; + const shift = optArgs[0]; + const width = assertNodeType(args[0], "size"); + const height = assertNodeType(args[1], "size"); + return { + type: "rule", + mode: parser.mode, + shift: shift && assertNodeType(shift, "size").value, + width: width.value, + height: height.value + }; + }, + htmlBuilder(group, options) { + // Make an empty span for the rule + const rule = makeSpan(["mord", "katex-rule"], [], options); + + // Calculate the shift, width, and height of the rule, and account for units + const width = calculateSize(group.width, options); + const height = calculateSize(group.height, options); + const shift = group.shift ? calculateSize(group.shift, options) : 0; + + // Style the rule to the right size + rule.style.borderRightWidth = makeEm(width); + rule.style.borderTopWidth = makeEm(height); + rule.style.bottom = makeEm(shift); + + // Record the height and width + rule.width = width; + rule.height = height + shift; + rule.depth = -shift; + // Font size is the number large enough that the browser will + // reserve at least `absHeight` space above the baseline. + // The 1.125 factor was empirically determined + rule.maxFontSize = height * 1.125 * options.sizeMultiplier; + return rule; + }, + mathmlBuilder(group, options) { + const width = calculateSize(group.width, options); + const height = calculateSize(group.height, options); + const shift = group.shift ? calculateSize(group.shift, options) : 0; + const color = options.color && options.getColor() || "black"; + const rule = new MathNode("mspace"); + rule.setAttribute("mathbackground", color); + rule.setAttribute("width", makeEm(width)); + rule.setAttribute("height", makeEm(height)); + const wrapper = new MathNode("mpadded", [rule]); + if (shift >= 0) { + wrapper.setAttribute("height", makeEm(shift)); + } else { + wrapper.setAttribute("height", makeEm(shift)); + wrapper.setAttribute("depth", makeEm(-shift)); + } + wrapper.setAttribute("voffset", makeEm(shift)); + return wrapper; + } +}); +;// ./src/functions/sizing.ts + + + + + + +function sizingGroup(value, options, baseOptions) { + const inner = buildExpression(value, options, false); + const multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier; + + // Add size-resetting classes to the inner list and set maxFontSize + // manually. Handle nested size changes. + for (let i = 0; i < inner.length; i++) { + const pos = inner[i].classes.indexOf("katex-sizing"); + if (pos < 0) { + Array.prototype.push.apply(inner[i].classes, options.sizingClasses(baseOptions)); + } else if (inner[i].classes[pos + 1] === "reset-size" + options.size) { + // This is a nested size change: e.g., inner[i] is the "b" in + // `\Huge a \small b`. Override the old size (the `reset-` class) + // but not the new size. + inner[i].classes[pos + 1] = "reset-size" + baseOptions.size; + } + inner[i].height *= multiplier; + inner[i].depth *= multiplier; + } + return makeFragment(inner); +} +const sizeFuncs = ["\\tiny", "\\sixptsize", "\\scriptsize", "\\footnotesize", "\\small", "\\normalsize", "\\large", "\\Large", "\\LARGE", "\\huge", "\\Huge"]; +const sizing_htmlBuilder = (group, options) => { + // Handle sizing operators like \Huge. Real TeX doesn't actually allow + // these functions inside of math expressions, so we do some special + // handling. + const newOptions = options.havingSize(group.size); + return sizingGroup(group.body, newOptions, options); +}; +defineFunction({ + type: "sizing", + names: sizeFuncs, + numArgs: 0, + allowedInText: true, + handler: (_ref, args) => { + let breakOnTokenText = _ref.breakOnTokenText, + funcName = _ref.funcName, + parser = _ref.parser; + const body = parser.parseExpression(false, breakOnTokenText); + return { + type: "sizing", + mode: parser.mode, + // Figure out what size to use based on the list of functions above + size: sizeFuncs.indexOf(funcName) + 1, + body + }; + }, + htmlBuilder: sizing_htmlBuilder, + mathmlBuilder: (group, options) => { + const newOptions = options.havingSize(group.size); + const inner = buildMathML_buildExpression(group.body, newOptions); + const node = new MathNode("mstyle", inner); + + // TODO(emily): This doesn't produce the correct size for nested size + // changes, because we don't keep state of what style we're currently + // in, so we can't reset the size to normal before changing it. Now + // that we're passing an options parameter we should be able to fix + // this. + node.setAttribute("mathsize", makeEm(newOptions.sizeMultiplier)); + return node; + } +}); +;// ./src/functions/smash.ts +// smash, with optional [tb], as in AMS + + + + + + +defineFunction({ + type: "smash", + names: ["\\smash"], + numArgs: 1, + numOptionalArgs: 1, + allowedInText: true, + handler: (_ref, args, optArgs) => { + let parser = _ref.parser; + let smashHeight = false; + let smashDepth = false; + const tbArg = optArgs[0] && assertNodeType(optArgs[0], "ordgroup"); + if (tbArg) { + // Optional [tb] argument is engaged. + // ref: amsmath: \renewcommand{\smash}[1][tb]{% + // def\mb@t{\ht}\def\mb@b{\dp}\def\mb@tb{\ht\z@\z@\dp}% + let letter; + for (let i = 0; i < tbArg.body.length; ++i) { + const node = tbArg.body[i]; + letter = assertSymbolNodeType(node).text; + if (letter === "t") { + smashHeight = true; + } else if (letter === "b") { + smashDepth = true; + } else { + smashHeight = false; + smashDepth = false; + break; + } + } + } else { + smashHeight = true; + smashDepth = true; + } + const body = args[0]; + return { + type: "smash", + mode: parser.mode, + body, + smashHeight, + smashDepth + }; + }, + htmlBuilder: (group, options) => { + const node = makeSpan([], [buildGroup(group.body, options)]); + if (!group.smashHeight && !group.smashDepth) { + return node; + } + if (group.smashHeight) { + node.height = 0; + } + if (group.smashDepth) { + node.depth = 0; + } + if (group.smashHeight && group.smashDepth) { + // Symmetric \smash can stay in inline layout. + return makeSpan(["mord", "katex-smash"], [node], options); + } + + // In order to influence makeVList for asymmetric smashing, we have to + // reset the children. + if (node.children) { + for (let i = 0; i < node.children.length; i++) { + if (group.smashHeight) { + node.children[i].height = 0; + } + if (group.smashDepth) { + node.children[i].depth = 0; + } + } + } + + // At this point, we've reset the TeX-like height and depth values. + // But the span still has an HTML line height. + // makeVList applies "display: table-cell", which prevents the browser + // from acting on that line height. So we'll call makeVList now. + + const smashedNode = makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: node + }] + }, options); + + // For spacing, TeX treats \smash as a math group (same spacing as ord). + return makeSpan(["mord"], [smashedNode], options); + }, + mathmlBuilder: (group, options) => { + const node = new MathNode("mpadded", [buildMathML_buildGroup(group.body, options)]); + if (group.smashHeight) { + node.setAttribute("height", "0px"); + } + if (group.smashDepth) { + node.setAttribute("depth", "0px"); + } + return node; + } +}); +;// ./src/functions/sqrt.ts + + + + + + + + +defineFunction({ + type: "sqrt", + names: ["\\sqrt"], + numArgs: 1, + numOptionalArgs: 1, + handler(_ref, args, optArgs) { + let parser = _ref.parser; + const index = optArgs[0]; + const body = args[0]; + return { + type: "sqrt", + mode: parser.mode, + body, + index + }; + }, + htmlBuilder(group, options) { + // Square roots are handled in the TeXbook pg. 443, Rule 11. + + // First, we do the same steps as in overline to build the inner group + // and line + let inner = buildGroup(group.body, options.havingCrampedStyle()); + if (inner.height === 0) { + // Render a small surd. + inner.height = options.fontMetrics().xHeight; + } + + // Some groups can return document fragments. Handle those by wrapping + // them in a span. + inner = wrapFragment(inner, options); + + // Calculate the minimum size for the \surd delimiter + const metrics = options.fontMetrics(); + const theta = metrics.defaultRuleThickness; + let phi = theta; + if (options.style.id < src_Style.TEXT.id) { + phi = options.fontMetrics().xHeight; + } + + // Calculate the clearance between the body and line + let lineClearance = theta + phi / 4; + const minDelimiterHeight = inner.height + inner.depth + lineClearance + theta; + + // Create a sqrt SVG of the required minimum size + const _makeSqrtImage = makeSqrtImage(minDelimiterHeight, options), + img = _makeSqrtImage.span, + ruleWidth = _makeSqrtImage.ruleWidth, + advanceWidth = _makeSqrtImage.advanceWidth; + const delimDepth = img.height - ruleWidth; + + // Adjust the clearance based on the delimiter size + if (delimDepth > inner.height + inner.depth + lineClearance) { + lineClearance = (lineClearance + delimDepth - inner.height - inner.depth) / 2; + } + + // Shift the sqrt image + const imgShift = img.height - inner.height - lineClearance - ruleWidth; + inner.style.paddingLeft = makeEm(advanceWidth); + + // Overlay the image and the argument. + const body = makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: inner, + wrapperClasses: ["svg-align"] + }, { + type: "kern", + size: -(inner.height + imgShift) + }, { + type: "elem", + elem: img + }, { + type: "kern", + size: ruleWidth + }] + }, options); + if (!group.index) { + return makeSpan(["mord", "sqrt"], [body], options); + } else { + // Handle the optional root index + + // The index is always in scriptscript style + const newOptions = options.havingStyle(src_Style.SCRIPTSCRIPT); + const rootm = buildGroup(group.index, newOptions, options); + + // The amount the index is shifted by. This is taken from the TeX + // source, in the definition of `\r@@t`. + const toShift = 0.6 * (body.height - body.depth); + + // Build a VList with the superscript shifted up correctly + const rootVList = makeVList({ + positionType: "shift", + positionData: -toShift, + children: [{ + type: "elem", + elem: rootm + }] + }, options); + // Add a class surrounding it so we can add on the appropriate + // kerning + const rootVListWrap = makeSpan(["katex-root"], [rootVList]); + return makeSpan(["mord", "sqrt"], [rootVListWrap, body], options); + } + }, + mathmlBuilder(group, options) { + const body = group.body, + index = group.index; + return index ? new MathNode("mroot", [buildMathML_buildGroup(body, options), buildMathML_buildGroup(index, options)]) : new MathNode("msqrt", [buildMathML_buildGroup(body, options)]); + } +}); +;// ./src/functions/styling.ts + + + + + +const styling_styleMap = { + "display": src_Style.DISPLAY, + "text": src_Style.TEXT, + "script": src_Style.SCRIPT, + "scriptscript": src_Style.SCRIPTSCRIPT +}; +function isStyleStr(s) { + return s in styling_styleMap; +} +defineFunction({ + type: "styling", + names: ["\\displaystyle", "\\textstyle", "\\scriptstyle", "\\scriptscriptstyle"], + numArgs: 0, + allowedInText: true, + primitive: true, + handler(_ref, args) { + let breakOnTokenText = _ref.breakOnTokenText, + funcName = _ref.funcName, + parser = _ref.parser; + // parse out the implicit body + const body = parser.parseExpression(true, breakOnTokenText); + + // TODO: Refactor to avoid duplicating styleMap in multiple places (e.g. + // here and in buildHTML and de-dupe the enumeration of all the styles). + const style = funcName.slice(1, funcName.length - 5); + if (!isStyleStr(style)) { + throw new Error("Unknown style: " + style); + } + return { + type: "styling", + mode: parser.mode, + // Figure out what style to use by pulling out the style from + // the function name + style, + body + }; + }, + htmlBuilder(group, options) { + // Style changes are handled in the TeXbook on pg. 442, Rule 3. + const newStyle = styling_styleMap[group.style]; + let newOptions = options.havingStyle(newStyle); + if (group.resetFont) { + newOptions = newOptions.withFont(''); + } + return sizingGroup(group.body, newOptions, options); + }, + mathmlBuilder(group, options) { + // Figure out what style we're changing to. + const newStyle = styling_styleMap[group.style]; + let newOptions = options.havingStyle(newStyle); + if (group.resetFont) { + newOptions = newOptions.withFont(''); + } + const inner = buildMathML_buildExpression(group.body, newOptions); + const node = new MathNode("mstyle", inner); + const styleAttributes = { + "display": ["0", "true"], + "text": ["0", "false"], + "script": ["1", "false"], + "scriptscript": ["2", "false"] + }; + const attr = styleAttributes[group.style]; + node.setAttribute("scriptlevel", attr[0]); + node.setAttribute("displaystyle", attr[1]); + return node; + } +}); +;// ./src/functions/supsub.ts + + + + + + + + + + + + + +/** + * Sometimes, groups perform special rules when they have superscripts or + * subscripts attached to them. This function lets the `supsub` group know that + * Sometimes, groups perform special rules when they have superscripts or + * its inner element should handle the superscripts and subscripts instead of + * handling them itself. + */ +const htmlBuilderDelegate = function (group, options +// eslint-disable-next-line @typescript-eslint/no-explicit-any +) { + const base = group.base; + if (!base) { + return null; + } else if (base.type === "op") { + // Operators handle supsubs differently when they have limits + // (e.g. `\displaystyle\sum_2^3`) + const delegate = base.limits && (options.style.size === src_Style.DISPLAY.size || base.alwaysHandleSupSub); + return delegate ? op_htmlBuilder : null; + } else if (base.type === "operatorname") { + const delegate = base.alwaysHandleSupSub && (options.style.size === src_Style.DISPLAY.size || base.limits); + return delegate ? operatorname_htmlBuilder : null; + } else if (base.type === "accent") { + return isCharacterBox(base.base) ? htmlBuilder : null; + } else if (base.type === "horizBrace") { + const isSup = !group.sub; + return isSup === base.isOver ? horizBrace_htmlBuilder : null; + } else { + return null; + } +}; + +// Super scripts and subscripts, whose precise placement can depend on other +// functions that precede them. +defineFunctionBuilders({ + type: "supsub", + htmlBuilder(group, options) { + // Superscript and subscripts are handled in the TeXbook on page + // 445-446, rules 18(a-f). + + // Here is where we defer to the inner group if it should handle + // superscripts and subscripts itself. + const builderDelegate = htmlBuilderDelegate(group, options); + if (builderDelegate) { + return builderDelegate(group, options); + } + const valueBase = group.base, + valueSup = group.sup, + valueSub = group.sub; + const base = buildGroup(valueBase, options); + let supm; + let subm; + const metrics = options.fontMetrics(); + + // Rule 18a + let supShift = 0; + let subShift = 0; + const isCharBox = valueBase && isCharacterBox(valueBase); + if (valueSup) { + const newOptions = options.havingStyle(options.style.sup()); + supm = buildGroup(valueSup, newOptions, options); + if (!isCharBox) { + supShift = base.height - newOptions.fontMetrics().supDrop * newOptions.sizeMultiplier / options.sizeMultiplier; + } + } + if (valueSub) { + const newOptions = options.havingStyle(options.style.sub()); + subm = buildGroup(valueSub, newOptions, options); + if (!isCharBox) { + subShift = base.depth + newOptions.fontMetrics().subDrop * newOptions.sizeMultiplier / options.sizeMultiplier; + } + } + + // Rule 18c + let minSupShift; + if (options.style === src_Style.DISPLAY) { + minSupShift = metrics.sup1; + } else if (options.style.cramped) { + minSupShift = metrics.sup3; + } else { + minSupShift = metrics.sup2; + } + + // scriptspace is a font-size-independent size, so scale it + // appropriately for use as the marginRight. + const multiplier = options.sizeMultiplier; + const marginRight = makeEm(0.5 / metrics.ptPerEm / multiplier); + let marginLeft = null; + if (subm) { + // Subscripts shouldn't be shifted by the base's italic correction. + // Account for that by shifting the subscript back the appropriate + // amount. Note we only do this when the base is a single symbol. + const isOiint = group.base && group.base.type === "op" && group.base.name && (group.base.name === "\\oiint" || group.base.name === "\\oiiint"); + if (base instanceof SymbolNode || isOiint) { + var _italic; + // SymbolNode has .italic natively; for \oiint/\oiiint the + // op builder stores .italic on the wrapping Span. + marginLeft = makeEm(-((_italic = base.italic) != null ? _italic : 0)); + } + } + let supsub; + if (supm && subm) { + supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight); + subShift = Math.max(subShift, metrics.sub2); + const ruleWidth = metrics.defaultRuleThickness; + + // Rule 18e + const maxWidth = 4 * ruleWidth; + if (supShift - supm.depth - (subm.height - subShift) < maxWidth) { + subShift = maxWidth - (supShift - supm.depth) + subm.height; + const psi = 0.8 * metrics.xHeight - (supShift - supm.depth); + if (psi > 0) { + supShift += psi; + subShift -= psi; + } + } + const vlistElem = [{ + type: "elem", + elem: subm, + shift: subShift, + marginRight, + marginLeft + }, { + type: "elem", + elem: supm, + shift: -supShift, + marginRight + }]; + supsub = makeVList({ + positionType: "individualShift", + children: vlistElem + }, options); + } else if (subm) { + // Rule 18b + subShift = Math.max(subShift, metrics.sub1, subm.height - 0.8 * metrics.xHeight); + const vlistElem = [{ + type: "elem", + elem: subm, + marginLeft, + marginRight + }]; + supsub = makeVList({ + positionType: "shift", + positionData: subShift, + children: vlistElem + }, options); + } else if (supm) { + // Rule 18c, d + supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight); + supsub = makeVList({ + positionType: "shift", + positionData: -supShift, + children: [{ + type: "elem", + elem: supm, + marginRight + }] + }, options); + } else { + throw new Error("supsub must have either sup or sub."); + } + + // Wrap the supsub vlist in a span.msupsub to reset text-align. + const mclass = getTypeOfDomTree(base, "right") || "mord"; + return makeSpan([mclass], [base, makeSpan(["msupsub"], [supsub])], options); + }, + mathmlBuilder(group, options) { + // Is the inner group a relevant horizontal brace? + let isBrace = false; + let isOver; + let isSup; + if (group.base && group.base.type === "horizBrace") { + isSup = !!group.sup; + if (isSup === group.base.isOver) { + isBrace = true; + isOver = group.base.isOver; + } + } + if (group.base && (group.base.type === "op" || group.base.type === "operatorname")) { + group.base.parentIsSupSub = true; + } + const children = [buildMathML_buildGroup(group.base, options)]; + if (group.sub) { + children.push(buildMathML_buildGroup(group.sub, options)); + } + if (group.sup) { + children.push(buildMathML_buildGroup(group.sup, options)); + } + let nodeType; + if (isBrace) { + nodeType = isOver ? "mover" : "munder"; + } else if (!group.sub) { + const base = group.base; + if (base && base.type === "op" && base.limits && (options.style === src_Style.DISPLAY || base.alwaysHandleSupSub)) { + nodeType = "mover"; + } else if (base && base.type === "operatorname" && base.alwaysHandleSupSub && (base.limits || options.style === src_Style.DISPLAY)) { + nodeType = "mover"; + } else { + nodeType = "msup"; + } + } else if (!group.sup) { + const base = group.base; + if (base && base.type === "op" && base.limits && (options.style === src_Style.DISPLAY || base.alwaysHandleSupSub)) { + nodeType = "munder"; + } else if (base && base.type === "operatorname" && base.alwaysHandleSupSub && (base.limits || options.style === src_Style.DISPLAY)) { + nodeType = "munder"; + } else { + nodeType = "msub"; + } + } else { + const base = group.base; + if (base && base.type === "op" && base.limits && options.style === src_Style.DISPLAY) { + nodeType = "munderover"; + } else if (base && base.type === "operatorname" && base.alwaysHandleSupSub && (options.style === src_Style.DISPLAY || base.limits)) { + nodeType = "munderover"; + } else { + nodeType = "msubsup"; + } + } + return new MathNode(nodeType, children); + } +}); +;// ./src/functions/symbolsOp.ts + + + + + +// Operator ParseNodes created in Parser.js from symbol Groups in src/symbols.js. + +defineFunctionBuilders({ + type: "atom", + htmlBuilder(group, options) { + return mathsym(group.text, group.mode, options, ["m" + group.family]); + }, + mathmlBuilder(group, options) { + const node = new MathNode("mo", [makeText(group.text, group.mode)]); + if (group.family === "bin") { + const variant = getVariant(group, options); + if (variant === "bold-italic") { + node.setAttribute("mathvariant", variant); + } + } else if (group.family === "punct") { + node.setAttribute("separator", "true"); + } else if (group.family === "open" || group.family === "close") { + // Delims built here should not stretch vertically. + // See delimsizing.js for stretchy delims. + node.setAttribute("stretchy", "false"); + } + return node; + } +}); +;// ./src/functions/symbolsOrd.ts + + + + +// "mathord" and "textord" ParseNodes created in Parser.js from symbol Groups in +// src/symbols.js. + +const defaultVariant = { + "mi": "italic", + "mn": "normal", + "mtext": "normal" +}; +defineFunctionBuilders({ + type: "mathord", + htmlBuilder(group, options) { + return makeOrd(group, options); + }, + mathmlBuilder(group, options) { + const node = new MathNode("mi", [makeText(group.text, group.mode, options)]); + const variant = getVariant(group, options) || "italic"; + if (variant !== defaultVariant[node.type]) { + node.setAttribute("mathvariant", variant); + } + return node; + } +}); +defineFunctionBuilders({ + type: "textord", + htmlBuilder(group, options) { + return makeOrd(group, options); + }, + mathmlBuilder(group, options) { + const text = makeText(group.text, group.mode, options); + const variant = getVariant(group, options) || "normal"; + let node; + if (group.mode === 'text') { + node = new MathNode("mtext", [text]); + } else if (/[0-9]/.test(group.text)) { + node = new MathNode("mn", [text]); + } else if (group.text === "\\prime") { + node = new MathNode("mo", [text]); + } else { + node = new MathNode("mi", [text]); + } + if (variant !== defaultVariant[node.type]) { + node.setAttribute("mathvariant", variant); + } + return node; + } +}); +;// ./src/functions/symbolsSpacing.ts + + + + + +// A map of CSS-based spacing functions to their CSS class. +const cssSpace = new Map([["\\nobreak", "nobreak"], ["\\allowbreak", "allowbreak"]]); + +// A lookup table to determine whether a spacing function/symbol should be +// treated like a regular space character. If a symbol or command is a key +// in this table, then it should be a regular space character. Furthermore, +// the associated value may have a `className` specifying an extra CSS class +// to add to the created `span`. +const regularSpace = new Map([[" ", {}], ["\\ ", {}], ["~", { + className: "nobreak" +}], ["\\space", {}], ["\\nobreakspace", { + className: "nobreak" +}]]); + +// ParseNode<"spacing"> created in Parser.js from the "spacing" symbol Groups in +// src/symbols.js. +defineFunctionBuilders({ + type: "spacing", + htmlBuilder(group, options) { + const regularSpaceItem = regularSpace.get(group.text); + const cssSpaceClass = cssSpace.get(group.text); + if (regularSpaceItem) { + const className = regularSpaceItem.className || ""; + // Spaces are generated by adding an actual space. Each of these + // things has an entry in the symbols table, so these will be turned + // into appropriate outputs. + if (group.mode === "text") { + const ord = makeOrd(group, options); + ord.classes.push(className); + return ord; + } else { + return makeSpan(["mspace", className], [mathsym(group.text, group.mode, options)], options); + } + } else if (cssSpaceClass) { + // Spaces based on just a CSS class. + return makeSpan(["mspace", cssSpaceClass], [], options); + } else { + throw new src_ParseError("Unknown type of space \"" + group.text + "\""); + } + }, + mathmlBuilder(group, options) { + let node; + if (regularSpace.has(group.text)) { + node = new MathNode("mtext", [new TextNode("\u00a0")]); + } else if (cssSpace.has(group.text)) { + // CSS-based MathML spaces (\nobreak, \allowbreak) are ignored + return new MathNode("mspace"); + } else { + throw new src_ParseError("Unknown type of space \"" + group.text + "\""); + } + return node; + } +}); +;// ./src/functions/tag.ts + + + +const pad = () => { + const padNode = new MathNode("mtd", []); + padNode.setAttribute("width", "50%"); + return padNode; +}; +defineFunctionBuilders({ + type: "tag", + mathmlBuilder(group, options) { + const table = new MathNode("mtable", [new MathNode("mtr", [pad(), new MathNode("mtd", [buildExpressionRow(group.body, options)]), pad(), new MathNode("mtd", [buildExpressionRow(group.tag, options)])])]); + table.setAttribute("width", "100%"); + return table; + + // TODO: Left-aligned tags. + // Currently, the group and options passed here do not contain + // enough info to set tag alignment. `leqno` is in Settings but it is + // not passed to Options. On the HTML side, leqno is + // set by a CSS class applied in buildTree.js. That would have worked + // in MathML if browsers supported . Since they don't, we + // need to rewrite the way this function is called. + } +}); +;// ./src/functions/text.ts + + + + +// Non-mathy text, possibly in a font +const textFontFamilies = { + "\\text": undefined, + "\\textrm": "textrm", + "\\textsf": "textsf", + "\\texttt": "texttt", + "\\textnormal": "textrm" +}; +const textFontWeights = { + "\\textbf": "textbf", + "\\textmd": "textmd" +}; +const textFontShapes = { + "\\textit": "textit", + "\\textup": "textup" +}; +const optionsWithFont = (group, options) => { + const font = group.font; + // Checks if the argument is a font family or a font style. + if (!font) { + return options; + } else if (textFontFamilies[font]) { + return options.withTextFontFamily(textFontFamilies[font]); + } else if (textFontWeights[font]) { + return options.withTextFontWeight(textFontWeights[font]); + } else if (font === "\\emph") { + return options.fontShape === "textit" ? options.withTextFontShape("textup") : options.withTextFontShape("textit"); + } + return options.withTextFontShape(textFontShapes[font]); +}; +defineFunction({ + type: "text", + names: [ + // Font families + "\\text", "\\textrm", "\\textsf", "\\texttt", "\\textnormal", + // Font weights + "\\textbf", "\\textmd", + // Font Shapes + "\\textit", "\\textup", "\\emph"], + numArgs: 1, + argTypes: ["text"], + allowedInArgument: true, + allowedInText: true, + handler(_ref, args) { + let parser = _ref.parser, + funcName = _ref.funcName; + const body = args[0]; + return { + type: "text", + mode: parser.mode, + body: ordargument(body), + font: funcName + }; + }, + htmlBuilder(group, options) { + const newOptions = optionsWithFont(group, options); + const inner = buildExpression(group.body, newOptions, true); + return makeSpan(["mord", "text"], inner, newOptions); + }, + mathmlBuilder(group, options) { + const newOptions = optionsWithFont(group, options); + return buildExpressionRow(group.body, newOptions); + } +}); +;// ./src/functions/underline.ts + + + + + +defineFunction({ + type: "underline", + names: ["\\underline"], + numArgs: 1, + allowedInText: true, + handler(_ref, args) { + let parser = _ref.parser; + return { + type: "underline", + mode: parser.mode, + body: args[0] + }; + }, + htmlBuilder(group, options) { + // Underlines are handled in the TeXbook pg 443, Rule 10. + // Build the inner group. + const innerGroup = buildGroup(group.body, options); + + // Create the line to go below the body + const line = makeLineSpan("underline-line", options); + + // Generate the vlist, with the appropriate kerns + const defaultRuleThickness = options.fontMetrics().defaultRuleThickness; + const vlist = makeVList({ + positionType: "top", + positionData: innerGroup.height, + children: [{ + type: "kern", + size: defaultRuleThickness + }, { + type: "elem", + elem: line + }, { + type: "kern", + size: 3 * defaultRuleThickness + }, { + type: "elem", + elem: innerGroup + }] + }, options); + return makeSpan(["mord", "katex-underline"], [vlist], options); + }, + mathmlBuilder(group, options) { + const operator = new MathNode("mo", [new TextNode("\u203e")]); + operator.setAttribute("stretchy", "true"); + const node = new MathNode("munder", [buildMathML_buildGroup(group.body, options), operator]); + node.setAttribute("accentunder", "true"); + return node; + } +}); +;// ./src/functions/vcenter.ts + + + + + + +// \vcenter: Vertically center the argument group on the math axis. + +defineFunction({ + type: "vcenter", + names: ["\\vcenter"], + numArgs: 1, + argTypes: ["original"], + // In LaTeX, \vcenter can act only on a box. + allowedInText: false, + handler(_ref, args) { + let parser = _ref.parser; + return { + type: "vcenter", + mode: parser.mode, + body: args[0] + }; + }, + htmlBuilder(group, options) { + const body = buildGroup(group.body, options); + const axisHeight = options.fontMetrics().axisHeight; + const dy = 0.5 * (body.height - axisHeight - (body.depth + axisHeight)); + return makeVList({ + positionType: "shift", + positionData: dy, + children: [{ + type: "elem", + elem: body + }] + }, options); + }, + mathmlBuilder(group, options) { + // There is no way to do this in MathML. + // Write a class as a breadcrumb in case some post-processor wants + // to perform a vcenter adjustment. + // Wrap in mrow to ensure valid MathML when placed inside mo (e.g., \mathrel) + const mpadded = new MathNode("mpadded", [buildMathML_buildGroup(group.body, options)], ["vcenter"]); + return new MathNode("mrow", [mpadded]); + } +}); +;// ./src/functions/verb.ts + + + + +defineFunction({ + type: "verb", + names: ["\\verb"], + numArgs: 0, + allowedInText: true, + handler(context, args, optArgs) { + // \verb and \verb* are dealt with directly in Parser.js. + // If we end up here, it's because of a failure to match the two delimiters + // in the regex in Lexer.js. LaTeX raises the following error when \verb is + // terminated by end of line (or file). + throw new src_ParseError("\\verb ended by end of line instead of matching delimiter"); + }, + htmlBuilder(group, options) { + const text = makeVerb(group); + const body = []; + // \verb enters text mode and therefore is sized like \textstyle + const newOptions = options.havingStyle(options.style.text()); + for (let i = 0; i < text.length; i++) { + let c = text[i]; + if (c === '~') { + c = '\\textasciitilde'; + } + body.push(makeSymbol(c, "Typewriter-Regular", group.mode, newOptions, ["mord", "texttt"])); + } + return makeSpan(["mord", "text"].concat(newOptions.sizingClasses(options)), tryCombineChars(body), newOptions); + }, + mathmlBuilder(group, options) { + const text = new TextNode(makeVerb(group)); + const node = new MathNode("mtext", [text]); + node.setAttribute("mathvariant", "monospace"); + return node; + } +}); + +/** + * Converts verb group into body string. + * + * \verb* replaces each space with an open box \u2423 + * \verb replaces each space with a no-break space \xA0 + */ +const makeVerb = group => group.body.replace(/ /g, group.star ? '\u2423' : '\xA0'); +;// ./src/functions.ts +/** Include this to ensure that all functions are defined. */ + +const functions = _functions; +/* harmony default export */ var src_functions = (functions); + +// TODO(kevinb): have functions return an object and call defineFunction with +// that object in this file instead of relying on side-effects. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +;// ./src/Lexer.ts +/** + * The Lexer class handles tokenizing the input in various ways. Since our + * parser expects us to be able to backtrack, the lexer allows lexing from any + * given starting point. + * + * Its main exposed function is the `lex` function, which takes a position to + * lex from and a type of token to lex. It defers to the appropriate `_innerLex` + * function. + * + * The various `_innerLex` functions perform the actual lexing of different + * kinds. + */ + + + + + +/* The following tokenRegex + * - matches typical whitespace (but not NBSP etc.) using its first group + * - does not match any control character \x00-\x1f except whitespace + * - does not match a bare backslash + * - matches any ASCII character except those just mentioned + * - does not match the BMP private use area \uE000-\uF8FF + * - does not match bare surrogate code units + * - matches any BMP character except for those just described + * - matches any valid Unicode surrogate pair + * - matches a backslash followed by one or more whitespace characters + * - matches a backslash followed by one or more letters then whitespace + * - matches a backslash followed by any BMP character + * Capturing groups: + * [1] regular whitespace + * [2] backslash followed by whitespace + * [3] anything else, which may include: + * [4] left character of \verb* + * [5] left character of \verb + * [6] backslash followed by word, excluding any trailing whitespace + * Just because the Lexer matches something doesn't mean it's valid input: + * If there is no matching function or symbol definition, the Parser will + * still reject the input. + */ +const spaceRegexString = "[ \r\n\t]"; +const controlWordRegexString = "\\\\[a-zA-Z@]+"; +const controlSymbolRegexString = "\\\\[^\uD800-\uDFFF]"; +const controlWordWhitespaceRegexString = "(" + controlWordRegexString + ")" + spaceRegexString + "*"; +const controlSpaceRegexString = "\\\\(\n|[ \r\t]+\n?)[ \r\t]*"; +const combiningDiacriticalMarkString = "[\u0300-\u036f]"; +const combiningDiacriticalMarksEndRegex = new RegExp(combiningDiacriticalMarkString + "+$"); +const tokenRegexString = "(" + spaceRegexString + "+)|" + (// whitespace +controlSpaceRegexString + "|") + +// \whitespace +"([!-\\[\\]-\u2027\u202A-\uD7FF\uF900-\uFFFF]" + (// single codepoint +combiningDiacriticalMarkString + "*") + +// ...plus accents +"|[\uD800-\uDBFF][\uDC00-\uDFFF]" + (// surrogate pair +combiningDiacriticalMarkString + "*") + +// ...plus accents +"|\\\\verb\\*([^]).*?\\4" + +// \verb* +"|\\\\verb([^*a-zA-Z]).*?\\5" + (// \verb unstarred +"|" + controlWordWhitespaceRegexString) + (// \macroName + spaces +"|" + controlSymbolRegexString + ")"); // \\, \', etc. + +/** Main Lexer class */ +class Lexer { + constructor(input, settings) { + this.input = void 0; + this.settings = void 0; + this.tokenRegex = void 0; + // Category codes. The lexer only supports comment characters (14) for now. + // MacroExpander additionally distinguishes active (13). + this.catcodes = void 0; + // Separate accents from characters + this.input = input; + this.settings = settings; + this.tokenRegex = new RegExp(tokenRegexString, 'g'); + this.catcodes = { + "%": 14, + // comment character + "~": 13 // active character + }; + } + setCatcode(char, code) { + this.catcodes[char] = code; + } + + /** + * This function lexes a single token. + */ + lex() { + const input = this.input; + const pos = this.tokenRegex.lastIndex; + if (pos === input.length) { + return new Token("EOF", new SourceLocation(this, pos, pos)); + } + const match = this.tokenRegex.exec(input); + if (match === null || match.index !== pos) { + throw new src_ParseError("Unexpected character: '" + input[pos] + "'", new Token(input[pos], new SourceLocation(this, pos, pos + 1))); + } + const text = match[6] || match[3] || (match[2] ? "\\ " : " "); + if (this.catcodes[text] === 14) { + // comment character + const nlIndex = input.indexOf('\n', this.tokenRegex.lastIndex); + if (nlIndex === -1) { + this.tokenRegex.lastIndex = input.length; // EOF + handleStrict({ + strict: this.settings.strict, + errorCode: "commentAtEnd", + errorMsg: "% comment has no terminating newline; LaTeX would " + "fail because of commenting the end of math mode (e.g. $)", + report: true + }); + } else { + this.tokenRegex.lastIndex = nlIndex + 1; + } + return this.lex(); + } + return new Token(text, new SourceLocation(this, pos, this.tokenRegex.lastIndex)); + } +} +;// ./src/Namespace.ts +/** + * A `Namespace` refers to a space of nameable things like macros or lengths, + * which can be `set` either globally or local to a nested group, using an + * undo stack similar to how TeX implements this functionality. + * Performance-wise, `get` and local `set` take constant time, while global + * `set` takes time proportional to the depth of group nesting. + */ + + +class Namespace { + /** + * Both arguments are optional. The first argument is an object of + * built-in mappings which never change. The second argument is an object + * of initial (global-level) mappings, which will constantly change + * according to any global/top-level `set`s done. + */ + constructor(builtins, globalMacros) { + if (builtins === void 0) { + builtins = {}; + } + if (globalMacros === void 0) { + globalMacros = {}; + } + this.current = void 0; + this.builtins = void 0; + this.undefStack = void 0; + this.current = globalMacros; + this.builtins = builtins; + this.undefStack = []; + } + + /** + * Start a new nested group, affecting future local `set`s. + */ + beginGroup() { + this.undefStack.push({}); + } + + /** + * End current nested group, restoring values before the group began. + */ + endGroup() { + if (this.undefStack.length === 0) { + throw new src_ParseError("Unbalanced namespace destruction: attempt " + "to pop global namespace; please report this as a bug"); + } + const undefs = this.undefStack.pop(); + for (const key of Object.keys(undefs)) { + if (undefs[key] === undefined) { + delete this.current[key]; + } else { + this.current[key] = undefs[key]; + } + } + } + + /** + * Ends all currently nested groups (if any), restoring values before the + * groups began. Useful in case of an error in the middle of parsing. + */ + endGroups() { + while (this.undefStack.length > 0) { + this.endGroup(); + } + } + + /** + * Detect whether `name` has a definition. Equivalent to + * `get(name) != null`. + */ + has(name) { + return Object.prototype.hasOwnProperty.call(this.current, name) || Object.prototype.hasOwnProperty.call(this.builtins, name); + } + + /** + * Get the current value of a name, or `undefined` if there is no value. + * + * Note: Do not use `if (namespace.get(...))` to detect whether a macro + * is defined, as the definition may be the empty string which evaluates + * to `false` in JavaScript. Use `if (namespace.get(...) != null)` or + * `if (namespace.has(...))`. + */ + get(name) { + if (Object.prototype.hasOwnProperty.call(this.current, name)) { + return this.current[name]; + } else if (Object.prototype.hasOwnProperty.call(this.builtins, name)) { + return this.builtins[name]; + } else { + return undefined; + } + } + + /** + * Set the current value of a name, and optionally set it globally too. + * Local set() sets the current value and (when appropriate) adds an undo + * operation to the undo stack. Global set() may change the undo + * operation at every level, so takes time linear in their number. + * A value of undefined means to delete existing definitions. + */ + set(name, value, global) { + if (global === void 0) { + global = false; + } + if (global) { + // Global set is equivalent to setting in all groups. Simulate this + // by destroying any undos currently scheduled for this name, + // and adding an undo with the *new* value (in case it later gets + // locally reset within this environment). + for (let i = 0; i < this.undefStack.length; i++) { + delete this.undefStack[i][name]; + } + if (this.undefStack.length > 0) { + this.undefStack[this.undefStack.length - 1][name] = value; + } + } else { + // Undo this set at end of this group (possibly to `undefined`), + // unless an undo is already in place, in which case that older + // value is the correct one. + const top = this.undefStack[this.undefStack.length - 1]; + if (top && !Object.prototype.hasOwnProperty.call(top, name)) { + top[name] = Object.prototype.hasOwnProperty.call(this.current, name) ? this.current[name] : undefined; + } + } + if (value == null) { + delete this.current[name]; + } else { + this.current[name] = value; + } + } +} +;// ./src/macros.ts +/** + * Predefined macros for KaTeX. + * This can be used to define some commands in terms of others. + */ + +// Export global macros object from defineMacro + +const macros = _macros; +/* harmony default export */ var src_macros = (macros); + + + + + +////////////////////////////////////////////////////////////////////// +// macro tools + +defineMacro("\\noexpand", function (context) { + // The expansion is the token itself; but that token is interpreted + // as if its meaning were ‘\relax’ if it is a control sequence that + // would ordinarily be expanded by TeX’s expansion rules. + const t = context.popToken(); + if (context.isExpandable(t.text)) { + t.noexpand = true; + t.treatAsRelax = true; + } + return { + tokens: [t], + numArgs: 0 + }; +}); +defineMacro("\\expandafter", function (context) { + // TeX first reads the token that comes immediately after \expandafter, + // without expanding it; let’s call this token t. Then TeX reads the + // token that comes after t (and possibly more tokens, if that token + // has an argument), replacing it by its expansion. Finally TeX puts + // t back in front of that expansion. + const t = context.popToken(); + context.expandOnce(true); // expand only an expandable token + return { + tokens: [t], + numArgs: 0 + }; +}); + +// LaTeX's \@firstoftwo{#1}{#2} expands to #1, skipping #2 +// TeX source: \long\def\@firstoftwo#1#2{#1} +defineMacro("\\@firstoftwo", function (context) { + const args = context.consumeArgs(2); + return { + tokens: args[0], + numArgs: 0 + }; +}); + +// LaTeX's \@secondoftwo{#1}{#2} expands to #2, skipping #1 +// TeX source: \long\def\@secondoftwo#1#2{#2} +defineMacro("\\@secondoftwo", function (context) { + const args = context.consumeArgs(2); + return { + tokens: args[1], + numArgs: 0 + }; +}); + +// LaTeX's \@ifnextchar{#1}{#2}{#3} looks ahead to the next (unexpanded) +// symbol that isn't a space, consuming any spaces but not consuming the +// first nonspace character. If that nonspace character matches #1, then +// the macro expands to #2; otherwise, it expands to #3. +defineMacro("\\@ifnextchar", function (context) { + const args = context.consumeArgs(3); // symbol, if, else + context.consumeSpaces(); + const nextToken = context.future(); + if (args[0].length === 1 && args[0][0].text === nextToken.text) { + return { + tokens: args[1], + numArgs: 0 + }; + } else { + return { + tokens: args[2], + numArgs: 0 + }; + } +}); + +// LaTeX's \@ifstar{#1}{#2} looks ahead to the next (unexpanded) symbol. +// If it is `*`, then it consumes the symbol, and the macro expands to #1; +// otherwise, the macro expands to #2 (without consuming the symbol). +// TeX source: \def\@ifstar#1{\@ifnextchar *{\@firstoftwo{#1}}} +defineMacro("\\@ifstar", "\\@ifnextchar *{\\@firstoftwo{#1}}"); + +// LaTeX's \TextOrMath{#1}{#2} expands to #1 in text mode, #2 in math mode +defineMacro("\\TextOrMath", function (context) { + const args = context.consumeArgs(2); + if (context.mode === 'text') { + return { + tokens: args[0], + numArgs: 0 + }; + } else { + return { + tokens: args[1], + numArgs: 0 + }; + } +}); + +// Lookup table for parsing numbers in base 8 through 16 +const digitToNumber = { + "0": 0, + "1": 1, + "2": 2, + "3": 3, + "4": 4, + "5": 5, + "6": 6, + "7": 7, + "8": 8, + "9": 9, + "a": 10, + "A": 10, + "b": 11, + "B": 11, + "c": 12, + "C": 12, + "d": 13, + "D": 13, + "e": 14, + "E": 14, + "f": 15, + "F": 15 +}; + +// TeX \char makes a literal character (catcode 12) using the following forms: +// (see The TeXBook, p. 43) +// \char123 -- decimal +// \char'123 -- octal +// \char"123 -- hex +// \char`x -- character that can be written (i.e. isn't active) +// \char`\x -- character that cannot be written (e.g. %) +// These all refer to characters from the font, so we turn them into special +// calls to a function \@char dealt with in the Parser. +defineMacro("\\char", function (context) { + let token = context.popToken(); + let base; + let number = 0; + if (token.text === "'") { + base = 8; + token = context.popToken(); + } else if (token.text === '"') { + base = 16; + token = context.popToken(); + } else if (token.text === "`") { + token = context.popToken(); + if (token.text[0] === "\\") { + number = token.text.charCodeAt(1); + } else if (token.text === "EOF") { + throw new src_ParseError("\\char` missing argument"); + } else { + number = token.text.charCodeAt(0); + } + } else { + base = 10; + } + if (base) { + // Parse a number in the given base, starting with first `token`. + number = digitToNumber[token.text]; + if (number == null || number >= base) { + throw new src_ParseError("Invalid base-" + base + " digit " + token.text); + } + let digit; + while ((digit = digitToNumber[context.future().text]) != null && digit < base) { + number *= base; + number += digit; + context.popToken(); + } + } + return "\\@char{" + number + "}"; +}); + +// \newcommand{\macro}[args]{definition} +// \renewcommand{\macro}[args]{definition} +// TODO: Optional arguments: \newcommand{\macro}[args][default]{definition} +const newcommand = (context, existsOK, nonexistsOK, skipIfExists) => { + let arg = context.consumeArg().tokens; + if (arg.length !== 1) { + throw new src_ParseError("\\newcommand's first argument must be a macro name"); + } + const name = arg[0].text; + const exists = context.isDefined(name); + if (exists && !existsOK) { + throw new src_ParseError("\\newcommand{" + name + "} attempting to redefine " + (name + "; use \\renewcommand")); + } + if (!exists && !nonexistsOK) { + throw new src_ParseError("\\renewcommand{" + name + "} when command " + name + " " + "does not yet exist; use \\newcommand"); + } + let numArgs = 0; + arg = context.consumeArg().tokens; + if (arg.length === 1 && arg[0].text === "[") { + let argText = ''; + let token = context.expandNextToken(); + while (token.text !== "]" && token.text !== "EOF") { + // TODO: Should properly expand arg, e.g., ignore {}s + argText += token.text; + token = context.expandNextToken(); + } + if (!argText.match(/^\s*[0-9]+\s*$/)) { + throw new src_ParseError("Invalid number of arguments: " + argText); + } + numArgs = parseInt(argText); + arg = context.consumeArg().tokens; + } + if (!(exists && skipIfExists)) { + // Final arg is the expansion of the macro + context.macros.set(name, { + tokens: arg, + numArgs + }); + } + return ''; +}; +defineMacro("\\newcommand", context => newcommand(context, false, true, false)); +defineMacro("\\renewcommand", context => newcommand(context, true, false, false)); +defineMacro("\\providecommand", context => newcommand(context, true, true, true)); + +// terminal (console) tools +defineMacro("\\message", context => { + const arg = context.consumeArgs(1)[0]; + // eslint-disable-next-line no-console + console.log(arg.reverse().map(token => token.text).join("")); + return ''; +}); +defineMacro("\\errmessage", context => { + const arg = context.consumeArgs(1)[0]; + // eslint-disable-next-line no-console + console.error(arg.reverse().map(token => token.text).join("")); + return ''; +}); +defineMacro("\\show", context => { + const tok = context.popToken(); + const name = tok.text; + // eslint-disable-next-line no-console + console.log(tok, context.macros.get(name), src_functions[name], src_symbols.math[name], src_symbols.text[name]); + return ''; +}); + +////////////////////////////////////////////////////////////////////// +// Grouping +// \let\bgroup={ \let\egroup=} +defineMacro("\\bgroup", "{"); +defineMacro("\\egroup", "}"); + +// Symbols from latex.ltx: +// \def~{\nobreakspace{}} +// \def\lq{`} +// \def\rq{'} +// \def \aa {\r a} +// \def \AA {\r A} +defineMacro("~", "\\nobreakspace"); +defineMacro("\\lq", "`"); +defineMacro("\\rq", "'"); +defineMacro("\\aa", "\\r a"); +defineMacro("\\AA", "\\r A"); + +// Copyright (C) and registered (R) symbols. Use raw symbol in MathML. +// \DeclareTextCommandDefault{\textcopyright}{\textcircled{c}} +// \DeclareTextCommandDefault{\textregistered}{\textcircled{% +// \check@mathfonts\fontsize\sf@size\z@\math@fontsfalse\selectfont R}} +// \DeclareRobustCommand{\copyright}{% +// \ifmmode{\nfss@text{\textcopyright}}\else\textcopyright\fi} +defineMacro("\\textcopyright", "\\html@mathml{\\textcircled{c}}{\\char`©}"); +defineMacro("\\copyright", "\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}"); +defineMacro("\\textregistered", "\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`®}"); + +// Characters omitted from Unicode range 1D400–1D7FF +defineMacro("\u212C", "\\mathscr{B}"); // script +defineMacro("\u2130", "\\mathscr{E}"); +defineMacro("\u2131", "\\mathscr{F}"); +defineMacro("\u210B", "\\mathscr{H}"); +defineMacro("\u2110", "\\mathscr{I}"); +defineMacro("\u2112", "\\mathscr{L}"); +defineMacro("\u2133", "\\mathscr{M}"); +defineMacro("\u211B", "\\mathscr{R}"); +defineMacro("\u212D", "\\mathfrak{C}"); // Fraktur +defineMacro("\u210C", "\\mathfrak{H}"); +defineMacro("\u2128", "\\mathfrak{Z}"); + +// Define \Bbbk with a macro that works in both HTML and MathML. +defineMacro("\\Bbbk", "\\Bbb{k}"); + +// \llap and \rlap render their contents in text mode +defineMacro("\\llap", "\\mathllap{\\textrm{#1}}"); +defineMacro("\\rlap", "\\mathrlap{\\textrm{#1}}"); +defineMacro("\\clap", "\\mathclap{\\textrm{#1}}"); + +// \mathstrut from the TeXbook, p 360 +defineMacro("\\mathstrut", "\\vphantom{(}"); + +// \underbar from TeXbook p 353 +defineMacro("\\underbar", "\\underline{\\text{#1}}"); + +// \not is defined by base/fontmath.ltx via +// \DeclareMathSymbol{\not}{\mathrel}{symbols}{"36} +// It's thus treated like a \mathrel, but defined by a symbol that has zero +// width but extends to the right. We use \rlap to get that spacing. +// For MathML we write U+0338 here. buildMathML.js will then do the overlay. +defineMacro("\\not", "\\html@mathml{\\mathrel{\\mathrlap\\@not}\\nobreak}" + "{\\char\"338}"); + +// Negated symbols from base/fontmath.ltx: +// \def\neq{\not=} \let\ne=\neq +// \DeclareRobustCommand +// \notin{\mathrel{\m@th\mathpalette\c@ncel\in}} +// \def\c@ncel#1#2{\m@th\ooalign{$\hfil#1\mkern1mu/\hfil$\crcr$#1#2$}} +defineMacro("\\neq", "\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`≠}}"); +defineMacro("\\ne", "\\neq"); +defineMacro("\u2260", "\\neq"); +defineMacro("\\notin", "\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}" + "{\\mathrel{\\char`∉}}"); +defineMacro("\u2209", "\\notin"); + +// Unicode stacked relations +defineMacro("\u2258", "\\html@mathml{" + "\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}" + "}{\\mathrel{\\char`\u2258}}"); +defineMacro("\u2259", "\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`\u2258}}"); +defineMacro("\u225A", "\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`\u225A}}"); +defineMacro("\u225B", "\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}" + "{\\mathrel{\\char`\u225B}}"); +defineMacro("\u225D", "\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}" + "{\\mathrel{\\char`\u225D}}"); +defineMacro("\u225E", "\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}" + "{\\mathrel{\\char`\u225E}}"); +defineMacro("\u225F", "\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`\u225F}}"); + +// Misc Unicode +defineMacro("\u27C2", "\\perp"); +defineMacro("\u203C", "\\mathclose{!\\mkern-0.8mu!}"); +defineMacro("\u220C", "\\notni"); +defineMacro("\u231C", "\\ulcorner"); +defineMacro("\u231D", "\\urcorner"); +defineMacro("\u231E", "\\llcorner"); +defineMacro("\u231F", "\\lrcorner"); +defineMacro("\u00A9", "\\copyright"); +defineMacro("\u00AE", "\\textregistered"); + +// The KaTeX fonts have corners at codepoints that don't match Unicode. +// For MathML purposes, use the Unicode code point. +defineMacro("\\ulcorner", "\\html@mathml{\\@ulcorner}{\\mathop{\\char\"231c}}"); +defineMacro("\\urcorner", "\\html@mathml{\\@urcorner}{\\mathop{\\char\"231d}}"); +defineMacro("\\llcorner", "\\html@mathml{\\@llcorner}{\\mathop{\\char\"231e}}"); +defineMacro("\\lrcorner", "\\html@mathml{\\@lrcorner}{\\mathop{\\char\"231f}}"); + +////////////////////////////////////////////////////////////////////// +// LaTeX_2ε + +// \vdots{\vbox{\baselineskip4\p@ \lineskiplimit\z@ +// \kern6\p@\hbox{.}\hbox{.}\hbox{.}}} +// We'll call \varvdots, which gets a glyph from symbols.js. +// The zero-width rule gets us an equivalent to the vertical 6pt kern. +defineMacro("\\vdots", "{\\varvdots\\rule{0pt}{15pt}}"); +defineMacro("\u22ee", "\\vdots"); + +////////////////////////////////////////////////////////////////////// +// amsmath.sty +// http://mirrors.concertpass.com/tex-archive/macros/latex/required/amsmath/amsmath.pdf + +// Italic Greek capital letters. AMS defines these with \DeclareMathSymbol, +// but they are equivalent to \mathit{\Letter}. +defineMacro("\\varGamma", "\\mathit{\\Gamma}"); +defineMacro("\\varDelta", "\\mathit{\\Delta}"); +defineMacro("\\varTheta", "\\mathit{\\Theta}"); +defineMacro("\\varLambda", "\\mathit{\\Lambda}"); +defineMacro("\\varXi", "\\mathit{\\Xi}"); +defineMacro("\\varPi", "\\mathit{\\Pi}"); +defineMacro("\\varSigma", "\\mathit{\\Sigma}"); +defineMacro("\\varUpsilon", "\\mathit{\\Upsilon}"); +defineMacro("\\varPhi", "\\mathit{\\Phi}"); +defineMacro("\\varPsi", "\\mathit{\\Psi}"); +defineMacro("\\varOmega", "\\mathit{\\Omega}"); + +//\newcommand{\substack}[1]{\subarray{c}#1\endsubarray} +defineMacro("\\substack", "\\begin{subarray}{c}#1\\end{subarray}"); + +// \renewcommand{\colon}{\nobreak\mskip2mu\mathpunct{}\nonscript +// \mkern-\thinmuskip{:}\mskip6muplus1mu\relax} +defineMacro("\\colon", "\\nobreak\\mskip2mu\\mathpunct{}" + "\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu\\relax"); + +// \newcommand{\boxed}[1]{\fbox{\m@th$\displaystyle#1$}} +defineMacro("\\boxed", "\\fbox{$\\displaystyle{#1}$}"); + +// \def\iff{\DOTSB\;\Longleftrightarrow\;} +// \def\implies{\DOTSB\;\Longrightarrow\;} +// \def\impliedby{\DOTSB\;\Longleftarrow\;} +defineMacro("\\iff", "\\DOTSB\\;\\Longleftrightarrow\\;"); +defineMacro("\\implies", "\\DOTSB\\;\\Longrightarrow\\;"); +defineMacro("\\impliedby", "\\DOTSB\\;\\Longleftarrow\\;"); + +// \def\dddot#1{{\mathop{#1}\limits^{\vbox to-1.4\ex@{\kern-\tw@\ex@ +// \hbox{\normalfont ...}\vss}}}} +// We use \overset which avoids the vertical shift of \mathop. +defineMacro("\\dddot", "{\\overset{\\raisebox{-0.1ex}{\\normalsize ...}}{#1}}"); +defineMacro("\\ddddot", "{\\overset{\\raisebox{-0.1ex}{\\normalsize ....}}{#1}}"); + +// AMSMath's automatic \dots, based on \mdots@@ macro. +const dotsByToken = { + ',': '\\dotsc', + '\\not': '\\dotsb', + // \keybin@ checks for the following: + '+': '\\dotsb', + '=': '\\dotsb', + '<': '\\dotsb', + '>': '\\dotsb', + '-': '\\dotsb', + '*': '\\dotsb', + ':': '\\dotsb', + // Symbols whose definition starts with \DOTSB: + '\\DOTSB': '\\dotsb', + '\\coprod': '\\dotsb', + '\\bigvee': '\\dotsb', + '\\bigwedge': '\\dotsb', + '\\biguplus': '\\dotsb', + '\\bigcap': '\\dotsb', + '\\bigcup': '\\dotsb', + '\\prod': '\\dotsb', + '\\sum': '\\dotsb', + '\\bigotimes': '\\dotsb', + '\\bigoplus': '\\dotsb', + '\\bigodot': '\\dotsb', + '\\bigsqcup': '\\dotsb', + '\\And': '\\dotsb', + '\\longrightarrow': '\\dotsb', + '\\Longrightarrow': '\\dotsb', + '\\longleftarrow': '\\dotsb', + '\\Longleftarrow': '\\dotsb', + '\\longleftrightarrow': '\\dotsb', + '\\Longleftrightarrow': '\\dotsb', + '\\mapsto': '\\dotsb', + '\\longmapsto': '\\dotsb', + '\\hookrightarrow': '\\dotsb', + '\\doteq': '\\dotsb', + // Symbols whose definition starts with \mathbin: + '\\mathbin': '\\dotsb', + // Symbols whose definition starts with \mathrel: + '\\mathrel': '\\dotsb', + '\\relbar': '\\dotsb', + '\\Relbar': '\\dotsb', + '\\xrightarrow': '\\dotsb', + '\\xleftarrow': '\\dotsb', + // Symbols whose definition starts with \DOTSI: + '\\DOTSI': '\\dotsi', + '\\int': '\\dotsi', + '\\oint': '\\dotsi', + '\\iint': '\\dotsi', + '\\iiint': '\\dotsi', + '\\iiiint': '\\dotsi', + '\\idotsint': '\\dotsi', + // Symbols whose definition starts with \DOTSX: + '\\DOTSX': '\\dotsx' +}; +const dotsbGroups = new Set(['bin', 'rel']); +defineMacro("\\dots", function (context) { + // TODO: If used in text mode, should expand to \textellipsis. + // However, in KaTeX, \textellipsis and \ldots behave the same + // (in text mode), and it's unlikely we'd see any of the math commands + // that affect the behavior of \dots when in text mode. So fine for now + // (until we support \ifmmode ... \else ... \fi). + let thedots = '\\dotso'; + const next = context.expandAfterFuture().text; + if (next in dotsByToken) { + thedots = dotsByToken[next]; + } else if (next.slice(0, 4) === '\\not') { + thedots = '\\dotsb'; + } else if (next in src_symbols.math) { + if (dotsbGroups.has(src_symbols.math[next].group)) { + thedots = '\\dotsb'; + } + } + return thedots; +}); +const spaceAfterDots = { + // \rightdelim@ checks for the following: + ')': true, + ']': true, + '\\rbrack': true, + '\\}': true, + '\\rbrace': true, + '\\rangle': true, + '\\rceil': true, + '\\rfloor': true, + '\\rgroup': true, + '\\rmoustache': true, + '\\right': true, + '\\bigr': true, + '\\biggr': true, + '\\Bigr': true, + '\\Biggr': true, + // \extra@ also tests for the following: + '$': true, + // \extrap@ checks for the following: + ';': true, + '.': true, + ',': true +}; +defineMacro("\\dotso", function (context) { + const next = context.future().text; + if (next in spaceAfterDots) { + return "\\ldots\\,"; + } else { + return "\\ldots"; + } +}); +defineMacro("\\dotsc", function (context) { + const next = context.future().text; + // \dotsc uses \extra@ but not \extrap@, instead specially checking for + // ';' and '.', but doesn't check for ','. + if (next in spaceAfterDots && next !== ',') { + return "\\ldots\\,"; + } else { + return "\\ldots"; + } +}); +defineMacro("\\cdots", function (context) { + const next = context.future().text; + if (next in spaceAfterDots) { + return "\\@cdots\\,"; + } else { + return "\\@cdots"; + } +}); +defineMacro("\\dotsb", "\\cdots"); +defineMacro("\\dotsm", "\\cdots"); +defineMacro("\\dotsi", "\\!\\cdots"); +// amsmath doesn't actually define \dotsx, but \dots followed by a macro +// starting with \DOTSX implies \dotso, and then \extra@ detects this case +// and forces the added `\,`. +defineMacro("\\dotsx", "\\ldots\\,"); + +// \let\DOTSI\relax +// \let\DOTSB\relax +// \let\DOTSX\relax +defineMacro("\\DOTSI", "\\relax"); +defineMacro("\\DOTSB", "\\relax"); +defineMacro("\\DOTSX", "\\relax"); + +// Spacing, based on amsmath.sty's override of LaTeX defaults +// \DeclareRobustCommand{\tmspace}[3]{% +// \ifmmode\mskip#1#2\else\kern#1#3\fi\relax} +defineMacro("\\tmspace", "\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax"); +// \renewcommand{\,}{\tmspace+\thinmuskip{.1667em}} +// TODO: math mode should use \thinmuskip +defineMacro("\\,", "\\tmspace+{3mu}{.1667em}"); +// \let\thinspace\, +defineMacro("\\thinspace", "\\,"); +// \def\>{\mskip\medmuskip} +// \renewcommand{\:}{\tmspace+\medmuskip{.2222em}} +// TODO: \> and math mode of \: should use \medmuskip = 4mu plus 2mu minus 4mu +defineMacro("\\>", "\\mskip{4mu}"); +defineMacro("\\:", "\\tmspace+{4mu}{.2222em}"); +// \let\medspace\: +defineMacro("\\medspace", "\\:"); +// \renewcommand{\;}{\tmspace+\thickmuskip{.2777em}} +// TODO: math mode should use \thickmuskip = 5mu plus 5mu +defineMacro("\\;", "\\tmspace+{5mu}{.2777em}"); +// \let\thickspace\; +defineMacro("\\thickspace", "\\;"); +// \renewcommand{\!}{\tmspace-\thinmuskip{.1667em}} +// TODO: math mode should use \thinmuskip +defineMacro("\\!", "\\tmspace-{3mu}{.1667em}"); +// \let\negthinspace\! +defineMacro("\\negthinspace", "\\!"); +// \newcommand{\negmedspace}{\tmspace-\medmuskip{.2222em}} +// TODO: math mode should use \medmuskip +defineMacro("\\negmedspace", "\\tmspace-{4mu}{.2222em}"); +// \newcommand{\negthickspace}{\tmspace-\thickmuskip{.2777em}} +// TODO: math mode should use \thickmuskip +defineMacro("\\negthickspace", "\\tmspace-{5mu}{.277em}"); +// \def\enspace{\kern.5em } +defineMacro("\\enspace", "\\kern.5em "); +// \def\enskip{\hskip.5em\relax} +defineMacro("\\enskip", "\\hskip.5em\\relax"); +// \def\quad{\hskip1em\relax} +defineMacro("\\quad", "\\hskip1em\\relax"); +// \def\qquad{\hskip2em\relax} +defineMacro("\\qquad", "\\hskip2em\\relax"); + +// \tag@in@display form of \tag +defineMacro("\\tag", "\\@ifstar\\tag@literal\\tag@paren"); +defineMacro("\\tag@paren", "\\tag@literal{({#1})}"); +defineMacro("\\tag@literal", context => { + if (context.macros.get("\\df@tag")) { + throw new src_ParseError("Multiple \\tag"); + } + return "\\gdef\\df@tag{\\text{#1}}"; +}); + +// \renewcommand{\bmod}{\nonscript\mskip-\medmuskip\mkern5mu\mathbin +// {\operator@font mod}\penalty900 +// \mkern5mu\nonscript\mskip-\medmuskip} +// \newcommand{\pod}[1]{\allowbreak +// \if@display\mkern18mu\else\mkern8mu\fi(#1)} +// \renewcommand{\pmod}[1]{\pod{{\operator@font mod}\mkern6mu#1}} +// \newcommand{\mod}[1]{\allowbreak\if@display\mkern18mu +// \else\mkern12mu\fi{\operator@font mod}\,\,#1} +// TODO: math mode should use \medmuskip = 4mu plus 2mu minus 4mu +defineMacro("\\bmod", "\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}" + "\\mathbin{\\rm mod}" + "\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}"); +defineMacro("\\pod", "\\allowbreak" + "\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)"); +defineMacro("\\pmod", "\\pod{{\\rm mod}\\mkern6mu#1}"); +defineMacro("\\mod", "\\allowbreak" + "\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}" + "{\\rm mod}\\,\\,#1"); + +////////////////////////////////////////////////////////////////////// +// LaTeX source2e + +// \expandafter\let\expandafter\@normalcr +// \csname\expandafter\@gobble\string\\ \endcsname +// \DeclareRobustCommand\newline{\@normalcr\relax} +defineMacro("\\newline", "\\\\\\relax"); + +// \def\TeX{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX\@} +// TODO: Doesn't normally work in math mode because \@ fails. KaTeX doesn't +// support \@ yet, so that's omitted, and we add \text so that the result +// doesn't look funny in math mode. +defineMacro("\\TeX", "\\textrm{\\html@mathml{" + "T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX" + "}{TeX}}"); + +// \DeclareRobustCommand{\LaTeX}{L\kern-.36em% +// {\sbox\z@ T% +// \vbox to\ht\z@{\hbox{\check@mathfonts +// \fontsize\sf@size\z@ +// \math@fontsfalse\selectfont +// A}% +// \vss}% +// }% +// \kern-.15em% +// \TeX} +// This code aligns the top of the A with the T (from the perspective of TeX's +// boxes, though visually the A appears to extend above slightly). +// We compute the corresponding \raisebox when A is rendered in \normalsize +// \scriptstyle, which has a scale factor of 0.7 (see Options.js). +const latexRaiseA = makeEm(fontMetricsData['Main-Regular']["T".charCodeAt(0)][1] - 0.7 * fontMetricsData['Main-Regular']["A".charCodeAt(0)][1]); +defineMacro("\\LaTeX", "\\textrm{\\html@mathml{" + ("L\\kern-.36em\\raisebox{" + latexRaiseA + "}{\\scriptstyle A}") + "\\kern-.15em\\TeX}{LaTeX}}"); + +// New KaTeX logo based on tweaking LaTeX logo +defineMacro("\\KaTeX", "\\textrm{\\html@mathml{" + ("K\\kern-.17em\\raisebox{" + latexRaiseA + "}{\\scriptstyle A}") + "\\kern-.15em\\TeX}{KaTeX}}"); + +// \DeclareRobustCommand\hspace{\@ifstar\@hspacer\@hspace} +// \def\@hspace#1{\hskip #1\relax} +// \def\@hspacer#1{\vrule \@width\z@\nobreak +// \hskip #1\hskip \z@skip} +defineMacro("\\hspace", "\\@ifstar\\@hspacer\\@hspace"); +defineMacro("\\@hspace", "\\hskip #1\\relax"); +defineMacro("\\@hspacer", "\\rule{0pt}{0pt}\\hskip #1\\relax"); + +////////////////////////////////////////////////////////////////////// +// mathtools.sty + +//\providecommand\ordinarycolon{:} +defineMacro("\\ordinarycolon", ":"); +//\def\vcentcolon{\mathrel{\mathop\ordinarycolon}} +//TODO(edemaine): Not yet centered. Fix via \raisebox or #726 +defineMacro("\\vcentcolon", "\\mathrel{\\mathop\\ordinarycolon}"); +// \providecommand*\dblcolon{\vcentcolon\mathrel{\mkern-.9mu}\vcentcolon} +defineMacro("\\dblcolon", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}" + "{\\mathop{\\char\"2237}}"); +// \providecommand*\coloneqq{\vcentcolon\mathrel{\mkern-1.2mu}=} +defineMacro("\\coloneqq", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}" + "{\\mathop{\\char\"2254}}"); // ≔ +// \providecommand*\Coloneqq{\dblcolon\mathrel{\mkern-1.2mu}=} +defineMacro("\\Coloneqq", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}" + "{\\mathop{\\char\"2237\\char\"3d}}"); +// \providecommand*\coloneq{\vcentcolon\mathrel{\mkern-1.2mu}\mathrel{-}} +defineMacro("\\coloneq", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}" + "{\\mathop{\\char\"3a\\char\"2212}}"); +// \providecommand*\Coloneq{\dblcolon\mathrel{\mkern-1.2mu}\mathrel{-}} +defineMacro("\\Coloneq", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}" + "{\\mathop{\\char\"2237\\char\"2212}}"); +// \providecommand*\eqqcolon{=\mathrel{\mkern-1.2mu}\vcentcolon} +defineMacro("\\eqqcolon", "\\html@mathml{" + "\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}" + "{\\mathop{\\char\"2255}}"); // ≕ +// \providecommand*\Eqqcolon{=\mathrel{\mkern-1.2mu}\dblcolon} +defineMacro("\\Eqqcolon", "\\html@mathml{" + "\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}" + "{\\mathop{\\char\"3d\\char\"2237}}"); +// \providecommand*\eqcolon{\mathrel{-}\mathrel{\mkern-1.2mu}\vcentcolon} +defineMacro("\\eqcolon", "\\html@mathml{" + "\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}" + "{\\mathop{\\char\"2239}}"); +// \providecommand*\Eqcolon{\mathrel{-}\mathrel{\mkern-1.2mu}\dblcolon} +defineMacro("\\Eqcolon", "\\html@mathml{" + "\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}" + "{\\mathop{\\char\"2212\\char\"2237}}"); +// \providecommand*\colonapprox{\vcentcolon\mathrel{\mkern-1.2mu}\approx} +defineMacro("\\colonapprox", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}" + "{\\mathop{\\char\"3a\\char\"2248}}"); +// \providecommand*\Colonapprox{\dblcolon\mathrel{\mkern-1.2mu}\approx} +defineMacro("\\Colonapprox", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}" + "{\\mathop{\\char\"2237\\char\"2248}}"); +// \providecommand*\colonsim{\vcentcolon\mathrel{\mkern-1.2mu}\sim} +defineMacro("\\colonsim", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}" + "{\\mathop{\\char\"3a\\char\"223c}}"); +// \providecommand*\Colonsim{\dblcolon\mathrel{\mkern-1.2mu}\sim} +defineMacro("\\Colonsim", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}" + "{\\mathop{\\char\"2237\\char\"223c}}"); + +// Some Unicode characters are implemented with macros to mathtools functions. +defineMacro("\u2237", "\\dblcolon"); // :: +defineMacro("\u2239", "\\eqcolon"); // -: +defineMacro("\u2254", "\\coloneqq"); // := +defineMacro("\u2255", "\\eqqcolon"); // =: +defineMacro("\u2A74", "\\Coloneqq"); // ::= + +////////////////////////////////////////////////////////////////////// +// colonequals.sty + +// Alternate names for mathtools's macros: +defineMacro("\\ratio", "\\vcentcolon"); +defineMacro("\\coloncolon", "\\dblcolon"); +defineMacro("\\colonequals", "\\coloneqq"); +defineMacro("\\coloncolonequals", "\\Coloneqq"); +defineMacro("\\equalscolon", "\\eqqcolon"); +defineMacro("\\equalscoloncolon", "\\Eqqcolon"); +defineMacro("\\colonminus", "\\coloneq"); +defineMacro("\\coloncolonminus", "\\Coloneq"); +defineMacro("\\minuscolon", "\\eqcolon"); +defineMacro("\\minuscoloncolon", "\\Eqcolon"); +// \colonapprox name is same in mathtools and colonequals. +defineMacro("\\coloncolonapprox", "\\Colonapprox"); +// \colonsim name is same in mathtools and colonequals. +defineMacro("\\coloncolonsim", "\\Colonsim"); + +// Additional macros, implemented by analogy with mathtools definitions: +defineMacro("\\simcolon", "\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}"); +defineMacro("\\simcoloncolon", "\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}"); +defineMacro("\\approxcolon", "\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}"); +defineMacro("\\approxcoloncolon", "\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}"); + +// Present in newtxmath, pxfonts and txfonts +defineMacro("\\notni", "\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220C}}"); +defineMacro("\\limsup", "\\DOTSB\\operatorname*{lim\\,sup}"); +defineMacro("\\liminf", "\\DOTSB\\operatorname*{lim\\,inf}"); + +////////////////////////////////////////////////////////////////////// +// From amsopn.sty +defineMacro("\\injlim", "\\DOTSB\\operatorname*{inj\\,lim}"); +defineMacro("\\projlim", "\\DOTSB\\operatorname*{proj\\,lim}"); +defineMacro("\\varlimsup", "\\DOTSB\\operatorname*{\\overline{lim}}"); +defineMacro("\\varliminf", "\\DOTSB\\operatorname*{\\underline{lim}}"); +defineMacro("\\varinjlim", "\\DOTSB\\operatorname*{\\underrightarrow{lim}}"); +defineMacro("\\varprojlim", "\\DOTSB\\operatorname*{\\underleftarrow{lim}}"); + +////////////////////////////////////////////////////////////////////// +// MathML alternates for KaTeX glyphs in the Unicode private area +defineMacro("\\gvertneqq", "\\html@mathml{\\@gvertneqq}{\u2269}"); +defineMacro("\\lvertneqq", "\\html@mathml{\\@lvertneqq}{\u2268}"); +defineMacro("\\ngeqq", "\\html@mathml{\\@ngeqq}{\u2271}"); +defineMacro("\\ngeqslant", "\\html@mathml{\\@ngeqslant}{\u2271}"); +defineMacro("\\nleqq", "\\html@mathml{\\@nleqq}{\u2270}"); +defineMacro("\\nleqslant", "\\html@mathml{\\@nleqslant}{\u2270}"); +defineMacro("\\nshortmid", "\\html@mathml{\\@nshortmid}{∤}"); +defineMacro("\\nshortparallel", "\\html@mathml{\\@nshortparallel}{∦}"); +defineMacro("\\nsubseteqq", "\\html@mathml{\\@nsubseteqq}{\u2288}"); +defineMacro("\\nsupseteqq", "\\html@mathml{\\@nsupseteqq}{\u2289}"); +defineMacro("\\varsubsetneq", "\\html@mathml{\\@varsubsetneq}{⊊}"); +defineMacro("\\varsubsetneqq", "\\html@mathml{\\@varsubsetneqq}{â«‹}"); +defineMacro("\\varsupsetneq", "\\html@mathml{\\@varsupsetneq}{⊋}"); +defineMacro("\\varsupsetneqq", "\\html@mathml{\\@varsupsetneqq}{⫌}"); +defineMacro("\\imath", "\\html@mathml{\\@imath}{\u0131}"); +defineMacro("\\jmath", "\\html@mathml{\\@jmath}{\u0237}"); + +////////////////////////////////////////////////////////////////////// +// stmaryrd and semantic + +// The stmaryrd and semantic packages render the next four items by calling a +// glyph. Those glyphs do not exist in the KaTeX fonts. Hence the macros. + +defineMacro("\\llbracket", "\\html@mathml{" + "\\mathopen{[\\mkern-3.2mu[}}" + "{\\mathopen{\\char`\u27e6}}"); +defineMacro("\\rrbracket", "\\html@mathml{" + "\\mathclose{]\\mkern-3.2mu]}}" + "{\\mathclose{\\char`\u27e7}}"); +defineMacro("\u27e6", "\\llbracket"); // blackboard bold [ +defineMacro("\u27e7", "\\rrbracket"); // blackboard bold ] + +defineMacro("\\lBrace", "\\html@mathml{" + "\\mathopen{\\{\\mkern-3.2mu[}}" + "{\\mathopen{\\char`\u2983}}"); +defineMacro("\\rBrace", "\\html@mathml{" + "\\mathclose{]\\mkern-3.2mu\\}}}" + "{\\mathclose{\\char`\u2984}}"); +defineMacro("↤", "\\mapsfrom"); +defineMacro("\\mapsfrom", "\\html@mathml{\\mathrel{\\mathreflectbox{\\mapsto}}}{\\mathrel{\\char`↤}}"); +defineMacro("\u2983", "\\lBrace"); // blackboard bold { +defineMacro("\u2984", "\\rBrace"); // blackboard bold } + +// TODO: Create variable sized versions of the last two items. I believe that +// will require new font glyphs. + +// The stmaryrd function `\minuso` provides a "Plimsoll" symbol that +// superimposes the characters \circ and \mathminus. Used in chemistry. +defineMacro("\\minuso", "\\mathbin{\\html@mathml{" + "{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}" + "{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}" + "{\\char`⦵}}"); +defineMacro("⦵", "\\minuso"); + +////////////////////////////////////////////////////////////////////// +// texvc.sty + +// The texvc package contains macros available in mediawiki pages. +// We omit the functions deprecated at +// https://en.wikipedia.org/wiki/Help:Displaying_a_formula#Deprecated_syntax + +// We also omit texvc's \O, which conflicts with \text{\O} + +defineMacro("\\darr", "\\downarrow"); +defineMacro("\\dArr", "\\Downarrow"); +defineMacro("\\Darr", "\\Downarrow"); +defineMacro("\\lang", "\\langle"); +defineMacro("\\rang", "\\rangle"); +defineMacro("\\uarr", "\\uparrow"); +defineMacro("\\uArr", "\\Uparrow"); +defineMacro("\\Uarr", "\\Uparrow"); +defineMacro("\\N", "\\mathbb{N}"); +defineMacro("\\R", "\\mathbb{R}"); +defineMacro("\\Z", "\\mathbb{Z}"); +defineMacro("\\alef", "\\aleph"); +defineMacro("\\alefsym", "\\aleph"); +defineMacro("\\Alpha", "\\mathrm{A}"); +defineMacro("\\Beta", "\\mathrm{B}"); +defineMacro("\\bull", "\\bullet"); +defineMacro("\\Chi", "\\mathrm{X}"); +defineMacro("\\clubs", "\\clubsuit"); +defineMacro("\\cnums", "\\mathbb{C}"); +defineMacro("\\Complex", "\\mathbb{C}"); +defineMacro("\\Dagger", "\\ddagger"); +defineMacro("\\diamonds", "\\diamondsuit"); +defineMacro("\\empty", "\\emptyset"); +defineMacro("\\Epsilon", "\\mathrm{E}"); +defineMacro("\\Eta", "\\mathrm{H}"); +defineMacro("\\exist", "\\exists"); +defineMacro("\\harr", "\\leftrightarrow"); +defineMacro("\\hArr", "\\Leftrightarrow"); +defineMacro("\\Harr", "\\Leftrightarrow"); +defineMacro("\\hearts", "\\heartsuit"); +defineMacro("\\image", "\\Im"); +defineMacro("\\infin", "\\infty"); +defineMacro("\\Iota", "\\mathrm{I}"); +defineMacro("\\isin", "\\in"); +defineMacro("\\Kappa", "\\mathrm{K}"); +defineMacro("\\larr", "\\leftarrow"); +defineMacro("\\lArr", "\\Leftarrow"); +defineMacro("\\Larr", "\\Leftarrow"); +defineMacro("\\lrarr", "\\leftrightarrow"); +defineMacro("\\lrArr", "\\Leftrightarrow"); +defineMacro("\\Lrarr", "\\Leftrightarrow"); +defineMacro("\\Mu", "\\mathrm{M}"); +defineMacro("\\natnums", "\\mathbb{N}"); +defineMacro("\\Nu", "\\mathrm{N}"); +defineMacro("\\Omicron", "\\mathrm{O}"); +defineMacro("\\plusmn", "\\pm"); +defineMacro("\\rarr", "\\rightarrow"); +defineMacro("\\rArr", "\\Rightarrow"); +defineMacro("\\Rarr", "\\Rightarrow"); +defineMacro("\\real", "\\Re"); +defineMacro("\\reals", "\\mathbb{R}"); +defineMacro("\\Reals", "\\mathbb{R}"); +defineMacro("\\Rho", "\\mathrm{P}"); +defineMacro("\\sdot", "\\cdot"); +defineMacro("\\sect", "\\S"); +defineMacro("\\spades", "\\spadesuit"); +defineMacro("\\sub", "\\subset"); +defineMacro("\\sube", "\\subseteq"); +defineMacro("\\supe", "\\supseteq"); +defineMacro("\\Tau", "\\mathrm{T}"); +defineMacro("\\thetasym", "\\vartheta"); +// TODO: defineMacro("\\varcoppa", "\\\mbox{\\coppa}"); +defineMacro("\\weierp", "\\wp"); +defineMacro("\\Zeta", "\\mathrm{Z}"); + +////////////////////////////////////////////////////////////////////// +// statmath.sty +// https://ctan.math.illinois.edu/macros/latex/contrib/statmath/statmath.pdf + +defineMacro("\\argmin", "\\DOTSB\\operatorname*{arg\\,min}"); +defineMacro("\\argmax", "\\DOTSB\\operatorname*{arg\\,max}"); +defineMacro("\\plim", "\\DOTSB\\mathop{\\operatorname{plim}}\\limits"); + +////////////////////////////////////////////////////////////////////// +// braket.sty +// http://ctan.math.washington.edu/tex-archive/macros/latex/contrib/braket/braket.pdf + +defineMacro("\\bra", "\\mathinner{\\langle{#1}|}"); +defineMacro("\\ket", "\\mathinner{|{#1}\\rangle}"); +defineMacro("\\braket", "\\mathinner{\\langle{#1}\\rangle}"); +defineMacro("\\Bra", "\\left\\langle#1\\right|"); +defineMacro("\\Ket", "\\left|#1\\right\\rangle"); +const braketHelper = one => context => { + const left = context.consumeArg().tokens; + const middle = context.consumeArg().tokens; + const middleDouble = context.consumeArg().tokens; + const right = context.consumeArg().tokens; + const oldMiddle = context.macros.get("|"); + const oldMiddleDouble = context.macros.get("\\|"); + context.macros.beginGroup(); + const midMacro = double => context => { + if (one) { + // Only modify the first instance of | or \| + context.macros.set("|", oldMiddle); + if (middleDouble.length) { + context.macros.set("\\|", oldMiddleDouble); + } + } + let doubled = double; + if (!double && middleDouble.length) { + // Mimic \@ifnextchar + const nextToken = context.future(); + if (nextToken.text === "|") { + context.popToken(); + doubled = true; + } + } + return { + tokens: doubled ? middleDouble : middle, + numArgs: 0 + }; + }; + context.macros.set("|", midMacro(false)); + if (middleDouble.length) { + context.macros.set("\\|", midMacro(true)); + } + const arg = context.consumeArg().tokens; + const expanded = context.expandTokens([...right, ...arg, ...left // reversed + ]); + context.macros.endGroup(); + return { + tokens: expanded.reverse(), + numArgs: 0 + }; +}; +defineMacro("\\bra@ket", braketHelper(false)); +defineMacro("\\bra@set", braketHelper(true)); +defineMacro("\\Braket", "\\bra@ket{\\left\\langle}" + "{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}"); +defineMacro("\\Set", "\\bra@set{\\left\\{\\:}" + "{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}"); +defineMacro("\\set", "\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}"); +// has no support for special || or \| + +////////////////////////////////////////////////////////////////////// +// actuarialangle.dtx +defineMacro("\\angln", "{\\angl n}"); + +// Custom Khan Academy colors, should be moved to an optional package +defineMacro("\\blue", "\\textcolor{##6495ed}{#1}"); +defineMacro("\\orange", "\\textcolor{##ffa500}{#1}"); +defineMacro("\\pink", "\\textcolor{##ff00af}{#1}"); +defineMacro("\\red", "\\textcolor{##df0030}{#1}"); +defineMacro("\\green", "\\textcolor{##28ae7b}{#1}"); +defineMacro("\\gray", "\\textcolor{gray}{#1}"); +defineMacro("\\purple", "\\textcolor{##9d38bd}{#1}"); +defineMacro("\\blueA", "\\textcolor{##ccfaff}{#1}"); +defineMacro("\\blueB", "\\textcolor{##80f6ff}{#1}"); +defineMacro("\\blueC", "\\textcolor{##63d9ea}{#1}"); +defineMacro("\\blueD", "\\textcolor{##11accd}{#1}"); +defineMacro("\\blueE", "\\textcolor{##0c7f99}{#1}"); +defineMacro("\\tealA", "\\textcolor{##94fff5}{#1}"); +defineMacro("\\tealB", "\\textcolor{##26edd5}{#1}"); +defineMacro("\\tealC", "\\textcolor{##01d1c1}{#1}"); +defineMacro("\\tealD", "\\textcolor{##01a995}{#1}"); +defineMacro("\\tealE", "\\textcolor{##208170}{#1}"); +defineMacro("\\greenA", "\\textcolor{##b6ffb0}{#1}"); +defineMacro("\\greenB", "\\textcolor{##8af281}{#1}"); +defineMacro("\\greenC", "\\textcolor{##74cf70}{#1}"); +defineMacro("\\greenD", "\\textcolor{##1fab54}{#1}"); +defineMacro("\\greenE", "\\textcolor{##0d923f}{#1}"); +defineMacro("\\goldA", "\\textcolor{##ffd0a9}{#1}"); +defineMacro("\\goldB", "\\textcolor{##ffbb71}{#1}"); +defineMacro("\\goldC", "\\textcolor{##ff9c39}{#1}"); +defineMacro("\\goldD", "\\textcolor{##e07d10}{#1}"); +defineMacro("\\goldE", "\\textcolor{##a75a05}{#1}"); +defineMacro("\\redA", "\\textcolor{##fca9a9}{#1}"); +defineMacro("\\redB", "\\textcolor{##ff8482}{#1}"); +defineMacro("\\redC", "\\textcolor{##f9685d}{#1}"); +defineMacro("\\redD", "\\textcolor{##e84d39}{#1}"); +defineMacro("\\redE", "\\textcolor{##bc2612}{#1}"); +defineMacro("\\maroonA", "\\textcolor{##ffbde0}{#1}"); +defineMacro("\\maroonB", "\\textcolor{##ff92c6}{#1}"); +defineMacro("\\maroonC", "\\textcolor{##ed5fa6}{#1}"); +defineMacro("\\maroonD", "\\textcolor{##ca337c}{#1}"); +defineMacro("\\maroonE", "\\textcolor{##9e034e}{#1}"); +defineMacro("\\purpleA", "\\textcolor{##ddd7ff}{#1}"); +defineMacro("\\purpleB", "\\textcolor{##c6b9fc}{#1}"); +defineMacro("\\purpleC", "\\textcolor{##aa87ff}{#1}"); +defineMacro("\\purpleD", "\\textcolor{##7854ab}{#1}"); +defineMacro("\\purpleE", "\\textcolor{##543b78}{#1}"); +defineMacro("\\mintA", "\\textcolor{##f5f9e8}{#1}"); +defineMacro("\\mintB", "\\textcolor{##edf2df}{#1}"); +defineMacro("\\mintC", "\\textcolor{##e0e5cc}{#1}"); +defineMacro("\\grayA", "\\textcolor{##f6f7f7}{#1}"); +defineMacro("\\grayB", "\\textcolor{##f0f1f2}{#1}"); +defineMacro("\\grayC", "\\textcolor{##e3e5e6}{#1}"); +defineMacro("\\grayD", "\\textcolor{##d6d8da}{#1}"); +defineMacro("\\grayE", "\\textcolor{##babec2}{#1}"); +defineMacro("\\grayF", "\\textcolor{##888d93}{#1}"); +defineMacro("\\grayG", "\\textcolor{##626569}{#1}"); +defineMacro("\\grayH", "\\textcolor{##3b3e40}{#1}"); +defineMacro("\\grayI", "\\textcolor{##21242c}{#1}"); +defineMacro("\\kaBlue", "\\textcolor{##314453}{#1}"); +defineMacro("\\kaGreen", "\\textcolor{##71B307}{#1}"); +;// ./src/MacroExpander.ts +/** + * This file contains the “gulletâ€� where macros are expanded + * until only non-macro tokens remain. + */ + + + + + + + + + +// List of commands that act like macros but aren't defined as a macro, +// function, or symbol. Used in `isDefined`. +const implicitCommands = { + "^": true, + // Parser.js + "_": true, + // Parser.js + "\\limits": true, + // Parser.js + "\\nolimits": true // Parser.js +}; +class MacroExpander { + constructor(input, settings, mode) { + this.settings = void 0; + this.expansionCount = void 0; + this.lexer = void 0; + this.macros = void 0; + this.stack = void 0; + this.mode = void 0; + this.settings = settings; + this.expansionCount = 0; + this.feed(input); + // Make new global namespace + this.macros = new Namespace(src_macros, settings.macros); + this.mode = mode; + this.stack = []; // contains tokens in REVERSE order + } + + /** + * Feed a new input string to the same MacroExpander + * (with existing macros etc.). + */ + feed(input) { + this.lexer = new Lexer(input, this.settings); + } + + /** + * Switches between "text" and "math" modes. + */ + switchMode(newMode) { + this.mode = newMode; + } + + /** + * Start a new group nesting within all namespaces. + */ + beginGroup() { + this.macros.beginGroup(); + } + + /** + * End current group nesting within all namespaces. + */ + endGroup() { + this.macros.endGroup(); + } + + /** + * Ends all currently nested groups (if any), restoring values before the + * groups began. Useful in case of an error in the middle of parsing. + */ + endGroups() { + this.macros.endGroups(); + } + + /** + * Returns the topmost token on the stack, without expanding it. + * Similar in behavior to TeX's `\futurelet`. + */ + future() { + if (this.stack.length === 0) { + this.pushToken(this.lexer.lex()); + } + return this.stack[this.stack.length - 1]; + } + + /** + * Remove and return the next unexpanded token. + */ + popToken() { + this.future(); // ensure non-empty stack + return this.stack.pop(); + } + + /** + * Add a given token to the token stack. In particular, this get be used + * to put back a token returned from one of the other methods. + */ + pushToken(token) { + this.stack.push(token); + } + + /** + * Append an array of tokens to the token stack. + */ + pushTokens(tokens) { + this.stack.push(...tokens); + } + + /** + * Find an macro argument without expanding tokens and append the array of + * tokens to the token stack. Uses Token as a container for the result. + */ + scanArgument(isOptional) { + let start; + let end; + let tokens; + if (isOptional) { + this.consumeSpaces(); // \@ifnextchar gobbles any space following it + if (this.future().text !== "[") { + return null; + } + start = this.popToken(); // don't include [ in tokens + var _this$consumeArg = this.consumeArg(["]"]); + tokens = _this$consumeArg.tokens; + end = _this$consumeArg.end; + } else { + var _this$consumeArg2 = this.consumeArg(); + tokens = _this$consumeArg2.tokens; + start = _this$consumeArg2.start; + end = _this$consumeArg2.end; + } + + // indicate the end of an argument + this.pushToken(new Token("EOF", end.loc)); + this.pushTokens(tokens); + return new Token("", SourceLocation.range(start, end)); + } + + /** + * Consume all following space tokens, without expansion. + */ + consumeSpaces() { + for (;;) { + const token = this.future(); + if (token.text === " ") { + this.stack.pop(); + } else { + break; + } + } + } + + /** + * Consume an argument from the token stream, and return the resulting array + * of tokens and start/end token. + */ + consumeArg(delims) { + // The argument for a delimited parameter is the shortest (possibly + // empty) sequence of tokens with properly nested {...} groups that is + // followed ... by this particular list of non-parameter tokens. + // The argument for an undelimited parameter is the next nonblank + // token, unless that token is ‘{’, when the argument will be the + // entire {...} group that follows. + const tokens = []; + const isDelimited = delims && delims.length > 0; + if (!isDelimited) { + // Ignore spaces between arguments. As the TeXbook says: + // "After you have said ‘\def\row#1#2{...}’, you are allowed to + // put spaces between the arguments (e.g., ‘\row x n’), because + // TeX doesn’t use single spaces as undelimited arguments." + this.consumeSpaces(); + } + const start = this.future(); + let tok; + let depth = 0; + let match = 0; + do { + tok = this.popToken(); + tokens.push(tok); + if (tok.text === "{") { + ++depth; + } else if (tok.text === "}") { + --depth; + if (depth === -1) { + throw new src_ParseError("Extra }", tok); + } + } else if (tok.text === "EOF") { + throw new src_ParseError("Unexpected end of input in a macro argument" + ", expected '" + (delims && isDelimited ? delims[match] : "}") + "'", tok); + } + if (delims && isDelimited) { + if ((depth === 0 || depth === 1 && delims[match] === "{") && tok.text === delims[match]) { + ++match; + if (match === delims.length) { + // don't include delims in tokens + tokens.splice(-match, match); + break; + } + } else { + match = 0; + } + } + } while (depth !== 0 || isDelimited); + // If the argument found ... has the form ‘{}’, + // ... the outermost braces enclosing the argument are removed + if (start.text === "{" && tokens[tokens.length - 1].text === "}") { + tokens.pop(); + tokens.shift(); + } + tokens.reverse(); // to fit in with stack order + return { + tokens, + start, + end: tok + }; + } + + /** + * Consume the specified number of (delimited) arguments from the token + * stream and return the resulting array of arguments. + */ + consumeArgs(numArgs, delimiters) { + if (delimiters) { + if (delimiters.length !== numArgs + 1) { + throw new src_ParseError("The length of delimiters doesn't match the number of args!"); + } + const delims = delimiters[0]; + for (let i = 0; i < delims.length; i++) { + const tok = this.popToken(); + if (delims[i] !== tok.text) { + throw new src_ParseError("Use of the macro doesn't match its definition", tok); + } + } + } + const args = []; + for (let i = 0; i < numArgs; i++) { + args.push(this.consumeArg(delimiters && delimiters[i + 1]).tokens); + } + return args; + } + + /** + * Increment `expansionCount` by the specified amount. + * Throw an error if it exceeds `maxExpand`. + */ + countExpansion(amount) { + this.expansionCount += amount; + if (this.expansionCount > this.settings.maxExpand) { + throw new src_ParseError("Too many expansions: infinite loop or " + "need to increase maxExpand setting"); + } + } + + /** + * Expand the next token only once if possible. + * + * If the token is expanded, the resulting tokens will be pushed onto + * the stack in reverse order, and the number of such tokens will be + * returned. This number might be zero or positive. + * + * If not, the return value is `false`, and the next token remains at the + * top of the stack. + * + * In either case, the next token will be on the top of the stack, + * or the stack will be empty (in case of empty expansion + * and no other tokens). + * + * Used to implement `expandAfterFuture` and `expandNextToken`. + * + * If expandableOnly, only expandable tokens are expanded and + * an undefined control sequence results in an error. + */ + expandOnce(expandableOnly) { + const topToken = this.popToken(); + const name = topToken.text; + const expansion = !topToken.noexpand ? this._getExpansion(name) : null; + if (expansion == null || expandableOnly && expansion.unexpandable) { + if (expandableOnly && expansion == null && name[0] === "\\" && !this.isDefined(name)) { + throw new src_ParseError("Undefined control sequence: " + name); + } + this.pushToken(topToken); + return false; + } + this.countExpansion(1); + let tokens = expansion.tokens; + const args = this.consumeArgs(expansion.numArgs, expansion.delimiters); + if (expansion.numArgs) { + // paste arguments in place of the placeholders + tokens = tokens.slice(); // make a shallow copy + for (let i = tokens.length - 1; i >= 0; --i) { + let tok = tokens[i]; + if (tok.text === "#") { + if (i === 0) { + throw new src_ParseError("Incomplete placeholder at end of macro body", tok); + } + tok = tokens[--i]; // next token on stack + if (tok.text === "#") { + // ## → # + tokens.splice(i + 1, 1); // drop first # + } else if (/^[1-9]$/.test(tok.text)) { + // replace the placeholder with the indicated argument + tokens.splice(i, 2, ...args[+tok.text - 1]); + } else { + throw new src_ParseError("Not a valid argument number", tok); + } + } + } + } + // Concatenate expansion onto top of stack. + this.pushTokens(tokens); + return tokens.length; + } + + /** + * Expand the next token only once (if possible), and return the resulting + * top token on the stack (without removing anything from the stack). + * Similar in behavior to TeX's `\expandafter\futurelet`. + * Equivalent to expandOnce() followed by future(). + */ + expandAfterFuture() { + this.expandOnce(); + return this.future(); + } + + /** + * Recursively expand first token, then return first non-expandable token. + */ + expandNextToken() { + for (;;) { + if (this.expandOnce() === false) { + // fully expanded + const token = this.stack.pop(); + // the token after \noexpand is interpreted as if its meaning + // were ‘\relax’ + if (token.treatAsRelax) { + token.text = "\\relax"; + } + return token; + } + } + } + + /** + * Fully expand the given macro name and return the resulting list of + * tokens, or return `undefined` if no such macro is defined. + */ + expandMacro(name) { + return this.macros.has(name) ? this.expandTokens([new Token(name)]) : undefined; + } + + /** + * Fully expand the given token stream and return the resulting list of + * tokens. Note that the input tokens are in reverse order, but the + * output tokens are in forward order. + */ + expandTokens(tokens) { + const output = []; + const oldStackLength = this.stack.length; + this.pushTokens(tokens); + while (this.stack.length > oldStackLength) { + // Expand only expandable tokens + if (this.expandOnce(true) === false) { + // fully expanded + const token = this.stack.pop(); + if (token.treatAsRelax) { + // the expansion of \noexpand is the token itself + token.noexpand = false; + token.treatAsRelax = false; + } + output.push(token); + } + } + // Count all of these tokens as additional expansions, to prevent + // exponential blowup from linearly many \edef's. + this.countExpansion(output.length); + return output; + } + + /** + * Fully expand the given macro name and return the result as a string, + * or return `undefined` if no such macro is defined. + */ + expandMacroAsText(name) { + const tokens = this.expandMacro(name); + if (tokens) { + return tokens.map(token => token.text).join(""); + } else { + return tokens; + } + } + + /** + * Returns the expanded macro as a reversed array of tokens and a macro + * argument count. Or returns `null` if no such macro. + */ + _getExpansion(name) { + const definition = this.macros.get(name); + if (definition == null) { + // mainly checking for undefined here + return definition; + } + // If a single character has an associated catcode other than 13 + // (active character), then don't expand it. + if (name.length === 1) { + const catcode = this.lexer.catcodes[name]; + if (catcode != null && catcode !== 13) { + return; + } + } + const expansion = typeof definition === "function" ? definition(this) : definition; + if (typeof expansion === "string") { + let numArgs = 0; + if (expansion.includes("#")) { + const stripped = expansion.replace(/##/g, ""); + while (stripped.includes("#" + (numArgs + 1))) { + ++numArgs; + } + } + const bodyLexer = new Lexer(expansion, this.settings); + const tokens = []; + let tok = bodyLexer.lex(); + while (tok.text !== "EOF") { + tokens.push(tok); + tok = bodyLexer.lex(); + } + tokens.reverse(); // to fit in with stack using push and pop + const expanded = { + tokens, + numArgs + }; + return expanded; + } + return expansion; + } + + /** + * Determine whether a command is currently "defined" (has some + * functionality), meaning that it's a macro (in the current group), + * a function, a symbol, or one of the special commands listed in + * `implicitCommands`. + */ + isDefined(name) { + return this.macros.has(name) || Object.prototype.hasOwnProperty.call(src_functions, name) || Object.prototype.hasOwnProperty.call(src_symbols.math, name) || Object.prototype.hasOwnProperty.call(src_symbols.text, name) || Object.prototype.hasOwnProperty.call(implicitCommands, name); + } + + /** + * Determine whether a command is expandable. + */ + isExpandable(name) { + const macro = this.macros.get(name); + if (macro != null) { + return typeof macro === "string" || typeof macro === "function" || !macro.unexpandable; + } + return Object.prototype.hasOwnProperty.call(src_functions, name) && !src_functions[name].primitive; + } +} +;// ./src/unicodeSupOrSub.ts +// Helpers for Parser.js handling of Unicode (sub|super)script characters. + +const unicodeSubRegEx = /^[₊₋₌â‚�₎₀â‚�₂₃₄₅₆₇₈₉â‚�ₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/; +const uSubsAndSups = Object.freeze({ + '₊': '+', + 'â‚‹': '-', + '₌': '=', + 'â‚�': '(', + '₎': ')', + 'â‚€': '0', + 'â‚�': '1', + 'â‚‚': '2', + '₃': '3', + 'â‚„': '4', + 'â‚…': '5', + '₆': '6', + '₇': '7', + '₈': '8', + '₉': '9', + '\u2090': 'a', + '\u2091': 'e', + '\u2095': 'h', + '\u1D62': 'i', + '\u2C7C': 'j', + '\u2096': 'k', + '\u2097': 'l', + '\u2098': 'm', + '\u2099': 'n', + '\u2092': 'o', + '\u209A': 'p', + '\u1D63': 'r', + '\u209B': 's', + '\u209C': 't', + '\u1D64': 'u', + '\u1D65': 'v', + '\u2093': 'x', + '\u1D66': 'β', + '\u1D67': 'γ', + '\u1D68': 'Ï�', + '\u1D69': '\u03d5', + '\u1D6A': 'χ', + 'â�º': '+', + 'â�»': '-', + 'â�¼': '=', + 'â�½': '(', + 'â�¾': ')', + 'â�°': '0', + '¹': '1', + '²': '2', + '³': '3', + 'â�´': '4', + 'â�µ': '5', + 'â�¶': '6', + 'â�·': '7', + 'â�¸': '8', + 'â�¹': '9', + '\u1D2C': 'A', + '\u1D2E': 'B', + '\u1D30': 'D', + '\u1D31': 'E', + '\u1D33': 'G', + '\u1D34': 'H', + '\u1D35': 'I', + '\u1D36': 'J', + '\u1D37': 'K', + '\u1D38': 'L', + '\u1D39': 'M', + '\u1D3A': 'N', + '\u1D3C': 'O', + '\u1D3E': 'P', + '\u1D3F': 'R', + '\u1D40': 'T', + '\u1D41': 'U', + '\u2C7D': 'V', + '\u1D42': 'W', + '\u1D43': 'a', + '\u1D47': 'b', + '\u1D9C': 'c', + '\u1D48': 'd', + '\u1D49': 'e', + '\u1DA0': 'f', + '\u1D4D': 'g', + '\u02B0': 'h', + '\u2071': 'i', + '\u02B2': 'j', + '\u1D4F': 'k', + '\u02E1': 'l', + '\u1D50': 'm', + '\u207F': 'n', + '\u1D52': 'o', + '\u1D56': 'p', + '\u02B3': 'r', + '\u02E2': 's', + '\u1D57': 't', + '\u1D58': 'u', + '\u1D5B': 'v', + '\u02B7': 'w', + '\u02E3': 'x', + '\u02B8': 'y', + '\u1DBB': 'z', + '\u1D5D': 'β', + '\u1D5E': 'γ', + '\u1D5F': 'δ', + '\u1D60': '\u03d5', + '\u1D61': 'χ', + '\u1DBF': 'θ' +}); +;// ./src/Parser.ts +/* eslint no-constant-condition:0 */ + + + + + + + + + + + + + +// Pre-evaluate both modules as unicodeSymbols require String.normalize() +const unicodeAccents = { + "Ì�": { + "text": "\\'", + "math": "\\acute" + }, + "Ì€": { + "text": "\\`", + "math": "\\grave" + }, + "̈": { + "text": "\\\"", + "math": "\\ddot" + }, + "̃": { + "text": "\\~", + "math": "\\tilde" + }, + "Ì„": { + "text": "\\=", + "math": "\\bar" + }, + "̆": { + "text": "\\u", + "math": "\\breve" + }, + "ÌŒ": { + "text": "\\v", + "math": "\\check" + }, + "Ì‚": { + "text": "\\^", + "math": "\\hat" + }, + "̇": { + "text": "\\.", + "math": "\\dot" + }, + "ÌŠ": { + "text": "\\r", + "math": "\\mathring" + }, + "Ì‹": { + "text": "\\H" + }, + "̧": { + "text": "\\c" + } +}; +const unicodeSymbols = { + "á": "aÌ�", + "à": "aÌ€", + "ä": "ä", + "ÇŸ": "ǟ", + "ã": "ã", + "Ä�": "aÌ„", + "ă": "ă", + "ắ": "ăÌ�", + "ằ": "ằ", + "ẵ": "ẵ", + "ÇŽ": "aÌŒ", + "â": "aÌ‚", + "ấ": "aÌ‚Ì�", + "ầ": "ầ", + "ẫ": "ẫ", + "ȧ": "ȧ", + "Ç¡": "ǡ", + "Ã¥": "aÌŠ", + "Ç»": "aÌŠÌ�", + "ḃ": "ḃ", + "ć": "cÌ�", + "ḉ": "çÌ�", + "Ä�": "cÌŒ", + "ĉ": "cÌ‚", + "Ä‹": "ċ", + "ç": "ç", + "Ä�": "dÌŒ", + "ḋ": "ḋ", + "ḑ": "ḑ", + "é": "eÌ�", + "è": "eÌ€", + "ë": "ë", + "ẽ": "ẽ", + "Ä“": "eÌ„", + "ḗ": "eÌ„Ì�", + "ḕ": "ḕ", + "Ä•": "ĕ", + "á¸�": "ḝ", + "Ä›": "eÌŒ", + "ê": "eÌ‚", + "ế": "eÌ‚Ì�", + "á»�": "ề", + "á»…": "ễ", + "Ä—": "ė", + "È©": "ȩ", + "ḟ": "ḟ", + "ǵ": "gÌ�", + "ḡ": "gÌ„", + "ÄŸ": "ğ", + "ǧ": "gÌŒ", + "Ä�": "gÌ‚", + "Ä¡": "ġ", + "Ä£": "ģ", + "ḧ": "ḧ", + "ÈŸ": "hÌŒ", + "Ä¥": "hÌ‚", + "ḣ": "ḣ", + "ḩ": "ḩ", + "í": "iÌ�", + "ì": "iÌ€", + "ï": "ï", + "ḯ": "ïÌ�", + "Ä©": "ĩ", + "Ä«": "iÌ„", + "Ä­": "ĭ", + "Ç�": "iÌŒ", + "î": "iÌ‚", + "ǰ": "jÌŒ", + "ĵ": "jÌ‚", + "ḱ": "kÌ�", + "Ç©": "kÌŒ", + "Ä·": "ķ", + "ĺ": "lÌ�", + "ľ": "lÌŒ", + "ļ": "ļ", + "ḿ": "mÌ�", + "á¹�": "ṁ", + "Å„": "nÌ�", + "ǹ": "nÌ€", + "ñ": "ñ", + "ň": "nÌŒ", + "á¹…": "ṅ", + "ņ": "ņ", + "ó": "oÌ�", + "ò": "oÌ€", + "ö": "ö", + "È«": "ȫ", + "õ": "õ", + "á¹�": "õÌ�", + "á¹�": "ṏ", + "È­": "ȭ", + "Å�": "oÌ„", + "ṓ": "oÌ„Ì�", + "ṑ": "ṑ", + "Å�": "ŏ", + "Ç’": "oÌŒ", + "ô": "oÌ‚", + "ố": "oÌ‚Ì�", + "ồ": "ồ", + "á»—": "ỗ", + "ȯ": "ȯ", + "ȱ": "ȱ", + "Å‘": "oÌ‹", + "ṕ": "pÌ�", + "á¹—": "ṗ", + "Å•": "rÌ�", + "Å™": "rÌŒ", + "á¹™": "ṙ", + "Å—": "ŗ", + "Å›": "sÌ�", + "á¹¥": "sÌ�̇", + "Å¡": "sÌŒ", + "á¹§": "ṧ", + "Å�": "sÌ‚", + "ṡ": "ṡ", + "ÅŸ": "ş", + "ẗ": "ẗ", + "Å¥": "tÌŒ", + "ṫ": "ṫ", + "Å£": "ţ", + "ú": "uÌ�", + "ù": "uÌ€", + "ü": "ü", + "ǘ": "üÌ�", + "Çœ": "ǜ", + "Ç–": "ǖ", + "Çš": "ǚ", + "Å©": "ũ", + "á¹¹": "ũÌ�", + "Å«": "uÌ„", + "á¹»": "ṻ", + "Å­": "ŭ", + "Ç”": "uÌŒ", + "û": "uÌ‚", + "ů": "uÌŠ", + "ű": "uÌ‹", + "á¹½": "ṽ", + "ẃ": "wÌ�", + "áº�": "wÌ€", + "ẅ": "ẅ", + "ŵ": "wÌ‚", + "ẇ": "ẇ", + "ẘ": "wÌŠ", + "áº�": "ẍ", + "ẋ": "ẋ", + "ý": "yÌ�", + "ỳ": "yÌ€", + "ÿ": "ÿ", + "ỹ": "ỹ", + "ȳ": "yÌ„", + "Å·": "yÌ‚", + "áº�": "ẏ", + "ẙ": "yÌŠ", + "ź": "zÌ�", + "ž": "zÌŒ", + "ẑ": "zÌ‚", + "ż": "ż", + "Ã�": "AÌ�", + "À": "AÌ€", + "Ä": "Ä", + "Çž": "Ǟ", + "Ã": "Ã", + "Ä€": "AÌ„", + "Ä‚": "Ă", + "Ắ": "ĂÌ�", + "Ằ": "Ằ", + "Ẵ": "Ẵ", + "Ç�": "AÌŒ", + "Â": "AÌ‚", + "Ấ": "AÌ‚Ì�", + "Ầ": "Ầ", + "Ẫ": "Ẫ", + "Ȧ": "Ȧ", + "Ç ": "Ǡ", + "Ã…": "AÌŠ", + "Ǻ": "AÌŠÌ�", + "Ḃ": "Ḃ", + "Ć": "CÌ�", + "Ḉ": "ÇÌ�", + "ÄŒ": "CÌŒ", + "Ĉ": "CÌ‚", + "ÄŠ": "Ċ", + "Ç": "Ç", + "ÄŽ": "DÌŒ", + "Ḋ": "Ḋ", + "á¸�": "Ḑ", + "É": "EÌ�", + "È": "EÌ€", + "Ë": "Ë", + "Ẽ": "Ẽ", + "Ä’": "EÌ„", + "Ḗ": "EÌ„Ì�", + "Ḕ": "Ḕ", + "Ä”": "Ĕ", + "Ḝ": "Ḝ", + "Äš": "EÌŒ", + "Ê": "EÌ‚", + "Ế": "EÌ‚Ì�", + "Ề": "Ề", + "Ễ": "Ễ", + "Ä–": "Ė", + "Ȩ": "Ȩ", + "Ḟ": "Ḟ", + "Ç´": "GÌ�", + "Ḡ": "GÌ„", + "Äž": "Ğ", + "Ǧ": "GÌŒ", + "Äœ": "GÌ‚", + "Ä ": "Ġ", + "Ä¢": "Ģ", + "Ḧ": "Ḧ", + "Èž": "HÌŒ", + "Ĥ": "HÌ‚", + "Ḣ": "Ḣ", + "Ḩ": "Ḩ", + "Ã�": "IÌ�", + "ÃŒ": "IÌ€", + "Ã�": "Ï", + "Ḯ": "ÏÌ�", + "Ĩ": "Ĩ", + "Ī": "IÌ„", + "Ĭ": "Ĭ", + "Ç�": "IÌŒ", + "ÃŽ": "IÌ‚", + "İ": "İ", + "Ä´": "JÌ‚", + "Ḱ": "KÌ�", + "Ǩ": "KÌŒ", + "Ķ": "Ķ", + "Ĺ": "LÌ�", + "Ľ": "LÌŒ", + "Ä»": "Ļ", + "Ḿ": "MÌ�", + "á¹€": "Ṁ", + "Ń": "NÌ�", + "Ǹ": "NÌ€", + "Ñ": "Ñ", + "Ň": "NÌŒ", + "Ṅ": "Ṅ", + "Å…": "Ņ", + "Ó": "OÌ�", + "Ã’": "OÌ€", + "Ö": "Ö", + "Ȫ": "Ȫ", + "Õ": "Õ", + "Ṍ": "ÕÌ�", + "Ṏ": "Ṏ", + "Ȭ": "Ȭ", + "ÅŒ": "OÌ„", + "á¹’": "OÌ„Ì�", + "á¹�": "Ṑ", + "ÅŽ": "Ŏ", + "Ç‘": "OÌŒ", + "Ô": "OÌ‚", + "á»�": "OÌ‚Ì�", + "á»’": "Ồ", + "á»–": "Ỗ", + "È®": "Ȯ", + "Ȱ": "Ȱ", + "Å�": "OÌ‹", + "á¹”": "PÌ�", + "á¹–": "Ṗ", + "Å”": "RÌ�", + "Ř": "RÌŒ", + "Ṙ": "Ṙ", + "Å–": "Ŗ", + "Åš": "SÌ�", + "Ṥ": "SÌ�̇", + "Å ": "SÌŒ", + "Ṧ": "Ṧ", + "Åœ": "SÌ‚", + "á¹ ": "Ṡ", + "Åž": "Ş", + "Ť": "TÌŒ", + "Ṫ": "Ṫ", + "Å¢": "Ţ", + "Ú": "UÌ�", + "Ù": "UÌ€", + "Ü": "Ü", + "Ç—": "ÜÌ�", + "Ç›": "Ǜ", + "Ç•": "Ǖ", + "Ç™": "Ǚ", + "Ũ": "Ũ", + "Ṹ": "ŨÌ�", + "Ū": "UÌ„", + "Ṻ": "Ṻ", + "Ŭ": "Ŭ", + "Ç“": "UÌŒ", + "Û": "UÌ‚", + "Å®": "UÌŠ", + "Ű": "UÌ‹", + "á¹¼": "Ṽ", + "Ẃ": "WÌ�", + "Ẁ": "WÌ€", + "Ẅ": "Ẅ", + "Å´": "WÌ‚", + "Ẇ": "Ẇ", + "Ẍ": "Ẍ", + "Ẋ": "Ẋ", + "Ã�": "YÌ�", + "Ỳ": "YÌ€", + "Ÿ": "Ÿ", + "Ỹ": "Ỹ", + "Ȳ": "YÌ„", + "Ŷ": "YÌ‚", + "Ẏ": "Ẏ", + "Ź": "ZÌ�", + "Ž": "ZÌŒ", + "áº�": "ZÌ‚", + "Å»": "Ż", + "ά": "αÌ�", + "á½°": "ὰ", + "á¾±": "ᾱ", + "á¾°": "ᾰ", + "έ": "εÌ�", + "á½²": "ὲ", + "ή": "ηÌ�", + "á½´": "ὴ", + "ί": "ιÌ�", + "á½¶": "ὶ", + "ÏŠ": "ϊ", + "Î�": "ϊÌ�", + "á¿’": "ῒ", + "á¿‘": "ῑ", + "á¿�": "ῐ", + "ÏŒ": "οÌ�", + "ὸ": "ὸ", + "Ï�": "Ï…Ì�", + "ὺ": "Ï…Ì€", + "Ï‹": "ϋ", + "ΰ": "ϋÌ�", + "á¿¢": "ῢ", + "á¿¡": "Ï…Ì„", + "á¿ ": "ῠ", + "ÏŽ": "ωÌ�", + "á½¼": "ὼ", + "ÎŽ": "Î¥Ì�", + "Ὺ": "Ὺ", + "Ϋ": "Ϋ", + "á¿©": "Ῡ", + "Ῠ": "Ῠ", + "Î�": "ΩÌ�", + "Ὼ": "Ὼ" +}; +/** + * This file contains the parser used to parse out a TeX expression from the + * input. Since TeX isn't context-free, standard parsers don't work particularly + * well. + * + * The strategy of this parser is as such: + * + * The main functions (the `.parse...` ones) take a position in the current + * parse string to parse tokens from. The lexer (found in Lexer.js, stored at + * this.gullet.lexer) also supports pulling out tokens at arbitrary places. When + * individual tokens are needed at a position, the lexer is called to pull out a + * token, which is then used. + * + * The parser has a property called "mode" indicating the mode that + * the parser is currently in. Currently it has to be one of "math" or + * "text", which denotes whether the current environment is a math-y + * one or a text-y one (e.g. inside \text). Currently, this serves to + * limit the functions which can be used in text mode. + * + * The main functions then return an object which contains the useful data that + * was parsed at its given point, and a new position at the end of the parsed + * data. The main functions can call each other and continue the parsing by + * using the returned position as a new starting point. + * + * There are also extra `.handle...` functions, which pull out some reused + * functionality into self-contained functions. + * + * The functions return ParseNodes. + */ + +class Parser { + constructor(input, settings) { + this.mode = void 0; + this.gullet = void 0; + this.settings = void 0; + this.leftrightDepth = void 0; + this.nextToken = void 0; + // Start in math mode + this.mode = "math"; + // Create a new macro expander (gullet) and (indirectly via that) also a + // new lexer (mouth) for this parser (stomach, in the language of TeX) + this.gullet = new MacroExpander(input, settings, this.mode); + // Store the settings for use in parsing + this.settings = settings; + // Count leftright depth (for \middle errors) + this.leftrightDepth = 0; + this.nextToken = null; + } + + /** + * Checks a result to make sure it has the right type, and throws an + * appropriate error otherwise. + */ + expect(text, consume) { + if (consume === void 0) { + consume = true; + } + if (this.fetch().text !== text) { + throw new src_ParseError("Expected '" + text + "', got '" + this.fetch().text + "'", this.fetch()); + } + if (consume) { + this.consume(); + } + } + + /** + * Discards the current lookahead token, considering it consumed. + */ + consume() { + this.nextToken = null; + } + + /** + * Return the current lookahead token, or if there isn't one (at the + * beginning, or if the previous lookahead token was consume()d), + * fetch the next token as the new lookahead token and return it. + */ + fetch() { + if (this.nextToken == null) { + this.nextToken = this.gullet.expandNextToken(); + } + return this.nextToken; + } + + /** + * Switches between "text" and "math" modes. + */ + switchMode(newMode) { + this.mode = newMode; + this.gullet.switchMode(newMode); + } + + /** + * Main parsing function, which parses an entire input. + */ + parse() { + if (!this.settings.globalGroup) { + // Create a group namespace for the math expression. + // (LaTeX creates a new group for every $...$, $$...$$, \[...\].) + this.gullet.beginGroup(); + } + + // Use old \color behavior (same as LaTeX's \textcolor) if requested. + // We do this within the group for the math expression, so it doesn't + // pollute settings.macros. + if (this.settings.colorIsTextColor) { + this.gullet.macros.set("\\color", "\\textcolor"); + } + try { + // Try to parse the input + const parse = this.parseExpression(false); + + // If we succeeded, make sure there's an EOF at the end + this.expect("EOF"); + + // End the group namespace for the expression + if (!this.settings.globalGroup) { + this.gullet.endGroup(); + } + return parse; + + // Close any leftover groups in case of a parse error. + } finally { + this.gullet.endGroups(); + } + } + + /** + * Fully parse a separate sequence of tokens as a separate job. + * Tokens should be specified in reverse order, as in a MacroDefinition. + */ + subparse(tokens) { + // Save the next token from the current job. + const oldToken = this.nextToken; + this.consume(); + + // Run the new job, terminating it with an excess '}' + this.gullet.pushToken(new Token("}")); + this.gullet.pushTokens(tokens); + const parse = this.parseExpression(false); + this.expect("}"); + + // Restore the next token from the current job. + this.nextToken = oldToken; + return parse; + } + /** + * Parses an "expression", which is a list of atoms. + * + * `breakOnInfix`: Should the parsing stop when we hit infix nodes? This + * happens when functions have higher precedence than infix + * nodes in implicit parses. + * + * `breakOnTokenText`: The text of the token that the expression should end + * with, or `null` if something else should end the + * expression. + */ + parseExpression(breakOnInfix, breakOnTokenText) { + const body = []; + // Keep adding atoms to the body until we can't parse any more atoms (either + // we reached the end, a }, or a \right) + while (true) { + // Ignore spaces in math mode + if (this.mode === "math") { + this.consumeSpaces(); + } + const lex = this.fetch(); + if (Parser.endOfExpression.has(lex.text)) { + break; + } + if (breakOnTokenText && lex.text === breakOnTokenText) { + break; + } + if (breakOnInfix && src_functions[lex.text] && src_functions[lex.text].infix) { + break; + } + const atom = this.parseAtom(breakOnTokenText); + if (!atom) { + break; + } else if (atom.type === "internal") { + // Internal nodes do not appear in parse tree + continue; + } + body.push(atom); + } + if (this.mode === "text") { + this.formLigatures(body); + } + return this.handleInfixNodes(body); + } + + /** + * Rewrites infix operators such as \over with corresponding commands such + * as \frac. + * + * There can only be one infix operator per group. If there's more than one + * then the expression is ambiguous. This can be resolved by adding {}. + */ + handleInfixNodes(body) { + let overIndex = -1; + let funcName; + for (let i = 0; i < body.length; i++) { + const node = body[i]; + if (node.type === "infix") { + if (overIndex !== -1) { + throw new src_ParseError("only one infix operator per group", node.token); + } + overIndex = i; + funcName = node.replaceWith; + } + } + if (overIndex !== -1 && funcName) { + let numerNode; + let denomNode; + const numerBody = body.slice(0, overIndex); + const denomBody = body.slice(overIndex + 1); + if (numerBody.length === 1 && numerBody[0].type === "ordgroup") { + numerNode = numerBody[0]; + } else { + numerNode = { + type: "ordgroup", + mode: this.mode, + body: numerBody + }; + } + if (denomBody.length === 1 && denomBody[0].type === "ordgroup") { + denomNode = denomBody[0]; + } else { + denomNode = { + type: "ordgroup", + mode: this.mode, + body: denomBody + }; + } + let node; + if (funcName === "\\\\abovefrac") { + node = this.callFunction(funcName, [numerNode, body[overIndex], denomNode], []); + } else { + node = this.callFunction(funcName, [numerNode, denomNode], []); + } + return [node]; + } else { + return body; + } + } + + /** + * Handle a subscript or superscript with nice errors. + */ + handleSupSubscript(name // For error reporting. + ) { + const symbolToken = this.fetch(); + const symbol = symbolToken.text; + this.consume(); + this.consumeSpaces(); // ignore spaces before sup/subscript argument + + // Skip over allowed internal nodes such as \relax + let group; + do { + var _group; + group = this.parseGroup(name); + } while (((_group = group) == null ? void 0 : _group.type) === "internal"); + if (!group) { + throw new src_ParseError("Expected group after '" + symbol + "'", symbolToken); + } + return group; + } + + /** + * Converts the textual input of an unsupported command into a text node + * contained within a color node whose color is determined by errorColor + */ + formatUnsupportedCmd(text) { + const textordArray = []; + for (let i = 0; i < text.length; i++) { + textordArray.push({ + type: "textord", + mode: "text", + text: text[i] + }); + } + const textNode = { + type: "text", + mode: this.mode, + body: textordArray + }; + const colorNode = { + type: "color", + mode: this.mode, + color: this.settings.errorColor, + body: [textNode] + }; + return colorNode; + } + + /** + * Parses a group with optional super/subscripts. + */ + parseAtom(breakOnTokenText) { + // The body of an atom is an implicit group, so that things like + // \left(x\right)^2 work correctly. + const base = this.parseGroup("atom", breakOnTokenText); + + // Internal nodes (e.g. \relax) cannot support super/subscripts. + // Instead, we will pick up super/subscripts with blank base next round. + if ((base == null ? void 0 : base.type) === "internal") { + return base; + } + + // In text mode, we don't have superscripts or subscripts + if (this.mode === "text") { + return base; + } + let superscript; + let subscript; + while (true) { + // Guaranteed in math mode, so eat any spaces first. + this.consumeSpaces(); + + // Lex the first token + const lex = this.fetch(); + if (lex.text === "\\limits" || lex.text === "\\nolimits") { + // We got a limit control + if (base && base.type === "op") { + base.limits = lex.text === "\\limits"; + base.alwaysHandleSupSub = true; + } else if (base && base.type === "operatorname") { + if (base.alwaysHandleSupSub) { + base.limits = lex.text === "\\limits"; + } + } else { + throw new src_ParseError("Limit controls must follow a math operator", lex); + } + this.consume(); + } else if (lex.text === "^") { + // We got a superscript start + if (superscript) { + throw new src_ParseError("Double superscript", lex); + } + superscript = this.handleSupSubscript("superscript"); + } else if (lex.text === "_") { + // We got a subscript start + if (subscript) { + throw new src_ParseError("Double subscript", lex); + } + subscript = this.handleSupSubscript("subscript"); + } else if (lex.text === "'") { + // We got a prime + if (superscript) { + throw new src_ParseError("Double superscript", lex); + } + const prime = { + type: "textord", + mode: this.mode, + text: "\\prime" + }; + + // Many primes can be grouped together, so we handle this here + const primes = [prime]; + this.consume(); + // Keep lexing tokens until we get something that's not a prime + while (this.fetch().text === "'") { + // For each one, add another prime to the list + primes.push(prime); + this.consume(); + } + // If there's a superscript following the primes, combine that + // superscript in with the primes. + if (this.fetch().text === "^") { + primes.push(this.handleSupSubscript("superscript")); + } + // Put everything into an ordgroup as the superscript + superscript = { + type: "ordgroup", + mode: this.mode, + body: primes + }; + } else if (uSubsAndSups[lex.text]) { + // A Unicode subscript or superscript character. + // We treat these similarly to the unicode-math package. + // So we render a string of Unicode (sub|super)scripts the + // same as a (sub|super)script of regular characters. + const isSub = unicodeSubRegEx.test(lex.text); + const subsupTokens = []; + subsupTokens.push(new Token(uSubsAndSups[lex.text])); + this.consume(); + // Continue fetching tokens to fill out the string. + while (true) { + const token = this.fetch().text; + if (!uSubsAndSups[token]) { + break; + } + if (unicodeSubRegEx.test(token) !== isSub) { + break; + } + subsupTokens.unshift(new Token(uSubsAndSups[token])); + this.consume(); + } + // Now create a (sub|super)script. + const body = this.subparse(subsupTokens); + if (isSub) { + subscript = { + type: "ordgroup", + mode: "math", + body + }; + } else { + superscript = { + type: "ordgroup", + mode: "math", + body + }; + } + } else { + // If it wasn't ^, _, or ', stop parsing super/subscripts + break; + } + } + + // Base must be set if superscript or subscript are set per logic above, + // but need to check here for type check to pass. + if (superscript && subscript) { + return { + type: "supsub", + mode: this.mode, + base, + sup: superscript, + sub: subscript + }; + } else if (superscript) { + return { + type: "supsub", + mode: this.mode, + base, + sup: superscript + }; + } else if (subscript) { + return { + type: "supsub", + mode: this.mode, + base, + sub: subscript + }; + } else { + // Otherwise return the original body + return base; + } + } + + /** + * Parses an entire function, including its base and all of its arguments. + */ + parseFunction(breakOnTokenText, name // For determining its context + ) { + const token = this.fetch(); + const func = token.text; + const funcData = src_functions[func]; + if (!funcData) { + return null; + } + this.consume(); // consume command token + + if (name && name !== "atom" && !funcData.allowedInArgument) { + throw new src_ParseError("Got function '" + func + "' with no arguments" + (name ? " as " + name : ""), token); + // Treat undefined allowedInText as false. + } else if (this.mode === "text" && !funcData.allowedInText) { + throw new src_ParseError("Can't use function '" + func + "' in text mode", token); + // Treat undefined allowedInMath as true. + } else if (this.mode === "math" && funcData.allowedInMath === false) { + throw new src_ParseError("Can't use function '" + func + "' in math mode", token); + } + const _this$parseArguments = this.parseArguments(func, funcData), + args = _this$parseArguments.args, + optArgs = _this$parseArguments.optArgs; + return this.callFunction(func, args, optArgs, token, breakOnTokenText); + } + + /** + * Call a function handler with a suitable context and arguments. + */ + callFunction(name, args, optArgs, token, breakOnTokenText) { + const context = { + funcName: name, + parser: this, + token, + breakOnTokenText + }; + const func = src_functions[name]; + if (func && func.handler) { + return func.handler(context, args, optArgs); + } else { + throw new src_ParseError("No function handler for " + name); + } + } + + /** + * Parses the arguments of a function or environment + */ + parseArguments(func, + // Should look like "\name" or "\begin{name}". + funcData) { + var _funcData$numOptional; + const numOptionalArgs = (_funcData$numOptional = funcData.numOptionalArgs) != null ? _funcData$numOptional : 0; + const totalArgs = funcData.numArgs + numOptionalArgs; + if (totalArgs === 0) { + return { + args: [], + optArgs: [] + }; + } + const args = []; + const optArgs = []; + for (let i = 0; i < totalArgs; i++) { + var _funcData$argTypes; + let argType = (_funcData$argTypes = funcData.argTypes) == null ? void 0 : _funcData$argTypes[i]; + const isOptional = i < numOptionalArgs; + if ("primitive" in funcData && funcData.primitive && argType == null || + // \sqrt expands into primitive if optional argument doesn't exist + funcData.type === "sqrt" && i === 1 && optArgs[0] == null) { + argType = "primitive"; + } + const arg = this.parseGroupOfType("argument to '" + func + "'", argType, isOptional); + if (isOptional) { + optArgs.push(arg); + } else if (arg != null) { + args.push(arg); + } else { + // should be unreachable + throw new src_ParseError("Null argument, please report this as a bug"); + } + } + return { + args, + optArgs + }; + } + + /** + * Parses a group when the mode is changing. + */ + parseGroupOfType(name, type, optional) { + switch (type) { + case "color": + return this.parseColorGroup(optional); + case "size": + return this.parseSizeGroup(optional); + case "url": + return this.parseUrlGroup(optional); + case "math": + case "text": + return this.parseArgumentGroup(optional, type); + case "hbox": + { + // hbox argument type wraps the argument in the equivalent of + // \hbox, which is like \text but switching to \textstyle size + // and resetting math font. + const group = this.parseArgumentGroup(optional, "text"); + return group != null ? { + type: "styling", + mode: group.mode, + body: [group], + style: "text", + // simulate \textstyle + resetFont: true + } : null; + } + case "raw": + { + const token = this.parseStringGroup(optional); + return token != null ? { + type: "raw", + mode: "text", + string: token.text + } : null; + } + case "primitive": + { + if (optional) { + throw new src_ParseError("A primitive argument cannot be optional"); + } + const group = this.parseGroup(name); + if (group == null) { + throw new src_ParseError("Expected group as " + name, this.fetch()); + } + return group; + } + case "original": + case undefined: + return this.parseArgumentGroup(optional); + default: + throw new src_ParseError("Unknown group type as " + name, this.fetch()); + } + } + + /** + * Discard any space tokens, fetching the next non-space token. + */ + consumeSpaces() { + while (this.fetch().text === " ") { + this.consume(); + } + } + + /** + * Parses a group, essentially returning the string formed by the + * brace-enclosed tokens plus some position information. + */ + parseStringGroup(optional) { + const argToken = this.gullet.scanArgument(optional); + if (argToken == null) { + return null; + } + let str = ""; + let nextToken; + while ((nextToken = this.fetch()).text !== "EOF") { + str += nextToken.text; + this.consume(); + } + this.consume(); // consume the end of the argument + argToken.text = str; + return argToken; + } + + /** + * Parses a regex-delimited group: the largest sequence of tokens + * whose concatenated strings match `regex`. Returns the string + * formed by the tokens plus some position information. + */ + parseRegexGroup(regex, modeName // Used to describe the mode in error messages. + ) { + const firstToken = this.fetch(); + let lastToken = firstToken; + let str = ""; + let nextToken; + while ((nextToken = this.fetch()).text !== "EOF" && regex.test(str + nextToken.text)) { + lastToken = nextToken; + str += lastToken.text; + this.consume(); + } + if (str === "") { + throw new src_ParseError("Invalid " + modeName + ": '" + firstToken.text + "'", firstToken); + } + return firstToken.range(lastToken, str); + } + + /** + * Parses a color description. + */ + parseColorGroup(optional) { + const res = this.parseStringGroup(optional); + if (res == null) { + return null; + } + const match = /^(#[a-f0-9]{3,4}|#[a-f0-9]{6}|#[a-f0-9]{8}|[a-f0-9]{6}|[a-z]+)$/i.exec(res.text); + if (!match) { + throw new src_ParseError("Invalid color: '" + res.text + "'", res); + } + let color = match[0]; + if (/^[0-9a-f]{6}$/i.test(color)) { + // We allow a 6-digit HTML color spec without a leading "#". + // This follows the xcolor package's HTML color model. + // Predefined color names are all missed by this RegEx pattern. + color = "#" + color; + } + return { + type: "color-token", + mode: this.mode, + color + }; + } + + /** + * Parses a size specification, consisting of magnitude and unit. + */ + parseSizeGroup(optional) { + let res; + let isBlank = false; + // don't expand before parseStringGroup + this.gullet.consumeSpaces(); + if (!optional && this.gullet.future().text !== "{") { + res = this.parseRegexGroup(/^[-+]? *(?:$|\d+|\d+\.\d*|\.\d*) *[a-z]{0,2} *$/, "size"); + } else { + res = this.parseStringGroup(optional); + } + if (!res) { + return null; + } + if (!optional && res.text.length === 0) { + // Because we've tested for what is !optional, this block won't + // affect \kern, \hspace, etc. It will capture the mandatory arguments + // to \genfrac and \above. + res.text = "0pt"; // Enable \above{} + isBlank = true; // This is here specifically for \genfrac + } + const match = /([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(res.text); + if (!match) { + throw new src_ParseError("Invalid size: '" + res.text + "'", res); + } + const data = { + number: +(match[1] + match[2]), + // sign + magnitude, cast to number + unit: match[3] + }; + if (!validUnit(data)) { + throw new src_ParseError("Invalid unit: '" + data.unit + "'", res); + } + return { + type: "size", + mode: this.mode, + value: data, + isBlank + }; + } + + /** + * Parses an URL, checking escaped letters and allowed protocols, + * and setting the catcode of % as an active character (as in \hyperref). + */ + parseUrlGroup(optional) { + this.gullet.lexer.setCatcode("%", 13); // active character + this.gullet.lexer.setCatcode("~", 12); // other character + const res = this.parseStringGroup(optional); + this.gullet.lexer.setCatcode("%", 14); // comment character + this.gullet.lexer.setCatcode("~", 13); // active character + if (res == null) { + return null; + } + // hyperref package allows backslashes alone in href, but doesn't + // generate valid links in such cases; we interpret this as + // "undefined" behaviour, and keep them as-is. Some browser will + // replace backslashes with forward slashes. + const url = res.text.replace(/\\([#$%&~_^{}])/g, '$1'); + return { + type: "url", + mode: this.mode, + url + }; + } + + /** + * Parses an argument with the mode specified. + */ + parseArgumentGroup(optional, mode) { + const argToken = this.gullet.scanArgument(optional); + if (argToken == null) { + return null; + } + const outerMode = this.mode; + if (mode) { + // Switch to specified mode + this.switchMode(mode); + } + this.gullet.beginGroup(); + const expression = this.parseExpression(false, "EOF"); + // TODO: find an alternative way to denote the end + this.expect("EOF"); // expect the end of the argument + this.gullet.endGroup(); + const result = { + type: "ordgroup", + mode: this.mode, + loc: argToken.loc, + body: expression + }; + if (mode) { + // Switch mode back + this.switchMode(outerMode); + } + return result; + } + + /** + * Parses an ordinary group, which is either a single nucleus (like "x") + * or an expression in braces (like "{x+y}") or an implicit group, a group + * that starts at the current position, and ends right before a higher explicit + * group ends, or at EOF. + */ + parseGroup(name, + // For error reporting. + breakOnTokenText) { + const firstToken = this.fetch(); + const text = firstToken.text; + let result; + // Try to parse an open brace or \begingroup + if (text === "{" || text === "\\begingroup") { + this.consume(); + const groupEnd = text === "{" ? "}" : "\\endgroup"; + this.gullet.beginGroup(); + // If we get a brace, parse an expression + const expression = this.parseExpression(false, groupEnd); + const lastToken = this.fetch(); + this.expect(groupEnd); // Check that we got a matching closing brace + this.gullet.endGroup(); + result = { + type: "ordgroup", + mode: this.mode, + loc: SourceLocation.range(firstToken, lastToken), + body: expression, + // A group formed by \begingroup...\endgroup is a semi-simple group + // which doesn't affect spacing in math mode, i.e., is transparent. + // https://tex.stackexchange.com/questions/1930/when-should-one- + // use-begingroup-instead-of-bgroup + semisimple: text === "\\begingroup" || undefined + }; + } else { + // If there exists a function with this name, parse the function. + // Otherwise, just return a nucleus + result = this.parseFunction(breakOnTokenText, name) || this.parseSymbol(); + if (result == null && text[0] === "\\" && !Object.prototype.hasOwnProperty.call(implicitCommands, text)) { + if (this.settings.throwOnError) { + throw new src_ParseError("Undefined control sequence: " + text, firstToken); + } + result = this.formatUnsupportedCmd(text); + this.consume(); + } + } + return result; + } + + /** + * Form ligature-like combinations of characters for text mode. + * This includes inputs like "--", "---", "``" and "''". + * The result will simply replace multiple textord nodes with a single + * character in each value by a single textord node having multiple + * characters in its value. The representation is still ASCII source. + * The group will be modified in place. + */ + formLigatures(group) { + let n = group.length - 1; + for (let i = 0; i < n; ++i) { + const a = group[i]; + if (a.type !== "textord") { + continue; + } + const v = a.text; + const next = group[i + 1]; + if (!next || next.type !== "textord") { + continue; + } + if (v === "-" && next.text === "-") { + const afterNext = group[i + 2]; + if (i + 1 < n && afterNext && afterNext.type === "textord" && afterNext.text === "-") { + group.splice(i, 3, { + type: "textord", + mode: "text", + loc: SourceLocation.range(a, afterNext), + text: "---" + }); + n -= 2; + } else { + group.splice(i, 2, { + type: "textord", + mode: "text", + loc: SourceLocation.range(a, next), + text: "--" + }); + n -= 1; + } + } + if ((v === "'" || v === "`") && next.text === v) { + group.splice(i, 2, { + type: "textord", + mode: "text", + loc: SourceLocation.range(a, next), + text: v + v + }); + n -= 1; + } + } + } + + /** + * Parse a single symbol out of the string. Here, we handle single character + * symbols and special functions like \verb. + */ + parseSymbol() { + const nucleus = this.fetch(); + let text = nucleus.text; + if (/^\\verb[^a-zA-Z]/.test(text)) { + this.consume(); + let arg = text.slice(5); + const star = arg.charAt(0) === "*"; + if (star) { + arg = arg.slice(1); + } + // Lexer's tokenRegex is constructed to always have matching + // first/last characters. + if (arg.length < 2 || arg.charAt(0) !== arg.slice(-1)) { + throw new src_ParseError("\\verb assertion failed --\n please report what input caused this bug"); + } + arg = arg.slice(1, -1); // remove first and last char + + return { + type: "verb", + mode: "text", + body: arg, + star + }; + } + // At this point, we should have a symbol, possibly with accents. + // First expand any accented base symbol according to unicodeSymbols. + if (Object.prototype.hasOwnProperty.call(unicodeSymbols, text[0]) && !src_symbols[this.mode][text[0]]) { + // This behavior is not strict (XeTeX-compatible) in math mode. + if (this.settings.strict && this.mode === "math") { + handleStrict({ + strict: this.settings.strict, + errorCode: "unicodeTextInMathMode", + errorMsg: "Accented Unicode text character \"" + text[0] + "\" used in math mode", + report: true, + token: nucleus + }); + } + text = unicodeSymbols[text[0]] + text.slice(1); + } + // Strip off any combining characters + const match = combiningDiacriticalMarksEndRegex.exec(text); + if (match) { + text = text.substring(0, match.index); + if (text === 'i') { + text = '\u0131'; // dotless i, in math and text mode + } else if (text === 'j') { + text = '\u0237'; // dotless j, in math and text mode + } + } + // Recognize base symbol + let symbol; + if (src_symbols[this.mode][text]) { + if (this.settings.strict && this.mode === 'math' && extraLatin.includes(text)) { + handleStrict({ + strict: this.settings.strict, + errorCode: "unicodeTextInMathMode", + errorMsg: "Latin-1/Unicode text character \"" + text[0] + "\" used in math mode", + report: true, + token: nucleus + }); + } + const group = src_symbols[this.mode][text].group; + const loc = SourceLocation.range(nucleus); + let s; + if (isAtom(group)) { + s = { + type: "atom", + mode: this.mode, + family: group, + loc, + text + }; + } else { + s = { + type: group, + mode: this.mode, + loc, + text + }; + } + symbol = s; + } else if (text.charCodeAt(0) >= 0x80) { + // no symbol for e.g. ^ + if (this.settings.strict) { + if (!supportedCodepoint(text.charCodeAt(0))) { + handleStrict({ + strict: this.settings.strict, + errorCode: "unknownSymbol", + errorMsg: "Unrecognized Unicode character \"" + text[0] + "\"" + (" (" + text.charCodeAt(0) + ")"), + report: true, + token: nucleus + }); + } else if (this.mode === "math") { + handleStrict({ + strict: this.settings.strict, + errorCode: "unicodeTextInMathMode", + errorMsg: "Unicode text character \"" + text[0] + "\" used in math mode", + report: true, + token: nucleus + }); + } + } + // All nonmathematical Unicode characters are rendered as if they + // are in text mode (wrapped in \text) because that's what it + // takes to render them in LaTeX. Setting `mode: this.mode` is + // another natural choice (the user requested math mode), but + // this makes it more difficult for getCharacterMetrics() to + // distinguish Unicode characters without metrics and those for + // which we want to simulate the letter M. + symbol = { + type: "textord", + mode: "text", + loc: SourceLocation.range(nucleus), + text + }; + } else { + return null; // EOF, ^, _, {, }, etc. + } + this.consume(); + // Transform combining characters into accents + if (match) { + for (let i = 0; i < match[0].length; i++) { + const accent = match[0][i]; + if (!unicodeAccents[accent]) { + throw new src_ParseError("Unknown accent ' " + accent + "'", nucleus); + } + const command = unicodeAccents[accent][this.mode] || unicodeAccents[accent].text; + if (!command) { + throw new src_ParseError("Accent " + accent + " unsupported in " + this.mode + " mode", nucleus); + } + symbol = { + type: "accent", + mode: this.mode, + loc: SourceLocation.range(nucleus), + label: command, + isStretchy: false, + isShifty: true, + base: symbol + }; + } + } + return symbol; + } +} +Parser.endOfExpression = new Set(["}", "\\endgroup", "\\end", "\\right", "&"]); +;// ./src/parseTree.ts + + + +/** + * Parses an expression using a Parser, then returns the parsed result. + */ +const parseTree = function (toParse, settings) { + if (!(typeof toParse === 'string' || toParse instanceof String)) { + throw new TypeError('KaTeX can only parse string typed expression'); + } + const parser = new Parser(toParse, settings); + + // Blank out any \df@tag to avoid spurious "Duplicate \tag" errors + delete parser.gullet.macros.current["\\df@tag"]; + let tree = parser.parse(); + + // Prevent a color definition from persisting between calls to katex.render(). + delete parser.gullet.macros.current["\\current@color"]; + delete parser.gullet.macros.current["\\color"]; + + // If the input used \tag, it will set the \df@tag macro to the tag. + // In this case, we separately parse the tag and wrap the tree. + if (parser.gullet.macros.get("\\df@tag")) { + if (!settings.displayMode) { + throw new src_ParseError("\\tag works only in display equations"); + } + tree = [{ + type: "tag", + mode: "text", + body: tree, + tag: parser.subparse([new Token("\\df@tag")]) + }]; + } + return tree; +}; +/* harmony default export */ var src_parseTree = (parseTree); +;// ./katex.ts +/* eslint no-console:0 */ +/** + * This is the main entry point for KaTeX. Here, we expose functions for + * rendering expressions either to DOM nodes or to markup strings. + * + * We also expose the ParseError class to check if errors thrown from KaTeX are + * errors in the expression, or errors in javascript handling. + */ + + + + + + + + + + + +/** + * Parse and build an expression, and place that expression in the DOM node + * given. + */ +let render = function (expression, baseNode, options) { + baseNode.textContent = ""; + const node = renderToDomTree(expression, options).toNode(); + baseNode.appendChild(node); +}; + +// KaTeX's styles don't work properly in quirks mode. Print out an error, and +// disable rendering. +if (typeof document !== "undefined") { + if (document.compatMode !== "CSS1Compat") { + typeof console !== "undefined" && console.warn("Warning: KaTeX doesn't work in quirks mode. Make sure your " + "website has a suitable doctype."); + render = function () { + throw new src_ParseError("KaTeX doesn't work in quirks mode."); + }; + } +} + +/** + * Parse and build an expression, and return the markup for that. + */ +const renderToString = function (expression, options) { + const markup = renderToDomTree(expression, options).toMarkup(); + return markup; +}; + +/** + * Parse an expression and return the parse tree. + */ +const generateParseTree = function (expression, options) { + const settings = new Settings(options); + return src_parseTree(expression, settings); +}; + +/** + * If the given error is a KaTeX ParseError and options.throwOnError is false, + * renders the invalid LaTeX as a span with hover title giving the KaTeX + * error message. Otherwise, simply throws the error. + */ +const renderError = function (error, expression, options) { + if (options.throwOnError || !(error instanceof src_ParseError)) { + throw error; + } + const node = makeSpan(["katex-error"], [new SymbolNode(expression)]); + node.setAttribute("title", error.toString()); + node.setAttribute("style", "color:" + options.errorColor); + return node; +}; + +/** + * Generates and returns the katex build tree. This is used for advanced + * use cases (like rendering to custom output). + */ +const renderToDomTree = function (expression, options) { + const settings = new Settings(options); + try { + const tree = src_parseTree(expression, settings); + return buildTree(tree, expression, settings); + } catch (error) { + return renderError(error, expression, settings); + } +}; + +/** + * Generates and returns the katex build tree, with just HTML (no MathML). + * This is used for advanced use cases (like rendering to custom output). + */ +const renderToHTMLTree = function (expression, options) { + const settings = new Settings(options); + try { + const tree = src_parseTree(expression, settings); + return buildHTMLTree(tree, settings); + } catch (error) { + return renderError(error, expression, settings); + } +}; +const version = "0.19.0"; +const __domTree = { + Span: Span, + Anchor: Anchor, + SymbolNode: SymbolNode, + SvgNode: SvgNode, + PathNode: PathNode, + LineNode: LineNode +}; + +// ESM exports + + +// CJS exports and ESM default export +/* harmony default export */ var katex = ({ + /** + * Current KaTeX version + */ + version, + /** + * Renders the given LaTeX into an HTML+MathML combination, and adds + * it as a child to the specified DOM node. + */ + render, + /** + * Renders the given LaTeX into an HTML+MathML combination string, + * for sending to the client. + */ + renderToString, + /** + * KaTeX error, usually during parsing. + */ + ParseError: src_ParseError, + /** + * The schema of Settings + */ + SETTINGS_SCHEMA: SETTINGS_SCHEMA, + /** + * Parses the given LaTeX into KaTeX's internal parse tree structure, + * without rendering to HTML or MathML. + * + * NOTE: This method is not currently recommended for public use. + * The internal tree representation is unstable and is very likely + * to change. Use at your own risk. + */ + __parse: generateParseTree, + /** + * Renders the given LaTeX into an HTML+MathML internal DOM tree + * representation, without flattening that representation to a string. + * + * NOTE: This method is not currently recommended for public use. + * The internal tree representation is unstable and is very likely + * to change. Use at your own risk. + */ + __renderToDomTree: renderToDomTree, + /** + * Renders the given LaTeX into an HTML internal DOM tree representation, + * without MathML and without flattening that representation to a string. + * + * NOTE: This method is not currently recommended for public use. + * The internal tree representation is unstable and is very likely + * to change. Use at your own risk. + */ + __renderToHTMLTree: renderToHTMLTree, + /** + * extends internal font metrics object with a new object + * each key in the new object represents a font name + */ + __setFontMetrics: setFontMetrics, + /** + * adds a new symbol to builtin symbols table + */ + __defineSymbol: defineSymbol, + /** + * adds a new function to builtin function list, + * which directly produce parse tree elements + * and have their own html/mathml builders + */ + __defineFunction: defineFunction, + /** + * adds a new macro to builtin macro list + */ + __defineMacro: defineMacro, + /** + * Expose the dom tree node types, which can be useful for type checking nodes. + * + * NOTE: These methods are not currently recommended for public use. + * The internal tree representation is unstable and is very likely + * to change. Use at your own risk. + */ + __domTree +}); +;// ./katex.webpack.js +/** + * This is the webpack entry point for KaTeX. As ECMAScript, flow[1] and jest[2] + * doesn't support CSS modules natively, a separate entry point is used and + * it is not flowtyped. + * + * [1] https://gist.github.com/lambdahands/d19e0da96285b749f0ef + * [2] https://facebook.github.io/jest/docs/en/webpack.html + */ + + +/* harmony default export */ var katex_webpack = (katex); +__webpack_exports__ = __webpack_exports__["default"]; +/******/ return __webpack_exports__; +/******/ })() +; +}); \ No newline at end of file diff --git a/internal/embedded/static/vendor/katex/katex.min.css b/internal/embedded/static/vendor/katex/katex.min.css new file mode 100644 index 00000000..056c21a2 --- /dev/null +++ b/internal/embedded/static/vendor/katex/katex.min.css @@ -0,0 +1 @@ +@font-face{font-display:block;font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(fonts/KaTeX_AMS-Regular.woff2) format("woff2"),url(fonts/KaTeX_AMS-Regular.woff) format("woff"),url(fonts/KaTeX_AMS-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Caligraphic-Bold.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Bold.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Bold.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Caligraphic-Regular.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Regular.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Fraktur-Bold.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Bold.woff) format("woff"),url(fonts/KaTeX_Fraktur-Bold.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Fraktur-Regular.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Regular.woff) format("woff"),url(fonts/KaTeX_Fraktur-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Main-Bold.woff2) format("woff2"),url(fonts/KaTeX_Main-Bold.woff) format("woff"),url(fonts/KaTeX_Main-Bold.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Main-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Main-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Main-BoldItalic.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Main-Italic.woff2) format("woff2"),url(fonts/KaTeX_Main-Italic.woff) format("woff"),url(fonts/KaTeX_Main-Italic.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Main-Regular.woff2) format("woff2"),url(fonts/KaTeX_Main-Regular.woff) format("woff"),url(fonts/KaTeX_Main-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Math-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Math-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Math-BoldItalic.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Math-Italic.woff2) format("woff2"),url(fonts/KaTeX_Math-Italic.woff) format("woff"),url(fonts/KaTeX_Math-Italic.ttf) format("truetype")}@font-face{font-display:block;font-family:"KaTeX_SansSerif";font-style:normal;font-weight:700;src:url(fonts/KaTeX_SansSerif-Bold.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Bold.woff) format("woff"),url(fonts/KaTeX_SansSerif-Bold.ttf) format("truetype")}@font-face{font-display:block;font-family:"KaTeX_SansSerif";font-style:italic;font-weight:400;src:url(fonts/KaTeX_SansSerif-Italic.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Italic.woff) format("woff"),url(fonts/KaTeX_SansSerif-Italic.ttf) format("truetype")}@font-face{font-display:block;font-family:"KaTeX_SansSerif";font-style:normal;font-weight:400;src:url(fonts/KaTeX_SansSerif-Regular.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Regular.woff) format("woff"),url(fonts/KaTeX_SansSerif-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Script-Regular.woff2) format("woff2"),url(fonts/KaTeX_Script-Regular.woff) format("woff"),url(fonts/KaTeX_Script-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size1-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size1-Regular.woff) format("woff"),url(fonts/KaTeX_Size1-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size2-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size2-Regular.woff) format("woff"),url(fonts/KaTeX_Size2-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size3-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size3-Regular.woff) format("woff"),url(fonts/KaTeX_Size3-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size4-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size4-Regular.woff) format("woff"),url(fonts/KaTeX_Size4-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Typewriter-Regular.woff2) format("woff2"),url(fonts/KaTeX_Typewriter-Regular.woff) format("woff"),url(fonts/KaTeX_Typewriter-Regular.ttf) format("truetype")}.katex{font:normal 1.21em KaTeX_Main,math,Times New Roman,serif;line-height:1.2;position:relative;text-indent:0;text-rendering:auto}.katex *{-ms-high-contrast-adjust:none!important;border-color:currentColor}.katex .katex-version:after{content:"0.19.0"}.katex .katex-mathml{border:0;-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.katex .katex-html>.katex-newline{display:block}.katex .katex-base{position:relative;white-space:nowrap;width:-webkit-min-content;width:-moz-min-content;width:min-content}.katex .katex-base,.katex .katex-strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathboldfrak,.katex .textboldfrak{font-family:KaTeX_Fraktur;font-weight:700}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .mathsfit,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .katex-vbox{align-items:baseline;display:inline-flex;flex-direction:column}.katex .katex-thinbox{display:inline-flex;flex-direction:row;max-width:0;width:0}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .katex-hdashline,.katex .katex-hline,.katex .katex-overline .overline-line,.katex .katex-rule,.katex .katex-underline .underline-line,.katex .mfrac .frac-line{min-height:1px}.katex .mspace{display:inline-block}.katex .katex-smash{display:inline;line-height:0}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap>.katex-inner,.katex .llap>.katex-inner,.katex .rlap>.katex-inner{position:absolute}.katex .clap>.katex-fix,.katex .llap>.katex-fix,.katex .rlap>.katex-fix{display:inline-block}.katex .llap>.katex-inner{right:0}.katex .clap>.katex-inner,.katex .rlap>.katex-inner{left:0}.katex .clap>.katex-inner>span{margin-left:-50%;margin-right:50%}.katex .katex-rule{border:0 solid;display:inline-block;position:relative}.katex .katex-hline,.katex .katex-overline .overline-line,.katex .katex-underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .katex-hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt>.katex-root{margin-left:.2777777778em;margin-right:-.5555555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .katex-sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .katex-sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .katex-sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .katex-sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .katex-sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .katex-sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .katex-sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .katex-sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .katex-sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .katex-sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .katex-sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .katex-sizing.reset-size2.size1{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .katex-sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .katex-sizing.reset-size2.size3{font-size:1.1666666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .katex-sizing.reset-size2.size4{font-size:1.3333333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .katex-sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .katex-sizing.reset-size2.size6{font-size:1.6666666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .katex-sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .katex-sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .katex-sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .katex-sizing.reset-size2.size10{font-size:3.4566666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .katex-sizing.reset-size2.size11{font-size:4.1466666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .katex-sizing.reset-size3.size1{font-size:.7142857143em}.katex .fontsize-ensurer.reset-size3.size2,.katex .katex-sizing.reset-size3.size2{font-size:.8571428571em}.katex .fontsize-ensurer.reset-size3.size3,.katex .katex-sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .katex-sizing.reset-size3.size4{font-size:1.1428571429em}.katex .fontsize-ensurer.reset-size3.size5,.katex .katex-sizing.reset-size3.size5{font-size:1.2857142857em}.katex .fontsize-ensurer.reset-size3.size6,.katex .katex-sizing.reset-size3.size6{font-size:1.4285714286em}.katex .fontsize-ensurer.reset-size3.size7,.katex .katex-sizing.reset-size3.size7{font-size:1.7142857143em}.katex .fontsize-ensurer.reset-size3.size8,.katex .katex-sizing.reset-size3.size8{font-size:2.0571428571em}.katex .fontsize-ensurer.reset-size3.size9,.katex .katex-sizing.reset-size3.size9{font-size:2.4685714286em}.katex .fontsize-ensurer.reset-size3.size10,.katex .katex-sizing.reset-size3.size10{font-size:2.9628571429em}.katex .fontsize-ensurer.reset-size3.size11,.katex .katex-sizing.reset-size3.size11{font-size:3.5542857143em}.katex .fontsize-ensurer.reset-size4.size1,.katex .katex-sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .katex-sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .katex-sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .katex-sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .katex-sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .katex-sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .katex-sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .katex-sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .katex-sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .katex-sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .katex-sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .katex-sizing.reset-size5.size1{font-size:.5555555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .katex-sizing.reset-size5.size2{font-size:.6666666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .katex-sizing.reset-size5.size3{font-size:.7777777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .katex-sizing.reset-size5.size4{font-size:.8888888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .katex-sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .katex-sizing.reset-size5.size6{font-size:1.1111111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .katex-sizing.reset-size5.size7{font-size:1.3333333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .katex-sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .katex-sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .katex-sizing.reset-size5.size10{font-size:2.3044444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .katex-sizing.reset-size5.size11{font-size:2.7644444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .katex-sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .katex-sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .katex-sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .katex-sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .katex-sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .katex-sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .katex-sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .katex-sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .katex-sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .katex-sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .katex-sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .katex-sizing.reset-size7.size1{font-size:.4166666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .katex-sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .katex-sizing.reset-size7.size3{font-size:.5833333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .katex-sizing.reset-size7.size4{font-size:.6666666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .katex-sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .katex-sizing.reset-size7.size6{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .katex-sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .katex-sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .katex-sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .katex-sizing.reset-size7.size10{font-size:1.7283333333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .katex-sizing.reset-size7.size11{font-size:2.0733333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .katex-sizing.reset-size8.size1{font-size:.3472222222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .katex-sizing.reset-size8.size2{font-size:.4166666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .katex-sizing.reset-size8.size3{font-size:.4861111111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .katex-sizing.reset-size8.size4{font-size:.5555555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .katex-sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .katex-sizing.reset-size8.size6{font-size:.6944444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .katex-sizing.reset-size8.size7{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .katex-sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .katex-sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .katex-sizing.reset-size8.size10{font-size:1.4402777778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .katex-sizing.reset-size8.size11{font-size:1.7277777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .katex-sizing.reset-size9.size1{font-size:.2893518519em}.katex .fontsize-ensurer.reset-size9.size2,.katex .katex-sizing.reset-size9.size2{font-size:.3472222222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .katex-sizing.reset-size9.size3{font-size:.4050925926em}.katex .fontsize-ensurer.reset-size9.size4,.katex .katex-sizing.reset-size9.size4{font-size:.462962963em}.katex .fontsize-ensurer.reset-size9.size5,.katex .katex-sizing.reset-size9.size5{font-size:.5208333333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .katex-sizing.reset-size9.size6{font-size:.5787037037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .katex-sizing.reset-size9.size7{font-size:.6944444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .katex-sizing.reset-size9.size8{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .katex-sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .katex-sizing.reset-size9.size10{font-size:1.2002314815em}.katex .fontsize-ensurer.reset-size9.size11,.katex .katex-sizing.reset-size9.size11{font-size:1.4398148148em}.katex .fontsize-ensurer.reset-size10.size1,.katex .katex-sizing.reset-size10.size1{font-size:.2410800386em}.katex .fontsize-ensurer.reset-size10.size2,.katex .katex-sizing.reset-size10.size2{font-size:.2892960463em}.katex .fontsize-ensurer.reset-size10.size3,.katex .katex-sizing.reset-size10.size3{font-size:.337512054em}.katex .fontsize-ensurer.reset-size10.size4,.katex .katex-sizing.reset-size10.size4{font-size:.3857280617em}.katex .fontsize-ensurer.reset-size10.size5,.katex .katex-sizing.reset-size10.size5{font-size:.4339440694em}.katex .fontsize-ensurer.reset-size10.size6,.katex .katex-sizing.reset-size10.size6{font-size:.4821600771em}.katex .fontsize-ensurer.reset-size10.size7,.katex .katex-sizing.reset-size10.size7{font-size:.5785920926em}.katex .fontsize-ensurer.reset-size10.size8,.katex .katex-sizing.reset-size10.size8{font-size:.6943105111em}.katex .fontsize-ensurer.reset-size10.size9,.katex .katex-sizing.reset-size10.size9{font-size:.8331726133em}.katex .fontsize-ensurer.reset-size10.size10,.katex .katex-sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .katex-sizing.reset-size10.size11{font-size:1.1996142719em}.katex .fontsize-ensurer.reset-size11.size1,.katex .katex-sizing.reset-size11.size1{font-size:.2009646302em}.katex .fontsize-ensurer.reset-size11.size2,.katex .katex-sizing.reset-size11.size2{font-size:.2411575563em}.katex .fontsize-ensurer.reset-size11.size3,.katex .katex-sizing.reset-size11.size3{font-size:.2813504823em}.katex .fontsize-ensurer.reset-size11.size4,.katex .katex-sizing.reset-size11.size4{font-size:.3215434084em}.katex .fontsize-ensurer.reset-size11.size5,.katex .katex-sizing.reset-size11.size5{font-size:.3617363344em}.katex .fontsize-ensurer.reset-size11.size6,.katex .katex-sizing.reset-size11.size6{font-size:.4019292605em}.katex .fontsize-ensurer.reset-size11.size7,.katex .katex-sizing.reset-size11.size7{font-size:.4823151125em}.katex .fontsize-ensurer.reset-size11.size8,.katex .katex-sizing.reset-size11.size8{font-size:.578778135em}.katex .fontsize-ensurer.reset-size11.size9,.katex .katex-sizing.reset-size11.size9{font-size:.6945337621em}.katex .fontsize-ensurer.reset-size11.size10,.katex .katex-sizing.reset-size11.size10{font-size:.8336012862em}.katex .fontsize-ensurer.reset-size11.size11,.katex .katex-sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .katex-accent>.vlist-t,.katex .op-limits>.vlist-t{text-align:center}.katex .katex-accent .accent-body{position:relative}.katex .katex-accent .accent-body:not(.accent-full){width:0}.katex .katex-overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;display:block;height:inherit;position:absolute;width:100%}.katex svg path{stroke:none}.katex svg{fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1}.katex img{border-style:none;max-height:none;max-width:none;min-height:0;min-width:0}.katex .katex-stretchy{display:block;overflow:hidden;position:relative;width:100%}.katex .katex-stretchy:after,.katex .katex-stretchy:before{content:""}.katex .hide-tail{overflow:hidden;position:relative;width:100%}.katex .halfarrow-left{left:0;overflow:hidden;position:absolute;width:50.2%}.katex .halfarrow-right{overflow:hidden;position:absolute;right:0;width:50.2%}.katex .brace-left{left:0;overflow:hidden;position:absolute;width:25.1%}.katex .brace-center{left:25%;overflow:hidden;position:absolute;width:50%}.katex .brace-right{overflow:hidden;position:absolute;right:0;width:25.1%}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{border:.04em solid;box-sizing:border-box}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .katex-sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{border-right:.049em solid;border-top:.049em solid;box-sizing:border-box;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .reflectbox{display:inline-block;transform:scaleX(-1)}.katex .eqn-num:before{content:"(" counter(katexEqnNo) ")";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:"(" counter(mmlEqnNo) ")";counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{display:inline-block;position:absolute;right:calc(50% + .3em);text-align:left}.katex .cd-label-right{display:inline-block;left:calc(50% + .3em);position:absolute;text-align:right}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.katex-tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.katex-tag{left:0;right:auto}.katex-display.fleqn>.katex{padding-left:2em;text-align:left}body{counter-reset:katexEqnNo mmlEqnNo} diff --git a/internal/embedded/templates/layouts/base.html b/internal/embedded/templates/layouts/base.html new file mode 100644 index 00000000..2f7bdac8 --- /dev/null +++ b/internal/embedded/templates/layouts/base.html @@ -0,0 +1,101 @@ +{{define "base"}} + + +{{template "head" .}} + + + + {{template "persistent_logo" .}} + {{template "settings_overlay" .}} + {{template "privacy_overlay" .}} + {{template "share_overlay" .}} + {{template "rss_dialog" .}} + + +
    + {{template "site_tools" .}} + {{if eq .PageKind "home"}} + {{template "header_nav" .}} + +
    +
    + {{template "content" .}} +
    +
    + {{else}} +
    + {{template "side_nav" .}} + +
    +
    + {{template "content" .}} +
    +
    +
    + {{end}} + {{template "home_footer" .}} +
    + {{template "mobile_drawer" .}} + {{template "mobile_overlay" .}} + + + +{{end}} diff --git a/internal/embedded/templates/og/memo.html b/internal/embedded/templates/og/memo.html new file mode 100644 index 00000000..c9f8ee96 --- /dev/null +++ b/internal/embedded/templates/og/memo.html @@ -0,0 +1,51 @@ + + + + + + + + + +
    +
    {{if .Avatar}}{{else}}{{.Initial}}{{end}}
    +
    +
    {{.Author}}
    + {{if .Body}}

    {{.Body}}

    {{end}} + {{if .Images}}
    + {{range .Images}}
    {{.Alt}}{{if .More}}+{{.More}}{{end}}
    {{end}} +
    {{end}} +
    + {{if .Tags}}
    {{range .Tags}}#{{.}}{{end}}
    {{end}} + {{.SiteName}} +
    +
    +
    + + diff --git a/internal/embedded/templates/og/note.html b/internal/embedded/templates/og/note.html new file mode 100644 index 00000000..aa3bf420 --- /dev/null +++ b/internal/embedded/templates/og/note.html @@ -0,0 +1,50 @@ + + + + + + + + + + +
    +
    + {{if .Avatar}}{{else}}{{.Initial}}{{end}} + {{.SiteName}} +
    +
    +

    {{.Title}}

    + {{if .Summary}}

    {{.Summary}}

    {{end}} +
    +
    + + {{.ReadingTime}} + {{if .Updated}}Updated {{.Updated}}{{end}} + {{if .Tags}}
    {{range .Tags}}#{{.}}{{end}}
    {{end}} +
    +
    + + diff --git a/internal/embedded/templates/pages/about.html b/internal/embedded/templates/pages/about.html new file mode 100644 index 00000000..4406d9c1 --- /dev/null +++ b/internal/embedded/templates/pages/about.html @@ -0,0 +1,41 @@ +{{define "content"}} +
    + {{template "golden_spiral" .}} + +
    +

    + {{.Title}} + {{if .HasTranslation}} + + {{template "bilingual_toggle" dict "Lang" .Lang "URL" .AlternateURL}} + + {{end}} +

    + {{with .Summary}}

    {{.}}

    {{end}} +
    + {{.HTML}} +
    +
    +
    + + {{if .Updated}} +
    updated + {{end}} +
    + {{if .Config.Stats.Enabled}} +
    + + -- + views + + + -- + viewing + + {{template "like_button" dict "Lang" .Lang "Path" "/about/"}} +
    + {{end}} +
    +
    +
    +{{end}} diff --git a/internal/embedded/templates/pages/archive.html b/internal/embedded/templates/pages/archive.html new file mode 100644 index 00000000..e8c44bf5 --- /dev/null +++ b/internal/embedded/templates/pages/archive.html @@ -0,0 +1,75 @@ +{{define "content"}} +
    +
    +
    +
    +
    +
    + {{.Site.UptimeDays}} + {{T .Lang "archive.days"}} +
    +
    + 0 + {{T .Lang "archive.posts"}} +
    +
    + 0 + {{T .Lang "archive.words.k"}} +
    +
    + {{if .Config.Stats.Enabled}} +
    +
    + -- + visitors +
    +
    + -- + k views +
    +
    + -- + viewing +
    +
    + {{end}} +
    + +
    + +
    + {{if .Rows}} + {{range .Rows}} + {{if eq .Type "year"}} +
    +

    {{.Year}}

    +
    +
    + {{else if eq .Type "note"}} +
    + +
    +
    + +
    + {{.Title}} + {{if .ReadingTime}}{{.ReadingTime}}{{end}} + {{if .Summary}}

    {{.Summary}}

    {{end}} +
    +
    +
    +
    + {{end}} + {{end}} + {{else}} +

    {{T .Lang "archive.empty"}}

    + {{end}} +
    + +
    +
    +
    + + {{template "notes_aside" .}} +
    +{{end}} diff --git a/internal/embedded/templates/pages/graph.html b/internal/embedded/templates/pages/graph.html new file mode 100644 index 00000000..7e936265 --- /dev/null +++ b/internal/embedded/templates/pages/graph.html @@ -0,0 +1,8 @@ +{{define "content"}} +
    +
    +
    +
    +
    +
    +{{end}} diff --git a/internal/embedded/templates/pages/index.html b/internal/embedded/templates/pages/index.html new file mode 100644 index 00000000..425fbe80 --- /dev/null +++ b/internal/embedded/templates/pages/index.html @@ -0,0 +1,61 @@ +{{define "github_contact"}} +
  • {{if eq .Link.Type "email"}}{{else if .Link.Icon}}{{else}}{{end}}{{.Text}}
  • +{{end}} + +{{define "github_repository"}} + +{{end}} + +{{define "content"}} +{{if .GitHub}} +
    + + +
    + {{if .GitHub.ReadmeHTML}}
    {{.GitHub.ReadmeHTML}}
    {{end}} + {{if .GitHub.PinnedRepositories}} +
    {{range .GitHub.PinnedRepositories}}{{template "github_repository" .}}{{end}}
    + {{end}} + {{if .GitHub.Contributions}} +

    {{formatNum .GitHub.Contributions.Total}} {{if eq .Lang "en_US"}}contributions in the last year{{else}}次贡献 · 过去一年{{end}}

    {{if eq .Lang "en_US"}}Less{{else}}少{{end}}{{if eq .Lang "en_US"}}More{{else}}多{{end}}
    + {{end}} +
    +
    +{{else}} +

    GitHub

    {{if eq .Lang "en_US"}}GitHub profile is unavailable.{{else}}GitHub 资料暂��用。{{end}}

    {{if .Config.GitHub.Username}}{{.Config.GitHub.Username}}{{end}}
    +{{end}} +{{end}} diff --git a/internal/embedded/templates/pages/memos.html b/internal/embedded/templates/pages/memos.html new file mode 100644 index 00000000..bbc53f94 --- /dev/null +++ b/internal/embedded/templates/pages/memos.html @@ -0,0 +1,38 @@ +{{define "content"}} +
    +
    +
    +
    +

    {{T .Lang "nav.memos"}}

    + +
    +
    + + +
    +
    + +
    + {{range .Memos}} +
    + {{template "memo_post" dict "Item" . "Config" $.Config "Lang" $.Lang "Detail" false}} +
    + {{else}} + {{template "memos_empty" .}} + {{end}} +
    + +
    + +
    +{{end}} diff --git a/internal/embedded/templates/pages/note.html b/internal/embedded/templates/pages/note.html new file mode 100644 index 00000000..db285aea --- /dev/null +++ b/internal/embedded/templates/pages/note.html @@ -0,0 +1,129 @@ +{{define "content"}} +{{if eq .PageKind "memo"}} +{{template "memo_detail" .}} +{{else}} +
    +
    + + 0% + +
    +
    + + 0% + +
    +
    + +
    +
    +
    +
    +
    + + + +

    + + {{.Note.TitleLayout}} + +

    + +
    + + {{with .Note.Summary}}

    {{.}}

    {{end}} +
    + + {{if .Note.TocEnabled}} + {{template "mobile-toc" .}} + {{end}} + +
    + {{.Note.HTML}} +
    + + {{if .Note.Tags}} +
    +
    +
    + {{range .Note.Tags}} + #{{.}} + {{end}} +
    +
    + {{end}} + + {{template "comments" .}} +
    +
    + + {{template "notes_aside" .}} +
    +{{end}} +{{end}} diff --git a/internal/embedded/templates/pages/notes.html b/internal/embedded/templates/pages/notes.html new file mode 100644 index 00000000..e9e1e352 --- /dev/null +++ b/internal/embedded/templates/pages/notes.html @@ -0,0 +1,37 @@ +{{define "content"}} +
    +
    + + + {{if .PinnedNotes}} +
    +
    + {{range .PinnedNotes}} + {{template "note_card" .}} + {{end}} +
    +
    +
    + {{end}} + + {{if .MonthGroups}} + {{range .MonthGroups}} +
    +
    + {{range .Notes}} + {{template "note_card" .}} + {{end}} +
    +
    + {{end}} + {{else}} +

    {{T .Lang "archive.empty"}}

    + {{end}} + {{template "pagination" .}} + + +
    + + {{template "notes_aside" .}} +
    +{{end}} diff --git a/internal/embedded/templates/pages/tag.html b/internal/embedded/templates/pages/tag.html new file mode 100644 index 00000000..ef5745fd --- /dev/null +++ b/internal/embedded/templates/pages/tag.html @@ -0,0 +1,29 @@ +{{define "content"}} +
    +
    +
    + + + +

    {{.PageTitle}}

    +
    + + {{if .Notes}} +
    +
    + {{range .Notes}} + {{template "note_card" .}} + {{end}} +
    +
    + {{else}} +

    {{T .Lang "archive.empty"}}

    + {{end}} + {{template "pagination" .}} + + +
    + + {{template "notes_aside" .}} +
    +{{end}} diff --git a/internal/embedded/templates/partials/article-actions.html b/internal/embedded/templates/partials/article-actions.html new file mode 100644 index 00000000..a8050f67 --- /dev/null +++ b/internal/embedded/templates/partials/article-actions.html @@ -0,0 +1,38 @@ +{{define "like_button"}} + +{{end}} + +{{define "rss_button"}} + + + {{if .Label}}{{T .Lang "action.rss"}}{{end}} + +{{end}} + +{{define "rss_dialog"}} + +
    +
    +
    +

    {{T .Lang "rss.subscribe"}}

    +
    +
    +

    {{T .Lang "rss.description"}}

    + +
    + {{T .Lang "rss.open"}} + +
    +

    +
    +
    +{{end}} diff --git a/internal/embedded/templates/partials/bilingual-toggle.html b/internal/embedded/templates/partials/bilingual-toggle.html new file mode 100644 index 00000000..69802e21 --- /dev/null +++ b/internal/embedded/templates/partials/bilingual-toggle.html @@ -0,0 +1,5 @@ +{{define "bilingual_toggle"}} + + + +{{end}} diff --git a/internal/embedded/templates/partials/comments.html b/internal/embedded/templates/partials/comments.html new file mode 100644 index 00000000..447d466c --- /dev/null +++ b/internal/embedded/templates/partials/comments.html @@ -0,0 +1,18 @@ +{{define "comments"}} + {{if .Note.CommentEnabled}} +
    +
    +
    + {{end}} +{{end}} diff --git a/internal/embedded/templates/partials/footer.html b/internal/embedded/templates/partials/footer.html new file mode 100644 index 00000000..6132c96c --- /dev/null +++ b/internal/embedded/templates/partials/footer.html @@ -0,0 +1,52 @@ +{{define "copyright"}} +{{if .Config.Site.Copyright}} +

    {{.Config.Site.Copyright}}

    +{{end}} +{{end}} + +{{define "home_footer"}} +
    + + {{template "copyright" dict "Config" .Config "Class" "footer-copyright"}} +
    +{{end}} + +{{define "notes_aside"}} +{{if or (eq .PageKind "note") (eq .PageKind "memo")}} + +{{end}} +{{end}} + +{{define "notes_footer_actions"}} + +{{end}} + +{{define "site_tools"}} +
    + {{template "notes_footer_actions" .}} +
    + + +
    +
    +{{end}} diff --git a/internal/embedded/templates/partials/golden-spiral.html b/internal/embedded/templates/partials/golden-spiral.html new file mode 100644 index 00000000..69eac5d5 --- /dev/null +++ b/internal/embedded/templates/partials/golden-spiral.html @@ -0,0 +1,56 @@ +{{define "golden_spiral"}} + +{{end}} diff --git a/internal/embedded/templates/partials/head.html b/internal/embedded/templates/partials/head.html new file mode 100644 index 00000000..66b03751 --- /dev/null +++ b/internal/embedded/templates/partials/head.html @@ -0,0 +1,107 @@ +{{define "head"}} + + + + + {{.SEO.Title}} + {{if or .SEO.Description (eq .PageKind "home")}} + + {{end}} + + + + {{range .SEO.Alternates}} + {{if eq .Lang "zh_CN"}} + + + {{else}} + + {{end}} + {{end}} + + + {{if or .SEO.Description (eq .PageKind "home")}}{{end}} + + + {{if .SEO.Image}}{{end}} + {{if .SEO.Image}} + {{if .SEO.ImageWidth}}{{end}} + {{if .SEO.ImageHeight}}{{end}} + {{if .SEO.ImageType}}{{end}} + {{end}} + + + + + + {{if or .SEO.Description (eq .PageKind "home")}}{{end}} + {{if .SEO.Image}}{{end}} + + {{if .SEO.JSONLD}} + + {{end}} + + + + {{if or (eq .PageKind "note") (eq .PageKind "memo") (eq .PageKind "memos") (eq .PageKind "about")}} + + + + + + + + + + {{end}} + {{if eq .PageKind "memos"}}{{end}} + + + {{if eq .PageKind "archive"}} + + {{end}} + + + + + + + + + + + {{if eq .PageKind "home"}} + + {{else}} + + {{end}} + {{if .HasMath}} + + {{end}} + + {{if .Config.Site.Favicon}} + + + {{else}} + + + {{end}} + +{{end}} diff --git a/internal/embedded/templates/partials/header-nav.html b/internal/embedded/templates/partials/header-nav.html new file mode 100644 index 00000000..fbc5d168 --- /dev/null +++ b/internal/embedded/templates/partials/header-nav.html @@ -0,0 +1,30 @@ +{{define "header_nav"}} + +{{end}} diff --git a/internal/embedded/templates/partials/icons.html b/internal/embedded/templates/partials/icons.html new file mode 100644 index 00000000..a96cfe2e --- /dev/null +++ b/internal/embedded/templates/partials/icons.html @@ -0,0 +1,9 @@ +{{define "icon_sun"}} + +{{end}} +{{define "icon_moon"}} + +{{end}} +{{define "icon_sun_moon"}} + +{{end}} diff --git a/internal/embedded/templates/partials/memo-post.html b/internal/embedded/templates/partials/memo-post.html new file mode 100644 index 00000000..1d85d8dc --- /dev/null +++ b/internal/embedded/templates/partials/memo-post.html @@ -0,0 +1,56 @@ +{{define "memo_post"}} +{{$path := .Item.URL}}{{if .Detail}}{{$path = .Item.CanonicalPath}}{{end}} + +
    +
    +
    + {{if and (eq .Lang "en_US") .Config.Profile.Author.NameEn}}{{.Config.Profile.Author.NameEn}}{{else}}{{.Config.Profile.Author.Name}}{{end}} + {{if .Item.Pinned}}{{end}} +
    +
    + + {{if .Item.Updated}}updated {{end}} +
    +
    +
    {{.Item.HTML}}
    + {{if or .Item.Tags .Item.Location}} + + {{end}} +
    + {{if .Item.CommentEnabled}} + + — + + {{else}}—{{end}} + {{if .Config.Stats.Enabled}}{{template "like_button" dict "Lang" .Lang "Path" $path}}{{else}}—{{end}} + — + + {{template "rss_button" dict "Lang" .Lang "Class" "article-action"}} +
    +
    +{{end}} + +{{define "memo_detail"}} +
    +
    +
    + +

    {{T .Lang "memos.detail"}}

    + {{if .Note.HasTranslation}}{{template "bilingual_toggle" dict "Lang" .Lang "URL" .Note.TranslationURL}}{{end}} +
    +
    + {{template "memo_post" dict "Item" .Note "Config" .Config "Lang" .Lang "Detail" true}} +
    + {{template "comments" .}} +
    +
    +{{end}} diff --git a/internal/embedded/templates/partials/memos-empty.html b/internal/embedded/templates/partials/memos-empty.html new file mode 100644 index 00000000..bc9dc186 --- /dev/null +++ b/internal/embedded/templates/partials/memos-empty.html @@ -0,0 +1,12 @@ +{{define "memos_empty"}} +
    + +

    {{T .Lang "memos.empty"}}

    +
    +{{end}} diff --git a/internal/embedded/templates/partials/memos-filters.html b/internal/embedded/templates/partials/memos-filters.html new file mode 100644 index 00000000..95e5d739 --- /dev/null +++ b/internal/embedded/templates/partials/memos-filters.html @@ -0,0 +1,17 @@ +{{define "memos_filters"}} +
    +
    +
    + + + +
    +
    + +
    +
    +

    {{T .Lang "action.tags"}}

    +
    +
    +
    +{{end}} diff --git a/internal/embedded/templates/partials/mobile-drawer.html b/internal/embedded/templates/partials/mobile-drawer.html new file mode 100644 index 00000000..d8151a7e --- /dev/null +++ b/internal/embedded/templates/partials/mobile-drawer.html @@ -0,0 +1,89 @@ +{{define "mobile_drawer"}} + + +{{end}} diff --git a/internal/embedded/templates/partials/mobile-overlay.html b/internal/embedded/templates/partials/mobile-overlay.html new file mode 100644 index 00000000..b141b486 --- /dev/null +++ b/internal/embedded/templates/partials/mobile-overlay.html @@ -0,0 +1,53 @@ +{{define "mobile_overlay"}} + +{{end}} diff --git a/internal/embedded/templates/partials/mobile-overlays.html b/internal/embedded/templates/partials/mobile-overlays.html new file mode 100644 index 00000000..4e35455b --- /dev/null +++ b/internal/embedded/templates/partials/mobile-overlays.html @@ -0,0 +1,36 @@ +{{define "mobile_overlays"}} + + + +{{end}} diff --git a/internal/embedded/templates/partials/note-card.html b/internal/embedded/templates/partials/note-card.html new file mode 100644 index 00000000..e23a98c1 --- /dev/null +++ b/internal/embedded/templates/partials/note-card.html @@ -0,0 +1,30 @@ +{{define "note_card"}} +
    +
    +

    + + {{.TitleLayout}} + +

    +
    + {{if .Pinned}} + + {{end}} + {{if .HasMusic}} + + {{end}} + {{if .HasTranslation}} + + {{end}} +
    +

    + + {{.ReadingMinutes}} {{T .Lang "post.min_read"}} + {{if .Updated}} + • updated + {{end}} +

    +
    + {{with .Summary}}

    {{.}}

    {{end}} +
    +{{end}} diff --git a/internal/embedded/templates/partials/pagination.html b/internal/embedded/templates/partials/pagination.html new file mode 100644 index 00000000..7b7db43b --- /dev/null +++ b/internal/embedded/templates/partials/pagination.html @@ -0,0 +1,39 @@ +{{define "pagination"}} +{{if gt .Pagination.TotalPages 1}} + +{{end}} +{{end}} diff --git a/internal/embedded/templates/partials/persistent-logo.html b/internal/embedded/templates/partials/persistent-logo.html new file mode 100644 index 00000000..4a298aca --- /dev/null +++ b/internal/embedded/templates/partials/persistent-logo.html @@ -0,0 +1,15 @@ +{{define "persistent_logo"}} +
    + + +
    + +{{end}} diff --git a/internal/embedded/templates/partials/privacy-overlay.html b/internal/embedded/templates/partials/privacy-overlay.html new file mode 100644 index 00000000..66b0870e --- /dev/null +++ b/internal/embedded/templates/partials/privacy-overlay.html @@ -0,0 +1,40 @@ +{{define "privacy_overlay"}} + +
    +
    + +
    +
    +

    {{if eq .Lang "en_US"}}Privacy{{else}}��{{end}}

    +

    {{if eq .Lang "en_US"}}This site remembers your appearance and preferences. With your permission, it also uses a Cookie for anonymous visitor statistics.{{else}}本站会记�你的外观与�好。�你�许,也会使用 Cookie 统计匿�访客。{{end}}

    +

    {{if eq .Lang "en_US"}}Your choice does not affect reading or likes. You can change it anytime in Settings.{{else}}你的选择�影�阅读或点赞,�时�在设置中修改。{{end}}

    + +
    + + +
    + +
    + +

    +
    +
    +
    +{{end}} diff --git a/internal/embedded/templates/partials/reading-controls.html b/internal/embedded/templates/partials/reading-controls.html new file mode 100644 index 00000000..28dcd0f8 --- /dev/null +++ b/internal/embedded/templates/partials/reading-controls.html @@ -0,0 +1,19 @@ +{{define "reading_controls"}} +
    +
    + + + + + 0% +
    + + +
    +{{end}} diff --git a/internal/embedded/templates/partials/settings-overlay.html b/internal/embedded/templates/partials/settings-overlay.html new file mode 100644 index 00000000..a81fc9ce --- /dev/null +++ b/internal/embedded/templates/partials/settings-overlay.html @@ -0,0 +1,75 @@ +{{define "settings_overlay"}} + +{{end}} diff --git a/internal/embedded/templates/partials/share-overlay.html b/internal/embedded/templates/partials/share-overlay.html new file mode 100644 index 00000000..74ec4fc3 --- /dev/null +++ b/internal/embedded/templates/partials/share-overlay.html @@ -0,0 +1,31 @@ +{{define "share_overlay"}} + +{{end}} diff --git a/internal/embedded/templates/partials/side-nav.html b/internal/embedded/templates/partials/side-nav.html new file mode 100644 index 00000000..75632fdc --- /dev/null +++ b/internal/embedded/templates/partials/side-nav.html @@ -0,0 +1,40 @@ +{{define "side_nav"}} + +{{end}} diff --git a/internal/embedded/templates/partials/social-links.html b/internal/embedded/templates/partials/social-links.html new file mode 100644 index 00000000..e2027597 --- /dev/null +++ b/internal/embedded/templates/partials/social-links.html @@ -0,0 +1,11 @@ +{{define "social_links"}} + +{{end}} \ No newline at end of file diff --git a/internal/embedded/templates/partials/theme-toggle.html b/internal/embedded/templates/partials/theme-toggle.html new file mode 100644 index 00000000..6e0a485b --- /dev/null +++ b/internal/embedded/templates/partials/theme-toggle.html @@ -0,0 +1,31 @@ +{{define "theme_toggle_header"}} + + + + + +{{end}} + +{{define "theme_toggle_action"}} + + + + + +{{end}} diff --git a/internal/embedded/templates/partials/toc.html b/internal/embedded/templates/partials/toc.html new file mode 100644 index 00000000..1add0b8d --- /dev/null +++ b/internal/embedded/templates/partials/toc.html @@ -0,0 +1,72 @@ +{{define "toc"}} +{{if .Note.Headings}} +
    + + + +
    +{{end}} +{{end}} + +{{/* 移动端专用的独立 TOC 结构 */}} +{{define "mobile-toc"}} +{{if .Note.Headings}} + + + +{{end}} +{{end}} diff --git a/internal/feed/.gitkeep b/internal/feed/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/internal/feed/feed.go b/internal/feed/feed.go new file mode 100644 index 00000000..b91770f5 --- /dev/null +++ b/internal/feed/feed.go @@ -0,0 +1,83 @@ +package feed + +import ( + "encoding/xml" + "fmt" + "os" + "path/filepath" + "strings" + "time" + + "github.com/StatIndet/daybook/internal/config" + "github.com/StatIndet/daybook/internal/content" + "github.com/StatIndet/daybook/internal/render" +) + +type rss struct { + XMLName xml.Name `xml:"rss"` + Version string `xml:"version,attr"` + Channel channel `xml:"channel"` +} + +type channel struct { + Title string `xml:"title"` + Link string `xml:"link"` + Description string `xml:"description"` + Items []item `xml:"item"` +} + +type item struct { + Title string `xml:"title"` + Link string `xml:"link"` + GUID string `xml:"guid"` + Description string `xml:"description,omitempty"` + PubDate string `xml:"pubDate,omitempty"` +} + +func Write(path, lang string, cfg config.Config, notes []render.NoteLink) error { + baseURL := strings.TrimRight(cfg.Site.URL, "/") + document := rss{ + Version: "2.0", + Channel: channel{ + Title: cfg.GetSiteName(lang), + Link: baseURL + "/", + Description: cfg.GetHomeDescription(lang), + Items: make([]item, 0, len(notes)), + }, + } + + for _, note := range notes { + link := baseURL + note.URL + document.Channel.Items = append(document.Channel.Items, item{ + Title: note.Title, + Link: link, + GUID: link, + Description: note.Summary, + PubDate: rssDate(note.Date), + }) + } + + data, err := xml.MarshalIndent(document, "", " ") + if err != nil { + return fmt.Errorf("生� RSS XML: %w", err) + } + data = append([]byte(xml.Header), data...) + data = append(data, '\n') + + if err := os.MkdirAll(filepath.Dir(path), 0755); err != nil { + return fmt.Errorf("创建 RSS 输出目录: %w", err) + } + if err := os.WriteFile(path, data, 0644); err != nil { + return fmt.Errorf("写入 RSS 文件: %w", err) + } + + return nil +} + +func rssDate(date string) string { + parsed, err := content.ParseDate(date) + if err != nil { + return "" + } + return parsed.Format(time.RFC1123Z) +} diff --git a/internal/feed/feed_test.go b/internal/feed/feed_test.go new file mode 100644 index 00000000..eefe341f --- /dev/null +++ b/internal/feed/feed_test.go @@ -0,0 +1,53 @@ +package feed + +import ( + "os" + "path/filepath" + "strings" + "testing" + + "github.com/StatIndet/daybook/internal/config" + "github.com/StatIndet/daybook/internal/render" +) + +func TestWriteRSS(t *testing.T) { + dir := t.TempDir() + path := filepath.Join(dir, "rss.xml") + notes := []render.NoteLink{ + { + Title: "示例笔记", + Date: "2026-06-14", + Slug: "example", + Summary: "摘�", + URL: "/notes/example/", + }, + } + + err := Write(path, "zh_CN", config.Config{ + Site: config.SiteConfig{ + URL: "https://example.com", + }, + }, notes) + if err != nil { + t.Fatalf("Write returned error: %v", err) + } + + data, err := os.ReadFile(path) + if err != nil { + t.Fatalf("ReadFile returned error: %v", err) + } + html := string(data) + + wantParts := []string{ + "", + "Daybook", + "https://example.com/notes/example/", + "摘�", + "Sun, 14 Jun 2026 00:00:00 +0000", + } + for _, part := range wantParts { + if !strings.Contains(html, part) { + t.Fatalf("RSS does not contain %q: %s", part, html) + } + } +} diff --git a/internal/github/client.go b/internal/github/client.go new file mode 100644 index 00000000..217a9bf5 --- /dev/null +++ b/internal/github/client.go @@ -0,0 +1,392 @@ +package github + +import ( + "bytes" + "context" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "os" + "path/filepath" + "strings" + "sync" + "time" + + "github.com/StatIndet/daybook/internal/config" +) + +const maxResponseBytes = 8 << 20 + +type Client struct { + HTTP *http.Client + BaseURL string + GraphQLURL string + Token string +} + +func NewClient(token string) *Client { + return &Client{HTTP: &http.Client{Timeout: 15 * time.Second}, BaseURL: "https://api.github.com", GraphQLURL: "https://api.github.com/graphql", Token: token} +} + +type APIError struct { + StatusCode int + Endpoint string +} + +func (e *APIError) Error() string { + return fmt.Sprintf("GitHub %s returned HTTP %d", e.Endpoint, e.StatusCode) +} +func absent(err error) bool { + var apiErr *APIError + return errors.As(err, &apiErr) && apiErr.StatusCode == 404 +} + +func (c *Client) request(ctx context.Context, method, endpoint, accept string, body []byte) ([]byte, http.Header, error) { + target := strings.TrimRight(c.BaseURL, "/") + endpoint + if method == http.MethodPost { + target = c.GraphQLURL + } + req, err := http.NewRequestWithContext(ctx, method, target, bytes.NewReader(body)) + if err != nil { + return nil, nil, err + } + req.Header.Set("Accept", accept) + req.Header.Set("User-Agent", "Daybook-GitHub-Profile") + req.Header.Set("X-GitHub-Api-Version", "2022-11-28") + if method == http.MethodPost { + req.Header.Set("Content-Type", "application/json") + } + if c.Token != "" { + req.Header.Set("Authorization", "Bearer "+c.Token) + } + res, err := c.HTTP.Do(req) + if err != nil { + return nil, nil, fmt.Errorf("GitHub %s request failed: %w", endpoint, err) + } + defer res.Body.Close() + if res.StatusCode != http.StatusOK { + return nil, res.Header, &APIError{StatusCode: res.StatusCode, Endpoint: endpoint} + } + data, err := io.ReadAll(io.LimitReader(res.Body, maxResponseBytes+1)) + if err != nil { + return nil, nil, err + } + if len(data) > maxResponseBytes { + return nil, nil, fmt.Errorf("GitHub %s response exceeds size limit", endpoint) + } + return data, res.Header, nil +} + +func (c *Client) get(ctx context.Context, endpoint string, out any) error { + data, _, err := c.request(ctx, http.MethodGet, endpoint, "application/vnd.github+json", nil) + if err != nil { + return err + } + if err := json.Unmarshal(data, out); err != nil { + return fmt.Errorf("decode GitHub %s: %w", endpoint, err) + } + return nil +} + +// Sync always requests fresh public data. A cache outside public/ survives a +// clean build and provides the last complete profile when GitHub is offline. +func Sync(ctx context.Context, cfg config.GitHubConfig, cacheDir string) (*Profile, []string, error) { + if cfg.Username == "" { + return nil, nil, nil + } + tokenEnv := cfg.TokenEnv + if tokenEnv == "" { + tokenEnv = "GITHUB_TOKEN" + } + return NewClient(os.Getenv(tokenEnv)).Sync(ctx, cfg.Username, cacheDir) +} + +func (c *Client) Sync(ctx context.Context, username, cacheDir string) (*Profile, []string, error) { + cachePath := filepath.Join(cacheDir, strings.ToLower(username)+".json") + var cached *Profile + if data, err := os.ReadFile(cachePath); err == nil { + var p Profile + if json.Unmarshal(data, &p) == nil && strings.EqualFold(p.Login, username) { + sanitizeProfile(&p) + cached = &p + } + } + p, warnings, err := c.Fetch(ctx, username, cached) + if err != nil { + if cached != nil { + cached.Cached = true + return cached, []string{err.Error() + "; using cached profile from " + cached.FetchedAt}, nil + } + return nil, nil, err + } + data, err := json.MarshalIndent(p, "", " ") + if err != nil { + return nil, warnings, err + } + if err := os.MkdirAll(cacheDir, 0755); err == nil { + file, err := os.CreateTemp(cacheDir, ".github-*.json") + if err == nil { + name := file.Name() + _, writeErr := file.Write(data) + closeErr := file.Close() + if writeErr == nil && closeErr == nil { + err = os.Rename(name, cachePath) + } else { + err = errors.Join(writeErr, closeErr) + } + os.Remove(name) + } + if err != nil { + warnings = append(warnings, "could not persist GitHub cache: "+err.Error()) + } + } else { + warnings = append(warnings, "could not create GitHub cache: "+err.Error()) + } + return p, warnings, nil +} + +func (c *Client) Fetch(ctx context.Context, username string, cached *Profile) (*Profile, []string, error) { + prefix := "/users/" + url.PathEscape(username) + var user struct { + Login string `json:"login"` + Name string `json:"name"` + Bio string `json:"bio"` + AvatarURL string `json:"avatar_url"` + HTMLURL string `json:"html_url"` + Company string `json:"company"` + Blog string `json:"blog"` + Location string `json:"location"` + Email string `json:"email"` + TwitterUsername string `json:"twitter_username"` + Followers int `json:"followers"` + Following int `json:"following"` + PublicRepos int `json:"public_repos"` + PublicGists int `json:"public_gists"` + CreatedAt string `json:"created_at"` + UpdatedAt string `json:"updated_at"` + } + if err := c.get(ctx, prefix, &user); err != nil { + return nil, nil, err + } + if !strings.EqualFold(user.Login, username) { + return nil, nil, fmt.Errorf("GitHub response does not match configured username") + } + p := &Profile{} + if cached != nil { + *p = *cached + } + p.Cached = false + p.Login, p.Name, p.Bio = user.Login, user.Name, user.Bio + p.AvatarURL, p.HTMLURL = user.AvatarURL, user.HTMLURL + p.Company, p.Blog, p.Location, p.Email = user.Company, user.Blog, user.Location, user.Email + p.TwitterUsername, p.Followers, p.Following = user.TwitterUsername, user.Followers, user.Following + p.PublicRepos, p.PublicGists, p.CreatedAt, p.UpdatedAt = user.PublicRepos, user.PublicGists, user.CreatedAt, user.UpdatedAt + p.FetchedAt = time.Now().UTC().Format(time.RFC3339) + var warnings []string + var mu sync.Mutex + var wg sync.WaitGroup + run := func(f func() error) { + wg.Add(1) + go func() { + defer wg.Done() + if err := f(); err != nil { + mu.Lock() + warnings = append(warnings, err.Error()) + mu.Unlock() + } + }() + } + run(func() error { + var accounts []SocialAccount + if err := c.get(ctx, prefix+"/social_accounts?per_page=100", &accounts); err != nil { + if absent(err) { + p.SocialAccounts = nil + return nil + } + return err + } + p.SocialAccounts = accounts + return nil + }) + run(func() error { + var orgs []struct { + Login string `json:"login"` + AvatarURL string `json:"avatar_url"` + Description string `json:"description"` + } + if err := c.get(ctx, prefix+"/orgs?per_page=100", &orgs); err != nil { + return err + } + p.Organizations = nil + for _, org := range orgs { + p.Organizations = append(p.Organizations, Organization{Login: org.Login, AvatarURL: org.AvatarURL, Description: org.Description, HTMLURL: "https://github.com/" + org.Login}) + } + return nil + }) + run(func() error { + repos, err := c.repositories(ctx, prefix) + if err == nil { + p.Repositories = repos + } + return err + }) + run(func() error { + events, err := c.events(ctx, prefix) + if err == nil { + p.Events = events + } + return err + }) + run(func() error { + endpoint := "/repos/" + url.PathEscape(username) + "/" + url.PathEscape(username) + "/readme" + // A profile repository can be private. Read it as an anonymous visitor + // even when the configured token has wider repository permissions. + publicClient := *c + publicClient.Token = "" + data, _, err := publicClient.request(ctx, http.MethodGet, endpoint, "application/vnd.github.html+json", nil) + if absent(err) { + p.ReadmeHTML, p.ReadmeURL = "", "" + return nil + } + if err != nil { + return err + } + p.ReadmeURL = "https://github.com/" + username + "/" + username + "#readme" + p.ReadmeHTML = cleanReadme(string(data), username) + return nil + }) + run(func() error { + publicClient := *c + publicClient.Token = "" + data, headers, err := publicClient.request(ctx, http.MethodGet, prefix+"/starred?per_page=1", "application/vnd.github+json", nil) + if err != nil { + return err + } + var stars []json.RawMessage + if err := json.Unmarshal(data, &stars); err != nil { + return err + } + p.Stars = len(stars) + for _, link := range strings.Split(headers.Get("Link"), ",") { + if !strings.Contains(link, `rel="last"`) { + continue + } + start, end := strings.Index(link, "<"), strings.Index(link, ">") + if start < 0 || end < start { + continue + } + u, err := url.Parse(link[start+1 : end]) + if err == nil { + fmt.Sscan(u.Query().Get("page"), &p.Stars) + } + } + p.StarsAvailable = true + return nil + }) + wg.Wait() + if c.Token != "" { + if err := c.graphQL(ctx, p); err != nil { + warnings = append(warnings, err.Error()) + } + } + sanitizeProfile(p) + return p, warnings, nil +} + +func (c *Client) repositories(ctx context.Context, prefix string) ([]Repository, error) { + var all []Repository + for page := 1; page <= 100; page++ { + var repos []struct { + Name string `json:"name"` + FullName string `json:"full_name"` + HTMLURL string `json:"html_url"` + Description string `json:"description"` + Language string `json:"language"` + Stars int `json:"stargazers_count"` + Forks int `json:"forks_count"` + Archived bool `json:"archived"` + Fork bool `json:"fork"` + Private bool `json:"private"` + Topics []string `json:"topics"` + UpdatedAt string `json:"updated_at"` + Homepage string `json:"homepage"` + } + if err := c.get(ctx, fmt.Sprintf("%s/repos?type=owner&sort=updated&per_page=100&page=%d", prefix, page), &repos); err != nil { + return nil, err + } + for _, r := range repos { + if r.Private { + continue + } + all = append(all, Repository{Name: r.Name, FullName: r.FullName, HTMLURL: r.HTMLURL, Description: r.Description, Language: r.Language, Stars: r.Stars, Forks: r.Forks, Archived: r.Archived, Fork: r.Fork, Topics: r.Topics, UpdatedAt: r.UpdatedAt, Homepage: r.Homepage}) + } + if len(repos) < 100 { + return all, nil + } + } + return nil, fmt.Errorf("GitHub repository pagination exceeded 100 pages") +} + +func (c *Client) events(ctx context.Context, prefix string) ([]Event, error) { + var input []struct { + Type string `json:"type"` + Public bool `json:"public"` + CreatedAt string `json:"created_at"` + Repo struct { + Name string `json:"name"` + } `json:"repo"` + Payload struct { + Action string `json:"action"` + Ref string `json:"ref"` + Issue struct { + HTMLURL string `json:"html_url"` + Title string `json:"title"` + } `json:"issue"` + PullRequest struct { + HTMLURL string `json:"html_url"` + Title string `json:"title"` + } `json:"pull_request"` + Release struct { + HTMLURL string `json:"html_url"` + Name string `json:"name"` + } `json:"release"` + } `json:"payload"` + } + if err := c.get(ctx, prefix+"/events/public?per_page=30", &input); err != nil { + return nil, err + } + var events []Event + for _, e := range input { + if !e.Public { + continue + } + repoURL := "https://github.com/" + e.Repo.Name + item := Event{Type: e.Type, RepoName: e.Repo.Name, RepoURL: repoURL, URL: repoURL, CreatedAt: e.CreatedAt} + switch e.Type { + case "PushEvent": + item.Summary = "Pushed to " + strings.TrimPrefix(e.Payload.Ref, "refs/heads/") + case "WatchEvent": + item.Summary = "Starred repository" + case "ForkEvent": + item.Summary = "Forked repository" + case "IssuesEvent": + item.Summary = e.Payload.Action + " issue: " + e.Payload.Issue.Title + item.URL = e.Payload.Issue.HTMLURL + case "PullRequestEvent": + item.Summary = e.Payload.Action + " pull request: " + e.Payload.PullRequest.Title + item.URL = e.Payload.PullRequest.HTMLURL + case "ReleaseEvent": + item.Summary = e.Payload.Action + " release: " + e.Payload.Release.Name + item.URL = e.Payload.Release.HTMLURL + case "CreateEvent": + item.Summary = "Created " + e.Payload.Ref + default: + item.Summary = strings.TrimSuffix(e.Type, "Event") + } + events = append(events, item) + } + return events, nil +} diff --git a/internal/github/client_test.go b/internal/github/client_test.go new file mode 100644 index 00000000..04057d55 --- /dev/null +++ b/internal/github/client_test.go @@ -0,0 +1,176 @@ +package github + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "net/http/httptest" + "os" + "path/filepath" + "strings" + "testing" +) + +func mockClient(t *testing.T, handler http.HandlerFunc) *Client { + t.Helper() + server := httptest.NewServer(handler) + t.Cleanup(server.Close) + c := NewClient("") + c.BaseURL, c.GraphQLURL = server.URL, server.URL+"/graphql" + return c +} + +func serveProfile(w http.ResponseWriter) { + fmt.Fprint(w, `{"login":"example","name":"Current Name","bio":"Current GitHub bio","avatar_url":"https://avatars.githubusercontent.com/u/1?v=4","html_url":"https://github.com/example","blog":"example.com","public_repos":2,"followers":5,"following":3}`) +} + +func TestSyncFreshPublicDataAndOfflineCache(t *testing.T) { + cacheDir := t.TempDir() + fail := false + c := mockClient(t, func(w http.ResponseWriter, r *http.Request) { + if r.Header.Get("X-GitHub-Api-Version") != "2022-11-28" { + t.Errorf("missing API version") + } + if fail { + w.WriteHeader(http.StatusServiceUnavailable) + return + } + switch r.URL.Path { + case "/users/example": + serveProfile(w) + case "/users/example/repos": + fmt.Fprint(w, `[{"name":"visible","full_name":"example/visible","html_url":"https://github.com/example/visible","private":false},{"name":"secret","full_name":"example/secret","private":true}]`) + case "/users/example/events/public": + fmt.Fprint(w, `[{"type":"WatchEvent","public":true,"repo":{"name":"example/visible"}},{"type":"PushEvent","public":false,"repo":{"name":"example/secret"}}]`) + case "/users/example/starred": + w.Header().Set("Link", `; rel="last"`) + fmt.Fprint(w, `[{}]`) + case "/repos/example/example/readme": + fmt.Fprint(w, `

    Public README

    Unsafe`) + default: + fmt.Fprint(w, `[]`) + } + }) + p, warnings, err := c.Sync(context.Background(), "example", cacheDir) + if err != nil || len(warnings) != 0 { + t.Fatalf("sync: %v, %v", err, warnings) + } + if p.Bio != "Current GitHub bio" || p.Stars != 42 || !p.StarsAvailable { + t.Fatalf("bad upstream profile: %#v", p) + } + if len(p.Repositories) != 1 || len(p.Events) != 1 { + t.Fatalf("private data not filtered: %#v", p) + } + if strings.Contains(string(p.ReadmeHTML), "script") || strings.Contains(string(p.ReadmeHTML), "onerror") || strings.Contains(string(p.ReadmeHTML), "javascript:") { + t.Fatalf("unsafe README: %s", p.ReadmeHTML) + } + if !strings.Contains(string(p.ReadmeHTML), "https://raw.githubusercontent.com/example/example/HEAD/images/hello.png") { + t.Fatalf("relative image not resolved: %s", p.ReadmeHTML) + } + if p.Blog != "https://example.com" || !strings.Contains(p.AvatarSrcSet(), "s=520") { + t.Fatalf("URLs not normalized") + } + fail = true + cached, warnings, err := c.Sync(context.Background(), "example", cacheDir) + if err != nil || !cached.Cached || cached.Bio != p.Bio || len(warnings) != 1 { + t.Fatalf("cache fallback: %#v, %v, %v", cached, warnings, err) + } + if cached.FetchedAt != p.FetchedAt { + t.Fatal("offline cache must preserve actual fetch date") + } + if _, _, err := c.Sync(context.Background(), "other", cacheDir); err == nil { + t.Fatal("cold failure should fail without another user's cache") + } +} + +func TestOptionalErrorsPreserveCacheAnd404ClearsReadme(t *testing.T) { + c := mockClient(t, func(w http.ResponseWriter, r *http.Request) { + if r.URL.Path == "/users/example" { + serveProfile(w) + return + } + if r.URL.Path == "/repos/example/example/readme" { + w.WriteHeader(http.StatusNotFound) + return + } + w.WriteHeader(http.StatusForbidden) + }) + old := &Profile{Login: "example", Bio: "Old bio", ReadmeHTML: "Old README", Repositories: []Repository{{Name: "last-success", HTMLURL: "https://github.com/example/last-success"}}} + p, warnings, err := c.Fetch(context.Background(), "example", old) + if err != nil || len(warnings) != 5 { + t.Fatalf("unexpected optional errors: %v, %v", err, warnings) + } + if p.Bio != "Current GitHub bio" || len(p.Repositories) != 1 || p.ReadmeHTML != "" { + t.Fatalf("cache section handling: %#v", p) + } +} + +func TestGraphQLPublicPinsCalendarAndTokenNotInCache(t *testing.T) { + c := mockClient(t, func(w http.ResponseWriter, r *http.Request) { + publicEndpoint := r.URL.Path == "/repos/example/example/readme" || r.URL.Path == "/users/example/starred" + if publicEndpoint && r.Header.Get("Authorization") != "" { + t.Error("public-only endpoint must not use a privileged token") + } + if !publicEndpoint && r.Header.Get("Authorization") != "Bearer server-only-secret" { + t.Errorf("server request did not use token") + } + switch r.URL.Path { + case "/users/example": + fmt.Fprint(w, `{"login":"example","email":"public@example.com"}`) + case "/graphql": + var request map[string]any + if json.NewDecoder(r.Body).Decode(&request) != nil || request["variables"].(map[string]any)["login"] != "example" { + t.Error("invalid GraphQL request") + } + fmt.Fprint(w, `{"data":{"user":{"pronouns":"he/him","pinnedItems":{"nodes":[{"name":"public","nameWithOwner":"example/public","url":"https://github.com/example/public","isPrivate":false,"primaryLanguage":{"name":"Go","color":"#00ADD8"}},{"name":"private","nameWithOwner":"example/private","isPrivate":true}]},"starredRepositories":{"totalCount":8},"status":{"emoji":"🌱","message":"Growing"},"contributionsCollection":{"contributionCalendar":{"totalContributions":3,"weeks":[{"contributionDays":[{"date":"2026-09-30","contributionCount":3,"contributionLevel":"THIRD_QUARTILE"}]}]}}}}}`) + case "/repos/example/example/readme": + w.WriteHeader(http.StatusNotFound) + case "/users/example/starred": + w.Header().Set("Link", `; rel="last"`) + fmt.Fprint(w, `[{}]`) + default: + fmt.Fprint(w, `[]`) + } + }) + c.Token = "server-only-secret" + cacheDir := t.TempDir() + p, warnings, err := c.Sync(context.Background(), "example", cacheDir) + if err != nil || len(warnings) != 0 { + t.Fatalf("sync: %v, %v", err, warnings) + } + if len(p.PinnedRepositories) != 1 || p.PinnedRepositories[0].LanguageColor != "#00ADD8" { + t.Fatalf("pins: %#v", p.PinnedRepositories) + } + if p.Contributions == nil || p.Contributions.Total != 3 || p.Contributions.Weeks[0].Days[0].Level != 3 { + t.Fatalf("calendar: %#v", p.Contributions) + } + if p.Email != "public@example.com" || p.Pronouns != "he/him" || p.Status.Message != "Growing" || p.Stars != 8 { + t.Fatalf("enhanced data missing") + } + cache, err := os.ReadFile(filepath.Join(cacheDir, "example.json")) + if err != nil { + t.Fatal(err) + } + if strings.Contains(string(cache), c.Token) || strings.Contains(string(cache), "example/private") { + t.Fatal("cache contains credentials or private repository") + } +} + +func TestRepositoriesFollowPagination(t *testing.T) { + c := mockClient(t, func(w http.ResponseWriter, r *http.Request) { + var repos []map[string]any + count := 100 + if r.URL.Query().Get("page") == "2" { + count = 1 + } + for i := 0; i < count; i++ { + repos = append(repos, map[string]any{"name": fmt.Sprintf("repo-%d", i)}) + } + json.NewEncoder(w).Encode(repos) + }) + repos, err := c.repositories(context.Background(), "/users/example") + if err != nil || len(repos) != 101 { + t.Fatalf("paginated repositories: %d, %v", len(repos), err) + } +} diff --git a/internal/github/graphql.go b/internal/github/graphql.go new file mode 100644 index 00000000..bfeac6ad --- /dev/null +++ b/internal/github/graphql.go @@ -0,0 +1,135 @@ +package github + +import ( + "context" + "encoding/json" + "fmt" + "net/http" +) + +// Only public repositories are retained. No token or private repository data is +// written to the static snapshot; authentication enables GitHub's profile API. +const profileQuery = `query DaybookProfile($login: String!) { + user(login: $login) { + pronouns + pinnedItems(first: 6, types: [REPOSITORY]) { + nodes { ... on Repository { name nameWithOwner url description isPrivate isArchived isFork stargazerCount forkCount updatedAt homepageUrl primaryLanguage { name color } repositoryTopics(first: 20) { nodes { topic { name } } } } } + } + status { emoji message } + contributionsCollection { + contributionCalendar { totalContributions weeks { contributionDays { date contributionCount contributionLevel } } } + } + } +}` + +func (c *Client) graphQL(ctx context.Context, p *Profile) error { + body, err := json.Marshal(map[string]any{"query": profileQuery, "variables": map[string]string{"login": p.Login}}) + if err != nil { + return err + } + data, _, err := c.request(ctx, http.MethodPost, "/graphql", "application/json", body) + if err != nil { + return err + } + var response struct { + Errors []struct { + Message string `json:"message"` + } `json:"errors"` + Data struct { + User *struct { + Pronouns string `json:"pronouns"` + PinnedItems struct { + Nodes []struct { + Name string `json:"name"` + FullName string `json:"nameWithOwner"` + URL string `json:"url"` + Description string `json:"description"` + Private bool `json:"isPrivate"` + Archived bool `json:"isArchived"` + Fork bool `json:"isFork"` + Stars int `json:"stargazerCount"` + Forks int `json:"forkCount"` + UpdatedAt string `json:"updatedAt"` + Homepage string `json:"homepageUrl"` + PrimaryLanguage *struct { + Name string `json:"name"` + Color string `json:"color"` + } `json:"primaryLanguage"` + Topics struct { + Nodes []struct { + Topic struct { + Name string `json:"name"` + } `json:"topic"` + } `json:"nodes"` + } `json:"repositoryTopics"` + } `json:"nodes"` + } `json:"pinnedItems"` + Stars struct { + Total int `json:"totalCount"` + } `json:"starredRepositories"` + Status *Status `json:"status"` + Contributions struct { + Calendar struct { + Total int `json:"totalContributions"` + Weeks []struct { + Days []struct { + Date string `json:"date"` + Count int `json:"contributionCount"` + Level string `json:"contributionLevel"` + } `json:"contributionDays"` + } `json:"weeks"` + } `json:"contributionCalendar"` + } `json:"contributionsCollection"` + } `json:"user"` + } `json:"data"` + } + if err := json.Unmarshal(data, &response); err != nil { + return fmt.Errorf("decode GitHub GraphQL: %w", err) + } + // Do not overwrite the cached enhanced fields with partial GraphQL output. + if len(response.Errors) > 0 { + return fmt.Errorf("GitHub GraphQL could not load enhanced public profile data") + } + u := response.Data.User + if u == nil { + return fmt.Errorf("GitHub GraphQL user not found") + } + p.Pronouns = u.Pronouns + p.PinnedRepositories = nil + for _, repo := range u.PinnedItems.Nodes { + if repo.Private || repo.Name == "" { + continue + } + r := Repository{Name: repo.Name, FullName: repo.FullName, HTMLURL: repo.URL, Description: repo.Description, Archived: repo.Archived, Fork: repo.Fork, Stars: repo.Stars, Forks: repo.Forks, UpdatedAt: repo.UpdatedAt, Homepage: repo.Homepage} + if repo.PrimaryLanguage != nil { + r.Language, r.LanguageColor = repo.PrimaryLanguage.Name, repo.PrimaryLanguage.Color + } + for _, topic := range repo.Topics.Nodes { + r.Topics = append(r.Topics, topic.Topic.Name) + } + p.PinnedRepositories = append(p.PinnedRepositories, r) + } + // Keep the public REST star count; an authenticated GraphQL total can also + // include stars on repositories visible only to the token's owner. + p.Status = u.Status + calendar := u.Contributions.Calendar + p.Contributions = &Contributions{Total: calendar.Total} + levels := map[string]int{"NONE": 0, "FIRST_QUARTILE": 1, "SECOND_QUARTILE": 2, "THIRD_QUARTILE": 3, "FOURTH_QUARTILE": 4} + for _, inputWeek := range calendar.Weeks { + week := ContributionWeek{} + for _, day := range inputWeek.Days { + week.Days = append(week.Days, ContributionDay{Date: day.Date, Count: day.Count, Level: levels[day.Level]}) + } + p.Contributions.Weeks = append(p.Contributions.Weeks, week) + } + // REST does not provide language colors. Enrich matching repositories with + // the official language metadata already returned for the pinned cards. + for i := range p.Repositories { + for _, r := range p.PinnedRepositories { + if p.Repositories[i].FullName == r.FullName { + p.Repositories[i].LanguageColor = r.LanguageColor + } + } + } + return nil +} diff --git a/internal/github/models.go b/internal/github/models.go new file mode 100644 index 00000000..8721899c --- /dev/null +++ b/internal/github/models.go @@ -0,0 +1,129 @@ +// Package github synchronizes public GitHub profile data for static rendering. +package github + +import ( + "fmt" + "html/template" + "net/url" + "strings" +) + +type Profile struct { + Pronouns string `json:"pronouns"` + Login string `json:"login"` + Name string `json:"name"` + Bio string `json:"bio"` + AvatarURL string `json:"avatarURL"` + HTMLURL string `json:"htmlURL"` + Company string `json:"company"` + Blog string `json:"blog"` + Location string `json:"location"` + Email string `json:"email"` + TwitterUsername string `json:"twitterUsername"` + Followers int `json:"followers"` + Following int `json:"following"` + PublicRepos int `json:"publicRepos"` + PublicGists int `json:"publicGists"` + Stars int `json:"stars"` + StarsAvailable bool `json:"starsAvailable"` + CreatedAt string `json:"createdAt"` + UpdatedAt string `json:"updatedAt"` + FetchedAt string `json:"fetchedAt"` + ReadmeHTML template.HTML `json:"readmeHTML"` + ReadmeURL string `json:"readmeURL"` + SocialAccounts []SocialAccount `json:"socialAccounts"` + Organizations []Organization `json:"organizations"` + Repositories []Repository `json:"repositories"` + PinnedRepositories []Repository `json:"pinnedRepositories"` + Events []Event `json:"events"` + Contributions *Contributions `json:"contributions,omitempty"` + Status *Status `json:"status,omitempty"` + Cached bool `json:"cached,omitempty"` +} + +type SocialAccount struct { + Provider string `json:"provider"` + URL string `json:"url"` +} +type Organization struct { + Login string `json:"login"` + AvatarURL string `json:"avatarURL"` + HTMLURL string `json:"htmlURL"` + Description string `json:"description"` +} +type Repository struct { + Name string `json:"name"` + FullName string `json:"fullName"` + HTMLURL string `json:"htmlURL"` + Description string `json:"description"` + Language string `json:"language"` + LanguageColor string `json:"languageColor,omitempty"` + Stars int `json:"stars"` + Forks int `json:"forks"` + Archived bool `json:"archived"` + Fork bool `json:"fork"` + Topics []string `json:"topics"` + UpdatedAt string `json:"updatedAt"` + Homepage string `json:"homepage"` +} +type Event struct { + Type string `json:"type"` + RepoName string `json:"repoName"` + RepoURL string `json:"repoURL"` + URL string `json:"url"` + CreatedAt string `json:"createdAt"` + Summary string `json:"summary"` +} +type Contributions struct { + Total int `json:"total"` + Weeks []ContributionWeek `json:"weeks"` +} +type ContributionWeek struct { + Days []ContributionDay `json:"days"` +} +type ContributionDay struct { + Date string `json:"date"` + Count int `json:"count"` + Level int `json:"level"` +} +type Status struct { + Emoji string `json:"emoji"` + Message string `json:"message"` +} + +func (p Profile) DisplayName() string { + if p.Name != "" { + return p.Name + } + return p.Login +} + +func (p Profile) AvatarSize(size int) string { + u, err := url.Parse(p.AvatarURL) + if err != nil { + return p.AvatarURL + } + q := u.Query() + q.Set("s", fmt.Sprint(size)) + u.RawQuery = q.Encode() + return u.String() +} + +func (p Profile) AvatarSrcSet() string { + return p.AvatarSize(96) + " 96w, " + p.AvatarSize(260) + " 260w, " + p.AvatarSize(520) + " 520w" +} + +func safeURL(raw string) string { + raw = strings.TrimSpace(raw) + if raw == "" { + return "" + } + u, err := url.Parse(raw) + if err == nil && u.Scheme == "" { + u, err = url.Parse("https://" + raw) + } + if err != nil || u.Host == "" || u.User != nil || (u.Scheme != "https" && u.Scheme != "http") { + return "" + } + return u.String() +} diff --git a/internal/github/sanitize.go b/internal/github/sanitize.go new file mode 100644 index 00000000..32c1e276 --- /dev/null +++ b/internal/github/sanitize.go @@ -0,0 +1,89 @@ +package github + +import ( + "bytes" + "html/template" + "net/url" + "strings" + + "github.com/microcosm-cc/bluemonday" + "golang.org/x/net/html" +) + +// GitHub renders Markdown upstream. Treat the returned HTML and persisted cache +// as untrusted, and resolve repository-relative links before template rendering. +func cleanReadme(raw, login string) template.HTML { + root, err := html.Parse(strings.NewReader(raw)) + if err != nil { + return "" + } + var visit func(*html.Node) + visit = func(n *html.Node) { + if n.Type == html.ElementNode { + for i, attr := range n.Attr { + if attr.Key != "href" && attr.Key != "src" && attr.Key != "srcset" { + continue + } + if attr.Key == "srcset" { + n.Attr[i].Val = "" + continue + } + u, err := url.Parse(attr.Val) + if err != nil || u.Scheme != "" || u.Host != "" || strings.HasPrefix(attr.Val, "#") { + continue + } + base := "https://github.com/" + login + "/" + login + "/blob/HEAD/" + if attr.Key == "src" { + base = "https://raw.githubusercontent.com/" + login + "/" + login + "/HEAD/" + } + if strings.HasPrefix(attr.Val, "/") { + base = "https://github.com/" + } + baseURL, _ := url.Parse(base) + n.Attr[i].Val = baseURL.ResolveReference(u).String() + } + if n.Data == "img" { + n.Attr = append(n.Attr, html.Attribute{Key: "loading", Val: "lazy"}, html.Attribute{Key: "decoding", Val: "async"}) + } + } + for child := n.FirstChild; child != nil; child = child.NextSibling { + visit(child) + } + } + visit(root) + var out bytes.Buffer + if err := html.Render(&out, root); err != nil { + return "" + } + policy := bluemonday.UGCPolicy() + policy.AllowElements("details", "summary", "picture", "source") + policy.AllowAttrs("open").OnElements("details") + policy.AllowAttrs("loading", "decoding", "width", "height").OnElements("img") + policy.AllowAttrs("class", "id").Globally() + return template.HTML(policy.Sanitize(out.String())) +} + +func sanitizeProfile(p *Profile) { + p.HTMLURL = safeURL(p.HTMLURL) + p.AvatarURL = safeURL(p.AvatarURL) + p.Blog = safeURL(p.Blog) + p.ReadmeURL = safeURL(p.ReadmeURL) + p.ReadmeHTML = cleanReadme(string(p.ReadmeHTML), p.Login) + for i := range p.SocialAccounts { + p.SocialAccounts[i].URL = safeURL(p.SocialAccounts[i].URL) + } + for i := range p.Organizations { + p.Organizations[i].HTMLURL = safeURL(p.Organizations[i].HTMLURL) + p.Organizations[i].AvatarURL = safeURL(p.Organizations[i].AvatarURL) + } + for _, list := range [][]Repository{p.Repositories, p.PinnedRepositories} { + for i := range list { + list[i].HTMLURL = safeURL(list[i].HTMLURL) + list[i].Homepage = safeURL(list[i].Homepage) + } + } + for i := range p.Events { + p.Events[i].URL = safeURL(p.Events[i].URL) + p.Events[i].RepoURL = safeURL(p.Events[i].RepoURL) + } +} diff --git a/internal/graph/.gitkeep b/internal/graph/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/internal/graph/graph.go b/internal/graph/graph.go new file mode 100644 index 00000000..0e770042 --- /dev/null +++ b/internal/graph/graph.go @@ -0,0 +1,241 @@ +package graph + +import ( + "encoding/json" + "fmt" + "math" + "os" + "sort" + "strings" +) + +type TagNode struct { + ID string `json:"id"` + Title string `json:"title"` +} + +type AttachmentNode struct { + ID string `json:"id"` + Title string `json:"title"` + URL string `json:"url"` + Path string `json:"path"` + File string `json:"file"` +} + +type Node struct { + ID string `json:"id"` + Title string `json:"title"` + URL string `json:"url"` + Path string `json:"path"` + File string `json:"file"` + Tags []TagNode `json:"tags"` + Attachments []AttachmentNode `json:"attachments,omitempty"` + Date string `json:"date"` + Degree int `json:"degree"` + Exists bool `json:"exists"` +} + +type Link struct { + Source string `json:"source"` + Target string `json:"target"` + Type string `json:"type"` +} + +type GraphMeta struct { + NodeCount int `json:"nodeCount"` + LinkCount int `json:"linkCount"` + MaxDegree int `json:"maxDegree"` + LayoutDiameter float64 `json:"layoutDiameter"` +} + +type Data struct { + Version int `json:"version"` + Nodes []Node `json:"nodes"` + Links []Link `json:"links"` + Meta GraphMeta `json:"meta"` +} + +type InputNode struct { + ID string + Title string + URL string + Path string + File string + Tags []TagNode + Attachments []AttachmentNode + Date string +} + +type InputLink struct { + Source string + Target string // The canonical URL of a published target, or an unresolved identifier. + Exists bool +} + +func computeLayoutDiameter(nodeCount int, linkCount int, maxDegree int) float64 { + if nodeCount <= 0 { + return 1.0 + } + + diameter := math.Sqrt(float64(nodeCount)) + + // Adjust slightly for density + avgDegree := 0.0 + if nodeCount > 0 { + avgDegree = float64(linkCount*2) / float64(nodeCount) + } + + if avgDegree > 2.0 { + diameter *= 1.1 // Give a bit more space for dense graphs + } + + // Add some safety clamping + if diameter < 2.5 { + diameter = 2.5 // Minimum logical extent for very small graphs + } + + return diameter +} + +func BuildJSON(nodes []InputNode, links []InputLink, outputPath string) error { + degreeMap := make(map[string]int) + linkSet := make(map[[2]string]bool) + neighborSet := make(map[[2]string]bool) + var finalLinks []Link + + // Preserve citation direction, deduplicating only repeated A -> B links. + for _, link := range links { + if link.Source == link.Target { + continue // ignore self-link + } + + key := [2]string{link.Source, link.Target} + if linkSet[key] { + continue + } + linkSet[key] = true + + finalLinks = append(finalLinks, Link{ + Source: link.Source, + Target: link.Target, + Type: "wikilink", + }) + } + + // Degree and density count distinct neighbors, including reciprocal links once. + for _, link := range finalLinks { + a, b := link.Source, link.Target + if a > b { + a, b = b, a + } + key := [2]string{a, b} + if neighborSet[key] { + continue + } + neighborSet[key] = true + degreeMap[link.Source]++ + degreeMap[link.Target]++ + } + + existsMap := make(map[string]bool) + seenIDs := make(map[string]bool) + + var finalNodes []Node + for _, node := range nodes { + if strings.TrimSpace(node.ID) == "" { + return fmt.Errorf("graph node has empty id: %q", node.Title) + } + if seenIDs[node.ID] { + return fmt.Errorf("duplicate graph node id: %q", node.ID) + } + seenIDs[node.ID] = true + existsMap[node.ID] = true + + finalNodes = append(finalNodes, Node{ + ID: node.ID, + Title: node.Title, + URL: node.URL, + Path: node.Path, + File: node.File, + Tags: node.Tags, + Attachments: node.Attachments, + Date: node.Date, + Degree: degreeMap[node.ID], + Exists: true, + }) + } + + // 3. Process missing nodes + for _, link := range links { + if !link.Exists { + // Initialize as false if not explicitly added by nodes + if _, ok := existsMap[link.Target]; !ok { + existsMap[link.Target] = false + } + } + } + + // Add non-existent nodes that are targets of links + var missingIDs []string + for target, exists := range existsMap { + if !exists { + missingIDs = append(missingIDs, target) + } + } + sort.Strings(missingIDs) + for _, target := range missingIDs { + finalNodes = append(finalNodes, Node{ + ID: target, + Title: target, + URL: "", + Tags: []TagNode{}, + Date: "", + Degree: degreeMap[target], + Exists: false, + }) + } + + maxDegree := 0 + for _, n := range finalNodes { + if n.Degree > maxDegree { + maxDegree = n.Degree + } + } + + diameter := computeLayoutDiameter(len(finalNodes), len(neighborSet), maxDegree) + + meta := GraphMeta{ + NodeCount: len(finalNodes), + LinkCount: len(finalLinks), + MaxDegree: maxDegree, + LayoutDiameter: diameter, + } + + data := Data{ + Version: 1, + Nodes: finalNodes, + Links: finalLinks, + Meta: meta, + } + + if data.Nodes == nil { + data.Nodes = []Node{} + } + if data.Links == nil { + data.Links = []Link{} + } + + file, err := os.Create(outputPath) + if err != nil { + return fmt.Errorf("create graph.json: %w", err) + } + defer file.Close() + + encoder := json.NewEncoder(file) + encoder.SetIndent("", " ") + if err := encoder.Encode(data); err != nil { + return fmt.Errorf("encode graph.json: %w", err) + } + + return nil +} diff --git a/internal/graph/graph_test.go b/internal/graph/graph_test.go new file mode 100644 index 00000000..29eeb194 --- /dev/null +++ b/internal/graph/graph_test.go @@ -0,0 +1,107 @@ +package graph + +import ( + "encoding/json" + "os" + "path/filepath" + "testing" +) + +func TestBuildJSON_EmptyID(t *testing.T) { + nodes := []InputNode{ + {ID: "", Title: "Empty"}, + } + err := BuildJSON(nodes, nil, "dummy.json") + if err == nil { + t.Errorf("Expected error for empty ID, got nil") + } +} + +func TestBuildJSON_DuplicateID(t *testing.T) { + nodes := []InputNode{ + {ID: "A", Title: "A1"}, + {ID: "A", Title: "A2"}, + } + err := BuildJSON(nodes, nil, "dummy.json") + if err == nil { + t.Errorf("Expected error for duplicate ID, got nil") + } +} + +func TestBuildJSON_EdgeCases(t *testing.T) { + nodes := []InputNode{ + {ID: "A"}, + {ID: "B"}, + {ID: "C"}, + } + links := []InputLink{ + {Source: "A", Target: "A", Exists: true}, // Self edge + {Source: "A", Target: "B", Exists: true}, // A->B + {Source: "A", Target: "B", Exists: true}, // A->B duplicate + {Source: "B", Target: "A", Exists: true}, // B->A is a distinct citation + {Source: "A", Target: "C", Exists: true}, // A->C + } + + tmpDir := t.TempDir() + out := filepath.Join(tmpDir, "graph.json") + err := BuildJSON(nodes, links, out) + if err != nil { + t.Fatalf("BuildJSON failed: %v", err) + } + + b, err := os.ReadFile(out) + if err != nil { + t.Fatalf("Failed to read output: %v", err) + } + + var data Data + if err := json.Unmarshal(b, &data); err != nil { + t.Fatalf("Failed to unmarshal output: %v", err) + } + + if data.Version != 1 || len(data.Links) != 3 { + t.Fatalf("Expected v1 graph with 3 directed links, got %+v", data) + } + + degree := make(map[string]int) + for _, n := range data.Nodes { + degree[n.ID] = n.Degree + } + + if degree["A"] != 2 { + t.Errorf("Expected A degree 2, got %d", degree["A"]) + } + if degree["B"] != 1 { + t.Errorf("Expected B degree 1, got %d", degree["B"]) + } + if degree["C"] != 1 { + t.Errorf("Expected C degree 1, got %d", degree["C"]) + } +} + +func TestBuildJSONKeepsSameNamedContentDistinct(t *testing.T) { + out := filepath.Join(t.TempDir(), "graph.json") + err := BuildJSON([]InputNode{ + {ID: "/notes/foo/", Title: "foo", URL: "/notes/foo/"}, + {ID: "/memos/foo/", Title: "foo", URL: "/memos/foo/"}, + {ID: "/en_US/memos/foo/", Title: "foo", URL: "/en_US/memos/foo/"}, + }, []InputLink{ + {Source: "/notes/foo/", Target: "/memos/foo/", Exists: true}, + {Source: "/memos/foo/", Target: "/notes/foo/", Exists: true}, + {Source: "/en_US/memos/foo/", Target: "/notes/foo/", Exists: true}, + }, out) + if err != nil { + t.Fatal(err) + } + b, err := os.ReadFile(out) + if err != nil { + t.Fatal(err) + } + var graph Data + if err := json.Unmarshal(b, &graph); err != nil { + t.Fatal(err) + } + if len(graph.Nodes) != 3 || len(graph.Links) != 3 || graph.Nodes[0].Degree != 2 { + t.Fatalf("graph conflated content with the same filename: %+v", graph) + } +} diff --git a/internal/graph/search.go b/internal/graph/search.go new file mode 100644 index 00000000..807effe7 --- /dev/null +++ b/internal/graph/search.go @@ -0,0 +1,230 @@ +package graph + +import ( + "encoding/json" + "fmt" + "math" + "os" + "strings" + "time" + "unicode" + + "github.com/StatIndet/daybook/internal/content" + "golang.org/x/net/html" +) + +// SearchDocument contains only public, rendered note text and approved metadata. +// Keeping this separate from graph.json lets ordinary graph visits skip the body +// index until a query actually needs it. +type SearchDocument struct { + ID string `json:"id"` + Text string `json:"text"` + Lines []string `json:"lines"` + Sections []string `json:"sections"` + Properties map[string]any `json:"properties"` +} + +type SearchData struct { + Version int `json:"version"` + Documents []SearchDocument `json:"documents"` +} + +// NewSearchDocument consumes the same sanitized, resolved HTML that is published +// as the article. This excludes hidden Obsidian/HTML comments and frontmatter, +// and treats code containing Markdown heading markers as code, not a section. +func NewSearchDocument(note content.Note, publishedHTML string, allowedProperties []string) SearchDocument { + lines, sections := searchText(publishedHTML) + tags := note.Tags + if tags == nil { + tags = []string{} + } + properties := map[string]any{ + "title": note.Title, "date": note.Date, "updated": note.Updated, + "tags": tags, "summary": note.Summary, "lang": note.Lang, + "slug": note.Slug, "pinned": note.Pinned, "section": note.Section, + "location": note.Location, "url": note.URL, "i18n_key": note.I18nKey, + } + for _, key := range allowedProperties { + key = strings.TrimSpace(key) + if _, public := properties[strings.ToLower(key)]; public { + continue // Public values come from the canonical note, never raw YAML. + } + if value, exists := note.Frontmatter[key]; exists { + if value, valid := searchableProperty(value); valid { + properties[key] = value + } + } + } + return SearchDocument{ + ID: note.URL, Text: strings.Join(lines, "\n"), Lines: lines, + Sections: sections, Properties: properties, + } +} + +func searchableProperty(value any) (any, bool) { + if list, ok := value.([]any); ok { + result := make([]any, 0, len(list)) + for _, entry := range list { + entry, valid := searchableScalar(entry) + if !valid { + return nil, false + } + result = append(result, entry) + } + return result, true + } + return searchableScalar(value) +} + +func searchableScalar(value any) (any, bool) { + switch value := value.(type) { + case nil, string, bool, int, int64, uint64: + return value, true + case float64: + return value, !math.IsNaN(value) && !math.IsInf(value, 0) + case time.Time: // YAML timestamps otherwise become Go structs. + return value.Format(time.RFC3339), true + default: + return nil, false + } +} + +func searchText(publishedHTML string) ([]string, []string) { + root, err := html.Parse(strings.NewReader(publishedHTML)) + if err != nil { + return []string{}, []string{} + } + var current strings.Builder + sections := []string{} + flushSection := func() { + if section := strings.TrimSpace(current.String()); section != "" { + sections = append(sections, section) + } + current.Reset() + } + var visit func(*html.Node) + visit = func(node *html.Node) { + if node.Type == html.TextNode { + // Goldmark formats table cells on separate HTML source lines, even + // though they belong to the same Markdown row and line query scope. + if node.Parent != nil && strings.TrimSpace(node.Data) == "" { + switch node.Parent.Data { + case "table", "thead", "tbody", "tfoot", "tr": + return + } + } + current.WriteString(strings.ReplaceAll(node.Data, "\r", "")) + return + } + if node.Type == html.CommentNode || hiddenSearchNode(node) { + return + } + if searchNodeHasClass(node, "gc-container") { + for _, attr := range node.Attr { + if attr.Key == "data-repo" { + // Index the authored identifier, not the card's loading text, + // placeholder counters or inaccessible decorative markup. + current.WriteString("\n" + attr.Val + "\n") + return + } + } + } + block := false + if node.Type == html.ElementNode { + switch node.Data { + case "h1", "h2", "h3", "h4", "h5", "h6": + flushSection() + block = true + case "p", "div", "section", "article", "blockquote", "pre", "li", "tr", "dl", "dt", "dd", "figure", "figcaption", "details", "summary", "ul", "ol": + block = true + case "br", "hr": + current.WriteByte('\n') + case "td", "th": + current.WriteByte(' ') + } + } + if block { + current.WriteByte('\n') + } + for child := node.FirstChild; child != nil; child = child.NextSibling { + visit(child) + } + if block { + current.WriteByte('\n') + } + } + visit(root) + flushSection() + lines := []string{} + for i, section := range sections { + sectionLines := []string{} + for _, line := range strings.Split(section, "\n") { + line = strings.TrimSpace(line) + if line != "" { + sectionLines = append(sectionLines, line) + } + } + sections[i] = strings.Join(sectionLines, "\n") + lines = append(lines, sectionLines...) + } + return lines, sections +} + +func hiddenSearchNode(node *html.Node) bool { + if node.Type != html.ElementNode { + return false + } + switch node.Data { + case "script", "style", "noscript", "template", "button", "svg": + return true + } + for _, class := range []string{"material-symbol", "music-time", "gc-repo-description", "gc-info-bar", "obsidian-embed-link"} { + if searchNodeHasClass(node, class) { + return true + } + } + for _, attr := range node.Attr { + if attr.Key == "hidden" || attr.Key == "aria-hidden" && strings.EqualFold(attr.Val, "true") { + return true + } + if attr.Key == "style" { + style := strings.ToLower(strings.Map(func(r rune) rune { + if unicode.IsSpace(r) { + return -1 + } + return r + }, attr.Val)) + if strings.Contains(style, "display:none") || strings.Contains(style, "visibility:hidden") { + return true + } + } + } + return false +} + +func searchNodeHasClass(node *html.Node, class string) bool { + for _, attr := range node.Attr { + if attr.Key == "class" { + for _, name := range strings.Fields(attr.Val) { + if name == class { + return true + } + } + } + } + return false +} + +func BuildSearchJSON(documents []SearchDocument, outputPath string) error { + if documents == nil { + documents = []SearchDocument{} + } + data, err := json.Marshal(SearchData{Version: 1, Documents: documents}) + if err != nil { + return fmt.Errorf("encode graph-search.json: %w", err) + } + if err := os.WriteFile(outputPath, data, 0644); err != nil { + return fmt.Errorf("write graph-search.json: %w", err) + } + return nil +} diff --git a/internal/graph/search_test.go b/internal/graph/search_test.go new file mode 100644 index 00000000..f1e85a48 --- /dev/null +++ b/internal/graph/search_test.go @@ -0,0 +1,133 @@ +package graph + +import ( + "encoding/json" + "os" + "path/filepath" + "reflect" + "strings" + "testing" + + "github.com/StatIndet/daybook/internal/content" + "github.com/StatIndet/daybook/internal/markdown" +) + +func TestSearchDocumentUsesPublishedTextAndSectionBoundaries(t *testing.T) { + body := "Intro **public** text.\nSecond line.\n\n%% private-inline %%\n\n%%\nprivate-block\n%%\n\n\n\n## 第一章\n甲\n乙\n\n```md\n# not-a-section\n%% visible-code %%\n```\n\n## 第二章\n丙 �\n\n" + publicHTML, err := markdown.ToHTML(body) + if err != nil { + t.Fatal(err) + } + document := NewSearchDocument(content.Note{URL: "/notes/test/"}, publicHTML, nil) + if len(document.Sections) != 3 { + t.Fatalf("sections = %#v, want intro and two real headings", document.Sections) + } + for _, hidden := range []string{"private-inline", "private-block", "private-html", "private-script", "content_copy"} { + if strings.Contains(document.Text, hidden) { + t.Errorf("index includes hidden/generated text %q: %s", hidden, document.Text) + } + } + for _, visible := range []string{"Intro public text.", "第一章", "not-a-section", "%% visible-code %%", "丙 �"} { + if !strings.Contains(document.Text, visible) { + t.Errorf("index lost public text %q: %s", visible, document.Text) + } + } + if !strings.Contains(document.Sections[1], "甲\n乙") || strings.Contains(document.Sections[1], "丙") { + t.Errorf("section boundaries were lost: %#v", document.Sections) + } + for _, line := range document.Lines { + if strings.Contains(line, "甲") && strings.Contains(line, "乙") { + t.Errorf("separate source lines were combined: %q", line) + } + } +} + +func TestSearchDocumentExportsOnlyApprovedProperties(t *testing.T) { + note, err := content.Parse("/vault/notes/real-title.md", "---\ndate: 2026-10-04\ntitle: ignored-title\ntags: [旅行/中国]\nsecret: never-export\nstatus: complete\nscore: 7.5\nflag: true\nempty: null\nreviewed: 2026-10-03\naliases: [first, second]\nnested: {secret: private}\ninvalid-list: [one, {two: three}]\n---\nHello", "real-title") + if err != nil { + t.Fatal(err) + } + without := NewSearchDocument(note, "

    Hello

    ", nil) + if _, exists := without.Properties["status"]; exists { + t.Fatal("custom properties must be private by default") + } + doc := NewSearchDocument(note, "

    Hello

    ", []string{"title", "status", "score", "flag", "empty", "reviewed", "aliases", "nested", "invalid-list", "missing"}) + if doc.Properties["title"] != "real-title" || doc.Properties["status"] != "complete" || doc.Properties["score"] != 7.5 || doc.Properties["flag"] != true { + t.Fatalf("incorrect exported scalar properties: %#v", doc.Properties) + } + if !reflect.DeepEqual(doc.Properties["aliases"], []any{"first", "second"}) || doc.Properties["reviewed"] != "2026-10-03T00:00:00Z" { + t.Fatalf("incorrect list or timestamp properties: %#v", doc.Properties) + } + if value, exists := doc.Properties["empty"]; !exists || value != nil { + t.Fatal("an explicitly allowed null property must preserve its existence") + } + for _, key := range []string{"secret", "nested", "invalid-list", "missing"} { + if _, exists := doc.Properties[key]; exists { + t.Errorf("unexpected exported property: %s", key) + } + } + data, err := json.Marshal(doc) + if err != nil { + t.Fatal(err) + } + if strings.Contains(string(data), "/vault/") || strings.Contains(string(data), "never-export") { + t.Fatalf("private metadata leaked: %s", data) + } +} + +func TestSearchTextExcludesHiddenHTMLAndPreservesInlineText(t *testing.T) { + lines, sections := searchText(`

    中文强调 & text
    next

    invisible
    # code
    +second code line

    Heading

    body

    `) + if len(sections) != 2 || !reflect.DeepEqual(lines, []string{"中文强调 & text", "next", "# code", "second code line", "Heading", "body"}) { + t.Fatalf("text extraction lost structure: %#v / %#v", lines, sections) + } +} + +func TestSearchTextExcludesEmbedControlsAndPreservesTableRows(t *testing.T) { + body := "> [!note]- Callout title\n> Useful text.\n\n::github{repo=\"StatIndet/daybook\"}\n\n::music{url=\"https://example.com/music.mp3\" title=\"Song title\" artist=\"Artist name\"}\n\n| First | Second |\n| --- | --- |\n| 甲 | 乙 |\n\n## Section\nVisible body." + publicHTML, err := markdown.ToHTML(body) + if err != nil { + t.Fatal(err) + } + doc := NewSearchDocument(content.Note{URL: "/notes/test/"}, publicHTML, nil) + for _, noise := range []string{"info", "expand_more", "Loading repository data", "0:00", "play_arrow", "--"} { + if strings.Contains(doc.Text, noise) { + t.Errorf("index includes generated UI %q: %s", noise, doc.Text) + } + } + for _, visible := range []string{"Callout title", "Useful text", "StatIndet/daybook", "Song title", "Artist name"} { + if !strings.Contains(doc.Text, visible) { + t.Errorf("index lost authored embed content %q: %s", visible, doc.Text) + } + } + foundRow := false + for _, line := range doc.Lines { + if strings.Contains(line, "甲") && strings.Contains(line, "乙") { + foundRow = true + } + } + if !foundRow { + t.Errorf("one table row should remain one line query scope: %#v", doc.Lines) + } +} + +func TestSearchTextIgnoresHiddenHTMLWithCSSWhitespace(t *testing.T) { + lines, _ := searchText("

    Public

    hidden-css

    hidden-aria
    <script>public code</script>
    ") + if !reflect.DeepEqual(lines, []string{"Public", ""}) { + t.Fatalf("hidden HTML filtering affected published code: %#v", lines) + } +} + +func TestBuildSearchJSONEmptyIndex(t *testing.T) { + path := filepath.Join(t.TempDir(), "graph-search.json") + if err := BuildSearchJSON(nil, path); err != nil { + t.Fatal(err) + } + data, err := os.ReadFile(path) + if err != nil { + t.Fatal(err) + } + if string(data) != `{"version":1,"documents":[]}` { + t.Fatalf("unexpected empty index: %s", data) + } +} diff --git a/internal/i18n/i18n.go b/internal/i18n/i18n.go new file mode 100644 index 00000000..5ae328f5 --- /dev/null +++ b/internal/i18n/i18n.go @@ -0,0 +1,218 @@ +package i18n + +import "encoding/json" + +// JSON supplies the same interface translations to the client. Article content +// never participates in UI language switching. +func JSON() string { + data, _ := json.Marshal(dictionary) + return string(data) +} + +var dictionary = map[string]map[string]string{ + "zh_CN": { + "memos.comments": "评论", + "memos.comments_disabled": "评论已关闭", + "memos.views": "�览�", + + "likes.like": "喜欢", + "likes.unlike": "�消喜欢", + "likes.unavailable": "喜欢暂时��用,点击�试", + "likes.failed": "未能更新喜欢,请�试。", + "rss.subscribe": "订阅本站更新(RSS)", + "rss.description": "在 RSS 阅读器中添加此地�,订阅本站新�布的笔记与�记。", + "rss.address": "RSS 订阅地�", + "rss.open": "打开订阅�", + "rss.copy": "�制地�", + "rss.copy_fallback": "�制失败,地�已选中,请手动�制。", + + "nav.memos": "�记", + "memos.search_placeholder": "�索�记…", + "memos.search": "�索�记:正文 / 日期 / 地点 / 标签", + "memos.filters": "日历与标签", + "memos.calendar": "�记日历", + "memos.previous_month": "上个月", + "memos.next_month": "下个月", + "memos.all_dates": "全部日期", + "memos.reset": "清除筛选", + "memos.empty": "还没有�布的�记。", + "memos.open": "阅读�记与评论", + "memos.pinned": "已置顶", + "memos.updated": "更新于", + "memos.detail": "�记", + "seo.memos.description": "记录当下的想法��闻与生活片段。", + "nav.home": "首页", + "nav.notes": "笔记", + "nav.archive": "归档", + "nav.graph": "图谱", + "nav.about": "关于", + "action.search": "�索", + "action.tags": "标签", + "action.attachments": "附件", + "action.back": "返回", + "action.top": "回到顶部", + "action.bottom": "直达底部", + "action.theme": "切�主题", + "action.palette": "切�暖色�色", + "action.rss": "RSS订阅", + "action.reader": "阅读模�", + "action.exit_reader": "退出阅读模�", + "tooltip.search": "�索", + "tooltip.tags": "标签", + "tooltip.theme": "切�主题", + "tooltip.palette": "切�暖色�色", + "tooltip.attachments": "附件", + "tooltip.back": "返回", + "post.bilingual": "中/EN", + "post.translation": "阅读�一语言版本", + "post.toc": "目录", + "post.min_read": "min", + "post.words": "chars", + "search.placeholder": "�索:标题/摘�/标签", + "search.empty": "没有找到相关内容", + "search.loading": "正在加载�索索引…", + "action.close": "关闭", + "home.hero_label": "简介", + "archive.title": "归档", + "archive.days": "天", + "archive.posts": "篇文章", + "archive.words.k": "�字", + "archive.empty": "还没有�布的文章。", + "graph.title": "图谱", + "graph.search": "�索文章标题...", + "graph.orphans": "孤立节点", + "graph.reset": "�置", + "about.title": "关于", + "tag.empty": "暂无标签", + "footer.visitors": "访客", + "footer.views": "访问", + "footer.words": "字数", + "footer.uptime": "历时", + "seo.tag.description": "�览 Daybook 中与「%s�相关的文章�笔记与技术记录。", + "seo.notes.description": "按时间线�览 Daybook 的全部文章�笔记与技术记录。", + "seo.archive.description": "按时间线�览 Daybook 的全部文章�笔记与技术记录。", + "seo.graph.description": "探索 Daybook 中的知识关�网络。", + "theme.light": "浅色", + "theme.dark": "深色", + "theme.system": "跟�系统", + "theme.system_light": "跟�系统(浅色)", + "theme.system_dark": "跟�系统(深色)", + "palette.cool": "冷色", + "palette.warm": "暖色", + "palette.warm_theme": "暖色主题", + "action.share": "分享", + "action.close_share": "关闭分享", + "action.copy": "�制", + "action.copied": "已�制", + }, + "en_US": { + "memos.comments": "Comments", + "memos.comments_disabled": "Comments are disabled", + "memos.views": "Views", + + "likes.like": "Like", + "likes.unlike": "Unlike", + "likes.unavailable": "Likes unavailable. Click to retry.", + "likes.failed": "Could not update your like. Please retry.", + "rss.subscribe": "Subscribe to this site (RSS)", + "rss.description": "Add this address to your RSS reader to follow new notes and memos from this site.", + "rss.address": "RSS feed address", + "rss.open": "Open feed", + "rss.copy": "Copy address", + "rss.copy_fallback": "Copy failed. The address is selected; please copy it manually.", + + "nav.memos": "Memos", + "memos.search_placeholder": "Search memos…", + "memos.search": "Search memos: text / date / location / tags", + "memos.filters": "Calendar and tags", + "memos.calendar": "Memo calendar", + "memos.previous_month": "Previous month", + "memos.next_month": "Next month", + "memos.all_dates": "All dates", + "memos.reset": "Clear filters", + "memos.empty": "No memos yet.", + "memos.open": "Read memo and comments", + "memos.pinned": "Pinned", + "memos.updated": "Updated", + "memos.detail": "Memo", + "seo.memos.description": "Thoughts, observations, and everyday moments.", + "nav.home": "Home", + "nav.notes": "Notes", + "nav.archive": "Archive", + "nav.graph": "Graph", + "nav.about": "About", + "action.search": "Search", + "action.tags": "Tags", + "action.attachments": "Attachments", + "action.back": "Back", + "action.top": "Top", + "action.bottom": "Bottom", + "action.theme": "Theme", + "action.palette": "Warm palette", + "action.rss": "RSS", + "action.reader": "Reader mode", + "action.exit_reader": "Exit reader mode", + "tooltip.search": "Search", + "tooltip.tags": "Tags", + "tooltip.theme": "Toggle Theme", + "tooltip.palette": "Toggle warm palette", + "tooltip.attachments": "Attachments", + "tooltip.back": "Back", + "post.bilingual": "Bilingual", + "post.translation": "Read the other language version", + "post.toc": "Table of Contents", + "post.min_read": "min", + "post.words": "words", + "search.placeholder": "Search: Title/Summary/Tag", + "search.empty": "No results found", + "search.loading": "Loading search index…", + "action.close": "Close", + "home.hero_label": "Introduction", + "archive.title": "Archive", + "archive.days": "days", + "archive.posts": "posts", + "archive.words.k": "k words", + "archive.empty": "No posts found.", + "graph.title": "Graph", + "graph.search": "Search titles...", + "graph.orphans": "Orphans", + "graph.reset": "Reset", + "about.title": "About", + "tag.empty": "No tags", + "footer.visitors": "Visitors", + "footer.views": "Views", + "footer.words": "Words", + "footer.uptime": "Uptime", + "seo.tag.description": "Browse articles, notes, and technical records related to '%s' in Daybook.", + "seo.notes.description": "Browse all articles, notes, and technical records in Daybook by timeline.", + "seo.archive.description": "Browse all articles, notes, and technical records in Daybook by timeline.", + "seo.graph.description": "Explore the knowledge association network in Daybook.", + "theme.light": "Light", + "theme.dark": "Dark", + "theme.system": "System", + "theme.system_light": "System (Light)", + "theme.system_dark": "System (Dark)", + "palette.cool": "Cool", + "palette.warm": "Warm", + "palette.warm_theme": "Warm theme", + "action.share": "Share", + "action.close_share": "Close share", + "action.copy": "Copy", + "action.copied": "Copied", + }, +} + +func T(lang, key string) string { + if dict, ok := dictionary[lang]; ok { + if val, ok := dict[key]; ok { + return val + } + } + // Fallback to zh_CN + if dict, ok := dictionary["zh_CN"]; ok { + if val, ok := dict[key]; ok { + return val + } + } + return key +} diff --git a/internal/markdown/embeds.go b/internal/markdown/embeds.go new file mode 100644 index 00000000..dc7c8f60 --- /dev/null +++ b/internal/markdown/embeds.go @@ -0,0 +1,508 @@ +package markdown + +import ( + "fmt" + stdhtml "html" + "net/url" + "regexp" + "strings" +) + +var ( + githubOwnerPattern = regexp.MustCompile(`^[A-Za-z0-9](?:[A-Za-z0-9-]{0,38}[A-Za-z0-9])?$`) + githubRepoPattern = regexp.MustCompile(`^[A-Za-z0-9._-]{1,100}$`) + youtubeIDPattern = regexp.MustCompile(`^[A-Za-z0-9_-]{11}$`) + bilibiliBVPattern = regexp.MustCompile(`^BV[A-Za-z0-9]{10}$`) + spotifyIDPattern = regexp.MustCompile(`^[A-Za-z0-9]+$`) + codepenPartPattern = regexp.MustCompile(`^[A-Za-z0-9_-]+$`) + digitsPattern = regexp.MustCompile(`^[0-9]+$`) + tweetUserPattern = regexp.MustCompile(`^[A-Za-z0-9_]{1,15}$`) +) + +func renderLeafEmbed(name string, attrs map[string]string) (string, bool) { + switch strings.ToLower(name) { + case "github": + return renderGitHubEmbed(attrs) + case "youtube": + return renderYouTubeEmbed(attrs) + case "bilibili": + return renderBilibiliEmbed(attrs) + case "spotify": + return renderSpotifyEmbed(attrs) + case "codepen": + return renderCodePenEmbed(attrs) + case "tweet": + return renderTweetEmbed(attrs) + case "image": + return renderImageEmbed(attrs) + case "video": + return renderVideoEmbed(attrs) + case "audio": + return renderAudioEmbed(attrs) + case "pdf": + return renderPDFEmbed(attrs) + case "music": + return renderMusicEmbed(attrs) + default: + return "", false + } +} + +func renderGitHubEmbed(attrs map[string]string) (string, bool) { + repo := strings.TrimSpace(attrs["repo"]) + owner, name, ok := parseGitHubRepo(repo) + if !ok { + return "", false + } + + href := "https://github.com/" + owner + "/" + name + html := fmt.Sprintf(` + +
    + + + %s%s + + +
    +

    Loading repository data...

    +
    + + -- + + -- + + -- +
    +
    `, + escapeAttr(href), + escapeAttr(repo), + escapeText(owner), + escapeText(name), + ) + return html, true +} + +func parseGitHubRepo(repo string) (string, string, bool) { + parts := strings.Split(repo, "/") + if len(parts) != 2 { + return "", "", false + } + owner := strings.TrimSpace(parts[0]) + name := strings.TrimSpace(parts[1]) + if !githubOwnerPattern.MatchString(owner) || !githubRepoPattern.MatchString(name) { + return "", "", false + } + return owner, name, true +} + +func renderYouTubeEmbed(attrs map[string]string) (string, bool) { + id := strings.TrimSpace(attrs["id"]) + if !youtubeIDPattern.MatchString(id) { + return "", false + } + + src := "https://www.youtube-nocookie.com/embed/" + id + return responsiveIframe("embed-frame-youtube", src, "YouTube video player", `allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen`), true +} + +func renderBilibiliEmbed(attrs map[string]string) (string, bool) { + id := strings.TrimSpace(attrs["id"]) + if !bilibiliBVPattern.MatchString(id) { + return "", false + } + + values := url.Values{} + values.Set("isOutside", "true") + values.Set("bvid", id) + values.Set("p", "1") + values.Set("autoplay", "0") + values.Set("muted", "0") + src := "https://player.bilibili.com/player.html?" + values.Encode() + return responsiveIframe("embed-frame-bilibili", src, "Bilibili video player", `allowfullscreen`), true +} + +func renderSpotifyEmbed(attrs map[string]string) (string, bool) { + rawURL := strings.TrimSpace(attrs["url"]) + spotifyURL, err := url.Parse(rawURL) + if err != nil || spotifyURL.Scheme != "https" || strings.ToLower(spotifyURL.Host) != "open.spotify.com" { + return "", false + } + + parts := cleanPathParts(spotifyURL.Path) + if len(parts) < 2 { + return "", false + } + spotifyType := parts[0] + id := parts[1] + if !validSpotifyType(spotifyType) || !spotifyIDPattern.MatchString(id) { + return "", false + } + + height := "352" + if spotifyType == "track" || spotifyType == "episode" || spotifyType == "show" { + height = "152" + } + src := "https://open.spotify.com/embed/" + spotifyType + "/" + id + html := fmt.Sprintf(` +
    + +
    `, escapeAttr(src), escapeAttr(height)) + return html, true +} + +func validSpotifyType(value string) bool { + switch value { + case "track", "album", "playlist", "artist", "episode", "show": + return true + default: + return false + } +} + +func renderCodePenEmbed(attrs map[string]string) (string, bool) { + rawURL := strings.TrimSpace(attrs["url"]) + codepenURL, err := url.Parse(rawURL) + if err != nil || codepenURL.Scheme != "https" || strings.ToLower(codepenURL.Host) != "codepen.io" { + return "", false + } + + parts := cleanPathParts(codepenURL.Path) + if len(parts) < 3 || parts[1] != "pen" { + return "", false + } + user := parts[0] + slug := parts[2] + if !codepenPartPattern.MatchString(user) || !codepenPartPattern.MatchString(slug) { + return "", false + } + + src := "https://codepen.io/" + user + "/embed/" + slug + "?default-tab=result" + return fixedHeightIframe("embed-frame-codepen", src, "CodePen embed", "420", ``), true +} +func parseDimension(val string) string { + val = strings.TrimSpace(val) + if digitsPattern.MatchString(val) { + return val + } + return "" +} + +func parseAlign(val string) string { + val = strings.TrimSpace(strings.ToLower(val)) + switch val { + case "left", "center", "right": + return val + default: + return "" + } +} + +func parseBool(val string) bool { + val = strings.TrimSpace(strings.ToLower(val)) + return val == "true" || val == "1" || val == "on" || val == "yes" +} + +func isValidRemoteURL(rawURL string) bool { + u, err := url.Parse(rawURL) + if err != nil { + return false + } + scheme := strings.ToLower(u.Scheme) + return scheme == "http" || scheme == "https" +} + + +type MediaEmbed struct { + Kind string + URL string + Alt string + Caption string + Width string + Height string + Align string + Poster string + Autoplay bool + Muted bool + Loop bool +} + +func RenderMediaEmbed(m MediaEmbed) string { + classes := "media-embed media-" + m.Kind + if m.Align != "" { + classes += " is-" + m.Align + } + + var style string + if m.Width != "" && m.Kind == "image" { + style = fmt.Sprintf(` style="--image-width: %spx"`, m.Width) + } + + var attrs []string + if m.Width != "" && m.Kind != "image" { + attrs = append(attrs, fmt.Sprintf(`width="%s"`, escapeAttr(m.Width))) + } + if m.Height != "" { + attrs = append(attrs, fmt.Sprintf(`height="%s"`, escapeAttr(m.Height))) + } + if m.Poster != "" { + attrs = append(attrs, fmt.Sprintf(`poster="%s"`, escapeAttr(m.Poster))) + } + if m.Autoplay { + attrs = append(attrs, "autoplay") + } + if m.Muted { + attrs = append(attrs, "muted") + } + if m.Loop { + attrs = append(attrs, "loop") + } + + attrStr := strings.Join(attrs, " ") + if len(attrStr) > 0 { + attrStr = " " + attrStr + } + + var inner string + switch m.Kind { + case "image": + inner = fmt.Sprintf(`%s`, escapeAttr(m.URL), escapeAttr(m.Alt)) + case "video": + inner = fmt.Sprintf(``, escapeAttr(m.URL), attrStr) + case "audio": + inner = fmt.Sprintf(``, escapeAttr(m.URL), attrStr) + case "pdf": + // Provide default height if not specified + if m.Height == "" { + attrStr += ` height="800"` + } + inner = fmt.Sprintf(``, escapeAttr(m.URL), escapeAttr(m.Alt), attrStr) + } + + if m.Caption != "" { + return fmt.Sprintf(`
    %s
    %s
    `, classes, style, inner, stdhtml.EscapeString(m.Caption)) + } + return fmt.Sprintf(`
    %s
    `, classes, style, inner) +} + +func renderImageEmbed(attrs map[string]string) (string, bool) { + url, ok := attrs["url"] + if !ok || !isValidRemoteURL(url) { + return "", false + } + m := MediaEmbed{ + Kind: "image", + URL: url, + Alt: attrs["alt"], + Caption: attrs["caption"], + Width: parseDimension(attrs["width"]), + Align: parseAlign(attrs["align"]), + } + return RenderMediaEmbed(m), true +} + +func renderVideoEmbed(attrs map[string]string) (string, bool) { + url, ok := attrs["url"] + if !ok || !isValidRemoteURL(url) { + return "", false + } + m := MediaEmbed{ + Kind: "video", + URL: url, + Caption: attrs["caption"], + Width: parseDimension(attrs["width"]), + Height: parseDimension(attrs["height"]), + Align: parseAlign(attrs["align"]), + Poster: attrs["poster"], + Autoplay: parseBool(attrs["autoplay"]), + Muted: parseBool(attrs["muted"]), + Loop: parseBool(attrs["loop"]), + } + return RenderMediaEmbed(m), true +} + +func renderAudioEmbed(attrs map[string]string) (string, bool) { + url, ok := attrs["url"] + if !ok || !isValidRemoteURL(url) { + return "", false + } + m := MediaEmbed{ + Kind: "audio", + URL: url, + Caption: attrs["caption"], + Width: parseDimension(attrs["width"]), + Align: parseAlign(attrs["align"]), + Autoplay: parseBool(attrs["autoplay"]), + Muted: parseBool(attrs["muted"]), + Loop: parseBool(attrs["loop"]), + } + return RenderMediaEmbed(m), true +} + +func renderPDFEmbed(attrs map[string]string) (string, bool) { + url, ok := attrs["url"] + if !ok || !isValidRemoteURL(url) { + return "", false + } + m := MediaEmbed{ + Kind: "pdf", + URL: url, + Alt: "PDF Document", + Caption: attrs["caption"], + Width: parseDimension(attrs["width"]), + Height: parseDimension(attrs["height"]), + Align: parseAlign(attrs["align"]), + } + return RenderMediaEmbed(m), true +} + +func renderMusicEmbed(attrs map[string]string) (string, bool) { + rawURL := strings.TrimSpace(attrs["url"]) + if !isValidRemoteURL(rawURL) { + return "", false + } + + meta, ok := GetMusicMetadata(rawURL) + if !ok { + // fallback + meta.Title = "Unknown Title" + meta.Artist = "Unknown Artist" + } + + if t := strings.TrimSpace(attrs["title"]); t != "" { + meta.Title = t + } + if a := strings.TrimSpace(attrs["artist"]); a != "" { + meta.Artist = a + } + if c := strings.TrimSpace(attrs["cover"]); c != "" { + if isValidRemoteURL(c) { + meta.Cover = c + } + } + + if meta.Cover == "" { + meta.Cover = "/images/default-music-cover.jpg" // Fallback cover + } + + loopAttr := "" + if parseBool(attrs["loop"]) { + loopAttr = " loop" + } + + html := fmt.Sprintf(` +
    +
    +
    +
    +
    + %s +
    +
    +
    %s
    +
    %s
    +
    +
    0:00 / 0:00
    +
    + +
    +
    +
    + +
    +
    + +
    +
    `, + escapeAttr(meta.Cover), + escapeAttr(meta.Cover), + escapeAttr(meta.Title), + escapeText(meta.Title), + escapeText(meta.Artist), + escapeAttr(rawURL), + loopAttr, + ) + + return html, true +} + + +func renderTweetEmbed(attrs map[string]string) (string, bool) { + rawURL := strings.TrimSpace(attrs["url"]) + tweetURL, err := url.Parse(rawURL) + if err != nil || tweetURL.Scheme != "https" { + return "", false + } + host := strings.ToLower(tweetURL.Host) + if host != "x.com" && host != "twitter.com" { + return "", false + } + + parts := cleanPathParts(tweetURL.Path) + if len(parts) < 3 || parts[1] != "status" { + return "", false + } + user := parts[0] + statusID := parts[2] + if !tweetUserPattern.MatchString(user) || !digitsPattern.MatchString(statusID) { + return "", false + } + + href := "https://twitter.com/" + user + "/status/" + statusID + html := fmt.Sprintf(` +
    + +
    `, escapeAttr(href)) + return html, true +} + +func responsiveIframe(className, src, title, extraAttrs string) string { + return `
    ` +} + +func fixedHeightIframe(className, src, title, height, extraAttrs string) string { + extras := strings.TrimSpace(extraAttrs) + if extras != "" { + extras = " " + extras + } + return `
    ` +} + +func cleanPathParts(path string) []string { + rawParts := strings.Split(strings.Trim(path, "/"), "/") + parts := make([]string, 0, len(rawParts)) + for _, part := range rawParts { + if part != "" { + parts = append(parts, part) + } + } + return parts +} + +func escapeText(text string) string { + return stdhtml.EscapeString(text) +} + +func escapeAttr(text string) string { + return stdhtml.EscapeString(text) +} diff --git a/internal/markdown/extensions.go b/internal/markdown/extensions.go new file mode 100644 index 00000000..c3dae0af --- /dev/null +++ b/internal/markdown/extensions.go @@ -0,0 +1,883 @@ +package markdown + +import ( + "fmt" + stdhtml "html" + "os" + "regexp" + "strings" +) + +const maxExtensionDepth = 8 + +type htmlReplacement struct { + Token string + HTML string +} + +type extensionContext struct { + renderer markdownRenderer + depth int + replacements []htmlReplacement + hasMermaid bool + mathItems []MathItem +} + +type containerDirective struct { + FenceLength int + Name string + Title string +} + +var ( + htmlImageParagraphPattern = regexp.MustCompile(`(?s)

    ((?:\s*]*>)+)\s*

    `) + htmlAttrPattern = regexp.MustCompile(`(?i)([a-z-]+)\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s>]+))`) + imgTagPattern = regexp.MustCompile(`(?i)]*)>`) +) + +type calloutInfo struct { + Type string + OriginalType string + Title string + IsCollapsible bool + IsDefaultOpen bool +} + +var calloutTitles = map[string]string{ + "note": "Note", + "tip": "Tip", + "important": "Important", + "warning": "Warning", + "caution": "Caution", + "abstract": "Abstract", + "info": "Info", + "todo": "Todo", + "success": "Success", + "question": "Question", + "failure": "Failure", + "danger": "Danger", + "bug": "Bug", + "example": "Example", + "quote": "Quote", +} + +var calloutAliases = map[string]string{ + "summary": "abstract", + "tldr": "abstract", + "hint": "tip", + "check": "success", + "done": "success", + "help": "question", + "faq": "question", + "attention": "warning", + "fail": "failure", + "missing": "failure", + "error": "danger", + "cite": "quote", +} + +var calloutIcons = map[string]string{ + "note": "info", + "abstract": "subject", + "info": "info", + "todo": "checklist", + "tip": "lightbulb", + "important": "priority_high", + "success": "check_circle", + "question": "help", + "warning": "warning", + "caution": "error", + "failure": "cancel", + "danger": "report", + "bug": "bug_report", + "example": "science", + "quote": "format_quote", +} + +func (renderer markdownRenderer) processExtensions(input string, depth int) (string, []htmlReplacement, bool, error) { + if depth >= maxExtensionDepth { + return input, nil, false, nil + } + + context := extensionContext{ + renderer: renderer, + depth: depth, + } + + input = extractMath(input, &context) + + if len(context.mathItems) > 0 { + results, err := renderMathBlocks(context.mathItems) + if err != nil { + return "", nil, false, err + } + for _, result := range results { + if !result.OK { + fmt.Fprintf(os.Stderr, "KaTeX 渲染错误 (%s): %s\n", result.ID, result.Error) + } + finalToken := context.addHTML(result.HTML) + input = strings.ReplaceAll(input, result.ID, finalToken) + } + } + + lines := strings.Split(input, "\n") + output := make([]string, 0, len(lines)) + inCodeFence := false + codeFenceChar := byte(0) + codeFenceLength := 0 + + for i := 0; i < len(lines); i++ { + line := lines[i] + if char, length, ok := markdownFence(line); ok { + if !inCodeFence && isMermaidFence(line, length) { + end := findCodeFenceEnd(lines, i+1, char, length) + if end < 0 { + output = append(output, line) + continue + } + + source := strings.Join(lines[i+1:end], "\n") + output = append(output, context.addHTML(renderMermaidBlock(source))) + context.hasMermaid = true + i = end + continue + } + + if !inCodeFence { + inCodeFence = true + codeFenceChar = char + codeFenceLength = length + } else if char == codeFenceChar && length >= codeFenceLength { + inCodeFence = false + codeFenceChar = 0 + codeFenceLength = 0 + } + output = append(output, line) + continue + } + + if inCodeFence { + output = append(output, line) + continue + } + + if info, ok := parseCalloutStart(line); ok { + contentLines := []string{} + + next := i + 1 + for next < len(lines) { + content, ok := stripBlockquoteMarker(lines[next]) + if !ok { + break + } + contentLines = append(contentLines, content) + next++ + } + + html, err := context.renderCallout(info, strings.Join(contentLines, "\n")) + if err != nil { + return "", nil, false, err + } + output = append(output, context.addHTML(html)) + i = next - 1 + continue + } + + if directive, ok := parseContainerDirective(line); ok { + end := findContainerEnd(lines, i+1, directive.FenceLength) + if end < 0 { + output = append(output, line) + continue + } + + inner := strings.Join(lines[i+1:end], "\n") + html, ok, err := context.renderContainer(directive, inner) + if err != nil { + return "", nil, false, err + } + if !ok { + output = append(output, lines[i:end+1]...) + i = end + continue + } + + output = append(output, context.addHTML(html)) + i = end + continue + } + + if name, attrs, ok := parseLeafDirective(line); ok { + if html, ok := renderLeafEmbed(name, attrs); ok { + output = append(output, context.addHTML(html)) + continue + } + } + + output = append(output, line) + } + + return strings.Join(output, "\n"), context.replacements, context.hasMermaid, nil +} + +func (context *extensionContext) addHTML(html string) string { + token := fmt.Sprintf("DAYBOOK_MARKDOWN_HTML_%d_%d_END", context.depth, len(context.replacements)) + context.replacements = append(context.replacements, htmlReplacement{ + Token: token, + HTML: html, + }) + return token +} + +func restoreHTMLReplacements(html string, replacements []htmlReplacement) string { + for index := len(replacements) - 1; index >= 0; index-- { + replacement := replacements[index] + html = strings.ReplaceAll(html, "

    "+replacement.Token+"

    ", replacement.HTML) + html = strings.ReplaceAll(html, replacement.Token, replacement.HTML) + } + return html +} + +func (context *extensionContext) renderCallout(info calloutInfo, content string) (string, error) { + if info.Title == "" { + if defaultTitle, ok := calloutTitles[info.OriginalType]; ok { + info.Title = defaultTitle + } else if defaultTitle, ok := calloutTitles[strings.ToLower(info.OriginalType)]; ok { + info.Title = defaultTitle + } else if defaultTitle, ok := calloutTitles[info.Type]; ok { + info.Title = defaultTitle + } else { + info.Title = strings.ToUpper(info.OriginalType[:1]) + info.OriginalType[1:] + } + } + + document, err := context.renderer.render(content, false, context.depth+1) + if err != nil { + return "", err + } + context.hasMermaid = context.hasMermaid || document.HasMermaid + contentHTML := strings.TrimSpace(document.HTML) + isTitleOnly := contentHTML == "" + + iconName := "info" + if name, ok := calloutIcons[info.Type]; ok { + iconName = name + } + + var builder strings.Builder + if info.IsCollapsible { + builder.WriteString(`
    `) + + builder.WriteString(``) + builder.WriteString(``) + builder.WriteString(iconName) + builder.WriteString(``) + builder.WriteString(`
    `) + builder.WriteString(stdhtml.EscapeString(info.Title)) + builder.WriteString(`
    `) + builder.WriteString(`keyboard_arrow_down`) + builder.WriteString(`
    `) + + builder.WriteString(`
    `) + if !isTitleOnly { + builder.WriteString(contentHTML) + } else { + builder.WriteString(`

    `) + } + builder.WriteString(`
    `) + } else { + builder.WriteString(`
    `) + + builder.WriteString(`
    `) + builder.WriteString(``) + builder.WriteString(iconName) + builder.WriteString(``) + builder.WriteString(`
    `) + builder.WriteString(stdhtml.EscapeString(info.Title)) + builder.WriteString(`
    `) + builder.WriteString(`
    `) + + if !isTitleOnly { + builder.WriteString(`
    `) + builder.WriteString(contentHTML) + builder.WriteString(`
    `) + } + builder.WriteString(`
    `) + } + + return builder.String(), nil +} + +func (context *extensionContext) renderContainer(directive containerDirective, content string) (string, bool, error) { + name := strings.ToLower(directive.Name) + if _, ok := calloutTitles[name]; ok { + info := calloutInfo{ + Type: name, + OriginalType: directive.Name, + Title: directive.Title, + } + html, err := context.renderCallout(info, content) + return html, true, err + } + + switch name { + case "fold": + html, err := context.renderFold(directive.Title, content) + return html, true, err + case "gallery": + html, err := context.renderGallery(content) + return html, true, err + default: + return "", false, nil + } +} + +func (context *extensionContext) renderFold(title, content string) (string, error) { + if strings.TrimSpace(title) == "" { + title = "展开查看" + } + + document, err := context.renderer.render(content, false, context.depth+1) + if err != nil { + return "", err + } + context.hasMermaid = context.hasMermaid || document.HasMermaid + contentHTML := strings.TrimSpace(document.HTML) + + var builder strings.Builder + builder.WriteString(`
    `) + builder.WriteString(``) + builder.WriteString(stdhtml.EscapeString(title)) + builder.WriteString(``) + builder.WriteString(`
    `) + builder.WriteString(contentHTML) + builder.WriteString(`
    `) + return builder.String(), nil +} + +func (context *extensionContext) renderGallery(content string) (string, error) { + document, err := context.renderer.render(content, false, context.depth+1) + if err != nil { + return "", err + } + context.hasMermaid = context.hasMermaid || document.HasMermaid + contentHTML := strings.TrimSpace(document.HTML) + + var builder strings.Builder + builder.WriteString(``) + return builder.String(), nil +} + +func isMermaidFence(line string, fenceLength int) bool { + info := strings.ToLower(strings.TrimSpace(markdownFenceInfo(line, fenceLength))) + if info == "" { + return false + } + + fields := strings.Fields(info) + if len(fields) == 0 { + return false + } + return fields[0] == "mermaid" || fields[0] == "{mermaid}" +} + +func markdownFenceInfo(line string, fenceLength int) string { + trimmed := strings.TrimLeft(line, " \t") + if len(trimmed) < fenceLength { + return "" + } + return trimmed[fenceLength:] +} + +func findCodeFenceEnd(lines []string, start int, fenceChar byte, fenceLength int) int { + for i := start; i < len(lines); i++ { + char, length, ok := markdownFence(lines[i]) + if ok && char == fenceChar && length >= fenceLength { + return i + } + } + return -1 +} + +func renderMermaidBlock(source string) string { + escapedSource := stdhtml.EscapeString(source) + return `
    ` +
    +		escapedSource +
    +		`
    ` +} + +func parseCalloutStart(line string) (calloutInfo, bool) { + content, ok := stripBlockquoteMarker(line) + if !ok { + return calloutInfo{}, false + } + + trimmed := strings.TrimLeft(content, " \t") + if !strings.HasPrefix(trimmed, "[!") { + return calloutInfo{}, false + } + + end := strings.IndexByte(trimmed, ']') + if end < 0 { + return calloutInfo{}, false + } + + typeStr := strings.TrimSpace(trimmed[2:end]) + if typeStr == "" { + return calloutInfo{}, false + } + if strings.ContainsAny(typeStr, " \t\n\r") { + return calloutInfo{}, false + } + + info := calloutInfo{ + OriginalType: typeStr, + } + + rest := strings.TrimLeft(trimmed[end+1:], " \t") + + if strings.HasPrefix(rest, "+") { + info.IsCollapsible = true + info.IsDefaultOpen = true + rest = strings.TrimLeft(rest[1:], " \t") + } else if strings.HasPrefix(rest, "-") { + info.IsCollapsible = true + info.IsDefaultOpen = false + rest = strings.TrimLeft(rest[1:], " \t") + } + + info.Title = strings.TrimSpace(rest) + + lowerType := strings.ToLower(typeStr) + if alias, ok := calloutAliases[lowerType]; ok { + info.Type = alias + } else { + info.Type = lowerType + } + + if _, ok := calloutTitles[info.Type]; !ok { + info.Type = "note" + } + + return info, true +} + +func stripBlockquoteMarker(line string) (string, bool) { + trimmed := strings.TrimLeft(line, " \t") + if !strings.HasPrefix(trimmed, ">") { + return "", false + } + + content := strings.TrimPrefix(trimmed, ">") + if strings.HasPrefix(content, " ") { + content = content[1:] + } + return content, true +} + +func parseContainerDirective(line string) (containerDirective, bool) { + trimmed := strings.TrimSpace(line) + if !strings.HasPrefix(trimmed, ":::") { + return containerDirective{}, false + } + + fenceLength := 0 + for fenceLength < len(trimmed) && trimmed[fenceLength] == ':' { + fenceLength++ + } + if fenceLength < 3 { + return containerDirective{}, false + } + + rest := strings.TrimSpace(trimmed[fenceLength:]) + if rest == "" { + return containerDirective{}, false + } + + name, rest, ok := readDirectiveName(rest) + if !ok { + return containerDirective{}, false + } + + title := "" + rest = strings.TrimSpace(rest) + if rest != "" { + if !strings.HasPrefix(rest, "[") || !strings.HasSuffix(rest, "]") { + return containerDirective{}, false + } + title = strings.TrimSpace(rest[1 : len(rest)-1]) + } + + return containerDirective{ + FenceLength: fenceLength, + Name: name, + Title: title, + }, true +} + +func findContainerEnd(lines []string, start, fenceLength int) int { + for i := start; i < len(lines); i++ { + trimmed := strings.TrimSpace(lines[i]) + if trimmed == "" { + continue + } + + count := 0 + for count < len(trimmed) && trimmed[count] == ':' { + count++ + } + if count >= fenceLength && strings.TrimSpace(trimmed[count:]) == "" { + return i + } + } + return -1 +} + +func parseLeafDirective(line string) (string, map[string]string, bool) { + trimmed := strings.TrimSpace(line) + if !strings.HasPrefix(trimmed, "::") || strings.HasPrefix(trimmed, ":::") { + return "", nil, false + } + + name, rest, ok := readDirectiveName(trimmed[2:]) + if !ok { + return "", nil, false + } + + rest = strings.TrimSpace(rest) + if !strings.HasPrefix(rest, "{") || !strings.HasSuffix(rest, "}") { + return "", nil, false + } + + attrs, ok := parseDirectiveAttrs(rest[1 : len(rest)-1]) + if !ok { + return "", nil, false + } + return name, attrs, true +} + +func readDirectiveName(text string) (string, string, bool) { + if text == "" || !isDirectiveNameStart(text[0]) { + return "", text, false + } + + end := 1 + for end < len(text) && isDirectiveNameChar(text[end]) { + end++ + } + return strings.ToLower(text[:end]), text[end:], true +} + +func isDirectiveNameStart(ch byte) bool { + return ch >= 'A' && ch <= 'Z' || ch >= 'a' && ch <= 'z' +} + +func isDirectiveNameChar(ch byte) bool { + return isDirectiveNameStart(ch) || ch >= '0' && ch <= '9' || ch == '-' || ch == '_' +} + +func parseDirectiveAttrs(text string) (map[string]string, bool) { + attrs := make(map[string]string) + index := 0 + + for index < len(text) { + index = skipSpaces(text, index) + if index >= len(text) { + break + } + if !isDirectiveNameStart(text[index]) { + return nil, false + } + + keyStart := index + index++ + for index < len(text) && isDirectiveNameChar(text[index]) { + index++ + } + key := strings.ToLower(text[keyStart:index]) + + index = skipSpaces(text, index) + if index >= len(text) || text[index] != '=' { + return nil, false + } + index++ + index = skipSpaces(text, index) + if index >= len(text) || (text[index] != '"' && text[index] != '\'') { + return nil, false + } + + quote := text[index] + index++ + var value strings.Builder + for index < len(text) { + if text[index] == '\\' && index+1 < len(text) { + index++ + value.WriteByte(text[index]) + index++ + continue + } + if text[index] == quote { + break + } + value.WriteByte(text[index]) + index++ + } + if index >= len(text) || text[index] != quote { + return nil, false + } + index++ + attrs[key] = value.String() + } + + return attrs, true +} + +func skipSpaces(text string, index int) int { + for index < len(text) && (text[index] == ' ' || text[index] == '\t' || text[index] == '\n' || text[index] == '\r') { + index++ + } + return index +} + +func markdownFence(line string) (byte, int, bool) { + trimmed := strings.TrimLeft(line, " \t") + if len(trimmed) < 3 || (trimmed[0] != '`' && trimmed[0] != '~') { + return 0, 0, false + } + + char := trimmed[0] + length := 0 + for length < len(trimmed) && trimmed[length] == char { + length++ + } + if length < 3 { + return 0, 0, false + } + + return char, length, true +} + +func applyFigureCaptions(html string) string { + return htmlImageParagraphPattern.ReplaceAllStringFunc(html, func(match string) string { + parts := htmlImageParagraphPattern.FindStringSubmatch(match) + if len(parts) != 2 { + return match + } + + imgTags := imgTagPattern.FindAllString(parts[1], -1) + var builder strings.Builder + for _, imgTag := range imgTags { + attrText := imgTagPattern.FindStringSubmatch(imgTag)[1] + attrs := parseHTMLAttrs(attrText) + alt := attrs["alt"] + + if strings.HasPrefix(alt, "_") { + builder.WriteString(`

    `) + continue + } + if strings.TrimSpace(alt) == "" { + builder.WriteString(`

    `) + continue + } + + builder.WriteString(`
    ` + stdhtml.EscapeString(alt) + `
    `) + } + return builder.String() + }) +} + +func parseHTMLAttrs(text string) map[string]string { + attrs := make(map[string]string) + matches := htmlAttrPattern.FindAllStringSubmatch(text, -1) + for _, match := range matches { + if len(match) < 4 { + continue + } + value := match[2] + if value == "" && len(match) >= 4 { + value = match[3] + } + if value == "" && len(match) >= 5 { + value = match[4] + } + attrs[strings.ToLower(match[1])] = stdhtml.UnescapeString(value) + } + return attrs +} + +func rewriteImageAlt(attrText, alt string) string { + return htmlAttrPattern.ReplaceAllStringFunc(attrText, func(match string) string { + parts := htmlAttrPattern.FindStringSubmatch(match) + if len(parts) < 4 || !strings.EqualFold(parts[1], "alt") { + return match + } + return `alt="` + stdhtml.EscapeString(alt) + `"` + }) +} + +func (context *extensionContext) addMathHTML(mathText string, isBlock bool) string { + id := fmt.Sprintf("DAYBOOK_MATH_PLACEHOLDER_%d_%d_END", context.depth, len(context.mathItems)) + context.mathItems = append(context.mathItems, MathItem{ + ID: id, + Tex: mathText, + DisplayMode: isBlock, + }) + return id +} + +func extractMath(input string, context *extensionContext) string { + var builder strings.Builder + builder.Grow(len(input)) + i := 0 + + for i < len(input) { + if input[i] == '`' || input[i] == '~' { + char := input[i] + start := i + for i < len(input) && input[i] == char { + i++ + } + length := i - start + + if length >= 3 { + closing := findClosingFenceMath(input, i, char, length) + builder.WriteString(input[start:closing]) + i = closing + continue + } else if char == '`' { + closing := findClosingInlineCodeMath(input, i, length) + builder.WriteString(input[start:closing]) + i = closing + continue + } else { + builder.WriteString(input[start:i]) + continue + } + } + + if input[i] == '\\' && i+1 < len(input) && (input[i+1] == '$' || input[i+1] == '`' || input[i+1] == '\\') { + builder.WriteByte(input[i]) + builder.WriteByte(input[i+1]) + i += 2 + continue + } + + if input[i] == '$' { + if i+1 < len(input) && input[i+1] == '$' { + start := i + i += 2 + closing := strings.Index(input[i:], "$$") + if closing != -1 { + closing += i + mathText := input[start+2 : closing] + builder.WriteString(context.addMathHTML(mathText, true)) + i = closing + 2 + continue + } else { + builder.WriteString("$$") + continue + } + } + + start := i + i++ + valid, closing := isValidInlineMathSpan(input, start) + if valid { + mathText := input[start+1 : closing] + builder.WriteString(context.addMathHTML(mathText, false)) + i = closing + 1 + continue + } else { + builder.WriteByte('$') + continue + } + } + + builder.WriteByte(input[i]) + i++ + } + return builder.String() +} + +func findClosingFenceMath(input string, start int, char byte, length int) int { + for i := start; i < len(input); i++ { + if input[i] == char { + matchLen := 0 + for i+matchLen < len(input) && input[i+matchLen] == char { + matchLen++ + } + if matchLen >= length { + return i + matchLen + } + i += matchLen - 1 + } + } + return len(input) +} + +func findClosingInlineCodeMath(input string, start int, length int) int { + for i := start; i < len(input); i++ { + if input[i] == '`' { + matchLen := 0 + for i+matchLen < len(input) && input[i+matchLen] == '`' { + matchLen++ + } + if matchLen == length { + return i + matchLen + } + i += matchLen - 1 + } + } + return len(input) +} + +func isValidInlineMathSpan(input string, start int) (bool, int) { + if start+1 >= len(input) { + return false, -1 + } + if input[start+1] == ' ' || input[start+1] == '\t' || input[start+1] == '\n' { + return false, -1 + } + + i := start + 1 + for i < len(input) { + if input[i] == '\\' && i+1 < len(input) && input[i+1] == '$' { + i += 2 + continue + } + if input[i] == '$' { + if input[i-1] != ' ' && input[i-1] != '\t' && input[i-1] != '\n' && i > start+1 { + if !strings.Contains(input[start+1:i], "\n\n") { + return true, i + } + } + return false, -1 + } + i++ + } + return false, -1 +} diff --git a/internal/markdown/markdown.go b/internal/markdown/markdown.go new file mode 100644 index 00000000..1f3fbb77 --- /dev/null +++ b/internal/markdown/markdown.go @@ -0,0 +1,312 @@ +package markdown + +import ( + "bytes" + "fmt" + stdhtml "html" + "strings" + + chromahtml "github.com/alecthomas/chroma/v2/formatters/html" + "github.com/microcosm-cc/bluemonday" + "github.com/yuin/goldmark" + highlighting "github.com/yuin/goldmark-highlighting/v2" + "github.com/yuin/goldmark/ast" + "github.com/yuin/goldmark/extension" + "github.com/yuin/goldmark/parser" + "github.com/yuin/goldmark/renderer" + "github.com/yuin/goldmark/renderer/html" + gmtext "github.com/yuin/goldmark/text" + "github.com/yuin/goldmark/util" +) + +type Heading struct { + Level int + Text string + ID string +} + +type Document struct { + HTML string + Headings []Heading + HasMermaid bool +} + +func ToHTML(text string) (string, error) { + document, err := ToHTMLWithHeadings(text) + if err != nil { + return "", err + } + + return document.HTML, nil +} + +func ToHTMLWithHeadings(input string) (Document, error) { + renderer := newRenderer() + return renderer.render(input, true, 0) +} + +type markdownRenderer struct { + markdown goldmark.Markdown +} + +type sanitizeHTMLRenderer struct { + policy *bluemonday.Policy +} + +func (r *sanitizeHTMLRenderer) RegisterFuncs(reg renderer.NodeRendererFuncRegisterer) { + reg.Register(ast.KindHTMLBlock, r.renderHTMLBlock) + reg.Register(ast.KindRawHTML, r.renderRawHTML) +} + +func (r *sanitizeHTMLRenderer) renderHTMLBlock(w util.BufWriter, source []byte, node ast.Node, entering bool) (ast.WalkStatus, error) { + if !entering { + return ast.WalkContinue, nil + } + var buf bytes.Buffer + for i := 0; i < node.Lines().Len(); i++ { + line := node.Lines().At(i) + buf.Write(line.Value(source)) + } + sanitized := r.policy.SanitizeBytes(buf.Bytes()) + w.Write(sanitized) + return ast.WalkContinue, nil +} + +func (r *sanitizeHTMLRenderer) renderRawHTML(w util.BufWriter, source []byte, node ast.Node, entering bool) (ast.WalkStatus, error) { + if !entering { + return ast.WalkContinue, nil + } + n := node.(*ast.RawHTML) + var buf bytes.Buffer + for i := 0; i < n.Segments.Len(); i++ { + segment := n.Segments.At(i) + buf.Write(segment.Value(source)) + } + sanitized := r.policy.SanitizeBytes(buf.Bytes()) + w.Write(sanitized) + return ast.WalkContinue, nil +} + +type sanitizerExtension struct { + policy *bluemonday.Policy +} + +func (e *sanitizerExtension) Extend(m goldmark.Markdown) { + m.Renderer().AddOptions(renderer.WithNodeRenderers( + util.Prioritized(&sanitizeHTMLRenderer{policy: e.policy}, 0), + )) +} + +func newRenderer() markdownRenderer { + p := bluemonday.UGCPolicy() + p.AllowElements("details", "summary", "kbd", "figure", "figcaption", "picture", "source", "mark") + p.AllowAttrs("class", "id", "width", "height", "align", "colspan", "rowspan", "loading", "style").Globally() + p.AllowAttrs("target").OnElements("a") + p.AllowAttrs("rel").OnElements("a") + p.RequireNoFollowOnLinks(false) + p.AllowDataURIImages() + + return markdownRenderer{ + markdown: goldmark.New( + goldmark.WithExtensions( + extension.Table, + extension.Strikethrough, + extension.Linkify, + extension.TaskList, + extension.Footnote, + ObsidianExtension, + highlighting.NewHighlighting( + highlighting.WithStyle("github"), + highlighting.WithFormatOptions( + chromahtml.WithClasses(true), + chromahtml.WithPreWrapper(codeBlockPreWrapper{}), + ), + highlighting.WithWrapperRenderer(renderCodeBlockWrapper), + ), + &sanitizerExtension{policy: p}, + ), + goldmark.WithParserOptions(parser.WithAutoHeadingID()), + goldmark.WithRendererOptions(html.WithUnsafe()), + ), + } +} + +func (renderer markdownRenderer) render(input string, includeHeadings bool, depth int) (Document, error) { + processed, replacements, hasMermaid, err := renderer.processExtensions(input, depth) + if err != nil { + return Document{}, err + } + + source := []byte(processed) + root := renderer.markdown.Parser().Parse(gmtext.NewReader(source)) + + processedHeadings := processHeadings(root, source) + var headings []Heading + if includeHeadings { + headings = processedHeadings + } + + var output bytes.Buffer + if err := renderer.markdown.Renderer().Render(&output, source, root); err != nil { + return Document{}, fmt.Errorf("转� Markdown: %w", err) + } + + html := applyFigureCaptions(output.String()) + html = restoreHTMLReplacements(html, replacements) + + return Document{ + HTML: html, + Headings: headings, + HasMermaid: hasMermaid, + }, nil +} + +func (renderer markdownRenderer) renderFragment(input string, depth int) (string, error) { + document, err := renderer.render(input, false, depth) + if err != nil { + return "", err + } + + return strings.TrimSpace(document.HTML), nil +} + +func processHeadings(root ast.Node, source []byte) []Heading { + var headings []Heading + usedIDs := make(map[string]int) + + _ = ast.Walk(root, func(node ast.Node, entering bool) (ast.WalkStatus, error) { + if !entering || node.Kind() != ast.KindHeading { + return ast.WalkContinue, nil + } + + heading := node.(*ast.Heading) + if heading.Level > 4 { + return ast.WalkContinue, nil + } + + text := strings.TrimSpace(string(heading.Text(source))) + if text == "" { + return ast.WalkContinue, nil + } + + baseID := generateHeadingID(text, heading.Level) + id := baseID + + count := usedIDs[id] + if count > 0 { + for { + count++ + candidate := fmt.Sprintf("%s-%d", baseID, count) + if usedIDs[candidate] == 0 { + id = candidate + usedIDs[baseID] = count + break + } + } + } + usedIDs[id] = 1 + + heading.SetAttributeString("id", []byte(id)) + + // TOC only includes H2-H4 + if heading.Level >= 2 && heading.Level <= 4 { + headings = append(headings, Heading{ + Level: heading.Level, + Text: text, + ID: id, + }) + } + + return ast.WalkContinue, nil + }) + + return headings +} + +func generateHeadingID(text string, level int) string { + var b strings.Builder + var lastIsSpace bool + + for _, r := range text { + if r < 32 || r == 127 { + continue + } + + if r == ' ' || r == '\t' || r == '\n' || r == '\r' || r == '\u00A0' || r == '\u3000' { + if !lastIsSpace { + b.WriteRune('-') + lastIsSpace = true + } + } else { + b.WriteRune(r) + lastIsSpace = false + } + } + + res := strings.Trim(b.String(), "-") + if res == "" { + res = "section" + } + + prefix := "" + for i := 1; i < level; i++ { + prefix += "#" + } + + return prefix + res +} + +type codeBlockPreWrapper struct{} + +func (codeBlockPreWrapper) Start(code bool, _ string) string { + if code { + return `
    `
    +	}
    +
    +	return `
    `
    +}
    +
    +func (codeBlockPreWrapper) End(code bool) string {
    +	if code {
    +		return `
    ` + } + + return `
    ` +} + +func renderCodeBlockWrapper(w util.BufWriter, context highlighting.CodeBlockContext, entering bool) { + if entering { + if context.Highlighted() { + _, _ = w.WriteString(`
    `) + writeCopyButton(w) + return + } + + _, _ = w.WriteString(`
    `) + writeCopyButton(w) + _, _ = w.WriteString(`
     0 {
    +			escapedLanguage := stdhtml.EscapeString(string(language))
    +			_, _ = w.WriteString(` class="language-`)
    +			_, _ = w.WriteString(escapedLanguage)
    +			_, _ = w.WriteString(`" data-lang="`)
    +			_, _ = w.WriteString(escapedLanguage)
    +			_, _ = w.WriteString(`"`)
    +		}
    +		_, _ = w.WriteString(`>`)
    +		return
    +	}
    +
    +	if context.Highlighted() {
    +		_, _ = w.WriteString(`
    `) + return + } + + _, _ = w.WriteString(`
    `) +} + +func writeCopyButton(w util.BufWriter) { + _, _ = w.WriteString(``) +} diff --git a/internal/markdown/markdown_test.go b/internal/markdown/markdown_test.go new file mode 100644 index 00000000..ed6a8032 --- /dev/null +++ b/internal/markdown/markdown_test.go @@ -0,0 +1,455 @@ +package markdown + +import ( + "fmt" + "os/exec" + "strings" + "testing" +) + +func TestToHTMLWithHeadings(t *testing.T) { + document, err := ToHTMLWithHeadings("## First Heading\n\nText.\n\n### Second Heading\n") + if err != nil { + t.Fatalf("ToHTMLWithHeadings returned error: %v", err) + } + + if len(document.Headings) != 2 { + t.Fatalf("Headings length = %d, want 2", len(document.Headings)) + } + if document.Headings[0].Level != 2 || document.Headings[0].Text != "First Heading" || document.Headings[0].ID == "" { + t.Fatalf("first heading = %#v, want level 2 with text and id", document.Headings[0]) + } + if !strings.Contains(document.HTML, `id="`+document.Headings[0].ID+`"`) { + t.Fatalf("HTML does not contain first heading id %q: %s", document.Headings[0].ID, document.HTML) + } +} + +func TestToHTMLWithGFM(t *testing.T) { + document, err := ToHTMLWithHeadings("~~old~~\n\n- [x] done\n- [ ] todo\n\n| A | B |\n| --- | --- |\n| **strong** | ~~deleted~~ |\n") + if err != nil { + t.Fatalf("ToHTMLWithHeadings returned error: %v", err) + } + + wantParts := []string{ + "old", + ` done`, + ` todo`, + "", + "strong", + "deleted", + } + for _, part := range wantParts { + if !strings.Contains(document.HTML, part) { + t.Fatalf("HTML does not contain %q: %s", part, document.HTML) + } + } +} + +func TestToHTMLWithNestedTaskList(t *testing.T) { + document, err := ToHTMLWithHeadings("- [ ] parent\n - [ ] child\n - [x] grandchild\n") + if err != nil { + t.Fatalf("ToHTMLWithHeadings returned error: %v", err) + } + + wantParts := []string{ + `
  • parent`, + `
      `, + `
    • child`, + `
    • grandchild
    • `, + } + for _, part := range wantParts { + if !strings.Contains(document.HTML, part) { + t.Fatalf("HTML does not contain %q: %s", part, document.HTML) + } + } +} + +func TestToHTMLWithFigureCaptions(t *testing.T) { + document, err := ToHTMLWithHeadings("![A caption](/images/example.webp)\n\n![_Hidden caption](/images/hidden.webp)\n\n![](/images/plain.webp)\n\nText ![inline](/images/inline.webp) image.\n") + if err != nil { + t.Fatalf("ToHTMLWithHeadings returned error: %v", err) + } + + wantParts := []string{ + `
      A caption
      A caption
      `, + `

      Hidden caption

      `, + `

      `, + `

      Text inline image.

      `, + } + for _, part := range wantParts { + if !strings.Contains(document.HTML, part) { + t.Fatalf("HTML does not contain %q: %s", part, document.HTML) + } + } +} + +func TestToHTMLWithGitHubAlerts(t *testing.T) { + document, err := ToHTMLWithHeadings("> [!WARNING]\n> **Careful** with this.\n> - List item\n") + if err != nil { + t.Fatalf("ToHTMLWithHeadings returned error: %v", err) + } + + wantParts := []string{ + `
      `, + `
      warning
      Warning
      `, + `Careful`, + `
    • List item
    • `, + } + for _, part := range wantParts { + if !strings.Contains(document.HTML, part) { + t.Fatalf("HTML does not contain %q: %s", part, document.HTML) + } + } +} + +func TestToHTMLWithContainerDirectives(t *testing.T) { + input := strings.Join([]string{ + ":::note[Custom Title]", + "Body with **markdown**.", + ":::", + "", + ":::fold[More]", + "- hidden item", + ":::", + "", + ":::gallery", + "![One](/images/one.webp)", + "![Two](/images/two.webp)", + ":::", + }, "\n") + + document, err := ToHTMLWithHeadings(input) + if err != nil { + t.Fatalf("ToHTMLWithHeadings returned error: %v", err) + } + + wantParts := []string{ + `
      `, + `
      info
      Custom Title
      `, + `Body with markdown.`, + `
      More`, + `
    • hidden item
    • `, + `
  • \n\n\n\n
    Hello
    \n", + mustContain: []string{"", "", "", "", "
    Hello
    "}, + }, + { + name: "Case 2: Table + remote image", + input: "\n\n\n\n
    \n\"test\"\n
    \n", + mustContain: []string{"\"test\""}, + }, + { + name: "Case 5: Top level script", + input: "\n", + mustNotContain: []string{"\n\n\n\n", + mustContain: []string{"", "
    "}, + mustNotContain: []string{"` + result := Process(input, NewIndex(nil, nil, "", "attachments", "shortest"), "", 1) + html := RestoreHTML("

    DAYBOOK_HTML_IMAGE_0

    ", result.HTML) + + if !strings.Contains(result.Text, `![添加新连接](/notes/assets/add-new-link.png)`) { + t.Fatalf("markdown image path was not rewritten: %s", result.Text) + } + if !strings.Contains(html, `

    网桥

    `) { + t.Fatalf("safe image HTML was not restored: %s", html) + } + if !strings.Contains(result.Text, "") { + t.Fatalf("unrelated HTML should be left for markdown escaping, got: %s", result.Text) + } +} + +func TestResolveAttachment(t *testing.T) { + attachments := []Attachment{ + {Name: "photo.png", RelPath: "photo.png"}, + {Name: "a.jpg", RelPath: "attachments/picture/a.jpg"}, + {Name: "image.png", RelPath: "notes/foo/image.png"}, + {Name: "image.png", RelPath: "notes/b/image.png"}, + {Name: "image.png", RelPath: "notes/a/image.png"}, // Ambiguous name! + {Name: "foo.pdf", RelPath: "media/foo.pdf"}, + } + + tests := []struct { + name string + target string + sourcePath string + attachmentFolderPath string + expectedPath string + }{ + { + name: "app.json missing/empty -> Vault root", + target: "photo.png", + sourcePath: "notes/article.md", + attachmentFolderPath: "", + expectedPath: "photo.png", + }, + { + name: "Fixed attachment directory", + target: "picture/a.jpg", + sourcePath: "notes/article.md", + attachmentFolderPath: "attachments", + expectedPath: "attachments/picture/a.jpg", + }, + { + name: "Same folder as current file", + target: "image.png", + sourcePath: "notes/foo/article.md", + attachmentFolderPath: "./", + expectedPath: "notes/foo/image.png", + }, + { + name: "Explicit vault path preferred", + target: "media/foo.pdf", + sourcePath: "notes/article.md", + attachmentFolderPath: "attachments", + expectedPath: "media/foo.pdf", + }, + { + name: "Embedded note context", + target: "image.png", + sourcePath: "notes/b/embedded.md", + attachmentFolderPath: "./", + expectedPath: "notes/b/image.png", + }, + } + + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + idx := NewIndex(nil, attachments, "/", tc.attachmentFolderPath, "shortest") + att, ok, _ := idx.ResolveAttachment(tc.target, tc.sourcePath) + if !ok { + t.Fatalf("Failed to resolve %q", tc.target) + } + if att.RelPath != tc.expectedPath { + t.Errorf("Expected %q, got %q", tc.expectedPath, att.RelPath) + } + }) + } + + // Test ambiguity + t.Run("duplicate basename", func(t *testing.T) { + idx := NewIndex(nil, attachments, "/", "./", "shortest") + _, ok, _ := idx.ResolveAttachment("image.png", "other/article.md") // no context match, fallback to basename + if ok { + t.Errorf("Expected failure due to ambiguous basename, got success") + } + }) +} diff --git a/internal/obsidian/resolve.go b/internal/obsidian/resolve.go new file mode 100644 index 00000000..2b77d299 --- /dev/null +++ b/internal/obsidian/resolve.go @@ -0,0 +1,170 @@ +package obsidian + +import ( + "path/filepath" + "sort" + "strings" +) + +// ResolveNote resolves a note reference according to Obsidian rules. +func (idx Index) ResolveNote(target string, sourcePath string) (Target, bool, []string) { + // Normalize target + targetClean := filepath.ToSlash(filepath.Clean(target)) + targetClean = strings.TrimPrefix(targetClean, "/") + + // A section-qualified reference is always vault-relative, regardless of the + // author's preferred Obsidian link format. Never let a same-named memo or a + // nested notes/ directory shadow an explicit [[notes/foo]] reference. + for _, section := range []string{"notes", "memos"} { + if !strings.HasPrefix(targetClean, section+"/") { + continue + } + qualifiedSlug := normalize(withoutMarkdownExtension(strings.TrimPrefix(targetClean, section+"/"))) + var matches []Target + for _, t := range idx.allTargets { + if t.Section != "" { + if t.Section == section && normalize(t.Slug) == qualifiedSlug { + matches = append(matches, t) + } + } else if hasPathSuffix(normalize(withoutMarkdownExtension(filepath.ToSlash(t.SourcePath))), normalize(withoutMarkdownExtension(targetClean))) { + matches = append(matches, t) + } + } + return resolveCandidates(preferExactReference(matches, targetClean)) + } + + // Also we should trim .md suffix if present for robust matching + targetBase := normalize(withoutMarkdownExtension(filepath.Base(targetClean))) + + // Pre-filter potential targets + var potentials []Target + for _, t := range idx.allTargets { + if normalize(withoutMarkdownExtension(filepath.Base(t.SourcePath))) == targetBase { + potentials = append(potentials, t) + } + } + potentials = preferExactReference(potentials, filepath.Base(targetClean)) + + if len(potentials) == 0 { + return Target{}, false, nil + } + + matchingPath := func(expectedPath string) []Target { + var matches []Target + for _, t := range potentials { + if normalize(withoutMarkdownExtension(t.SourcePath)) == normalize(withoutMarkdownExtension(expectedPath)) { + matches = append(matches, t) + } + } + return matches + } + + // 1. NewLinkFormat strategy + switch idx.newLinkFormat { + case "absolute": + if matches := matchingPath(targetClean); len(matches) > 0 { + return resolveCandidates(matches) + } + case "relative": + if sourcePath != "" { + noteDir := filepath.ToSlash(filepath.Dir(sourcePath)) + expected := filepath.ToSlash(filepath.Clean(filepath.Join(noteDir, targetClean))) + if matches := matchingPath(expected); len(matches) > 0 { + return resolveCandidates(matches) + } + } + case "shortest": + // Find all targets that have targetClean as a suffix of their SourcePath + var suffixMatches []Target + for _, t := range potentials { + if hasPathSuffix(normalize(withoutMarkdownExtension(t.SourcePath)), normalize(withoutMarkdownExtension(targetClean))) { + suffixMatches = append(suffixMatches, t) + } + } + if len(suffixMatches) > 0 { + return resolveCandidates(suffixMatches) + } + } + + // 2. Fallbacks if preferred strategy fails + // Fallback to absolute + if idx.newLinkFormat != "absolute" { + if matches := matchingPath(targetClean); len(matches) > 0 { + return resolveCandidates(matches) + } + } + + // Fallback to relative + if idx.newLinkFormat != "relative" && sourcePath != "" { + noteDir := filepath.ToSlash(filepath.Dir(sourcePath)) + expected := filepath.ToSlash(filepath.Clean(filepath.Join(noteDir, targetClean))) + if matches := matchingPath(expected); len(matches) > 0 { + return resolveCandidates(matches) + } + } + + // Fallback to shortest suffix match + if idx.newLinkFormat != "shortest" { + var suffixMatches []Target + for _, t := range potentials { + if hasPathSuffix(normalize(withoutMarkdownExtension(t.SourcePath)), normalize(withoutMarkdownExtension(targetClean))) { + suffixMatches = append(suffixMatches, t) + } + } + if len(suffixMatches) > 0 { + return resolveCandidates(suffixMatches) + } + } + + return Target{}, false, nil +} + +// Keep explicit filename spelling meaningful on case-sensitive filesystems. +// A vault may contain shared.md and shared.MD for two language versions; their +// extensionless reference is ambiguous, but each complete path is precise. +func preferExactReference(targets []Target, reference string) []Target { + withExtension := strings.EqualFold(filepath.Ext(reference), ".md") + var exact []Target + for _, target := range targets { + source := filepath.ToSlash(target.SourcePath) + if !withExtension { + source = withoutMarkdownExtension(source) + } + if hasPathSuffix(source, reference) { + exact = append(exact, target) + } + } + if len(exact) > 0 { + return exact + } + return targets +} + +func withoutMarkdownExtension(value string) string { + if ext := filepath.Ext(value); strings.EqualFold(ext, ".md") { + return strings.TrimSuffix(value, ext) + } + return value +} + +func resolveCandidates(matches []Target) (Target, bool, []string) { + if len(matches) == 1 { + return matches[0], true, nil + } + if len(matches) == 0 { + return Target{}, false, nil + } + candidates := make([]string, len(matches)) + for i, target := range matches { + candidates[i] = target.SourcePath + } + sort.Strings(candidates) + return Target{}, false, candidates +} + +func hasPathSuffix(path, suffix string) bool { + if path == suffix { + return true + } + return strings.HasSuffix(path, "/"+suffix) +} diff --git a/internal/obsidian/resolvenote_test.go b/internal/obsidian/resolvenote_test.go new file mode 100644 index 00000000..b24373aa --- /dev/null +++ b/internal/obsidian/resolvenote_test.go @@ -0,0 +1,118 @@ +package obsidian + +import ( + "path/filepath" + "testing" +) + +func TestResolveNote(t *testing.T) { + targets := []Target{ + {SourcePath: "notes/examples/foo.md", Slug: "examples/foo"}, + {SourcePath: "notes/examples/bar.md", Slug: "examples/bar"}, + {SourcePath: "notes/architecture/foo.md", Slug: "architecture/foo"}, + {SourcePath: "notes/index.md", Slug: "index"}, + } + + tests := []struct { + name string + newLinkFormat string + target string + sourcePath string + expectedPath string + expectOk bool + expectCandidates int + }{ + // Shortest - Missing newLinkFormat defaults shortest + {"missing format defaults shortest", "", "bar", "notes/index.md", "notes/examples/bar.md", true, 0}, + + // Shortest + {"shortest: unique basename", "shortest", "bar", "notes/index.md", "notes/examples/bar.md", true, 0}, + {"shortest: nested unique suffix", "shortest", "examples/bar", "notes/index.md", "notes/examples/bar.md", true, 0}, + {"shortest: duplicate basename -> ambiguous", "shortest", "foo", "notes/index.md", "", false, 2}, + {"shortest: path sufficient to disambiguate", "shortest", "architecture/foo", "notes/index.md", "notes/architecture/foo.md", true, 0}, + + // Relative + {"relative: ../target", "relative", "../examples/bar", "notes/architecture/foo.md", "notes/examples/bar.md", true, 0}, + {"relative: ./target", "relative", "./bar", "notes/examples/foo.md", "notes/examples/bar.md", true, 0}, + {"relative: sub/target", "relative", "architecture/foo", "notes/index.md", "notes/architecture/foo.md", true, 0}, + {"relative: nested source dir", "relative", "../index", "notes/examples/foo.md", "notes/index.md", true, 0}, + + // Absolute + {"absolute: notes/foo", "absolute", "notes/architecture/foo", "notes/examples/bar.md", "notes/architecture/foo.md", true, 0}, + {"absolute: notes/examples/foo", "absolute", "notes/examples/foo", "notes/index.md", "notes/examples/foo.md", true, 0}, + + // Optional .md & slashes + {"optional .md", "shortest", "bar.md", "notes/index.md", "notes/examples/bar.md", true, 0}, + {"optional leading /", "absolute", "/notes/examples/bar", "notes/index.md", "notes/examples/bar.md", true, 0}, + + // Mixed-format compatibility + {"mixed-format: configured relative but legacy shortest resolves", "relative", "bar", "notes/index.md", "notes/examples/bar.md", true, 0}, + {"mixed-format: configured shortest but explicit relative resolves", "shortest", "../examples/bar", "notes/architecture/foo.md", "notes/examples/bar.md", true, 0}, + } + + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + idx := NewIndex(targets, nil, "/", "attachments", tc.newLinkFormat) + target, ok, candidates := idx.ResolveNote(tc.target, tc.sourcePath) + if ok != tc.expectOk { + t.Fatalf("expected ok=%v, got ok=%v", tc.expectOk, ok) + } + if ok && filepath.ToSlash(target.SourcePath) != filepath.ToSlash(tc.expectedPath) { + t.Fatalf("expected path %q, got %q", tc.expectedPath, target.SourcePath) + } + if !ok && len(candidates) != tc.expectCandidates { + t.Fatalf("expected %d candidates, got %d", tc.expectCandidates, len(candidates)) + } + }) + } +} + +func TestResolveNoteAcrossSections(t *testing.T) { + targets := []Target{ + {Section: "notes", Slug: "foo", SourcePath: "/vault/notes/foo.md", URL: "/notes/foo/"}, + {Section: "memos", Slug: "foo", SourcePath: "/vault/memos/foo.md", URL: "/memos/foo/"}, + {Section: "memos", Slug: "notes/foo", SourcePath: "/vault/memos/notes/foo.md", URL: "/memos/notes/foo/"}, + } + for _, format := range []string{"shortest", "absolute", "relative"} { + t.Run(format, func(t *testing.T) { + idx := NewIndex(targets, nil, "/", "attachments", format) + for reference, expected := range map[string]string{"notes/foo": "/notes/foo/", "memos/foo": "/memos/foo/", "memos/notes/foo.md": "/memos/notes/foo/"} { + target, ok, candidates := idx.ResolveNote(reference, "/vault/memos/source.md") + if !ok || target.URL != expected || len(candidates) != 0 { + t.Fatalf("%s resolved to %+v, ok = %v, candidates = %v", reference, target, ok, candidates) + } + } + }) + } + idx := NewIndex(targets, nil, "/", "attachments", "shortest") + if _, ok, candidates := idx.ResolveNote("foo", "/vault/notes/source.md"); ok || len(candidates) != 3 { + t.Fatalf("bare duplicate name must be ambiguous: ok = %v, candidates = %v", ok, candidates) + } +} + +func TestResolveNoteBilingualSharedSlugUsesExplicitFilename(t *testing.T) { + targets := []Target{ + {Section: "memos", Slug: "shared", SourcePath: "/vault/memos/shared.md", URL: "/memos/shared/"}, + {Section: "memos", Slug: "shared", SourcePath: "/vault/memos/shared.MD", URL: "/en_US/memos/shared/"}, + } + for _, format := range []string{"shortest", "absolute", "relative"} { + t.Run(format, func(t *testing.T) { + idx := NewIndex(targets, nil, "/", "attachments", format) + for reference, expected := range map[string]string{ + "memos/shared.md": "/memos/shared/", "memos/shared.MD": "/en_US/memos/shared/", + "../memos/shared.MD": "/en_US/memos/shared/", "shared.MD": "/en_US/memos/shared/", + } { + target, ok, candidates := idx.ResolveNote(reference, "/vault/notes/source.md") + if !ok || target.URL != expected || len(candidates) != 0 { + t.Fatalf("%s resolved to %+v, ok = %v, candidates = %v", reference, target, ok, candidates) + } + } + if _, ok, candidates := idx.ResolveNote("memos/shared", "/vault/notes/source.md"); ok || len(candidates) != 2 { + t.Fatalf("shared slug should report both language files, got ok=%v, candidates=%v", ok, candidates) + } + if _, ok, candidates := idx.ResolveNote("shared", "/vault/memos/source.md"); ok || len(candidates) != 2 { + t.Fatalf("relative shared slug should report both language files, got ok=%v, candidates=%v", ok, candidates) + } + }) + } +} diff --git a/internal/og/cards.go b/internal/og/cards.go new file mode 100644 index 00000000..01dc20e1 --- /dev/null +++ b/internal/og/cards.go @@ -0,0 +1,266 @@ +package og + +import ( + "bytes" + "crypto/sha256" + "fmt" + "html/template" + "net/url" + "strings" + + "github.com/StatIndet/daybook/internal/config" + "github.com/StatIndet/daybook/internal/content" + "github.com/StatIndet/daybook/internal/embedded" + "github.com/rivo/uniseg" + "github.com/yuin/goldmark" + "github.com/yuin/goldmark/extension" + goldmarkhtml "github.com/yuin/goldmark/renderer/html" + "golang.org/x/net/html" +) + +// Card is a standalone, script-free HTML document and its public PNG path. +// PageURL supplies the base URL for resolving relative content images. +type Card struct { + Section string `json:"section"` + PageURL string `json:"pageURL"` + OutputPath string `json:"outputPath"` + HTML string `json:"html"` + Description string `json:"description"` +} + +type cardImage struct { + Source string + Alt string + More int +} + +type cardData struct { + Lang, SiteName, Title, Summary, Body string + Author, Initial, Avatar string + Date, Updated, ReadingTime string + Tags []string + Images []cardImage +} + +// ImagePath uses only ASCII and a digest of the section and page route. The +// route includes the language prefix, so translations cannot overwrite one +// another, even when filenames contain non-ASCII or filesystem special chars. +func ImagePath(section, pageURL string) string { + if section != "memos" { + section = "notes" + } + digest := sha256.Sum256([]byte(section + "\x00" + pageURL)) + return fmt.Sprintf("/generated/og/%s/%x.png", section, digest[:16]) +} + +// NewCard prepares the content separately from the site's interactive page +// templates. renderedHTML must be the rendered article body, before memo feed +// truncation, so hidden overflow pictures are still counted correctly. +func NewCard(note content.Note, renderedHTML string, cfg config.Config, tags []string) (Card, error) { + section := note.Section + if section == "" { + section = "notes" + } + if section != "notes" && section != "memos" { + return Card{}, fmt.Errorf("OG card %s: unsupported section %q", note.URL, section) + } + body, images, err := extractContent(renderedHTML) + if err != nil { + return Card{}, fmt.Errorf("OG card %s: parse body: %w", note.URL, err) + } + text := strings.Join(strings.Fields(body), " ") + if section == "notes" && strings.TrimSpace(note.Summary) != "" { + // Render Markdown to an intermediate document, then collect text only. + // Raw HTML is never inserted into the screenshot document. + var summary bytes.Buffer + md := goldmark.New(goldmark.WithExtensions(extension.GFM), goldmark.WithRendererOptions(goldmarkhtml.WithUnsafe())) + if err := md.Convert([]byte(note.Summary), &summary); err != nil { + return Card{}, fmt.Errorf("OG card %s: parse summary: %w", note.URL, err) + } + cleaned, _, err := extractContent(summary.String()) + if err != nil { + return Card{}, fmt.Errorf("OG card %s: clean summary: %w", note.URL, err) + } + if cleaned != "" { + text = strings.Join(strings.Fields(cleaned), " ") + } + } + + author := strings.TrimSpace(cfg.Profile.Author.Name) + if (note.Lang == "en_US" || author == "") && strings.TrimSpace(cfg.Profile.Author.NameEn) != "" { + author = strings.TrimSpace(cfg.Profile.Author.NameEn) + } + if author == "" { + author = cfg.GetSiteName(note.Lang) + } + initial := uniseg.NewGraphemes(author) + initial.Next() + data := cardData{ + Lang: "zh-CN", SiteName: truncateText(cfg.GetSiteName(note.Lang), 48), + Title: truncateText(note.Title, 130), Summary: truncateText(text, 280), + Body: truncateText(body, 360), Author: truncateText(author, 48), + Initial: initial.Str(), Avatar: safeImageSource(cfg.Profile.Author.Avatar), + Date: displayDate(note.Date), Updated: displayDate(note.Updated), Tags: displayTags(tags), + } + minutes := note.ReadingMinutes + if minutes < 1 { + minutes = 1 + } + data.ReadingTime = fmt.Sprintf("%d min read", minutes) + if note.Lang == "en_US" { + data.Lang = "en-US" + } + templateName := "note.html" + if section == "memos" { + templateName = "memo.html" + data.Images = images + if len(images) > 0 { + data.Body = truncateText(body, 160) + } + } + tmpl, err := template.ParseFS(embedded.FS, "templates/og/"+templateName) + if err != nil { + return Card{}, fmt.Errorf("OG card %s: load template: %w", note.URL, err) + } + var output bytes.Buffer + if err := tmpl.ExecuteTemplate(&output, templateName, data); err != nil { + return Card{}, fmt.Errorf("OG card %s: render template: %w", note.URL, err) + } + return Card{ + Section: section, PageURL: (&url.URL{Path: note.URL}).EscapedPath(), OutputPath: ImagePath(section, note.URL), + HTML: output.String(), Description: truncateText(text, 240), + }, nil +} + +func displayTags(tags []string) []string { + result := make([]string, 0, 3) + for _, tag := range tags { + if tag = strings.Join(strings.Fields(tag), " "); tag != "" { + result = append(result, truncateText(tag, 24)) + if len(result) == 3 { + break + } + } + } + return result +} + +func displayDate(value string) string { + date, err := content.ParseDate(value) + if err != nil { + return "" + } + return date.Format("2006-01-02") +} + +// Grapheme boundaries preserve Chinese, combining marks, and emoji sequences. +func truncateText(text string, limit int) string { + text = strings.TrimSpace(text) + graphemes := uniseg.NewGraphemes(text) + end := 0 + for i := 0; graphemes.Next(); i++ { + if i == limit { + return strings.TrimSpace(text[:end]) + "…" + } + _, end = graphemes.Positions() + } + return text +} + +func safeImageSource(source string) string { + source = strings.TrimSpace(source) + parsed, err := url.Parse(source) + if err != nil || source == "" || (parsed.Scheme != "" && parsed.Scheme != "http" && parsed.Scheme != "https") { + return "" + } + return source +} + +func extractContent(source string) (string, []cardImage, error) { + root, err := html.Parse(strings.NewReader(source)) + if err != nil { + return "", nil, err + } + var text strings.Builder + var images []cardImage + imageCount := 0 + var walk func(*html.Node) + walk = func(node *html.Node) { + if node.Type == html.ElementNode { + if ignoreElement(node) { + return + } + if node.Data == "img" { + if source := safeImageSource(attribute(node, "src")); source != "" { + imageCount++ + if len(images) < 4 { + images = append(images, cardImage{Source: source, Alt: attribute(node, "alt")}) + } + } + return + } + if blockElement(node.Data) { + text.WriteByte('\n') + } + } + if node.Type == html.TextNode { + text.WriteString(node.Data) + } + for child := node.FirstChild; child != nil; child = child.NextSibling { + walk(child) + } + if node.Type == html.ElementNode && blockElement(node.Data) { + text.WriteByte('\n') + } + } + walk(root) + if imageCount > 4 { + images[3].More = imageCount - 4 + } + var lines []string + for _, line := range strings.Split(text.String(), "\n") { + if line = strings.Join(strings.Fields(line), " "); line != "" { + lines = append(lines, line) + } + } + return strings.Join(lines, "\n"), images, nil +} + +func attribute(node *html.Node, key string) string { + for _, attr := range node.Attr { + if attr.Key == key { + return attr.Val + } + } + return "" +} + +func ignoreElement(node *html.Node) bool { + switch node.Data { + case "head", "script", "style", "template", "noscript", "button", "input", "select", "textarea", "svg", "iframe", "audio", "video": + return true + } + if attribute(node, "aria-hidden") == "true" { + return true + } + for _, attr := range node.Attr { + if attr.Key == "hidden" { + return true + } + } + for _, class := range strings.Fields(attribute(node, "class")) { + switch class { + case "material-symbol", "memo-actions", "article-actions", "memo-more-photos", "heading-anchor", "code-language", "code-copy-button", "mermaid", "mermaid-block", "mermaid-source": + return true + } + } + return false +} + +func blockElement(tag string) bool { + switch tag { + case "p", "div", "section", "article", "header", "footer", "blockquote", "h1", "h2", "h3", "h4", "h5", "h6", "li", "pre", "br", "hr", "tr", "td", "th", "figcaption": + return true + } + return false +} diff --git a/internal/og/cards_test.go b/internal/og/cards_test.go new file mode 100644 index 00000000..65fd52f4 --- /dev/null +++ b/internal/og/cards_test.go @@ -0,0 +1,294 @@ +package og + +import ( + "fmt" + "net/url" + "regexp" + "strings" + "testing" + "unicode/utf8" + + "github.com/StatIndet/daybook/internal/config" + "github.com/StatIndet/daybook/internal/content" + "github.com/rivo/uniseg" + "golang.org/x/net/html" +) + +func testConfig() config.Config { + return config.Config{Profile: config.ProfileConfig{Author: config.AuthorConfig{ + Name: "�帙", NameEn: "Stat Indet", LogoText: "Daybook", Avatar: "/attachments/窗%20边.png", + }}} +} + +func TestNoteCardSummaryAndStaticMetadata(t *testing.T) { + note := content.Note{ + Title: "中文标题 <��>", Section: "notes", URL: "/notes/中文标题/", Lang: "zh_CN", + Summary: "A **short** summary. ~~Revised~~.", Date: "2026-10-04", Updated: "2026-10-05", ReadingMinutes: 3, + } + card, err := NewCard(note, "

    Body fallback.

    ", testConfig(), []string{"Go", "中文", "HTML", "excluded"}) + if err != nil { + t.Fatal(err) + } + if card.Description != "A short summary. Revised." { + t.Fatalf("description = %q", card.Description) + } + for _, expected := range []string{"中文标题 <��>", "3 min read", "2026-10-04", "Updated 2026-10-05", "#Go", "#中文", "#HTML"} { + if !strings.Contains(card.HTML, expected) { + t.Errorf("card missing %q", expected) + } + } + for _, excluded := range []string{"excluded", "Body fallback", "", "中文 and English

    One & two.

    fmt.Println()
    icon` + card, err := NewCard(note, body, testConfig(), nil) + if err != nil { + t.Fatal(err) + } + if card.Description != "中文 and English One & two. fmt.Println()" { + t.Fatalf("description = %q", card.Description) + } + if strings.Contains(card.HTML, ``) || strings.Contains(card.HTML, `
    `) { + t.Fatal("empty update and tags should not render") + } + if !strings.Contains(card.HTML, "1 min read") { + t.Fatal("missing reading time") + } +} + +func TestNoteCardBrandAndEnglishMetadataInBothLanguages(t *testing.T) { + for _, lang := range []string{"zh_CN", "en_US"} { + for _, avatar := range []string{"/attachments/avatar.png", ""} { + t.Run(lang+"/"+avatar, func(t *testing.T) { + cfg := testConfig() + cfg.Profile.Author.Avatar = avatar + card, err := NewCard(content.Note{Lang: lang, Date: "2026-06-25", Updated: "2026-08-23"}, "

    摘� Summary.

    ", cfg, nil) + if err != nil { + t.Fatal(err) + } + root, err := html.Parse(strings.NewReader(card.HTML)) + if err != nil { + t.Fatal(err) + } + if !strings.Contains(card.HTML, ">1 min read") || classText(root, "updated") != "Updated 2026-08-23" { + t.Fatal("OG reading time and update label must remain English in both languages") + } + if classText(root, "site-name") != cfg.GetSiteName(lang) { + t.Fatal("brand must retain the configured site name") + } + if avatar != "" { + if !strings.Contains(card.HTML, ``) { + t.Fatal("note brand must use the existing author avatar") + } + } else { + initial := "�" + if lang == "en_US" { + initial = "S" + } + if classText(root, "brand-avatar brand-avatar-fallback") != initial || strings.Contains(card.HTML, `Content.

    ", testConfig(), nil) + if err != nil { + t.Fatal(err) + } + if !strings.Contains(card.HTML, `/vendor/fonts/cormorant-garamond/cormorant-garamond-latin-600-italic.woff2`) || !strings.Contains(card.HTML, `font-family: "Cormorant Garamond Meta"`) || !strings.Contains(card.HTML, `font-synthesis: none`) { + t.Errorf("%s must load the real metadata italic face without synthesis", section) + } + } +} + +func TestMemoCardShowsPostBodyAndImageOverflow(t *testing.T) { + note := content.Note{ + Title: "filename-must-not-be-heading", Section: "memos", URL: "/en_US/memos/中文/", Lang: "en_US", + Date: "2026-10-04", Summary: "Ignored article summary", + } + body := `

    A memo, directly from the post.

    Likes Views Comments RSS
    ` + card, err := NewCard(note, body, testConfig(), []string{"�记"}) + if err != nil { + t.Fatal(err) + } + if card.Description != "A memo, directly from the post." { + t.Fatalf("description = %q", card.Description) + } + decodedHTML := regexp.MustCompile(`src="[^"]*"`).ReplaceAllStringFunc(card.HTML, func(source string) string { + decoded, err := url.PathUnescape(source) + if err != nil { + t.Fatal(err) + } + return decoded + }) + for _, expected := range []string{`class="images images-4"`, `class="more">+2`, "Stat Indet", "/attachments/窗 边.png", "../attachments/窗 边.png", "#�记"} { + if !strings.Contains(decodedHTML, expected) { + t.Errorf("memo missing %q", expected) + } + } + for _, excluded := range []string{note.Title, note.Summary, "`); got != 4 { + t.Fatalf("image cells = %d, want 4", got) + } +} + +func TestMemoImageLayoutsAndEmptyAvatar(t *testing.T) { + for count := 0; count <= 4; count++ { + t.Run(fmt.Sprintf("%d pictures", count), func(t *testing.T) { + cfg := testConfig() + cfg.Profile.Author.Avatar = "" + body := "

    没有摘�的帖�。

    " + strings.Repeat(``, count) + card, err := NewCard(content.Note{Section: "memos", URL: "/memos/�记/"}, body, cfg, nil) + if err != nil { + t.Fatal(err) + } + if !strings.Contains(card.HTML, `�`) { + t.Error("empty avatar should use author's first grapheme") + } + if count == 0 && strings.Contains(card.HTML, `
    0 && !strings.Contains(card.HTML, fmt.Sprintf(`class="images images-%d"`, count)) { + t.Errorf("missing %d-image layout", count) + } + }) + } +} + +func TestLongCardTextIsBoundedWithoutBreakingGraphemes(t *testing.T) { + longText := strings.Repeat("中文e\u0301👩�💻", 180) + for _, section := range []string{"notes", "memos"} { + t.Run(section, func(t *testing.T) { + card, err := NewCard(content.Note{Title: longText, Summary: longText, Section: section, URL: "/" + section + "/long/"}, "

    "+longText+"

    ", testConfig(), []string{longText}) + if err != nil { + t.Fatal(err) + } + if !utf8.ValidString(card.HTML) || !strings.HasSuffix(card.Description, "…") || uniseg.GraphemeClusterCount(card.Description) != 241 { + t.Fatalf("invalid or unbounded description: %q", card.Description) + } + root, err := html.Parse(strings.NewReader(card.HTML)) + if err != nil { + t.Fatal(err) + } + class := "summary" + limit := 281 + if section == "memos" { + class, limit = "body", 361 + } + text := classText(root, class) + if uniseg.GraphemeClusterCount(text) != limit || !strings.HasSuffix(text, "…") { + t.Fatalf("%s not bounded: %d graphemes", class, uniseg.GraphemeClusterCount(text)) + } + }) + } + if got := truncateText("Ae\u0301👩�💻中B", 3); got != "Ae\u0301👩�💻…" { + t.Fatalf("grapheme truncation = %q", got) + } +} + +func TestImagePathsAreStableSafeAndUnique(t *testing.T) { + paths := map[string]bool{} + for _, route := range []string{"/notes/中文/", "/en_US/notes/中文/", "/memos/中文/", "/notes/a?b#c/", "/notes/a_b_c/"} { + section := "notes" + if strings.HasPrefix(route, "/memos/") { + section = "memos" + } + got := ImagePath(section, route) + if got != ImagePath(section, route) || !regexp.MustCompile(`^/generated/og/(notes|memos)/[a-f0-9]{32}\.png$`).MatchString(got) { + t.Fatalf("unstable or unsafe path: %s", got) + } + if paths[got] { + t.Fatalf("duplicate path %s", got) + } + paths[got] = true + } + if ImagePath("notes", "/same/") == ImagePath("memos", "/same/") { + t.Fatal("sections must have independent paths") + } +} + +func TestNewCardURLFilenameCharacters(t *testing.T) { + for _, filename := range []string{"C# basics", "100% done", "question?", "中文标题"} { + t.Run(filename, func(t *testing.T) { + note := content.Note{Section: "notes", URL: "/notes/" + filename + "/"} + card, err := NewCard(note, "

    A valid filename.

    ", testConfig(), nil) + if err != nil { + t.Fatal(err) + } + if err := validateCard(card); err != nil { + t.Fatalf("filename rejected by renderer: %v", err) + } + decoded, err := url.PathUnescape(card.PageURL) + if err != nil || decoded != note.URL { + t.Fatalf("page URL changed filename: %q (%v)", decoded, err) + } + if card.OutputPath != ImagePath(note.Section, note.URL) { + t.Fatal("page URL escaping should not change stable output hash") + } + }) + } +} + +func TestExtractContentOmitsUnsafeImagesAndInteractiveText(t *testing.T) { + body, images, err := extractContent(`

    Visible link.

    ">+99 View photos
    graph TD; A-->B
    `) + if err != nil { + t.Fatal(err) + } + if body != "Visible link." || len(images) != 1 || images[0].Source != "/photo.png" { + t.Fatalf("unexpected extraction: %q %+v", body, images) + } +} + +func TestCardDatesUseCalendarDate(t *testing.T) { + note := content.Note{Date: "2026-10-04T20:30:00+08:00", Updated: "2026-10-05T10:00:00+08:00"} + card, err := NewCard(note, "

    Post.

    ", testConfig(), nil) + if err != nil { + t.Fatal(err) + } + if !strings.Contains(card.HTML, "2026-10-04") || !strings.Contains(card.HTML, "2026-10-05") || strings.Contains(card.HTML, "20:30") || strings.Contains(card.HTML, "10:00") { + t.Fatal("card metadata should use calendar dates") + } + if got := displayDate("invalid"); got != "" { + t.Fatalf("invalid optional update = %q", got) + } +} + +func classText(node *html.Node, class string) string { + if node.Type == html.ElementNode && attribute(node, "class") == class { + var text strings.Builder + for child := node.FirstChild; child != nil; child = child.NextSibling { + if child.Type == html.TextNode { + text.WriteString(child.Data) + } + } + return text.String() + } + for child := node.FirstChild; child != nil; child = child.NextSibling { + if text := classText(child, class); text != "" { + return text + } + } + return "" +} diff --git a/internal/og/runtime.go b/internal/og/runtime.go new file mode 100644 index 00000000..377a08b2 --- /dev/null +++ b/internal/og/runtime.go @@ -0,0 +1,367 @@ +package og + +import ( + "bytes" + "context" + "encoding/json" + "fmt" + "image/png" + "io" + "net/url" + "os" + "os/exec" + "path" + "path/filepath" + "regexp" + "strconv" + "strings" + "time" + + "github.com/StatIndet/daybook/internal/embedded" +) + +// PlaywrightVersion is kept in sync with package-lock.json. A dedicated cache +// lets a standalone Daybook binary render cards outside its source checkout. +const PlaywrightVersion = "1.63.0" + +const playwrightModuleEnv = "DAYBOOK_OG_PLAYWRIGHT_MODULE" + +var outputFilename = regexp.MustCompile(`^[a-zA-Z0-9][a-zA-Z0-9_-]*\.png$`) + +type renderManifest struct { + PublicDir string `json:"publicDir"` + Module string `json:"module"` + Cards []Card `json:"cards"` + LibraryPath string `json:"libraryPath,omitempty"` + FontConfig string `json:"fontConfig,omitempty"` +} + +// Progress is emitted by the renderer after it is ready, before each card, and +// after each successful write/validation. Completed never counts started work. +type Progress struct { + Phase string + Completed, Total int + PageURL string +} + +// Generate renders one batch with a single local Chromium instance. It never +// installs dependencies or starts a server; setup is an explicit CLI command. +func Generate(publicDir string, cards []Card, onProgress ...func(Progress)) error { + if len(cards) == 0 { + return nil + } + seen := make(map[string]bool, len(cards)) + for _, card := range cards { + if err := validateCard(card); err != nil { + return fmt.Errorf("OG %q: %w", card.PageURL, err) + } + if seen[card.OutputPath] { + return fmt.Errorf("OG %q: duplicate output path %q", card.PageURL, card.OutputPath) + } + seen[card.OutputPath] = true + } + + node, err := nodeExecutable() + if err != nil { + return err + } + module, err := playwrightModule() + if err != nil { + return err + } + publicDir, err = filepath.Abs(publicDir) + if err != nil { + return fmt.Errorf("OG output directory: %w", err) + } + publicDir, err = filepath.EvalSymlinks(publicDir) + if err != nil { + return fmt.Errorf("OG output directory: %w", err) + } + + workDir, err := os.MkdirTemp("", "daybook-og-") + if err != nil { + return fmt.Errorf("prepare OG renderer: %w", err) + } + defer os.RemoveAll(workDir) + runner, err := embedded.FS.ReadFile("og/render.cjs") + if err != nil { + return fmt.Errorf("load embedded OG renderer: %w", err) + } + runnerPath := filepath.Join(workDir, "render.cjs") + if err := os.WriteFile(runnerPath, runner, 0600); err != nil { + return fmt.Errorf("write OG renderer: %w", err) + } + manifest, err := json.Marshal(renderManifest{PublicDir: publicDir, Module: module, Cards: cards, LibraryPath: userLibraryPath(), FontConfig: userFontConfig()}) + if err != nil { + return fmt.Errorf("prepare OG cards: %w", err) + } + manifestPath := filepath.Join(workDir, "cards.json") + if err := os.WriteFile(manifestPath, manifest, 0600); err != nil { + return fmt.Errorf("write OG cards: %w", err) + } + + // The renderer also enforces per-card deadlines, including remote assets. + ctx, cancel := context.WithTimeout(context.Background(), time.Minute+time.Duration(len(cards))*45*time.Second) + defer cancel() + cmd := exec.CommandContext(ctx, node, runnerPath, manifestPath) + var diagnostics bytes.Buffer + cmd.Stderr = &diagnostics + report := func(phase string, completed int, pageURL string) { + for _, callback := range onProgress { + callback(Progress{Phase: phase, Completed: completed, Total: len(cards), PageURL: pageURL}) + } + } + events := &renderEvents{cards: cards, report: report} + cmd.Stdout = events + cmd.WaitDelay = 3 * time.Second + if err := cmd.Run(); err != nil { + if ctx.Err() != nil { + return fmt.Errorf("OG rendering exceeded its time limit: %w", ctx.Err()) + } + return fmt.Errorf("OG rendering failed: %w\n%s", err, strings.TrimSpace(diagnostics.String())) + } + if !events.ready || events.completed != len(cards) || len(events.pending) != 0 { + return fmt.Errorf("OG renderer ended with incomplete progress (%d/%d cards)", events.completed, len(cards)) + } + for i, card := range cards { + report("validating", i, card.PageURL) + filename := filepath.Join(publicDir, filepath.FromSlash(strings.TrimPrefix(card.OutputPath, "/"))) + if err := verifyPNG(filename); err != nil { + return fmt.Errorf("OG %q (%s): %w", card.PageURL, card.OutputPath, err) + } + report("validating", i+1, card.PageURL) + } + return nil +} + +// Stdout is a small NDJSON protocol, separate from stderr diagnostics. os/exec +// drains it while the process runs and joins the writer before Run returns. +type renderEvents struct { + cards []Card + report func(string, int, string) + pending []byte + ready, started bool + completed int +} + +func (w *renderEvents) Write(p []byte) (int, error) { + w.pending = append(w.pending, p...) + for { + i := bytes.IndexByte(w.pending, '\n') + if i < 0 { + break + } + var event struct { + Event string `json:"event"` + Index int `json:"index"` + } + if err := json.Unmarshal(w.pending[:i], &event); err != nil { + return 0, fmt.Errorf("invalid OG progress event: %w", err) + } + w.pending = w.pending[i+1:] + switch { + case event.Event == "ready" && !w.ready: + w.ready = true + w.report("rendering", 0, "") + case event.Event == "start" && w.ready && !w.started && event.Index == w.completed && event.Index < len(w.cards): + w.started = true + w.report("rendering", w.completed, w.cards[event.Index].PageURL) + case event.Event == "done" && w.started && event.Index == w.completed: + w.started = false + w.completed++ + w.report("rendering", w.completed, w.cards[event.Index].PageURL) + default: + return 0, fmt.Errorf("unexpected OG progress event %q at card %d", event.Event, event.Index) + } + } + if len(w.pending) > 4096 { + return 0, fmt.Errorf("OG progress event exceeds size limit") + } + return len(p), nil +} + +func validateCard(card Card) error { + if card.Section != "notes" && card.Section != "memos" { + return fmt.Errorf("unsupported section %q", card.Section) + } + if path.Dir(card.OutputPath) != "/generated/og/"+card.Section || !outputFilename.MatchString(path.Base(card.OutputPath)) || path.Clean(card.OutputPath) != card.OutputPath { + return fmt.Errorf("unsafe output path %q", card.OutputPath) + } + pageURL, err := url.Parse(card.PageURL) + if err != nil || pageURL.IsAbs() || pageURL.Host != "" || strings.ContainsAny(pageURL.Path, "\\\x00") || pageURL.RawQuery != "" || pageURL.Fragment != "" { + return fmt.Errorf("invalid page URL %q", card.PageURL) + } + pagePath := strings.TrimPrefix(pageURL.Path, "/en_US") + if !strings.HasPrefix(pagePath, "/"+card.Section+"/") || strings.Contains(pagePath, "//") || path.Clean(pageURL.Path) != strings.TrimSuffix(pageURL.Path, "/") { + return fmt.Errorf("invalid page URL %q", card.PageURL) + } + if strings.TrimSpace(card.HTML) == "" { + return fmt.Errorf("empty HTML template") + } + return nil +} + +func verifyPNG(filename string) error { + f, err := os.Open(filename) + if err != nil { + return fmt.Errorf("read generated PNG: %w", err) + } + defer f.Close() + config, err := png.DecodeConfig(f) + if err != nil { + return fmt.Errorf("invalid generated PNG: %w", err) + } + if config.Width != 1200 || config.Height != 630 { + return fmt.Errorf("generated PNG has size %dx%d, want 1200x630", config.Width, config.Height) + } + if _, err := f.Seek(0, io.SeekStart); err != nil { + return fmt.Errorf("read generated PNG: %w", err) + } + if _, err := png.Decode(f); err != nil { + return fmt.Errorf("incomplete generated PNG: %w", err) + } + return nil +} + +func nodeExecutable() (string, error) { + node, err := exec.LookPath("node") + if err != nil { + return "", fmt.Errorf("OG rendering requires Node.js 24 or newer; install Node.js and run `daybook setup-og`: %w", err) + } + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + version, err := exec.CommandContext(ctx, node, "--version").Output() + if err != nil { + return "", fmt.Errorf("check Node.js for OG rendering: %w", err) + } + major, err := strconv.Atoi(strings.Split(strings.TrimPrefix(strings.TrimSpace(string(version)), "v"), ".")[0]) + if err != nil || major < 24 { + return "", fmt.Errorf("OG rendering requires Node.js 24 or newer (found %q); update Node.js and run `daybook setup-og`", strings.TrimSpace(string(version))) + } + return node, nil +} + +func runtimeDirectory() (string, error) { + cache, err := os.UserCacheDir() + if err != nil { + return "", fmt.Errorf("locate OG runtime cache: %w", err) + } + return filepath.Join(cache, "daybook", "og", "playwright-"+PlaywrightVersion), nil +} + +func playwrightModule() (string, error) { + module := os.Getenv(playwrightModuleEnv) + if module == "" { + dir, err := runtimeDirectory() + if err != nil { + return "", err + } + module = filepath.Join(dir, "node_modules", "playwright") + } + entry, err := validatePlaywrightModule(module) + if err != nil { + return "", fmt.Errorf("OG renderer is unavailable: %w; run `daybook setup-og` (or set %s to an absolute Playwright %s package or entry point)", err, playwrightModuleEnv, PlaywrightVersion) + } + return entry, nil +} + +func validatePlaywrightModule(module string) (string, error) { + if !filepath.IsAbs(module) { + return "", fmt.Errorf("Playwright path must be absolute: %q", module) + } + info, err := os.Stat(module) + if err != nil { + return "", fmt.Errorf("locate Playwright at %q: %w", module, err) + } + dir := module + if info.IsDir() { + module = filepath.Join(dir, "index.mjs") + } else { + if filepath.Base(module) != "index.mjs" && filepath.Base(module) != "index.js" { + return "", fmt.Errorf("Playwright entry point must be index.mjs or index.js: %q", module) + } + dir = filepath.Dir(module) + } + metadata, err := os.ReadFile(filepath.Join(dir, "package.json")) + if err != nil { + return "", fmt.Errorf("read Playwright package: %w", err) + } + var pkg struct{ Name, Version string } + if err := json.Unmarshal(metadata, &pkg); err != nil { + return "", fmt.Errorf("read Playwright package: %w", err) + } + if pkg.Name != "playwright" || pkg.Version != PlaywrightVersion { + return "", fmt.Errorf("expected playwright %s, found %s %s", PlaywrightVersion, pkg.Name, pkg.Version) + } + if info, err := os.Stat(module); err != nil || info.IsDir() { + return "", fmt.Errorf("Playwright entry point does not exist: %q", module) + } + return module, nil +} + +// Setup installs the pinned renderer into the user's cache and explicitly +// downloads its matching Chromium. Normal builds never invoke this function. +func Setup(ctx context.Context, options SetupOptions) error { + node, err := nodeExecutable() + if err != nil { + return err + } + npm, err := exec.LookPath("npm") + if err != nil { + return fmt.Errorf("`daybook setup-og` requires npm (included with Node.js): %w", err) + } + dir, err := runtimeDirectory() + if err != nil { + return err + } + if err := os.MkdirAll(dir, 0755); err != nil { + return fmt.Errorf("create OG runtime cache: %w", err) + } + install, err := npmCommand(ctx, node, npm, "install", "--prefix", dir, "--no-audit", "--no-fund", "--ignore-scripts", "--save-exact", "playwright@"+PlaywrightVersion) + if err != nil { + return err + } + install.Stdout, install.Stderr = os.Stdout, os.Stderr + if err := install.Run(); err != nil { + return fmt.Errorf("install OG Playwright runtime: %w", err) + } + moduleDir := filepath.Join(dir, "node_modules", "playwright") + if _, err := validatePlaywrightModule(moduleDir); err != nil { + return err + } + if options.UserDeps { + if err := setupUserLibraries(ctx, node, moduleDir, dir); err != nil { + return fmt.Errorf("install OG user libraries: %w", err) + } + } + args := []string{filepath.Join(moduleDir, "cli.js"), "install", "chromium", "--only-shell"} + if options.WithDeps { + args = append(args, "--with-deps") + } + installBrowser := exec.CommandContext(ctx, node, args...) + if options.UserDeps { + // The renderer supplies these libraries at launch, outside the host's + // loader paths inspected by Playwright's installation-time preflight. + installBrowser.Env = append(os.Environ(), "PLAYWRIGHT_SKIP_VALIDATE_HOST_REQUIREMENTS=1") + } + installBrowser.Stdout, installBrowser.Stderr = os.Stdout, os.Stderr + if err := installBrowser.Run(); err != nil { + return fmt.Errorf("install OG Chromium browser: %w", err) + } + return nil +} + +// Official Windows Node distributions expose npm.cmd, which os/exec cannot +// launch directly. Invoke its JavaScript entry point through Node without a +// shell, so spaces and shell metacharacters in cache paths remain literal. +func npmCommand(ctx context.Context, node, npm string, args ...string) (*exec.Cmd, error) { + ext := strings.ToLower(filepath.Ext(npm)) + if ext != ".cmd" && ext != ".bat" { + return exec.CommandContext(ctx, npm, args...), nil + } + cli := filepath.Join(filepath.Dir(npm), "node_modules", "npm", "bin", "npm-cli.js") + if info, err := os.Stat(cli); err != nil || info.IsDir() { + return nil, fmt.Errorf("locate npm's JavaScript entry point next to %q; reinstall Node.js with npm", npm) + } + return exec.CommandContext(ctx, node, append([]string{cli}, args...)...), nil +} diff --git a/internal/og/runtime_test.go b/internal/og/runtime_test.go new file mode 100644 index 00000000..38c0b090 --- /dev/null +++ b/internal/og/runtime_test.go @@ -0,0 +1,313 @@ +package og + +import ( + "context" + "encoding/json" + "fmt" + "image" + "image/png" + "net/http" + "net/http/httptest" + "os" + "os/exec" + "path/filepath" + "strings" + "sync/atomic" + "testing" + + "github.com/StatIndet/daybook/internal/embedded" +) + +func TestValidateCardPaths(t *testing.T) { + valid := Card{Section: "notes", PageURL: "/notes/中文/", OutputPath: "/generated/og/notes/safe-0123.png", HTML: ""} + for _, page := range []string{"/notes/中文/", "/en_US/notes/中文/", "/notes/a%20b/"} { + card := valid + card.PageURL = page + if err := validateCard(card); err != nil { + t.Errorf("valid URL %q: %v", page, err) + } + } + for _, page := range []string{"https://example.com/notes/a/", "//example.com/notes/a/", "/notes/../../outside/", "/notes/%2e%2e/outside/", "/notes/a%5cb/", "/notes/a%00b/", "/memos/a/", "/notes/a/?x=1", "/notes/a/#x", "/notes/a//b/"} { + card := valid + card.PageURL = page + if err := validateCard(card); err == nil { + t.Errorf("accepted invalid page URL %q", page) + } + } + for _, output := range []string{"/tmp/out.png", "/generated/og/memos/a.png", "/generated/og/notes/../out.png", "/generated/og/notes/a/b.png", "/generated/og/notes/a%2fb.png", "/generated/og/notes/a.svg", "/generated/og/notes/a\\b.png"} { + card := valid + card.OutputPath = output + if err := validateCard(card); err == nil { + t.Errorf("accepted unsafe output %q", output) + } + } +} + +func TestGenerateEmptyDoesNotNeedRuntime(t *testing.T) { + t.Setenv("PATH", "") + if err := Generate(t.TempDir(), nil); err != nil { + t.Fatal(err) + } +} + +func TestGenerateRejectsDuplicateOutputs(t *testing.T) { + card := Card{Section: "memos", PageURL: "/memos/test/", OutputPath: "/generated/og/memos/test.png", HTML: ""} + if err := Generate(t.TempDir(), []Card{card, card}); err == nil || !strings.Contains(err.Error(), "duplicate output") { + t.Fatalf("expected duplicate output error, got %v", err) + } +} + +func TestPlaywrightModuleSelection(t *testing.T) { + dir := t.TempDir() + metadata := `{"name":"playwright","version":"` + PlaywrightVersion + `"}` + if err := os.WriteFile(filepath.Join(dir, "package.json"), []byte(metadata), 0600); err != nil { + t.Fatal(err) + } + entry := filepath.Join(dir, "index.mjs") + if err := os.WriteFile(entry, []byte("export {}"), 0600); err != nil { + t.Fatal(err) + } + for _, candidate := range []string{dir, entry} { + t.Setenv(playwrightModuleEnv, candidate) + actual, err := playwrightModule() + if err != nil || actual != entry { + t.Fatalf("module %q => %q, %v", candidate, actual, err) + } + } + t.Setenv(playwrightModuleEnv, "node_modules/playwright") + if _, err := playwrightModule(); err == nil || !strings.Contains(err.Error(), "setup-og") { + t.Fatalf("expected actionable absolute path error, got %v", err) + } + if err := os.WriteFile(filepath.Join(dir, "package.json"), []byte(`{"name":"playwright","version":"0.0.0"}`), 0600); err != nil { + t.Fatal(err) + } + t.Setenv(playwrightModuleEnv, dir) + if _, err := playwrightModule(); err == nil || !strings.Contains(err.Error(), "expected playwright "+PlaywrightVersion) { + t.Fatalf("expected version error, got %v", err) + } +} + +func TestPlaywrightVersionMatchesLockfile(t *testing.T) { + data, err := os.ReadFile("../../package-lock.json") + if err != nil { + t.Fatal(err) + } + var lock struct { + Packages map[string]struct{ Version string } `json:"packages"` + } + if err := json.Unmarshal(data, &lock); err != nil { + t.Fatal(err) + } + if version := lock.Packages["node_modules/playwright"].Version; version != PlaywrightVersion { + t.Fatalf("runtime pins %s, lockfile pins %s; update both together", PlaywrightVersion, version) + } +} + +func TestVerifyPNG(t *testing.T) { + for _, test := range []struct { + name string + width int + height int + valid bool + }{{"social card", 1200, 630, true}, {"wrong canvas", 600, 315, false}} { + t.Run(test.name, func(t *testing.T) { + filename := filepath.Join(t.TempDir(), "card.png") + file, err := os.Create(filename) + if err != nil { + t.Fatal(err) + } + if err := png.Encode(file, image.NewRGBA(image.Rect(0, 0, test.width, test.height))); err != nil { + t.Fatal(err) + } + if err := file.Close(); err != nil { + t.Fatal(err) + } + if err := verifyPNG(filename); (err == nil) != test.valid { + t.Fatalf("verifyPNG valid=%v: %v", test.valid, err) + } + data, err := os.ReadFile(filename) + if err != nil { + t.Fatal(err) + } + if err := os.WriteFile(filename, data[:len(data)/2], 0600); err != nil { + t.Fatal(err) + } + if err := verifyPNG(filename); err == nil { + t.Fatal("accepted truncated PNG") + } + }) + } +} + +func TestRendererPathContainment(t *testing.T) { + node, err := exec.LookPath("node") + if err != nil { + t.Skip("Node.js unavailable; renderer path tests require Node.js") + } + dir := t.TempDir() + runner, err := embedded.FS.ReadFile("og/render.cjs") + if err != nil { + t.Fatal(err) + } + runnerPath := filepath.Join(dir, "render.cjs") + if err := os.WriteFile(runnerPath, runner, 0600); err != nil { + t.Fatal(err) + } + // Test the actual embedded path resolver, including encoded traversal and + // preexisting symlinks, without launching a browser or making requests. + script := ` +const assert = require('node:assert/strict'); +const fs = require('node:fs/promises'); +const path = require('node:path'); +const { assetPath, outputPath } = require(process.argv[1]); +(async () => { + const dir = process.argv[2], root = path.join(dir, 'public'), outside = path.join(dir, 'private'); + await fs.mkdir(root); await fs.mkdir(outside); + await fs.writeFile(path.join(root, '中文.png'), 'pixels'); + await fs.writeFile(path.join(outside, 'secret'), 'secret'); + assert.equal(await assetPath(root, '/%E4%B8%AD%E6%96%87.png'), path.join(root, '中文.png')); + for (const value of ['/../private/secret', '/%2e%2e/private/secret', '/x%2f..%2f..%2fprivate/secret', '/x%00y', '/x%5cy', '/missing']) { + await assert.rejects(assetPath(root, value), undefined, value); + } + await fs.symlink(outside, path.join(root, 'linked')); + await assert.rejects(assetPath(root, '/linked/secret'), /symlink/); + const card = {section: 'notes', outputPath: '/generated/og/notes/safe.png'}; + assert.equal(await outputPath(root, card), path.join(root, 'generated', 'og', 'notes', 'safe.png')); + for (const value of ['/../private/a.png', '/generated/og/notes/../x.png', '/generated/og/memos/a.png']) { + await assert.rejects(outputPath(root, {...card, outputPath: value}), /unsafe/); + } + await fs.rm(path.join(root, 'generated'), { recursive: true }); + await fs.symlink(outside, path.join(root, 'generated')); + await assert.rejects(outputPath(root, card), /symlink/); + assert.deepEqual(await fs.readdir(outside), ['secret']); +})().catch(error => { console.error(error); process.exitCode = 1; }); +` + if output, err := exec.Command(node, "-e", script, runnerPath, dir).CombinedOutput(); err != nil { + t.Fatalf("renderer path tests: %v\n%s", err, output) + } +} + +func TestNPMWindowsShimUsesNodeWithoutShell(t *testing.T) { + dir := filepath.Join(t.TempDir(), "Node with spaces & symbols") + cli := filepath.Join(dir, "node_modules", "npm", "bin", "npm-cli.js") + if err := os.MkdirAll(filepath.Dir(cli), 0755); err != nil { + t.Fatal(err) + } + if err := os.WriteFile(cli, []byte("// npm"), 0600); err != nil { + t.Fatal(err) + } + node := filepath.Join(dir, "node.exe") + cmd, err := npmCommand(context.Background(), node, filepath.Join(dir, "npm.cmd"), "install", "--prefix", "cache & literal") + if err != nil { + t.Fatal(err) + } + if cmd.Path != node || len(cmd.Args) != 5 || cmd.Args[1] != cli || cmd.Args[4] != "cache & literal" { + t.Fatalf("unexpected invocation: path=%q args=%q", cmd.Path, cmd.Args) + } +} + +func TestGenerateReportsMissingAsset(t *testing.T) { + if os.Getenv(playwrightModuleEnv) == "" { + t.Skip("set DAYBOOK_OG_PLAYWRIGHT_MODULE to run browser integration tests") + } + card := Card{ + Section: "notes", PageURL: "/notes/missing-asset/", OutputPath: "/generated/og/notes/missing.png", + HTML: ``, + } + var events []Progress + err := Generate(t.TempDir(), []Card{card}, func(event Progress) { events = append(events, event) }) + for _, event := range events { + if event.Completed != 0 || event.Phase == "validating" { + t.Fatalf("failed image was counted as complete: %+v", events) + } + } + if err == nil || !strings.Contains(err.Error(), "/notes/missing-asset/") || !strings.Contains(err.Error(), "/missing.png") { + t.Fatalf("expected page and failed asset in error, got %v", err) + } +} + +func TestGenerateCachesRemoteImagesAcrossCards(t *testing.T) { + if os.Getenv(playwrightModuleEnv) == "" { + t.Skip("set DAYBOOK_OG_PLAYWRIGHT_MODULE to run browser integration tests") + } + var requests atomic.Int32 + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + requests.Add(1) + w.Header().Set("Content-Type", "image/png") + if err := png.Encode(w, image.NewRGBA(image.Rect(0, 0, 2, 2))); err != nil { + t.Errorf("serve image: %v", err) + } + })) + defer server.Close() + cards := []Card{ + {Section: "notes", PageURL: "/notes/中文/", OutputPath: "/generated/og/notes/chinese.png"}, + {Section: "memos", PageURL: "/en_US/memos/example/", OutputPath: "/generated/og/memos/english.png"}, + } + for i := range cards { + cards[i].HTML = fmt.Sprintf(``, server.URL) + } + dir := t.TempDir() + var events []Progress + if err := Generate(dir, cards, func(event Progress) { + events = append(events, event) + if event.Completed > 0 && event.PageURL == cards[event.Completed-1].PageURL { + filename := filepath.Join(dir, filepath.FromSlash(strings.TrimPrefix(cards[event.Completed-1].OutputPath, "/"))) + if err := verifyPNG(filename); err != nil { + t.Errorf("completion reported before image exists: %v", err) + } + } + }); err != nil { + t.Fatal(err) + } + if len(events) != 9 || events[1].Completed != 0 || events[2].Completed != 1 || events[3].Completed != 1 || events[4].Completed != 2 || events[5].Phase != "validating" || events[8].Completed != 2 { + t.Fatalf("unexpected renderer lifecycle: %+v", events) + } + if actual := requests.Load(); actual != 1 { + t.Fatalf("remote avatar fetched %d times, want once per batch", actual) + } + for _, card := range cards { + if err := verifyPNG(filepath.Join(dir, filepath.FromSlash(strings.TrimPrefix(card.OutputPath, "/")))); err != nil { + t.Fatal(err) + } + } +} + +func TestRenderEventsReportCompletedWrites(t *testing.T) { + var received []Progress + cards := []Card{{PageURL: "/notes/first/"}, {PageURL: "/memos/second/"}} + writer := &renderEvents{cards: cards, report: func(phase string, completed int, page string) { + received = append(received, Progress{Phase: phase, Completed: completed, Total: 2, PageURL: page}) + }} + // os/exec may split a JSON event anywhere, or deliver multiple lines together. + input := "{\"event\":\"ready\"}\n{\"event\":\"start\",\"index\":0}\n{\"event\":\"done\",\"index\":0}\n{\"event\":\"start\",\"index\":1}\n{\"event\":\"done\",\"index\":1}\n" + for _, b := range []byte(input) { + if _, err := writer.Write([]byte{b}); err != nil { + t.Fatal(err) + } + } + if len(received) != 5 { + t.Fatalf("events: %+v", received) + } + for i, want := range []int{0, 0, 1, 1, 2} { + if received[i].Completed != want { + t.Fatalf("event %d: %+v, want %d completed", i, received[i], want) + } + } + if received[3].PageURL != cards[1].PageURL { + t.Fatal(received) + } + if _, err := writer.Write([]byte("{\"event\":\"done\",\"index\":1}\n")); err == nil { + t.Fatal("accepted duplicate completion") + } + for _, input := range []string{ + "not JSON\n", "{\"event\":\"done\",\"index\":0}\n", + "{\"event\":\"ready\"}\n{\"event\":\"start\",\"index\":-1}\n", + "{\"event\":\"ready\"}\n{\"event\":\"start\",\"index\":2}\n", + strings.Repeat("x", 4097), + } { + writer := &renderEvents{cards: cards, report: func(string, int, string) {}} + if _, err := writer.Write([]byte(input)); err == nil { + t.Fatalf("accepted invalid protocol: %.80q", input) + } + } +} diff --git a/internal/og/user_deps.go b/internal/og/user_deps.go new file mode 100644 index 00000000..e71a1f78 --- /dev/null +++ b/internal/og/user_deps.go @@ -0,0 +1,185 @@ +package og + +import ( + "context" + "encoding/xml" + "errors" + "fmt" + "os" + "os/exec" + "path/filepath" + "regexp" + "runtime" + "strconv" + "strings" +) + +// SetupOptions selects one explicit method of installing OS dependencies. +type SetupOptions struct { + WithDeps bool // Playwright's privileged system installer. + UserDeps bool // Signed Debian packages extracted into the user cache. +} + +// setupUserLibraries uses the host's authenticated APT sources and Playwright's +// dependency simulation, including transitive packages. It never installs a +// system package, executes a package maintainer script, or invokes sudo/su. +func setupUserLibraries(ctx context.Context, node, moduleDir, cache string) error { + if runtime.GOOS != "linux" { + return fmt.Errorf("--user-deps requires Debian/Ubuntu Linux") + } + for _, tool := range []string{"apt-get", "dpkg-deb"} { + if _, err := exec.LookPath(tool); err != nil { + return fmt.Errorf("--user-deps requires %s: %w", tool, err) + } + } + work, err := os.MkdirTemp(cache, "user-deps-") + if err != nil { + return err + } + defer os.RemoveAll(work) + if strings.ContainsAny(work, "\\\"\r\n") { + return fmt.Errorf("APT cannot represent this cache path: %q", work) + } + for _, dir := range []string{"apt.conf.d", "lists/partial", "archives/partial", "downloads", "root"} { + if err := os.MkdirAll(filepath.Join(work, dir), 0755); err != nil { + return err + } + } + // APT_CONFIG is read before apt.conf.d. Disable system hooks (which may + // write system caches), but retain the default sources and trusted keyrings. + config := "Dir::Etc::parts " + strconv.Quote(filepath.Join(work, "apt.conf.d")) + ";\nDir::Etc::main \"/dev/null\";\n" + + "Dir::State::lists " + strconv.Quote(filepath.Join(work, "lists")) + ";\n" + + "Dir::Cache::archives " + strconv.Quote(filepath.Join(work, "archives")) + ";\n" + + "Dir::Cache::pkgcache \"\";\nDir::Cache::srcpkgcache \"\";\n" + + "Debug::NoLocking \"true\";\nAPT::Update::Error-Mode \"any\";\n" + configPath := filepath.Join(work, "apt.conf") + if err := os.WriteFile(configPath, []byte(config), 0600); err != nil { + return err + } + command := func(name string, args ...string) *exec.Cmd { + cmd := exec.CommandContext(ctx, name, args...) + cmd.Dir = filepath.Join(work, "downloads") + cmd.Env = append(os.Environ(), "APT_CONFIG="+configPath, "LC_ALL=C") + return cmd + } + run := func(cmd *exec.Cmd) error { + cmd.Stdout, cmd.Stderr = os.Stdout, os.Stderr + return cmd.Run() + } + fmt.Fprintln(os.Stdout, "Preparing Chromium libraries in the user cache (no root required)...") + if err := run(command("apt-get", "update")); err != nil { + return fmt.Errorf("refresh authenticated APT indexes: %w", err) + } + probe := command(node, filepath.Join(moduleDir, "cli.js"), "install-deps", "--dry-run", "chromium") + output, probeErr := probe.CombinedOutput() + packages, err := missingPackages(string(output)) + var exitError *exec.ExitError + missingExit := errors.As(probeErr, &exitError) && exitError.ExitCode() == 1 && len(packages) > 0 + if err != nil || (probeErr != nil && !missingExit) { + return fmt.Errorf("inspect Playwright system dependencies: %v (%v)\n%s", probeErr, err, output) + } + if len(packages) > 0 { + if err := run(command("apt-get", append([]string{"download"}, packages...)...)); err != nil { + return fmt.Errorf("download authenticated system packages: %w", err) + } + archives, err := filepath.Glob(filepath.Join(work, "downloads", "*.deb")) + if err != nil || len(archives) != len(packages) { + return fmt.Errorf("downloaded %d archives for %d packages", len(archives), len(packages)) + } + for _, archive := range archives { + if err := run(command("dpkg-deb", "--extract", archive, filepath.Join(work, "root"))); err != nil { + return fmt.Errorf("extract %s: %w", filepath.Base(archive), err) + } + } + } + root := filepath.Join(cache, "system-libraries") + // Fontconfig otherwise searches /etc/fonts, which is absent in minimal + // images. Supply a private configuration including the extracted fonts and + // any existing host configuration; Chromium still uses Daybook's web fonts. + var fontConfig strings.Builder + fontConfig.WriteString("/etc/fonts/fonts.conf") + if err := xml.EscapeText(&fontConfig, []byte(filepath.Join(root, "usr", "share", "fonts"))); err != nil { + return err + } + fontConfig.WriteString("") + if err := xml.EscapeText(&fontConfig, []byte(filepath.Join(cache, "fontconfig"))); err != nil { + return err + } + fontConfig.WriteString("\n") + if err := os.WriteFile(filepath.Join(work, "root", "fonts.conf"), []byte(fontConfig.String()), 0600); err != nil { + return err + } + if err := os.RemoveAll(root); err != nil { + return err + } + if err := os.Rename(filepath.Join(work, "root"), root); err != nil { + return err + } + fmt.Fprintf(os.Stdout, "Prepared %d system packages in %s.\n", len(packages), root) + return nil +} + +var missingHeader = regexp.MustCompile(`^Missing system dependencies \(([0-9]+)\):$`) +var debianPackage = regexp.MustCompile(`^[a-z0-9][a-z0-9+.-]*(?::[a-z0-9][a-z0-9-]*)?$`) + +// Parse the public dry-run output of the pinned Playwright version. Unknown +// output fails closed instead of silently omitting required dependencies. +func missingPackages(output string) ([]string, error) { + lines := strings.Split(strings.TrimSpace(output), "\n") + if len(lines) == 1 && lines[0] == "All system dependencies are installed." { + return nil, nil + } + header := missingHeader.FindStringSubmatch(lines[0]) + if len(header) != 2 { + return nil, fmt.Errorf("unexpected Playwright dependency report") + } + count, _ := strconv.Atoi(header[1]) + if count == 0 || count != len(lines)-1 { + return nil, fmt.Errorf("incomplete Playwright dependency report") + } + packages := make([]string, 0, count) + seen := make(map[string]bool, count) + for _, line := range lines[1:] { + name := strings.TrimSpace(line) + if !debianPackage.MatchString(name) || seen[name] { + return nil, fmt.Errorf("invalid dependency name %q", name) + } + seen[name] = true + packages = append(packages, name) + } + return packages, nil +} + +func userLibraryPath() string { + if runtime.GOOS != "linux" { + return "" + } + cache, err := runtimeDirectory() + if err != nil { + return "" + } + root := filepath.Join(cache, "system-libraries") + var paths []string + for _, base := range []string{"lib", "usr/lib"} { + dir := filepath.Join(root, base) + multiarch, _ := filepath.Glob(filepath.Join(dir, "*-linux-gnu")) + for _, candidate := range append(multiarch, dir) { + if info, err := os.Stat(candidate); err == nil && info.IsDir() { + paths = append(paths, candidate) + } + } + } + return strings.Join(paths, ":") +} + +func userFontConfig() string { + if runtime.GOOS == "linux" { + if cache, err := runtimeDirectory(); err == nil { + config := filepath.Join(cache, "system-libraries", "fonts.conf") + if info, err := os.Stat(config); err == nil && !info.IsDir() { + return config + } + } + } + return "" +} diff --git a/internal/og/user_deps_test.go b/internal/og/user_deps_test.go new file mode 100644 index 00000000..12922bdf --- /dev/null +++ b/internal/og/user_deps_test.go @@ -0,0 +1,32 @@ +package og + +import ( + "reflect" + "testing" +) + +func TestMissingPackages(t *testing.T) { + for _, tc := range []struct { + output string + want []string + }{ + {"All system dependencies are installed.\n", nil}, + {"Missing system dependencies (2):\n libatk1.0-0t64\n libx11-6:amd64\n", []string{"libatk1.0-0t64", "libx11-6:amd64"}}, + } { + got, err := missingPackages(tc.output) + if err != nil || !reflect.DeepEqual(got, tc.want) { + t.Fatalf("%q: %v, %v; want %v", tc.output, got, err, tc.want) + } + } + for _, output := range []string{ + "", "E: Unable to locate package libatk", "Missing system dependencies (0):", + "Missing system dependencies (2):\n libatk1.0-0t64", + "Missing system dependencies (1):\n --allow-unauthenticated", + "Missing system dependencies (1):\n libatk; touch /tmp/file", + "Missing system dependencies (2):\n libatk\n libatk", + } { + if _, err := missingPackages(output); err == nil { + t.Errorf("accepted malformed report %q", output) + } + } +} diff --git a/internal/progress/progress.go b/internal/progress/progress.go new file mode 100644 index 00000000..92af055f --- /dev/null +++ b/internal/progress/progress.go @@ -0,0 +1,385 @@ +// Package progress coordinates build status and persistent diagnostics. +package progress + +import ( + "fmt" + "io" + "os" + "strings" + "sync" + "time" + "unicode" + + "github.com/rivo/uniseg" + "golang.org/x/term" +) + +type Stage struct { + Name string + Weight float64 // Relative work estimate, not a prediction of remaining time. +} + +type Options struct { + Writer io.Writer // Defaults to stdout. Non-terminal writers always get plain text. + Verbose bool +} + +type Reporter struct { + mu sync.Mutex + out io.Writer + verbose, isTTY, color bool + size func() (int, int, error) + stages []Stage + currentStage, stageVal, stageTotal int + task, detail string + startTime, stageTime time.Time + frame, warnings int + drawn, closed bool + stop chan struct{} +} + +var brailleFrames = []string{"⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "�"} + +func NewReporter(stages []Stage, options ...Options) *Reporter { + var opts Options + if len(options) > 0 { + opts = options[0] + } + if opts.Writer == nil { + opts.Writer = os.Stdout + } + r := &Reporter{out: opts.Writer, verbose: opts.Verbose, stages: append([]Stage(nil), stages...), currentStage: -1, startTime: time.Now()} + if file, ok := opts.Writer.(*os.File); ok { + fd := int(file.Fd()) + r.size = func() (int, int, error) { return term.GetSize(fd) } + ci := os.Getenv("CI") + r.isTTY = term.IsTerminal(fd) && !opts.Verbose && os.Getenv("TERM") != "dumb" && os.Getenv("TERM") != "" && (ci == "" || ci == "0" || strings.EqualFold(ci, "false")) + } + r.color = r.isTTY && os.Getenv("NO_COLOR") == "" + if r.isTTY { + r.stop = make(chan struct{}) + go r.animate() + } + return r +} + +func (r *Reporter) animate() { + ticker := time.NewTicker(180 * time.Millisecond) + defer ticker.Stop() + for { + select { + case <-r.stop: + return + case <-ticker.C: + r.mu.Lock() + r.frame++ + r.render() + r.mu.Unlock() + } + } +} + +// SetStage finishes the previous stage. Skipped optional stages consume no time +// and produce no log. Calls must follow the order of the supplied stage list. +func (r *Reporter) SetStage(index, total int) { + if r == nil { + return + } + r.mu.Lock() + defer r.mu.Unlock() + if r.closed || index < 0 || index >= len(r.stages) || index <= r.currentStage { + return + } + r.finishStage() + r.currentStage, r.stageVal, r.stageTotal = index, 0, max(0, total) + r.task, r.detail, r.stageTime = r.stages[index].Name, "", time.Now() + if !r.isTTY { + r.log("START", r.task) + } + r.render() +} + +// Task changes the explanation of the current work without resetting progress. +func (r *Reporter) Task(name, detail string) { + if r == nil { + return + } + r.mu.Lock() + defer r.mu.Unlock() + if r.closed { + return + } + name, detail = clean(name), clean(detail) + if r.task == name && r.detail == detail { + return + } + r.task, r.detail = name, detail + if r.verbose { + r.log("TASK", r.status()) + } + r.render() +} + +func (r *Reporter) Detail(detail string) { + if r == nil { + return + } + r.mu.Lock() + defer r.mu.Unlock() + if r.closed { + return + } + detail = clean(detail) + if r.detail == detail { + return + } + r.detail = detail + if r.verbose { + r.log("TASK", r.status()) + } + r.render() +} + +// Advance reports completed work only. Repeated or stale callbacks cannot move +// the global progress backwards or beyond the current stage's denominator. +func (r *Reporter) Advance(completed int) { + if r == nil { + return + } + r.mu.Lock() + defer r.mu.Unlock() + if r.closed || completed <= r.stageVal { + return + } + r.stageVal = min(max(0, completed), r.stageTotal) + if r.verbose { + r.log("DONE", r.status()) + } + r.render() +} + +func (r *Reporter) Warnf(format string, args ...any) { + if r == nil { + return + } + r.mu.Lock() + defer r.mu.Unlock() + if r.closed { + return + } + r.warnings++ + r.clear() + r.log("WARN", fmt.Sprintf(format, args...)) + r.render() +} + +func (r *Reporter) Verbosef(format string, args ...any) { + if r == nil { + return + } + r.mu.Lock() + defer r.mu.Unlock() + if r.verbose && !r.closed { + r.log("INFO", fmt.Sprintf(format, args...)) + } +} + +func (r *Reporter) Done(message string, details ...string) { + if r == nil { + return + } + r.mu.Lock() + defer r.mu.Unlock() + if r.closed { + return + } + r.finishStage() + r.close() + fmt.Fprintf(r.out, "✓ %s · %.1fs\n", clean(message), time.Since(r.startTime).Seconds()) + if r.warnings > 0 { + details = append(details, fmt.Sprintf("%d warnings", r.warnings)) + } + if len(details) > 0 { + fmt.Fprintf(r.out, " %s\n", clean(strings.Join(details, " · "))) + } +} + +func (r *Reporter) Fail(err error) { + if r == nil { + return + } + r.mu.Lock() + defer r.mu.Unlock() + if r.closed { + return + } + r.close() + fmt.Fprintf(r.out, "✗ Build failed · %s · %.1fs\n", r.status(), time.Since(r.startTime).Seconds()) + // Preserve useful multi-line subprocess errors, without allowing terminal controls. + for _, line := range strings.Split(err.Error(), "\n") { + fmt.Fprintf(r.out, " %s\n", clean(line)) + } +} + +// Close stops animation on an early return without claiming success. +func (r *Reporter) Close() { + if r == nil { + return + } + r.mu.Lock() + defer r.mu.Unlock() + r.close() +} + +func (r *Reporter) close() { + if r.closed { + return + } + r.closed = true + if r.stop != nil { + close(r.stop) + } + r.clear() +} + +func (r *Reporter) finishStage() { + if r.currentStage >= 0 && !r.isTTY { + count := "" + if r.stageTotal > 0 { + count = fmt.Sprintf(" · %d/%d", r.stageVal, r.stageTotal) + } + r.log("END", fmt.Sprintf("%s%s · %.3fs", r.stages[r.currentStage].Name, count, time.Since(r.stageTime).Seconds())) + } +} + +func (r *Reporter) log(level, message string) { + if r.verbose { + fmt.Fprintf(r.out, "[%7.3fs] ", time.Since(r.startTime).Seconds()) + } + fmt.Fprintf(r.out, "%s %s\n", level, clean(message)) +} + +func (r *Reporter) status() string { + s := r.task + if s == "" { + s = "Preparing build" + } + if r.stageTotal > 0 && r.currentStage >= 0 && r.task == r.stages[r.currentStage].Name { + s += fmt.Sprintf(" · %d/%d", r.stageVal, r.stageTotal) + } + if r.detail != "" { + s += " · " + r.detail + } + return s +} + +func (r *Reporter) fraction() float64 { + var completed, total float64 + for i, stage := range r.stages { + weight := max(0, stage.Weight) + total += weight + if i < r.currentStage { + completed += weight + } + if i == r.currentStage && r.stageTotal > 0 { + completed += weight * float64(r.stageVal) / float64(r.stageTotal) + } + } + if total == 0 { + return 0 + } + // Only Done signifies success, including final validation and subprocess exit. + return min(0.99, completed/total) +} + +func (r *Reporter) lines(columns int) (string, string) { + width := max(0, min(columns-1, 140)) // Keep a spare cell to prevent autowrap. + status := r.task + if width >= 24 { + status = brailleFrames[r.frame%len(brailleFrames)] + " " + r.status() + } + elapsed := fmt.Sprintf("%.1fs", time.Since(r.startTime).Seconds()) + if width >= 40 { + status = truncate(status, width-uniseg.StringWidth(elapsed)-2) + status += strings.Repeat(" ", width-uniseg.StringWidth(status)-uniseg.StringWidth(elapsed)) + elapsed + } else { + status = truncate(status, width) + } + percent := fmt.Sprintf("%3d%%", int(r.fraction()*100)) + trackWidth := width - 7 // brackets, gap, three-digit percentage + if trackWidth < 8 { + return status, truncate(strings.TrimSpace(percent), width) + } + position := min(trackWidth-1, int(float64(trackWidth)*r.fraction())) + mouth := "C" + if r.frame%2 == 1 { + mouth = "c" + } + var remaining strings.Builder + for i := position + 1; i < trackWidth; i++ { + if i%3 == 0 { + remaining.WriteByte('o') + } else { + remaining.WriteByte(' ') + } + } + track, pellets := strings.Repeat("-", position), remaining.String() + if r.color { + track = "\x1b[2m" + track + "\x1b[0m" + mouth = "\x1b[33m" + mouth + "\x1b[0m" + pellets = "\x1b[2m" + pellets + "\x1b[0m" + } + return status, "[" + track + mouth + pellets + "] " + percent +} + +func (r *Reporter) render() { + if !r.isTTY || r.closed || r.currentStage < 0 { + return + } + columns, rows, err := r.size() + r.clear() + if err != nil || columns < 2 || rows < 2 { + return + } + first, second := r.lines(columns) + // Cursor invariant: column zero of the FIRST dynamic line. Clearing from + // there also removes any extra rows produced by terminal resize/reflow. + fmt.Fprintf(r.out, "%s\n\r%s\x1b[1A\r", first, second) + r.drawn = true +} + +func (r *Reporter) clear() { + if r.drawn { + fmt.Fprint(r.out, "\r\x1b[J") + r.drawn = false + } +} + +func clean(s string) string { + return strings.Map(func(c rune) rune { + if unicode.IsControl(c) || c == '\u2028' || c == '\u2029' { + return ' ' + } + return c + }, s) +} + +func truncate(s string, width int) string { + if width <= 0 { + return "" + } + if uniseg.StringWidth(s) <= width { + return s + } + var out strings.Builder + g := uniseg.NewGraphemes(s) + used := 0 + for g.Next() { + if used+g.Width() > width-1 { + break + } + out.WriteString(g.Str()) + used += g.Width() + } + return out.String() + "…" +} diff --git a/internal/progress/progress_test.go b/internal/progress/progress_test.go new file mode 100644 index 00000000..b85db30c --- /dev/null +++ b/internal/progress/progress_test.go @@ -0,0 +1,224 @@ +package progress + +import ( + "bytes" + "errors" + "fmt" + "os" + "strings" + "sync" + "testing" + "time" + + "github.com/rivo/uniseg" +) + +func testReporter(out *bytes.Buffer, verbose bool) *Reporter { + return NewReporter([]Stage{{Name: "Scan", Weight: 2}, {Name: "Render", Weight: 8}}, Options{Writer: out, Verbose: verbose}) +} + +func TestProgressTracksCompletedWorkAndNeverReachesSuccessEarly(t *testing.T) { + var out bytes.Buffer + r := testReporter(&out, false) + defer r.Close() + if r.currentStage != -1 { + t.Fatal("invented an active stage before build starts") + } + r.SetStage(0, 10) + r.Advance(5) + if got := r.fraction(); got != .1 { + t.Fatalf("half a scan: %v", got) + } + for range 20 { + r.frame++ + r.lines(80) + } + if got := r.fraction(); got != .1 { + t.Fatalf("animation advanced work: %v", got) + } + r.Advance(2) + r.SetStage(-1, 0) + r.SetStage(9, 1) + if got := r.fraction(); got != .1 { + t.Fatalf("stale/invalid update changed work: %v", got) + } + r.SetStage(1, 10) + if got := r.fraction(); got != .2 { + t.Fatalf("stage transition: %v", got) + } + r.Advance(5) + if got := r.fraction(); got != .6 { + t.Fatalf("half a render: %v", got) + } + r.Advance(100) + if r.fraction() >= 1 || r.stageVal != 10 { + t.Fatal("reached success before Done or exceeded total") + } + r.Done("Built site") + r.Done("duplicate success") + r.Fail(errors.New("late error")) + r.Advance(1) + if strings.Count(out.String(), "✓") != 1 || strings.Contains(out.String(), "late error") { + t.Fatal(out.String()) + } +} + +func TestResponsiveLinesAndGraphemeTruncation(t *testing.T) { + var out bytes.Buffer + r := testReporter(&out, false) + defer r.Close() + r.SetStage(1, 42) + r.Advance(18) + r.Task("Rendering pages", strings.Repeat("notes/鲸歌👨�👩�👧�👦e\u0301.md", 20)) + for _, columns := range []int{1, 2, 4, 8, 15, 24, 39, 40, 80, 120, 200} { + first, second := r.lines(columns) + for _, line := range []string{first, second} { + if w := uniseg.StringWidth(line); w >= columns || w > 140 { + t.Errorf("%d columns: width %d: %q", columns, w, line) + } + } + if columns >= 24 && !strings.Contains(second, "%") { + t.Errorf("missing percentage: %q", second) + } + } + _, a := r.lines(80) + r.frame++ + _, b := r.lines(80) + if !strings.Contains(a, "C") || !strings.Contains(b, "c") || strings.Replace(a, "C", "c", 1) != b { + t.Fatalf("mouth changed progress: %q / %q", a, b) + } + for _, tc := range []struct { + s string + width int + want string + }{ + {"鲸歌", 3, "鲸…"}, + {"e\u0301abcdef", 3, "e\u0301a…"}, + {"👨�👩�👧�👦abc", 3, "👨�👩�👧�👦…"}, + } { + if got := truncate(tc.s, tc.width); got != tc.want { + t.Errorf("truncate %q: %q, want %q", tc.s, got, tc.want) + } + } +} + +func TestTerminalWarningResizeAndCleanup(t *testing.T) { + var out bytes.Buffer + r := testReporter(&out, false) + // Inject terminal dimensions without a background goroutine. + columns := 120 + r.isTTY = true + r.size = func() (int, int, error) { return columns, 24, nil } + fmt.Fprintln(&out, "existing history") + r.SetStage(0, 0) + r.Detail("waiting for response") + r.Warnf("notes/鲸歌.md:24 · missing link") + columns = 24 + r.render() + r.Fail(errors.New("network failed\nretry later")) + r.Close() + output := out.String() + if !strings.HasPrefix(output, "existing history\n") || strings.Contains(output, "\x1b[2J") { + t.Fatal("erased terminal history") + } + if strings.Count(output, "WARN notes/鲸歌.md:24") != 1 { + t.Fatal(output) + } + if !strings.Contains(output, "\r\x1b[JWARN") || !strings.Contains(output, "\r\x1b[J✗ Build failed") { + t.Fatal("logs didn't clear their own dynamic region", output) + } + if !strings.Contains(output, "waiting for response") || !strings.Contains(output, "network failed\n retry later") || strings.Contains(output, "✓") { + t.Fatal(output) + } + // Every frame returns to column zero on its first line. No clear/up sequence + // can reach the preceding warning/history line, including the first frame. + if strings.Contains(output, "\x1b[J\x1b[1A") { + t.Fatal("cleanup moves above the owned region") + } +} + +func TestPlainAndVerboseOutput(t *testing.T) { + for _, verbose := range []bool{false, true} { + t.Run(fmt.Sprint(verbose), func(t *testing.T) { + var out bytes.Buffer + r := testReporter(&out, verbose) + r.Warnf("configuration fallback") + r.SetStage(0, 0) + r.Task("Scanning content", "notes/secret.md") + r.Verbosef("stats: disabled") + r.SetStage(1, 1) + r.Detail("notes/secret.md\n\x1b[31m") + r.Advance(1) + r.Done("Built 1 note", "1 social card") + output := out.String() + if strings.ContainsAny(output, "\x1b\r") || !strings.Contains(output, "START Scan") || !strings.Contains(output, "END Render · 1/1") || !strings.Contains(output, "1 social card · 1 warnings") { + t.Fatal(output) + } + if strings.Contains(output, "notes/secret.md") != verbose || strings.Contains(output, "stats:") != verbose { + t.Fatal("wrong verbosity", output) + } + }) + } +} + +func TestDumbCIAndVerboseDisableAnimation(t *testing.T) { + // IsTerminal is checked independently of these overrides; a character device + // such as /dev/null is not sufficient to enable cursor control. + for _, mode := range []string{"dumb", "CI", "verbose"} { + t.Run(mode, func(t *testing.T) { + t.Setenv("TERM", "xterm-256color") + t.Setenv("CI", "") + if mode == "dumb" { + t.Setenv("TERM", "dumb") + } + if mode == "CI" { + t.Setenv("CI", "true") + } + file, err := os.OpenFile(os.DevNull, os.O_WRONLY, 0) + if err != nil { + t.Fatal(err) + } + defer file.Close() + r := NewReporter(nil, Options{Writer: file, Verbose: mode == "verbose"}) + defer r.Close() + if r.isTTY || r.stop != nil { + t.Fatal("animation enabled for noninteractive output") + } + }) + } +} + +func TestConcurrentWarningsAndCompletion(t *testing.T) { + var out bytes.Buffer + r := testReporter(&out, true) + r.SetStage(1, 100) + var wg sync.WaitGroup + for i := 0; i < 20; i++ { + wg.Go(func() { r.Warnf("warning"); r.Detail("card"); r.Advance(1) }) + } + wg.Wait() + r.Done("Built site") + if strings.Count(out.String(), "WARN warning") != 20 || !strings.Contains(out.String(), "20 warnings") { + t.Fatal(out.String()) + } +} + +func TestClosingAnimationIsIdempotent(t *testing.T) { + var out bytes.Buffer + r := testReporter(&out, false) + r.isTTY, r.stop = true, make(chan struct{}) + r.size = func() (int, int, error) { return 80, 24, nil } + done := make(chan struct{}) + go func() { r.animate(); close(done) }() + r.SetStage(0, 0) + r.Close() + r.Close() + select { + case <-done: + case <-time.After(time.Second): + t.Fatal("animation did not stop") + } + if strings.Contains(out.String(), "✓") { + t.Fatal("Close claimed success") + } +} diff --git a/internal/render/render.go b/internal/render/render.go new file mode 100644 index 00000000..fe1ed1e5 --- /dev/null +++ b/internal/render/render.go @@ -0,0 +1,876 @@ +package render + +import ( + "fmt" + "html/template" + "math" + "os" + "path/filepath" + "strings" + + "github.com/StatIndet/daybook/internal/config" + "github.com/StatIndet/daybook/internal/embedded" + "github.com/StatIndet/daybook/internal/github" + "github.com/StatIndet/daybook/internal/i18n" + "github.com/StatIndet/daybook/internal/morphable" + "github.com/StatIndet/daybook/internal/seo" +) + +type Renderer struct { + TemplatesDir string +} + +type SiteData struct { + StartedAt string + UptimeDays int + TotalWordCount int +} + +type Assets struct { + Paths map[string]string +} + +func (a Assets) Path(originalPath string) string { + if path, ok := a.Paths[originalPath]; ok { + return path + } + return originalPath +} + +type Heading struct { + Level int + Text string + ID string +} + +type NoteLink struct { + Section string + Title string + Date string + Updated string + Lang string + ReadingTime string + ReadingMinutes int + Summary string + Tags []string + TagIDs []string + URL string + Slug string + Pinned bool + HasMusic bool + HasTranslation bool + TitleLayout template.HTML + TitleTransitionName string + DateTransitionName string +} + +type NotePage struct { + UpdatedDisplay string + Section string + Location string + DateDisplay string + Lang string + TranslationURL string + Title string + Date string + Updated string + ReadingTime string + Summary string + URL string + Slug string + I18nKey string + CommentPath string + Tags []string + WordCount int + ReadingMinutes int + CanonicalPath string + ShareURL string + ShareText string + HTML template.HTML + Headings []Heading + HasMermaid bool + HasMath bool + TocEnabled bool + CommentEnabled bool + HasTranslation bool + Pinned bool + HasMusic bool + TitleLayout template.HTML + TitleTransitionName string + DateTransitionName string +} + +type GoldenGuide struct { + Order int + Kind string + + GrowStartPct string + GrowFadePct string + GrowEndPct string + + ShrinkStartPct string + ShrinkEndPct string + + HidePct string + + Segments []GoldenGuideSegment +} + +type GoldenGuideSegment struct { + TranslateX string + TranslateY string + Rotation string + Length string + Order int + + GrowStartPct string + GrowEndPct string + ShrinkStartPct string + ShrinkEndPct string +} + +type goldenGuideDraft struct { + points []point + distance float64 + kind string +} + +type goldenRect struct { + x float64 + y float64 + w float64 + h float64 +} + +type goldenSquare struct { + x float64 + y float64 + s float64 +} + +type GoldenSpiral struct { + // PoleX/PoleY are the mathematical limit point used to calculate the + // logarithmic spiral. They are not the visual spin center. + PoleX string + PoleY string + // SpinCenterX/SpinCenterY are the visual rotation center. They must match + // the first visible point of the spiral path, stored in SpiralVisualStart. + SpinCenterX string + SpinCenterY string + SpinDuration string + OuterRect string + OuterRectLeftTop string + OuterRectRightBottom string + SpiralOuterCorner string + SpiralVisualStart string + SpiralVisualEnd string + SpiralOuterQuarterTurns string + SpiralInnerQuarterTurns string + LoopDuration string + CurveStartPct string + CurveFadePct string + CurveGrowEndPct string + CurveShrinkStartPct string + CurveShrinkEndPct string + CurveHidePct string + Guides []GoldenGuide + SpiralPath string +} + +type IndexData struct { + GitHub *github.Profile + Site SiteData + Config config.Config + PageTitle string + PageKind string + BodyClass string + Lang string + AlternateURL string + Assets Assets + HasMath bool + Notes []NoteLink + Tags []TagLink + SEO seo.SEOData + Pagination PaginationData +} + +type TagLink struct { + Name string + URL string + Index int + ReverseIndex int +} + +type PaginationItem struct { + PageNumber int + URL string + IsCurrent bool + IsEllipsis bool +} + +type PaginationData struct { + CurrentPage int + TotalPages int + PrevURL string + NextURL string + Items []PaginationItem +} + +type NotesData struct { + Site SiteData + Config config.Config + PageTitle string + PageKind string + BodyClass string + Lang string + AlternateURL string + Assets Assets + HasMath bool + Notes []NoteLink + PinnedNotes []NoteLink + MonthGroups []MonthGroup + Tags []TagLink + SEO seo.SEOData + Pagination PaginationData +} + +type MonthGroup struct { + Key string + Label string + Notes []NoteLink +} + +// MemoCard shares the article renderer while presenting the body in a feed. +type MemoCard struct { + CommentEnabled bool + ShareURL string + ShareText string + UpdatedDisplay string + NoteLink + HTML template.HTML + Location string + DateDay string + DateDisplay string + SearchText string +} + +type MemosData struct { + Site SiteData + Config config.Config + PageTitle string + PageKind string + BodyClass string + Lang string + AlternateURL string + Assets Assets + HasMath bool + Memos []MemoCard + Tags []TagLink + SEO seo.SEOData + Pagination PaginationData +} + +type ArchiveRow struct { + Type string `json:"type"` // "year" or "note" + ID string `json:"id"` + Year string `json:"year,omitempty"` + Date string `json:"date,omitempty"` + DateShort string `json:"dateShort,omitempty"` + Title string `json:"title,omitempty"` + ReadingTime string `json:"readingTime,omitempty"` + Summary string `json:"summary,omitempty"` + URL string `json:"url,omitempty"` + TagIDs []string `json:"tagIDs,omitempty"` + Index int `json:"index,omitempty"` + IsLastInYear bool `json:"isLastInYear,omitempty"` + IsFirstYear bool `json:"isFirstYear,omitempty"` +} + +type ArchiveData struct { + Site SiteData + Config config.Config + PageTitle string + PageKind string + BodyClass string + Lang string + AlternateURL string + Assets Assets + HasMath bool + Total int + Rows []ArchiveRow + Tags []TagLink + SEO seo.SEOData + Pagination PaginationData +} + +type NoteData struct { + Site SiteData + Config config.Config + PageTitle string + PageKind string + BodyClass string + Lang string + AlternateURL string + Assets Assets + HasMath bool + Note NotePage + Tags []TagLink + SEO seo.SEOData + Pagination PaginationData +} + +type AboutData struct { + Site SiteData + Config config.Config + PageTitle string + PageKind string + BodyClass string + Lang string + AlternateURL string + Assets Assets + HasMath bool + Spiral GoldenSpiral + HasTranslation bool + Title string + Summary string + Date string + Updated string + ReadingTime string + WordCount int + HTML template.HTML + Tags []TagLink + SEO seo.SEOData +} + +type GraphData struct { + Site SiteData + Config config.Config + PageTitle string + PageKind string + BodyClass string + Lang string + AlternateURL string + Assets Assets + HasMath bool + Tags []TagLink + SEO seo.SEOData + Pagination PaginationData +} + +type TagData struct { + Site SiteData + Config config.Config + PageTitle string + PageKind string + BodyClass string + Lang string + AlternateURL string + Assets Assets + HasMath bool + Notes []NoteLink + Tags []TagLink + SEO seo.SEOData + Pagination PaginationData +} + +func New(templatesDir string) Renderer { + return Renderer{TemplatesDir: templatesDir} +} + +func (r Renderer) RenderIndex(outputPath string, data IndexData) error { + return r.render(outputPath, "index.html", data) +} + +func (r Renderer) RenderNotes(outputPath string, data NotesData) error { + return r.render(outputPath, "notes.html", data) +} + +func (r Renderer) RenderMemos(outputPath string, data MemosData) error { + return r.render(outputPath, "memos.html", data) +} + +func (r Renderer) RenderArchive(outputPath string, data ArchiveData) error { + return r.render(outputPath, "archive.html", data) +} + +func (r Renderer) RenderNote(outputPath string, data NoteData) error { + return r.render(outputPath, "note.html", data) +} + +func (r Renderer) RenderAbout(outputPath string, data AboutData) error { + return r.render(outputPath, "about.html", data) +} + +func (r Renderer) RenderGraph(outputPath string, data GraphData) error { + return r.render(outputPath, "graph.html", data) +} + +func (r Renderer) RenderTag(outputPath string, data TagData) error { + return r.render(outputPath, "tag.html", data) +} + +func NewGoldenSpiral() GoldenSpiral { + phi := (1 + math.Sqrt(5)) / 2 + const hiddenDuration = 0.61803398875 + const maxSquares = 15 + + baseOuterRect := goldenRect{ + x: 560, + y: 140, + w: 1080, + h: 1080 / phi, + } + baseSquares, basePole := subdivideGoldenRect(baseOuterRect, maxSquares) + if len(baseSquares) == 0 { + return GoldenSpiral{} + } + + baseOuterAnchor := point{x: baseOuterRect.x, y: baseOuterRect.y + baseOuterRect.h} + _, visualAnchor, _ := buildSpiralPath(basePole, baseOuterAnchor, float64(len(baseSquares)), 0) + + outerRect := scaleRectAround(baseOuterRect, visualAnchor, phi*phi*phi) + squares, pole := subdivideGoldenRect(outerRect, maxSquares) + + if len(squares) == 0 { + return GoldenSpiral{} + } + + s0 := squares[0].s + + diagonalDrafts := []goldenGuideDraft{ + diagonalFromPole( + point{x: outerRect.x, y: outerRect.y}, + point{x: outerRect.x + outerRect.w, y: outerRect.y + outerRect.h}, + pole, + ), + diagonalFromPole( + point{x: outerRect.x + outerRect.w, y: outerRect.y}, + point{x: outerRect.x + s0, y: outerRect.y + outerRect.h}, + pole, + ), + } + squareDrafts := make([]goldenGuideDraft, 0, len(squares)) + for _, square := range squares { + draft := squareFromPole(square.x, square.y, square.s, pole) + squareDrafts = append(squareDrafts, draft) + } + + allGuides := append([]goldenGuideDraft{}, diagonalDrafts...) + allGuides = append(allGuides, squareDrafts...) + minDistance, maxDistance := guideDistanceRange(allGuides) + + curveGrowStart := phi + guideGrowEnd := 5 * phi + // 螺旋路径延长�,生长时长 = 辅助线生长时长 × φ = 5φ² + curveGrowDuration := 5 * phi * phi + curveGrowEnd := curveGrowStart + curveGrowDuration + curveShrinkStart := curveGrowEnd + phi + + // 收缩顺�:螺旋曲线先收缩到起点,��辅助线�收缩并消失。 + // 收缩时长 = 对应生长时长 ÷ φ(收缩比生长快 φ �)。 + // 曲线收缩 = 5φ² ÷ φ = 5φ + // 辅助线收缩 = 5φ ÷ φ = 5 + curveShrinkDuration := curveGrowDuration / phi + curveShrinkEnd := curveShrinkStart + curveShrinkDuration + curveHideAt := curveShrinkEnd + 0.12 + + guideShrinkStart := curveShrinkEnd + guideShrinkEnd := guideShrinkStart + guideGrowEnd/phi + guideHideAt := guideShrinkEnd + 0.12 + + loopDuration := guideHideAt + hiddenDuration + + guides := make([]GoldenGuide, 0, len(diagonalDrafts)+len(squareDrafts)) + guideOrder := 0 + segOrder := 0 + for _, draft := range diagonalDrafts { + g := guideFromDraft(guideOrder, segOrder, draft, minDistance, maxDistance, phi, guideGrowEnd, guideShrinkStart, guideShrinkEnd, guideHideAt, loopDuration) + guides = append(guides, g) + guideOrder++ + segOrder += len(g.Segments) + } + for _, draft := range squareDrafts { + g := guideFromDraft(guideOrder, segOrder, draft, minDistance, maxDistance, phi, guideGrowEnd, guideShrinkStart, guideShrinkEnd, guideHideAt, loopDuration) + guides = append(guides, g) + guideOrder++ + segOrder += len(g.Segments) + } + + spiralOuterAnchor := point{x: outerRect.x, y: outerRect.y + outerRect.h} + spiralInnerQuarterTurns := float64(len(squares)) + outerQuarterTurns := 0.0 + spiralPath, spiralStart, spiralEnd := buildSpiralPath(pole, spiralOuterAnchor, spiralInnerQuarterTurns, outerQuarterTurns) + + return GoldenSpiral{ + PoleX: fmt.Sprintf("%.2f", pole.x), + PoleY: fmt.Sprintf("%.2f", pole.y), + SpinCenterX: fmt.Sprintf("%.2f", spiralStart.x), + SpinCenterY: fmt.Sprintf("%.2f", spiralStart.y), + SpinDuration: "52.416s", + OuterRect: fmt.Sprintf("%.2f %.2f %.2f %.2f", outerRect.x, outerRect.y, outerRect.w, outerRect.h), + OuterRectLeftTop: fmt.Sprintf("%.2f %.2f", outerRect.x, outerRect.y), + OuterRectRightBottom: fmt.Sprintf("%.2f %.2f", outerRect.x+outerRect.w, outerRect.y+outerRect.h), + SpiralOuterCorner: "outerRect left-bottom", + SpiralVisualStart: fmt.Sprintf("%.2f %.2f", spiralStart.x, spiralStart.y), + SpiralVisualEnd: fmt.Sprintf("%.2f %.2f", spiralEnd.x, spiralEnd.y), + SpiralOuterQuarterTurns: fmt.Sprintf("%.0f", outerQuarterTurns), + SpiralInnerQuarterTurns: fmt.Sprintf("%.0f", spiralInnerQuarterTurns), + LoopDuration: fmt.Sprintf("%.3fs", loopDuration), + CurveStartPct: pct(curveGrowStart, loopDuration), + CurveFadePct: pct(curveGrowStart+0.12, loopDuration), + CurveGrowEndPct: pct(curveGrowEnd, loopDuration), + CurveShrinkStartPct: pct(curveShrinkStart, loopDuration), + CurveShrinkEndPct: pct(curveShrinkEnd, loopDuration), + CurveHidePct: pct(curveHideAt, loopDuration), + Guides: guides, + SpiralPath: spiralPath, + } +} + +type point struct { + x float64 + y float64 +} + +func scaleRectAround(rect goldenRect, anchor point, scale float64) goldenRect { + return goldenRect{ + x: anchor.x + (rect.x-anchor.x)*scale, + y: anchor.y + (rect.y-anchor.y)*scale, + w: rect.w * scale, + h: rect.h * scale, + } +} + +func subdivideGoldenRect(rect goldenRect, maxSquares int) ([]goldenSquare, point) { + cx := rect.x + cy := rect.y + cw := rect.w + ch := rect.h + + squares := make([]goldenSquare, 0, maxSquares) + dir := 0 + for i := 0; i < maxSquares*4; i++ { + s := math.Min(cw, ch) + if s <= 2.0 { + break + } + + switch dir { + case 0: + if len(squares) < maxSquares { + squares = append(squares, goldenSquare{x: cx, y: cy, s: s}) + } + cx += s + cw -= s + case 1: + if len(squares) < maxSquares { + squares = append(squares, goldenSquare{x: cx, y: cy, s: s}) + } + cy += s + ch -= s + case 2: + if len(squares) < maxSquares { + squares = append(squares, goldenSquare{x: cx + cw - s, y: cy, s: s}) + } + cw -= s + default: + if len(squares) < maxSquares { + squares = append(squares, goldenSquare{x: cx, y: cy + ch - s, s: s}) + } + ch -= s + } + + dir = (dir + 1) % 4 + } + + return squares, point{x: cx + cw/2, y: cy + ch/2} +} + +func buildSpiralPath(pole, outerAnchor point, innerQuarterTurns, outerQuarterTurns float64) (string, point, point) { + const quarter = math.Pi / 2 + b := math.Log((1+math.Sqrt(5))/2) / quarter + r0 := distance(outerAnchor, pole) + theta0 := math.Atan2(outerAnchor.y-pole.y, outerAnchor.x-pole.x) + outerT := -outerQuarterTurns * quarter + innerT := innerQuarterTurns * quarter + const bezierStep = math.Pi / 12 + + P := func(t float64) point { + r := r0 * math.Exp(-b*t) + a := theta0 + t + return point{pole.x + r*math.Cos(a), pole.y + r*math.Sin(a)} + } + Pd := func(t float64) point { + r := r0 * math.Exp(-b*t) + a := theta0 + t + dx := r * (-b*math.Cos(a) - math.Sin(a)) + dy := r * (-b*math.Sin(a) + math.Cos(a)) + return point{dx, dy} + } + + parts := make([]string, 0) + startPoint := P(innerT) + parts = append(parts, fmt.Sprintf("M %.2f %.2f", startPoint.x, startPoint.y)) + + for t := innerT; t > outerT; t -= bezierStep { + tNext := t - bezierStep + if tNext < outerT { + tNext = outerT + } + delta := t - tNext + p0, pd0 := P(t), Pd(t) + p1, pd1 := P(tNext), Pd(tNext) + c1x := p0.x - pd0.x*delta/3 + c1y := p0.y - pd0.y*delta/3 + c2x := p1.x + pd1.x*delta/3 + c2y := p1.y + pd1.y*delta/3 + parts = append(parts, fmt.Sprintf("C %.2f %.2f, %.2f %.2f, %.2f %.2f", c1x, c1y, c2x, c2y, p1.x, p1.y)) + if tNext <= outerT { + break + } + } + + return strings.Join(parts, " "), startPoint, P(outerT) +} +func squareFromPole(x, y, size float64, pole point) goldenGuideDraft { + corners := []point{ + {x: x, y: y}, + {x: x + size, y: y}, + {x: x + size, y: y + size}, + {x: x, y: y + size}, + } + + start := 0 + minDistance := distance(corners[0], pole) + for i := 1; i < len(corners); i++ { + if d := distance(corners[i], pole); d < minDistance { + start = i + minDistance = d + } + } + + ordered := make([]point, 0, len(corners)) + for i := 0; i < len(corners); i++ { + ordered = append(ordered, corners[(start+i)%len(corners)]) + } + + return goldenGuideDraft{ + points: []point{ordered[0], ordered[1], ordered[2], ordered[3], ordered[0]}, + distance: minDistance, + kind: "rect", + } +} + +func diagonalFromPole(a, b, pole point) goldenGuideDraft { + if distance(b, pole) < distance(a, pole) { + a, b = b, a + } + return goldenGuideDraft{ + points: []point{a, b}, + distance: distance(a, pole), + kind: "diagonal", + } +} + +func guideDistanceRange(guides []goldenGuideDraft) (float64, float64) { + if len(guides) == 0 { + return 0, 1 + } + + minDistance := guides[0].distance + maxDistance := guides[0].distance + for _, guide := range guides[1:] { + minDistance = math.Min(minDistance, guide.distance) + maxDistance = math.Max(maxDistance, guide.distance) + } + if maxDistance == minDistance { + maxDistance = minDistance + 1 + } + + return minDistance, maxDistance +} + +func guideFromDraft(guideOrder, baseSegOrder int, draft goldenGuideDraft, minDistance, maxDistance, maxDelay, growEnd, shrinkBase, shrinkEnd, hideAt, loopDuration float64) GoldenGuide { + ratio := 0.0 + if maxDistance > minDistance { + ratio = (draft.distance - minDistance) / (maxDistance - minDistance) + } + growDelay := ratio * maxDelay + shrinkDelay := (1 - ratio) * maxDelay + shrinkStart := shrinkBase + shrinkDelay + + growDuration := growEnd - growDelay + shrinkDuration := shrinkEnd - shrinkStart + + pts := draft.points + numEdges := len(pts) - 1 + lengths := make([]float64, numEdges) + totalLength := 0.0 + for i := 0; i < numEdges; i++ { + l := distance(pts[i], pts[i+1]) + lengths[i] = l + totalLength += l + } + + segments := make([]GoldenGuideSegment, numEdges) + + const overlapSec = 0.03 // 30ms overlap + + currentGrow := growDelay + for i := 0; i < numEdges; i++ { + p0, p1 := pts[i], pts[i+1] + l := lengths[i] + ratioL := l / totalLength + + dx, dy := p1.x-p0.x, p1.y-p0.y + angle := math.Atan2(dy, dx) * 180 / math.Pi + + segGrowEnd := currentGrow + growDuration*ratioL + + segGrowStartReal := currentGrow + if i > 0 { + // Pull back the start time by overlapSec to create a slight overlap + segGrowStartReal = currentGrow - overlapSec + } + + sumAfter := 0.0 + for j := i + 1; j < numEdges; j++ { + sumAfter += lengths[j] + } + + segShrinkStart := shrinkStart + shrinkDuration*(sumAfter/totalLength) + segShrinkEnd := segShrinkStart + shrinkDuration*ratioL + + segShrinkStartReal := segShrinkStart + if i < numEdges-1 { + // For shrink, overlap means starting earlier for the NEXT segment in shrink order. + // Edge 3 shrinks first, Edge 2 next. Edge 2 should start 30ms before Edge 3 finishes. + // Wait, the order of shrink is i from numEdges-1 down to 0. + // So segShrinkStart for edge i should be pulled back. + segShrinkStartReal = segShrinkStart - overlapSec + } + + segments[i] = GoldenGuideSegment{ + TranslateX: fmt.Sprintf("%.2f", p0.x), + TranslateY: fmt.Sprintf("%.2f", p0.y), + Rotation: fmt.Sprintf("%.2f", angle), + Length: fmt.Sprintf("%.2f", l), + Order: baseSegOrder + i, + + GrowStartPct: pct(segGrowStartReal, loopDuration), + GrowEndPct: pct(segGrowEnd, loopDuration), + ShrinkStartPct: pct(segShrinkStartReal, loopDuration), + ShrinkEndPct: pct(segShrinkEnd, loopDuration), + } + + currentGrow = segGrowEnd + } + + return GoldenGuide{ + Order: guideOrder, + Kind: draft.kind, + + GrowStartPct: pct(growDelay, loopDuration), + GrowFadePct: pct(growDelay+0.12, loopDuration), + GrowEndPct: pct(growEnd, loopDuration), + + ShrinkStartPct: pct(shrinkStart, loopDuration), + ShrinkEndPct: pct(shrinkEnd, loopDuration), + + HidePct: pct(hideAt, loopDuration), + + Segments: segments, + } +} + +func distance(a, b point) float64 { + return math.Hypot(a.x-b.x, a.y-b.y) +} + +func pct(t, total float64) string { + return fmt.Sprintf("%.3f", t/total*100) +} + +func (r Renderer) render(outputPath, pageTemplate string, data any) error { + files, err := r.templateFiles(pageTemplate) + if err != nil { + return fmt.Errorf("解�模�: %w", err) + } + + tmpl := template.New(filepath.Base(files[0])).Funcs(template.FuncMap{ + "dict": func(values ...interface{}) (map[string]interface{}, error) { + if len(values)%2 != 0 { + return nil, fmt.Errorf("invalid dict call") + } + dict := make(map[string]interface{}, len(values)/2) + for i := 0; i < len(values); i += 2 { + key, ok := values[i].(string) + if !ok { + return nil, fmt.Errorf("dict keys must be strings") + } + dict[key] = values[i+1] + } + return dict, nil + }, + "morphableText": func(text, key, classPrefix string) template.HTML { + return morphable.GenerateHTML(text, key, classPrefix, true) + }, + "morphableTitle": func(text, key, classPrefix string) template.HTML { + return morphable.GenerateHTML(text, key, classPrefix, false) + }, + "formatNum": func(n int) string { + s := fmt.Sprintf("%d", n) + var parts []string + for i := len(s); i > 0; i -= 3 { + if i-3 > 0 { + parts = append([]string{s[i-3 : i]}, parts...) + } else { + parts = append([]string{s[:i]}, parts...) + } + } + return strings.Join(parts, ",") + }, + "T": i18n.T, + "uiTranslations": func() template.JS { return template.JS(i18n.JSON()) }, + "tagURL": func(lang, tag string) template.URL { + prefix := "" + if lang == "en_US" { + prefix = "/en_US" + } + return template.URL(prefix + "/tags/" + seo.TagSlug(tag) + "/") + }, + "tagSlug": seo.TagSlug, + }) + tmpl, err = tmpl.ParseFS(embedded.FS, files...) + if err != nil { + return fmt.Errorf("解�模�: %w", err) + } + + if err := os.MkdirAll(filepath.Dir(outputPath), 0755); err != nil { + return fmt.Errorf("创建输出目录: %w", err) + } + + file, err := os.Create(outputPath) + if err != nil { + return fmt.Errorf("创建输出文件: %w", err) + } + defer file.Close() + + if err := tmpl.ExecuteTemplate(file, "base", data); err != nil { + return fmt.Errorf("渲染模�: %w", err) + } + + return nil +} + +func (r Renderer) templateFiles(pageTemplate string) ([]string, error) { + // r.TemplatesDir should be "templates" + // To use ParseFS, we should use forward slashes. + dir := "templates" + files := []string{ + dir + "/layouts/base.html", + dir + "/partials/*.html", + dir + "/pages/" + pageTemplate, + } + return files, nil +} diff --git a/internal/render/render_test.go b/internal/render/render_test.go new file mode 100644 index 00000000..b4fcfcee --- /dev/null +++ b/internal/render/render_test.go @@ -0,0 +1,132 @@ +package render + +import ( + "math" + "strconv" + "os" + "strings" + "testing" +) + +func TestNewGoldenSpiralUsesOversizedOuterRect(t *testing.T) { + spiral := NewGoldenSpiral() + _, _, width, height := parseRect(t, spiral.OuterRect) + + phi := (1 + math.Sqrt(5)) / 2 + wantWidth := 1080 * phi * phi * phi + wantHeight := 1080 * phi * phi + if math.Abs(width-wantWidth) > 0.02 { + t.Fatalf("outer rect width = %.2f, want %.2f", width, wantWidth) + } + if math.Abs(height-wantHeight) > 0.02 { + t.Fatalf("outer rect height = %.2f, want %.2f", height, wantHeight) + } + if width <= 1600 || height <= 900 { + t.Fatalf("outer rect should exceed viewBox, got %.2fx%.2f", width, height) + } + if strings.TrimSpace(spiral.SpiralPath) == "" { + t.Fatal("spiral path should not be empty") + } + if spiral.SpinCenterX == "" || spiral.SpinCenterY == "" { + t.Fatal("spin center should be set") + } +} + +func parseRect(t *testing.T, rect string) (float64, float64, float64, float64) { + t.Helper() + + fields := strings.Fields(rect) + if len(fields) != 4 { + t.Fatalf("rect %q should contain 4 numbers", rect) + } + + values := make([]float64, 4) + for i, field := range fields { + value, err := strconv.ParseFloat(field, 64) + if err != nil { + t.Fatalf("parse rect value %q: %v", field, err) + } + values[i] = value + } + + return values[0], values[1], values[2], values[3] +} + +func TestGoldenSpiralGeometryRegression(t *testing.T) { + spiral := NewGoldenSpiral() + + // 1. Verify finite numbers + checkFinite := func(name, val string) float64 { + v, err := strconv.ParseFloat(val, 64) + if err != nil { + t.Fatalf("Failed to parse %s: %v", name, err) + } + if math.IsNaN(v) || math.IsInf(v, 0) { + t.Fatalf("%s is not finite: %v", name, v) + } + return v + } + + startX := checkFinite("SpiralVisualStart X", strings.Fields(spiral.SpiralVisualStart)[0]) + startY := checkFinite("SpiralVisualStart Y", strings.Fields(spiral.SpiralVisualStart)[1]) + endX := checkFinite("SpiralVisualEnd X", strings.Fields(spiral.SpiralVisualEnd)[0]) + endY := checkFinite("SpiralVisualEnd Y", strings.Fields(spiral.SpiralVisualEnd)[1]) + poleX := checkFinite("Pole X", spiral.PoleX) + poleY := checkFinite("Pole Y", spiral.PoleY) + + // 2. Radius should decrease as it spirals inward (t > 0, exp(-bt)) + // The visual start corresponds to innerT, visual end corresponds to outerT (t=0 or negative) + startDist := math.Hypot(startX-poleX, startY-poleY) + endDist := math.Hypot(endX-poleX, endY-poleY) + + if startDist >= endDist { + t.Fatalf("Regression: Spiral is expanding inward! start radius=%.2f, end radius=%.2f. Expected start < end", startDist, endDist) + } + + // 3. Verify start/end coordinates are roughly correct to prevent sign flip + // With the known configuration, pole is roughly at 1100, 540. + // Outer Anchor is around 560, 540. The anchor distances should not explode. + if endDist > 10000 || endDist < 100 { + t.Fatalf("Regression: Spiral scale is completely broken. End distance to pole: %.2f", endDist) + } + + // 4. Bézier path must contain 'C' + if !strings.Contains(spiral.SpiralPath, "C") { + t.Fatalf("Regression: Spiral path does not use Cubic Bézier segments. Path: %v", spiral.SpiralPath[:100]) + } +} + +func TestGoldenSpiralCSSRegression(t *testing.T) { + // 简�读� about.css + content, err := os.ReadFile("../../internal/embedded/static/css/pages/about.css") + if err != nil { + t.Fatalf("无法读� about.css: %v", err) + } + css := string(content) + + // 1. 确� .golden-curve �与了公共样�(fill: none; 等) + if !strings.Contains(css, ".golden-rect,\n.golden-diagonal,\n.golden-curve {") { + t.Fatalf("回归: .golden-curve 没有包�在 .golden-rect, .golden-diagonal 的公共样��中,会导致巨大黑�") + } + + // 2. 检查 fill: none 和 animation 属性是�在公共�中 + sharedBlockIndex := strings.Index(css, ".golden-rect,\n.golden-diagonal,\n.golden-curve {") + if sharedBlockIndex == -1 { + t.Fatal() + } + sharedBlockEnd := strings.Index(css[sharedBlockIndex:], "}") + if sharedBlockEnd == -1 { + t.Fatal() + } + sharedBlock := css[sharedBlockIndex : sharedBlockIndex+sharedBlockEnd] + + if !strings.Contains(sharedBlock, "fill: none;") { + t.Errorf("回归: 公共�丢失了 fill: none;") + } + if !strings.Contains(sharedBlock, "animation-duration:") { + t.Errorf("回归: 公共�丢失了 animation-duration:") + } + if !strings.Contains(sharedBlock, "animation-iteration-count: infinite;") { + t.Errorf("回归: 公共�丢失了 animation-iteration-count: infinite;") + } +} diff --git a/internal/search/.gitkeep b/internal/search/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/internal/search/index.go b/internal/search/index.go new file mode 100644 index 00000000..c2dc86fe --- /dev/null +++ b/internal/search/index.go @@ -0,0 +1,110 @@ +package search + +import ( + "encoding/json" + "fmt" + "html/template" + "os" + + "github.com/StatIndet/daybook/internal/content" + "github.com/StatIndet/daybook/internal/morphable" +) + +type IndexVersion struct { + Title string `json:"title"` + Summary string `json:"summary"` + Tags []string `json:"tags"` + TagIDs []string `json:"tagIDs"` + Date string `json:"date"` + URL string `json:"url"` + ReadingTime string `json:"readingTime,omitempty"` + ReadingMinutes int `json:"readingMinutes,omitempty"` + Updated string `json:"updated"` + Slug string `json:"slug"` + Pinned bool `json:"pinned"` + HasMusic bool `json:"hasMusic"` + HasTranslation bool `json:"hasTranslation"` + TitleLayout template.HTML `json:"titleLayout"` + Section string `json:"section"` + Location string `json:"location,omitempty"` +} + +type IndexItem struct { + I18nKey string `json:"i18n_key"` + Versions map[string]IndexVersion `json:"versions"` +} + +func BuildIndex(groups []*content.ArticleGroup, estimateReadingTime func(string) string, tagRegistry *content.TagRegistry, outputPath string, onProgress func(current, total int)) error { + var items []IndexItem + + for i, group := range groups { + versions := make(map[string]IndexVersion) + hasTranslation := len(group.PublishedVersions()) > 1 + + for lang, note := range group.Versions { + if note.Draft { + continue + } + + var tagIDs []string + var displayTags []string + seenTags := make(map[string]bool) + + for _, rawTag := range note.Tags { + canonicalID := tagRegistry.GetID(rawTag) + if seenTags[canonicalID] { + continue + } + seenTags[canonicalID] = true + displayTags = append(displayTags, tagRegistry.GetTitle(canonicalID)) + tagIDs = append(tagIDs, canonicalID) + } + + titleLayoutHTML := morphable.GenerateHTML(note.Title, note.URL, "title") + readingTime := "" + if note.Section != "memos" { + readingTime = estimateReadingTime(note.Body) + } + + versions[lang] = IndexVersion{ + Title: note.Title, + Summary: note.Summary, + Tags: displayTags, + TagIDs: tagIDs, + Date: note.Date, + URL: note.URL, + ReadingTime: readingTime, + ReadingMinutes: note.ReadingMinutes, + Updated: note.Updated, + Slug: note.Slug, + Pinned: note.Pinned, + HasMusic: note.HasMusic, + HasTranslation: hasTranslation, + TitleLayout: titleLayoutHTML, + Section: note.Section, + Location: note.Location, + } + } + + if len(versions) > 0 { + items = append(items, IndexItem{ + I18nKey: group.I18nKey, + Versions: versions, + }) + } + if onProgress != nil { + onProgress(i+1, len(groups)) + } + } + + data, err := json.Marshal(items) + if err != nil { + return fmt.Errorf("�列化�索索引: %w", err) + } + + if err := os.WriteFile(outputPath, data, 0644); err != nil { + return fmt.Errorf("写入�索索引文件: %w", err) + } + + return nil +} diff --git a/internal/seo/builder.go b/internal/seo/builder.go new file mode 100644 index 00000000..ed8ba482 --- /dev/null +++ b/internal/seo/builder.go @@ -0,0 +1,407 @@ +package seo + +import ( + "encoding/json" + "html/template" + "net/url" + "regexp" + "strings" + + "github.com/StatIndet/daybook/internal/config" + "github.com/StatIndet/daybook/internal/github" + "github.com/StatIndet/daybook/internal/i18n" +) + +type BuilderArgs struct { + GitHub *github.Profile + Config config.Config + Lang string + Title string + Description string + PageURL string + Image string + ImageWidth int + ImageHeight int + ImageType string + Published string + Modified string + Tags []string + Alternates []Alternate +} + +func TagSlug(tag string) string { + tag = strings.TrimSpace(tag) + + reSpace := regexp.MustCompile(`\s+`) + tag = reSpace.ReplaceAllString(tag, "-") + + unsafeChars := []string{"/", "?", "#", "[", "]", "@", "!", "$", "&", "'", "(", ")", "*", "+", ",", ";", "="} + for _, char := range unsafeChars { + tag = strings.ReplaceAll(tag, char, "") + } + + reDash := regexp.MustCompile(`-+`) + tag = reDash.ReplaceAllString(tag, "-") + tag = strings.Trim(tag, "-") + + return tag +} + +func CleanDescription(desc string) string { + desc = strings.ReplaceAll(desc, "\n", " ") + reSpace := regexp.MustCompile(`\s+`) + desc = reSpace.ReplaceAllString(desc, " ") + desc = strings.TrimSpace(desc) + + runes := []rune(desc) + if len(runes) > 160 { + return string(runes[:157]) + "..." + } + return desc +} + +func buildJSONLD(graph []any) template.JS { + wrapper := JSONLDGraph{ + Context: "https://schema.org", + Graph: graph, + } + b, err := json.Marshal(wrapper) + if err != nil { + return "" + } + return template.JS(string(b)) +} + +func absURL(cfg config.Config, path string) string { + baseURL := strings.TrimSuffix(cfg.Site.URL, "/") + if !strings.HasPrefix(path, "/") { + path = "/" + path + } + return baseURL + path +} + +// imageURL leaves optional and external images intact while resolving generated +// assets with the same site URL prefix used by canonical page URLs. +func imageURL(cfg config.Config, image string) string { + if image == "" { + return "" + } + ref, err := url.Parse(image) + if err == nil { + if ref.IsAbs() { + return image + } + if ref.Host != "" { + if base, err := url.Parse(cfg.Site.URL); err == nil { + return base.ResolveReference(ref).String() + } + } + } + return absURL(cfg, image) +} + +func BuildForHome(args BuilderArgs) SEOData { + siteName := args.Config.GetSiteName(args.Lang) + for i := range args.Alternates { + args.Alternates[i].URL = absURL(args.Config, args.Alternates[i].URL) + } + + url := absURL(args.Config, args.PageURL) + desc := CleanDescription(args.Description) + person := Person{Type: "Person", ID: absURL(args.Config, "/#person"), Name: args.Config.Profile.Author.Name, AlternateName: args.Config.Profile.Author.NameEn, URL: absURL(args.Config, "/")} + image := args.Image + if args.GitHub != nil { + person.URL = args.GitHub.HTMLURL + person.Description = desc + person.Image = args.GitHub.AvatarSize(520) + person.SameAs = []string{args.GitHub.HTMLURL} + for _, account := range args.GitHub.SocialAccounts { + if account.URL != "" { + person.SameAs = append(person.SameAs, account.URL) + } + } + image = person.Image + } + + graph := []any{ + person, + WebSite{ + Type: "WebSite", + ID: url + "#website", + URL: url, + Name: args.Title, + Description: desc, + Author: &Person{ + ID: absURL(args.Config, "/#person"), + }, + Publisher: &Organization{ + Type: "Organization", + ID: absURL(args.Config, "/") + "#organization", + Name: siteName, + URL: absURL(args.Config, "/"), + }, + }, + } + + return SEOData{ + Title: args.Title, + Description: desc, + CanonicalURL: url, + PageURL: url, + SiteName: siteName, + Lang: args.Lang, + Type: "website", + Image: image, + AuthorName: person.Name, + AuthorURL: person.URL, + Alternates: args.Alternates, + JSONLD: buildJSONLD(graph), + } +} + +func BuildForNote(args BuilderArgs) SEOData { + return buildForPost(args, "notes", "BlogPosting") +} + +// BuildForMemo gives a social post its own title and structured-data semantics; +// the caller supplies a plain-text excerpt of the memo body as Description. +func BuildForMemo(args BuilderArgs) SEOData { + author := args.Config.Profile.Author.Name + if (args.Lang == "en_US" || author == "") && args.Config.Profile.Author.NameEn != "" { + author = args.Config.Profile.Author.NameEn + } + if author == "" { + author = args.Config.GetSiteName(args.Lang) + } + args.Title = author + if date := strings.SplitN(args.Published, "T", 2)[0]; date != "" { + args.Title += " · " + date + } + return buildForPost(args, "memos", "SocialMediaPosting") +} + +func buildForPost(args BuilderArgs, section, schemaType string) SEOData { + siteName := args.Config.GetSiteName(args.Lang) + args.Alternates = append([]Alternate(nil), args.Alternates...) + for i := range args.Alternates { + args.Alternates[i].URL = absURL(args.Config, args.Alternates[i].URL) + } + + url := absURL(args.Config, args.PageURL) + desc := CleanDescription(args.Description) + image := imageURL(args.Config, args.Image) + + homePath := "/" + if args.Lang == "en_US" { + homePath = "/en_US/" + } + collectionPath := homePath + section + "/" + + modTime := args.Modified + if modTime == "" { + modTime = args.Published + } + + graph := []any{ + BlogPosting{ + Type: schemaType, + ID: url + "#article", + URL: url, + Headline: args.Title, + Description: desc, + DatePublished: args.Published, + DateModified: modTime, + MainEntityOfPage: url, + Keywords: strings.Join(args.Tags, ", "), + Image: image, + Author: &Person{ + ID: absURL(args.Config, "/#person"), + }, + }, + BreadcrumbList{ + Type: "BreadcrumbList", + ID: url + "#breadcrumb", + ItemListElement: []ListItem{ + {Type: "ListItem", Position: 1, Name: i18n.T(args.Lang, "nav.home"), Item: absURL(args.Config, homePath)}, + {Type: "ListItem", Position: 2, Name: i18n.T(args.Lang, "nav."+section), Item: absURL(args.Config, collectionPath)}, + {Type: "ListItem", Position: 3, Name: args.Title, Item: url}, + }, + }, + } + + return SEOData{ + Title: args.Title + " | " + siteName, + SocialTitle: args.Title, + Description: desc, + CanonicalURL: url, + PageURL: url, + SiteName: siteName, + Lang: args.Lang, + Type: "article", + Image: image, + ImageWidth: args.ImageWidth, + ImageHeight: args.ImageHeight, + ImageType: args.ImageType, + Published: args.Published, + Modified: modTime, + Tags: args.Tags, + Alternates: args.Alternates, + JSONLD: buildJSONLD(graph), + } +} + +func BuildForAbout(args BuilderArgs) SEOData { + siteName := args.Config.GetSiteName(args.Lang) + for i := range args.Alternates { + args.Alternates[i].URL = absURL(args.Config, args.Alternates[i].URL) + } + + url := absURL(args.Config, args.PageURL) + desc := CleanDescription(args.Description) + modTime := args.Modified + if modTime == "" { + modTime = args.Published + } + + graph := []any{ + Person{ + Type: "Person", + ID: absURL(args.Config, "/#person"), + Name: args.Config.Profile.Author.Name, + AlternateName: args.Config.Profile.Author.NameEn, + URL: absURL(args.Config, "/about/"), + }, + AboutPage{ + Type: "AboutPage", + ID: url + "#about", + URL: url, + Name: args.Title, + Description: desc, + DatePublished: args.Published, + DateModified: modTime, + MainEntityOfPage: url, + }, + } + + return SEOData{ + Title: args.Title + " | " + siteName, + Description: desc, + CanonicalURL: url, + PageURL: url, + SiteName: siteName, + Lang: args.Lang, + Type: "profile", + Alternates: args.Alternates, + JSONLD: buildJSONLD(graph), + } +} + +func BuildForCollection(args BuilderArgs) SEOData { + siteName := args.Config.GetSiteName(args.Lang) + for i := range args.Alternates { + args.Alternates[i].URL = absURL(args.Config, args.Alternates[i].URL) + } + + url := absURL(args.Config, args.PageURL) + desc := CleanDescription(args.Description) + + graph := []any{ + CollectionPage{ + Type: "CollectionPage", + ID: url + "#collection", + URL: url, + Name: args.Title, + Description: desc, + }, + } + + return SEOData{ + Title: args.Title + " | " + siteName, + Description: desc, + CanonicalURL: url, + PageURL: url, + SiteName: siteName, + Lang: args.Lang, + Type: "website", + Alternates: args.Alternates, + JSONLD: buildJSONLD(graph), + } +} + +func BuildForGraph(args BuilderArgs) SEOData { + siteName := args.Config.GetSiteName(args.Lang) + for i := range args.Alternates { + args.Alternates[i].URL = absURL(args.Config, args.Alternates[i].URL) + } + + url := absURL(args.Config, args.PageURL) + desc := CleanDescription(args.Description) + + graph := []any{ + WebPage{ + Type: "WebPage", + ID: url + "#webpage", + URL: url, + Name: args.Title, + Description: desc, + }, + } + + return SEOData{ + Title: args.Title + " | " + siteName, + Description: desc, + CanonicalURL: url, + PageURL: url, + SiteName: siteName, + Lang: args.Lang, + Type: "website", + Alternates: args.Alternates, + JSONLD: buildJSONLD(graph), + } +} + +func BuildForTag(args BuilderArgs) SEOData { + siteName := args.Config.GetSiteName(args.Lang) + for i := range args.Alternates { + args.Alternates[i].URL = absURL(args.Config, args.Alternates[i].URL) + } + + url := absURL(args.Config, args.PageURL) + desc := CleanDescription(args.Description) + + homePath := "/" + if args.Lang == "en_US" { + homePath = "/en_US/" + } + + graph := []any{ + CollectionPage{ + Type: "CollectionPage", + ID: url + "#collection", + URL: url, + Name: args.Title, + Description: desc, + }, + BreadcrumbList{ + Type: "BreadcrumbList", + ID: url + "#breadcrumb", + ItemListElement: []ListItem{ + {Type: "ListItem", Position: 1, Name: i18n.T(args.Lang, "nav.home"), Item: absURL(args.Config, homePath)}, + {Type: "ListItem", Position: 2, Name: i18n.T(args.Lang, "action.tags"), Item: absURL(args.Config, homePath+"tags/")}, + {Type: "ListItem", Position: 3, Name: args.Title, Item: url}, + }, + }, + } + + return SEOData{ + Title: args.Title + " | " + siteName, + Description: desc, + CanonicalURL: url, + PageURL: url, + SiteName: siteName, + Lang: args.Lang, + Type: "website", + Alternates: args.Alternates, + JSONLD: buildJSONLD(graph), + } +} diff --git a/internal/seo/builder_test.go b/internal/seo/builder_test.go new file mode 100644 index 00000000..964b43ad --- /dev/null +++ b/internal/seo/builder_test.go @@ -0,0 +1,64 @@ +package seo_test + +import ( + "testing" + + "github.com/StatIndet/daybook/internal/config" + "github.com/StatIndet/daybook/internal/seo" +) + +func TestSEOBuilder(t *testing.T) { + cfg := config.Config{ + Profile: config.ProfileConfig{Author: config.AuthorConfig{LogoText: "My Blog"}}, + } + + argsZH := seo.BuilderArgs{ + Config: cfg, + Lang: "zh_CN", + Title: "中文首页完整标题", + } + + data := seo.BuildForHome(argsZH) + if data.Title != "中文首页完整标题" { + t.Errorf("expected Title to be '中文首页完整标题', got '%s'", data.Title) + } + if data.SiteName != "My Blog" { + t.Errorf("expected SiteName to be 'My Blog', got '%s'", data.SiteName) + } + + argsEN := seo.BuilderArgs{ + Config: cfg, + Lang: "en_US", + Title: "English Full Home Title", + } + data = seo.BuildForHome(argsEN) + if data.Title != "English Full Home Title" { + t.Errorf("expected Title to be 'English Full Home Title', got '%s'", data.Title) + } + if data.SiteName != "My Blog" { + t.Errorf("expected SiteName to be 'My Blog', got '%s'", data.SiteName) + } + + noteArgsZH := seo.BuilderArgs{ + Config: cfg, + Lang: "zh_CN", + Title: "测试文章", + } + data = seo.BuildForNote(noteArgsZH) + if data.Title != "测试文章 | My Blog" { + t.Errorf("expected '测试文章 | My Blog', got '%s'", data.Title) + } + if data.SiteName != "My Blog" { + t.Errorf("expected SiteName 'My Blog', got '%s'", data.SiteName) + } + + noteArgsEN := seo.BuilderArgs{ + Config: cfg, + Lang: "en_US", + Title: "Test Note", + } + data = seo.BuildForNote(noteArgsEN) + if data.Title != "Test Note | My Blog" { + t.Errorf("expected 'Test Note | My Blog', got '%s'", data.Title) + } +} diff --git a/internal/seo/models.go b/internal/seo/models.go new file mode 100644 index 00000000..8420f04f --- /dev/null +++ b/internal/seo/models.go @@ -0,0 +1,123 @@ +package seo + +import ( + "html/template" +) + +type Alternate struct { + Lang string + URL string +} + +type SEOData struct { + Title string + SocialTitle string + Description string + CanonicalURL string + PageURL string + SiteName string + Lang string + Type string // e.g. website, article, profile + PaginationPrev string + PaginationNext string + Image string + ImageWidth int + ImageHeight int + ImageType string + AuthorName string + AuthorURL string + Robots string + Published string + Modified string + Tags []string + Alternates []Alternate + + JSONLD template.JS // Populated with marshaled JSON-LD graph +} + +type Person struct { + Description string `json:"description,omitempty"` + Image string `json:"image,omitempty"` + SameAs []string `json:"sameAs,omitempty"` + Type string `json:"@type,omitempty"` + ID string `json:"@id"` + Name string `json:"name,omitempty"` + AlternateName string `json:"alternateName,omitempty"` + URL string `json:"url,omitempty"` +} + +type JSONLDGraph struct { + Context string `json:"@context"` + Graph []any `json:"@graph"` +} + +type WebSite struct { + Type string `json:"@type"` + ID string `json:"@id"` + URL string `json:"url"` + Name string `json:"name"` + Description string `json:"description,omitempty"` + Author *Person `json:"author,omitempty"` + Publisher *Organization `json:"publisher,omitempty"` +} + +type Organization struct { + Type string `json:"@type"` + ID string `json:"@id"` + Name string `json:"name"` + URL string `json:"url"` +} + +type BlogPosting struct { + Type string `json:"@type"` + ID string `json:"@id"` + URL string `json:"url"` + Headline string `json:"headline"` + Description string `json:"description,omitempty"` + DatePublished string `json:"datePublished,omitempty"` + DateModified string `json:"dateModified,omitempty"` + Author *Person `json:"author,omitempty"` + MainEntityOfPage string `json:"mainEntityOfPage,omitempty"` + Keywords string `json:"keywords,omitempty"` + Image string `json:"image,omitempty"` +} + +type AboutPage struct { + Type string `json:"@type"` + ID string `json:"@id"` + URL string `json:"url"` + Name string `json:"name"` + Description string `json:"description,omitempty"` + DatePublished string `json:"datePublished,omitempty"` + DateModified string `json:"dateModified,omitempty"` + MainEntityOfPage string `json:"mainEntityOfPage,omitempty"` +} + +type CollectionPage struct { + Type string `json:"@type"` + ID string `json:"@id"` + URL string `json:"url"` + Name string `json:"name"` + Description string `json:"description,omitempty"` +} + +type WebPage struct { + Type string `json:"@type"` + ID string `json:"@id"` + URL string `json:"url"` + Name string `json:"name"` + Description string `json:"description,omitempty"` +} + +type BreadcrumbList struct { + Type string `json:"@type"` + ID string `json:"@id"` + ItemListElement []ListItem `json:"itemListElement"` +} + +type ListItem struct { + Type string `json:"@type"` + Position int `json:"position"` + Name string `json:"name"` + Item string `json:"item"` +} diff --git a/internal/seo/social_test.go b/internal/seo/social_test.go new file mode 100644 index 00000000..84a0e345 --- /dev/null +++ b/internal/seo/social_test.go @@ -0,0 +1,177 @@ +package seo_test + +import ( + "bytes" + "encoding/json" + "html/template" + "strings" + "testing" + "unicode/utf8" + + "github.com/StatIndet/daybook/internal/config" + "github.com/StatIndet/daybook/internal/embedded" + "github.com/StatIndet/daybook/internal/seo" +) + +func socialConfig() config.Config { + return config.Config{ + Site: config.SiteConfig{URL: "https://example.com/"}, + Profile: config.ProfileConfig{Author: config.AuthorConfig{ + Name: "�帙", NameEn: "Shizhi", LogoText: "Daybook", + }}, + } +} + +func TestPostImagesUseAbsoluteURLs(t *testing.T) { + for _, builder := range []struct { + name string + build func(seo.BuilderArgs) seo.SEOData + }{ + {"note", seo.BuildForNote}, + {"memo", seo.BuildForMemo}, + } { + for _, tc := range []struct { + name, image, want string + }{ + {"generated", "/generated/og/notes/中文-a1.png", "https://example.com/generated/og/notes/中文-a1.png"}, + {"relative", "generated/og/memos/post-a1.png", "https://example.com/generated/og/memos/post-a1.png"}, + {"external", "https://images.example.net/card.png", "https://images.example.net/card.png"}, + {"protocol relative", "//images.example.net/card.png", "https://images.example.net/card.png"}, + {"empty", "", ""}, + } { + t.Run(builder.name+"/"+tc.name, func(t *testing.T) { + data := builder.build(seo.BuilderArgs{Config: socialConfig(), Lang: "zh_CN", Title: "中文文章", Image: tc.image}) + if data.Image != tc.want { + t.Fatalf("Image = %q, want %q", data.Image, tc.want) + } + var graph struct { + Graph []struct { + Image string `json:"image"` + } `json:"@graph"` + } + if err := json.Unmarshal([]byte(data.JSONLD), &graph); err != nil { + t.Fatal(err) + } + if graph.Graph[0].Image != tc.want { + t.Fatalf("JSON-LD image = %q, want %q", graph.Graph[0].Image, tc.want) + } + }) + } + } +} + +func TestMemoSocialMetadataUsesPostSemantics(t *testing.T) { + for _, tc := range []struct { + lang, prefix, author, collection string + }{ + {"zh_CN", "", "�帙", "�记"}, + {"en_US", "/en_US", "Shizhi", "Memos"}, + } { + t.Run(tc.lang, func(t *testing.T) { + data := seo.BuildForMemo(seo.BuilderArgs{ + Config: socialConfig(), Lang: tc.lang, Title: "filename-is-not-a-social-title", + Description: " 正文\n\t" + strings.Repeat("中文内容", 80), + Published: "2026-10-04T12:30:00+08:00", PageURL: tc.prefix + "/memos/中文/", + }) + wantTitle := tc.author + " · 2026-10-04" + if data.SocialTitle != wantTitle || data.Title != wantTitle+" | Daybook" { + t.Fatalf("unexpected titles: social=%q browser=%q", data.SocialTitle, data.Title) + } + if !strings.HasPrefix(data.Description, "正文 中文内容") || !strings.HasSuffix(data.Description, "...") || utf8.RuneCountInString(data.Description) != 160 { + t.Fatalf("description is not a bounded plain-text excerpt: %q", data.Description) + } + var graph struct { + Graph []struct { + Type string `json:"@type"` + Headline string `json:"headline"` + ItemListElement []seo.ListItem `json:"itemListElement"` + } `json:"@graph"` + } + if err := json.Unmarshal([]byte(data.JSONLD), &graph); err != nil { + t.Fatal(err) + } + if graph.Graph[0].Type != "SocialMediaPosting" || graph.Graph[0].Headline != wantTitle { + t.Fatalf("unexpected post schema: %+v", graph.Graph[0]) + } + collection := graph.Graph[1].ItemListElement[1] + if collection.Name != tc.collection || collection.Item != "https://example.com"+tc.prefix+"/memos/" { + t.Fatalf("unexpected memo breadcrumb: %+v", collection) + } + }) + } +} + +func TestPostBuildersDoNotMutateAlternates(t *testing.T) { + args := seo.BuilderArgs{Config: socialConfig(), Alternates: []seo.Alternate{{Lang: "zh_CN", URL: "/notes/example/"}}} + first := seo.BuildForNote(args) + second := seo.BuildForNote(args) + if first.Alternates[0].URL != second.Alternates[0].URL || args.Alternates[0].URL != "/notes/example/" { + t.Fatal("reusing builder arguments changed alternate URLs") + } +} + +type socialAssets struct{} + +func (socialAssets) Path(path string) string { return path } + +func renderSocialHead(t *testing.T, data seo.SEOData, pageKind string) string { + t.Helper() + tmpl, err := template.ParseFS(embedded.FS, "templates/partials/head.html") + if err != nil { + t.Fatal(err) + } + var output bytes.Buffer + err = tmpl.ExecuteTemplate(&output, "head", map[string]any{ + "SEO": data, "PageKind": pageKind, "Lang": data.Lang, + "Assets": socialAssets{}, "Config": socialConfig(), "HasMath": false, + }) + if err != nil { + t.Fatal(err) + } + return output.String() +} + +func TestSocialHeadIncludesGeneratedImageMetadata(t *testing.T) { + for _, tc := range []struct { + kind string + build func(seo.BuilderArgs) seo.SEOData + }{ + {"note", seo.BuildForNote}, + {"memo", seo.BuildForMemo}, + } { + t.Run(tc.kind, func(t *testing.T) { + data := tc.build(seo.BuilderArgs{ + Config: socialConfig(), Lang: "zh_CN", Title: "中文标题", Published: "2026-10-04", + Image: "/generated/og/" + tc.kind + "s/card.png", ImageWidth: 1200, ImageHeight: 630, ImageType: "image/png", + }) + head := renderSocialHead(t, data, tc.kind) + for _, want := range []string{ + `` + data.Title + ``, + `property="og:title" content="` + data.SocialTitle + `"`, + `name="twitter:title" content="` + data.SocialTitle + `"`, + `property="og:image" content="` + data.Image + `"`, + `name="twitter:image" content="` + data.Image + `"`, + `property="og:image:width" content="1200"`, + `property="og:image:height" content="630"`, + `property="og:image:type" content="image/png"`, + } { + if !strings.Contains(head, want) { + t.Errorf("head missing %s", want) + } + } + }) + } +} + +func TestSocialHeadDoesNotGiveHomeAvatarCardDimensions(t *testing.T) { + data := seo.BuildForHome(seo.BuilderArgs{Config: socialConfig(), Lang: "zh_CN", Title: "首页", Image: "https://example.com/avatar.jpg"}) + head := renderSocialHead(t, data, "home") + if !strings.Contains(head, `property="og:title" content="首页"`) || !strings.Contains(head, `name="twitter:title" content="首页"`) { + t.Fatal("home must retain its existing title") + } + for _, property := range []string{"og:image:width", "og:image:height", "og:image:type"} { + if strings.Contains(head, property) { + t.Errorf("home avatar should not get generated card metadata %s", property) + } + } +} diff --git a/internal/site/assets.go b/internal/site/assets.go new file mode 100644 index 00000000..f59af145 --- /dev/null +++ b/internal/site/assets.go @@ -0,0 +1,551 @@ +package site + +import ( + "crypto/sha256" + "encoding/hex" + "encoding/json" + "fmt" + "os" + "path" + "path/filepath" + "regexp" + "sort" + "strings" + + "github.com/StatIndet/daybook/internal/embedded" + "github.com/StatIndet/daybook/internal/render" + "io/fs" +) + +const assetHashLength = 10 + +var cssImportRulePattern = regexp.MustCompile(`(?i)@import\s*(?:"[^"]*"|'[^']*'|url\([^)]*\))[^;]*;`) +var cssURLPattern = regexp.MustCompile(`(?i)url\(\s*(?:"([^"\r\n]*)"|'([^'\r\n]*)'|([^\)\s]*))\s*\)`) + +type assetBuilder struct { + staticDir string + publicDir string + manifest map[string]string + processingCSS map[string]bool +} + +func buildAssets(staticDir, publicDir string) (render.Assets, error) { + builder := assetBuilder{ + staticDir: staticDir, + publicDir: publicDir, + manifest: make(map[string]string), + processingCSS: make(map[string]bool), + } + + cssFiles, err := findAssetFiles(staticDir, "css", ".css") + if err != nil { + return render.Assets{}, err + } + for _, webPath := range cssFiles { + if _, err := builder.processCSSAsset(webPath); err != nil { + return render.Assets{}, err + } + } + // Vendor CSS contains @font-face declarations for the existing CJK shards. + // Hash their URLs as well so font updates invalidate the cached stylesheet. + vendorCSS, err := findAssetFiles(staticDir, "vendor", ".css") + if err != nil { + return render.Assets{}, err + } + for _, webPath := range vendorCSS { + if _, err := builder.processCSSAsset(webPath); err != nil { + return render.Assets{}, err + } + } + + jsFiles, err := findAssetFiles(staticDir, "js", ".js") + if err != nil { + return render.Assets{}, err + } + for _, webPath := range jsFiles { + if _, err := builder.processJSAsset(webPath); err != nil { + return render.Assets{}, err + } + } + if err := requireTemplateAssets(builder.manifest); err != nil { + return render.Assets{}, err + } + + assets := render.Assets{Paths: copyManifest(builder.manifest)} + if err := writeAssetsManifest(publicDir, assets.Paths); err != nil { + return render.Assets{}, err + } + + return assets, nil +} + +func requireTemplateAssets(manifest map[string]string) error { + requiredPaths := []string{ + "/css/global.css", + "/js/theme.js", + "/js/code-copy.js", + "/js/toc.js", + "/js/heading-anchors.js", + "/js/note-filters.js", + "/js/lightbox.js", + "/js/mermaid-loader.js", + "/js/gallery.js", + "/js/embeds.js", + "/js/page-transition-engine.js", + "/js/graph-loader.js", + "/js/mobile-drawer.js", + "/js/search-overlay.js", + "/js/daybook-router.js", + "/js/katex-loader.js", + "/js/giscus-loader.js", + "/css/components/giscus-default-light.css", + "/css/components/giscus-default-dark.css", + "/css/components/giscus-warm-light.css", + "/css/components/giscus-warm-dark.css", + } + + for _, originalPath := range requiredPaths { + if _, ok := manifest[originalPath]; !ok { + return fmt.Errorf("缺少模�引用的��资�: %s", originalPath) + } + } + return nil +} + +func copyStaticDir(sourceDir, targetDir string) error { + return copyEmbeddedDirFiltered(sourceDir, targetDir, func(relativePath string, entry fs.DirEntry) bool { + if entry.IsDir() { + return false + } + + relativePath = filepath.ToSlash(relativePath) + lowerPath := strings.ToLower(relativePath) + return strings.HasPrefix(lowerPath, "css/") && strings.HasSuffix(lowerPath, ".css") || + strings.HasPrefix(lowerPath, "js/") && strings.HasSuffix(lowerPath, ".js") + }) +} + +func findAssetFiles(staticDir, subDir, ext string) ([]string, error) { + root := path.Join(staticDir, subDir) + var files []string + err := fs.WalkDir(embedded.FS, root, func(filePath string, entry fs.DirEntry, err error) error { + if err != nil { + return nil + } + if entry.IsDir() || !entry.Type().IsRegular() { + return nil + } + if !strings.EqualFold(path.Ext(filePath), ext) { + return nil + } + relativePath := filePath + if strings.HasPrefix(filePath, staticDir+"/") { + relativePath = filePath[len(staticDir)+1:] + } + files = append(files, "/"+relativePath) + return nil + }) + if err != nil { + return nil, err + } + sort.Strings(files) + return files, nil +} + +func (builder *assetBuilder) processCSSAsset(webPath string) (string, error) { + webPath = cleanAssetWebPath(webPath) + if fingerprintedPath, ok := builder.manifest[webPath]; ok { + return fingerprintedPath, nil + } + if builder.processingCSS[webPath] { + return "", fmt.Errorf("�现循环 CSS @import: %s", webPath) + } + + builder.processingCSS[webPath] = true + defer delete(builder.processingCSS, webPath) + + sourcePath := builder.sourcePath(webPath) + content, err := fs.ReadFile(embedded.FS, sourcePath) + if err != nil { + return "", fmt.Errorf("读� CSS 资� %s: %w", webPath, err) + } + + rewritten, err := builder.rewriteCSSImports(content, webPath) + if err != nil { + return "", err + } + rewritten, err = builder.rewriteCSSURLs(rewritten, webPath) + if err != nil { + return "", err + } + + fingerprintedPath := fingerprintedAssetPath(webPath, rewritten) + if err := writePublicAsset(builder.publicDir, fingerprintedPath, rewritten); err != nil { + return "", err + } + + builder.manifest[webPath] = fingerprintedPath + return fingerprintedPath, nil +} + +func (builder *assetBuilder) rewriteCSSURLs(content []byte, currentWebPath string) ([]byte, error) { + var rewriteErr error + rewritten := cssURLPattern.ReplaceAllStringFunc(string(content), func(rule string) string { + if rewriteErr != nil { + return rule + } + match := cssURLPattern.FindStringSubmatch(rule) + assetURL := match[1] + match[2] + match[3] + if assetURL == "" || strings.HasPrefix(assetURL, "#") || isExternalAssetPath(assetURL) { + return rule + } + // @import url(...) was already rewritten relative to the output CSS + // directory. Do not interpret it again relative to the source tree. + if builder.isBuiltCSSReference(currentWebPath, assetURL) { + return rule + } + assetPath, suffix, _ := strings.Cut(assetURL, "?") + if suffix != "" { + suffix = "?" + suffix + } + assetPath, fragment, _ := strings.Cut(assetPath, "#") + if fragment != "" { + suffix = "#" + fragment + suffix + } + webPath, local := resolveImportedAssetPath(currentWebPath, assetPath) + if !local || path.Ext(webPath) == "" { + return rule + } + fingerprinted, ok := builder.manifest[webPath] + if !ok { + // Custom vault assets are copied separately; leave those URLs intact. + asset, err := fs.ReadFile(embedded.FS, builder.sourcePath(webPath)) + if os.IsNotExist(err) { + return rule + } + if err != nil { + rewriteErr = fmt.Errorf("读� CSS 引用资� %s: %w", webPath, err) + return rule + } + if strings.EqualFold(path.Ext(webPath), ".css") { + fingerprinted, rewriteErr = builder.processCSSAsset(webPath) + } else { + fingerprinted = fingerprintedAssetPath(webPath, asset) + rewriteErr = writePublicAsset(builder.publicDir, fingerprinted, asset) + if rewriteErr == nil { + builder.manifest[webPath] = fingerprinted + } + } + if rewriteErr != nil { + return rule + } + } + relativePath, err := relativeCSSAssetPath(currentWebPath, fingerprinted) + if err != nil { + rewriteErr = err + return rule + } + return `url("` + relativePath + suffix + `")` + }) + return []byte(rewritten), rewriteErr +} + +func (builder *assetBuilder) processJSAsset(webPath string) (string, error) { + webPath = cleanAssetWebPath(webPath) + if fingerprintedPath, ok := builder.manifest[webPath]; ok { + return fingerprintedPath, nil + } + + sourcePath := builder.sourcePath(webPath) + content, err := fs.ReadFile(embedded.FS, sourcePath) + if err != nil { + return "", fmt.Errorf("读� JS 资� %s: %w", webPath, err) + } + + fingerprintedPath := fingerprintedAssetPath(webPath, content) + if err := writePublicAsset(builder.publicDir, fingerprintedPath, content); err != nil { + return "", err + } + + builder.manifest[webPath] = fingerprintedPath + return fingerprintedPath, nil +} + +func (builder *assetBuilder) rewriteCSSImports(content []byte, currentWebPath string) ([]byte, error) { + text := string(content) + matches := cssImportRulePattern.FindAllStringIndex(text, -1) + if len(matches) == 0 { + return content, nil + } + + var rewritten strings.Builder + rewritten.Grow(len(text)) + lastIndex := 0 + + for _, match := range matches { + rewritten.WriteString(text[lastIndex:match[0]]) + + rule := text[match[0]:match[1]] + nextRule, err := builder.rewriteImportRule(rule, currentWebPath) + if err != nil { + return nil, err + } + rewritten.WriteString(nextRule) + lastIndex = match[1] + } + + rewritten.WriteString(text[lastIndex:]) + return []byte(rewritten.String()), nil +} + +func (builder *assetBuilder) rewriteImportRule(rule, currentWebPath string) (string, error) { + start, end, importPath, ok := importPathRange(rule) + if !ok { + return rule, nil + } + + fingerprintedPath, shouldRewrite, err := builder.fingerprintImportedCSS(importPath, currentWebPath) + if err != nil { + return "", err + } + if !shouldRewrite { + return rule, nil + } + + relativePath, err := relativeCSSAssetPath(currentWebPath, fingerprintedPath) + if err != nil { + return "", err + } + return rule[:start] + relativePath + rule[end:], nil +} + +func (builder *assetBuilder) fingerprintImportedCSS(importPath, currentWebPath string) (string, bool, error) { + importedWebPath, isLocal := resolveImportedAssetPath(currentWebPath, importPath) + if !isLocal { + return "", false, nil + } + if (!strings.HasPrefix(importedWebPath, "/css/") && !strings.HasPrefix(importedWebPath, "/vendor/")) || + !strings.EqualFold(path.Ext(importedWebPath), ".css") { + return "", false, nil + } + + fingerprintedPath, err := builder.processCSSAsset(importedWebPath) + if err != nil { + return "", true, fmt.Errorf("处� CSS import %q: %w", importPath, err) + } + return fingerprintedPath, true, nil +} + +// Every generated stylesheet lives below /immutable with its original directory +// structure. Relative references keep custom giscus CSS and fonts on the blog's +// origin when the stylesheet is loaded inside the giscus.app iframe. +func relativeCSSAssetPath(currentWebPath, targetPath string) (string, error) { + outputDir := path.Join("/immutable", path.Dir(cleanAssetWebPath(currentWebPath))) + relativePath, err := filepath.Rel(filepath.FromSlash(outputDir), filepath.FromSlash(targetPath)) + if err != nil { + return "", fmt.Errorf("生� CSS 相对资�路径 %s: %w", targetPath, err) + } + return filepath.ToSlash(relativePath), nil +} + +func (builder *assetBuilder) isBuiltCSSReference(currentWebPath, assetURL string) bool { + outputDir := path.Join("/immutable", path.Dir(cleanAssetWebPath(currentWebPath))) + resolved := path.Clean(path.Join(outputDir, assetURL)) + for _, builtPath := range builder.manifest { + if builtPath == resolved { + return true + } + } + return false +} + +func importPathRange(rule string) (int, int, string, bool) { + if len(rule) < len("@import") || !strings.EqualFold(rule[:len("@import")], "@import") { + return 0, 0, "", false + } + + index := skipCSSSpaces(rule, len("@import")) + if hasPrefixFold(rule[index:], "url(") { + index += len("url(") + index = skipCSSSpaces(rule, index) + if index >= len(rule) { + return 0, 0, "", false + } + + if rule[index] == '"' || rule[index] == '\'' { + quote := rule[index] + start := index + 1 + endOffset := strings.IndexByte(rule[start:], quote) + if endOffset < 0 { + return 0, 0, "", false + } + end := start + endOffset + return start, end, rule[start:end], true + } + + closeOffset := strings.IndexByte(rule[index:], ')') + if closeOffset < 0 { + return 0, 0, "", false + } + start := index + end := trimCSSSpacesRight(rule, start, index+closeOffset) + return start, end, rule[start:end], true + } + + if index < len(rule) && (rule[index] == '"' || rule[index] == '\'') { + quote := rule[index] + start := index + 1 + endOffset := strings.IndexByte(rule[start:], quote) + if endOffset < 0 { + return 0, 0, "", false + } + end := start + endOffset + return start, end, rule[start:end], true + } + + return 0, 0, "", false +} + +func resolveImportedAssetPath(currentWebPath, importPath string) (string, bool) { + importPath = strings.TrimSpace(importPath) + if importPath == "" || isExternalAssetPath(importPath) { + return "", false + } + + if strings.HasPrefix(importPath, "/") { + return cleanAssetWebPath(importPath), true + } + + return cleanAssetWebPath(path.Join(path.Dir(currentWebPath), importPath)), true +} + +func isExternalAssetPath(assetPath string) bool { + lowerPath := strings.ToLower(assetPath) + return strings.HasPrefix(lowerPath, "http://") || + strings.HasPrefix(lowerPath, "https://") || + strings.HasPrefix(lowerPath, "data:") || + strings.HasPrefix(assetPath, "//") +} + +func cleanAssetWebPath(webPath string) string { + if webPath == "" { + return "/" + } + if strings.HasPrefix(webPath, "/") { + return path.Clean(webPath) + } + return path.Clean("/" + webPath) +} + +func (builder *assetBuilder) sourcePath(webPath string) string { + webPath = cleanAssetWebPath(webPath) + return path.Join(builder.staticDir, strings.TrimPrefix(webPath, "/")) +} + +func fingerprintedAssetPath(webPath string, content []byte) string { + extension := path.Ext(webPath) + baseName := strings.TrimSuffix(path.Base(webPath), extension) + sum := sha256.Sum256(content) + hash := hex.EncodeToString(sum[:])[:assetHashLength] + // Keep content-addressed files separate from unversioned vendor/vault files. + // A single cache rule can then safely mark only this namespace immutable. + return path.Join("/immutable", path.Dir(webPath), baseName+"."+hash+extension) +} + +func writePublicAsset(publicDir, webPath string, content []byte) error { + targetPath := filepath.Join(publicDir, filepath.FromSlash(strings.TrimPrefix(webPath, "/"))) + if err := os.MkdirAll(filepath.Dir(targetPath), 0755); err != nil { + return fmt.Errorf("创建资�输出目录: %w", err) + } + if err := os.WriteFile(targetPath, content, 0644); err != nil { + return fmt.Errorf("写入资�文件 %s: %w", webPath, err) + } + return nil +} + +func writeAssetsManifest(publicDir string, manifest map[string]string) error { + content, err := json.MarshalIndent(manifest, "", " ") + if err != nil { + return fmt.Errorf("生� assets manifest: %w", err) + } + content = append(content, '\n') + if err := writePublicAsset(publicDir, "/assets-manifest.json", content); err != nil { + return err + } + return nil +} + +func copyManifest(manifest map[string]string) map[string]string { + result := make(map[string]string, len(manifest)) + for originalPath, fingerprintedPath := range manifest { + result[originalPath] = fingerprintedPath + } + return result +} + +func hasPrefixFold(text, prefix string) bool { + if len(text) < len(prefix) { + return false + } + return strings.EqualFold(text[:len(prefix)], prefix) +} + +func skipCSSSpaces(text string, index int) int { + for index < len(text) && isCSSSpace(text[index]) { + index++ + } + return index +} + +func trimCSSSpacesRight(text string, start, end int) int { + for end > start && isCSSSpace(text[end-1]) { + end-- + } + return end +} + +func isCSSSpace(char byte) bool { + return char == ' ' || char == '\n' || char == '\r' || char == '\t' || char == '\f' +} + +func copyEmbeddedDirFiltered(sourceDir, targetDir string, skip func(string, fs.DirEntry) bool) error { + return fs.WalkDir(embedded.FS, sourceDir, func(path string, entry fs.DirEntry, err error) error { + if err != nil { + return err + } + + relativePath := path + if path == sourceDir { + relativePath = "." + } else if strings.HasPrefix(path, sourceDir+"/") { + relativePath = path[len(sourceDir)+1:] + } + + if skip != nil && skip(relativePath, entry) { + if entry.IsDir() { + return fs.SkipDir + } + return nil + } + + if relativePath == "." { + return nil + } + + targetPath := filepath.Join(targetDir, filepath.FromSlash(relativePath)) + + if entry.IsDir() { + return os.MkdirAll(targetPath, 0755) + } + + content, err := fs.ReadFile(embedded.FS, path) + if err != nil { + return fmt.Errorf("�制 static 文件 %s: %w", path, err) + } + if err := os.WriteFile(targetPath, content, 0644); err != nil { + return fmt.Errorf("写入 static 文件 %s: %w", targetPath, err) + } + + return nil + }) +} diff --git a/internal/site/assets_test.go b/internal/site/assets_test.go new file mode 100644 index 00000000..17a3872d --- /dev/null +++ b/internal/site/assets_test.go @@ -0,0 +1,238 @@ +package site + +import ( + "bytes" + "io/fs" + "net/url" + "os" + "path" + "path/filepath" + "regexp" + "strings" + "testing" + + "github.com/StatIndet/daybook/internal/embedded" +) + +func TestCSSURLsHashFontsAndTextureWithoutChangingVaultAssets(t *testing.T) { + builder := assetBuilder{staticDir: "static", publicDir: t.TempDir(), manifest: map[string]string{}, processingCSS: map[string]bool{}} + input := []byte(`@font-face{src:url("/vendor/fonts/material-symbols/material-symbols-rounded.woff2")}.paper{background:url('../images/settings-paper.webp')}.custom{background:url('/images/vault.png')}.external{background:url('https://example.com/paper.png')}`) + output, err := builder.rewriteCSSURLs(input, "/css/common.css") + if err != nil { + t.Fatal(err) + } + for _, original := range []string{"/vendor/fonts/material-symbols/material-symbols-rounded.woff2", "/images/settings-paper.webp"} { + fingerprinted := builder.manifest[original] + relativePath, err := relativeCSSAssetPath("/css/common.css", fingerprinted) + if err != nil { + t.Fatal(err) + } + if fingerprinted == "" || fingerprinted == original || !strings.Contains(string(output), relativePath) { + t.Fatalf("missing content hash for %s in %s", original, output) + } + if !strings.HasPrefix(fingerprinted, "/immutable/") { + t.Fatalf("versioned asset cannot use the immutable cache rule: %s", fingerprinted) + } + copied, err := os.ReadFile(filepath.Join(builder.publicDir, filepath.FromSlash(strings.TrimPrefix(fingerprinted, "/")))) + if err != nil { + t.Fatal(err) + } + source, err := fs.ReadFile(embedded.FS, builder.sourcePath(original)) + if err != nil || !bytes.Equal(copied, source) { + t.Fatalf("hashed asset contents differ for %s: %v", original, err) + } + } + for _, preserved := range []string{"/images/vault.png", "https://example.com/paper.png"} { + if !strings.Contains(string(output), preserved) { + t.Fatalf("custom/external asset URL changed: %s", output) + } + } +} + +func TestStaticCopyIncludesDeploymentHeaders(t *testing.T) { + publicDir := t.TempDir() + if err := copyStaticDir("static", publicDir); err != nil { + t.Fatal(err) + } + headers, err := os.ReadFile(filepath.Join(publicDir, "_headers")) + if err != nil { + t.Fatalf("cache rules must survive embedding and static output: %v", err) + } + if !strings.Contains(string(headers), "/immutable/*\n Cache-Control: public, max-age=31536000, immutable") { + t.Fatal("missing cache policy for content-addressed files") + } + for _, rule := range []string{"/immutable/css/components/giscus-*", "/immutable/vendor/fonts/*"} { + if !strings.Contains(string(headers), rule+"\n Access-Control-Allow-Origin: *") { + t.Fatalf("missing cross-origin access for giscus assets: %s", rule) + } + } + if strings.Contains("\n"+string(headers), "\n/*\n Cache-Control:") { + t.Fatal("catch-all Cache-Control would merge with the immutable rule") + } +} + +func TestVendorFontCSSPropagatesFontHashes(t *testing.T) { + builder := assetBuilder{staticDir: "static", publicDir: t.TempDir(), manifest: map[string]string{}, processingCSS: map[string]bool{}} + cssPath, err := builder.processCSSAsset("/vendor/fonts/noto-serif-sc/wght.css") + if err != nil { + t.Fatal(err) + } + output, err := os.ReadFile(filepath.Join(builder.publicDir, filepath.FromSlash(strings.TrimPrefix(cssPath, "/")))) + if err != nil { + t.Fatal(err) + } + fonts := 0 + for original, fingerprinted := range builder.manifest { + if !strings.HasSuffix(original, ".woff2") { + continue + } + fonts++ + relativePath, err := relativeCSSAssetPath("/vendor/fonts/noto-serif-sc/wght.css", fingerprinted) + if err != nil { + t.Fatal(err) + } + if !strings.Contains(string(output), relativePath) { + t.Fatalf("font %s missing from hashed CSS", fingerprinted) + } + } + if fonts < 2 { + t.Fatalf("expected existing CJK font shards to remain split, got %d", fonts) + } +} + +func TestCrossOriginStylesheetReferencesStayOnBlogOrigin(t *testing.T) { + builder := assetBuilder{staticDir: "static", publicDir: t.TempDir(), manifest: map[string]string{}, processingCSS: map[string]bool{}} + sourcePath := "/css/components/giscus-default-light.css" + input := []byte(`@import url("../../vendor/fonts/noto-serif-sc/wght.css"); @font-face{src:url("/vendor/fonts/material-symbols/material-symbols-rounded.woff2")}`) + output, err := builder.rewriteCSSImports(input, sourcePath) + if err != nil { + t.Fatal(err) + } + output, err = builder.rewriteCSSURLs(output, sourcePath) + if err != nil { + t.Fatal(err) + } + themeURL, err := url.Parse("https://blog.example" + fingerprintedAssetPath(sourcePath, output)) + if err != nil { + t.Fatal(err) + } + for _, original := range []string{"/vendor/fonts/noto-serif-sc/wght.css", "/vendor/fonts/material-symbols/material-symbols-rounded.woff2"} { + fingerprinted := builder.manifest[original] + relativePath, err := relativeCSSAssetPath(sourcePath, fingerprinted) + if err != nil { + t.Fatal(err) + } + if fingerprinted == "" || !strings.Contains(string(output), relativePath) || strings.HasPrefix(relativePath, "/") { + t.Fatalf("theme reference must be a relative hashed asset: %s in %s", original, output) + } + reference, err := url.Parse(relativePath) + if err != nil { + t.Fatal(err) + } + resolved := themeURL.ResolveReference(reference) + if resolved.Host != "blog.example" || resolved.Path != fingerprinted { + t.Fatalf("giscus iframe stylesheet reference resolved to %s, want blog origin and %s", resolved, fingerprinted) + } + } + // Vendor CSS is another external stylesheet from the iframe's perspective; + // its nested font references must also resolve against the blog URL. + vendorPath := builder.manifest["/vendor/fonts/noto-serif-sc/wght.css"] + vendorCSS, err := os.ReadFile(filepath.Join(builder.publicDir, filepath.FromSlash(strings.TrimPrefix(vendorPath, "/")))) + if err != nil { + t.Fatal(err) + } + for _, match := range cssURLPattern.FindAllStringSubmatch(string(vendorCSS), -1) { + reference := match[1] + match[2] + match[3] + if strings.HasPrefix(reference, "/") { + t.Fatalf("nested font URL would resolve to the iframe origin: %s", reference) + } + resolved := path.Clean(path.Join(path.Dir(vendorPath), reference)) + if !strings.HasPrefix(resolved, "/immutable/vendor/fonts/") || !fileExists(filepath.Join(builder.publicDir, filepath.FromSlash(strings.TrimPrefix(resolved, "/")))) { + t.Fatalf("nested font reference does not resolve to a published font: %s", reference) + } + } +} + +func TestGeneratedGiscusThemesPublishAllFontDependencies(t *testing.T) { + // Use an independent matcher so this regression test catches @imports that + // the asset builder fails to recognize, including esbuild's @import"...". + allImports := regexp.MustCompile(`(?i)@import[^;]+;`) + for _, variant := range []string{"default-light", "default-dark", "warm-light", "warm-dark"} { + t.Run(variant, func(t *testing.T) { + builder := assetBuilder{staticDir: "static", publicDir: t.TempDir(), manifest: map[string]string{}, processingCSS: map[string]bool{}} + originalPath := "/css/components/giscus-" + variant + ".css" + source, err := fs.ReadFile(embedded.FS, builder.sourcePath(originalPath)) + if err != nil { + t.Fatal(err) + } + sourceImports := allImports.FindAllString(string(source), -1) + if len(sourceImports) == 0 { + t.Fatal("generated giscus theme must include the blog's vendor font CSS") + } + publishedPath, err := builder.processCSSAsset(originalPath) + if err != nil { + t.Fatal(err) + } + published := readPublicAsset(t, builder.publicDir, publishedPath) + publishedImports := allImports.FindAllString(published, -1) + if len(publishedImports) != len(sourceImports) { + t.Fatalf("published theme has %d imports, source has %d", len(publishedImports), len(sourceImports)) + } + for index, rule := range publishedImports { + _, _, sourceReference, sourceOK := importPathRange(sourceImports[index]) + _, _, publishedReference, publishedOK := importPathRange(rule) + if !sourceOK || !publishedOK { + t.Fatalf("could not parse CSS import: %s", rule) + } + originalImport, local := resolveImportedAssetPath(originalPath, sourceReference) + if !local { + t.Fatalf("vendor font import must be local: %s", sourceReference) + } + wantPath := builder.manifest[originalImport] + assertPublishedCSSReference(t, builder.publicDir, publishedPath, publishedReference, wantPath) + } + // Check every built stylesheet, including imported CJK font shards, + // so a valid top-level import cannot hide a broken nested font URL. + fontReferences := 0 + for _, stylesheetPath := range builder.manifest { + if !strings.HasSuffix(stylesheetPath, ".css") { + continue + } + stylesheet := readPublicAsset(t, builder.publicDir, stylesheetPath) + for _, match := range cssURLPattern.FindAllStringSubmatch(stylesheet, -1) { + reference := match[1] + match[2] + match[3] + if isExternalAssetPath(reference) { + continue + } + assertPublishedCSSReference(t, builder.publicDir, stylesheetPath, reference, "") + fontReferences++ + } + } + if fontReferences == 0 { + t.Fatal("generated theme must publish its referenced font files") + } + }) + } +} + +func assertPublishedCSSReference(t *testing.T, publicDir, stylesheetPath, reference, wantPath string) { + t.Helper() + stylesheetURL, err := url.Parse("https://blog.example" + stylesheetPath) + if err != nil { + t.Fatal(err) + } + parsedReference, err := url.Parse(reference) + if err != nil { + t.Fatal(err) + } + resolved := stylesheetURL.ResolveReference(parsedReference) + if strings.HasPrefix(reference, "/") || resolved.Host != "blog.example" || !strings.HasPrefix(resolved.Path, "/immutable/vendor/fonts/") { + t.Fatalf("CSS reference must resolve to a relative immutable font dependency on the blog origin: %s", reference) + } + if wantPath != "" && resolved.Path != wantPath { + t.Fatalf("CSS import resolved to %s, want hashed path %s", resolved.Path, wantPath) + } + if !fileExists(filepath.Join(publicDir, filepath.FromSlash(strings.TrimPrefix(resolved.Path, "/")))) { + t.Fatalf("CSS dependency has not been published: %s", resolved.Path) + } +} diff --git a/internal/site/comments_test.go b/internal/site/comments_test.go new file mode 100644 index 00000000..15efbcd5 --- /dev/null +++ b/internal/site/comments_test.go @@ -0,0 +1,123 @@ +package site + +import ( + "encoding/json" + "net/http" + "net/http/httptest" + "os" + "path/filepath" + "strings" + "testing" + + "github.com/StatIndet/daybook/internal/config" +) + +func TestBuildGiscusComments(t *testing.T) { + vault := t.TempDir() + publicDir := filepath.Join(vault, "public") + writeTestFile(t, vault, "pages/about.md", "---\ntitle: About\n---\nAbout this blog.") + writeTestFile(t, vault, "notes/default.md", "---\ntitle: Default\ndate: 2026-10-01\n---\nDefault article.") + writeTestFile(t, vault, "notes/enabled.md", "---\ntitle: Enabled\ndate: 2026-10-01\ncomment: true\n---\nEnabled article.") + writeTestFile(t, vault, "notes/disabled.md", "---\ntitle: Disabled\ndate: 2026-10-01\ncomment: false\n---\nDisabled article.") + writeTestFile(t, vault, "notes/english.md", "---\ntitle: English\ndate: 2026-10-01\nlang: en_US\n---\nEnglish article.") + complete := config.CommentConfig{ + Enabled: true, + Provider: "giscus", + Giscus: config.GiscusConfig{Repo: "owner/blog", RepoID: "R_repo", Category: "Announcements", CategoryID: "DIC_category"}, + } + for _, test := range []struct { + name string + comment config.CommentConfig + enabled bool + }{ + {name: "enabled", comment: complete, enabled: true}, + {name: "globally disabled", comment: config.CommentConfig{Provider: complete.Provider, Giscus: complete.Giscus}}, + {name: "incomplete", comment: config.CommentConfig{Enabled: true, Provider: complete.Provider}}, + {name: "unsupported", comment: config.CommentConfig{Enabled: true, Provider: "other", Giscus: complete.Giscus}}, + } { + t.Run(test.name, func(t *testing.T) { + _, err := Build(Options{ + Config: config.Config{Comment: test.comment}, + ContentDir: vault, + NotesDir: filepath.Join(vault, "notes"), + PublicDir: publicDir, + }) + if err != nil { + t.Fatal(err) + } + var manifest map[string]string + manifestBytes, err := os.ReadFile(filepath.Join(publicDir, "assets-manifest.json")) + if err != nil { + t.Fatal(err) + } + if err := json.Unmarshal(manifestBytes, &manifest); err != nil { + t.Fatal(err) + } + for _, route := range []string{"/notes/default/", "/notes/enabled/", "/notes/disabled/", "/en_US/notes/english/"} { + html := readPublicAsset(t, publicDir, route+"index.html") + wantComments := test.enabled && route != "/notes/disabled/" + if strings.Contains(html, `id="giscus"`) != wantComments { + t.Fatalf("%s: giscus presence does not match global/config and per-note gates", route) + } + if !wantComments { + continue + } + for _, attr := range []string{`data-repo="owner/blog"`, `data-repo-id="R_repo"`, `data-category="Announcements"`, `data-category-id="DIC_category"`, `data-path="` + route + `"`} { + if !strings.Contains(html, attr) { + t.Fatalf("%s: missing giscus configuration attribute %s", route, attr) + } + } + lang := "zh-CN" + if strings.HasPrefix(route, "/en_US/") { + lang = "en" + } + if !strings.Contains(html, `data-lang="`+lang+`"`) { + t.Fatalf("%s: giscus language must follow page UI", route) + } + for _, variant := range []string{"default-light", "default-dark", "warm-light", "warm-dark"} { + assetPath := manifest["/css/components/giscus-"+variant+".css"] + if !strings.HasPrefix(assetPath, "/immutable/") || !strings.Contains(html, `data-theme-`+variant+`="`+assetPath+`"`) { + t.Fatalf("%s: giscus theme %s must use a published immutable CSS path", route, variant) + } + } + } + }) + } +} + +func TestPreviewGiscusAssetCORS(t *testing.T) { + publicDir := t.TempDir() + for _, assetPath := range []string{ + "immutable/css/components/giscus-default-light.test.css", + "immutable/vendor/fonts/example/font.test.woff2", + "immutable/vendor/fonts/example/font.test.css", + "immutable/css/global.test.css", + "index.html", + } { + writeTestFile(t, publicDir, assetPath, "asset") + } + handler := previewHandler(publicDir) + for _, test := range []struct { + path string + cors bool + }{ + {path: "/immutable/css/components/giscus-default-light.test.css", cors: true}, + {path: "/immutable/vendor/fonts/example/font.test.woff2", cors: true}, + {path: "/immutable/vendor/fonts/example/font.test.css", cors: true}, + {path: "/immutable/css/global.test.css"}, + {path: "/"}, + } { + t.Run(test.path, func(t *testing.T) { + request := httptest.NewRequest(http.MethodGet, test.path, nil) + request.Header.Set("Origin", "https://giscus.app") + recorder := httptest.NewRecorder() + handler.ServeHTTP(recorder, request) + if recorder.Code != http.StatusOK { + t.Fatalf("preview asset returned HTTP %d", recorder.Code) + } + if (recorder.Header().Get("Access-Control-Allow-Origin") == "*") != test.cors { + t.Fatalf("unexpected CORS policy for %s: %v", test.path, recorder.Header()) + } + }) + } +} diff --git a/internal/site/github.go b/internal/site/github.go new file mode 100644 index 00000000..05120994 --- /dev/null +++ b/internal/site/github.go @@ -0,0 +1,33 @@ +package site + +import ( + "github.com/StatIndet/daybook/internal/config" + "github.com/StatIndet/daybook/internal/github" +) + +func applyGitHubProfile(cfg *config.Config, p *github.Profile) { + cfg.Profile.Author.Name = p.DisplayName() + cfg.Profile.Author.NameEn = p.Login + cfg.Profile.Author.Avatar = p.AvatarSize(260) + cfg.Profile.Slogan = map[string]string{"zh_CN": p.Bio, "en_US": p.Bio, "zh": p.Bio} + title := p.DisplayName() + if p.Name != "" && p.Name != p.Login { + title += " (" + p.Login + ")" + } + cfg.SEO.HomeTitle = map[string]string{"zh_CN": title, "en_US": title, "zh": title} + cfg.SEO.HomeDescription = map[string]string{"zh_CN": p.Bio, "en_US": p.Bio, "zh": p.Bio} + // The homepage and persistent social links use the same public upstream. + links := []config.SocialLink{cfg.ResolveSocialLink(p.HTMLURL, "github")} + if p.Email != "" { + links = append(links, cfg.ResolveSocialLink("mailto:"+p.Email, "email")) + } + if p.TwitterUsername != "" { + links = append(links, cfg.ResolveSocialLink("https://x.com/"+p.TwitterUsername, "x")) + } + for _, account := range p.SocialAccounts { + if link := cfg.ResolveSocialLink(account.URL, account.Provider); link.URL != "" { + links = append(links, link) + } + } + cfg.Profile.ParsedSocial = links +} diff --git a/internal/site/github_test.go b/internal/site/github_test.go new file mode 100644 index 00000000..0c7cbe08 --- /dev/null +++ b/internal/site/github_test.go @@ -0,0 +1,88 @@ +package site + +import ( + "os" + "path/filepath" + "strings" + "testing" + + "github.com/StatIndet/daybook/internal/config" + "github.com/StatIndet/daybook/internal/github" + "github.com/StatIndet/daybook/internal/render" + "github.com/StatIndet/daybook/internal/seo" +) + +func TestGitHubProfileOverridesLegacyHomeMetadata(t *testing.T) { + cfg := config.Config{Site: config.SiteConfig{URL: "https://example.com"}, Profile: config.ProfileConfig{Author: config.AuthorConfig{Name: "Old name", Avatar: "/old.jpg", LogoText: "Daybook"}}, SEO: config.SEOConfig{HomeDescription: map[string]string{"zh_CN": "Old description"}}} + p := &github.Profile{Login: "octocat", Name: "New name", Bio: "Bio from GitHub", HTMLURL: "https://github.com/octocat", AvatarURL: "https://avatars.githubusercontent.com/u/1"} + applyGitHubProfile(&cfg, p) + if cfg.Profile.Author.Name != p.Name || cfg.Profile.Author.NameEn != p.Login || cfg.GetHomeDescription("en_US") != p.Bio { + t.Fatalf("legacy profile was not replaced: %#v", cfg) + } + if cfg.Profile.Author.LogoText != "Daybook" { + t.Fatal("persistent logo must survive") + } + data := seo.BuildForHome(seo.BuilderArgs{Config: cfg, GitHub: p, Lang: "zh_CN", Title: cfg.GetHomeTitle("zh_CN"), Description: cfg.GetHomeDescription("zh_CN"), PageURL: "/"}) + if data.Description != p.Bio || data.AuthorURL != p.HTMLURL || !strings.Contains(string(data.JSONLD), p.Bio) || !strings.Contains(data.Image, "s=520") { + t.Fatalf("GitHub SEO missing: %#v", data) + } +} + +func TestHomeRendersGitHubSnapshot(t *testing.T) { + cfg := config.Config{Site: config.SiteConfig{URL: "https://example.com"}, Profile: config.ProfileConfig{Author: config.AuthorConfig{LogoText: "Daybook"}}} + p := &github.Profile{Login: "octocat", Name: "GitHub Name", Pronouns: "he/him", Email: "public@example.com", Bio: "An upstream bio ", HTMLURL: "https://github.com/octocat", AvatarURL: "https://avatars.githubusercontent.com/u/1", CreatedAt: "2020-01-02T00:00:00Z", FetchedAt: "2026-09-30T00:00:00Z", ReadmeHTML: "

    README body

    ", PinnedRepositories: []github.Repository{{Name: "pinned-project", HTMLURL: "https://github.com/octocat/pinned-project"}}, Repositories: []github.Repository{{Name: "public-project", HTMLURL: "https://github.com/octocat/public-project", Description: "Public repository", Language: "Go", Stars: 3}}, Events: []github.Event{{Type: "PushEvent", CreatedAt: "2026-09-29T00:00:00Z", URL: "https://github.com/octocat/public-project", Summary: "Pushed to main"}}} + applyGitHubProfile(&cfg, p) + output := filepath.Join(t.TempDir(), "index.html") + data := render.IndexData{Config: cfg, GitHub: p, Lang: "zh_CN", PageKind: "home", BodyClass: "home-body", AlternateURL: "/en_US/", SEO: seo.BuildForHome(seo.BuilderArgs{Config: cfg, GitHub: p, Lang: "zh_CN", Title: cfg.GetHomeTitle("zh_CN"), Description: cfg.GetHomeDescription("zh_CN"), PageURL: "/"})} + if err := render.New("templates").RenderIndex(output, data); err != nil { + t.Fatal(err) + } + body, err := os.ReadFile(output) + if err != nil { + t.Fatal(err) + } + html := string(body) + for _, want := range []string{"data-github-home", "GitHub Name", "he/him", "mailto:public@example.com", "pinned-project", "README body", "An upstream bio <with markup>", `fetchpriority="high"`, "s=520"} { + if !strings.Contains(html, want) { + t.Errorf("homepage missing %q", want) + } + } + for _, removed := range []string{"github-profile-link", "github-gists", "github-tabs", "github-readme-heading", "github-activity", "public-project", "Pushed to main"} { + if strings.Contains(html, removed) { + t.Errorf("homepage still renders removed section %q", removed) + } + } +} + +func TestGitHubContactsUseLocalBrandIconsAndReadableFooterLabels(t *testing.T) { + cfg := config.Config{Site: config.SiteConfig{URL: "https://daybook.page"}} + p := &github.Profile{Login: "example", HTMLURL: "https://github.com/example", AvatarURL: "https://avatars.githubusercontent.com/u/1", Blog: "https://daybook.page", SocialAccounts: []github.SocialAccount{ + {Provider: "generic", URL: "https://space.bilibili.com/1"}, + {Provider: "generic", URL: "https://ko-fi.com/example"}, + {Provider: "generic", URL: "https://ifdian.net/a/example"}, + {Provider: "generic", URL: "https://buymeacoffee.com/example"}, + {Provider: "generic", URL: "https://unknown.example"}, + }} + applyGitHubProfile(&cfg, p) + for index, want := range []string{"GitHub", "Bilibili", "Ko-fi", "AFDIAN", "Buy Me a Coffee", "Website"} { + if cfg.Profile.ParsedSocial[index].Label != want { + t.Fatalf("wrong footer label: %+v", cfg.Profile.ParsedSocial[index]) + } + } + output := filepath.Join(t.TempDir(), "index.html") + if err := render.New("templates").RenderIndex(output, render.IndexData{Config: cfg, GitHub: p, Lang: "zh_CN", PageKind: "home"}); err != nil { + t.Fatal(err) + } + body, err := os.ReadFile(output) + if err != nil { + t.Fatal(err) + } + for _, want := range []string{"/favicon.svg", "/icons/social/bilibili.svg", "/icons/social/kofi.svg", "/icons/social/afdian.svg", "/icons/social/buymeacoffee.svg", `class="material-symbol" aria-hidden="true">linkhttps://unknown.example`} { + if !strings.Contains(string(body), want) { + t.Errorf("missing contact identity %q", want) + } + } + if strings.Contains(string(body), "notes-footer-links") || strings.Contains(string(body), "drawer-footer-row") || strings.Contains(string(body), "ZgotmplZ") || strings.Contains(string(body), ">generic") { + t.Fatal("social icon or label did not survive template escaping") + } +} diff --git a/internal/site/graph_test.go b/internal/site/graph_test.go new file mode 100644 index 00000000..5657d679 --- /dev/null +++ b/internal/site/graph_test.go @@ -0,0 +1,67 @@ +package site + +import ( + "encoding/json" + "path/filepath" + "strings" + "testing" + + "github.com/StatIndet/daybook/internal/config" + "github.com/StatIndet/daybook/internal/graph" +) + +func TestBuildGraphSearchPublishesSafePathsAndApprovedData(t *testing.T) { + vault := t.TempDir() + publicDir := filepath.Join(t.TempDir(), "public") + writeTestFile(t, vault, "pages/about.md", "---\ntitle: About\n---\nAbout") + writeTestFile(t, vault, "notes/中文 folder/first.md", "---\ndate: 2026-10-01\ntags: [知识/图谱]\nstatus: public-approved\nsecret: private-property-value\n---\nIntro\n\n## 第一章\n甲\n乙\n\n%% private-comment-value %%\n\n\n\n```md\n# code-not-heading\n```\n\n## 第二章\n丙\n\n[[second]] ![[photo.png]] [[missing]]") + writeTestFile(t, vault, "notes/second.md", "---\ndate: 2026-10-02\nlang: en_US\n---\n[[first]]") + writeTestFile(t, vault, "notes/draft.md", "---\ndate: 2026-10-03\ndraft: true\nstatus: draft-property-value\n---\ndraft-body-value") + writeTestFile(t, vault, "notes/assets/photo.png", "fixture-attachment") + _, err := Build(Options{Config: config.Config{Graph: config.GraphConfig{SearchProperties: []string{"status"}}}, ContentDir: vault, NotesDir: filepath.Join(vault, "notes"), PublicDir: publicDir}) + if err != nil { + t.Fatal(err) + } + for _, prefix := range []string{"", "/en_US"} { + graphJSON := readPublicAsset(t, publicDir, prefix+"/graph.json") + searchJSON := readPublicAsset(t, publicDir, prefix+"/graph-search.json") + for _, private := range []string{vault, "private-property-value", "private-comment-value", "private-html-value", "draft-body-value", "draft-property-value"} { + if strings.Contains(graphJSON, private) || strings.Contains(searchJSON, private) { + t.Errorf("%s graph artifacts contain private value %q", prefix, private) + } + } + var data graph.Data + if err := json.Unmarshal([]byte(graphJSON), &data); err != nil { + t.Fatal(err) + } + if data.Version != 1 || len(data.Nodes) != 3 || len(data.Links) != 3 { + t.Fatalf("unexpected version/nodes/directed links: %+v", data) + } + var first graph.Node + for _, node := range data.Nodes { + if node.Title == "first" { + first = node + } + } + if first.Path != "notes/中文 folder/first.md" || first.File != "first.md" || first.Degree != 2 { + t.Fatalf("unexpected public path/degree: %+v", first) + } + if len(first.Attachments) != 1 || first.Attachments[0].Path != "notes/assets/photo.png" || first.Attachments[0].File != "photo.png" { + t.Fatalf("attachment lost path metadata: %+v", first.Attachments) + } + var search graph.SearchData + if err := json.Unmarshal([]byte(searchJSON), &search); err != nil { + t.Fatal(err) + } + if search.Version != 1 || len(search.Documents) != 2 { + t.Fatalf("unexpected search index: %+v", search) + } + for _, doc := range search.Documents { + if doc.ID == first.ID { + if len(doc.Sections) != 3 || !strings.Contains(doc.Sections[1], "code-not-heading") || doc.Properties["status"] != "public-approved" { + t.Errorf("search document lost sections/approved metadata: %+v", doc) + } + } + } + } +} diff --git a/internal/site/memos.go b/internal/site/memos.go new file mode 100644 index 00000000..3af9bdb0 --- /dev/null +++ b/internal/site/memos.go @@ -0,0 +1,100 @@ +package site + +import ( + "crypto/sha256" + "fmt" + "html/template" + "net/url" + "strings" + + "github.com/StatIndet/daybook/internal/content" + "github.com/StatIndet/daybook/internal/render" + "golang.org/x/net/html" + "golang.org/x/net/html/atom" +) + +// Each body was rendered as a standalone document. Give fragment identifiers a +// per-article namespace before combining documents, including footnote backlinks. +func buildMemoCard(link render.NoteLink, location, body string) (render.MemoCard, error) { + nodes, err := html.ParseFragment(strings.NewReader(body), &html.Node{Type: html.ElementNode, Data: "div", DataAtom: atom.Div}) + if err != nil { + return render.MemoCard{}, err + } + prefix := fmt.Sprintf("memo-%x-", sha256.Sum256([]byte(link.URL))) + ids := make(map[string]string) + var visit func(*html.Node, func(*html.Node)) + visit = func(n *html.Node, f func(*html.Node)) { + f(n) + for c := n.FirstChild; c != nil; c = c.NextSibling { + visit(c, f) + } + } + for _, root := range nodes { + visit(root, func(n *html.Node) { + for i, attr := range n.Attr { + if attr.Key == "id" { + ids[attr.Val] = prefix + attr.Val + n.Attr[i].Val = ids[attr.Val] + } + } + }) + } + var plain, rendered strings.Builder + for _, root := range nodes { + visit(root, func(n *html.Node) { + if n.Type == html.TextNode { + if n.Parent == nil || (n.Parent.Data != "script" && n.Parent.Data != "style") { + plain.WriteString(n.Data) + } + } else if n.Type == html.ElementNode { + switch n.Data { + case "p", "div", "li", "br", "h1", "h2", "h3", "h4", "h5", "h6", "tr": + plain.WriteByte(' ') + } + } + for i, attr := range n.Attr { + switch attr.Key { + case "href": + if strings.HasPrefix(attr.Val, "#") { + id, err := url.PathUnescape(strings.TrimPrefix(attr.Val, "#")) + if err == nil && ids[id] != "" { + n.Attr[i].Val = "#" + ids[id] + } + } + case "for", "aria-describedby", "aria-labelledby", "aria-controls": + refs := strings.Fields(attr.Val) + for j, ref := range refs { + if ids[ref] != "" { + refs[j] = ids[ref] + } + } + n.Attr[i].Val = strings.Join(refs, " ") + case "alt": + plain.WriteString(" " + attr.Val + " ") + } + } + }) + if err := html.Render(&rendered, root); err != nil { + return render.MemoCard{}, err + } + } + date, err := content.ParseDate(link.Date) + if err != nil { + return render.MemoCard{}, err + } + dateDisplay := date.Format("2006-01-02") + updatedDisplay := "" + if link.Updated != "" { + updated, err := content.ParseDate(link.Updated) + if err != nil { + return render.MemoCard{}, err + } + updatedDisplay = updated.Format("2006-01-02") + } + return render.MemoCard{ + UpdatedDisplay: updatedDisplay, + NoteLink: link, HTML: template.HTML(rendered.String()), Location: location, + DateDay: date.Format("2006-01-02"), DateDisplay: dateDisplay, + SearchText: strings.Join(strings.Fields(plain.String()), " "), + }, nil +} diff --git a/internal/site/memos_test.go b/internal/site/memos_test.go new file mode 100644 index 00000000..4f57072a --- /dev/null +++ b/internal/site/memos_test.go @@ -0,0 +1,202 @@ +package site + +import ( + "encoding/json" + "path/filepath" + "strings" + "testing" + + "github.com/StatIndet/daybook/internal/config" + "github.com/StatIndet/daybook/internal/graph" + "github.com/StatIndet/daybook/internal/render" + "github.com/StatIndet/daybook/internal/search" + "golang.org/x/net/html" +) + +func TestMemoCardNamespacesFragments(t *testing.T) { + body := `

    A small thought

    1

    other` + first, err := buildMemoCard(render.NoteLink{URL: "/memos/a/", Date: "2026-10-02T23:40:00+08:00"}, "路上", body) + if err != nil { + t.Fatal(err) + } + second, err := buildMemoCard(render.NoteLink{URL: "/memos/b/", Date: "2026-10-02"}, "", body) + if err != nil { + t.Fatal(err) + } + if first.DateDay != "2026-10-02" || first.DateDisplay != "2026-10-02" || second.DateDisplay != "2026-10-02" { + t.Fatalf("unexpected date display: %+v / %+v", first, second) + } + if !strings.Contains(first.SearchText, "A small thought") { + t.Fatalf("lost inline text: %s", first.SearchText) + } + combined := string(first.HTML) + string(second.HTML) + ids := map[string]bool{} + var fragments []string + z := html.NewTokenizer(strings.NewReader(combined)) + for z.Next() != html.ErrorToken { + token := z.Token() + for _, attr := range token.Attr { + if attr.Key == "id" { + if ids[attr.Val] { + t.Fatalf("duplicate id: %s", attr.Val) + } + ids[attr.Val] = true + } + if attr.Key == "href" && strings.HasPrefix(attr.Val, "#") { + fragments = append(fragments, attr.Val[1:]) + } + } + } + for _, id := range fragments { + if !ids[id] { + t.Errorf("dangling fragment %s", id) + } + } + if !strings.Contains(combined, `href="/notes/other/#heading"`) { + t.Error("external article fragment changed") + } +} + +func TestBuildMemosWithSharedContentFeatures(t *testing.T) { + vault := t.TempDir() + publicDir := filepath.Join(t.TempDir(), "public") + writeTestFile(t, vault, "pages/about.md", "---\ntitle: About\n---\nAbout this blog.") + writeTestFile(t, vault, "notes/shared.md", "---\ntitle: obsolete title\ndate: 2026-10-01\n---\n[[memos/shared]]") + writeTestFile(t, vault, "memos/shared.md", "---\ndate: 2026-10-02T23:30:00+08:00\nlocation: 路上\ntags: [生活]\n---\n[[notes/shared]]\n\n## One\nA **memo** with a footnote.[^1]\n\n[^1]: First footnote.\n\n$E=mc^2$\n\n- [x] Done") + writeOGTestImage(t, vault, "attachments/photo.png") + writeTestFile(t, vault, "memos/2026/窗边.md", "---\ndate: 2026-10-02T17:00:00Z\n---\n## One\nNewer in absolute time.[^1]\n\n[^1]: Second footnote.\n\n```mermaid\ngraph TD\nA-->B\n```\n\n::image{src=\"/attachments/photo.png\" alt=\"窗外\"}") + writeTestFile(t, vault, "memos/english.md", "---\ndate: 2026-10-01\nlang: en_US\n---\nEnglish memo") + writeTestFile(t, vault, "memos/draft.md", "---\ndraft: true\n---\nDo not publish") + writeTestFile(t, vault, "memos/invalid.md", "---\ndate: 2026-02-30\n---\nInvalid date") + cfg := config.Config{Comment: config.CommentConfig{Enabled: true, Provider: "giscus", Giscus: config.GiscusConfig{Repo: "owner/blog", RepoID: "R_repo", Category: "Announcements", CategoryID: "DIC_category"}}} + result, err := Build(Options{Config: cfg, ContentDir: vault, NotesDir: filepath.Join(vault, "notes"), PublicDir: publicDir}) + if err != nil { + t.Fatal(err) + } + if len(result.Notes) != 1 || len(result.Memos) != 3 || len(result.Skipped) != 1 || !strings.Contains(result.Skipped[0], "invalid.md") { + t.Fatalf("unexpected result: %+v", result) + } + for _, prefix := range []string{"", "/en_US"} { + feed := readPublicAsset(t, publicDir, prefix+"/memos/index.html") + if strings.Count(feed, "data-memo-card") != 3 { + t.Errorf("%s must list all published memos", prefix) + } + if strings.Index(feed, `data-memo-url="/memos/2026/窗边/"`) > strings.Index(feed, `data-memo-url="/memos/shared/"`) { + t.Error("memos must sort by actual time") + } + for _, want := range []string{"memo", "math-inline", "mermaid", "路上", "生活"} { + if !strings.Contains(feed, want) { + t.Errorf("feed lost %s", want) + } + } + if strings.Contains(feed, "Do not publish") || strings.Contains(feed, "Invalid date") { + t.Error("unpublished memo leaked") + } + notes := readPublicAsset(t, publicDir, prefix+"/notes/index.html") + if strings.Count(notes, "data-note-card") != 1 { + t.Error("notes list includes memos") + } + var archive struct { + Total int `json:"total"` + Rows []render.ArchiveRow `json:"rows"` + } + if err := json.Unmarshal([]byte(readPublicAsset(t, publicDir, prefix+"/archive/data.json")), &archive); err != nil { + t.Fatal(err) + } + if archive.Total != 1 { + t.Errorf("archive counts memos: %d", archive.Total) + } + for _, row := range archive.Rows { + if row.Type == "note" && row.URL != "/notes/shared/" { + t.Errorf("archive includes memo: %s", row.URL) + } + } + archiveHTML := readPublicAsset(t, publicDir, prefix+"/archive/index.html") + if strings.Contains(archiveHTML, `data-archive-row-id="note:/memos/`) || strings.Contains(archiveHTML, `data-mobile-tag="生活"`) { + t.Error("archive HTML includes memo rows or memo-only tags") + } + var graphData graph.Data + if err := json.Unmarshal([]byte(readPublicAsset(t, publicDir, prefix+"/graph.json")), &graphData); err != nil { + t.Fatal(err) + } + if len(graphData.Nodes) != 4 || len(graphData.Links) != 2 { + t.Fatalf("shared graph: %+v", graphData) + } + link := graphData.Links[0] + if !(link.Source == "/notes/shared/" && link.Target == "/memos/shared/" || link.Target == "/notes/shared/" && link.Source == "/memos/shared/") { + t.Errorf("wrong cross-section edge: %+v", link) + } + } + detail := readPublicAsset(t, publicDir, "/memos/shared/index.html") + for _, unwanted := range []string{"data-reader-toggle", "data-reader-exit", `class="reading-time"`, `data-mobile-progress-text`} { + if strings.Contains(detail, unwanted) { + t.Errorf("memo detail contains %s", unwanted) + } + } + for _, want := range []string{`data-page-kind="memo"`, `data-path="/memos/shared/"`, `href="/notes/shared/"`, `id="fn:1"`, "post-content"} { + if !strings.Contains(detail, want) { + t.Errorf("detail missing %s", want) + } + } + if strings.Contains(readPublicAsset(t, publicDir, "/notes/shared/index.html"), "obsolete title") { + t.Error("frontmatter title still used") + } + var index []search.IndexItem + if err := json.Unmarshal([]byte(readPublicAsset(t, publicDir, "/search.json")), &index); err != nil { + t.Fatal(err) + } + if len(index) != 4 { + t.Errorf("search missing content: %d items", len(index)) + } + for _, item := range index { + for _, version := range item.Versions { + if version.Section == "memos" && (version.ReadingTime != "" || version.ReadingMinutes != 0) { + t.Error("memo search result contains reading statistics") + } + } + } + for _, url := range []string{"/memos/", "/memos/shared/", "/memos/2026/窗边/", "/en_US/memos/english/"} { + if !strings.Contains(readPublicAsset(t, publicDir, "/sitemap.xml"), ""+url+"") { + t.Errorf("sitemap missing %s", url) + } + } +} + +func TestMemosPinOrdering(t *testing.T) { + vault := t.TempDir() + publicDir := filepath.Join(t.TempDir(), "public") + writeTestFile(t, vault, "pages/about.md", "---\ntitle: About\n---\nAbout.") + writeTestFile(t, vault, "memos/latest.md", "---\ndate: 2026-10-03\n---\nLatest memo.") + writeTestFile(t, vault, "memos/ordinary.md", "---\ndate: 2026-10-02\npinned: false\n---\nOrdinary memo.") + writeTestFile(t, vault, "memos/pinned-older.md", "---\ndate: 2026-01-02T23:00:00+08:00\npinned: true\n---\nOlder pin.") + for _, state := range []struct { + name string + pin string + order []string + count int + }{ + {"pinned", "true", []string{"pinned-newer", "pinned-older", "latest", "ordinary"}, 2}, + {"unpinned", "false", []string{"pinned-older", "latest", "ordinary", "pinned-newer"}, 1}, + } { + t.Run(state.name, func(t *testing.T) { + writeTestFile(t, vault, "memos/pinned-newer.md", "---\ndate: 2026-01-02T17:00:00Z\npinned: "+state.pin+"\n---\nNewer pin.") + if _, err := Build(Options{ContentDir: vault, NotesDir: filepath.Join(vault, "notes"), PublicDir: publicDir}); err != nil { + t.Fatal(err) + } + for _, prefix := range []string{"", "/en_US"} { + feed := readPublicAsset(t, publicDir, prefix+"/memos/index.html") + previous := -1 + for _, slug := range state.order { + position := strings.Index(feed, `data-memo-url="/memos/`+slug+`/"`) + if position <= previous { + t.Fatalf("%s: %s is missing or out of order, want %v", prefix, slug, state.order) + } + previous = position + } + if count := strings.Count(feed, `data-ui-aria="memos.pinned"`); count != state.count { + t.Errorf("%s: got %d pin markers, want %d", prefix, count, state.count) + } + } + }) + } +} diff --git a/internal/site/og_test.go b/internal/site/og_test.go new file mode 100644 index 00000000..6b2c57cf --- /dev/null +++ b/internal/site/og_test.go @@ -0,0 +1,167 @@ +package site + +import ( + "bytes" + "fmt" + "image" + "image/color" + "image/png" + "io/fs" + "os" + "path/filepath" + "regexp" + "strconv" + "strings" + "testing" + + "github.com/StatIndet/daybook/internal/config" + "github.com/StatIndet/daybook/internal/og" + "github.com/StatIndet/daybook/internal/progress" + "golang.org/x/net/html" +) + +func writeOGTestImage(t *testing.T, vault, name string) { + t.Helper() + picture := image.NewRGBA(image.Rect(0, 0, 240, 160)) + for y := 0; y < 160; y++ { + for x := 0; x < 240; x++ { + picture.Set(x, y, color.RGBA{uint8(x), uint8(y), 180, 255}) + } + } + var data bytes.Buffer + if err := png.Encode(&data, picture); err != nil { + t.Fatal(err) + } + writeTestFile(t, vault, name, data.String()) +} + +func headMeta(t *testing.T, document string) map[string]string { + t.Helper() + meta := make(map[string]string) + z := html.NewTokenizer(strings.NewReader(document)) + for z.Next() != html.ErrorToken { + token := z.Token() + if token.Type == html.EndTagToken && token.Data == "head" { + break + } + if token.Data != "meta" { + continue + } + var key, value string + for _, attr := range token.Attr { + switch attr.Key { + case "name", "property": + key = attr.Val + case "content": + value = attr.Val + } + } + meta[key] = value + } + return meta +} + +func TestBuildStaticOpenGraph(t *testing.T) { + vault := t.TempDir() + publicDir := filepath.Join(t.TempDir(), "public") + writeTestFile(t, vault, "pages/about.md", "---\ntitle: About\n---\nAbout.") + writeTestFile(t, vault, "notes/中文 笔记.md", "---\ndate: 2026-10-04\ntags: [生活, Go, �笔, 更多]\n---\n## 正文\n没有 summary 的**中文笔记**,包� [链接](https://example.com)。") + writeTestFile(t, vault, "notes/english.md", "---\ndate: 2026-10-04\nlang: en_US\nsummary: A **short** summary.\nupdated: 2026-10-05\n---\nBody should not replace the supplied summary.") + writeTestFile(t, vault, "memos/�应显示为标题.md", "---\ndate: 2026-10-04T22:30:00+08:00\nsummary: This summary must not replace the memo body.\n---\n这是一�**没有图片**的短记。") + writeOGTestImage(t, vault, "attachments/窗 边.png") + for count := 1; count <= 5; count++ { + body := "有图片的中文帖�。 " + strings.Repeat("Long memo content,��正文�读。 ", 35) + for i := 0; i < count; i++ { + body += "\n\n![[窗 边.png]]" + } + name := string(rune('0' + count)) + writeTestFile(t, vault, "memos/photos-"+name+".md", "---\ndate: 2026-10-04\ntags: [摄影]\n---\n"+body) + } + writeTestFile(t, vault, "memos/draft.md", "---\ndraft: true\n---\nPrivate.") + writeTestFile(t, vault, "notes/invalid.md", "---\ndate: invalid\n---\nInvalid.") + cfg := config.Config{ + Site: config.SiteConfig{URL: "https://blog.example/"}, + Profile: config.ProfileConfig{Author: config.AuthorConfig{ + Name: "�帙", NameEn: "Shizhi", Avatar: "/attachments/窗%20边.png", LogoText: "Daybook", + }}, + } + var log bytes.Buffer + reporter := progress.NewReporter(BuildStages(cfg), progress.Options{Writer: &log}) + defer reporter.Close() + result, err := Build(Options{Config: cfg, ContentDir: vault, NotesDir: filepath.Join(vault, "notes"), PublicDir: publicDir, Reporter: reporter}) + if err != nil { + t.Fatal(err) + } + reporter.Done("Built site", fmt.Sprintf("%d social cards", result.SocialCards)) + pages := 0 + if err := filepath.WalkDir(publicDir, func(filename string, entry fs.DirEntry, err error) error { + if err == nil && entry.IsDir() && filename == filepath.Join(publicDir, "vendor") { + return filepath.SkipDir + } + if err == nil && !entry.IsDir() && strings.HasSuffix(filename, ".html") { + pages++ + } + return err + }); err != nil { + t.Fatal(err) + } + match := regexp.MustCompile(`END Rendering pages · (\d+)/(\d+)`).FindStringSubmatch(log.String()) + if len(match) != 3 { + t.Fatal("missing page completion log", log.String()) + } + completed, _ := strconv.Atoi(match[1]) + total, _ := strconv.Atoi(match[2]) + if completed != pages || total != pages { + t.Fatalf("reported %d/%d pages, wrote %d", completed, total, pages) + } + if result.SocialCards != 8 || !strings.Contains(log.String(), "END Validating generated images · 8/8") || !strings.Contains(log.String(), "8 social cards · 1 warnings") || strings.ContainsAny(log.String(), "\x1b\r") { + t.Fatal("unexpected build feedback", log.String()) + } + if len(result.Notes) != 2 || len(result.Memos) != 6 || len(result.Skipped) != 1 { + t.Fatalf("unexpected published entries: %+v", result) + } + for _, note := range append(result.Notes, result.Memos...) { + relative := og.ImagePath(note.Section, note.URL) + if !strings.HasPrefix(relative, "/generated/og/"+note.Section+"/") { + t.Fatalf("unexpected image path: %s", relative) + } + data, err := os.ReadFile(filepath.Join(publicDir, filepath.FromSlash(strings.TrimPrefix(relative, "/")))) + if err != nil { + t.Fatal(err) + } + picture, err := png.Decode(bytes.NewReader(data)) + if err != nil || picture.Bounds().Dx() != 1200 || picture.Bounds().Dy() != 630 { + t.Fatalf("invalid 1200x630 PNG for %s: %v", note.URL, err) + } + page := readPublicAsset(t, publicDir, note.URL+"index.html") + meta := headMeta(t, page) + wantURL := "https://blog.example" + relative + if meta["og:image"] != wantURL || meta["twitter:image"] != wantURL { + t.Errorf("%s image metadata: %+v", note.URL, meta) + } + if meta["og:image:width"] != "1200" || meta["og:image:height"] != "630" || meta["og:image:type"] != "image/png" { + t.Errorf("%s image dimensions are missing", note.URL) + } + if note.Section == "memos" && meta["og:title"] != "�帙 · 2026-10-04" { + t.Errorf("memo must use its author/date as social title: %s", meta["og:title"]) + } + } + for section, count := range map[string]int{"notes": 2, "memos": 6} { + files, err := filepath.Glob(filepath.Join(publicDir, "generated", "og", section, "*.png")) + if err != nil || len(files) != count { + t.Errorf("%s generated %d images, want %d: %v", section, len(files), count, err) + } + } + plain := headMeta(t, readPublicAsset(t, publicDir, "/notes/中文 笔记/index.html"))["og:description"] + if !strings.Contains(plain, "没有 summary 的中文笔记") || strings.ContainsAny(plain, "*<>#") { + t.Errorf("body excerpt is not clean text: %s", plain) + } + summary := headMeta(t, readPublicAsset(t, publicDir, "/en_US/notes/english/index.html"))["og:description"] + if summary != "A short summary." { + t.Errorf("summary priority/cleanup failed: %s", summary) + } + plainMemo := headMeta(t, readPublicAsset(t, publicDir, "/memos/�应显示为标题/index.html"))["og:description"] + if plainMemo != "这是一�没有图片的短记。" { + t.Errorf("memo description must come from its body: %s", plainMemo) + } +} diff --git a/internal/site/pagination.go b/internal/site/pagination.go new file mode 100644 index 00000000..5a1e87a6 --- /dev/null +++ b/internal/site/pagination.go @@ -0,0 +1,55 @@ +package site + +import ( + "fmt" + "math" + "github.com/StatIndet/daybook/internal/render" +) + +const PageSize = 10 + +func generatePaginationData(totalItems int, currentPage int, basePath string) render.PaginationData { + totalPages := int(math.Ceil(float64(totalItems) / float64(PageSize))) + if totalPages == 0 { + totalPages = 1 + } + + data := render.PaginationData{ + CurrentPage: currentPage, + TotalPages: totalPages, + } + + getPageURL := func(page int) string { + if page == 1 { + return joinURL("/", basePath) + } + return joinURL("/", basePath, "page", fmt.Sprintf("%d", page)) + } + + if currentPage > 1 { + data.PrevURL = getPageURL(currentPage - 1) + } + if currentPage < totalPages { + data.NextURL = getPageURL(currentPage + 1) + } + + // Logic for compact page numbers + // � 1 … 4 5 6 … 18 → + const window = 1 + + for i := 1; i <= totalPages; i++ { + if i == 1 || i == totalPages || (i >= currentPage-window && i <= currentPage+window) { + data.Items = append(data.Items, render.PaginationItem{ + PageNumber: i, + URL: getPageURL(i), + IsCurrent: i == currentPage, + }) + } else if i == currentPage-window-1 || i == currentPage+window+1 { + data.Items = append(data.Items, render.PaginationItem{ + IsEllipsis: true, + }) + } + } + + return data +} diff --git a/internal/site/progress.go b/internal/site/progress.go new file mode 100644 index 00000000..dfef320a --- /dev/null +++ b/internal/site/progress.go @@ -0,0 +1,121 @@ +package site + +import ( + "fmt" + "path/filepath" + + "github.com/StatIndet/daybook/internal/config" + "github.com/StatIndet/daybook/internal/content" + "github.com/StatIndet/daybook/internal/obsidian" + "github.com/StatIndet/daybook/internal/progress" +) + +const ( + stageGitHub = iota + stageScan + stageAssets + stageMusic + stageLinks + stageSearch + stagePages + stageOGPrepare + stageOGRender + stageOGValidate +) + +// BuildStages uses simple work weights; stage timings in --verbose allow these +// to be calibrated without storing history or estimating a network deadline. +// Local external-vault samples with 5/24 cards spent 0.63/2.68s rendering cards, +// 0.32/0.33s preparing Chromium, 0.20/0.16s on assets and 0.07/0.16s on pages. +// Indexing was below 0.01s. Network work keeps a separate, approximate allowance. +func BuildStages(cfg config.Config) []progress.Stage { + githubWeight := 10.0 + if cfg.GitHub.Username == "" { + githubWeight = 0 + } + return []progress.Stage{ + {Name: "Syncing GitHub profile", Weight: githubWeight}, + {Name: "Scanning content", Weight: 1}, + {Name: "Preparing static assets", Weight: 10}, + {Name: "Fetching music metadata", Weight: 5}, + {Name: "Building backlinks", Weight: 1}, + {Name: "Building search index", Weight: 1}, + {Name: "Rendering pages", Weight: 10}, + {Name: "Preparing social-card renderer", Weight: 10}, + {Name: "Rendering social cards", Weight: 60}, + {Name: "Validating generated images", Weight: 2}, + } +} + +func relativeSource(root, filename string) string { + if rel, err := filepath.Rel(root, filename); err == nil { + return filepath.ToSlash(rel) + } + return filename +} + +func reportDiagnostics(r *progress.Reporter, root string, diags []obsidian.Diagnostic, seen map[string]bool) { + for _, d := range diags { + key := fmt.Sprintf("%s|%s|%d|%d|%s", d.Code, d.SourcePath, d.Line, d.Column, d.Message) + if seen[key] { + continue + } + seen[key] = true + r.Warnf("%s:%d:%d · %s · %s", relativeSource(root, d.SourcePath), d.Line, d.Column, d.Code, d.Message) + if d.Snippet != "" { + r.Verbosef("%s", d.Snippet) + } + for _, candidate := range d.Candidates { + r.Verbosef("candidate: %s", candidate) + } + } +} + +// Count only pages that will actually be written, including language and +// pagination redirects. Drafts and aliases shadowed by canonical routes don't +// consume a unit. JSON/feed writes stay visible as tasks, without a fake count. +func pageCount(groups []*content.ArticleGroup, langs []string, tags *content.TagRegistry, canonical map[string]bool) int { + total, regular := 0, 0 + tagCounts := make(map[string]int) + for _, group := range groups { + for _, note := range group.PublishedVersions() { + if note.Section != "memos" && !note.Pinned { + regular++ + } + seen := make(map[string]bool) + for _, raw := range note.Tags { + name := tags.GetTitle(tags.GetID(raw)) + if !seen[name] { + tagCounts[name]++ + seen[name] = true + } + } + } + } + for _, lang := range langs { + prefix := "" + if lang == "en_US" { + prefix = lang + } + total += 5 + max(1, (regular+PageSize-1)/PageSize) + 1 + for _, group := range groups { + for _, note := range group.PublishedVersions() { + if note.Lang == lang || !canonical[joinURL("/", prefix, note.Section, note.Slug)] { + total++ + } + } + } + for _, tag := range collectTagLinksForLang(groups, lang, tags) { + total += max(1, (tagCounts[tag.Name]+PageSize-1)/PageSize) + 1 + } + } + return total +} + +func publishedCount(groups []*content.ArticleGroup) int { + total := 0 + for _, group := range groups { + total += len(group.PublishedVersions()) + } + return total +} diff --git a/internal/site/progress_test.go b/internal/site/progress_test.go new file mode 100644 index 00000000..4f2c0ee2 --- /dev/null +++ b/internal/site/progress_test.go @@ -0,0 +1,63 @@ +package site + +import ( + "bytes" + "strings" + "testing" + + "github.com/StatIndet/daybook/internal/content" + "github.com/StatIndet/daybook/internal/obsidian" + "github.com/StatIndet/daybook/internal/progress" +) + +func TestPageCountIncludesPublishedVersionsPaginationAndAliases(t *testing.T) { + var notes []content.Note + for i := range PageSize + 1 { + notes = append(notes, content.Note{Slug: string(rune('a' + i)), Section: "notes", Lang: "zh_CN", Tags: []string{"one", "one"}}) + } + notes = append(notes, + content.Note{Slug: "a", Section: "notes", Lang: "en_US", Tags: []string{"one"}}, + content.Note{Slug: "pinned", Section: "notes", Lang: "zh_CN", Pinned: true, Tags: []string{"two"}}, + content.Note{Slug: "memo", Section: "memos", Lang: "zh_CN"}, + content.Note{Slug: "draft", Section: "notes", Lang: "zh_CN", Draft: true, Tags: []string{"private"}}, + ) + canonical := make(map[string]bool) + for _, note := range notes { + prefix := "" + if note.Lang == "en_US" { + prefix = "en_US" + } + if !note.Draft { + canonical[joinURL("/", prefix, note.Section, note.Slug)] = true + } + } + groups, err := content.GroupNotes(notes) + if err != nil { + t.Fatal(err) + } + tags, err := content.NewTagRegistry(notes) + if err != nil { + t.Fatal(err) + } + // Two language passes: 5 fixed pages + 2 note pages + 1 pagination alias + + // (2 pages + alias for tag one) + (1 page + alias for tag two) = 13 each. + // Published content produces two routes per unique slug; the translated 'a' + // shares the existing canonical routes instead of creating two extra aliases. + want := 26 + 2*(PageSize+3) + if got := pageCount(groups, []string{"zh_CN", "en_US"}, tags, canonical); got != want { + t.Fatalf("page count = %d, want %d", got, want) + } +} + +func TestDiagnosticsPersistOnceAcrossUILanguages(t *testing.T) { + var log bytes.Buffer + r := progress.NewReporter(nil, progress.Options{Writer: &log}) + seen := make(map[string]bool) + diagnostics := []obsidian.Diagnostic{{Code: "obsidian/unresolved-note", SourcePath: "/vault/notes/鲸歌.md", Line: 24, Column: 3, Message: "missing note"}} + reportDiagnostics(r, "/vault", diagnostics, seen) + reportDiagnostics(r, "/vault", diagnostics, seen) + r.Done("Built site") + if strings.Count(log.String(), "WARN notes/鲸歌.md:24:3") != 1 || !strings.Contains(log.String(), "1 warnings") { + t.Fatal(log.String()) + } +} diff --git a/internal/site/publication_test.go b/internal/site/publication_test.go new file mode 100644 index 00000000..821cd37e --- /dev/null +++ b/internal/site/publication_test.go @@ -0,0 +1,106 @@ +package site + +import ( + "encoding/json" + "path/filepath" + "strings" + "testing" + + "github.com/StatIndet/daybook/internal/config" + "github.com/StatIndet/daybook/internal/graph" + "github.com/StatIndet/daybook/internal/search" +) + +func TestBuildPublishesEveryNonDraftNote(t *testing.T) { + vault := t.TempDir() + publicDir := filepath.Join(t.TempDir(), "public") + writeTestFile(t, vault, "pages/about.md", "---\ntitle: About\n---\nAbout") + writeTestFile(t, vault, "notes/regular.md", "---\ntitle: Regular\ndate: 2026-01-01\ntags: [RegularTag]\n---\nLink to [[pair-zh]].") + // Old vaults may still contain the removed attribute. It must neither hide + // a published note nor suppress its translation, tags or graph links. + writeTestFile(t, vault, "notes/pair-zh.md", "---\ntitle: 中文版本\ndate: 2026-01-02\ni18n_key: pair\nlisted: false\ntags: [ChineseTag]\n---\nLink to [[regular]].") + writeTestFile(t, vault, "notes/pair-en.md", "---\ntitle: English version\ndate: 2026-01-02\nlang: en_US\ni18n_key: pair\nlisted: false\ntags: [EnglishTag]\n---\nEnglish body.") + writeTestFile(t, vault, "notes/draft.md", "---\ntitle: Draft only\ndate: 2026-01-03\ndraft: true\ntags: [DraftTag]\n---\nUnpublished body.") + + result, err := Build(Options{Config: config.Config{}, ContentDir: vault, NotesDir: filepath.Join(vault, "notes"), PublicDir: publicDir}) + if err != nil { + t.Fatal(err) + } + if len(result.Notes) != 3 || len(result.Skipped) != 0 { + t.Fatalf("build result = %d notes, %v skipped; want all three published notes", len(result.Notes), result.Skipped) + } + wantURLs := []string{"/notes/regular/", "/notes/pair-zh/", "/en_US/notes/pair-en/"} + for _, prefix := range []string{"", "/en_US"} { + list := readPublicAsset(t, publicDir, prefix+"/notes/index.html") + if strings.Count(list, "data-note-card") != 3 { + t.Errorf("%s notes list must contain every published version", prefix) + } + archive := readPublicAsset(t, publicDir, prefix+"/archive/data.json") + rss := readPublicAsset(t, publicDir, prefix+"/rss.xml") + if !strings.Contains(archive, `"total":3`) || strings.Count(rss, "") != 3 { + t.Errorf("%s archive and RSS must contain all three published notes", prefix) + } + for _, url := range wantURLs { + if !strings.Contains(list, `href="`+url+`"`) || !strings.Contains(archive, `"url":"`+url+`"`) || !strings.Contains(rss, ""+url+"") { + t.Errorf("%s collections missing published article %s", prefix, url) + } + } + for _, tag := range []string{"RegularTag", "ChineseTag", "EnglishTag"} { + if !fileExists(filepath.Join(publicDir, prefix, "tags", tag, "index.html")) || !strings.Contains(list, `href="`+prefix+"/tags/"+tag+`/"`) { + t.Errorf("%s missing published tag %s", prefix, tag) + } + } + if strings.Contains(archive, "Draft only") || strings.Contains(rss, "Draft only") || strings.Contains(list, "Draft only") || fileExists(filepath.Join(publicDir, prefix, "tags", "DraftTag", "index.html")) { + t.Errorf("%s collections must exclude drafts", prefix) + } + + var data graph.Data + if err := json.Unmarshal([]byte(readPublicAsset(t, publicDir, prefix+"/graph.json")), &data); err != nil { + t.Fatal(err) + } + if len(data.Nodes) != 3 || len(data.Links) != 2 { + t.Fatalf("%s graph has %d nodes, %d links; want three published notes and two directed citations", prefix, len(data.Nodes), len(data.Links)) + } + nodeURLs := make(map[string]bool) + for _, node := range data.Nodes { + nodeURLs[node.ID] = node.Exists + } + for _, url := range wantURLs { + if !nodeURLs[url] { + t.Errorf("%s graph missing published node %s", prefix, url) + } + } + link := data.Links[0] + if !(link.Source == "/notes/regular/" && link.Target == "/notes/pair-zh/" || link.Source == "/notes/pair-zh/" && link.Target == "/notes/regular/") { + t.Errorf("%s graph link does not connect the published articles: %+v", prefix, link) + } + } + + sitemap := readPublicAsset(t, publicDir, "/sitemap.xml") + for _, url := range wantURLs { + if strings.Count(sitemap, ""+url+"") != 1 || !fileExists(filepath.Join(publicDir, url, "index.html")) { + t.Errorf("published article %s must have a page and one sitemap entry", url) + } + } + var index []search.IndexItem + if err := json.Unmarshal([]byte(readPublicAsset(t, publicDir, "/search.json")), &index); err != nil { + t.Fatal(err) + } + searchURLs := make(map[string]bool) + for _, item := range index { + for _, version := range item.Versions { + searchURLs[version.URL] = true + } + } + if len(searchURLs) != 3 { + t.Errorf("search index contains %d versions, want three published notes", len(searchURLs)) + } + for _, url := range wantURLs { + if !searchURLs[url] { + t.Errorf("search index missing published article %s", url) + } + } + if strings.Contains(sitemap, "/notes/draft/") || fileExists(filepath.Join(publicDir, "notes", "draft", "index.html")) { + t.Error("draft must not have a published page or sitemap entry") + } +} diff --git a/internal/site/site.go b/internal/site/site.go new file mode 100644 index 00000000..093fd086 --- /dev/null +++ b/internal/site/site.go @@ -0,0 +1,1656 @@ +package site + +import ( + "context" + "encoding/json" + "fmt" + "html/template" + "io" + "math" + "net/http" + "net/url" + "os" + "path" + "path/filepath" + "sort" + "strings" + "time" + "unicode" + + "github.com/StatIndet/daybook/internal/config" + "github.com/StatIndet/daybook/internal/content" + "github.com/StatIndet/daybook/internal/feed" + "github.com/StatIndet/daybook/internal/github" + "github.com/StatIndet/daybook/internal/graph" + "github.com/StatIndet/daybook/internal/i18n" + "github.com/StatIndet/daybook/internal/markdown" + "github.com/StatIndet/daybook/internal/media" + "github.com/StatIndet/daybook/internal/morphable" + "github.com/StatIndet/daybook/internal/obsidian" + "github.com/StatIndet/daybook/internal/og" + "github.com/StatIndet/daybook/internal/progress" + "github.com/StatIndet/daybook/internal/render" + "github.com/StatIndet/daybook/internal/search" + "github.com/StatIndet/daybook/internal/seo" + "github.com/StatIndet/daybook/internal/sitemap" +) + +type Options struct { + Config config.Config + ContentDir string + NotesDir string + MemosDir string + PublicDir string + Reporter *progress.Reporter +} + +type BuildResult struct { + Notes []content.Note + Memos []content.Note + Skipped []string + SocialCards int +} + +func joinURL(parts ...string) string { + p := path.Join(parts...) + if !strings.HasSuffix(p, "/") { + p += "/" + } + return p +} + +func Build(options Options) (BuildResult, error) { + r := options.Reporter + if r == nil { + r = progress.NewReporter(BuildStages(options.Config)) + defer r.Close() + } + if options.Config.GitHub.Username != "" { + r.SetStage(stageGitHub, 0) + r.Detail(options.Config.GitHub.Username + " · waiting for response") + } + ctx, cancel := context.WithTimeout(context.Background(), 35*time.Second) + defer cancel() + githubProfile, warnings, err := github.Sync(ctx, options.Config.GitHub, filepath.Join(filepath.Dir(options.PublicDir), ".daybook-cache", "github")) + if err != nil { + return BuildResult{}, fmt.Errorf("sync GitHub profile: %w", err) + } + for _, warning := range warnings { + r.Warnf("%s", warning) + } + if githubProfile != nil { + applyGitHubProfile(&options.Config, githubProfile) + } + r.SetStage(stageScan, 0) + foundNotes, foundMemos := 0, 0 + scanFile := func(filename string) { + r.Detail(fmt.Sprintf("%d notes · %d memos found · %s", foundNotes, foundMemos, relativeSource(options.ContentDir, filename))) + } + groups, skipped, err := content.LoadNotesWithProgress(options.NotesDir, func(filename string, found int) { foundNotes = found; scanFile(filename) }) + if err != nil { + return BuildResult{}, err + } + if options.MemosDir == "" { + options.MemosDir = filepath.Join(filepath.Dir(options.NotesDir), "memos") + } + memoGroups, memoSkipped, err := content.LoadMemosWithProgress(options.MemosDir, func(filename string, found int) { foundMemos = found; scanFile(filename) }) + if err != nil { + return BuildResult{}, err + } + noteGroups := groups + groups = append(groups, memoGroups...) + skipped = append(skipped, memoSkipped...) + for _, item := range skipped { + r.Warnf("Skipped invalid content: %s", item) + } + + var allNotes []content.Note + canonicalArticleRoutes := make(map[string]bool) + for _, group := range groups { + for _, note := range group.Versions { + allNotes = append(allNotes, *note) + if !note.Draft { + canonicalArticleRoutes[note.URL] = true + } + } + } + + r.Detail(fmt.Sprintf("%d notes · %d memos found", publishedCount(noteGroups), publishedCount(memoGroups))) + r.SetStage(stageAssets, 0) + r.Detail("cleaning public/") + if err := os.RemoveAll(options.PublicDir); err != nil { + return BuildResult{}, fmt.Errorf("清� public 目录: %w", err) + } + if err := os.MkdirAll(options.PublicDir, 0755); err != nil { + return BuildResult{}, fmt.Errorf("创建 public 目录: %w", err) + } + + r.Task("Copying static assets", "fonts, styles, scripts and images") + if err := copyStaticDir("static", options.PublicDir); err != nil { + return BuildResult{}, err + } + r.Task("Preparing static assets", "fingerprinting styles and scripts") + assets, err := buildAssets("static", options.PublicDir) + if err != nil { + return BuildResult{}, err + } + if githubProfile != nil { + data, err := json.Marshal(githubProfile) + if err != nil { + return BuildResult{}, fmt.Errorf("encode GitHub profile: %w", err) + } + if err := os.WriteFile(filepath.Join(options.PublicDir, "github-profile.json"), data, 0644); err != nil { + return BuildResult{}, fmt.Errorf("write GitHub profile: %w", err) + } + } + r.Task("Copying attachments", "local media") + if err := copyAttachments(options.ContentDir, options.PublicDir, r.Detail); err != nil { + return BuildResult{}, err + } + + if options.Config.Site.Favicon != "" { + faviconPath := filepath.Join(options.ContentDir, filepath.FromSlash(options.Config.Site.Favicon)) + if _, err := os.Stat(faviconPath); err != nil { + return BuildResult{}, fmt.Errorf("favicon file not found: %s", options.Config.Site.Favicon) + } + } + + totalWordCount := 0 + startedAt := options.Config.Site.StartedAt + for _, group := range groups { + for _, note := range group.PublishedVersions() { + totalWordCount += note.WordCount + if options.Config.Site.StartedAt == "" && (startedAt == "" || content.CompareDates(note.Date, startedAt) < 0) { + startedAt = note.Date + } + } + } + + musicUrls := make(map[string]bool) + for _, group := range groups { + for _, note := range group.Versions { + urls := markdown.CollectMusicDirectives(note.Body) + for _, u := range urls { + musicUrls[u] = true + } + } + } + + musicMetadataMap := make(map[string]media.MusicMetadata) + if len(musicUrls) > 0 { + musicUrlsList := make([]string, 0, len(musicUrls)) + for u := range musicUrls { + musicUrlsList = append(musicUrlsList, u) + } + sort.Strings(musicUrlsList) + r.SetStage(stageMusic, len(musicUrlsList)) + for i, u := range musicUrlsList { + r.Detail(u + " · waiting for response") + meta, err := media.FetchMusicMetadata(u, options.PublicDir) + r.Advance(i + 1) + if err != nil { + r.Warnf("%s · music metadata unavailable; continuing without metadata: %v", u, err) + continue + } + musicMetadataMap[u] = meta + } + } + + markdown.SetMusicMetadataRegistry(musicMetadataMap) + + uptimeDays := 0 + if startedAt != "" { + if t, err := content.ParseDate(startedAt); err == nil { + uptimeDays = int(time.Since(t).Hours() / 24) + if uptimeDays < 0 { + uptimeDays = 0 + } + } + } + + siteData := render.SiteData{ + StartedAt: startedAt, + UptimeDays: uptimeDays, + TotalWordCount: totalWordCount, + } + + r.SetStage(stageLinks, len(allNotes)) + obsidianIndex, err := buildObsidianIndex(allNotes, options.ContentDir, options.PublicDir, "/", func(current, total int) { + r.Advance(current) + }, r.Warnf) + if err != nil { + return BuildResult{}, err + } + + tagRegistry, err := content.NewTagRegistry(allNotes) + if err != nil { + return BuildResult{}, fmt.Errorf("构建标签字典: %w", err) + } + + searchJSONPath := filepath.Join(options.PublicDir, "search.json") + r.SetStage(stageSearch, len(groups)) + if err := search.BuildIndex(groups, estimateReadingTime, tagRegistry, searchJSONPath, func(current, total int) { + r.Advance(current) + }); err != nil { + return BuildResult{}, fmt.Errorf("生� search.json: %w", err) + } + + renderer := render.New("templates") + + var allSiteURLs []sitemap.URL + var ogCards []og.Card + ogSources := make(map[string]string) + + seenDiagnostics := make(map[string]bool) + + langs := []string{"zh_CN", "en_US"} + processedItems := 0 + r.SetStage(stagePages, pageCount(groups, langs, tagRegistry, canonicalArticleRoutes)) + startPage := func(filename string) { r.Task("Rendering pages", relativeSource(options.PublicDir, filename)) } + finishPage := func() { processedItems++; r.Advance(processedItems) } + + for _, lang := range langs { + langPrefix := "" + altLangPrefix := "en_US" + if lang == "en_US" { + langPrefix = "en_US" + altLangPrefix = "" + } + + langPublicDir := filepath.Join(options.PublicDir, langPrefix) + if langPrefix != "" { + if err := os.MkdirAll(langPublicDir, 0755); err != nil { + return BuildResult{}, err + } + } + + var noteLinks []render.NoteLink + var memoCards []render.MemoCard + memosHaveMath := false + var graphNodes []graph.InputNode + var graphLinks []graph.InputLink + var graphDocuments []graph.SearchDocument + + tagLinks := collectTagLinksForLang(groups, lang, tagRegistry) + + for _, group := range groups { + for _, note := range group.PublishedVersions() { + r.Task("Rendering pages", relativeSource(options.ContentDir, note.SourcePath)+" · "+lang) + + processed := obsidian.Process(note.Body, obsidianIndex, note.SourcePath, note.BodyStartLine) + reportDiagnostics(r, options.ContentDir, processed.Diagnostics, seenDiagnostics) + document, err := markdown.ToHTMLWithHeadings(processed.Text) + if err != nil { + return BuildResult{}, fmt.Errorf("处�笔记 %s: %w", note.SourcePath, err) + } + document.HTML = obsidian.RestoreHTML(document.HTML, processed.HTML) + graphDocuments = append(graphDocuments, graph.NewSearchDocument(*note, document.HTML, options.Config.Graph.SearchProperties)) + readingTime := "" + if note.Section != "memos" { + readingTime = estimateReadingTime(note.Body) + } + + transitionIdentity := group.I18nKey + if transitionIdentity == "" { + transitionIdentity = note.Slug + } + titleTransitionName := transitionName("note-title", transitionIdentity) + dateTransitionName := transitionName("note-date", transitionIdentity) + + var tagNodes []graph.TagNode + var displayTags []string + var tagIDs []string + seenTags := make(map[string]bool) + + for _, rawTag := range note.Tags { + canonicalID := tagRegistry.GetID(rawTag) + if seenTags[canonicalID] { + continue + } + seenTags[canonicalID] = true + + displayTag := tagRegistry.GetTitle(canonicalID) + displayTags = append(displayTags, displayTag) + tagIDs = append(tagIDs, canonicalID) + + tagNodes = append(tagNodes, graph.TagNode{ + ID: "tag:" + canonicalID, + Title: displayTag, + }) + } + + tags := displayTags + + var attachmentNodes []graph.AttachmentNode + seenAttachments := make(map[string]bool) + for _, att := range processed.Attachments { + if seenAttachments[att.RelPath] { + continue + } + seenAttachments[att.RelPath] = true + attachmentNodes = append(attachmentNodes, graph.AttachmentNode{ + ID: "attachment:" + att.RelPath, + Title: att.Name, + URL: att.PublicURL, + Path: att.RelPath, + File: filepath.Base(att.RelPath), + }) + } + + graphNodes = append(graphNodes, graph.InputNode{ + ID: note.URL, + Title: note.Title, + URL: note.URL, + Path: note.Section + "/" + note.Slug + filepath.Ext(note.SourcePath), + File: filepath.Base(note.SourcePath), + Tags: tagNodes, + Attachments: attachmentNodes, + Date: note.Date, + }) + + for _, link := range processed.Links { + targetID := link.URL + if !link.Exists { + targetID = link.Target + } + + graphLinks = append(graphLinks, graph.InputLink{ + Source: note.URL, + Target: targetID, + Exists: link.Exists, + }) + } + + titleLayoutHTML := morphable.GenerateHTML(note.Title, note.URL, "title") + + hasTranslation := len(group.PublishedVersions()) > 1 + + noteLink := render.NoteLink{ + Section: note.Section, + Title: note.Title, + Date: note.Date, + Updated: note.Updated, + Lang: lang, + ReadingTime: readingTime, + ReadingMinutes: note.ReadingMinutes, + Summary: note.Summary, + Tags: tags, + TagIDs: tagIDs, + URL: note.URL, + Slug: note.Slug, + Pinned: note.Pinned, + HasMusic: note.HasMusic, + HasTranslation: hasTranslation, + TitleLayout: titleLayoutHTML, + TitleTransitionName: titleTransitionName, + DateTransitionName: dateTransitionName, + } + + noteLinks = append(noteLinks, noteLink) + hasMath := note.Math || strings.Contains(document.HTML, `class="math-`) + dateDisplay := note.Date + updatedDisplay := note.Updated + if note.Section == "memos" { + memoLink := noteLink + memoLink.Lang = note.Lang + card, err := buildMemoCard(memoLink, note.Location, document.HTML) + if err != nil { + return BuildResult{}, fmt.Errorf("处�短记�片 %s: %w", note.SourcePath, err) + } + card.CommentEnabled = options.Config.Comment.Available() && (note.Comment == nil || *note.Comment) + card.ShareURL = strings.TrimSuffix(options.Config.Site.URL, "/") + escapeURLPath(note.URL) + card.ShareText = strings.ReplaceAll(options.Config.Share.Text, "{Title}", note.Title) + memoCards = append(memoCards, card) + dateDisplay = card.DateDisplay + updatedDisplay = card.UpdatedDisplay + memosHaveMath = memosHaveMath || hasMath + } + + // Article routes follow their source language. The surrounding UI can + // switch independently in the browser without replacing the article. + if note.Lang != lang { + legacyPath := joinURL("/", langPrefix, note.Section, note.Slug) + if !canonicalArticleRoutes[legacyPath] { + target := note.URL + "?ui=" + lang + alias := fmt.Sprintf(`Continue`, template.HTMLEscapeString(strings.TrimSuffix(options.Config.Site.URL, "/")+note.URL), template.HTMLEscapeString(target), template.HTMLEscapeString(target)) + aliasPath := filepath.Join(langPublicDir, note.Section, note.Slug, "index.html") + startPage(aliasPath) + if err := os.MkdirAll(filepath.Dir(aliasPath), 0755); err != nil { + return BuildResult{}, err + } + if err := os.WriteFile(aliasPath, []byte(alias), 0644); err != nil { + return BuildResult{}, fmt.Errorf("生�文章语言界��定�: %w", err) + } + finishPage() + } + continue + } + + commentEnabled := options.Config.Comment.Available() + if note.Comment != nil { + commentEnabled = commentEnabled && *note.Comment + } + tocEnabled := note.Section != "memos" + if note.Toc != nil { + tocEnabled = *note.Toc + } + + altLang := "en_US" + if lang == "en_US" { + altLang = "zh_CN" + } + translationURL := "" + if altNote := group.Versions[altLang]; altNote != nil && !altNote.Draft { + translationURL = altNote.URL + } + altURL := note.URL + "?ui=" + altLang + + outputPath := filepath.Join(langPublicDir, note.Section, note.Slug, "index.html") + var noteAlternates []seo.Alternate + if hasTranslation { + for altL, altNote := range group.Versions { + if altNote.Draft { + continue + } + altPrefix := "" + if altL == "en_US" { + altPrefix = "/en_US" + } + noteAlternates = append(noteAlternates, seo.Alternate{ + Lang: altL, + URL: joinURL("/", altPrefix, altNote.Section, altNote.Slug), + }) + } + } else { + noteAlternates = []seo.Alternate{{Lang: lang, URL: joinURL("/", langPrefix, note.Section, note.Slug)}} + } + + ogCard, err := og.NewCard(*note, document.HTML, options.Config, displayTags) + if err != nil { + return BuildResult{}, fmt.Errorf("准备分享图片 %s: %w", note.SourcePath, err) + } + ogCards = append(ogCards, ogCard) + ogSources[ogCard.PageURL] = relativeSource(options.ContentDir, note.SourcePath) + noteSEOArgs := seo.BuilderArgs{ + Config: options.Config, + Lang: lang, + Title: note.Title, + Description: ogCard.Description, + Image: ogCard.OutputPath, + ImageWidth: 1200, + ImageHeight: 630, + ImageType: "image/png", + PageURL: joinURL("/", langPrefix, note.Section, note.Slug), + Published: note.Date, + Modified: note.Updated, + Tags: displayTags, + Alternates: noteAlternates, + } + + canonicalPath := joinURL("/", langPrefix, note.Section, note.Slug) + shareURL := strings.TrimSuffix(options.Config.Site.URL, "/") + escapeURLPath(canonicalPath) + shareText := strings.ReplaceAll(options.Config.Share.Text, "{Title}", note.Title) + + pageKind, bodyClass := "note", "note-body page-body" + var pageSEO seo.SEOData + if note.Section == "memos" { + pageKind, bodyClass = "memo", "note-body memo-body page-body" + pageSEO = seo.BuildForMemo(noteSEOArgs) + } else { + pageSEO = seo.BuildForNote(noteSEOArgs) + } + notePageData := render.NoteData{ + Site: siteData, + Config: options.Config, + PageTitle: note.Title, + PageKind: pageKind, + BodyClass: bodyClass, + Lang: lang, + AlternateURL: altURL, + Assets: assets, + HasMath: hasMath, + Tags: tagLinks, + SEO: pageSEO, + Note: render.NotePage{ + Section: note.Section, + Location: note.Location, + Title: note.Title, + Date: note.Date, + DateDisplay: dateDisplay, + Updated: note.Updated, + UpdatedDisplay: updatedDisplay, + ReadingTime: readingTime, + Summary: note.Summary, + URL: noteLink.URL, + Slug: note.Slug, + I18nKey: group.I18nKey, + CommentPath: canonicalPath, + Tags: tags, + WordCount: note.WordCount, + ReadingMinutes: note.ReadingMinutes, + CanonicalPath: canonicalPath, + ShareURL: shareURL, + ShareText: shareText, + HTML: template.HTML(document.HTML), + Headings: renderHeadings(document.Headings), + HasMermaid: document.HasMermaid, + HasMath: hasMath, + TocEnabled: tocEnabled, + CommentEnabled: commentEnabled, + Lang: note.Lang, + TranslationURL: translationURL, + HasTranslation: hasTranslation, + Pinned: note.Pinned, + HasMusic: note.HasMusic, + TitleLayout: titleLayoutHTML, + TitleTransitionName: titleTransitionName, + DateTransitionName: dateTransitionName, + }, + } + + startPage(outputPath) + if err := renderer.RenderNote(outputPath, notePageData); err != nil { + return BuildResult{}, fmt.Errorf("生�笔记页� %s: %w", note.SourcePath, err) + } + finishPage() + + } + } + + // Sorting versions by their own date prevents repeated archive year groups. + sort.SliceStable(noteLinks, func(i, j int) bool { + if cmp := content.CompareDates(noteLinks[i].Date, noteLinks[j].Date); cmp != 0 { + return cmp > 0 + } + if noteLinks[i].Title != noteLinks[j].Title { + return noteLinks[i].Title < noteLinks[j].Title + } + return noteLinks[i].URL < noteLinks[j].URL + }) + + indexPath := filepath.Join(langPublicDir, "index.html") + homeAlternates := []seo.Alternate{{Lang: "zh_CN", URL: "/"}, {Lang: "en_US", URL: "/en_US/"}} + homeSEOArgs := seo.BuilderArgs{ + GitHub: githubProfile, + Config: options.Config, + Lang: lang, + Title: options.Config.GetHomeTitle(lang), + Description: options.Config.GetHomeDescription(lang), + PageURL: joinURL("/", langPrefix), + Alternates: homeAlternates, + } + + indexData := render.IndexData{ + GitHub: githubProfile, + Site: siteData, + Config: options.Config, + PageTitle: i18n.T(lang, "nav.home"), + PageKind: "home", + BodyClass: "home-body", + Lang: lang, + AlternateURL: joinURL("/", altLangPrefix), + Assets: assets, + Notes: noteLinks, + Tags: tagLinks, + SEO: seo.BuildForHome(homeSEOArgs), + } + startPage(indexPath) + if err := renderer.RenderIndex(indexPath, indexData); err != nil { + return BuildResult{}, fmt.Errorf("生�首页: %w", err) + } + finishPage() + + var pinnedNotes []render.NoteLink + var regularNotes []render.NoteLink + for _, link := range noteLinks { + if link.Section == "memos" { + continue + } + if link.Pinned { + pinnedNotes = append(pinnedNotes, link) + } else { + regularNotes = append(regularNotes, link) + } + } + + sortByUpdated := func(i, j int, list []render.NoteLink) bool { + timeI := list[i].Updated + if timeI == "" { + timeI = list[i].Date + } + timeJ := list[j].Updated + if timeJ == "" { + timeJ = list[j].Date + } + if timeI == timeJ { + return list[i].Title < list[j].Title + } + return content.CompareDates(timeI, timeJ) > 0 + } + sort.SliceStable(pinnedNotes, func(i, j int) bool { return sortByUpdated(i, j, pinnedNotes) }) + sort.SliceStable(regularNotes, func(i, j int) bool { return sortByUpdated(i, j, regularNotes) }) + + baseNotesPath := joinURL("/", langPrefix, "notes") + + totalPages := int(math.Ceil(float64(len(regularNotes)) / float64(PageSize))) + if totalPages == 0 { + totalPages = 1 + } + + for p := 1; p <= totalPages; p++ { + var pagePath string + var pageURL string + if p == 1 { + pagePath = filepath.Join(langPublicDir, "notes", "index.html") + pageURL = baseNotesPath + } else { + pagePath = filepath.Join(langPublicDir, "notes", "page", fmt.Sprintf("%d", p), "index.html") + pageURL = joinURL(baseNotesPath, "page", fmt.Sprintf("%d", p)) + } + + if err := os.MkdirAll(filepath.Dir(pagePath), 0755); err != nil { + return BuildResult{}, err + } + + startIdx := (p - 1) * PageSize + endIdx := startIdx + PageSize + if endIdx > len(regularNotes) { + endIdx = len(regularNotes) + } + + pageNotes := regularNotes + if startIdx < len(regularNotes) { + pageNotes = regularNotes[startIdx:endIdx] + } else { + pageNotes = nil + } + + pagePinned := pinnedNotes + if p > 1 { + pagePinned = nil + } + + notesAlternates := []seo.Alternate{{Lang: "zh_CN", URL: "/notes/"}, {Lang: "en_US", URL: "/en_US/notes/"}} + if p > 1 { + pageStr := fmt.Sprintf("page/%d/", p) + notesAlternates = []seo.Alternate{{Lang: "zh_CN", URL: "/notes/" + pageStr}, {Lang: "en_US", URL: "/en_US/notes/" + pageStr}} + } + + notesSEOArgs := seo.BuilderArgs{ + Config: options.Config, + Lang: lang, + Title: i18n.T(lang, "nav.notes"), + Description: i18n.T(lang, "seo.notes.description"), + PageURL: pageURL, + Alternates: notesAlternates, + } + seoData := seo.BuildForCollection(notesSEOArgs) + + paginationData := generatePaginationData(len(regularNotes), p, joinURL(langPrefix, "notes")) + seoData.PaginationPrev = paginationData.PrevURL + seoData.PaginationNext = paginationData.NextURL + + altURL := joinURL("/", altLangPrefix, "notes") + if p > 1 { + altURL = joinURL("/", altLangPrefix, "notes", "page", fmt.Sprintf("%d", p)) + } + + notesData := render.NotesData{ + Site: siteData, + Config: options.Config, + PageTitle: i18n.T(lang, "nav.notes"), + PageKind: "notes", + BodyClass: "notes-list-body page-body", + Lang: lang, + AlternateURL: altURL, + Assets: assets, + Notes: pageNotes, + PinnedNotes: pagePinned, + MonthGroups: monthGroups(pageNotes), + Tags: tagLinks, + SEO: seoData, + Pagination: paginationData, + } + + startPage(pagePath) + if err := renderer.RenderNotes(pagePath, notesData); err != nil { + return BuildResult{}, fmt.Errorf("生�文章页: %w", err) + } + finishPage() + allSiteURLs = append(allSiteURLs, sitemap.URL{Loc: pageURL}) + } + + // Create alias redirect for page 1 + page1AliasPath := filepath.Join(langPublicDir, "notes", "page", "1", "index.html") + startPage(page1AliasPath) + if err := os.MkdirAll(filepath.Dir(page1AliasPath), 0755); err != nil { + return BuildResult{}, err + } + { + aliasHTML := fmt.Sprintf(``, baseNotesPath, baseNotesPath) + if err := os.WriteFile(page1AliasPath, []byte(aliasHTML), 0644); err != nil { + return BuildResult{}, err + } + finishPage() + } + + sort.SliceStable(memoCards, func(i, j int) bool { + if memoCards[i].Pinned != memoCards[j].Pinned { + return memoCards[i].Pinned + } + if cmp := content.CompareDates(memoCards[i].Date, memoCards[j].Date); cmp != 0 { + return cmp > 0 + } + return memoCards[i].URL < memoCards[j].URL + }) + memosURL := joinURL("/", langPrefix, "memos") + memosData := render.MemosData{ + Site: siteData, Config: options.Config, PageTitle: i18n.T(lang, "nav.memos"), + PageKind: "memos", BodyClass: "memos-body page-body", Lang: lang, + AlternateURL: joinURL("/", altLangPrefix, "memos"), Assets: assets, + HasMath: memosHaveMath, Memos: memoCards, + Tags: collectTagLinksForLang(memoGroups, lang, tagRegistry), + SEO: seo.BuildForCollection(seo.BuilderArgs{ + Config: options.Config, Lang: lang, Title: i18n.T(lang, "nav.memos"), + Description: i18n.T(lang, "seo.memos.description"), PageURL: memosURL, + Alternates: []seo.Alternate{{Lang: "zh_CN", URL: "/memos/"}, {Lang: "en_US", URL: "/en_US/memos/"}}, + }), + } + startPage(filepath.Join(langPublicDir, "memos", "index.html")) + if err := renderer.RenderMemos(filepath.Join(langPublicDir, "memos", "index.html"), memosData); err != nil { + return BuildResult{}, fmt.Errorf("生�短记页�: %w", err) + } + finishPage() + allSiteURLs = append(allSiteURLs, sitemap.URL{Loc: memosURL}) + + archivePath := filepath.Join(langPublicDir, "archive", "index.html") + archiveAlternates := []seo.Alternate{{Lang: "zh_CN", URL: "/archive/"}, {Lang: "en_US", URL: "/en_US/archive/"}} + archiveSEOArgs := seo.BuilderArgs{ + Config: options.Config, + Lang: lang, + Title: i18n.T(lang, "nav.archive"), + Description: i18n.T(lang, "seo.archive.description"), + PageURL: joinURL("/", langPrefix, "archive"), + Alternates: archiveAlternates, + } + + var archiveNotes []render.NoteLink + for _, link := range noteLinks { + if link.Section != "memos" { + archiveNotes = append(archiveNotes, link) + } + } + allArchiveRows := buildArchiveRows(archiveNotes) + var bootstrapRows []render.ArchiveRow + if len(allArchiveRows) > 8 { + bootstrapRows = allArchiveRows[:8] + } else { + bootstrapRows = allArchiveRows + } + + archiveData := render.ArchiveData{ + Site: siteData, + Config: options.Config, + PageTitle: i18n.T(lang, "nav.archive"), + PageKind: "archive", + BodyClass: "archive-body page-body", + Lang: lang, + AlternateURL: joinURL("/", altLangPrefix, "archive"), + Assets: assets, + Total: len(archiveNotes), + Rows: bootstrapRows, + Tags: collectTagLinksForLang(noteGroups, lang, tagRegistry), + SEO: seo.BuildForCollection(archiveSEOArgs), + } + startPage(archivePath) + if err := renderer.RenderArchive(archivePath, archiveData); err != nil { + return BuildResult{}, fmt.Errorf("生�归档页: %w", err) + } + finishPage() + + // Write all data to data.json + archiveDataJSON := struct { + Version int `json:"version"` + Total int `json:"total"` + Rows []render.ArchiveRow `json:"rows"` + }{ + Version: 1, + Total: len(archiveNotes), + Rows: allArchiveRows, + } + + dataJSONPath := filepath.Join(langPublicDir, "archive", "data.json") + dataJSONBytes, err := json.Marshal(archiveDataJSON) + if err != nil { + return BuildResult{}, err + } + if err := os.WriteFile(dataJSONPath, dataJSONBytes, 0644); err != nil { + return BuildResult{}, err + } + + aboutFile := "about.md" + if lang == "en_US" { + enPath := filepath.Join(filepath.Dir(options.NotesDir), "pages", "about-en.md") + if _, err := os.Stat(enPath); err == nil { + aboutFile = "about-en.md" + } + } + + r.Task("Rendering pages", "pages/"+aboutFile+" · "+lang) + aboutPage, err := content.ParsePageFile(filepath.Join(filepath.Dir(options.NotesDir), "pages", aboutFile)) + if err != nil { + return BuildResult{}, fmt.Errorf("读�关于页: %w", err) + } + aboutProcessed := obsidian.Process(aboutPage.Body, obsidianIndex, aboutPage.SourcePath, aboutPage.BodyStartLine) + reportDiagnostics(r, options.ContentDir, aboutProcessed.Diagnostics, seenDiagnostics) + aboutDocument, err := markdown.ToHTMLWithHeadings(aboutProcessed.Text) + if err != nil { + return BuildResult{}, fmt.Errorf("处�关于页: %w", err) + } + aboutDocument.HTML = obsidian.RestoreHTML(aboutDocument.HTML, aboutProcessed.HTML) + + aboutEnPath := filepath.Join(filepath.Dir(options.NotesDir), "pages", "about-en.md") + aboutZhPath := filepath.Join(filepath.Dir(options.NotesDir), "pages", "about.md") + aboutHasTranslation := false + if _, err1 := os.Stat(aboutEnPath); err1 == nil { + if _, err2 := os.Stat(aboutZhPath); err2 == nil { + aboutHasTranslation = true + } + } + + aboutPath := filepath.Join(langPublicDir, "about", "index.html") + + var aboutAlternates []seo.Alternate + if aboutHasTranslation { + aboutAlternates = []seo.Alternate{{Lang: "zh_CN", URL: "/about/"}, {Lang: "en_US", URL: "/en_US/about/"}} + } else { + aboutAlternates = []seo.Alternate{{Lang: lang, URL: joinURL("/", langPrefix, "about")}} + } + aboutSEOArgs := seo.BuilderArgs{ + Config: options.Config, + Lang: lang, + Title: aboutPage.Title, + Description: aboutPage.Summary, + PageURL: joinURL("/", langPrefix, "about"), + Published: aboutPage.Date, + Modified: aboutPage.Updated, + Alternates: aboutAlternates, + } + + aboutData := render.AboutData{ + Site: siteData, + Config: options.Config, + PageTitle: aboutPage.Title, + PageKind: "about", + BodyClass: "about-body page-body", + Lang: lang, + AlternateURL: joinURL("/", altLangPrefix, "about"), + Assets: assets, + Spiral: render.NewGoldenSpiral(), + HasTranslation: aboutHasTranslation, + Title: aboutPage.Title, + Summary: aboutPage.Summary, + Date: aboutPage.Date, + Updated: aboutPage.Updated, + ReadingTime: estimateReadingTime(aboutPage.Body), + WordCount: aboutPage.WordCount, + HTML: template.HTML(aboutDocument.HTML), + Tags: tagLinks, + SEO: seo.BuildForAbout(aboutSEOArgs), + } + startPage(aboutPath) + if err := renderer.RenderAbout(aboutPath, aboutData); err != nil { + return BuildResult{}, fmt.Errorf("生�关于页: %w", err) + } + finishPage() + + r.Task("Writing graph data", lang) + graphJSONPath := filepath.Join(langPublicDir, "graph.json") + if err := graph.BuildJSON(graphNodes, graphLinks, graphJSONPath); err != nil { + return BuildResult{}, fmt.Errorf("生� graph.json: %w", err) + } + if err := graph.BuildSearchJSON(graphDocuments, filepath.Join(langPublicDir, "graph-search.json")); err != nil { + return BuildResult{}, fmt.Errorf("生� graph-search.json: %w", err) + } + + graphPath := filepath.Join(langPublicDir, "graph", "index.html") + graphAlternates := []seo.Alternate{{Lang: "zh_CN", URL: "/graph/"}, {Lang: "en_US", URL: "/en_US/graph/"}} + graphSEOArgs := seo.BuilderArgs{ + Config: options.Config, + Lang: lang, + Title: i18n.T(lang, "nav.graph"), + Description: i18n.T(lang, "seo.graph.description"), + PageURL: joinURL("/", langPrefix, "graph"), + Alternates: graphAlternates, + } + + graphData := render.GraphData{ + Site: siteData, + Config: options.Config, + PageTitle: i18n.T(lang, "nav.graph"), + PageKind: "graph", + BodyClass: "graph-body page-body", + Lang: lang, + AlternateURL: joinURL("/", altLangPrefix, "graph"), + Assets: assets, + Tags: tagLinks, + SEO: seo.BuildForGraph(graphSEOArgs), + } + startPage(graphPath) + if err := renderer.RenderGraph(graphPath, graphData); err != nil { + return BuildResult{}, fmt.Errorf("生�图谱页: %w", err) + } + finishPage() + + r.Task("Writing feed", lang+"/rss.xml") + if err := feed.Write(filepath.Join(langPublicDir, "rss.xml"), lang, options.Config, noteLinks); err != nil { + return BuildResult{}, err + } + + for _, tagLink := range tagLinks { + var tagNotes []render.NoteLink + + for _, n := range noteLinks { + for _, displayTag := range n.Tags { + if displayTag == tagLink.Name { + tagNotes = append(tagNotes, n) + break + } + } + } + + baseTagPath := joinURL("/", langPrefix, "tags", seo.TagSlug(tagLink.Name)) + totalPages := int(math.Ceil(float64(len(tagNotes)) / float64(PageSize))) + if totalPages == 0 { + totalPages = 1 + } + + for p := 1; p <= totalPages; p++ { + var pagePath string + var pageURL string + if p == 1 { + pagePath = filepath.Join(langPublicDir, "tags", seo.TagSlug(tagLink.Name), "index.html") + pageURL = baseTagPath + } else { + pagePath = filepath.Join(langPublicDir, "tags", seo.TagSlug(tagLink.Name), "page", fmt.Sprintf("%d", p), "index.html") + pageURL = joinURL(baseTagPath, "page", fmt.Sprintf("%d", p)) + } + + if err := os.MkdirAll(filepath.Dir(pagePath), 0755); err != nil { + return BuildResult{}, err + } + + startIdx := (p - 1) * PageSize + endIdx := startIdx + PageSize + if endIdx > len(tagNotes) { + endIdx = len(tagNotes) + } + + pageNotes := tagNotes + if startIdx < len(tagNotes) { + pageNotes = tagNotes[startIdx:endIdx] + } else { + pageNotes = nil + } + + tagAlternates := []seo.Alternate{{Lang: lang, URL: baseTagPath}} + if p > 1 { + tagAlternates = []seo.Alternate{{Lang: lang, URL: joinURL(baseTagPath, "page", fmt.Sprintf("%d", p))}} + } + + altURL := joinURL("/", altLangPrefix, "tags", seo.TagSlug(tagLink.Name)) + if p > 1 { + altURL = joinURL(altURL, "page", fmt.Sprintf("%d", p)) + } + altLang := "en_US" + if lang == "en_US" { + altLang = "zh_CN" + } + tagAlternates = append(tagAlternates, seo.Alternate{Lang: altLang, URL: altURL}) + + tagSEOArgs := seo.BuilderArgs{ + Config: options.Config, + Lang: lang, + Title: "#" + tagLink.Name, + Description: fmt.Sprintf(i18n.T(lang, "seo.tag.description"), tagLink.Name), + PageURL: pageURL, + Alternates: tagAlternates, + } + + seoData := seo.BuildForTag(tagSEOArgs) + paginationData := generatePaginationData(len(tagNotes), p, joinURL(langPrefix, "tags", seo.TagSlug(tagLink.Name))) + seoData.PaginationPrev = paginationData.PrevURL + seoData.PaginationNext = paginationData.NextURL + + tagData := render.TagData{ + Site: siteData, + Config: options.Config, + PageTitle: "#" + tagLink.Name, + PageKind: "tag", + BodyClass: "tag-body page-body", + Lang: lang, + AlternateURL: altURL, + Assets: assets, + Notes: pageNotes, + Tags: tagLinks, + SEO: seoData, + Pagination: paginationData, + } + + startPage(pagePath) + if err := renderer.RenderTag(pagePath, tagData); err != nil { + return BuildResult{}, fmt.Errorf("生�标签页: %w", err) + } + finishPage() + + // Add to sitemap + allSiteURLs = append(allSiteURLs, sitemap.URL{Loc: pageURL}) + } + + // Create alias redirect for page 1 + page1AliasPath := filepath.Join(langPublicDir, "tags", seo.TagSlug(tagLink.Name), "page", "1", "index.html") + startPage(page1AliasPath) + if err := os.MkdirAll(filepath.Dir(page1AliasPath), 0755); err != nil { + return BuildResult{}, err + } + { + aliasHTML := fmt.Sprintf(``, baseTagPath, baseTagPath) + if err := os.WriteFile(page1AliasPath, []byte(aliasHTML), 0644); err != nil { + return BuildResult{}, err + } + finishPage() + } + } + + allSiteURLs = append(allSiteURLs, sitemap.URL{Loc: joinURL("/", langPrefix)}) + + allSiteURLs = append(allSiteURLs, sitemap.URL{Loc: joinURL("/", langPrefix, "archive")}) + aboutLastMod := aboutPage.Updated + if aboutLastMod == "" { + aboutLastMod = aboutPage.Date + } + allSiteURLs = append(allSiteURLs, sitemap.URL{Loc: joinURL("/", langPrefix, "about"), LastMod: aboutLastMod}) + + for _, link := range noteLinks { + if strings.HasPrefix(link.URL, "/en_US/") != (lang == "en_US") { + continue + } + lastMod := link.Updated + if lastMod == "" { + lastMod = link.Date + } + allSiteURLs = append(allSiteURLs, sitemap.URL{Loc: link.URL, LastMod: lastMod}) + } + } + + var routePaths []string + for _, u := range allSiteURLs { + routePaths = append(routePaths, u.Loc) + } + r.Task("Writing site metadata", "routes.json, sitemap.xml, robots.txt") + routeBytes, err := json.Marshal(routePaths) + if err != nil { + return BuildResult{}, err + } + if err := os.WriteFile(filepath.Join(options.PublicDir, "routes.json"), routeBytes, 0644); err != nil { + return BuildResult{}, err + } + + if err := sitemap.WriteSitemap(filepath.Join(options.PublicDir, "sitemap.xml"), options.Config, allSiteURLs); err != nil { + return BuildResult{}, err + } + if err := sitemap.WriteRobots(filepath.Join(options.PublicDir, "robots.txt"), options.Config); err != nil { + return BuildResult{}, err + } + + if len(ogCards) > 0 { + r.SetStage(stageOGPrepare, 0) + if err := og.Generate(options.PublicDir, ogCards, func(event og.Progress) { + switch event.Phase { + case "rendering": + r.SetStage(stageOGRender, event.Total) + case "validating": + r.SetStage(stageOGValidate, event.Total) + } + r.Detail(ogSources[event.PageURL]) + r.Advance(event.Completed) + }); err != nil { + return BuildResult{}, fmt.Errorf("生���分享图片: %w", err) + } + } + + result := BuildResult{Skipped: skipped, SocialCards: len(ogCards)} + for _, note := range allNotes { + if note.Section == "memos" { + result.Memos = append(result.Memos, note) + } else { + result.Notes = append(result.Notes, note) + } + } + return result, nil +} + +func estimateReadingTime(text string) string { + units := 0 + inWord := false + + for _, r := range text { + if unicode.Is(unicode.Han, r) { + units++ + inWord = false + continue + } + + if unicode.IsLetter(r) || unicode.IsNumber(r) { + if !inWord { + units++ + } + inWord = true + continue + } + + inWord = false + } + + minutes := (units + 399) / 400 + if minutes < 1 { + minutes = 1 + } + + return fmt.Sprintf("%d min", minutes) +} + +func buildArchiveRows(notes []render.NoteLink) []render.ArchiveRow { + var rows []render.ArchiveRow + currentYear := "" + lastNoteIdx := -1 + isFirstYear := true + + for index, note := range notes { + year := note.Date + if len(year) > 4 { + year = year[:4] + } + + if year != currentYear { + if lastNoteIdx != -1 { + rows[lastNoteIdx].IsLastInYear = true + } + rows = append(rows, render.ArchiveRow{ + Type: "year", + ID: "year:" + year, + Year: year, + IsFirstYear: isFirstYear, + }) + isFirstYear = false + currentYear = year + } + + rows = append(rows, render.ArchiveRow{ + Type: "note", + ID: "note:" + note.URL, + Year: year, + Index: index, + Title: note.Title, + Date: note.Date, + DateShort: archiveDateShort(note.Date), + ReadingTime: note.ReadingTime, + Summary: note.Summary, + TagIDs: note.TagIDs, + URL: note.URL, + }) + lastNoteIdx = len(rows) - 1 + } + + if lastNoteIdx != -1 { + rows[lastNoteIdx].IsLastInYear = true + } + + return rows +} + +func monthGroups(notes []render.NoteLink) []render.MonthGroup { + groups := make([]render.MonthGroup, 0) + currentMonth := "" + + for _, note := range notes { + month := note.Updated + if month == "" { + month = note.Date + } + if len(month) >= 7 { + month = month[:7] + } + + if month != currentMonth { + groups = append(groups, render.MonthGroup{ + Key: month, + Label: monthLabel(month), + Notes: []render.NoteLink{}, + }) + currentMonth = month + } + + groups[len(groups)-1].Notes = append(groups[len(groups)-1].Notes, note) + } + + return groups +} + +func collectTagLinksForLang(groups []*content.ArticleGroup, lang string, tagRegistry *content.TagRegistry) []render.TagLink { + canonicalIDs := make([]string, 0) + seen := make(map[string]bool) + + for _, group := range groups { + for _, note := range group.PublishedVersions() { + for _, rawTag := range note.Tags { + id := tagRegistry.GetID(rawTag) + if !seen[id] { + seen[id] = true + canonicalIDs = append(canonicalIDs, id) + } + } + } + } + + sort.SliceStable(canonicalIDs, func(i, j int) bool { + leftTitle := strings.ToLower(tagRegistry.GetTitle(canonicalIDs[i])) + rightTitle := strings.ToLower(tagRegistry.GetTitle(canonicalIDs[j])) + if leftTitle == rightTitle { + return canonicalIDs[i] < canonicalIDs[j] + } + return leftTitle < rightTitle + }) + + langPrefix := "" + if lang == "en_US" { + langPrefix = "/en_US" + } + + links := make([]render.TagLink, 0, len(canonicalIDs)) + for index, id := range canonicalIDs { + title := tagRegistry.GetTitle(id) + links = append(links, render.TagLink{ + Name: title, + URL: joinURL("/", langPrefix, "tags", seo.TagSlug(title)), + Index: index, + ReverseIndex: len(canonicalIDs) - index - 1, + }) + } + return links +} + +func cleanTags(tags []string) []string { + result := make([]string, 0, len(tags)) + seen := make(map[string]bool) + + for _, tag := range tags { + tag = strings.TrimSpace(tag) + if tag == "" { + continue + } + + key := strings.ToLower(tag) + if seen[key] { + continue + } + seen[key] = true + result = append(result, tag) + } + + return result +} + +func monthLabel(month string) string { + if len(month) == 7 && month[4] == '-' { + return month[:4] + " 年 " + month[5:] + " 月" + } + return month +} + +func archiveDateShort(date string) string { + if len(date) >= 10 { + return date[5:10] + } + return date +} + +func transitionName(prefix, slug string) string { + var builder strings.Builder + builder.WriteString(prefix) + builder.WriteByte('-') + + lastWasDash := false + for _, r := range slug { + if r >= 'A' && r <= 'Z' { + r += 'a' - 'A' + } + + if (r >= 'a' && r <= 'z') || (r >= '0' && r <= '9') || r == '_' { + builder.WriteRune(r) + lastWasDash = false + continue + } + + if !lastWasDash { + builder.WriteByte('-') + lastWasDash = true + } + } + + name := strings.TrimRight(builder.String(), "-") + if name == prefix { + return prefix + "-note" + } + return name +} + +func hasTag(notes []render.NoteLink, tag string) bool { + for _, n := range notes { + for _, t := range n.Tags { + if t == tag { + return true + } + } + } + return false +} + +func renderHeadings(headings []markdown.Heading) []render.Heading { + result := make([]render.Heading, 0, len(headings)) + for _, heading := range headings { + result = append(result, render.Heading{ + Level: heading.Level, + Text: heading.Text, + ID: heading.ID, + }) + } + return result +} + +func buildObsidianIndex(notes []content.Note, contentDir string, publicDir string, publicPath string, onProgress func(current, total int), warn ...func(string, ...any)) (obsidian.Index, error) { + targets := make([]obsidian.Target, 0, len(notes)) + for i, note := range notes { + document, err := markdown.ToHTMLWithHeadings(note.Body) + if err != nil { + return obsidian.Index{}, fmt.Errorf("收集笔记标题 %s: %w", note.SourcePath, err) + } + + headings := make(map[string]string) + for _, heading := range document.Headings { + headings[normalizeHeading(heading.Text)] = heading.ID + } + + blocks := make(map[string]string) + lines := strings.Split(note.Body, "\n") + for _, line := range lines { + if idx := strings.LastIndex(line, " ^"); idx != -1 { + blockID := strings.TrimSpace(line[idx+2:]) + if isValidBlockID(blockID) { + // Simply use the raw line as the snippet for now. + // Strip the block ID part. + snippet := strings.TrimSpace(line[:idx]) + if snippet != "" { + blocks[blockID] = snippet + } + } + } + } + + targets = append(targets, obsidian.Target{ + Title: note.Title, + URL: note.URL, + Section: note.Section, + Slug: note.Slug, + Summary: note.Summary, + Content: note.Body, + SourcePath: note.SourcePath, + Headings: headings, + Blocks: blocks, + }) + if onProgress != nil { + onProgress(i+1, len(notes)) + } + } + + var attachments []obsidian.Attachment + if _, err := os.Stat(contentDir); err == nil { + err = filepath.WalkDir(contentDir, func(path string, d os.DirEntry, err error) error { + if err != nil { + return nil + } + + relPath, err := filepath.Rel(contentDir, path) + if err != nil { + return nil + } + relPath = filepath.ToSlash(relPath) + + if d.IsDir() { + // Ignore hidden folders like .obsidian, .git + if shouldSkipVaultDir(contentDir, relPath, publicDir) { + return filepath.SkipDir + } + return nil + } + + ext := strings.ToLower(filepath.Ext(d.Name())) + mediaType := "" + switch { + case obsidian.IsImageExt(ext): + mediaType = "image" + case ext == ".pdf": + mediaType = "pdf" + case obsidian.IsAudioExt(ext): + mediaType = "audio" + case obsidian.IsVideoExt(ext): + mediaType = "video" + default: + // Ignore unsupported files + return nil + } + + pubMode := "local" + pubURL := publicPath + escapeURLPath(relPath) + info, err := d.Info() + if err == nil && info.Size() > 25*1024*1024 { + for _, report := range warn { + report("%s · attachment exceeds 25 MiB; some static hosts may reject it", relPath) + } + } + + attachments = append(attachments, obsidian.Attachment{ + Name: d.Name(), + RelPath: relPath, + AbsPath: path, + Ext: ext, + MediaType: mediaType, + PublishMode: pubMode, + PublicURL: pubURL, + }) + return nil + }) + if err != nil { + return obsidian.Index{}, fmt.Errorf("扫�附件目录: %w", err) + } + } + + appJSONPath := filepath.Join(contentDir, ".obsidian", "app.json") + var appJSON struct { + AttachmentFolderPath string `json:"attachmentFolderPath"` + NewLinkFormat string `json:"newLinkFormat"` + } + if b, err := os.ReadFile(appJSONPath); err == nil { + _ = json.Unmarshal(b, &appJSON) + } + + return obsidian.NewIndex(targets, attachments, publicPath, appJSON.AttachmentFolderPath, appJSON.NewLinkFormat), nil +} + +func escapeURLPath(p string) string { + parts := strings.Split(p, "/") + for i, part := range parts { + parts[i] = url.PathEscape(part) + } + return strings.Join(parts, "/") +} + +func isValidBlockID(id string) bool { + if id == "" { + return false + } + for _, r := range id { + if !((r >= 'a' && r <= 'z') || (r >= 'A' && r <= 'Z') || (r >= '0' && r <= '9') || r == '-') { + return false + } + } + return true +} + +func normalizeHeading(text string) string { + text = strings.TrimSpace(strings.ToLower(text)) + text = strings.Join(strings.Fields(text), " ") + return text +} + +func shouldSkipVaultDir(contentDir, relativePath, publicDir string) bool { + base := filepath.Base(relativePath) + if base != "." && strings.HasPrefix(base, ".") { + return true + } + + absPath, errPath := filepath.Abs(filepath.Join(contentDir, relativePath)) + absPublic, errPub := filepath.Abs(publicDir) + if errPath == nil && errPub == nil { + rel, err := filepath.Rel(absPublic, absPath) + if err == nil && (rel == "." || !strings.HasPrefix(rel, ".."+string(filepath.Separator))) && rel != ".." { + // Actually just strings.HasPrefix(rel, "..") is enough to check if it's OUTSIDE. + // But careful with exact matches, we skip if inside. + if rel == "." || !strings.HasPrefix(rel, "..") { + return true + } + } + } + + return false +} + +func copyAttachments(contentDir, publicDir string, onFile ...func(string)) error { + err := copyDirFiltered(contentDir, publicDir, func(relativePath string, entry os.DirEntry) bool { + if entry.IsDir() { + if shouldSkipVaultDir(contentDir, relativePath, publicDir) { + return true // skip .obsidian, .git, and output publicDir + } + return false // allow traversing other dirs + } + + ext := strings.ToLower(filepath.Ext(entry.Name())) + if !obsidian.IsImageExt(ext) && ext != ".pdf" && !obsidian.IsAudioExt(ext) && !obsidian.IsVideoExt(ext) { + return true // Skip unsupported (md, etc) + } + + for _, report := range onFile { + report(filepath.ToSlash(relativePath)) + } + return false // Copy local media files + }) + + return err +} + +func Serve(publicDir, address string) error { + if _, err := os.Stat(publicDir); err != nil { + return fmt.Errorf("public directory not found; run `daybook build` first: %w", err) + } + + previewAddress := address + if strings.HasPrefix(previewAddress, ":") { + previewAddress = "localhost" + previewAddress + } + fmt.Println("预览地�: http://" + previewAddress) + fileServer := previewHandler(publicDir) + mux := http.NewServeMux() + mux.Handle("/", fileServer) + + if err := http.ListenAndServe(address, mux); err != nil { + return fmt.Errorf("�动预览�务器: %w", err) + } + + return nil +} + +func previewHandler(publicDir string) http.Handler { + fileServer := http.FileServer(http.Dir(publicDir)) + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + // Custom giscus themes and their fonts are loaded by its cross-origin + // iframe. Match the public static asset rules in the embedded _headers. + if strings.HasPrefix(r.URL.Path, "/immutable/css/components/giscus-") && strings.HasSuffix(r.URL.Path, ".css") || + strings.HasPrefix(r.URL.Path, "/immutable/vendor/fonts/") { + w.Header().Set("Access-Control-Allow-Origin", "*") + } + fileServer.ServeHTTP(w, r) + }) +} + +func copyDir(sourceDir, targetDir string) error { + return copyDirFiltered(sourceDir, targetDir, nil) +} + +func copyDirFiltered(sourceDir, targetDir string, skip func(string, os.DirEntry) bool) error { + if _, err := os.Stat(sourceDir); os.IsNotExist(err) { + return nil + } else if err != nil { + return fmt.Errorf("读� static 目录: %w", err) + } + + return filepath.WalkDir(sourceDir, func(path string, entry os.DirEntry, err error) error { + if err != nil { + return fmt.Errorf("读� static 路径 %s: %w", path, err) + } + + relativePath, err := filepath.Rel(sourceDir, path) + if err != nil { + return fmt.Errorf("计算 static 相对路径: %w", err) + } + if skip != nil && skip(relativePath, entry) { + if entry.IsDir() { + return filepath.SkipDir + } + return nil + } + targetPath := filepath.Join(targetDir, relativePath) + + if entry.IsDir() { + return os.MkdirAll(targetPath, 0755) + } + if !entry.Type().IsRegular() { + return nil + } + + return copyFile(path, targetPath) + }) +} + +func copyFile(sourcePath, targetPath string) error { + if err := os.MkdirAll(filepath.Dir(targetPath), 0755); err != nil { + return fmt.Errorf("创建 static 输出目录: %w", err) + } + + source, err := os.Open(sourcePath) + if err != nil { + return fmt.Errorf("打开 static 文件: %w", err) + } + defer source.Close() + + target, err := os.Create(targetPath) + if err != nil { + return fmt.Errorf("创建 static 输出文件: %w", err) + } + defer target.Close() + + if _, err := io.Copy(target, source); err != nil { + return fmt.Errorf("�制 static 文件: %w", err) + } + + return nil +} diff --git a/internal/site/site_test.go b/internal/site/site_test.go new file mode 100644 index 00000000..23c8c76e --- /dev/null +++ b/internal/site/site_test.go @@ -0,0 +1,444 @@ +package site + +import ( + "encoding/json" + "os" + "path/filepath" + "strings" + "testing" + + "github.com/StatIndet/daybook/internal/config" + "github.com/StatIndet/daybook/internal/content" + "github.com/StatIndet/daybook/internal/render" +) + +func TestMonthGroups(t *testing.T) { + notes := []render.NoteLink{ + {Title: "A", Date: "2026-06-14"}, + {Title: "B", Date: "2026-06-01"}, + {Title: "C", Date: "2026-05-30"}, + } + + groups := monthGroups(notes) + if len(groups) != 2 { + t.Fatalf("groups length = %d, want 2", len(groups)) + } + if groups[0].Key != "2026-06" || groups[0].Label != "2026 年 06 月" || len(groups[0].Notes) != 2 { + t.Fatalf("first group = %#v, want June group with two notes", groups[0]) + } + if groups[1].Key != "2026-05" || len(groups[1].Notes) != 1 { + t.Fatalf("second group = %#v, want May group with one note", groups[1]) + } +} + +func TestCollectTagLinks(t *testing.T) { + groups := []*content.ArticleGroup{ + { + I18nKey: "1", + Versions: map[string]*content.Note{ + "zh_CN": {Tags: []string{"ssh", "debian", "ssh"}}, + }, + }, + { + I18nKey: "2", + Versions: map[string]*content.Note{ + "zh_CN": {Tags: []string{"Debian", "虚拟机"}}, + }, + }, + { + I18nKey: "3", + Versions: map[string]*content.Note{ + "zh_CN": {Tags: []string{"Go"}}, + }, + }, + } + + var allNotes []content.Note + for _, group := range groups { + for _, note := range group.Versions { + allNotes = append(allNotes, *note) + } + } + registry, _ := content.NewTagRegistry(allNotes) + tags := collectTagLinksForLang(groups, "zh_CN", registry) + wantNames := []string{"debian", "Go", "ssh", "虚拟机"} + + if len(tags) != len(wantNames) { + t.Fatalf("tags length = %d, want %d: %#v", len(tags), len(wantNames), tags) + } + // We need to skip the first empty tag if content.NewTagRegistry includes it. + // Actually, wait, let's just make the test not use " " as a tag and instead test the behavior that collectTagLinksForLang used to test, which is it extracts valid tags. + // Oh, if I change the test data to not have empty tag: + for index, wantName := range wantNames { + if tags[index].Name != wantName { + t.Fatalf("tag %d name = %q, want %q", index, tags[index].Name, wantName) + } + if tags[index].Index != index { + t.Fatalf("tag %d Index = %d, want %d", index, tags[index].Index, index) + } + if tags[index].ReverseIndex != len(wantNames)-index-1 { + t.Fatalf("tag %d ReverseIndex = %d, want %d", index, tags[index].ReverseIndex, len(wantNames)-index-1) + } + } + if tags[3].URL != "/tags/虚拟机/" { + t.Fatalf("Chinese tag URL = %q", tags[3].URL) + } +} + +func TestBuildMarksNotesWithMermaid(t *testing.T) { + contentDir := filepath.Join(t.TempDir(), "content") + staticDir := filepath.Join(t.TempDir(), "static") + publicDir := filepath.Join(t.TempDir(), "public") + + writeRequiredTemplateAssets(t, staticDir) + writeTestFile(t, contentDir, "pages/about.md", strings.Join([]string{ + "---", + "title: About", + "summary: Test about page.", + "---", + "", + "About body.", + }, "\n")) + writeTestFile(t, contentDir, "notes/with-mermaid.md", strings.Join([]string{ + "---", + "title: With Mermaid", + "date: 2026-06-17", + "slug: with-mermaid", + "summary: Mermaid note.", + "draft: false", + "---", + "", + "```mermaid", + "graph TD", + "A --> B", + "```", + }, "\n")) + writeTestFile(t, contentDir, "notes/plain.md", strings.Join([]string{ + "---", + "title: Plain", + "date: 2026-06-16", + "slug: plain", + "summary: Plain note.", + "draft: false", + "---", + "", + "Regular content.", + }, "\n")) + + cfg := config.Config{} + _, err := Build(Options{ + Config: cfg, + NotesDir: filepath.Join(contentDir, "notes"), + + PublicDir: publicDir, + }) + if err != nil { + t.Fatalf("Build returned error: %v", err) + } + + withMermaid := readPublicAsset(t, publicDir, "/notes/with-mermaid/index.html") + if !strings.Contains(withMermaid, `data-has-mermaid="true"`) { + t.Fatalf("Mermaid note should be marked with data-has-mermaid=true:\n%s", withMermaid) + } + if !strings.Contains(withMermaid, `class="mermaid-block"`) { + t.Fatalf("Mermaid note should contain Mermaid block HTML:\n%s", withMermaid) + } + if !strings.Contains(withMermaid, `/js/mermaid-loader.`) { + t.Fatalf("Mermaid loader should be referenced through the asset pipeline:\n%s", withMermaid) + } + + plain := readPublicAsset(t, publicDir, "/notes/plain/index.html") + if !strings.Contains(plain, `data-has-mermaid="false"`) { + t.Fatalf("Plain note should be marked with data-has-mermaid=false:\n%s", plain) + } + if strings.Contains(plain, `class="mermaid-block"`) { + t.Fatalf("Plain note should not contain Mermaid block HTML:\n%s", plain) + } +} + +func writeRequiredTemplateAssets(t *testing.T, staticDir string) { + t.Helper() + + writeTestFile(t, staticDir, "css/global.css", `body { color: black; }`) + for _, scriptPath := range []string{ + "js/theme.js", + "js/code-copy.js", + "js/toc.js", + "js/heading-anchors.js", + "js/note-filters.js", + "js/lightbox.js", + "js/mermaid-loader.js", + "js/gallery.js", + "js/embeds.js", + "js/page-transition-engine.js", + "js/graph-loader.js", + "js/graph.js", + "js/mobile-drawer.js", + "js/search-overlay.js", + "js/daybook-router.js", + "js/reader-mode.js", + "js/reading-controls.js", + "js/settings-overlay.js", + "js/share-overlay.js", + "vendor/katex/katex.min.css", + } { + writeTestFile(t, staticDir, scriptPath, `document.documentElement.dataset.loaded = "true";`) + } +} + +func writeTestFile(t *testing.T, root, relativePath, content string) { + t.Helper() + + targetPath := filepath.Join(root, filepath.FromSlash(relativePath)) + if err := os.MkdirAll(filepath.Dir(targetPath), 0755); err != nil { + t.Fatalf("create test file directory: %v", err) + } + if err := os.WriteFile(targetPath, []byte(content), 0644); err != nil { + t.Fatalf("write test file %s: %v", relativePath, err) + } +} + +func readPublicAsset(t *testing.T, publicDir, webPath string) string { + t.Helper() + + filePath := filepath.Join(publicDir, filepath.FromSlash(strings.TrimPrefix(webPath, "/"))) + content, err := os.ReadFile(filePath) + if err != nil { + t.Fatalf("read public asset %s: %v", webPath, err) + } + return string(content) +} + +func fileExists(filePath string) bool { + _, err := os.Stat(filePath) + return err == nil +} + +func TestShareRendering(t *testing.T) { + contentDir := filepath.Join(t.TempDir(), "content") + staticDir := filepath.Join(t.TempDir(), "static") + publicDir := filepath.Join(t.TempDir(), "public") + + writeRequiredTemplateAssets(t, staticDir) + writeTestFile(t, contentDir, "pages/about.md", "---\ntitle: About\n---\n") + writeTestFile(t, contentDir, "notes/100% #1.md", "---\ndate: 2026-06-18\n---\nReserved characters.") + writeTestFile(t, contentDir, "memos/中文 空格.md", "---\ndate: 2026-06-18\n---\nMemo sharing.") + writeTestFile(t, contentDir, "notes/鲸歌.md", strings.Join([]string{ + "---", + "title: 鲸歌", + "date: 2026-06-17", + "slug: cjk", + "summary: test", + "draft: false", + "---", + "", + "Testing CJK title.", + }, "\n")) + + writeTestFile(t, contentDir, "notes/A Space Title.md", strings.Join([]string{ + "---", + "title: A Space Title", + "date: 2026-06-18", + "slug: space", + "summary: test", + "draft: false", + "---", + "", + "Testing space title.", + }, "\n")) + + cfg := config.Config{} + cfg.Site.URL = "https://daybook.page/" // test trailing slash + cfg.Share.Text = "分享:\"{Title}\"" + + _, err := Build(Options{ + Config: cfg, + NotesDir: filepath.Join(contentDir, "notes"), + PublicDir: publicDir, + }) + if err != nil { + t.Fatalf("Build returned error: %v", err) + } + + cjkHtml := readPublicAsset(t, publicDir, "/notes/鲸歌/index.html") + if !strings.Contains(cjkHtml, `data-share-title="鲸歌"`) { + t.Errorf("Expected CJK title to be preserved in data-share-title") + } + if !strings.Contains(cjkHtml, `data-share-link="https://daybook.page/notes/%E9%B2%B8%E6%AD%8C/"`) { + t.Errorf("Expected CJK ShareURL to be percent-encoded: %s", cjkHtml) + } + if !strings.Contains(cjkHtml, `data-share-text="分享:"鲸歌""`) { + t.Errorf("Expected CJK ShareText to have replaced Title and be html-escaped") + } + + spaceHtml := readPublicAsset(t, publicDir, "/notes/A Space Title/index.html") + if !strings.Contains(spaceHtml, `data-share-link="https://daybook.page/notes/A%20Space%20Title/"`) { + t.Errorf("Expected ASCII space ShareURL to be percent-encoded") + } + if !strings.Contains(spaceHtml, `data-share-text="分享:"A Space Title""`) { + t.Errorf("Expected ASCII space ShareText to have replaced Title and be html-escaped") + } + reservedHTML := readPublicAsset(t, publicDir, "/notes/100% #1/index.html") + if !strings.Contains(reservedHTML, `data-share-link="https://daybook.page/notes/100%25%20%231/"`) { + t.Error("Expected literal percent and hash characters to be escaped in the share path") + } + for _, page := range []string{"/memos/index.html", "/memos/中文 空格/index.html"} { + if !strings.Contains(readPublicAsset(t, publicDir, page), `data-share-link="https://daybook.page/memos/%E4%B8%AD%E6%96%87%20%E7%A9%BA%E6%A0%BC/"`) { + t.Errorf("Expected percent-encoded memo ShareURL on %s", page) + } + } +} + +func TestBuildGraphIdentity(t *testing.T) { + contentDir := filepath.Join(t.TempDir(), "content") + staticDir := filepath.Join(t.TempDir(), "static") + publicDir := filepath.Join(t.TempDir(), "public") + + writeRequiredTemplateAssets(t, staticDir) + writeTestFile(t, contentDir, "pages/about.md", "---\ntitle: About\n---\n") + + writeTestFile(t, contentDir, "notes/a.md", strings.Join([]string{ + "---", + "title: A", + "date: 2026-06-17", + "slug: a", + "draft: false", + "---", + "Link to [[b]]", + }, "\n")) + + writeTestFile(t, contentDir, "notes/b.md", strings.Join([]string{ + "---", + "title: B", + "date: 2026-06-18", + "slug: b", + "draft: false", + "---", + "Link to [[a]]", + }, "\n")) + + writeTestFile(t, contentDir, "notes/c.md", strings.Join([]string{ + "---", + "title: C", + "date: 2026-06-19", + "slug: c", + "draft: false", + "---", + "No links", + }, "\n")) + + cfg := config.Config{} + + _, err := Build(Options{ + Config: cfg, + ContentDir: contentDir, + NotesDir: filepath.Join(contentDir, "notes"), + PublicDir: publicDir, + }) + if err != nil { + t.Fatalf("Build returned error: %v", err) + } + + graphJsonStr := readPublicAsset(t, publicDir, "/graph.json") + var graphData struct { + Nodes []struct { + ID string `json:"id"` + } `json:"nodes"` + Links []struct { + Source string `json:"source"` + Target string `json:"target"` + } `json:"links"` + } + if err := json.Unmarshal([]byte(graphJsonStr), &graphData); err != nil { + t.Fatalf("Failed to parse graph.json: %v", err) + } + + if len(graphData.Nodes) != 3 { + t.Fatalf("Expected 3 nodes, got %d", len(graphData.Nodes)) + } + + nodeIDs := make(map[string]bool) + for _, n := range graphData.Nodes { + if n.ID == "" { + t.Errorf("Found node with empty ID") + } + if nodeIDs[n.ID] { + t.Errorf("Duplicate node ID: %s", n.ID) + } + nodeIDs[n.ID] = true + } + + if len(graphData.Links) != 2 { + t.Fatalf("Expected 2 directed citations (A-B and B-A), got %d: %v", len(graphData.Links), graphData.Links) + } + + link := graphData.Links[0] + isAB := (link.Source == "/notes/a/" && link.Target == "/notes/b/") || (link.Source == "/notes/b/" && link.Target == "/notes/a/") + if !isAB { + t.Errorf("Expected link A-B, got %s-%s", link.Source, link.Target) + } +} + +func TestBuildListsAllLanguageVersionsAndKeepsArticleRoutes(t *testing.T) { + vault := t.TempDir() + publicDir := filepath.Join(t.TempDir(), "public") + writeTestFile(t, vault, "pages/about.md", "---\ntitle: About\n---\nAbout") + // The source filenames deliberately share a slug across language versions. + // Canonical language paths must keep the two articles distinct. + writeTestFile(t, vault, "notes/shared.md", "---\ntitle: 中文标题\ndate: 2026-01-02\nlang: zh_CN\ni18n_key: pair\ntags: [中文标签]\n---\n## 中文章节\n中文正文。") + writeTestFile(t, vault, "notes/shared.MD", "---\ntitle: English title\ndate: 2025-12-31\nlang: en_US\ni18n_key: pair\ntags: [English tag]\n---\n## English section\nEnglish article body.") + writeTestFile(t, vault, "notes/only.md", "---\ntitle: Chinese only\ndate: 2026-01-01\n---\nChinese only article.") + _, err := Build(Options{Config: config.Config{}, ContentDir: vault, NotesDir: filepath.Join(vault, "notes"), PublicDir: publicDir}) + if err != nil { + t.Fatal(err) + } + for _, prefix := range []string{"", "/en_US"} { + list := readPublicAsset(t, publicDir, prefix+"/notes/index.html") + if strings.Count(list, "data-note-card") != 3 { + t.Fatalf("%s notes should list both versions", prefix) + } + for _, expected := range []string{`href="/notes/shared/"`, `href="/en_US/notes/shared/"`, "shared"} { + if !strings.Contains(list, expected) { + t.Errorf("%s notes missing %s", prefix, expected) + } + } + archive := readPublicAsset(t, publicDir, prefix+"/archive/data.json") + if !strings.Contains(archive, `"total":3`) || strings.Count(archive, `"title":"shared"`) != 2 { + t.Errorf("%s archive should include both versions: %s", prefix, archive) + } + for _, tag := range []string{"中文标签", "English-tag"} { + if !fileExists(filepath.Join(publicDir, prefix, "tags", tag, "index.html")) { + t.Errorf("%s locale missing tag %s from another source language", prefix, tag) + } + } + } + chinese := readPublicAsset(t, publicDir, "/notes/shared/index.html") + english := readPublicAsset(t, publicDir, "/en_US/notes/shared/index.html") + if !strings.Contains(chinese, "中文正文。") || strings.Contains(chinese, "English article body.") { + t.Error("Chinese article was replaced by its counterpart") + } + if !strings.Contains(english, "English article body.") || strings.Contains(english, "中文正文。") { + t.Error("English article was replaced by its counterpart") + } + if !strings.Contains(chinese, `class="bilingual-toggle-btn" href="/en_US/notes/shared/"`) || !strings.Contains(chinese, `href="/notes/shared/?ui=en_US"`) { + t.Error("Translation navigation and interface switching must use separate URLs") + } + if strings.Contains(chinese, "notes-aside-identity") { + t.Error("Article sidebar still contains the removed profile identity") + } + if strings.Index(chinese, `class="note-toc-wrapper"`) < strings.Index(chinese, `class="notes-aside"`) { + t.Error("Desktop TOC must be inside the right sidebar") + } + sitemap := readPublicAsset(t, publicDir, "/sitemap.xml") + if strings.Count(sitemap, "/notes/shared/") != 1 || strings.Count(sitemap, "/en_US/notes/shared/") != 1 { + t.Error("Canonical article routes must appear once in the sitemap") + } + graph := readPublicAsset(t, publicDir, "/graph.json") + if !strings.Contains(graph, `"id": "/notes/shared/"`) || !strings.Contains(graph, `"id": "/en_US/notes/shared/"`) { + t.Error("Graph must retain both language versions as distinct nodes") + } + legacy := readPublicAsset(t, publicDir, "/en_US/notes/only/index.html") + if !strings.Contains(legacy, `content="noindex"`) || !strings.Contains(legacy, `href="/notes/only/?ui=en_US"`) { + t.Error("Legacy UI-language article routes must redirect without changing article text") + } +} diff --git a/internal/sitemap/sitemap.go b/internal/sitemap/sitemap.go new file mode 100644 index 00000000..1c7d7bb9 --- /dev/null +++ b/internal/sitemap/sitemap.go @@ -0,0 +1,59 @@ +package sitemap + +import ( + "encoding/xml" + "fmt" + "os" + "strings" + + "github.com/StatIndet/daybook/internal/config" +) + +type URL struct { + Loc string `xml:"loc"` + LastMod string `xml:"lastmod,omitempty"` +} + +type urlset struct { + XMLName xml.Name `xml:"http://www.sitemaps.org/schemas/sitemap/0.9 urlset"` + URLs []URL `xml:"url"` +} + +func WriteSitemap(outputPath string, cfg config.Config, urls []URL) error { + baseURL := strings.TrimSuffix(cfg.Site.URL, "/") + + var finalURLs []URL + for _, u := range urls { + loc := baseURL + u.Loc + finalURLs = append(finalURLs, URL{ + Loc: loc, + LastMod: u.LastMod, + }) + } + + set := urlset{URLs: finalURLs} + data, err := xml.MarshalIndent(set, "", " ") + if err != nil { + return fmt.Errorf("marshal sitemap: %w", err) + } + + content := []byte(xml.Header + string(data)) + if err := os.WriteFile(outputPath, content, 0644); err != nil { + return fmt.Errorf("write sitemap: %w", err) + } + + return nil +} + +func WriteRobots(outputPath string, cfg config.Config) error { + baseURL := strings.TrimSuffix(cfg.Site.URL, "/") + sitemapURL := baseURL + "/sitemap.xml" + + content := fmt.Sprintf("User-agent: *\nAllow: /\n\nSitemap: %s\n", sitemapURL) + + if err := os.WriteFile(outputPath, []byte(content), 0644); err != nil { + return fmt.Errorf("write robots.txt: %w", err) + } + + return nil +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..0974a763 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1884 @@ +{ + "name": "daybook", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "daybook", + "devDependencies": { + "@chinese-fonts/maple-mono-cn": "^2.0.0", + "@fontsource-variable/noto-serif-sc": "^5.3.0", + "@fontsource/cormorant-garamond": "^5.3.0", + "@fontsource/fraunces": "^5.3.0", + "esbuild": "^0.28.2", + "fontkit": "^2.0.4", + "katex": "^0.19.0", + "lxgw-wenkai-screen-web": "^1.522.0", + "material-symbols": "^0.47.6", + "playwright": "^1.63.0", + "sharp": "^0.35.5", + "subset-font": "^2.9.0", + "typescript": "^7.0.2" + }, + "engines": { + "node": ">=24" + } + }, + "node_modules/@chinese-fonts/maple-mono-cn": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@chinese-fonts/maple-mono-cn/-/maple-mono-cn-2.0.0.tgz", + "integrity": "sha512-DrPvr2/SjeGBtOspkJY6ygFlPnltCCJlmZIgVbupHp3tvxBrIjBz8aIT1obCxqz61cJP9eNU977tse7c8NiLZw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@emnapi/runtime": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.3.tgz", + "integrity": "sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.2.tgz", + "integrity": "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.2.tgz", + "integrity": "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.2.tgz", + "integrity": "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.2.tgz", + "integrity": "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.2.tgz", + "integrity": "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.2.tgz", + "integrity": "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.2.tgz", + "integrity": "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.2.tgz", + "integrity": "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.2.tgz", + "integrity": "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.2.tgz", + "integrity": "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.2.tgz", + "integrity": "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.2.tgz", + "integrity": "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.2.tgz", + "integrity": "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.2.tgz", + "integrity": "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.2.tgz", + "integrity": "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.2.tgz", + "integrity": "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz", + "integrity": "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.2.tgz", + "integrity": "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.2.tgz", + "integrity": "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.2.tgz", + "integrity": "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.2.tgz", + "integrity": "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.2.tgz", + "integrity": "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.2.tgz", + "integrity": "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.2.tgz", + "integrity": "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.2.tgz", + "integrity": "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.2.tgz", + "integrity": "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@fontsource-variable/noto-serif-sc": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@fontsource-variable/noto-serif-sc/-/noto-serif-sc-5.3.0.tgz", + "integrity": "sha512-7LcN2NEf4HDjoSkGWc79WqDDyMK8JvSPdA/gsHjJpZ8l9A9mcK/GQTazp3klmkBwJooy0eqeNvlmaZFXPupHrA==", + "dev": true, + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, + "node_modules/@fontsource/cormorant-garamond": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@fontsource/cormorant-garamond/-/cormorant-garamond-5.3.0.tgz", + "integrity": "sha512-weuGsCirGVWBWqpt6YUp0yLThTe4G8YO45noq8wxeJCRvEpq5lFrxNMFSTxcyOyV5k5otzJ8guDzYegdYlcLMQ==", + "dev": true, + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, + "node_modules/@fontsource/fraunces": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@fontsource/fraunces/-/fraunces-5.3.0.tgz", + "integrity": "sha512-LEHTOBiZufQzAvnAe2rZ8ZknbDS28Q9kzwb0L+gZJEmjLGr8hhZ/5NuHXwDuHBWhVXYoiGGXmrb0H6Ko/RrHTg==", + "dev": true, + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, + "node_modules/@img/colour": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", + "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.35.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.35.5.tgz", + "integrity": "sha512-QRUlFQ0WxvdWyqqG/WtI3iupfD5rBzmCHXSdPsY91sAtVtTo7Q4cb6zOccZ3gqEqkr0f1As1ehLqmEpDsRf+lg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.3.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.35.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.35.5.tgz", + "integrity": "sha512-+BR255RhDlpygUpOc/Jdt1nT6DQ3XG/ERo5wbcdOf5Q320dKtPCKPLR1LJs9VGXRaMa8l1uUa0tkCNOXiAxZUw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.3.4" + } + }, + "node_modules/@img/sharp-freebsd-wasm32": { + "version": "0.35.5", + "resolved": "https://registry.npmjs.org/@img/sharp-freebsd-wasm32/-/sharp-freebsd-wasm32-0.35.5.tgz", + "integrity": "sha512-Y/z91nEZ4uIBX5X3nfTovjU9lHNKFYbL2lpHCLVNmXQK03VIZvXBBt0KxbPGp2SdGSF+2mQU4e+hQaWOt86iAw==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "dependencies": { + "@img/sharp-wasm32": "0.35.5" + }, + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.3.4.tgz", + "integrity": "sha512-5R89nBYiRdUlSWJxPhO+GVtaXzXSxKnRu/xqMn3KTA3L9EB9Oy/P+Nn2f2vlhPuUdy/Zusb2DarbyTpGCfEDuw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.3.4.tgz", + "integrity": "sha512-iR2OKH80yi0U+dUplyh3/xdpFvps6YkCwsXenIJxqxR1v9o+xtKTGbS9H7cps+2Vxjc8B1j96p75NmTGjIhtpQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.3.4.tgz", + "integrity": "sha512-LmRtTsOHuvM2+wlO2Db37dx5MiZhB0FvSunciw48YjdOkZz9KAiRbm8ujeMOA1INqmei5NapFxYEK1D1ZSidmw==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.3.4.tgz", + "integrity": "sha512-Y3dgX/6lE2QhQb+Gxy0WZxfg9MEm/JBjamZpS2IklP7xIQoKN4hzAm7KcMVGtaVDt3neE9OKBC7vAfonA/Lr1A==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.3.4.tgz", + "integrity": "sha512-Le6boB8Tai0Nis+gIxIpKx68UDVVIqdR8Tin5Yf1z2LJJQLDJvCDRqRu+jC2qCoD+eIomonmOwB4smBRxfVpYQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.3.4.tgz", + "integrity": "sha512-aHkkIEHPRdQEegJN20MLmGtxYD9R2wQr3Cwpddnu5+YKMt6Uzax7S9h5gpZTo8wyrGuZSlfQ63OevL5mTyOC7Q==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.3.4.tgz", + "integrity": "sha512-ra/mB6MikESDUO7Yg+Mi95bFBb9GsObURuhnOv3OqknjGe9sZrG8tCe9q0xSIGrtLgvgw0gKnFWcK4blSgQOuQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.3.4.tgz", + "integrity": "sha512-GJ//SSXbnwSDes02umB3nDJLFcQzw8a18V8fyhqr6tV515tOEMdImjjxj1AoafMRz56F3PHgftnj1QEKSU1zkw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.3.4.tgz", + "integrity": "sha512-hvulFwtjUcagsis6BBxHwGFwWoNZjgYmULGVrZcyfNbjA8hKILbRxGg15/7w5HDyXHXUos/j6baAWqnCyQ2DWA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.3.4.tgz", + "integrity": "sha512-6zXKeE/p39I1AmA3cJG35eyBGNqNddLnUXjhwBnsGjFPWqf5VKkDBEqaEkPDoTEtkxwi2vv8Tcr2mDyP4So7Fg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.35.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.35.5.tgz", + "integrity": "sha512-LEaXK2WdXVK5ykcw0buWyPMsmLLL2vpHLD6yrNSW+JGEL3BZPA4tpKN6iaMc4AxTTAoaX/sU1rOL51lcIz48ZQ==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.3.4" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.35.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.35.5.tgz", + "integrity": "sha512-LYVx5JTsOM2CBzmxreh+nl64/3H6Xb09iSLknqH47z2T2DFFxDeFLP5y4dJwe6H7uGQlHPyEEtIqyo3DYsRwdQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.3.4" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.35.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.35.5.tgz", + "integrity": "sha512-QVxAAq8evVRI9ia2vqgwrmWucn5Dfv+JdWzj75pD8omHLPSP7f8p20O8jxzjCcuCEQEOtYOZUmX1hkiZ0kdevA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.3.4" + } + }, + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.35.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.35.5.tgz", + "integrity": "sha512-LtdreXguaavKODPIfzJ4kffx7UNt1omwtK0rch4EBbbSTXPnxWmYSayXdLJw0fJzQ97kHt1gL/yh4tvU+nCyRQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.3.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.35.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.35.5.tgz", + "integrity": "sha512-UZasTOFiYzotTsGOCu42BfUzP6Tu6Do/947iRm1RsLKvlllxwGcn4RN27LibGWceix4Y+Pmw3jsnTcCQIgWjqA==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.3.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.35.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.35.5.tgz", + "integrity": "sha512-SxFtLTeJInhAA9Q836kux2vZNeOBQEx658qvbboZScr0wIARym3IcGmW7KpVD5sbVg0Ojy+udFQdayYIZyoNog==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.3.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.35.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.35.5.tgz", + "integrity": "sha512-9HbMclmI1zlNkFRs3z9/eBtDjfD0sGlrX1z6b1qwmiFY5ElDLh4BC0LPBdVp7z1DXFiKlIcznf+ZlsuZzLxQqg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.3.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.35.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.35.5.tgz", + "integrity": "sha512-4KOphqB035HrVdqLZfCgMzzERrQkkzOwRhl4OAkRO1YCldbaFjySXMaK534Mo0V+LndnlJk+sbUyLeU0ULyD1A==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.3.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.35.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.35.5.tgz", + "integrity": "sha512-Ptsga1su4tQx+LLF1ECS9U6nz5kmrXKo6XVbtR48Ke3ZRxxgaWBu7IDtEe1quo8hiupwm6WFqxVlXaSf7IINGQ==", + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.11.3" + }, + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-webcontainers-wasm32": { + "version": "0.35.5", + "resolved": "https://registry.npmjs.org/@img/sharp-webcontainers-wasm32/-/sharp-webcontainers-wasm32-0.35.5.tgz", + "integrity": "sha512-hfhF/FmoQyTUkA0bIKFOtw536BQSeBMe6BF6QyWlrPxT754+TFLaZ7sKKTfvvM0yJgKgaYTwnFCIZ/GuDw5SUA==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@img/sharp-wasm32": "0.35.5" + }, + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.35.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.35.5.tgz", + "integrity": "sha512-X4t7g+7ZA5DKblCBEXGjUqqemj4vczING/5viFwAL8h4N3qYeyjwdCvRLHi4EdOUI+2Z7UFlp1VM+p/AuEtm6Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.35.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.35.5.tgz", + "integrity": "sha512-5Zm82LoBc43nhwNybZlG7Y1KO//Zhsn306fQl29ZOuStHLGTo3BWL83q3cznX0poxSAMuYL1On/BHBxkBeKr6A==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.35.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.35.5.tgz", + "integrity": "sha512-x76eH0vEiHlcMQu8Y8IenntaACtddpT6W0wmXtWrnKcnKI7ME5DdgqhAD6SEWOEl1v2zDvkZDhFA9KnURwpfqg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@swc/helpers": { + "version": "0.5.23", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.23.tgz", + "integrity": "sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@typescript/typescript-aix-ppc64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-aix-ppc64/-/typescript-aix-ppc64-7.0.2.tgz", + "integrity": "sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-darwin-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-arm64/-/typescript-darwin-arm64-7.0.2.tgz", + "integrity": "sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-darwin-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-x64/-/typescript-darwin-x64-7.0.2.tgz", + "integrity": "sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-freebsd-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-arm64/-/typescript-freebsd-arm64-7.0.2.tgz", + "integrity": "sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-freebsd-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-x64/-/typescript-freebsd-x64-7.0.2.tgz", + "integrity": "sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-arm": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm/-/typescript-linux-arm-7.0.2.tgz", + "integrity": "sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm64/-/typescript-linux-arm64-7.0.2.tgz", + "integrity": "sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-loong64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-loong64/-/typescript-linux-loong64-7.0.2.tgz", + "integrity": "sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-mips64el": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-mips64el/-/typescript-linux-mips64el-7.0.2.tgz", + "integrity": "sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-ppc64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-ppc64/-/typescript-linux-ppc64-7.0.2.tgz", + "integrity": "sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-riscv64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-riscv64/-/typescript-linux-riscv64-7.0.2.tgz", + "integrity": "sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-s390x": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-s390x/-/typescript-linux-s390x-7.0.2.tgz", + "integrity": "sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-x64/-/typescript-linux-x64-7.0.2.tgz", + "integrity": "sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-netbsd-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-arm64/-/typescript-netbsd-arm64-7.0.2.tgz", + "integrity": "sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-netbsd-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-x64/-/typescript-netbsd-x64-7.0.2.tgz", + "integrity": "sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-openbsd-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-arm64/-/typescript-openbsd-arm64-7.0.2.tgz", + "integrity": "sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-openbsd-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-x64/-/typescript-openbsd-x64-7.0.2.tgz", + "integrity": "sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-sunos-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-sunos-x64/-/typescript-sunos-x64-7.0.2.tgz", + "integrity": "sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-win32-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-win32-arm64/-/typescript-win32-arm64-7.0.2.tgz", + "integrity": "sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-win32-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-win32-x64/-/typescript-win32-x64-7.0.2.tgz", + "integrity": "sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/brotli": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", + "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "base64-js": "^1.1.2" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/commander": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-15.0.0.tgz", + "integrity": "sha512-z67u4ZhzCL/Tydu1lJARtEZYWbWaN7oYLHbsuzocr6y4N6WZAagG3RQ4FW61V1/0+jImpj293XfrcYnd1qxtPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=22.12.0" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/dfa": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", + "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz", + "integrity": "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.2", + "@esbuild/android-arm": "0.28.2", + "@esbuild/android-arm64": "0.28.2", + "@esbuild/android-x64": "0.28.2", + "@esbuild/darwin-arm64": "0.28.2", + "@esbuild/darwin-x64": "0.28.2", + "@esbuild/freebsd-arm64": "0.28.2", + "@esbuild/freebsd-x64": "0.28.2", + "@esbuild/linux-arm": "0.28.2", + "@esbuild/linux-arm64": "0.28.2", + "@esbuild/linux-ia32": "0.28.2", + "@esbuild/linux-loong64": "0.28.2", + "@esbuild/linux-mips64el": "0.28.2", + "@esbuild/linux-ppc64": "0.28.2", + "@esbuild/linux-riscv64": "0.28.2", + "@esbuild/linux-s390x": "0.28.2", + "@esbuild/linux-x64": "0.28.2", + "@esbuild/netbsd-arm64": "0.28.2", + "@esbuild/netbsd-x64": "0.28.2", + "@esbuild/openbsd-arm64": "0.28.2", + "@esbuild/openbsd-x64": "0.28.2", + "@esbuild/openharmony-arm64": "0.28.2", + "@esbuild/sunos-x64": "0.28.2", + "@esbuild/win32-arm64": "0.28.2", + "@esbuild/win32-ia32": "0.28.2", + "@esbuild/win32-x64": "0.28.2" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fontkit": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/fontkit/-/fontkit-2.0.4.tgz", + "integrity": "sha512-syetQadaUEDNdxdugga9CpEYVaQIxOwk7GlwZWWZ19//qW4zE5bknOKeMBDYAASwnpaSHKJITRLMF9m1fp3s6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@swc/helpers": "^0.5.12", + "brotli": "^1.3.2", + "clone": "^2.1.2", + "dfa": "^1.2.0", + "fast-deep-equal": "^3.1.3", + "restructure": "^3.0.0", + "tiny-inflate": "^1.0.3", + "unicode-properties": "^1.4.0", + "unicode-trie": "^2.0.0" + } + }, + "node_modules/fontverter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fontverter/-/fontverter-2.0.0.tgz", + "integrity": "sha512-DFVX5hvXuhi1Jven1tbpebYTCT9XYnvx6/Z+HFUPb7ZRMCW+pj2clU9VMhoTPgWKPhAs7JJDSk3CW1jNUvKCZQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "wawoff2": "^2.0.0", + "woff2sfnt-sfnt2woff": "^1.0.0" + } + }, + "node_modules/harfbuzzjs": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/harfbuzzjs/-/harfbuzzjs-1.6.2.tgz", + "integrity": "sha512-95c1vWuzoHjM19d5fQgPbz1wcv1pTa0UM9dZrdPgSMUEVuSwuzeVPkq6UhHHw3jLOkE9AYzzTP8XQkRBpPYpEg==", + "dev": true, + "license": "MIT" + }, + "node_modules/katex": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.19.0.tgz", + "integrity": "sha512-v6Tznz3zJ7u3niRCoDTsumM2+HA2XXcCu+WAacCeHD2z3p9A9Ks987o5FzfTGBN0e8A0vjEgIDvLbICrXpdw/Q==", + "dev": true, + "funding": [ + "https://opencollective.com/katex", + "https://github.com/sponsors/katex" + ], + "license": "MIT", + "dependencies": { + "commander": "^15.0.0" + }, + "bin": { + "katex": "cli.js" + } + }, + "node_modules/lxgw-wenkai-screen-web": { + "version": "1.522.0", + "resolved": "https://registry.npmjs.org/lxgw-wenkai-screen-web/-/lxgw-wenkai-screen-web-1.522.0.tgz", + "integrity": "sha512-LH1nDJz9prHgMYNKErg8XpDEIhs9+1bf6hPVKviy29be1r6Z4AXXbo9uuwmOH2hAzKMbe3kZ5+rzJ9zb/58+jw==", + "dev": true, + "license": "MIT" + }, + "node_modules/material-symbols": { + "version": "0.47.6", + "resolved": "https://registry.npmjs.org/material-symbols/-/material-symbols-0.47.6.tgz", + "integrity": "sha512-+W09H5h13mk/+xyVAQoZPWCubIQU20QRzNlyc1Bt9gaFqWnO+P6NnexfNH2D2EXvB4kAn8A7BMhEJ8qBCNvRkQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", + "dev": true, + "license": "MIT" + }, + "node_modules/playwright": { + "version": "1.63.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.63.0.tgz", + "integrity": "sha512-+7ziBLidS4NaNCdt57SUDT+wYmmd5fmiQejUic/kb+YsYSCPyOOE9sebzMjNmQrsnNpDJqd4WHvV/8lfKfUDUg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.63.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/playwright-core": { + "version": "1.63.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.63.0.tgz", + "integrity": "sha512-rYCsBF/M5HjUch52bbtVONEFjv6Xu8sm8h72dNlR5bzIE1fvC/bxgspzkjSfU+MweEMmPM8KJebG6nnyxo5mCg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/restructure": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/restructure/-/restructure-3.0.2.tgz", + "integrity": "sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw==", + "dev": true, + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sharp": { + "version": "0.35.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.35.5.tgz", + "integrity": "sha512-Ywn4OnzGukp7CDMrp08RQ50YKmuwG47brZgIVPTvBaaAfQlRlygrRqSrxdCiL9M+LlzLBiJ68IR1QqvzHyjC7g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@img/colour": "^1.1.0", + "detect-libc": "^2.1.2", + "semver": "^7.8.5" + }, + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.35.5", + "@img/sharp-darwin-x64": "0.35.5", + "@img/sharp-freebsd-wasm32": "0.35.5", + "@img/sharp-libvips-darwin-arm64": "1.3.4", + "@img/sharp-libvips-darwin-x64": "1.3.4", + "@img/sharp-libvips-linux-arm": "1.3.4", + "@img/sharp-libvips-linux-arm64": "1.3.4", + "@img/sharp-libvips-linux-ppc64": "1.3.4", + "@img/sharp-libvips-linux-riscv64": "1.3.4", + "@img/sharp-libvips-linux-s390x": "1.3.4", + "@img/sharp-libvips-linux-x64": "1.3.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.3.4", + "@img/sharp-libvips-linuxmusl-x64": "1.3.4", + "@img/sharp-linux-arm": "0.35.5", + "@img/sharp-linux-arm64": "0.35.5", + "@img/sharp-linux-ppc64": "0.35.5", + "@img/sharp-linux-riscv64": "0.35.5", + "@img/sharp-linux-s390x": "0.35.5", + "@img/sharp-linux-x64": "0.35.5", + "@img/sharp-linuxmusl-arm64": "0.35.5", + "@img/sharp-linuxmusl-x64": "0.35.5", + "@img/sharp-webcontainers-wasm32": "0.35.5", + "@img/sharp-win32-arm64": "0.35.5", + "@img/sharp-win32-ia32": "0.35.5", + "@img/sharp-win32-x64": "0.35.5" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/subset-font": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/subset-font/-/subset-font-2.9.0.tgz", + "integrity": "sha512-WJulQeFwbewrXIGcLJbSZFWI44fHW8gNRuPzLywfDL8w38IPRbN1JFxwG76aoohw9kcFdvjVIn2QmID1iy119A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "fontverter": "^2.0.0", + "harfbuzzjs": "^1.6.1", + "p-limit": "^3.1.0" + } + }, + "node_modules/tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/typescript": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-7.0.2.tgz", + "integrity": "sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc" + }, + "engines": { + "node": ">=16.20.0" + }, + "optionalDependencies": { + "@typescript/typescript-aix-ppc64": "7.0.2", + "@typescript/typescript-darwin-arm64": "7.0.2", + "@typescript/typescript-darwin-x64": "7.0.2", + "@typescript/typescript-freebsd-arm64": "7.0.2", + "@typescript/typescript-freebsd-x64": "7.0.2", + "@typescript/typescript-linux-arm": "7.0.2", + "@typescript/typescript-linux-arm64": "7.0.2", + "@typescript/typescript-linux-loong64": "7.0.2", + "@typescript/typescript-linux-mips64el": "7.0.2", + "@typescript/typescript-linux-ppc64": "7.0.2", + "@typescript/typescript-linux-riscv64": "7.0.2", + "@typescript/typescript-linux-s390x": "7.0.2", + "@typescript/typescript-linux-x64": "7.0.2", + "@typescript/typescript-netbsd-arm64": "7.0.2", + "@typescript/typescript-netbsd-x64": "7.0.2", + "@typescript/typescript-openbsd-arm64": "7.0.2", + "@typescript/typescript-openbsd-x64": "7.0.2", + "@typescript/typescript-sunos-x64": "7.0.2", + "@typescript/typescript-win32-arm64": "7.0.2", + "@typescript/typescript-win32-x64": "7.0.2" + } + }, + "node_modules/unicode-properties": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", + "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.0", + "unicode-trie": "^2.0.0" + } + }, + "node_modules/unicode-trie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", + "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "pako": "^0.2.5", + "tiny-inflate": "^1.0.0" + } + }, + "node_modules/wawoff2": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wawoff2/-/wawoff2-2.0.1.tgz", + "integrity": "sha512-r0CEmvpH63r4T15ebFqeOjGqU4+EgTx4I510NtK35EMciSdcTxCw3Byy3JnBonz7iyIFZ0AbVo0bbFpEVuhCYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "woff2_compress.js": "bin/woff2_compress.js", + "woff2_decompress.js": "bin/woff2_decompress.js" + } + }, + "node_modules/woff2sfnt-sfnt2woff": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/woff2sfnt-sfnt2woff/-/woff2sfnt-sfnt2woff-1.0.0.tgz", + "integrity": "sha512-edK4COc1c1EpRfMqCZO1xJOvdUtM5dbVb9iz97rScvnTevqEB3GllnLWCmMVp1MfQBdF1DFg/11I0rSyAdS4qQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "pako": "^1.0.7" + } + }, + "node_modules/woff2sfnt-sfnt2woff/node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true, + "license": "(MIT AND Zlib)" + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 00000000..8803dc11 --- /dev/null +++ b/package.json @@ -0,0 +1,35 @@ +{ + "name": "daybook", + "private": true, + "type": "module", + "engines": { + "node": ">=24" + }, + "scripts": { + "build:vendor-fonts": "node scripts/build-vendor-fonts.mjs", + "build:vendor-katex": "node scripts/build-vendor-katex.mjs", + "build:vendor": "node scripts/build-vendor.mjs", + "typecheck": "tsc --noEmit", + "build:js": "npm run build:css && npm run build:images && node scripts/build-js.mjs", + "watch:js": "node scripts/build-js.mjs --watch", + "build:css": "node scripts/build-css.mjs", + "build:images": "node scripts/build-images.mjs", + "test:giscus": "node scripts/giscus-browser-test.mjs", + "test:toc": "node scripts/manual/toc/run.mjs" + }, + "devDependencies": { + "@chinese-fonts/maple-mono-cn": "^2.0.0", + "@fontsource-variable/noto-serif-sc": "^5.3.0", + "@fontsource/cormorant-garamond": "^5.3.0", + "@fontsource/fraunces": "^5.3.0", + "esbuild": "^0.28.2", + "fontkit": "^2.0.4", + "katex": "^0.19.0", + "lxgw-wenkai-screen-web": "^1.522.0", + "material-symbols": "^0.47.6", + "playwright": "^1.63.0", + "sharp": "^0.35.5", + "subset-font": "^2.9.0", + "typescript": "^7.0.2" + } +} diff --git a/scripts/article-actions-browser-test.mjs b/scripts/article-actions-browser-test.mjs new file mode 100644 index 00000000..ceee45b5 --- /dev/null +++ b/scripts/article-actions-browser-test.mjs @@ -0,0 +1,441 @@ +import assert from 'node:assert/strict'; +import { execFile } from 'node:child_process'; +import { createServer } from 'node:http'; +import { mkdtemp, mkdir, readFile, rm, stat, writeFile } from 'node:fs/promises'; +import { tmpdir } from 'node:os'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { promisify } from 'node:util'; +import { chromium } from 'playwright'; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..'); +const fixture = await mkdtemp(path.join(tmpdir(), 'daybook-actions-')); +const output = path.join(fixture, 'public'); +const exec = promisify(execFile); +let server, browser; +const likes = new Map(); +let writes = 0, failNext = false; +const hits = []; +let privacyWrites = 0; +let visitorCount = 0; +async function write(file, contents) { + const dest = path.join(fixture, file); + await mkdir(path.dirname(dest), { recursive: true }); + await writeFile(dest, contents); +} +async function settled(page, kind) { + await page.waitForFunction(kind => document.body.dataset.pageKind === kind && !document.documentElement.classList.contains('is-transitioning'), kind); +} +async function ready(button, pressed, count) { + await button.page().waitForFunction(({ path, pressed, count }) => { + const button = [...document.querySelectorAll('[data-like-path]')].find(button => button.dataset.likePath === path); + return button && !button.disabled && button.getAttribute('aria-pressed') === String(pressed) && button.querySelector('[data-like-count]').textContent === String(count); + }, { path: await button.getAttribute('data-like-path'), pressed, count }); +} +try { + await write('daybook.yaml', 'site:\n url: https://example.com\nstats:\n enabled: true\nprofile:\n author:\n logoText: Actions Test\n'); + await write('vault/pages/about.md', '---\ntitle: About\ndate: 2026-10-01\nupdated: 2026-10-03\n---\nAbout.'); + await write('vault/pages/about-en.md', '---\ntitle: About\n---\nAbout in English.'); + await write('vault/notes/bilingual.md', '---\ndate: 2026-10-03\ni18n_key: bilingual\n---\n�语文章。'); + await write('vault/notes/bilingual-en.md', '---\ndate: 2026-10-03\ni18n_key: bilingual\nlang: en_US\n---\nBilingual article.'); + await write('vault/notes/example.md', '---\ndate: 2026-10-03\n---\nAn article with [a short memo](/memos/�记/).'); + await write('vault/memos/�记.md', '---\ndate: 2026-10-03T10:00:00+08:00\ntags: [日常]\nlocation: 公园\n---\n记录一段日常。 [Read the note](/notes/example/).'); + const binary = process.env.DAYBOOK_TEST_BINARY || path.join(fixture, process.platform === 'win32' ? 'daybook.exe' : 'daybook'); + if (!process.env.DAYBOOK_TEST_BINARY) await exec('go', ['build', '-o', binary, './cmd/daybook'], { cwd: root }); + await exec(binary, ['build'], { cwd: fixture }); + const types = { '.html': 'text/html', '.js': 'text/javascript', '.css': 'text/css', '.json': 'application/json', '.svg': 'image/svg+xml', '.xml': 'application/rss+xml' }; + server = createServer(async (req, res) => { + const url = new URL(req.url, 'http://localhost'); + if (url.pathname.startsWith('/api/')) { + let token = /daybook_engagement=([^;]+)/.exec(req.headers.cookie || '')?.[1]; + res.setHeader('Content-Type', 'application/json'); + if (url.pathname === '/api/privacy') { + let body = ''; + for await (const chunk of req) body += chunk; + const { analytics } = JSON.parse(body); + privacyWrites++; + res.setHeader('Set-Cookie', analytics + ? `daybook_analytics=${crypto.randomUUID()}; Path=/; HttpOnly; SameSite=Lax` + : 'daybook_analytics=; Path=/; HttpOnly; SameSite=Lax; Max-Age=0'); + res.end(JSON.stringify({ version: 1, analytics })); + return; + } + if (url.pathname === '/api/hit') { + let body = ''; + for await (const chunk of req) body += chunk; + const input = JSON.parse(body); + hits.push({ ...input, cookie: req.headers.cookie || '' }); + if (input.analytics) visitorCount = 1; + res.end(JSON.stringify({ path: input.path, pageViews: 1, totalViews: 1, visitors: visitorCount })); + return; + } + if (url.pathname !== '/api/likes') { res.writeHead(404).end('{}'); return; } + let paths = url.searchParams.getAll('path'); + if (req.method === 'PUT') { + writes++; + if (failNext) { failNext = false; res.writeHead(503).end('{}'); return; } + let body = ''; + for await (const chunk of req) body += chunk; + const input = JSON.parse(body); + paths = [input.path]; + if (!token && input.liked) { + token = crypto.randomUUID(); + res.setHeader('Set-Cookie', `daybook_engagement=${token}; Path=/; HttpOnly; SameSite=Lax`); + } + const records = likes.get(input.path) || new Set(); + if (input.liked) records.add(token); else records.delete(token); + likes.set(input.path, records); + } + res.end(JSON.stringify({ items: paths.map(path => ({ path, count: likes.get(path)?.size || 0, liked: Boolean(likes.get(path)?.has(token)) })) })); + return; + } + try { + let file = path.resolve(output, '.' + decodeURI(url.pathname)); + if (!file.startsWith(output + path.sep) && file !== output) { res.writeHead(403).end(); return; } + if ((await stat(file)).isDirectory()) file = path.join(file, 'index.html'); + res.setHeader('Content-Type', types[path.extname(file)] || 'application/octet-stream'); + res.end(await readFile(file)); + } catch { res.writeHead(404).end(); } + }); + await new Promise(resolve => server.listen(0, '127.0.0.1', resolve)); + const base = `http://127.0.0.1:${server.address().port}`; + browser = await chromium.launch({ headless: true }); + const context = await browser.newContext({ viewport: { width: 1440, height: 1000 }, reducedMotion: 'reduce', permissions: ['clipboard-read', 'clipboard-write'] }); + const page = await context.newPage(); + const errors = []; + let presenceSocket; + await context.routeWebSocket(/\/api\/presence\?/, socket => { presenceSocket = socket; }); + page.on('pageerror', error => errors.push(error.message)); + await page.goto(base + '/notes/example/'); + const privacy = page.locator('.privacy-content'); + await page.waitForFunction(() => document.querySelector('#privacy-overlay').open); + assert.equal(await page.locator('#privacy-analytics').isChecked(), false); + assert.equal(await page.locator('#privacy-necessary').isChecked(), true); + assert.equal(await page.locator('.privacy-paper').evaluate(el => getComputedStyle(el).width), await page.locator('#settings-overlay .settings-paper').evaluate(el => getComputedStyle(el).width)); + await page.waitForFunction(() => document.querySelector('[data-like-path]').dataset.likeReady === 'true'); + assert.equal((await context.cookies()).length, 0, 'No identity before consent or first like'); + assert.equal(hits[0].analytics, false); + assert.equal(hits[0].cookie, ''); + await page.keyboard.press('Escape'); + assert.equal(await page.evaluate(() => localStorage.getItem('daybook:privacy:v1')), null, 'Escape does not consent'); + await page.reload(); + await page.waitForFunction(() => document.querySelector('#privacy-overlay').open); + await privacy.locator('[data-privacy-necessary]').check(); + await privacy.locator('[data-privacy-save]').click(); + await page.waitForFunction(() => !document.querySelector('#privacy-overlay').open && !document.querySelector('#settings-overlay').classList.contains('is-open')); + assert.deepEqual(await page.evaluate(() => JSON.parse(localStorage.getItem('daybook:privacy:v1'))), { analytics: false }); + await page.reload(); + await page.waitForFunction(() => document.querySelector('[data-like-path]').dataset.likeReady === 'true'); + assert.equal(await page.locator('#privacy-overlay').evaluate(dialog => dialog.open), false, 'Saved choices suppress the first-visit prompt'); + await page.locator('.persistent-logo').click(); + await page.locator('[data-privacy-open]').click(); + assert.equal(await page.locator('#privacy-overlay').evaluate(el => el.open), false, 'Settings keeps its original overlay'); + await page.locator('[data-privacy-details]').click(); + await page.locator('[data-privacy-back]').click(); + await page.locator('[data-privacy-settings-back]').click(); + assert.equal(await page.locator('[data-settings-page]').isVisible(), true); + assert(await page.locator('[data-privacy-open]').evaluate(el => document.activeElement === el)); + await page.emulateMedia({ reducedMotion: 'no-preference' }); + await page.locator('[data-privacy-open]').click(); + assert(await page.locator('.privacy-content').evaluate(el => el.getAnimations().length > 0), 'Content animates independently of the paper'); + await page.emulateMedia({ reducedMotion: 'no-preference' }); + await page.locator('#privacy-analytics').check(); + assert.equal(await page.locator('#privacy-necessary').isChecked(), false); + await page.locator('#privacy-analytics').uncheck(); + assert.equal(await page.locator('#privacy-necessary').isChecked(), true, 'Unchecking statistics returns to necessary only'); + await page.locator('#privacy-analytics').check(); + assert.equal(await privacy.locator('#privacy-analytics + svg polyline').evaluate(el => getComputedStyle(el).animationName), 'dash'); + await privacy.locator('[data-privacy-save]').click(); + await page.waitForFunction(() => !document.querySelector('#privacy-overlay').open && !document.querySelector('#settings-overlay').classList.contains('is-open')); + assert((await context.cookies()).some(cookie => cookie.name === 'daybook_analytics')); + await page.waitForTimeout(80); + assert.equal(hits.at(-1).analytics, true); + assert.equal(hits.at(-1).countView, false, 'Granting consent does not add another page view'); + await page.emulateMedia({ reducedMotion: 'reduce' }); + const like = page.locator('[data-like-path]'); + await ready(like, false, 0); + await like.click(); + await ready(like, true, 1); + const secondTab = await context.newPage(); + await secondTab.goto(base + '/notes/example/'); + await ready(secondTab.locator('[data-like-path]'), true, 1); + await page.locator('.persistent-logo').click(); + await page.locator('[data-privacy-open]').click(); + assert.equal(await page.locator('#privacy-analytics').isChecked(), true); + await privacy.locator('[data-privacy-necessary]').check(); + await privacy.locator('[data-privacy-save]').click(); + await page.waitForFunction(() => !document.querySelector('#privacy-overlay').open && !document.querySelector('#settings-overlay').classList.contains('is-open')); + await secondTab.waitForFunction(() => JSON.parse(localStorage.getItem('daybook:privacy:v1')).analytics === false); + await page.waitForTimeout(100); + assert(!(await context.cookies()).some(cookie => cookie.name === 'daybook_analytics')); + assert((await context.cookies()).some(cookie => cookie.name === 'daybook_engagement')); + assert.equal(hits.at(-1).analytics, false); + assert.equal(hits.at(-1).cookie, '', 'Aggregate hits do not transmit the engagement Cookie'); + await secondTab.close(); + await page.reload(); + await ready(like, true, 1); + assert.equal(writes, 1, 'Revisiting never adds a like'); + await like.click(); + await ready(like, false, 0); + await page.emulateMedia({ reducedMotion: 'no-preference' }); + failNext = true; + await like.click(); + await page.waitForFunction(() => document.querySelector('[data-like-feedback="error"]')); + await ready(like, false, 0); + assert.equal(await like.locator('.material-symbol').evaluate(icon => getComputedStyle(icon).animationName), 'like-reject'); + assert.equal(await page.locator('[data-like-entry]').innerText(), 'favorite\n0', 'No visible error text'); + await like.click(); + await ready(like, true, 1); + assert.equal(await like.locator('.material-symbol').evaluate(icon => getComputedStyle(icon).animationName), 'like-confirm'); + assert.equal(await like.locator('.material-symbol').evaluate(icon => getComputedStyle(icon, '::before').animationName), 'like-ripple'); + await page.emulateMedia({ reducedMotion: 'reduce' }); + assert.equal(await like.locator('.material-symbol').evaluate(icon => getComputedStyle(icon).animationName), 'none'); + assert.equal(await like.locator('.material-symbol').evaluate(icon => getComputedStyle(icon, '::before').animationName), 'none'); + await page.emulateMedia({ reducedMotion: 'no-preference' }); + await page.evaluate(() => { document.documentElement.dataset.reducedMotion = 'true'; }); + assert.equal(await like.locator('.material-symbol').evaluate(icon => getComputedStyle(icon, '::before').animationName), 'none'); + await page.evaluate(() => { delete document.documentElement.dataset.reducedMotion; }); + await page.emulateMedia({ reducedMotion: 'reduce' }); + await page.waitForFunction(() => !document.querySelector('[data-like-feedback]')); + assert.equal(await like.getAttribute('aria-label'), '�消喜欢'); + assert.equal(await page.locator('.like-status').count(), 0, 'Feedback never inserts inline status text'); + + await page.locator('.side-nav a[href="/memos/"]').click(); + await settled(page, 'memos'); + await ready(like, false, 0); + await like.click(); + await ready(like, true, 1); + await page.locator('.memo-permalink').click(); + await settled(page, 'memo'); + await ready(like, true, 1); + await like.click(); + await ready(like, false, 0); + await page.goBack(); + await settled(page, 'memos'); + await ready(like, false, 0); + const otherContext = await browser.newContext(); + await otherContext.addInitScript(() => localStorage.setItem('daybook:privacy:v1', JSON.stringify({ analytics: false }))); + const other = await otherContext.newPage(); + await other.goto(base + '/notes/example/'); + await ready(other.locator('[data-like-path]'), false, 1); + await otherContext.close(); + + // Global and article entries all point to the same site-wide feed. + await page.goto(base + '/notes/example/'); + await ready(like, true, 1); + const entries = page.locator('.site-tools [data-rss-open], .article-stagger-meta [data-rss-open]'); + assert.equal(await entries.count(), 2); + assert.deepEqual(await entries.evaluateAll(links => links.map(link => link.getAttribute('href'))), ['/rss.xml', '/rss.xml']); + const opener = page.locator('.site-tools [data-rss-open]'); + await opener.click(); + const dialog = page.locator('#rss-dialog'); + assert.equal(await dialog.evaluate(dialog => dialog.open), true); + assert.equal(await dialog.locator('[data-rss-address]').inputValue(), base + '/rss.xml'); + await dialog.locator('[data-rss-copy]').click(); + await page.waitForFunction(() => document.querySelector('[data-rss-copy-text]').textContent === '已�制'); + assert.equal(await page.evaluate(() => navigator.clipboard.readText()), base + '/rss.xml'); + await page.keyboard.press('Escape'); + assert.equal(await dialog.evaluate(dialog => dialog.open), false); + assert(await opener.evaluate(link => document.activeElement === link)); + await page.locator('.site-tools .lang-toggle').click(); + await page.locator('.article-stagger-meta [data-rss-open]').click(); + assert.equal(await page.locator('#rss-title').textContent(), 'Subscribe to this site (RSS)'); + await page.emulateMedia({ reducedMotion: 'no-preference' }); + await dialog.locator('[data-rss-copy]').click(); + await page.waitForFunction(() => document.querySelector('[data-rss-copy-text]').textContent === 'Copied'); + await page.waitForFunction(() => document.querySelector('[data-rss-copy-text]').textContent === 'Copy address'); + await page.emulateMedia({ reducedMotion: 'reduce' }); + await page.evaluate(() => { navigator.clipboard.writeText = async () => { throw new Error('Denied'); }; }); + await dialog.locator('[data-rss-copy]').click(); + await page.waitForFunction(() => document.querySelector('.rss-status').textContent.includes('selected')); + assert(await dialog.locator('[data-rss-address]').evaluate(input => input.selectionEnd === input.value.length && input.selectionStart === 0)); + await page.keyboard.press('Escape'); + const feed = await (await context.request.get(base + '/rss.xml')).text(); + assert.match(feed, /\/notes\/example\//); + assert.match(feed, /\/memos\/�记\//); + + await page.setViewportSize({ width: 390, height: 844 }); + failNext = true; + await like.click(); + await page.waitForFunction(() => document.querySelector('[data-like-feedback="error"]')); + await ready(like, true, 1); + assert.equal(await like.locator('.material-symbol').evaluate(icon => getComputedStyle(icon).animationName), 'none'); + assert.equal(await page.locator('.like-status').count(), 0); + await page.locator('.article-stagger-meta [data-rss-open]').click(); + assert(await dialog.evaluate(dialog => { const r = dialog.getBoundingClientRect(); return r.left >= 0 && r.right <= innerWidth; })); + await page.keyboard.press('Escape'); + await page.locator('#mobile-menu-toggle').click(); + await page.locator('#mobile-drawer [data-rss-open]').click(); + assert.equal(await dialog.evaluate(dialog => dialog.open), true); + await page.keyboard.press('Escape'); + assert.equal(await page.locator('body').evaluate(body => body.classList.contains('is-mobile-drawer-open')), true, 'RSS Escape does not close the underlying drawer'); + console.log('Checking note/memo flips and archive count-up animation...'); + await page.setViewportSize({ width: 1440, height: 1000 }); + await page.emulateMedia({ reducedMotion: 'no-preference' }); + await page.goto(base + '/notes/example/'); + await ready(like, true, 1); + await page.evaluate(() => delete document.documentElement.dataset.reducedMotion); + const assertFlipping = async selector => { + const counter = page.locator(selector).first(); + assert.equal(await counter.locator('.number-flip-current').evaluate(el => getComputedStyle(el).animationName), 'number-flip-in'); + assert.equal(await counter.evaluate(el => getComputedStyle(el, '::before').animationName), 'number-flip-out'); + return counter; + }; + presenceSocket.send(JSON.stringify({ type: 'presence', path: '/notes/example/', pageViewers: 9, siteViewers: 99 })); + await page.waitForFunction(() => document.querySelector('[data-page-viewers]')?.textContent === '9'); + await assertFlipping('[data-page-viewers]'); + presenceSocket.send(JSON.stringify({ type: 'presence', path: '/notes/example/', pageViewers: 10, siteViewers: 100 })); + await page.waitForFunction(() => document.querySelector('[data-page-viewers]')?.textContent === '10'); + assert.equal(await page.locator('[data-page-viewers]').getAttribute('data-number-previous'), '9', 'Rapid updates flip from the latest confirmed value'); + await page.waitForTimeout(500); + presenceSocket.send(JSON.stringify({ type: 'presence', path: '/notes/example/', pageViewers: 10, siteViewers: 100 })); + await page.waitForTimeout(50); + assert.equal(await page.locator('[data-page-viewers].is-number-flipping').count(), 0, 'An unchanged count does not animate'); + await like.click(); await ready(like, false, 0); + await assertFlipping('[data-like-count]'); + await page.goto(base + '/memos/'); + const memoLike = page.locator('[data-like-path]'); + await ready(memoLike, false, 0); + await memoLike.click(); await ready(memoLike, true, 1); + await assertFlipping('[data-like-count]'); + await page.goto(base + '/archive/'); + await page.waitForFunction(() => document.querySelector('[data-site-visitors-anim]')?.textContent === '1'); + await page.evaluate(() => { + document.querySelectorAll('.archive-stat-num').forEach(el => el.classList.remove('anim-done')); + document.querySelector('[data-site-visitors-anim]').dataset.target = '1200'; + document.querySelector('[data-site-views-anim]').dataset.target = '42000'; + document.dispatchEvent(new Event('daybook:stats-loaded')); + }); + await page.waitForFunction(() => { + const value = Number(document.querySelector('[data-site-visitors-anim]').textContent.replaceAll(',', '')); + return value > 0 && value < 1200; + }); + assert.equal(await page.locator('.archive-stat-num.number-flip').count(), 0, 'Archive uses the original count-up, not a flip'); + await page.waitForFunction(() => document.querySelector('[data-site-visitors-anim]').textContent === '1,200' && document.querySelector('[data-site-views-anim]').textContent === '42.0'); + assert.equal(await page.locator('[data-site-visitors-anim]').textContent(), '1,200'); + assert.equal(await page.locator('[data-site-views-anim]').textContent(), '42.0'); + presenceSocket.send(JSON.stringify({ type: 'presence', path: '/archive/', pageViewers: 1, siteViewers: 17 })); + await page.waitForFunction(() => document.querySelector('[data-site-viewers]')?.textContent === '17'); + assert.equal(await page.locator('[data-site-viewers].number-flip').count(), 0); + for (const preference of ['system', 'setting']) { + await page.emulateMedia({ reducedMotion: preference === 'system' ? 'reduce' : 'no-preference' }); + await page.evaluate(preference => { + if (preference === 'setting') document.documentElement.dataset.reducedMotion = 'true'; + document.querySelector('[data-site-visitors-anim]').classList.remove('anim-done'); + document.querySelector('[data-site-visitors-anim]').dataset.target = preference === 'system' ? '2' : '3'; + document.dispatchEvent(new Event('daybook:stats-loaded')); + }, preference); + assert.equal(await page.locator('[data-site-visitors-anim]').textContent(), preference === 'system' ? '2' : '3', 'Reduced motion updates archive counters immediately'); + } + await page.emulateMedia({ reducedMotion: 'reduce' }); + await page.goto(base + '/notes/bilingual/'); + await ready(like, false, 0); + assert.equal(await page.locator('.article-meta-rows > div').count(), 3); + assert.equal(await page.locator('.article-meta-rows > div:nth-child(2) [data-page-views]').count(), 1); + assert.equal(await page.locator('.article-meta-rows > div:nth-child(2) [data-page-viewers]').count(), 1); + assert(await page.locator('.article-stagger-meta > *').evaluateAll(items => items.every((item, index) => item.style.getPropertyValue('--stagger-index') === String(index))), 'Metadata entrance order continues across both rows'); + const actions = page.locator('.article-actions-meta'); + assert.equal(await actions.locator('[data-tooltip]').count(), 6, 'All article actions have tooltips'); + assert.equal(await actions.locator('[data-ui-text]').count(), 0, 'Article actions use icons without text labels'); + const translation = actions.locator('.bilingual-toggle-btn'); + await translation.hover(); + assert.equal(await translation.evaluate(el => getComputedStyle(el).color), await actions.locator('[data-rss-open]').evaluate(el => { + el.style.color = 'var(--color-hover-text)'; + return getComputedStyle(el).color; + })); + for (const width of [1440, 390, 320]) { + await page.setViewportSize({ width, height: 900 }); + assert(await actions.evaluate(el => el.scrollWidth <= el.clientWidth + 1), 'Article actions fit without horizontal overflow'); + } + await page.setViewportSize({ width: 1440, height: 1000 }); + await page.locator('.side-nav a[href="/about/"]').click(); + await settled(page, 'about'); + const aboutLike = page.locator('.about-meta [data-like-path]'); + await ready(aboutLike, false, 0); + assert.equal(await aboutLike.getAttribute('data-like-path'), '/about/'); + assert.deepEqual(await page.locator('.about-time-group time').allTextContents(), ['2026-10-01', '2026-10-03']); + presenceSocket.send(JSON.stringify({ type: 'presence', path: '/about/', pageViewers: 3, siteViewers: 10 })); + await page.waitForFunction(() => document.querySelector('.about-meta [data-page-viewers]')?.textContent === '3'); + await aboutLike.click(); + await ready(aboutLike, true, 1); + await page.reload(); + await ready(aboutLike, true, 1); + await page.locator('.about-content .bilingual-toggle-btn').hover(); + assert(await page.locator('.about-content .bilingual-toggle-btn').evaluate(el => { + const actual = getComputedStyle(el).color; + el.style.color = 'var(--color-hover-text)'; + return actual === getComputedStyle(el).color; + }), 'About translation uses the shared hover highlight'); + assert.deepEqual(errors, []); + await context.close(); + + const mobile = await browser.newContext({ viewport: { width: 390, height: 844 }, reducedMotion: 'reduce', colorScheme: 'dark' }); + await mobile.routeWebSocket(/\/api\/presence\?/, () => {}); + const phone = await mobile.newPage(); + await phone.goto(base + '/en_US/notes/example/'); + await phone.waitForFunction(() => document.querySelector('#privacy-overlay').open); + assert.equal(await phone.locator('#privacy-title').innerText(), 'Privacy'); + const saveBounds = await phone.locator('[data-privacy-save]').boundingBox(); + const contentBounds = await phone.locator('.privacy-content').boundingBox(); + assert(saveBounds.y >= contentBounds.y && saveBounds.y + saveBounds.height <= contentBounds.y + contentBounds.height + 1, 'Mobile first page exposes the choices and save action without scrolling'); + await phone.locator('#privacy-analytics').check(); + assert.equal(await phone.locator('#privacy-analytics + svg polyline').evaluate(el => getComputedStyle(el).animationName), 'none'); + await phone.locator('[data-privacy-details]').click(); + assert.equal(await phone.locator('[data-privacy-main]').isVisible(), false); + assert.equal(await phone.locator('[data-privacy-detail-page]').isVisible(), true); + await phone.setViewportSize({ width: 320, height: 568 }); + await phone.locator('[data-privacy-back]').scrollIntoViewIfNeeded(); + const paper = await phone.locator('.privacy-paper').boundingBox(); + assert(paper.x >= 0 && paper.y >= 0 && paper.x + paper.width <= 320 && paper.y + paper.height <= 568, 'Expanded mobile paper fits the viewport'); + await phone.locator('[data-privacy-back]').click(); + assert.equal(await phone.locator('#privacy-analytics').isChecked(), true, 'Details preserves the draft'); + await phone.locator('[data-privacy-close]').last().click(); + assert.equal(await phone.evaluate(() => localStorage.getItem('daybook:privacy:v1')), null, 'Closing a checked draft never grants consent'); + assert(!(await mobile.cookies()).some(cookie => cookie.name === 'daybook_analytics')); + await phone.locator('.persistent-logo').click(); + await phone.locator('[data-privacy-open]').click(); + assert.equal(await phone.locator('#privacy-analytics').isChecked(), false, 'Reopening discards an unsaved draft'); + await phone.keyboard.press('Tab'); + assert(await phone.evaluate(() => document.querySelector('#settings-overlay').contains(document.activeElement)), 'Keyboard focus remains in the modal'); + await phone.keyboard.press('Escape'); + assert(await phone.locator('.persistent-logo').evaluate(el => document.activeElement === el), 'Closing restores focus to Settings'); + await mobile.close(); + + const unavailable = await browser.newContext(); + await unavailable.route('**/api/privacy', route => route.fulfill({ status: 404, body: '{}' })); + let unsafeRequests = 0; + unavailable.on('request', req => { if (/\/api\/(hit|likes|presence)/.test(req.url())) unsafeRequests++; }); + const offline = await unavailable.newPage(); + await offline.goto(base + '/notes/example/'); + await offline.waitForFunction(() => document.querySelector('#privacy-overlay').open); + await offline.locator('[data-privacy-save]').click(); + await offline.waitForFunction(() => document.querySelector('.privacy-status').textContent.length > 0); + assert.equal(unsafeRequests, 0, 'Old or unavailable backends cannot create identities'); + await offline.keyboard.press('Escape'); + await offline.locator('.side-nav a[href="/memos/"]').click(); + await settled(offline, 'memos'); + assert.equal(unsafeRequests, 0, 'Browsing remains usable with runtime APIs paused'); + await unavailable.close(); + + const noStorage = await browser.newContext(); + await noStorage.addInitScript(() => { + Storage.prototype.getItem = () => { throw new Error('Storage disabled'); }; + Storage.prototype.setItem = () => { throw new Error('Storage disabled'); }; + }); + await noStorage.routeWebSocket(/\/api\/presence\?/, () => {}); + const temporary = await noStorage.newPage(); + await temporary.goto(base + '/notes/example/'); + await temporary.waitForFunction(() => document.querySelector('#privacy-overlay').open); + await temporary.locator('[data-privacy-save]').click(); + await temporary.waitForFunction(() => !document.querySelector('#privacy-overlay').open && !document.querySelector('#settings-overlay').classList.contains('is-open')); + await temporary.locator('.side-nav a[href="/memos/"]').click(); + await settled(temporary, 'memos'); + assert.equal(await temporary.locator('#privacy-overlay').evaluate(el => el.open), false, 'In-memory choice survives SPA navigation with storage blocked'); + await noStorage.close(); + assert(privacyWrites > 0); + console.log('Article actions and privacy passed: consent, withdrawal, cross-tab sync, storage failures, backend compatibility, likes, SPA, RSS, keyboard, language and mobile.'); +} finally { + await browser?.close(); + if (server) await new Promise(resolve => server.close(resolve)); + await rm(fixture, { recursive: true, force: true }); +} diff --git a/scripts/browser-test.mjs b/scripts/browser-test.mjs new file mode 100644 index 00000000..dfd61c5e --- /dev/null +++ b/scripts/browser-test.mjs @@ -0,0 +1,218 @@ +import { chromium } from 'playwright'; +import assert from 'node:assert/strict'; + +const serverUrl = process.env.DAYBOOK_TEST_URL || 'http://localhost:1313'; + +// A swapped DOM can appear before its View Transition finishes. Wait before +// starting the next navigation so this smoke test does not cancel animations. +async function settled(page) { + await page.waitForFunction(() => !document.documentElement.classList.contains('is-transitioning')); +} + +async function run() { + console.log('Starting Playwright smoke test...'); + const browser = await chromium.launch({ headless: true }); + const context = await browser.newContext({ + viewport: { width: 2560, height: 1440 } + }); + + const page = await context.newPage(); + const errors = []; + const requests = []; + page.on('request', request => requests.push(request.url())); + + page.on('pageerror', err => { + errors.push(`PageError: ${err.message}`); + }); + + page.on('console', msg => { + if (msg.type() === 'error') { + const text = msg.text(); + if (!text.includes('favicon')) { + errors.push(`ConsoleError: ${text}`); + } + } + }); + + await page.addInitScript(() => { + window.__daybookViewTransitionCount = 0; + if (document.startViewTransition) { + const original = document.startViewTransition; + document.startViewTransition = function(cb) { + window.__daybookViewTransitionCount++; + return original.call(this, cb); + }; + } + }); + + try { + console.log('Checking homepage lazy resources...'); + await page.goto(`${serverUrl}/`, { waitUntil: 'networkidle' }); + const homeRequests = [...requests]; + if (homeRequests.some(url => /settings-paper|maple-mono|\/(?:toc|mobile-toc|embeds|katex-loader|mermaid-loader|lightbox|code-copy)\.[a-f0-9]+\.js/.test(url))) { + throw new Error('Homepage eagerly loaded paper, code fonts, or article scripts.'); + } + if (await page.locator('link[rel="stylesheet"][href*="/css/bundles/home."]').count() !== 1) { + throw new Error('Homepage CSS bundle is missing.'); + } + + console.log('Opening settings lazily...'); + await page.locator('.persistent-logo').click(); + await page.waitForSelector('#settings-overlay.is-open'); + await page.waitForFunction(() => performance.getEntriesByType('resource').some(entry => entry.name.includes('settings-paper'))); + assert.equal(await page.locator('.settings-checkbox-input:checked').count(), 0, 'All preferences start unchecked'); + assert.equal(await page.locator('html.has-custom-cursor').count(), 0, 'System cursor is the default'); + assert.equal(await page.locator('#setting-clock-cursor').isDisabled(), true); + await page.locator('#setting-custom-cursor').check(); + assert.equal(await page.locator('html.has-custom-cursor').count(), 1, 'Checking enables the custom cursor'); + assert.equal(await page.locator('#setting-clock-cursor').isDisabled(), false); + assert.equal(await page.locator('#setting-clock-cursor').isChecked(), false); + await page.reload({ waitUntil: 'networkidle' }); + assert.equal(await page.locator('html.has-custom-cursor').count(), 1, 'Custom cursor choice survives reload'); + await page.locator('.persistent-logo').click(); + await page.waitForSelector('#settings-overlay.is-open'); + assert.equal(await page.locator('#setting-custom-cursor').isChecked(), true); + await page.locator('#setting-custom-cursor').uncheck(); + assert.equal(await page.locator('html.has-custom-cursor').count(), 0, 'Unchecking restores the system cursor'); + assert.equal(await page.locator('#setting-clock-cursor').isDisabled(), true); + await page.reload({ waitUntil: 'networkidle' }); + assert.equal(await page.locator('html.has-custom-cursor').count(), 0, 'Opting out survives reload'); + await page.locator('.persistent-logo').click(); + await page.waitForSelector('#settings-overlay.is-open'); + assert.equal(await page.locator('#setting-custom-cursor').isChecked(), false); + await page.locator('#setting-custom-cursor').check(); + await page.keyboard.press('Escape'); + await page.waitForSelector('#settings-overlay.is-open', { state: 'hidden' }); + + console.log('Navigating home → notes...'); + await page.evaluate(() => { + // Capture the actual entry animation, including every rendered nav item. + const observer = new MutationObserver(() => { + if (!document.body.classList.contains('page-entering')) return; + const links = [...document.querySelectorAll('.side-nav:not(.transition-stable) .nav-link')]; + if (!links.length) return; + window.__sideNavEntry = links.map(link => { + const style = getComputedStyle(link); + return { label: link.textContent.trim(), name: style.animationName, delay: parseFloat(style.animationDelay) }; + }); + }); + observer.observe(document.body, { attributes: true, attributeFilter: ['class'], childList: true, subtree: true }); + window.__sideNavEntryObserver = observer; + }); + await page.locator('.site-nav a[href="/notes/"]').click(); + await page.waitForSelector('.notes-list', { state: 'attached', timeout: 5000 }); + if (await page.locator('link[rel="stylesheet"][href*="/css/bundles/pages."]').count() !== 1) { + throw new Error('SPA navigation did not install the pages CSS bundle.'); + } + + if (errors.length > 0) throw new Error(errors.join('\n')); + + await settled(page); + const navEntry = await page.evaluate(() => { + window.__sideNavEntryObserver.disconnect(); + return window.__sideNavEntry; + }); + if (!navEntry?.length || navEntry.some((item, index) => + item.name !== 'side-nav-enter' || (index > 0 && item.delay <= navEntry[index - 1].delay))) { + throw new Error(`Side navigation must enter in top-to-bottom order: ${JSON.stringify(navEntry)}`); + } + console.log('Navigating to article...'); + const articleLink = page.locator('h1.notes-item-title a').first(); + await articleLink.click(); + + await page.waitForSelector('div.post-content', { state: 'attached', timeout: 5000 }); + + const vtCount = await page.evaluate(() => window.__daybookViewTransitionCount); + if (vtCount === 0) { + throw new Error('View Transition API was not called during SPA navigation.'); + } + + console.log('Checking KaTeX render...'); + await page.waitForSelector('.katex', { state: 'attached', timeout: 5000 }); + const katexCount = await page.locator('.katex').count(); + if (katexCount === 0) { + throw new Error('KaTeX DOM (.katex) was not generated.'); + } + if (requests.some(url => new URL(url).pathname === '/vendor/katex/katex.min.css')) { + throw new Error('KaTeX duplicated the existing hashed stylesheet.'); + } + + console.log('Checking share panel...'); + await page.locator('[data-share-open]').first().click(); + await page.waitForSelector('#share-overlay.is-open'); + await page.keyboard.press('Escape'); + await page.waitForSelector('#share-overlay.is-open', { state: 'hidden' }); + + console.log('Testing custom cursor regression...'); + await page.evaluate(() => { + const enterEvent = new MouseEvent('mouseenter', { bubbles: true }); + document.dispatchEvent(enterEvent); + + const leaveEvent = new MouseEvent('mouseleave', { bubbles: true }); + document.dispatchEvent(leaveEvent); + }); + + if (errors.length > 0) throw new Error(errors.join('\n')); + + console.log('Testing browser back...'); + await page.goBack(); + await page.waitForSelector('.notes-list', { state: 'attached', timeout: 5000 }); + + if (errors.length > 0) throw new Error(errors.join('\n')); + + await settled(page); + console.log('Testing browser forward...'); + await page.goForward(); + await page.waitForSelector('div.post-content', { state: 'attached', timeout: 5000 }); + await page.waitForSelector('.katex', { state: 'attached', timeout: 5000 }); + + await settled(page); + console.log('Testing graph navigation...'); + await page.locator('.side-nav a[href="/graph/"]').click(); + await page.waitForSelector('#graph-container svg', { state: 'attached', timeout: 10000 }); + + await settled(page); + console.log('Testing homepage return...'); + await page.evaluate(() => window.daybookNavigateTo('/')); + await page.waitForSelector('[data-github-home]', { state: 'attached', timeout: 5000 }); + if (errors.length > 0) throw new Error(errors.join('\n')); + + console.log('Checking reduced-motion About decoration across navigation and reload...'); + await settled(page); + await page.evaluate(() => window.daybookNavigateTo('/about/')); + await page.waitForSelector('.golden-spiral'); + await settled(page); + await page.locator('.persistent-logo').click(); + await page.locator('#setting-reduced-motion').check(); + await page.keyboard.press('Escape'); + assert.equal(await page.locator('.golden-spiral').isVisible(), false); + assert.equal(await page.locator('.golden-spiral').evaluate(el => el.getAnimations({ subtree: true }).length), 0); + await page.evaluate(() => window.daybookNavigateTo('/notes/')); + await page.waitForSelector('.notes-list'); + await settled(page); + await page.evaluate(() => window.daybookNavigateTo('/about/')); + await page.waitForSelector('.golden-spiral', { state: 'attached' }); + await settled(page); + assert.equal(await page.locator('.golden-spiral').isVisible(), false); + await page.reload({ waitUntil: 'networkidle' }); + assert.equal(await page.locator('.golden-spiral').isVisible(), false, 'Reduced motion persists through reload'); + assert.equal(await page.locator('html.has-custom-cursor').count(), 0); + await page.locator('.persistent-logo').click(); + assert.equal(await page.locator('#setting-reduced-motion').isChecked(), true); + await page.locator('#setting-reduced-motion').uncheck(); + await page.keyboard.press('Escape'); + assert.equal(await page.locator('.golden-spiral').isVisible(), true); + await page.emulateMedia({ reducedMotion: 'reduce' }); + assert.equal(await page.locator('.golden-spiral').isVisible(), false, 'System reduced motion also hides the decoration'); + if (errors.length > 0) throw new Error(errors.join('\n')); + + console.log('Browser tests passed successfully.'); + } finally { + await browser.close(); + } +} + +run().catch(err => { + console.error(err); + process.exit(1); +}); diff --git a/scripts/build-css.mjs b/scripts/build-css.mjs new file mode 100644 index 00000000..d8bc6226 --- /dev/null +++ b/scripts/build-css.mjs @@ -0,0 +1,41 @@ +import * as esbuild from 'esbuild'; +import { mkdir, readFile } from 'node:fs/promises'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { buildGiscusThemes } from './build-giscus-themes.mjs'; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..'); +const cssRoot = path.join(root, 'internal', 'embedded', 'static', 'css'); +await buildGiscusThemes(root); +const global = await readFile(path.join(cssRoot, 'global.css'), 'utf8'); +const imports = [...global.matchAll(/@import\s+url\("([^"]+)"\);/g)].map(match => match[1]); +const pageImports = imports.filter(file => file.startsWith('pages/') && file !== 'pages/home.css'); +const sharedMarkdown = ['markdown.css', 'components/embed-skeleton.css']; +const deferred = new Set(['pages/home.css', ...pageImports, ...sharedMarkdown, 'components/bilingual-toggle.css', 'transitions.css']); +const bundles = { + common: [...imports.filter(file => !deferred.has(file)), 'decorative-fonts.css'], + home: ['pages/home.css', ...sharedMarkdown, 'transitions.css'], + pages: [...pageImports, 'components/bilingual-toggle.css', ...sharedMarkdown, 'transitions.css'], +}; +await mkdir(path.join(cssRoot, 'bundles'), { recursive: true }); +for (const [name, files] of Object.entries(bundles)) { + await esbuild.build({ + stdin: { contents: files.map(file => `@import "./${file}";`).join('\n') + (name === 'common' ? '\nhtml[data-theme="dark"]{color-scheme:dark;}' : ''), resolveDir: cssRoot, loader: 'css' }, + outfile: path.join(cssRoot, 'bundles', `${name}.css`), + bundle: true, + minify: true, + logLevel: 'info', + plugins: [{ + name: 'keep-self-hosted-asset-urls', + setup(build) { + build.onResolve({ filter: /.*/ }, args => { + if (args.kind !== 'url-token') return; + if (/^(?:\/|data:|https?:)/.test(args.path)) return { path: args.path, external: true }; + const absolute = path.resolve(args.resolveDir, args.path); + const relative = path.relative(path.join(root, 'internal', 'embedded', 'static'), absolute).split(path.sep).join('/'); + return { path: '/' + relative, external: true }; + }); + }, + }], + }); +} diff --git a/scripts/build-cursor-motion.mjs b/scripts/build-cursor-motion.mjs new file mode 100644 index 00000000..ab88dd7b --- /dev/null +++ b/scripts/build-cursor-motion.mjs @@ -0,0 +1,30 @@ +import { writeFile, mkdir } from 'node:fs/promises'; +import { cursorPath } from '../assets/motion/liquid-loop.mjs'; + +// Keep the original 118 × 30ms cadence. Simplify sampled outlines to a +// subpixel tolerance at the cursor's 0.2× display scale. +function simplify(points, tolerance = 0.5) { + if (points.length < 3) return points; + const first = points[0], last = points.at(-1); + const dx = last[0] - first[0], dy = last[1] - first[1]; + let farthest = tolerance * tolerance, split = -1; + for (let i = 1; i < points.length - 1; i++) { + const p = points[i]; + const t = dx || dy ? Math.max(0, Math.min(1, ((p[0] - first[0]) * dx + (p[1] - first[1]) * dy) / (dx * dx + dy * dy))) : 0; + const distance = (p[0] - first[0] - t * dx) ** 2 + (p[1] - first[1] - t * dy) ** 2; + if (distance > farthest) { farthest = distance; split = i; } + } + if (split < 0) return [first, last]; + return [...simplify(points.slice(0, split + 1), tolerance).slice(0, -1), ...simplify(points.slice(split), tolerance)]; +} + +const frames = Array.from({ length: 118 }, (_, frame) => cursorPath(frame).replace(/M[^Z]+Z/g, outline => { + if (outline.includes('A')) return outline; + const points = [...outline.matchAll(/[ML](-?[\d.]+),(-?[\d.]+)/g)].map(match => [+match[1], +match[2]]); + return simplify(points).map((point, index) => `${index ? 'L' : 'M'}${point.join(',')}`).join('') + 'Z'; +})); +const directory = new URL('../assets/ts/generated/', import.meta.url); +await mkdir(directory, { recursive: true }); +await writeFile(new URL('liquid-loop-frames.ts', directory), + '// Generated by scripts/build-cursor-motion.mjs from assets/motion/liquid-loop.mjs.\n' + + 'export const liquidLoopFrames: readonly string[] = ' + JSON.stringify(frames) + ';\n'); diff --git a/scripts/build-giscus-themes.mjs b/scripts/build-giscus-themes.mjs new file mode 100644 index 00000000..3966f8b9 --- /dev/null +++ b/scripts/build-giscus-themes.mjs @@ -0,0 +1,78 @@ +import * as esbuild from 'esbuild'; +import { readFile, writeFile } from 'node:fs/promises'; +import path from 'node:path'; + +// The iframe cannot inherit Daybook's CSS variables or fonts. Resolve its four +// appearances from the same tokens and font faces used by the parent document. +export async function buildGiscusThemes(root) { + const cssRoot = path.join(root, 'internal', 'embedded', 'static', 'css'); + const [tokens, fonts, shared] = await Promise.all([ + readFile(path.join(cssRoot, 'tokens.css'), 'utf8'), + readFile(path.join(cssRoot, 'fonts.css'), 'utf8'), + readFile(path.join(cssRoot, 'components', 'giscus-theme.css'), 'utf8'), + ]); + + const tokenRules = new Map([...tokens.matchAll(/(:root[^{}]*)\{([^{}]*)\}/g)].map(match => [ + match[1].trim(), + new Map([...match[2].matchAll(/(--[\w-]+)\s*:\s*([^;]+);/g)].map(declaration => [declaration[1], declaration[2].trim()])), + ])); + const requiredRule = selector => { + const declarations = tokenRules.get(selector); + if (!declarations) throw new Error(`Missing Daybook token rule: ${selector}`); + return declarations; + }; + + // Copy only variables used by the iframe, including dependencies of aliases. + const referenced = new Set([...shared.matchAll(/var\((--[\w-]+)/g)].map(match => match[1])); + const fontFaces = [...fonts.matchAll(/@font-face\s*\{[^{}]*\}/g)] + .map(match => match[0]) + .filter(face => /font-family:\s*"Cormorant Garamond";/.test(face)) + .join('\n') + .replace(/url\("\/vendor\//g, 'url("../../vendor/'); + if (!fontFaces) throw new Error('Missing Daybook Cormorant Garamond font faces'); + + // Keep CJK unicode-range shards shared instead of duplicating their font-face + // declarations in all four themes. Go fingerprints imports and relative URLs. + const fontImports = [ + 'lxgw-wenkai-screen/regular/result.css', + 'maple-mono-cn/regular/result.css', + 'maple-mono-cn/italic/result.css', + ].map(file => `@import url("../../vendor/fonts/${file}");`).join('\n'); + const english = requiredRule(':root:lang(en)'); + const englishRule = `:root:lang(en){${[...english].map(([name, value]) => `${name}:${value};`).join('')}}`; + + for (const palette of ['default', 'warm']) { + for (const theme of ['light', 'dark']) { + const resolved = new Map(requiredRule(':root')); + if (theme === 'dark') { + for (const [name, value] of requiredRule(':root[data-theme="dark"]')) resolved.set(name, value); + } + if (palette === 'warm') { + for (const [name, value] of requiredRule(':root[data-palette="warm"]')) resolved.set(name, value); + if (theme === 'dark') { + for (const [name, value] of requiredRule(':root[data-palette="warm"][data-theme="dark"]')) resolved.set(name, value); + } + } + + const selected = new Set(referenced); + for (const name of selected) { + const value = resolved.get(name); + // Shared giscus aliases are defined in the shared stylesheet itself. + if (!value) { + if (!new RegExp(`${name}\\s*:`).test(shared)) throw new Error(`Missing Daybook token: ${name}`); + selected.delete(name); + continue; + } + for (const match of value.matchAll(/var\((--[\w-]+)/g)) selected.add(match[1]); + } + const declarations = [...resolved] + .filter(([name]) => selected.has(name)) + .map(([name, value]) => `${name}:${value};`).join(''); + const source = `${fontImports}\n${fontFaces}\n:root{${declarations}color-scheme:${theme};}\n${englishRule}\n${shared}`; + // Transform without bundling so imports stay relative to this stylesheet. + const result = await esbuild.transform(source, { loader: 'css', minify: true }); + const file = path.join(cssRoot, 'components', `giscus-${palette}-${theme}.css`); + await writeFile(file, `/* Generated by scripts/build-giscus-themes.mjs; edit tokens.css, fonts.css or giscus-theme.css. */\n${result.code}`); + } + } +} diff --git a/scripts/build-images.mjs b/scripts/build-images.mjs new file mode 100644 index 00000000..5fb7645b --- /dev/null +++ b/scripts/build-images.mjs @@ -0,0 +1,10 @@ +import sharp from 'sharp'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..'); +const target = path.join(root, 'internal', 'embedded', 'static', 'images', 'settings-paper.webp'); +const result = await sharp(path.join(root, 'assets', 'images', 'settings-paper.png')) + .webp({ quality: 78, effort: 6 }) + .toFile(target); +console.log(`Settings/share paper: ${result.width}×${result.height}, ${result.size} bytes (loaded on opening).`); diff --git a/scripts/build-js.mjs b/scripts/build-js.mjs new file mode 100644 index 00000000..a72a5c99 --- /dev/null +++ b/scripts/build-js.mjs @@ -0,0 +1,95 @@ +import * as esbuild from 'esbuild'; +import * as path from 'path'; +import { fileURLToPath } from 'url'; +import * as fs from 'fs'; +import './build-cursor-motion.mjs'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const root = path.resolve(__dirname, '..'); + +const isWatch = process.argv.includes('--watch'); + +const classicEntries = [ + 'archive', + 'code-copy', + 'custom-cursor', + 'daybook-router', + 'embeds', + 'gallery', + 'graph-loader', + 'graph', + 'heading-anchors', + 'katex-loader', + 'lightbox', + 'mermaid-loader', + 'memos', + 'mobile-drawer', + 'mobile-toc', + 'note-filters', + 'page-transition-engine', + 'search-engine', + 'search-overlay', + 'theme', + 'toc', + 'ui-language' +].map(name => path.join(root, 'assets', 'ts', `${name}.ts`)); + +const moduleEntries = [ + 'reader-mode', + 'reading-controls', + 'settings-overlay', + 'share-overlay', + 'giscus-loader' +].map(name => path.join(root, 'assets', 'ts', `${name}.ts`)); + +const commonOptions = { + outdir: path.join(root, 'internal', 'embedded', 'static', 'js'), + bundle: true, + sourcemap: isWatch ? 'inline' : false, + minify: !isWatch, + target: ['es2020'], + external: ['/vendor/*'], + logLevel: 'info', +}; + +const classicOptions = { + ...commonOptions, + entryPoints: classicEntries, + format: 'iife' +}; + +const moduleOptions = { + ...commonOptions, + entryPoints: moduleEntries, + format: 'esm' +}; + +async function run() { + if (isWatch) { + const ctxClassic = await esbuild.context(classicOptions); + const ctxModule = await esbuild.context(moduleOptions); + await ctxClassic.watch(); + await ctxModule.watch(); + console.log('Watching for TS changes...'); + } else { + // clear stale JS outputs + const jsDir = path.join(root, 'internal', 'embedded', 'static', 'js'); + if (fs.existsSync(jsDir)) { + const files = fs.readdirSync(jsDir); + for (const file of files) { + if (file.endsWith('.js') || file.endsWith('.js.map')) { + fs.unlinkSync(path.join(jsDir, file)); + } + } + } + + await Promise.all([ + esbuild.build(classicOptions), + esbuild.build(moduleOptions) + ]); + console.log('JS Build complete.'); + } +} + +run().catch(() => process.exit(1)); diff --git a/scripts/build-material-symbols.mjs b/scripts/build-material-symbols.mjs new file mode 100644 index 00000000..49039153 --- /dev/null +++ b/scripts/build-material-symbols.mjs @@ -0,0 +1,66 @@ +import { readFile, readdir, mkdir, writeFile } from 'node:fs/promises'; +import path from 'node:path'; +import * as fontkit from 'fontkit'; +import subsetFont from 'subset-font'; + +// Icon ligatures need their output glyphs as well as the name's letters. +// Subsetting just the alphabet would retain almost the entire ligature font. +async function sourceFiles(directory) { + const files = []; + for (const entry of await readdir(directory, { withFileTypes: true })) { + const file = path.join(directory, entry.name); + if (entry.isDirectory()) { + // Build-only OG templates/code use no site icons. Their ordinary words + // (such as "cards" or "more") must not expand the browser icon font. + if (!['static', 'bundles', 'og', '.git', 'node_modules'].includes(entry.name)) files.push(...await sourceFiles(file)); + } else if (/\.(html|ts|go|css)$/.test(file) && !file.endsWith('_test.go')) { + files.push(file); + } + } + return files; +} + +export async function buildMaterialSymbols(root) { + const packageDir = path.join(root, 'node_modules', 'material-symbols'); + const catalog = await readFile(path.join(packageDir, 'index.d.ts'), 'utf8'); + const validNames = new Set([...catalog.matchAll(/"([a-z0-9_]+)"/g)].map(match => match[1])); + const names = new Set(); + const files = [...await sourceFiles(path.join(root, 'assets', 'ts')), ...await sourceFiles(path.join(root, 'internal')), ...await sourceFiles(path.join(root, 'internal', 'embedded', 'static', 'css'))]; + for (const file of files) { + const source = await readFile(file, 'utf8'); + // Covers templates, TS string literals/HTML, Go callouts and CSS ligatures. + for (const match of source.matchAll(/["'`>]\s*([a-z0-9_]+)\s*["'`<]/g)) { + if (validNames.has(match[1])) names.add(match[1]); + } + } + if (!names.size) throw new Error('No Material Symbols found in source files'); + + const original = await readFile(path.join(packageDir, 'material-symbols-rounded.woff2')); + const font = fontkit.create(original); + const codepointsByGlyph = new Map(font.characterSet.map(codepoint => [font.glyphForCodePoint(codepoint).id, codepoint])); + const sortedNames = [...names].sort(); + const iconCodepoints = sortedNames.map(name => { + const glyphs = font.layout(name).glyphs; + const codepoint = glyphs.length === 1 && codepointsByGlyph.get(glyphs[0].id); + if (!codepoint) throw new Error(`Material Symbols has no ligature/codepoint for ${name}`); + return String.fromCodePoint(codepoint); + }).join(''); + const subset = await subsetFont(original, sortedNames.join(' ') + iconCodepoints, { + targetFormat: 'woff2', + noLayoutClosure: true, + // Preserve the animated axis. All current icons use these fixed values. + variationAxes: { wght: 400, GRAD: 0, opsz: 24 }, + }); + const resultFont = fontkit.create(subset); + for (const name of sortedNames) { + const glyphs = resultFont.layout(name).glyphs; + if (glyphs.length !== 1 || !glyphs[0].id) throw new Error(`Subset lost icon ligature ${name}`); + } + const fill = resultFont.variationAxes.FILL; + if (!fill || fill.min !== 0 || fill.max !== 1) throw new Error('Subset lost animated FILL axis'); + const targetDir = path.join(root, 'internal', 'embedded', 'static', 'vendor', 'fonts', 'material-symbols'); + await mkdir(targetDir, { recursive: true }); + await writeFile(path.join(targetDir, 'material-symbols-rounded.woff2'), subset); + await writeFile(path.join(targetDir, 'subset.json'), JSON.stringify({ icons: sortedNames, axes: resultFont.variationAxes, originalBytes: original.length, subsetBytes: subset.length }, null, 2) + '\n'); + console.log(`Material Symbols: ${sortedNames.length} icons, ${original.length} → ${subset.length} bytes; FILL 0..1 retained.`); +} diff --git a/scripts/build-vendor-fonts.mjs b/scripts/build-vendor-fonts.mjs new file mode 100644 index 00000000..9b6ac9c7 --- /dev/null +++ b/scripts/build-vendor-fonts.mjs @@ -0,0 +1,89 @@ +import { cp, copyFile, mkdir, rm, stat } from "node:fs/promises"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import { buildMaterialSymbols } from './build-material-symbols.mjs'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const root = path.resolve(__dirname, ".."); +const fontsRoot = path.join(root, "internal", "embedded", "static", "vendor", "fonts"); + +async function mustExist(file) { + try { + await stat(file); + } catch { + console.error(`Missing required font asset: ${file}`); + console.error("Run `npm install` first."); + process.exit(1); + } +} + +async function copyDirClean(source, target) { + await mustExist(source); + await rm(target, { recursive: true, force: true }); + await mkdir(path.dirname(target), { recursive: true }); + await cp(source, target, { recursive: true }); + console.log(`Copied ${source} -> ${target}`); +} + +async function copyFileClean(source, target) { + await mustExist(source); + await mkdir(path.dirname(target), { recursive: true }); + await copyFile(source, target); + console.log(`Copied ${source} -> ${target}`); +} + +// All fonts are generated from npm dependencies; discard obsolete assets too. +await rm(fontsRoot, { recursive: true, force: true }); + +// Copy LXGW WenKai Screen +await copyDirClean( + path.join(root, "node_modules", "lxgw-wenkai-screen-web", "lxgwwenkaiscreen"), + path.join(root, "internal", "embedded", "static", "vendor", "fonts", "lxgw-wenkai-screen", "regular"), +); + +// Copy Maple Mono CN Regular +await copyDirClean( + path.join(root, "node_modules", "@chinese-fonts", "maple-mono-cn", "dist", "MapleMono-CN-Regular"), + path.join(root, "internal", "embedded", "static", "vendor", "fonts", "maple-mono-cn", "regular"), +); + +// Copy Maple Mono CN Italic +await copyDirClean( + path.join(root, "node_modules", "@chinese-fonts", "maple-mono-cn", "dist", "MapleMono-CN-Italic"), + path.join(root, "internal", "embedded", "static", "vendor", "fonts", "maple-mono-cn", "italic"), +); + +await buildMaterialSymbols(root); + +// Copy Fraunces (Italic) +await copyFileClean( + path.join(root, "node_modules", "@fontsource", "fraunces", "files", "fraunces-latin-400-italic.woff2"), + path.join(root, "internal", "embedded", "static", "vendor", "fonts", "fraunces", "fraunces-latin-400-italic.woff2"), +); + +// Rebuild the English body font assets, including real bold and italic faces. +const cormorantTarget = path.join(root, "internal", "embedded", "static", "vendor", "fonts", "cormorant-garamond"); +for (const weight of [400, 500, 600, 700]) { + for (const style of ["normal", "italic"]) { + const filename = `cormorant-garamond-latin-${weight}-${style}.woff2`; + await copyFileClean( + path.join(root, "node_modules", "@fontsource", "cormorant-garamond", "files", filename), + path.join(cormorantTarget, filename), + ); + } +} + +// Copy Noto Serif SC Variable CSS +await copyFileClean( + path.join(root, "node_modules", "@fontsource-variable", "noto-serif-sc", "wght.css"), + path.join(root, "internal", "embedded", "static", "vendor", "fonts", "noto-serif-sc", "wght.css"), +); + +// Copy Noto Serif SC Variable Files +await copyDirClean( + path.join(root, "node_modules", "@fontsource-variable", "noto-serif-sc", "files"), + path.join(root, "internal", "embedded", "static", "vendor", "fonts", "noto-serif-sc", "files"), +); + +console.log("Vendor fonts copied successfully."); diff --git a/scripts/build-vendor-katex.mjs b/scripts/build-vendor-katex.mjs new file mode 100644 index 00000000..9887e920 --- /dev/null +++ b/scripts/build-vendor-katex.mjs @@ -0,0 +1,47 @@ +import { cp, copyFile, mkdir, rm, stat } from 'node:fs/promises'; +import path from 'path'; +import { fileURLToPath } from 'url'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const root = path.resolve(__dirname, '..'); + +const katexSrc = path.join(root, 'node_modules', 'katex', 'dist'); +const katexDest = path.join(root, 'internal', 'embedded', 'static', 'vendor', 'katex'); + +const requiredFiles = [ + 'katex.js', + 'katex.min.css' +]; + +async function mustExist(file) { + try { + await stat(file); + } catch { + console.error(`[KaTeX] Missing required asset: ${file}`); + process.exit(1); + } +} + +async function main() { + // Preflight + for (const file of requiredFiles) { + await mustExist(path.join(katexSrc, file)); + } + await mustExist(path.join(katexSrc, 'fonts')); + + // Clean + await rm(katexDest, { recursive: true, force: true }); + await mkdir(katexDest, { recursive: true }); + + // Copy files + for (const file of requiredFiles) { + await copyFile(path.join(katexSrc, file), path.join(katexDest, file)); + } + // Copy fonts + await cp(path.join(katexSrc, 'fonts'), path.join(katexDest, 'fonts'), { recursive: true }); + + console.log('KaTeX vendor assets copied successfully.'); +} + +await main(); diff --git a/scripts/build-vendor.mjs b/scripts/build-vendor.mjs new file mode 100644 index 00000000..59aef405 --- /dev/null +++ b/scripts/build-vendor.mjs @@ -0,0 +1,7 @@ +import { rm } from 'node:fs/promises'; + +await import('./build-vendor-fonts.mjs'); +await import('./build-vendor-katex.mjs'); + +// Remove assets from the retired provider when rebuilding an existing checkout. +await rm(new URL('../internal/embedded/static/vendor/waline/', import.meta.url), { recursive: true, force: true }); diff --git a/scripts/check.sh b/scripts/check.sh new file mode 100755 index 00000000..be332676 --- /dev/null +++ b/scripts/check.sh @@ -0,0 +1,241 @@ +#!/usr/bin/env bash +set -euo pipefail + +echo "==> Phase A: Dependency and Frontend Validation" +if [ -z "${CI:-}" ]; then npm ci; fi +# The binary is exercised from an external vault, so resolve the repository's +# Playwright installation before changing the working directory. +export DAYBOOK_OG_PLAYWRIGHT_MODULE="${DAYBOOK_OG_PLAYWRIGHT_MODULE:-$(pwd)/node_modules/playwright/index.mjs}" +npm run typecheck +node scripts/graph-query-test.mjs +node --test test/graph-controls.test.mjs +npm run build:js +npm run build:vendor +npm run test:giscus +node scripts/graph-browser-test.mjs +node scripts/gallery-browser-test.mjs + +echo "==> Phase B: Go Validation" +go test ./... + +TEMP_DIR=$(mktemp -d) + +cleanup() { + if [[ -n "${SERVER_PID:-}" ]] && kill -0 "$SERVER_PID" 2>/dev/null; then + kill "$SERVER_PID" 2>/dev/null || true + wait "$SERVER_PID" 2>/dev/null || true + fi + rm -rf "${TEMP_DIR:-}" +} +trap cleanup EXIT INT TERM + +DAYBOOK_BIN="$TEMP_DIR/daybook-bin" +echo "==> Building Daybook binary to $DAYBOOK_BIN" +go build -o "$DAYBOOK_BIN" ./cmd/daybook +# Reuse this exact binary in the isolated browser fixtures below. +export DAYBOOK_TEST_BINARY="$DAYBOOK_BIN" + +echo "==> Phase C: Standalone Smoke Test" +VAULT_DIR="$TEMP_DIR/vault" +mkdir -p "$VAULT_DIR/vault/notes" +mkdir -p "$VAULT_DIR/vault/memos" +mkdir -p "$VAULT_DIR/vault/pages" + +cat << 'YAML' > "$VAULT_DIR/daybook.yaml" +site: + url: https://example.com +profile: + author: + logoText: Smoke Test Vault +YAML + +cat << 'ABOUT' > "$VAULT_DIR/vault/pages/about.md" +--- +title: "About" +--- +ABOUT + +cat << 'MD' > "$VAULT_DIR/vault/notes/smoke-test.md" +--- +date: "2026-08-24" +math: true +--- +Hello World from the smoke test! + +Related short entry: [[memos/smoke-memo]]. + +## Heading 1 +Line of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\nLine of text.\n\n + +## Heading 2 +This is a test of KaTeX inline $E=mc^2$ and display: +$$ +\int_0^\infty e^{-x^2} dx = \frac{\sqrt{\pi}}{2} +$$ + +More text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\nMore text.\n\n + +## Heading 3 +More content here. + +Even more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\nEven more text.\n\n + +## Heading 4 +End of document. +MD + +cat << 'MD' > "$VAULT_DIR/vault/memos/smoke-memo.md" +--- +date: "2026-10-02T18:30:00+08:00" +tags: [smoke, daily] +location: Riverside +--- +A short memo from the smoke test, linked to [[notes/smoke-test]]. + +- [x] Publish a short entry without a title property. +- [ ] Keep writing. +MD + +cat << 'MD' > "$VAULT_DIR/vault/memos/draft-memo.md" +--- +date: "2026-10-02" +draft: true +--- +Unpublished memo body must stay private. +MD + +cat << 'MD' > "$VAULT_DIR/vault/memos/invalid-memo.md" +--- +date: "not-a-date" +--- +Invalid memo body must not be published. +MD + +cd "$VAULT_DIR" +echo "==> Running daybook build in temporary vault" +"$DAYBOOK_BIN" build + +echo "==> Asserting generated assets" +if [ ! -f "public/index.html" ]; then + echo "ERROR: public/index.html is missing" + exit 1 +fi +node --input-type=module <<'JS' +import { readFileSync, existsSync } from 'node:fs'; +const manifest = JSON.parse(readFileSync('public/assets-manifest.json', 'utf8')); +for (const asset of [ + '/js/giscus-loader.js', + ...['default', 'warm'].flatMap(palette => ['light', 'dark'].map(theme => `/css/components/giscus-${palette}-${theme}.css`)), +]) { + if (!manifest[asset] || !existsSync(`public${manifest[asset]}`)) throw new Error(`Missing giscus asset: ${asset}`); +} +if (JSON.stringify(manifest).toLowerCase().includes('waline') || existsSync('public/vendor/waline')) { + throw new Error('Obsolete Waline assets were emitted'); +} +for (const route of ['memos', 'en_US/memos', 'memos/smoke-memo']) { + if (!existsSync(`public/${route}/index.html`)) throw new Error(`Missing memos page: ${route}`); +} +for (const route of ['notes/smoke-test', 'memos/smoke-memo']) { + const html = readFileSync(`public/${route}/index.html`, 'utf8'); + const og = html.match(/property="og:image" content="([^"]+)"/)?.[1]; + const twitter = html.match(/name="twitter:image" content="([^"]+)"/)?.[1]; + if (!og || og !== twitter || !og.startsWith(`https://example.com/generated/og/${route.split('/')[0]}/`)) { + throw new Error(`Missing absolute social image metadata: ${route}`); + } + const png = readFileSync(`public${new URL(og).pathname}`); + if (png.subarray(0, 8).toString('hex') !== '89504e470d0a1a0a' || png.readUInt32BE(16) !== 1200 || png.readUInt32BE(20) !== 630) { + throw new Error(`Invalid social PNG: ${route}`); + } +} +const timeline = readFileSync('public/memos/index.html', 'utf8'); +if (!timeline.includes('A short memo from the smoke test') || !timeline.includes('Riverside')) { + throw new Error('Memos timeline is missing body or location'); +} +const search = JSON.parse(readFileSync('public/search.json', 'utf8')); +const versions = search.flatMap(item => Object.values(item.versions)); +for (const url of ['/notes/smoke-test/', '/memos/smoke-memo/']) { + if (!versions.some(item => item.url === url)) throw new Error(`Search index is missing ${url}`); +} +if (versions.find(item => item.url === '/notes/smoke-test/').title !== 'smoke-test') { + throw new Error('Note title was not derived from its filename'); +} +const graph = JSON.parse(readFileSync('public/graph.json', 'utf8')); +const graphSearch = JSON.parse(readFileSync('public/graph-search.json', 'utf8')); +if (graph.version !== 1 || graphSearch.version !== 1 || !graphSearch.documents.some(doc => doc.id === '/notes/smoke-test/' && doc.text.includes('Hello World'))) { + throw new Error('Graph search data is missing published note text or its version'); +} +const note = graph.nodes.find(node => node.url === '/notes/smoke-test/'); +const memo = graph.nodes.find(node => node.url === '/memos/smoke-memo/'); +if (!note || !memo || !graph.links.some(link => + (link.source === note.id && link.target === memo.id) || + (link.source === memo.id && link.target === note.id))) { + throw new Error('Notes and memos are not connected in the shared graph'); +} +for (const slug of ['draft-memo', 'invalid-memo']) { + if (existsSync(`public/memos/${slug}/index.html`) || + JSON.stringify(search).includes(slug) || JSON.stringify(graph).includes(slug) || JSON.stringify(graphSearch).includes(slug) || timeline.includes(slug)) { + throw new Error(`Excluded memo leaked into published output: ${slug}`); + } +} +JS +if [ ! -f "public/vendor/katex/katex.js" ] || [ ! -f "public/vendor/katex/katex.min.css" ]; then + echo "ERROR: KaTeX assets are missing" + exit 1 +fi +if [ ! -d "public/vendor/fonts" ]; then + echo "ERROR: Vendor fonts are missing" + exit 1 +fi + +echo "==> Checking for source leaks in generated assets" +# Release scripts are minified; external source maps must not be shipped. +if find public -name "*.js.map" | grep -q .; then + echo "ERROR: Found external .js.map in generated JS" + exit 1 +fi + +echo "==> Starting Daybook dev server" +DAYBOOK_TEST_PORT="${DAYBOOK_TEST_PORT:-$(node --input-type=module -e 'import { createServer } from "node:net"; const server = createServer(); server.listen(0, "127.0.0.1", () => { process.stdout.write(String(server.address().port)); server.close(); });')}" +export DAYBOOK_TEST_URL="http://127.0.0.1:$DAYBOOK_TEST_PORT" +"$DAYBOOK_BIN" serve --addr "127.0.0.1:$DAYBOOK_TEST_PORT" & +SERVER_PID=$! + +max_attempts=20 +attempt=1 +ready=0 +while [ $attempt -le $max_attempts ]; do + sleep 0.2 + if ! kill -0 "$SERVER_PID" 2>/dev/null; then + echo "ERROR: Daybook test server failed to start on port $DAYBOOK_TEST_PORT." + echo "Choose an available DAYBOOK_TEST_PORT before running ./scripts/check.sh." + exit 1 + fi + + if curl -s -f "$DAYBOOK_TEST_URL/" > /dev/null; then + ready=1 + break + fi + attempt=$((attempt + 1)) +done + +sleep 0.2 +if ! kill -0 "$SERVER_PID" 2>/dev/null; then + echo "ERROR: Daybook test server exited unexpectedly." + exit 1 +fi + +if [ $ready -eq 0 ]; then + echo "ERROR: Daybook test server did not become ready in time." + exit 1 +fi + +echo "==> Phase D: Browser Runtime Regression Test" +cd - > /dev/null +node scripts/browser-test.mjs +node scripts/loading-feedback-timing-test.mjs +node scripts/navigation-loading-browser-test.mjs +node scripts/memos-browser-test.mjs +node scripts/article-actions-browser-test.mjs +node scripts/graph-static-test.mjs + +echo "==> All checks passed successfully!" diff --git a/scripts/gallery-browser-test.mjs b/scripts/gallery-browser-test.mjs new file mode 100644 index 00000000..e9b898a5 --- /dev/null +++ b/scripts/gallery-browser-test.mjs @@ -0,0 +1,285 @@ +import assert from 'node:assert/strict'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { chromium } from 'playwright'; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..'); +const browser = await chromium.launch({ headless: true }); +const context = await browser.newContext({ viewport: { width: 1200, height: 900 } }); +const page = await context.newPage(); +const errors = []; +page.on('pageerror', error => errors.push(error.message)); +const image = index => 'data:image/svg+xml,' + encodeURIComponent(`${index + 1}`); +const gallery = (count = 5, id = 'gallery') => ``; + +async function install() { + await page.setContent(`
    ${gallery()}
    Ordinary
    `); + for (const file of ['tokens.css', 'components.css', 'markdown.css']) { + await page.addStyleTag({ path: path.join(root, 'internal/embedded/static/css', file) }); + } + for (const file of ['lightbox.js', 'gallery.js']) { + await page.addScriptTag({ path: path.join(root, 'internal/embedded/static/js', file) }); + } + await page.waitForSelector('.is-carousel'); + await page.evaluate(() => Promise.all([...document.images].map(image => image.decode()))); +} + +async function geometry() { + return page.locator('#gallery').evaluate(element => { + const viewport = element.getBoundingClientRect(); + return { + width: element.clientWidth, scroll: element.scrollLeft, max: element.scrollWidth - element.clientWidth, + stage: element.querySelector('.md-carousel-stage').getBoundingClientRect().x - viewport.x, + items: [...element.querySelectorAll('.md-carousel-item')].map(item => { + const rect = item.getBoundingClientRect(); + return { x: rect.x - viewport.x, right: rect.right - viewport.x, width: rect.width, imageWidth: item.querySelector('img').width }; + }), + }; + }); +} +async function setProgress(progress) { + await page.locator('#gallery').evaluate((element, progress) => { + element.scrollLeft = (element.scrollWidth - element.clientWidth) * progress; + element.dispatchEvent(new Event('scroll')); + }, progress); +} +async function key(key) { + await page.locator('#gallery').focus(); + await page.keyboard.press(key); + await page.waitForTimeout(800); +} + +try { + await install(); + const initial = await geometry(); + assert(initial.items[0].width > initial.items[1].width && initial.items[1].width > initial.items[2].width, 'Start has large, medium and small image masks'); + const fullWidth = initial.items[0].imageWidth; + assert.equal(initial.items[0].imageWidth, initial.items[2].imageWidth, 'Masks crop an identical full-size image surface'); + for (let step = 0; step <= 32; step++) { + await setProgress(step / 32); + const current = await geometry(); + assert(Math.abs(current.stage) < 1, 'Native scrolling keeps the visual stage in place'); + const visible = current.items.filter(item => item.right > 1 && item.x < current.width - 1); + assert(visible.length >= 2, 'The viewport always offers more than one image'); + for (let i = 1; i < visible.length; i++) { + assert(Math.abs(visible[i].x - visible[i - 1].right - 12) < 1.5, 'Masks keep even gaps while interpolating'); + } + assert(current.items.every(item => item.imageWidth === fullWidth), 'Scroll masks do not squeeze or rescale images'); + if (step === 32) { + assert(Math.abs(current.items.at(-1).width - initial.items[0].width) < 1, 'The final image expands fully'); + assert(Math.abs(current.items.at(-1).right - current.width) < 1, 'End layout fills the viewport'); + } + } + + await key('Home'); + const samples = await page.locator('#gallery').evaluate(async element => { + const positions = [element.scrollLeft]; + const wheel = new WheelEvent('wheel', { deltaY: 400, bubbles: true, cancelable: true }); + element.dispatchEvent(wheel); + positions.push(element.scrollLeft); + for (let i = 0; i < 8; i++) { + await new Promise(requestAnimationFrame); + positions.push(element.scrollLeft); + } + return { positions, consumed: wheel.defaultPrevented }; + }); + assert(samples.consumed, 'A vertical wheel moves the gallery'); + assert.equal(samples.positions[0], samples.positions[1], 'Wheel input must not jump synchronously'); + assert(samples.positions.filter((value, index, values) => index && value > values[index - 1]).length > 3, 'Wheel movement spans multiple frames'); + await page.waitForTimeout(900); + const snapped = await geometry(); + assert(Math.abs(snapped.scroll - snapped.max / 4) < 1.5, 'Idle motion settles at an image keyline'); + + await key('End'); + const released = await page.locator('#gallery').evaluate(element => { + const events = [new WheelEvent('wheel', { deltaY: 100, cancelable: true }), new WheelEvent('wheel', { deltaY: -100, ctrlKey: true, cancelable: true })]; + events.forEach(event => element.dispatchEvent(event)); + return events.map(event => event.defaultPrevented); + }); + assert.deepEqual(released, [false, false], 'End-of-gallery scrolling and pinch zoom stay native'); + + await key('Home'); + const box = await page.locator('#gallery').boundingBox(); + await page.mouse.move(box.x + 180, box.y + 80); + await page.mouse.down(); + await page.mouse.move(box.x + 20, box.y + 80, { steps: 8 }); + await page.mouse.up(); + assert((await geometry()).scroll > 100, 'Mouse dragging scrolls the gallery'); + assert.equal(await page.locator('.zoom-img').count(), 0, 'Finishing a drag must not open the lightbox'); + await page.waitForTimeout(800); + await key('Home'); + + await page.mouse.move(box.x + box.width - 1, box.y + 80); + await page.mouse.down(); + await page.mouse.move(box.x + box.width + 30, box.y + 80); + await page.mouse.up(); + await page.mouse.move(box.x + 200, box.y + 80); + assert.equal(await page.locator('.is-dragging').count(), 0, 'Releasing outside the gallery cannot leave a pending drag'); + + // The masked medium image expands to its natural aspect ratio in the lightbox. + const medium = await page.locator('#gallery .md-carousel-item').nth(1).boundingBox(); + await page.mouse.click(medium.x + medium.width / 2, medium.y + 60); + await page.waitForSelector('.zoom-img'); + await page.waitForTimeout(400); + const zoom = await page.locator('.zoom-img').boundingBox(); + assert(Math.abs(zoom.width / zoom.height - 1.5) < 0.01, 'Gallery zoom restores the full, undistorted image'); + await page.keyboard.press('Escape'); + await page.waitForSelector('.zoom-img', { state: 'detached' }); + await key('Home'); + await page.locator('#gallery img').nth(1).evaluate(async image => { + image.src = 'data:image/svg+xml,' + encodeURIComponent(''); + await image.decode(); + }); + const portraitMask = await page.locator('#gallery .md-carousel-item').nth(1).boundingBox(); + await page.mouse.click(portraitMask.x + portraitMask.width / 2, portraitMask.y + 60); + await page.waitForSelector('.zoom-img'); + assert(await page.locator('.zoom-img').evaluate(image => parseFloat(image.style.width) > 300 && /inset\(0px? [1-9]/.test(image.style.clipPath)), 'Portrait zoom starts with the same full image surface and narrow mask'); + await page.waitForTimeout(400); + const portraitZoom = await page.locator('.zoom-img').boundingBox(); + assert(Math.abs(portraitZoom.width / portraitZoom.height - 0.5) < 0.01, 'Portrait photos also zoom to their natural aspect ratio'); + await page.keyboard.press('Escape'); + await page.waitForSelector('.zoom-img', { state: 'detached' }); + await page.locator('#gallery img').first().focus(); + await page.keyboard.press('Enter'); + await page.waitForSelector('.zoom-overlay[aria-busy="false"]'); + assert.equal(await page.locator('.zoom-status').textContent(), '1 / 6'); + assert(await page.locator('main').evaluate(node => node.inert), 'The image viewer makes the article inert'); + await page.locator('.zoom-next').click(); + await page.waitForSelector('.zoom-overlay[aria-busy="false"]'); + assert.equal(await page.locator('.zoom-status').textContent(), '2 / 6'); + await page.keyboard.press('ArrowRight'); + await page.waitForSelector('.zoom-overlay[aria-busy="false"]'); + assert.equal(await page.locator('.zoom-status').textContent(), '3 / 6'); + await page.locator('.zoom-previous').click(); + await page.waitForSelector('.zoom-overlay[aria-busy="false"]'); + assert.equal(await page.locator('.zoom-status').textContent(), '2 / 6'); + await page.keyboard.press('End'); + await page.waitForSelector('.zoom-overlay[aria-busy="false"]'); + assert(await page.locator('.zoom-next').isDisabled(), 'The final photo disables next'); + await page.keyboard.press('Home'); + await page.waitForSelector('.zoom-overlay[aria-busy="false"]'); + assert(await page.locator('.zoom-previous').isDisabled(), 'The first photo disables previous'); + await page.locator('.zoom-img').dblclick(); + assert.equal(await page.locator('.zoom-toggle').getAttribute('aria-pressed'), 'true'); + const zoomed = await page.locator('.zoom-img').boundingBox(); + await page.mouse.move(600, 450); + await page.mouse.wheel(0, -100); + await page.waitForFunction(width => document.querySelector('.zoom-img').getBoundingClientRect().width > width, zoomed.width); + await page.mouse.down(); await page.mouse.move(680, 490, { steps: 4 }); await page.mouse.up(); + assert(await page.locator('.zoom-img').evaluate(img => !img.style.transform.startsWith('translate3d(0px, 0px,')), 'A zoomed image can be dragged'); + await page.keyboard.press('0'); + assert.equal(await page.locator('.zoom-toggle').getAttribute('aria-pressed'), 'false'); + for (let i = 0; i < 6; i++) { + await page.keyboard.press('Tab'); + assert(await page.locator('.zoom-overlay').evaluate(node => node.contains(document.activeElement)), 'Tab stays in the image viewer'); + } + await page.keyboard.press('Escape'); + await page.waitForSelector('.zoom-img', { state: 'detached' }); + assert.equal(await page.locator('main').evaluate(node => node.inert), false, 'Closing restores article interactions'); + assert(await page.locator('#gallery img').first().evaluate(node => node === document.activeElement), 'Closing restores the original focus'); + await page.locator('#ordinary img').click(); + await page.waitForSelector('.zoom-img'); + await page.waitForTimeout(400); + await page.keyboard.press('Escape'); + await page.waitForSelector('.zoom-img', { state: 'detached' }); + + await page.evaluate(() => { + for (let i = 0; i < 3; i++) document.dispatchEvent(new Event('daybook:page-load')); + document.documentElement.lang = 'zh-CN'; + document.dispatchEvent(new Event('daybook:lang-change')); + }); + assert.equal(await page.locator('#gallery .md-carousel-track').count(), 1, 'Repeated page events do not duplicate the carousel'); + assert.equal(await page.locator('#gallery').getAttribute('aria-label'), '图片画廊'); + await key('End'); + await page.setViewportSize({ width: 390, height: 844 }); + await page.waitForTimeout(100); + const narrow = await geometry(); + assert(Math.abs(narrow.scroll - narrow.max) < 2, 'Resizing preserves the selected image'); + assert(narrow.width < 390 && Math.abs(narrow.items.at(-1).right - narrow.width) < 1.5, 'Narrow layout stays contained'); + + await page.emulateMedia({ reducedMotion: 'reduce' }); + await page.locator('#gallery').focus(); + await page.keyboard.press('Home'); + assert.equal((await geometry()).scroll, 0, 'Reduced motion makes navigation immediate'); + await page.emulateMedia({ reducedMotion: 'no-preference' }); + await page.evaluate(() => document.documentElement.dataset.reducedMotion = 'true'); + await page.keyboard.press('End'); + assert(Math.abs((await geometry()).scroll - (await geometry()).max) < 1, 'The blog motion preference is honored too'); + + // Simulate a real content swap while animation is active, including short galleries. + await page.evaluate(markup => { + delete document.documentElement.dataset.reducedMotion; + document.querySelector('#gallery').dispatchEvent(new WheelEvent('wheel', { deltaY: -500, cancelable: true })); + window.__oldGallery = document.querySelector('#gallery'); + document.dispatchEvent(new Event('daybook:before-swap')); + document.querySelector('main').innerHTML = markup; + document.dispatchEvent(new Event('daybook:page-load')); + }, gallery(5) + gallery(1, 'single') + gallery(2, 'pair') + ''); + const oldScroll = await page.evaluate(() => window.__oldGallery.scrollLeft); + await page.waitForTimeout(250); + assert.equal(await page.evaluate(() => window.__oldGallery.scrollLeft), oldScroll, 'Detached carousels stop their animation'); + assert.equal(await page.locator('.md-carousel-track').count(), 3, 'All new galleries initialize once'); + assert.equal(await page.locator('#mixed.is-carousel').count(), 0, 'Mixed content keeps a readable native fallback'); + const short = await page.evaluate(() => ['single', 'pair'].map(id => { + const element = document.getElementById(id); + const cards = [...element.querySelectorAll('.md-carousel-item')]; + return { width: element.clientWidth, max: element.scrollWidth - element.clientWidth, widths: cards.map(card => card.getBoundingClientRect().width) }; + })); + assert.equal(short[0].max, 0, 'A single image needs no scrolling'); + assert(Math.abs(short[0].widths[0] - short[0].width) < 1, 'A single image fills its available space'); + assert(Math.abs(short[1].widths.reduce((a, b) => a + b, 8) - short[1].width) < 1, 'Two-image galleries have no empty space'); + assert.deepEqual(errors, []); + console.log('Gallery carousel browser tests passed: masks, continuity, wheel, drag, keyboard, zoom, resize, motion preferences and SPA cleanup.'); + + const touchContext = await browser.newContext({ viewport: { width: 390, height: 844 }, isMobile: true, hasTouch: true }); + const touch = await touchContext.newPage(); + await touch.setContent(`
    ${gallery()}
    `); + for (const file of ['tokens.css', 'markdown.css']) await touch.addStyleTag({ path: path.join(root, 'internal/embedded/static/css', file) }); + await touch.addScriptTag({ path: path.join(root, 'internal/embedded/static/js/gallery.js') }); + const session = await touchContext.newCDPSession(touch); + await session.send('Input.dispatchTouchEvent', { type: 'touchStart', touchPoints: [{ x: 300, y: 130 }] }); + for (let x = 280; x >= 100; x -= 20) { + await session.send('Input.dispatchTouchEvent', { type: 'touchMove', touchPoints: [{ x, y: 130 }] }); + await touch.waitForTimeout(16); + } + await session.send('Input.dispatchTouchEvent', { type: 'touchEnd', touchPoints: [] }); + await touch.waitForTimeout(900); + assert(await touch.locator('#gallery').evaluate(element => element.scrollLeft > 100), 'Touch swipes retain native scrolling and momentum'); + assert.equal(await touch.evaluate(() => window.scrollY), 0, 'Horizontal swipes do not move the article'); + await session.send('Input.dispatchTouchEvent', { type: 'touchStart', touchPoints: [{ x: 180, y: 210 }] }); + for (let y = 190; y >= 70; y -= 20) { + await session.send('Input.dispatchTouchEvent', { type: 'touchMove', touchPoints: [{ x: 180, y }] }); + await touch.waitForTimeout(16); + } + await session.send('Input.dispatchTouchEvent', { type: 'touchEnd', touchPoints: [] }); + await touch.waitForTimeout(300); + assert(await touch.evaluate(() => window.scrollY > 50), 'Vertical swipes over the gallery can still scroll the article'); + console.log('Gallery touch swipe passed.'); + const viewer = await touchContext.newPage(); + await viewer.setContent(`
    `); + for (const file of ['tokens.css', 'components.css']) await viewer.addStyleTag({ path: path.join(root, 'internal/embedded/static/css', file) }); + await viewer.addScriptTag({ path: path.join(root, 'internal/embedded/static/js/lightbox.js') }); + await viewer.evaluate(() => Promise.all([...document.images].map(img => img.decode()))); + await viewer.locator('main img').first().tap(); + await viewer.waitForSelector('.zoom-overlay[aria-busy="false"]'); + const viewerSession = await touchContext.newCDPSession(viewer); + const photo = await viewer.locator('.zoom-img').boundingBox(); + const swipeY = photo.y + photo.height / 2; + await viewerSession.send('Input.dispatchTouchEvent', { type: 'touchStart', touchPoints: [{ x: 290, y: swipeY }] }); + for (let x = 270; x >= 90; x -= 30) await viewerSession.send('Input.dispatchTouchEvent', { type: 'touchMove', touchPoints: [{ x, y: swipeY }] }); + await viewerSession.send('Input.dispatchTouchEvent', { type: 'touchEnd', touchPoints: [] }); + await viewer.waitForFunction(() => document.querySelector('.zoom-status').textContent === '2 / 2'); + await viewer.waitForSelector('.zoom-overlay[aria-busy="false"]'); + await viewer.evaluate(() => document.dispatchEvent(new Event('daybook:before-swap'))); + assert.equal(await viewer.locator('.zoom-img').count(), 0, 'SPA navigation removes the viewer'); + assert.equal(await viewer.locator('main').evaluate(node => node.inert), false); + assert.equal(await viewer.evaluate(() => document.body.style.overflow), ''); + await viewer.locator('main img').first().tap(); + await viewer.waitForSelector('.zoom-overlay[aria-busy="false"]'); + await viewer.locator('.zoom-close').tap(); + await viewer.waitForSelector('.zoom-img', { state: 'detached' }); + console.log('Lightbox touch swipe, close button and SPA cleanup passed.'); + await touchContext.close(); +} finally { + await browser.close(); +} diff --git a/scripts/giscus-browser-test.mjs b/scripts/giscus-browser-test.mjs new file mode 100644 index 00000000..f7ea68e5 --- /dev/null +++ b/scripts/giscus-browser-test.mjs @@ -0,0 +1,307 @@ +import assert from 'node:assert/strict'; +import { createServer } from 'node:http'; +import { readFile } from 'node:fs/promises'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { build } from 'esbuild'; +import { chromium } from 'playwright'; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..'); +const { outputFiles } = await build({ + entryPoints: [path.join(root, 'assets/ts/giscus-loader.ts')], + bundle: true, format: 'esm', target: 'es2020', write: false, +}); +const stylesheet = await readFile(path.join(root, 'internal/embedded/static/css/pages/note.css'), 'utf8'); +const widget = term => `
    `; +const server = createServer((request, response) => { + if (request.url === '/loader.js') { + response.setHeader('Content-Type', 'text/javascript'); + response.end(outputFiles[0].text); + return; + } + const url = new URL(request.url, 'http://localhost'); + const term = url.pathname.replace(/^\/en_US(?=\/)/, ''); + const lang = url.searchParams.get('ui') === 'en_US' || url.pathname.startsWith('/en_US/') ? 'en-US' : 'zh-CN'; + response.setHeader('Content-Type', 'text/html'); + response.end(`
    ${widget(term)}
    `); +}); +await new Promise(resolve => server.listen(0, '127.0.0.1', resolve)); +const base = `http://127.0.0.1:${server.address().port}`; +const browser = await chromium.launch({ headless: true }); +const context = await browser.newContext({ viewport: { width: 1000, height: 700 } }); +const page = await context.newPage(); +const errors = []; +const requests = []; +page.on('pageerror', error => errors.push(error.message)); +page.on('request', request => { + if (new URL(request.url()).origin === 'https://giscus.app') requests.push(request.url()); +}); +let delayNextWidget = false; +let delayNextHydration = false; +let releaseWidget = null; +await context.route('https://giscus.app/**', async route => { + const hydrationDelay = delayNextHydration ? 100 : 0; + delayNextHydration = false; + if (delayNextWidget) { + delayNextWidget = false; + await new Promise(resolve => { releaseWidget = resolve; }); + } + try { + await route.fulfill({ contentType: 'text/html', body: `Mock comments` }); + } catch (error) { + // A cancelled iframe navigation may finish after its page has left. + if (!/closed|cancelled|disposed/i.test(error.message)) throw error; + } +}); +await page.addInitScript(() => { + window.observers = { intersection: [], mutation: [] }; + for (const [name, key] of [['IntersectionObserver', 'intersection'], ['MutationObserver', 'mutation']]) { + const Native = window[name]; + window[name] = class extends Native { + constructor(callback, options) { + super(callback, options); + this.record = { callback, observer: this, disconnected: false }; + window.observers[key].push(this.record); + } + disconnect() { + this.record.disconnected = true; + super.disconnect(); + } + observe(target, options) { + this.record.widget = key === 'mutation' + ? target === document.documentElement && options?.attributeFilter?.includes('data-theme') + : target.id === 'giscus'; + super.observe(target, options); + } + }; + } +}); + +const frame = () => page.frames().find(candidate => candidate.url().startsWith('https://giscus.app/')); +const activeObservers = () => page.evaluate(() => Object.fromEntries(Object.entries(window.observers).map(([key, entries]) => [key, entries.filter(entry => entry.widget && !entry.disconnected).length]))); +async function mounted() { + await page.waitForSelector('#giscus iframe'); + await page.waitForFunction(() => !document.querySelector('#giscus iframe').classList.contains('giscus-frame--loading')); + await page.waitForFunction(() => document.querySelector('#giscus iframe').style.height === '320px'); +} +async function pendingWidget() { + const deadline = Date.now() + 5000; + while (!releaseWidget && Date.now() < deadline) await new Promise(resolve => setTimeout(resolve, 10)); + assert(releaseWidget, 'The delayed widget request started'); +} +async function switchPage(term, route = term, visible = false) { + await page.evaluate(({ markup, route, visible }) => { + window.previousContainer = document.getElementById('giscus'); + window.previousFrame = document.querySelector('#giscus iframe'); + document.dispatchEvent(new Event('daybook:before-swap')); + document.querySelector('main').innerHTML = `
    ${markup}`; + history.pushState(history.state, '', route); + window.scrollTo(0, 0); + document.dispatchEvent(new Event('daybook:page-load')); + }, { markup: widget(term), route, visible }); +} + +try { + await page.goto(`${base}/notes/first/?ui=en_US&giscus=oauth-token#heading`, { waitUntil: 'networkidle' }); + assert.equal(requests.length, 0, 'Offscreen comments make no third-party requests'); + assert.equal(await page.locator('#giscus iframe').count(), 0, 'The lazy widget is absent until visible'); + assert.equal(await page.evaluate(() => localStorage.getItem('giscus-session')), JSON.stringify('oauth-token')); + assert.equal(await page.evaluate(() => history.state.testState), 42, 'OAuth cleanup preserves router state'); + assert(!page.url().includes('giscus=')); + assert(page.url().endsWith('?ui=en_US#heading'), 'OAuth cleanup preserves interface language and reader fragment'); + + await page.locator('#giscus').scrollIntoViewIfNeeded(); + await mounted(); + assert.equal(requests.length, 1); + const params = new URL(requests[0]).searchParams; + assert.equal(params.get('repo'), 'StatIndet/giscus'); + assert.equal(params.get('repoId'), 'R_kgDOU4xqeQ'); + assert.equal(params.get('category'), 'Announcements'); + assert.equal(params.get('categoryId'), 'DIC_kwDOU4xqec4DG4Zb'); + assert.equal(params.get('term'), '/notes/first/'); + assert.equal(params.get('strict'), '1'); + assert.equal(params.get('reactionsEnabled'), '0'); + assert.equal(params.get('emitMetadata'), '0'); + assert.equal(params.get('inputPosition'), 'top'); + assert.equal(params.get('session'), 'oauth-token'); + assert.equal(params.get('origin'), `${base}/notes/first/?ui=en_US#giscus`); + assert.equal(params.get('theme'), `${base}/css/components/giscus-default-light.123456.css`); + assert.equal(new URL(requests[0]).pathname, '/en/widget'); + assert.equal(await page.locator('#giscus iframe').getAttribute('allow'), 'clipboard-write; local-network-access; loopback-network', 'Loopback previews delegate access to their local themes'); + assert(await page.locator('#giscus').evaluate(container => Math.abs(container.clientWidth - container.querySelector('iframe').getBoundingClientRect().width) < 1), 'The frame fills the comments container'); + await page.evaluate(() => { window.initialFrame = document.querySelector('#giscus iframe'); }); + + await page.evaluate(() => { + document.documentElement.dataset.theme = 'dark'; + document.documentElement.dataset.palette = 'warm'; + document.documentElement.lang = 'zh-CN'; + for (let i = 0; i < 4; i++) document.dispatchEvent(new Event('daybook:settings-change')); + document.dispatchEvent(new Event('daybook:lang-change')); + }); + await frame().waitForFunction(() => window.received.at(-1)?.lang === 'zh-CN' && window.received.at(-1)?.theme.includes('warm-dark')); + assert.deepEqual(await frame().evaluate(() => window.received.at(-1)), { theme: `${base}/css/components/giscus-warm-dark.123456.css`, lang: 'zh-CN' }); + assert.equal(await page.locator('#giscus iframe').getAttribute('title'), '评论'); + assert(await page.evaluate(() => window.initialFrame === document.querySelector('#giscus iframe')), 'Appearance changes preserve iframe identity'); + assert.equal(requests.length, 1, 'Appearance and unrelated settings do not reload discussions'); + + await page.evaluate(() => { + const ownFrame = document.querySelector('#giscus iframe'); + for (const event of [ + new MessageEvent('message', { origin: 'https://evil.example', source: ownFrame.contentWindow, data: { giscus: { resizeHeight: 999, signOut: true } } }), + new MessageEvent('message', { origin: 'https://giscus.app', source: window, data: { giscus: { resizeHeight: 999, signOut: true } } }), + new MessageEvent('message', { origin: 'https://giscus.app', source: ownFrame.contentWindow, data: null }), + new MessageEvent('message', { origin: 'https://giscus.app', source: ownFrame.contentWindow, data: { giscus: { resizeHeight: '999' } } }), + ]) window.dispatchEvent(event); + }); + assert.equal(await page.locator('#giscus iframe').evaluate(element => element.style.height), '320px'); + assert.equal(await page.evaluate(() => localStorage.getItem('giscus-session')), JSON.stringify('oauth-token'), 'Forged messages cannot clear authentication'); + await frame().evaluate(() => parent.postMessage({ giscus: { resizeHeight: 420.2 } }, new URL(new URL(location.href).searchParams.get('origin')).origin)); + await page.waitForFunction(() => document.querySelector('#giscus iframe').style.height === '421px'); + await frame().evaluate(() => parent.postMessage({ giscus: { signOut: true } }, new URL(new URL(location.href).searchParams.get('origin')).origin)); + await mounted(); + assert.equal(await page.evaluate(() => localStorage.getItem('giscus-session')), null); + assert.equal(new URL(requests.at(-1)).searchParams.get('session'), ''); + assert(await page.evaluate(() => window.initialFrame === document.querySelector('#giscus iframe')), 'Logout reloads the current iframe'); + + await switchPage('/notes/pending/'); + assert.deepEqual(await activeObservers(), { intersection: 1, mutation: 1 }, 'A content swap cleans up the old controller'); + const pendingRequestCount = requests.length; + await page.evaluate(() => { + window.pendingContainer = document.getElementById('giscus'); + window.pendingIntersection = window.observers.intersection.at(-1); + document.documentElement.dataset.commentsDisabled = 'true'; + document.dispatchEvent(new Event('daybook:settings-change')); + window.pendingIntersection.callback([{ isIntersecting: true, target: window.pendingContainer }]); + }); + assert.deepEqual(await activeObservers(), { intersection: 0, mutation: 0 }, 'Disabling comments disconnects all widget observers'); + assert.equal(await page.locator('#giscus iframe').count(), 0, 'A stale visibility callback cannot bypass the preference'); + assert.equal(requests.length, pendingRequestCount); + await page.evaluate(() => { + delete document.documentElement.dataset.commentsDisabled; + document.dispatchEvent(new Event('daybook:settings-change')); + for (let i = 0; i < 4; i++) document.dispatchEvent(new Event('daybook:page-load')); + }); + assert.deepEqual(await activeObservers(), { intersection: 1, mutation: 1 }); + await switchPage('/notes/translated/', '/en_US/notes/translated/'); + await page.evaluate(() => { + window.pendingIntersection.callback([{ isIntersecting: true, target: window.pendingContainer }]); + document.documentElement.lang = 'en-US'; + }); + assert.equal(requests.length, pendingRequestCount, 'A stale observer cannot mount the previous article'); + await page.locator('#giscus').scrollIntoViewIfNeeded(); + await mounted(); + assert.equal(new URL(requests.at(-1)).searchParams.get('term'), '/notes/translated/', 'Translated UI routes use the backend comment path'); + assert.equal(await page.locator('#giscus iframe').count(), 1, 'Repeated SPA events never duplicate the iframe'); + await page.evaluate(() => { + document.dispatchEvent(new Event('daybook:before-swap')); + document.documentElement.dataset.commentsDisabled = 'true'; + document.dispatchEvent(new Event('daybook:settings-change')); + delete document.documentElement.dataset.commentsDisabled; + document.dispatchEvent(new Event('daybook:settings-change')); + document.querySelector('main').innerHTML = '

    Index without comments

    '; + history.pushState(history.state, '', '/notes/'); + document.dispatchEvent(new Event('daybook:page-load')); + }); + assert.deepEqual(await activeObservers(), { intersection: 0, mutation: 0 }); + assert.equal(await page.locator('iframe').count(), 0, 'Leaving articles releases the iframe'); + + delayNextWidget = true; + delayNextHydration = true; + await switchPage('/notes/loading/', '/notes/loading/', true); + await page.waitForFunction(() => !!document.querySelector('#giscus iframe')); + await pendingWidget(); + await page.evaluate(() => { + document.documentElement.dataset.theme = 'light'; + document.documentElement.dataset.palette = 'default'; + document.documentElement.lang = 'zh-CN'; + }); + releaseWidget(); + releaseWidget = null; + await mounted(); + await frame().waitForFunction(() => window.received.at(-1)?.theme.includes('default-light') && window.received.at(-1)?.lang === 'zh-CN'); + assert.equal(new URL(requests.at(-1)).pathname, '/en/widget', 'The test changed language while the original request was loading'); + assert(await page.evaluate(() => document.querySelector('#giscus iframe').title === '评论'), 'The delayed widget receives the newest appearance'); + + delayNextWidget = true; + await switchPage('/notes/leaving-during-load/', '/notes/leaving-during-load/', true); + await pendingWidget(); + await page.evaluate(() => { + window.loadingFrame = document.querySelector('#giscus iframe'); + window.loadingWindow = window.loadingFrame.contentWindow; + }); + await switchPage('/notes/replacement/', '/notes/replacement/?giscus=replacement-session', true); + await mounted(); + releaseWidget(); + releaseWidget = null; + await page.evaluate(() => { + window.loadingFrame.dispatchEvent(new Event('load')); + window.dispatchEvent(new MessageEvent('message', { + origin: 'https://giscus.app', source: window.loadingWindow, + data: { giscus: { error: 'State has expired', resizeHeight: 999 } }, + })); + }); + assert(await page.evaluate(() => !window.loadingFrame.isConnected && window.loadingFrame.classList.contains('giscus-frame--loading')), 'Leaving aborts the unfinished load listener'); + assert.equal(await page.evaluate(() => localStorage.getItem('giscus-session')), JSON.stringify('replacement-session'), 'Messages from a discarded iframe cannot clear the current session'); + assert.equal(new URL(await page.locator('#giscus iframe').getAttribute('src')).searchParams.get('term'), '/notes/replacement/'); + assert.equal(await page.locator('#giscus iframe').count(), 1); + + await page.evaluate(() => localStorage.setItem('daybook:user-settings', JSON.stringify({ disableComments: true }))); + const disabledRequests = requests.length; + await page.goto(`${base}/notes/disabled/`, { waitUntil: 'networkidle' }); + await page.locator('#giscus').evaluate(element => element.scrollIntoView()); + assert.equal(await page.locator('#giscus iframe').count(), 0); + assert.equal(requests.length, disabledRequests, 'The saved disable-comments preference prevents all giscus requests'); + assert.deepEqual(await activeObservers(), { intersection: 0, mutation: 0 }); + + await page.evaluate(() => { + localStorage.removeItem('daybook:user-settings'); + localStorage.setItem('giscus-session', '{bad-json'); + }); + await page.goto(`${base}/notes/invalid-session/`, { waitUntil: 'networkidle' }); + assert.equal(await page.evaluate(() => localStorage.getItem('giscus-session')), null, 'Malformed saved sessions are cleared safely'); + await page.locator('#giscus').scrollIntoViewIfNeeded(); + await mounted(); + assert.equal(new URL(requests.at(-1)).searchParams.get('session'), ''); + + await page.goto(`${base}/notes/expired-session/?giscus=expired-session`, { waitUntil: 'networkidle' }); + await page.locator('#giscus').scrollIntoViewIfNeeded(); + await mounted(); + await frame().evaluate(() => parent.postMessage({ giscus: { error: 'State has expired' } }, new URL(new URL(location.href).searchParams.get('origin')).origin)); + await mounted(); + assert.equal(await page.evaluate(() => localStorage.getItem('giscus-session')), null, 'Expired authentication is cleared and retried anonymously'); + assert.equal(new URL(requests.at(-1)).searchParams.get('session'), ''); + + await page.addInitScript(() => { + for (const method of ['getItem', 'setItem', 'removeItem']) Storage.prototype[method] = () => { throw new Error('Storage unavailable'); }; + }); + await page.goto(`${base}/notes/private-storage/?giscus=memory-session`, { waitUntil: 'networkidle' }); + await page.locator('#giscus').scrollIntoViewIfNeeded(); + await mounted(); + assert.equal(new URL(requests.at(-1)).searchParams.get('session'), 'memory-session', 'OAuth still works when browser storage is unavailable'); + assert(!page.url().includes('giscus=')); + + await context.route('https://daybook.example/**', async route => { + const isModule = new URL(route.request().url()).pathname === '/loader.js'; + await route.fulfill({ + contentType: isModule ? 'text/javascript' : 'text/html', + body: isModule ? outputFiles[0].text : await (await fetch(`${base}/notes/public/`)).text(), + }); + }); + await page.goto('https://daybook.example/notes/public/', { waitUntil: 'networkidle' }); + await page.locator('#giscus').scrollIntoViewIfNeeded(); + await mounted(); + assert.equal(await page.locator('#giscus iframe').getAttribute('allow'), 'clipboard-write', 'Public sites do not delegate local-network permissions'); + assert.deepEqual(errors, []); + console.log('Giscus browser tests passed: lazy loading, OAuth, strict mapping, iframe sizing, themes, locale, trusted messages, loading races, preferences and SPA cleanup.'); +} finally { + releaseWidget?.(); + await browser.close(); + await new Promise(resolve => server.close(resolve)); +} diff --git a/scripts/graph-browser-test.mjs b/scripts/graph-browser-test.mjs new file mode 100644 index 00000000..d918aa01 --- /dev/null +++ b/scripts/graph-browser-test.mjs @@ -0,0 +1,451 @@ +import assert from 'node:assert/strict'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { chromium } from 'playwright'; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..'); +const graphScript = process.argv[2] || path.join(root, 'internal/embedded/static/js/graph.js'); +const browser = await chromium.launch({ headless: true }); +const errors = []; + +function fixture(count = 53, missing = true) { + const connected = count === 53 ? 48 : Math.floor(count * .9); + const notes = Array.from({ length: count }, (_, i) => ({ + id: `note-${i}`, title: `Node ${i}`, exists: true, degree: i < connected ? 2 : 0, + file: `Note ${String(i).padStart(2, '0')}.md`, path: `notes/${i % 2 ? 'Odd' : 'Even'}/Note ${String(i).padStart(2, '0')}.md`, + date: `2026-01-${i < 2 ? '01' : i < 4 ? '02' : '03'}`, + tags: [{ id: `tag-${i % 6}`, title: `Tag ${i % 6}` }], + attachments: [{ id: `attachment-${i % 8}`, title: `File ${i % 8}`, file: `File ${i % 8}.png`, path: `files/${i % 8}.png`, url: `/files/${i % 8}.png` }], + })); + const links = notes.slice(0, connected).map((node, i) => ({ source: node.id, target: `note-${(i + 1) % connected}` })); + links.push({ source: 'note-1', target: 'note-0' }); + const nodes = [...notes]; + if (missing) { + nodes.push({ id: 'missing', title: 'Unwritten', file: 'Unwritten.md', path: 'notes/Unwritten.md', exists: false, degree: 1 }); + links.push({ source: 'note-2', target: 'missing' }); + } + return { + graph: { version: 1, nodes, links, meta: { layoutDiameter: Math.max(7, Math.sqrt(count)), nodeCount: nodes.length, linkCount: links.length } }, + index: { version: 1, documents: notes.map((note, i) => ({ + id: note.id, text: i === 2 ? 'Needle content\nSecond line' : 'Ordinary published content', + lines: i === 2 ? ['Needle content', 'Second line'] : ['Ordinary published content'], + sections: i === 2 ? ['Needle content\nSecond line'] : ['Ordinary published content'], properties: { status: i === 2 ? 'done' : 'open' }, + })) }, + indexRequests: 0, failIndex: false, + }; +} + +async function openGraph(data, { reducedMotion = 'no-preference', clock = false, viewport = { width: 1200, height: 850 }, storageUnavailable = false } = {}) { + const page = await browser.newPage({ viewport, reducedMotion }); + page.on('pageerror', error => errors.push(error.message)); + if (clock) { + await page.clock.install({ time: new Date('2026-01-01T00:00:00Z') }); + await page.clock.pauseAt(new Date('2026-01-01T00:00:01Z')); + } + if (storageUnavailable) await page.addInitScript(() => { + for (const name of ['getItem', 'setItem']) Storage.prototype[name] = () => { throw new DOMException('Storage unavailable', 'SecurityError'); }; + }); + await page.route('https://daybook.test/**', route => { + const pathname = new URL(route.request().url()).pathname; + if (pathname.endsWith('/graph.json')) return route.fulfill({ json: data.graph }); + if (pathname.endsWith('/graph-search.json')) { + data.indexRequests++; + return data.failIndex ? route.fulfill({ status: 503, body: 'Temporarily unavailable' }) : route.fulfill({ json: data.index }); + } + return route.fulfill({ contentType: 'text/html', body: `
    ` }); + }); + await page.goto('https://daybook.test/graph/'); + await page.addStyleTag({ path: path.join(root, 'internal/embedded/static/css/pages/graph.css') }); + await page.addScriptTag({ path: path.join(root, 'internal/embedded/static/js/vendor/d3.min.js') }); + await page.evaluate(() => { + window.__graphSimulations = []; + const original = window.d3.forceSimulation; + window.d3.forceSimulation = (...args) => { + const simulation = original(...args); + const record = { simulation, ticks: 0 }; + simulation.on('tick.regression', () => record.ticks++); + window.__graphSimulations.push(record); + return simulation; + }; + }); + await page.addScriptTag({ path: graphScript }); + await page.evaluate(() => window.DaybookGraph.init(document)); + return page; +} +const click = (page, selector) => page.locator(selector).evaluate(element => element.click()); +const ids = page => page.evaluate(() => window.__graphNodes.data().map(node => node.id).sort()); +const setQuery = (page, value) => page.locator('#graph-search-input').evaluate((input, value) => { input.value = value; input.dispatchEvent(new Event('input', { bubbles: true })); }, value); +const waitIDs = (page, expected) => page.waitForFunction(expected => JSON.stringify(window.__graphNodes.data().map(node => node.id).sort()) === JSON.stringify([...expected].sort()), expected); +const setValue = (page, selector, value) => page.locator(selector).evaluate((input, value) => { input.value = String(value); input.dispatchEvent(new Event('input', { bubbles: true })); }, value); + +try { + const data = fixture(); + const page = await openGraph(data); + await page.waitForSelector('.graph-node'); + await page.waitForFunction(() => window.__graphSimulations[0].simulation.alpha() < 0.03); + assert.equal(await page.locator('#graph-settings-panel').isHidden(), true, 'Settings start collapsed'); + assert.equal(data.indexRequests, 0, 'No content index fetch for an empty query'); + assert.equal(await page.locator('#graph-settings-panel #graph-search-input, #graph-settings-panel .graph-help').count(), 0, 'Panel has no search field or query syntax'); + assert.deepEqual(await page.locator('.graph-toolbar > button').evaluateAll(buttons => buttons.filter(button => !button.hidden).map(button => button.id)), ['graph-search-btn', 'graph-orphan-btn', 'graph-tags-btn', 'graph-attachments-btn', 'graph-existing-btn', 'graph-play', 'graph-reset', 'graph-settings-btn']); + await page.locator('#graph-search-btn').click(); + assert.equal(await page.locator('#graph-search-input').isVisible(), true); + assert.equal(await page.locator('#graph-search-input').evaluate(input => input === document.activeElement), true); + assert.equal(await page.locator('.graph-help').count(), 0, 'Query help is documented outside the graph UI'); + await page.keyboard.press('Escape'); + assert.equal(await page.locator('#graph-local-search-panel').evaluate(panel => panel.inert), true); + await page.locator('#graph-local-search-panel').waitFor({ state: 'hidden' }); + assert.equal(await page.locator('#graph-search-btn').evaluate(button => button === document.activeElement), true); + + const initialTransform = await page.evaluate(() => ({ ...window.d3.zoomTransform(document.querySelector('#graph-container svg')) })); + + const hoverMotion = await page.evaluate(async () => { + window.__graphSimulations[0].simulation.stop(); + const node = document.querySelector('.graph-node'); + const label = node.parentElement.querySelector('text'); + const unrelated = [...document.querySelectorAll('.graph-node')].find(n => n.__data__.id === 'note-52'); + const links = [...document.querySelectorAll('.graph-link')]; + const connected = links.find(link => link.__data__.source.id === node.__data__.id); + const disconnected = links.find(link => ![link.__data__.source.id, link.__data__.target.id].includes(node.__data__.id)); + const read = () => ({ + radius: +node.getAttribute('r'), labelY: +label.getAttribute('dy'), + nodeOpacity: +getComputedStyle(unrelated).opacity, + linkOpacity: +getComputedStyle(connected).strokeOpacity, + dimLinkOpacity: +getComputedStyle(disconnected).strokeOpacity, + stroke: getComputedStyle(connected).stroke, + }); + const sample = async type => { + const samples = [read()]; + node.dispatchEvent(new MouseEvent(type, { bubbles: true })); + const start = performance.now(); + do { + await new Promise(requestAnimationFrame); + samples.push(read()); + } while (performance.now() - start < 350); + return samples; + }; + const enter = await sample('mouseover'); + const leave = await sample('mouseout'); + // Reverse an in-flight transition, then reenter before it has completed. + node.dispatchEvent(new MouseEvent('mouseover', { bubbles: true })); + await new Promise(requestAnimationFrame); + node.dispatchEvent(new MouseEvent('mouseout', { bubbles: true })); + const reenter = await sample('mouseover'); + await sample('mouseout'); + return { radius: node.__data__.radius, enter, leave, reenter }; + }); + for (const samples of [hoverMotion.enter, hoverMotion.leave]) { + assert.ok(samples.some(s => s.radius > hoverMotion.radius && s.radius < hoverMotion.radius * 1.5), 'Hover radius changes gradually in both directions'); + assert.ok(samples.some(s => s.nodeOpacity > .18 && s.nodeOpacity < 1), 'Unrelated nodes fade gradually'); + assert.ok(samples.some(s => s.linkOpacity > .55 && s.linkOpacity < .9), 'Connected links brighten gradually'); + assert.ok(samples.some(s => s.dimLinkOpacity > .06 && s.dimLinkOpacity < .55), 'Unrelated links fade gradually'); + assert.ok(new Set(samples.map(s => s.stroke)).size > 2, 'Link color interpolates instead of jumping'); + } + assert.equal(hoverMotion.enter.at(-1).radius, hoverMotion.radius * 1.5); + assert.equal(hoverMotion.enter.at(-1).labelY, hoverMotion.radius * 1.5 + 15); + assert.equal(hoverMotion.leave.at(-1).radius, hoverMotion.radius); + assert.equal(hoverMotion.leave.at(-1).labelY, hoverMotion.radius + 12); + assert.equal(hoverMotion.reenter.at(-1).radius, hoverMotion.radius * 1.5, 'Rapid pointer changes converge to the latest hover state'); + await page.emulateMedia({ reducedMotion: 'reduce' }); + const reducedHover = await page.evaluate(() => { + const node = document.querySelector('.graph-node'); + node.dispatchEvent(new MouseEvent('mouseover', { bubbles: true })); + const enlarged = +node.getAttribute('r') === node.__data__.radius * 1.5; + const transitions = [...document.querySelectorAll('.graph-node, .graph-label, .graph-link')].map(n => getComputedStyle(n).transitionDuration); + node.dispatchEvent(new MouseEvent('mouseout', { bubbles: true })); + return { enlarged, restored: +node.getAttribute('r') === node.__data__.radius, transitions }; + }); + assert.equal(reducedHover.enlarged && reducedHover.restored, true, 'Reduced motion applies hover size immediately'); + assert.ok(reducedHover.transitions.every(duration => duration === '0s'), 'Reduced motion disables hover fades'); + await page.emulateMedia({ reducedMotion: 'no-preference' }); + + for (let cycle = 0; cycle < 4; cycle++) { + for (const button of ['graph-orphan-btn', 'graph-tags-btn', 'graph-attachments-btn']) { + const state = await page.evaluate(button => { + window.__graphSimulations.at(-1).simulation.stop(); + const svg = document.querySelector('#graph-container svg'); + const transform = { ...window.d3.zoomTransform(svg) }; + const before = new Map(); + window.__graphNodes.each(function(node) { before.set(node.id, { element: this, x: node.x, y: node.y }); }); + document.getElementById(button).click(); + let maxDisplacement = 0; + let retainedElements = true; + window.__graphNodes.each(function(node) { + const previous = before.get(node.id); + if (!previous) return; + retainedElements &&= previous.element === this; + maxDisplacement = Math.max(maxDisplacement, Math.hypot(node.x - previous.x, node.y - previous.y)); + }); + return { simulations: window.__graphSimulations.length, sameSvg: document.querySelector('#graph-container svg') === svg, + transform, afterTransform: { ...window.d3.zoomTransform(document.querySelector('#graph-container svg')) }, maxDisplacement, retainedElements }; + }, button); + assert.equal(state.simulations, 1, 'Filter toggles must not create competing force simulations'); + assert.equal(state.sameSvg, true, 'Filters must preserve the current SVG and drag coordinate space'); + assert.equal(state.retainedElements, true, 'Visible nodes must keep their elements'); + assert.equal(state.maxDisplacement, 0, 'Filters must not reset existing node positions'); + assert.deepEqual(state.afterTransform, state.transform, 'Filters must preserve zoom and pan'); + } + } + for (const button of ['graph-tags-btn', 'graph-attachments-btn', 'graph-orphan-btn']) { + const position = await page.evaluate(button => { + const simulation = window.__graphSimulations[0].simulation; + simulation.stop(); + const id = button === 'graph-tags-btn' ? 'tag-0' : button === 'graph-attachments-btn' ? 'attachment-0' : 'note-52'; + if (!window.__graphNodes.data().some(node => node.id === id)) document.getElementById(button).click(); + simulation.stop(); + const node = window.__graphNodes.data().find(node => node.id === id); + const before = [node.x, node.y]; + document.getElementById(button).click(); + simulation.stop(); + document.getElementById(button).click(); + const restored = window.__graphNodes.data().find(node => node.id === id); + return { before, after: [restored.x, restored.y] }; + }, button); + assert.deepEqual(position.after, position.before, 'Hidden nodes must return at their previous position'); + } + await click(page, '#graph-defaults'); + async function dragNode() { + await page.evaluate(() => window.__graphSimulations[0].simulation.stop()); + const node = page.locator('.graph-node:not(.is-tag):not(.is-attachment)').first(); + const box = await node.boundingBox(); + const start = { x: box.x + box.width / 2, y: box.y + box.height / 2 }; + await page.mouse.move(start.x, start.y); + await page.mouse.down(); + const distances = []; + for (let step = 1; step <= 12; step++) { + const pointer = { x: start.x + step * 5, y: start.y + step * 2 }; + await page.mouse.move(pointer.x, pointer.y); + await page.evaluate(() => new Promise(resolve => requestAnimationFrame(() => requestAnimationFrame(resolve)))); + distances.push(await node.evaluate((circle, pointer) => { + const box = circle.getBoundingClientRect(); + return Math.hypot(box.x + box.width / 2 - pointer.x, box.y + box.height / 2 - pointer.y); + }, pointer)); + } + await page.mouse.up(); + // Let D3 remove its temporary post-drag click suppression before toolbar clicks. + await page.evaluate(() => new Promise(resolve => requestAnimationFrame(resolve))); + assert.ok(Math.max(...distances) < 4, `Dragged node must follow the pointer: ${JSON.stringify(distances)}`); + assert.equal(await page.evaluate(() => window.__graphSimulations[0].simulation.alphaTarget()), 0); + return Math.max(...distances); + } + const beforeZoom = await dragNode(); + await page.mouse.move(550, 400); + await page.mouse.wheel(0, -250); + await page.waitForTimeout(200); + const afterZoom = await dragNode(); + await click(page, '#graph-reset'); + await page.waitForTimeout(650); + assert.deepEqual(await page.evaluate(() => ({ ...window.d3.zoomTransform(document.querySelector('#graph-container svg')) })), initialTransform); + + await page.locator('#graph-settings-btn').click(); + await setQuery(page, 'file:"Note 00.md"'); + await waitIDs(page, ['note-0']); + assert.equal(await page.locator('.graph-link').count(), 0, 'Filtering removes edges with hidden endpoints'); + assert.equal(data.indexRequests, 0, 'Filename filters do not need the content index'); + await setQuery(page, 'file:'); + await page.waitForFunction(() => document.querySelector('#graph-query-error').textContent.length > 0); + assert.deepEqual(await ids(page), ['note-0'], 'Invalid query preserves the preceding valid result'); + await setQuery(page, 'file:"Note 00.md"'); + await page.waitForFunction(() => document.querySelector('#graph-search-input').getAttribute('aria-invalid') === 'false'); + await click(page, '#graph-orphan-btn'); + assert.deepEqual(await ids(page), [], 'A formerly connected note is an orphan after its neighbors are filtered'); + await click(page, '#graph-orphan-btn'); + await waitIDs(page, ['note-0']); + + data.failIndex = true; + await setQuery(page, 'needle'); + await page.waitForFunction(() => document.querySelector('.graph-status .graph-error').textContent.includes('unavailable')); + assert.equal(data.indexRequests, 1); + assert.deepEqual(await ids(page), ['note-0'], 'Index failure preserves the last valid result'); + await setQuery(page, 'file:"Note 01.md"'); + await waitIDs(page, ['note-1']); + assert.equal(data.indexRequests, 1, 'Metadata queries still work after index failure'); + await setQuery(page, 'needle'); + await page.waitForFunction(() => document.querySelector('.graph-status .graph-error').textContent.includes('unavailable')); + assert.equal(data.indexRequests, 2); + data.failIndex = false; + await page.getByRole('button', { name: 'Retry', exact: true }).click(); + await waitIDs(page, ['note-2']); + assert.equal(data.indexRequests, 3, 'Explicit retry loads the index successfully'); + await setQuery(page, 'line:(needle second)'); + await waitIDs(page, []); + await setQuery(page, 'section:(needle second) [status:done]'); + await waitIDs(page, ['note-2']); + assert.equal(data.indexRequests, 3, 'A loaded index is reused for later scoped queries'); + await click(page, '#graph-defaults'); + assert.equal(await page.locator('.graph-node').count(), 53); + await click(page, '#graph-existing-btn'); + assert.ok((await ids(page)).includes('missing'), 'Missing-reference toggle reveals the placeholder'); + assert.equal(await page.locator('.graph-node.is-missing').count(), 1); + await click(page, '#graph-defaults'); + + await click(page, '#graph-arrows'); + const reciprocal = await page.locator('.graph-link').evaluateAll(links => links.map(element => ({ + source: element.__data__.source.id, target: element.__data__.target.id, + start: element.getAttribute('marker-start'), end: element.getAttribute('marker-end'), + })).filter(link => [link.source, link.target].includes('note-0') && [link.source, link.target].includes('note-1'))); + assert.equal(reciprocal.length, 1, 'Reciprocal references share one force link'); + assert.ok(reciprocal[0].start && reciprocal[0].end, 'Reciprocal references have arrows at both ends'); + assert.equal(await page.evaluate(() => window.__graphNodes.data().find(node => node.id === 'note-0').degree), 2, 'Degree counts unique neighbors'); + const appearance = await page.evaluate(() => { + const simulation = window.__graphSimulations[0].simulation; + simulation.stop().alpha(.015); + const before = window.__graphNodes.data().map(({ id, x, y }) => [id, x, y]); + for (const [id, value] of [['graph-lineWidth', '2'], ['graph-textFade', '.5']]) { + const input = document.getElementById(id); input.value = value; input.dispatchEvent(new Event('input')); + } + return { alpha: simulation.alpha(), before, after: window.__graphNodes.data().map(({ id, x, y }) => [id, x, y]) }; + }); + assert.equal(appearance.alpha, .015, 'Line and text styling must not reheat the simulation'); + assert.deepEqual(appearance.after, appearance.before); + assert.equal(await page.locator('.graph-link').first().getAttribute('stroke-width'), '2'); + + await setQuery(page, 'file:"Note 00.md"'); + await waitIDs(page, ['note-0']); + assert.equal(await page.evaluate(() => window.__graphSimulations.length), 1, 'All controls use the same simulation'); + await page.evaluate(() => window.DaybookGraph.destroy()); + const ticks = await page.evaluate(() => window.__graphSimulations.map(record => record.ticks)); + await page.waitForTimeout(100); + assert.deepEqual(await page.evaluate(() => window.__graphSimulations.map(record => record.ticks)), ticks, 'Destroy stops every old simulation'); + assert.equal(await page.locator('#graph-container svg').count(), 0); + await page.evaluate(() => window.DaybookGraph.init(document)); + await waitIDs(page, ['note-0']); + assert.equal(await page.locator('#graph-search-input').inputValue(), 'file:"Note 00.md"', 'Query persists across graph visits'); + assert.equal(await page.locator('#graph-lineWidth').inputValue(), '2'); + assert.equal(await page.evaluate(() => window.__graphSimulations.length), 2); + await click(page, '#graph-defaults'); + assert.equal(await page.locator('.graph-node').count(), 53); + assert.equal(await page.locator('#graph-search-input').inputValue(), ''); + assert.equal(await page.locator('#graph-lineWidth').inputValue(), '1'); + assert.equal((await page.locator('#graph-arrows').getAttribute('aria-checked')) === 'true', false); + const storage = await page.evaluate(() => JSON.parse(localStorage.getItem('daybook:graph:/'))); + assert.equal(storage.settings.query, ''); + assert.equal('groups' in storage.settings, false); + await page.evaluate(() => { + history.pushState({}, '', '?node=note-0&depth=1'); + dispatchEvent(new PopStateEvent('popstate')); + }); + assert.deepEqual(await ids(page), ['note-0', 'note-1', 'note-47']); + await click(page, '#graph-defaults'); + assert.deepEqual(await ids(page), ['note-0', 'note-1', 'note-47'], 'Restore defaults preserves local graph scope'); + await page.getByRole('button', { name: 'Full graph', exact: true }).click(); + assert.equal(await page.locator('.graph-node').count(), 53); + await page.evaluate(() => { + document.documentElement.lang = 'zh-CN'; + document.dispatchEvent(new Event('daybook:lang-change')); + }); + assert.equal(await page.locator('#graph-settings-btn').getAttribute('aria-label'), '图谱设置'); + assert.equal(await page.evaluate(() => window.__graphSimulations.length), 2, 'Language changes retain the simulation'); + + // Leaving during an active drag must release D3's window-level pointer listeners. + await page.evaluate(() => window.__graphSimulations.at(-1).simulation.stop()); + const dragBox = await page.locator('.graph-node').first().boundingBox(); + await page.mouse.move(dragBox.x + dragBox.width / 2, dragBox.y + dragBox.height / 2); + await page.mouse.down(); + await page.mouse.move(dragBox.x + dragBox.width / 2 + 10, dragBox.y + dragBox.height / 2 + 10); + await page.evaluate(() => window.DaybookGraph.destroy()); + await page.mouse.up(); + assert.equal(await page.locator('#graph-container svg').count(), 0); + await page.close(); + console.log(`Graph interaction regression passed: 12 filter changes, one simulation, drag error ${beforeZoom.toFixed(2)}px / ${afterZoom.toFixed(2)}px; filters, index retry, arrows, and persistence verified.`); + + const animated = await openGraph(fixture(), { reducedMotion: 'reduce', clock: true }); + await click(animated, '#graph-existing-btn'); + await click(animated, '#graph-tags-btn'); + await click(animated, '#graph-attachments-btn'); + const fullIDs = await ids(animated); + await click(animated, '#graph-play'); + assert.equal(await animated.locator('#graph-play').getAttribute('aria-pressed'), 'true'); + assert.deepEqual(await ids(animated), ['attachment-0', 'attachment-1', 'note-0', 'note-1', 'tag-0', 'tag-1']); + const firstBatchPositions = await animated.evaluate(() => window.__graphNodes.data().map(({ id, x, y }) => [id, x, y])); + await animated.clock.runFor(2800); + assert.ok((await ids(animated)).includes('note-2')); + assert.ok((await ids(animated)).includes('missing'), 'Undated placeholder appears with its first dated neighbor'); + assert.ok(!(await ids(animated)).includes('note-4')); + const retainedBatchPositions = await animated.evaluate(first => { + const retained = new Set(first.map(([id]) => id)); + return window.__graphNodes.data().filter(node => retained.has(node.id)).map(({ id, x, y }) => [id, x, y]); + }, firstBatchPositions); + assert.deepEqual(retainedBatchPositions, firstBatchPositions, 'Reduced-motion batches retain existing node coordinates'); + await click(animated, '#graph-play'); + assert.equal(await animated.locator('#graph-play').getAttribute('aria-pressed'), 'false'); + assert.deepEqual(await ids(animated), fullIDs, 'Toggling off restores the complete filtered graph'); + await animated.clock.runFor(5000); + assert.deepEqual(await ids(animated), fullIDs, 'Stopped playback does not leave a scheduled batch'); + await click(animated, '#graph-play'); + assert.deepEqual(await ids(animated), ['attachment-0', 'attachment-1', 'note-0', 'note-1', 'tag-0', 'tag-1'], 'Restart begins with the first date'); + await animated.clock.runFor(8_100); + assert.equal(await animated.locator('#graph-play').getAttribute('aria-pressed'), 'false'); + assert.deepEqual(await ids(animated), fullIDs); + await animated.clock.runFor(15_000); + assert.deepEqual(await ids(animated), fullIDs, 'Animation does not automatically loop'); + await click(animated, '#graph-play'); + await setQuery(animated, 'file:"Note 00.md"'); + assert.equal(await animated.locator('#graph-play').getAttribute('aria-pressed'), 'false', 'Changing the filter stops the animation'); + await animated.clock.runFor(250); + assert.deepEqual(await ids(animated), ['attachment-0', 'note-0', 'tag-0']); + assert.equal(await animated.evaluate(() => window.__graphSimulations.length), 1); + assert.equal(await animated.evaluate(() => window.__graphSimulations[0].ticks), 0, 'Reduced motion uses settled batches without a running force timer'); + await setQuery(animated, 'file:.png'); + await animated.clock.runFor(250); + assert.equal((await ids(animated)).length, 8); + assert.equal(await animated.locator('#graph-play').isDisabled(), true, 'An attachment-only selection has no dates to animate'); + assert.equal(await animated.locator('#graph-play').getAttribute('data-tooltip'), 'No dated notes in this selection'); + await animated.evaluate(() => window.DaybookGraph.destroy()); + await animated.clock.runFor(20_000); + assert.equal(await animated.locator('#graph-container svg').count(), 0, 'Destroy cancels the animation frame'); + await animated.close(); + console.log('Date animation regression passed: same-day batches, placeholders, toggle start/stop/restart, completion, filter cancellation and reduced motion.'); + + const mobile = await openGraph(fixture(), { viewport: { width: 390, height: 844 }, reducedMotion: 'reduce', storageUnavailable: true }); + await mobile.locator('#graph-settings-btn').click(); + const panelBox = await mobile.locator('#graph-settings-panel').boundingBox(); + assert.deepEqual(panelBox, { x: 0, y: 0, width: 390, height: 844 }, 'Mobile settings cover the viewport'); + assert.equal(await mobile.locator('#graph-settings-panel').evaluate(panel => panel.matches(':modal')), true, 'Mobile settings use a modal layer'); + await mobile.locator('#graph-arrows').focus(); + await mobile.keyboard.press('Space'); + assert.equal((await mobile.locator('#graph-arrows').getAttribute('aria-checked')) === 'true', true, 'Switch supports keyboard interaction without localStorage'); + await mobile.keyboard.press('Escape'); + assert.equal(await mobile.locator('#graph-settings-panel').isHidden(), true); + assert.equal(await mobile.locator('#graph-settings-btn').evaluate(button => button === document.activeElement), true, 'Closing returns keyboard focus to Settings'); + await mobile.locator('#graph-existing-btn').focus(); + await mobile.keyboard.press('Space'); + assert.equal(await mobile.locator('#graph-existing-btn').getAttribute('aria-pressed'), 'false'); + assert.ok((await ids(mobile)).includes('missing'), 'Existing-note toolbar toggle supports keyboard interaction'); + await mobile.locator('#graph-settings-btn').click(); + await mobile.evaluate(() => window.DaybookGraph.destroy()); + assert.equal(await mobile.locator(':modal').count(), 0, 'Leaving closes the fullscreen layer'); + assert.equal(await mobile.evaluate(() => document.body.classList.contains('graph-modal-open')), false, 'Leaving releases the page scroll lock'); + await mobile.close(); + + const timings = []; + for (const count of [100, 500, 1000]) { + const start = performance.now(); + const sample = await openGraph(fixture(count, false)); + const loaded = performance.now(); + const before = await sample.evaluate(() => { + const simulation = window.__graphSimulations[0].simulation; + simulation.stop().tick(80); + return window.__graphNodes.data().every(node => Number.isFinite(node.x) && Number.isFinite(node.y)); + }); + assert.equal(before, true, `${count} nodes settle to finite coordinates`); + await setQuery(sample, 'path:Even'); + await sample.waitForFunction(count => window.__graphNodes.size() === Math.ceil(count / 2), count); + const filtered = performance.now(); + const state = await sample.evaluate(() => { + const simulation = window.__graphSimulations[0].simulation; + simulation.stop().tick(40); + return { simulations: window.__graphSimulations.length, finite: window.__graphNodes.data().every(node => Number.isFinite(node.x) && Number.isFinite(node.y)) }; + }); + assert.equal(state.simulations, 1); + assert.equal(state.finite, true); + timings.push({ nodes: count, loadMs: Math.round(loaded - start), filterAndSettleMs: Math.round(filtered - loaded) }); + await sample.close(); + } + assert.deepEqual(errors, [], 'No unhandled browser errors'); + console.log(`Graph scale smoke timings (informational): ${JSON.stringify(timings)}`); +} finally { + await browser.close(); +} diff --git a/scripts/graph-query-test.mjs b/scripts/graph-query-test.mjs new file mode 100644 index 00000000..0e687b01 --- /dev/null +++ b/scripts/graph-query-test.mjs @@ -0,0 +1,94 @@ +import assert from 'node:assert/strict'; +import { test } from 'node:test'; +import { build } from 'esbuild'; + +const result = await build({ + entryPoints: [new URL('../assets/ts/graph-query.ts', import.meta.url).pathname], + bundle: true, write: false, format: 'esm', platform: 'node', target: 'es2020', +}); +const bundledSource = `${result.outputFiles[0].text}\n//# sourceURL=graph-query.test-module.mjs`; +const { compileQuery } = await import(`data:text/javascript;base64,${Buffer.from(bundledSource).toString('base64')}`); +const note = { + title: '公开笔记', file: 'Daily Plan.md', path: 'notes/Work notes/Daily Plan.md', + tags: ['project/daybook', '工作/计划'], + text: 'Alpha one\nBeta two\n共享 内容\nGamma three', + lines: ['Alpha one', 'Beta two', '共享 内容', 'Gamma three'], + sections: ['Alpha one\nBeta two', '共享 内容\nGamma three'], + properties: { Status: 'Published', count: 3, featured: false, empty: null, authors: ['Ada', '��'], 'due date': '2026-10-04' }, +}; +const matches = input => compileQuery(input).matches(note); + +test('plain terms, Chinese, phrases and escaped quotes search only published text or names', () => { + assert.equal(matches(''), true); + assert.equal(matches(' '), true); + for (const query of ['alpha', 'ALPHA', '公开', '共享 内容', '"Daily Plan"', '"alpha one"', 'plan.md']) assert.equal(matches(query), true, query); + for (const query of ['"alpha beta"', 'Work notes', 'Published', '�存在']) assert.equal(matches(query), false, query); + assert.equal(compileQuery('"say \\"hi\\""').matches({ text: 'Say "hi"' }), true); + assert.equal(compileQuery('"/literal/"').matches({ text: '/literal/' }), true); +}); + +test('AND, OR, exclusion and grouping have deterministic precedence', () => { + assert.equal(matches('alpha beta'), true); + assert.equal(matches('alpha missing OR gamma'), true); + assert.equal(matches('alpha (missing OR gamma)'), true); + assert.equal(matches('(alpha missing) OR (gamma -missing)'), true); + assert.equal(matches('alpha -(beta OR gamma)'), false); + assert.equal(matches('-missing -unknown'), true); + assert.equal(matches('--alpha'), true); + assert.equal(matches('alpha OR missing gamma'), true); + assert.equal(matches('missing OR gamma missing'), false); +}); + +test('path and filename fields support spaces, extensions, groups and metadata-only loading', () => { + for (const query of ['path:"Work notes"', 'file:.md', 'file:(daily plan)', 'file:daily -path:private', 'path:notes OR tag:other']) { + assert.equal(matches(query), true, query); + assert.equal(compileQuery(query).needsIndex, false, query); + } + assert.equal(matches('file:work'), false); + assert.equal(matches('path:"/home/"'), false); + assert.equal(compileQuery('').needsIndex, false); + for (const query of ['alpha', 'path:notes alpha', 'file:daily OR alpha', 'line:alpha', 'section:alpha', '[status]', 'file:(daily OR line:alpha)']) { + assert.equal(compileQuery(query).needsIndex, true, query); + } +}); + +test('tags include descendants, ignore a leading hash, and do not match partial segments', () => { + for (const query of ['tag:project', 'tag:PROJECT/daybook', 'tag:#project', 'tag:工作', 'tag:(project OR missing)', 'tag:project -tag:private']) assert.equal(matches(query), true, query); + for (const query of ['tag:proj', 'tag:daybook', 'tag:project/day', 'tag:projects']) assert.equal(matches(query), false, query); +}); + +test('line and section groups keep AND inside a single line or section', () => { + assert.equal(matches('line:(alpha one)'), true); + assert.equal(matches('line:(alpha beta)'), false); + assert.equal(matches('line:(alpha OR beta)'), true); + assert.equal(matches('line:(alpha -beta)'), true); + assert.equal(matches('line:(共享 内容)'), true); + assert.equal(matches('section:(alpha beta)'), true); + assert.equal(matches('section:(alpha gamma)'), false); + assert.equal(matches('section:(gamma 共享)'), true); + assert.equal(compileQuery('line:alpha').matches({ title: 'alpha' }), false); +}); + +test('public properties match existence, scalar values, lists and quoted names', () => { + for (const query of ['[status]', '[STATUS:published]', '[count:3]', '[featured:false]', '[empty]', '[authors:ada]', '[authors:��]', '[due date:2026]', '["due date":"2026-10-04"]', '[status] -[secret]']) assert.equal(matches(query), true, query); + for (const query of ['[secret]', '[empty:null]', '[authors:Bob]', '[status:draft]']) assert.equal(matches(query), false, query); + assert.equal(compileQuery('[__proto__]').matches({ properties: {} }), false); +}); + +test('invalid and unsupported syntax fails explicitly instead of silently changing the filter', () => { + for (const query of ['(', ')', '()', 'foo OR', 'OR foo', '-', 'file:', 'task:done', 'block:abc', 'unknown:foo', '"open', '[open', '[]', '[status:]', '[:value]', '[foo[bar]]', 'foo:', '/alpha/', '[count:>2]', '[count:<=3]', '>3', '""']) { + assert.throws(() => compileQuery(query), Error, query); + } + assert.throws(() => compileQuery('('.repeat(100) + 'foo' + ')'.repeat(100)), /嵌套/); + assert.throws(() => compileQuery('-'.repeat(100) + 'foo'), /嵌套/); + assert.throws(() => compileQuery('x'.repeat(16_385)), /过长/); +}); + +test('missing optional fields and separately evaluated documents do not leak matches', () => { + const query = compileQuery('alpha'); + assert.equal(query.matches(note), true); + assert.equal(query.matches({}), false); + assert.equal(query.matches({ lines: ['alpha'] }), true); + assert.equal(compileQuery('file:reference').matches({ title: 'Reference' }), true); + assert.equal(compileQuery('-tag:private').matches({}), true); +}); diff --git a/scripts/graph-static-test.mjs b/scripts/graph-static-test.mjs new file mode 100644 index 00000000..a5cc938a --- /dev/null +++ b/scripts/graph-static-test.mjs @@ -0,0 +1,78 @@ +import assert from 'node:assert/strict'; +import { chromium } from 'playwright'; +const base = process.env.DAYBOOK_TEST_URL || 'http://localhost:1313'; +const browser = await chromium.launch({ headless: true }); +const page = await browser.newPage({ viewport: { width: 1440, height: 1000 } }); +const errors = []; +page.on('pageerror', e => errors.push(e.message)); +try { + await page.goto(`${base}/graph/`); + await page.waitForSelector('.graph-node'); + const count = await page.locator('.graph-node').count(); + assert.ok(count >= 2); + await page.locator('#graph-search-btn').click(); + await page.locator('#graph-search-input').fill('line:"Hello World"'); + await page.waitForFunction(() => getComputedStyle(document.querySelector('.graph-search-panel')).opacity === '1'); + await page.waitForFunction(() => document.querySelectorAll('.graph-node').length === 1); + assert.match(await page.locator('.graph-label').textContent(), /smoke-test/); + await page.locator('#graph-search-input').fill('path:missing-no-match'); + await page.waitForFunction(() => document.querySelectorAll('.graph-node').length === 0); + await page.locator('#graph-settings-btn').click(); + await page.locator('#graph-defaults').click(); + await page.waitForFunction(count => document.querySelectorAll('.graph-node').length === count, count); + assert.deepEqual(await page.locator('.graph-section-title > span:last-child').allTextContents(), ['外观', '力度']); + assert.equal(await page.locator('#graph-settings-panel details, #graph-settings-panel summary').count(), 0); + assert.equal(await page.locator('#graph-linkDistance').isVisible(), true); + await page.locator('#graph-nodeSize').fill('2'); + await page.locator('#graph-arrows').click(); + await page.locator('#graph-play').click(); + await page.locator('#graph-play').click(); + assert.equal(await page.locator('#graph-play').getAttribute('aria-pressed'), 'false'); + assert.equal(await page.locator('#graph-settings-panel #graph-play, #graph-settings-panel progress, .graph-animation').count(), 0); + await page.locator('.graph-close').click(); + await page.reload(); + await page.waitForSelector('.graph-node'); + await page.locator('#graph-settings-btn').click(); + assert.equal(await page.locator('#graph-nodeSize').inputValue(), '2'); + await page.locator('#graph-defaults').click(); + await page.locator('.graph-close').click(); + // Exercise the actual router, hashed dependency loader and language route. + await page.evaluate(() => window.daybookNavigateTo('/notes/')); + await page.waitForFunction(() => location.pathname === '/notes/' && !document.documentElement.classList.contains('is-transitioning')); + assert.equal(await page.locator('#graph-container svg').count(), 0); + await page.evaluate(() => window.daybookNavigateTo('/en_US/graph/')); + await page.waitForSelector('.graph-node'); + await page.waitForFunction(() => !document.documentElement.classList.contains('is-transitioning')); + assert.equal(await page.locator('#graph-settings-btn').getAttribute('aria-label'), 'Graph settings'); + await page.locator('#graph-settings-btn').click(); + assert.deepEqual(await page.locator('.graph-section-title > span:last-child').allTextContents(), ['Display', 'Forces']); + await page.emulateMedia({ colorScheme: 'dark', reducedMotion: 'reduce' }); + await page.evaluate(() => document.documentElement.dataset.theme = 'dark'); + await page.setViewportSize({ width: 390, height: 844 }); + await page.waitForFunction(() => document.querySelector('#graph-settings-panel').matches(':modal')); + const bounds = await page.locator('.graph-panel').boundingBox(); + assert.deepEqual(bounds, {x: 0, y: 0, width: 390, height: 844}, 'Settings cover the full mobile viewport'); + await page.keyboard.press('Escape'); + assert.equal(await page.locator('#graph-settings-panel').isVisible(), false); + for (const width of [390, 320, 800]) { + await page.setViewportSize({ width, height: 844 }); + for (const local of [false, true]) { + await page.locator('#graph-full-btn').evaluate((button, local) => { button.hidden = !local; }, local); + const buttons = await page.locator('.graph-toolbar > button:visible').all(); + const shell = await page.locator('.graph-shell').boundingBox(); + const boxes = await Promise.all(buttons.map(button => button.boundingBox())); + assert.equal(boxes.length, local ? 9 : 8); + // Compare layout positions; the focused action intentionally lifts by 2px. + const tops = await page.locator('.graph-toolbar > button:visible').evaluateAll(buttons => buttons.map(button => button.offsetTop)); + assert.equal(new Set(tops).size, 2, 'Narrow toolbar occupies two rows'); + assert.ok(boxes.every(box => box.x >= shell.x && box.x + box.width <= shell.x + shell.width + 1), 'All toolbar actions fit the graph'); + assert.ok(Math.abs(shell.y + shell.height - (844 - 8)) < 2, 'Graph fills the space below the site header'); + } + } + await page.setViewportSize({width:390, height:844}); + await page.locator('#graph-full-btn').evaluate(button => { button.hidden = true; }); + await page.locator('#graph-search-btn').click(); + await page.locator('#graph-search-input').fill('path:notes'); + assert.deepEqual(errors, []); + console.log('Graph static-vault regression passed (published index, toolbar, settings, animation, SPA, language and mobile).'); +} finally { await browser.close(); } diff --git a/scripts/install-cli.ps1 b/scripts/install-cli.ps1 new file mode 100644 index 00000000..f0db4a98 --- /dev/null +++ b/scripts/install-cli.ps1 @@ -0,0 +1,40 @@ +$ErrorActionPreference = "Stop" + +Write-Host "=> Building frontend assets..." +npm ci +npm run build:js +npm run build:vendor + +# Determine installation path +$InstallBin = $env:GOBIN +if (-not $InstallBin) { + $GoPath = (go env GOPATH).Trim() + $InstallBin = Join-Path $GoPath "bin" +} + +Write-Host "=> Installing daybook CLI to $InstallBin..." +go install ./cmd/daybook + +Write-Host "=> Install successful." +Write-Host "=> Executable is located at: $(Join-Path $InstallBin 'daybook.exe')" + +# Check if INSTALL_BIN is in PATH +$UserPath = [Environment]::GetEnvironmentVariable("PATH", "User") +if ($UserPath -eq $null) { + $UserPath = "" +} +$PathArray = $UserPath -split ";" | Where-Object { $_ -ne "" } +$NormalizedInstallBin = $InstallBin.TrimEnd('\') + +$InPath = $false +foreach ($P in $PathArray) { + if ($P.TrimEnd('\').Equals($NormalizedInstallBin, [System.StringComparison]::OrdinalIgnoreCase)) { + $InPath = $true + break + } +} + +if (-not $InPath) { + Write-Host "`nWarning: $InstallBin is not in your PATH." + Write-Host "You may need to add it manually to your environment variables." +} diff --git a/scripts/install-cli.sh b/scripts/install-cli.sh new file mode 100755 index 00000000..f1d45500 --- /dev/null +++ b/scripts/install-cli.sh @@ -0,0 +1,32 @@ +#!/bin/sh +set -eu + +echo "=> Building frontend assets..." +npm ci +npm run build:js +npm run build:vendor + +# Determine installation path +if [ -n "${GOBIN:-}" ]; then + INSTALL_BIN="$GOBIN" +else + INSTALL_BIN="$(go env GOPATH)/bin" +fi + +echo "=> Installing daybook CLI to $INSTALL_BIN..." +go install ./cmd/daybook + +echo "=> Install successful." +echo "=> Executable is located at: $INSTALL_BIN/daybook" + +# Check if INSTALL_BIN is in PATH +case ":$PATH:" in + *":$INSTALL_BIN:"*) + ;; + *) + echo "" + echo "Warning: $INSTALL_BIN is not in your PATH." + echo "You may need to add it to your shell configuration (e.g., ~/.profile, ~/.zshrc):" + echo " export PATH=\"\$PATH:$INSTALL_BIN\"" + ;; +esac diff --git a/scripts/install.ps1 b/scripts/install.ps1 new file mode 100644 index 00000000..950e4219 --- /dev/null +++ b/scripts/install.ps1 @@ -0,0 +1,183 @@ +$ErrorActionPreference = "Stop" + +# Enforce TLS 1.2 for GitHub API compatibility in older PowerShell (e.g. 5.1) +[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 + +# Helpers +function Write-Log { + param([string]$Message) + Write-Host "=> $Message" +} + +function Abort { + param([string]$Message) + throw $Message +} + +function Get-DaybookArchitecture { + $Arch = $env:PROCESSOR_ARCHITEW6432 + if (-not $Arch) { + $Arch = $env:PROCESSOR_ARCHITECTURE + } + + if (-not $Arch) { + throw "Unable to determine Windows architecture.`r`nPROCESSOR_ARCHITECTURE=$env:PROCESSOR_ARCHITECTURE`r`nPROCESSOR_ARCHITEW6432=$env:PROCESSOR_ARCHITEW6432" + } + + switch ($Arch.ToUpperInvariant()) { + "AMD64" { return "amd64" } + "ARM64" { return "arm64" } + default { throw "Unsupported Windows architecture: $Arch" } + } +} + +# 1. Detect OS & Architecture +$ArchName = Get-DaybookArchitecture +$Platform = "windows_$ArchName" +Write-Log "Detected platform: $Platform" + +# Default install directory +$InstallDir = if ($env:DAYBOOK_INSTALL_DIR) { $env:DAYBOOK_INSTALL_DIR } else { "$env:LOCALAPPDATA\Programs\Daybook\bin" } + +# 2. Resolve the public release redirect, avoiding anonymous API rate limits. +Write-Log "Fetching latest release info..." +$Repo = "StatIndet/daybook" +$LatestUrl = "https://github.com/$Repo/releases/latest" + +try { + $Response = Invoke-WebRequest -UseBasicParsing -Uri $LatestUrl -ErrorAction Stop + # Windows PowerShell 5.1 uses HttpWebResponse; PowerShell 7 uses HttpResponseMessage. + $ResolvedUrl = if ($Response.BaseResponse.ResponseUri) { + $Response.BaseResponse.ResponseUri.AbsoluteUri + } else { + $Response.BaseResponse.RequestMessage.RequestUri.AbsoluteUri + } +} catch { + Abort "Failed to query latest release. Error: $_" +} + +if ($ResolvedUrl -notmatch ('^https://github\.com/' + [regex]::Escape($Repo) + '/releases/tag/(v[^/?#]+)$')) { + Abort "Failed to determine the latest release tag from GitHub redirect." +} +$LatestTag = $Matches[1] +Write-Log "Latest release is $LatestTag" + +# 3. Construct file names +$DownloadUrlBase = "https://github.com/$Repo/releases/download" +$AssetName = "daybook_${LatestTag}_${Platform}.zip" +$AssetUrl = "$DownloadUrlBase/$LatestTag/$AssetName" +$ChecksumsUrl = "$DownloadUrlBase/$LatestTag/checksums.txt" + +# 4. Create temp dir and download +$TmpDir = Join-Path ([System.IO.Path]::GetTempPath()) "daybook_install_$([Guid]::NewGuid().ToString().Substring(0,8))" +New-Item -ItemType Directory -Force -Path $TmpDir | Out-Null + +try { + $ZipPath = Join-Path $TmpDir $AssetName + $ChecksumsPath = Join-Path $TmpDir "checksums.txt" + + Write-Log "Downloading $AssetName..." + try { + Invoke-WebRequest -UseBasicParsing -Uri $AssetUrl -OutFile $ZipPath -ErrorAction Stop + } catch { + Abort "Failed to download archive. Error: $_" + } + + Write-Log "Downloading checksums.txt..." + try { + Invoke-WebRequest -UseBasicParsing -Uri $ChecksumsUrl -OutFile $ChecksumsPath -ErrorAction Stop + } catch { + Abort "Failed to download checksums.txt. Error: $_" + } + + # 5. Verify checksum + Write-Log "Verifying checksum..." + $Checksums = Get-Content $ChecksumsPath -ErrorAction Stop + $ExpectedHash = "" + foreach ($Line in $Checksums) { + if ($Line -match [regex]::Escape($AssetName)) { + $ExpectedHash = ($Line -split '\s+')[0] + break + } + } + + if (-not $ExpectedHash) { + Abort "Checksum entry not found for $AssetName in checksums.txt" + } + + $ActualHash = (Get-FileHash -Path $ZipPath -Algorithm SHA256).Hash + if ($ExpectedHash.ToUpper() -ne $ActualHash.ToUpper()) { + Abort "Checksum verification failed! Expected: $ExpectedHash, Actual: $ActualHash" + } + Write-Log "Checksum verified successfully." + + # 6. Extract + Write-Log "Extracting archive..." + try { + Expand-Archive -Path $ZipPath -DestinationPath $TmpDir -Force -ErrorAction Stop + } catch { + Abort "Failed to extract archive." + } + + $ExtractedExe = Join-Path $TmpDir "daybook.exe" + if (-not (Test-Path $ExtractedExe)) { + Abort "Failed to extract archive. daybook.exe not found." + } + + # 7. Install + Write-Log "Installing daybook.exe to $InstallDir..." + if (-not (Test-Path $InstallDir)) { + New-Item -ItemType Directory -Force -Path $InstallDir | Out-Null + } + try { + Copy-Item -Path $ExtractedExe -Destination (Join-Path $InstallDir "daybook.exe") -Force -ErrorAction Stop + } catch { + Abort "Failed to install executable." + } + + # 8. Verify installation + Write-Log "Verifying installation..." + $InstalledExe = Join-Path $InstallDir "daybook.exe" + & $InstalledExe --version + if ($LASTEXITCODE -ne 0) { + Abort "Installed executable failed verification." + } + + Write-Host "`nDaybook $LatestTag installed successfully." + Write-Host "Installed to: $InstalledExe" + + # 9. PATH Check + $UserPath = [Environment]::GetEnvironmentVariable("PATH", "User") + if ($UserPath -eq $null) { + $UserPath = "" + } + $PathArray = $UserPath -split ";" | Where-Object { $_ -ne "" } + $NormalizedInstallDir = $InstallDir.TrimEnd('\') + + $InPath = $false + foreach ($P in $PathArray) { + if ($P.TrimEnd('\').Equals($NormalizedInstallDir, [System.StringComparison]::OrdinalIgnoreCase)) { + $InPath = $true + break + } + } + + if (-not $InPath) { + $NewPath = $UserPath + if ($NewPath -and -not $NewPath.EndsWith(";")) { + $NewPath += ";" + } + $NewPath += $NormalizedInstallDir + [Environment]::SetEnvironmentVariable("PATH", $NewPath, "User") + + # Update current session PATH + $env:Path += ";$NormalizedInstallDir" + + Write-Host "`nAdded $InstallDir to your User PATH." + } + +} finally { + if (Test-Path $TmpDir) { + Remove-Item -Path $TmpDir -Recurse -Force -ErrorAction SilentlyContinue + } +} diff --git a/scripts/install.sh b/scripts/install.sh new file mode 100755 index 00000000..442a0844 --- /dev/null +++ b/scripts/install.sh @@ -0,0 +1,168 @@ +#!/bin/sh +set -eu + +# GitHub repository +REPO="StatIndet/daybook" +DOWNLOAD_URL_BASE="https://github.com/${REPO}/releases" + +# Default install directory +DAYBOOK_INSTALL_DIR="${DAYBOOK_INSTALL_DIR:-${HOME}/.local/bin}" + +# Helpers +abort() { + echo "ERROR: $1" >&2 + exit 1 +} + +# 1. Detect OS & Architecture +OS="$(uname -s)" +ARCH="$(uname -m)" + +case "$OS" in + Linux) + OS_NAME="linux" + ;; + Darwin) + OS_NAME="darwin" + ;; + FreeBSD) + OS_NAME="freebsd" + ;; + OpenBSD) + OS_NAME="openbsd" + ;; + NetBSD) + OS_NAME="netbsd" + ;; + DragonFly) + OS_NAME="dragonfly" + ;; + *) + abort "Unsupported operating system: $OS. Detected platform: $OS/$ARCH" + ;; +esac + +case "$ARCH" in + x86_64 | amd64) + ARCH_NAME="amd64" + ;; + aarch64 | arm64) + ARCH_NAME="arm64" + ;; + *) + abort "Unsupported architecture: $ARCH. Detected platform: $OS/$ARCH" + ;; +esac + +PLATFORM="${OS_NAME}_${ARCH_NAME}" +echo "=> Detected platform: $PLATFORM" + +# 2. Check dependencies +if command -v curl >/dev/null 2>&1; then + DOWNLOAD_CMD="curl -fsSL" +elif command -v wget >/dev/null 2>&1; then + DOWNLOAD_CMD="wget -qO-" +elif command -v fetch >/dev/null 2>&1; then + DOWNLOAD_CMD="fetch -q -o -" +else + abort "Neither curl, wget, nor fetch is available. Please install one of them to download Daybook." +fi + +compute_sha256() { + if command -v sha256sum >/dev/null 2>&1; then + sha256sum "$1" | awk '{print $1}' + elif command -v shasum >/dev/null 2>&1; then + shasum -a 256 "$1" | awk '{print $1}' + elif command -v sha256 >/dev/null 2>&1; then + sha256 -q "$1" + else + abort "Neither sha256sum, shasum, nor sha256 is available. Please install one of them for checksum verification." + fi +} + +# verify tar exists +if ! command -v tar >/dev/null 2>&1; then + abort "tar is not available." +fi + +# 3. Get latest release tag +echo "=> Fetching latest release info..." +API_URL="https://api.github.com/repos/${REPO}/releases/latest" +# Extract tag_name using standard text tools +LATEST_TAG=$($DOWNLOAD_CMD "$API_URL" | grep '"tag_name":' | sed -E 's/.*"tag_name": *"([^"]+)".*/\1/') || true + +if [ -z "$LATEST_TAG" ]; then + abort "Failed to determine the latest release tag from GitHub API." +fi + +echo "=> Latest release is $LATEST_TAG" + +# 4. Construct file names +ASSET_NAME="daybook_${LATEST_TAG}_${PLATFORM}.tar.gz" +ASSET_URL="${DOWNLOAD_URL_BASE}/download/${LATEST_TAG}/${ASSET_NAME}" +CHECKSUMS_URL="${DOWNLOAD_URL_BASE}/download/${LATEST_TAG}/checksums.txt" + +# 5. Create temp dir and download +# Some environments (e.g. OpenBSD) might not have mktemp -d or behave differently, but generally mktemp -d is available. +TMP_DIR="$(mktemp -d)" +trap 'rm -rf "$TMP_DIR"' EXIT INT TERM + +echo "=> Downloading $ASSET_NAME..." +$DOWNLOAD_CMD "$ASSET_URL" > "$TMP_DIR/$ASSET_NAME" || abort "Failed to download $ASSET_URL" + +echo "=> Downloading checksums.txt..." +$DOWNLOAD_CMD "$CHECKSUMS_URL" > "$TMP_DIR/checksums.txt" || abort "Failed to download checksums.txt" + +# 6. Verify checksum +echo "=> Verifying checksum..." +cd "$TMP_DIR" + +if ! grep -q "$ASSET_NAME" checksums.txt; then + abort "$ASSET_NAME not found in checksums.txt" +fi + +EXPECTED_HASH=$(grep "$ASSET_NAME" checksums.txt | awk '{print $1}') +ACTUAL_HASH=$(compute_sha256 "$ASSET_NAME") + +if [ "$EXPECTED_HASH" != "$ACTUAL_HASH" ]; then + abort "Checksum verification failed! Expected: $EXPECTED_HASH, Actual: $ACTUAL_HASH" +fi +echo "=> Checksum verified successfully." + +# 7. Extract +echo "=> Extracting archive..." +tar -xzf "$ASSET_NAME" daybook || abort "Failed to extract tar.gz" + +if [ ! -f "daybook" ]; then + abort "Extracted archive did not contain 'daybook' binary." +fi + +chmod +x daybook + +# 8. Install +echo "=> Installing daybook to $DAYBOOK_INSTALL_DIR..." +mkdir -p "$DAYBOOK_INSTALL_DIR" || abort "Failed to create directory: $DAYBOOK_INSTALL_DIR" +cp daybook "$DAYBOOK_INSTALL_DIR/daybook" || abort "Failed to copy daybook to $DAYBOOK_INSTALL_DIR. Check permissions." + +# 9. Verify installation +echo "=> Verifying installation..." +"$DAYBOOK_INSTALL_DIR/daybook" --version || abort "Failed to execute daybook after installation." + +echo "" +echo "Daybook $LATEST_TAG installed successfully." +echo "Installed to: $DAYBOOK_INSTALL_DIR/daybook" + +# 10. PATH Check +case ":$PATH:" in + *":$DAYBOOK_INSTALL_DIR:"*) + ;; + *) + echo "" + echo "Daybook was installed successfully, but $DAYBOOK_INSTALL_DIR is not in your PATH." + echo "Add it to your shell PATH before using \`daybook\`:" + echo "" + echo " export PATH=\"\$PATH:$DAYBOOK_INSTALL_DIR\"" + echo "" + ;; +esac + diff --git a/scripts/loading-feedback-timing-test.mjs b/scripts/loading-feedback-timing-test.mjs new file mode 100644 index 00000000..cfa09b48 --- /dev/null +++ b/scripts/loading-feedback-timing-test.mjs @@ -0,0 +1,87 @@ +import assert from 'node:assert/strict'; +import { build } from 'esbuild'; +import { chromium } from 'playwright'; + +// Exercise the presentation clocks independently of network and page-transition +// timing, including requests that finish just after the indicator appears. +const { outputFiles } = await build({ + stdin: { + contents: ` + import { NavigationLoading } from './assets/ts/navigation-loading'; + import { LiquidCursor } from './assets/ts/liquid-cursor'; + const loading = new NavigationLoading(); + const liquid = new LiquidCursor(); + const cursor = document.querySelector('.daybook-cursor'); + cursor.append(liquid.element); + document.addEventListener('daybook:navigation-loading', () => { + if (document.documentElement.dataset.navigationLoading === 'true') liquid.start(); + else liquid.stop(); + }); + window.fixture = { loading, liquid }; + `, + resolveDir: process.cwd(), + }, + bundle: true, + write: false, + format: 'iife', +}); +const browser = await chromium.launch(); +try { + const page = await browser.newPage(); + await page.setContent('
    '); + await page.clock.install({ time: new Date('2026-01-01T00:00:00Z') }); + await page.clock.pauseAt(new Date('2026-01-01T00:00:01Z')); + await page.addScriptTag({ content: outputFiles[0].text }); + const state = () => page.evaluate(() => ({ + pending: document.documentElement.dataset.navigationPending === 'true', + feedback: document.documentElement.dataset.navigationLoading === 'true', + liquid: document.querySelector('.daybook-cursor').classList.contains('is-loading'), + path: document.querySelector('path').getAttribute('d'), + })); + const start = id => page.evaluate(id => window.fixture.loading.start(id), id); + const finish = id => page.evaluate(id => window.fixture.loading.finish(id), id); + + await start(1); + await page.clock.runFor(399); + assert.equal((await state()).feedback, false, 'Sub-400ms requests stay quiet'); + await finish(1); + await page.clock.runFor(500); + assert.equal((await state()).liquid, false, 'Finished requests cannot show late feedback'); + + await start(2); + await page.clock.runFor(400); + assert.equal((await state()).liquid, true, 'A pending request shows feedback at 400ms'); + await page.clock.runFor(50); + await finish(2); + assert.equal((await state()).pending, false, 'Cursor settlement does not prolong pending navigation'); + assert.equal((await state()).feedback, false, 'Other feedback ends immediately'); + await page.clock.runFor(249); + assert.equal((await state()).liquid, true, 'The visible entrance is allowed to finish'); + await page.clock.runFor(1); + assert.equal((await state()).liquid, false, 'Exit begins after the 300ms entrance'); + + // Re-enter while shrinking: obsolete exit cleanup must not reset the loop. + await page.clock.runFor(100); + await page.evaluate(() => window.fixture.liquid.start()); + await page.clock.runFor(250); + assert.equal((await state()).liquid, true); + const path = (await state()).path; + await page.clock.runFor(90); + assert.notEqual((await state()).path, path, 'The loop keeps playing after interrupted exit'); + + await page.evaluate(() => { window.fixture.liquid.reset(); window.fixture.liquid.start(); }); + await page.clock.runFor(50); + await page.evaluate(() => window.fixture.liquid.stop()); + await page.clock.runFor(50); + await page.evaluate(() => window.fixture.liquid.start()); + await page.clock.runFor(600); + assert.equal((await state()).liquid, true, 'Re-entry cancels the pending entrance settlement'); + await page.evaluate(() => window.fixture.liquid.stop(true)); + assert.equal((await state()).liquid, false, 'Hidden/disabled cursors can stop immediately'); + await page.clock.runFor(600); + assert.equal((await state()).liquid, false, 'Cleanup cannot revive a stopped cursor'); + await page.evaluate(() => window.fixture.liquid.destroy()); + console.log('Loading feedback timing passed: threshold, fast completion, entrance settlement, re-entry and cleanup.'); +} finally { + await browser.close(); +} diff --git a/scripts/manual/toc/GUIDE.md b/scripts/manual/toc/GUIDE.md new file mode 100644 index 00000000..745eab23 --- /dev/null +++ b/scripts/manual/toc/GUIDE.md @@ -0,0 +1,45 @@ +# Optional TOC diagnostics + +这些检查�在排查目录�阅读进度曲线或移动端目录时手动�行。整个目录�接入 +`scripts/check.sh`�默认 CI 或 Release;包括纯数学检查在内,统一使用下�的入�。 + +在仓库根目录安装一次�赖和�览器: + +```sh +npm ci +npx playwright install chromium +``` + +Linux 若�示缺少�览器系统库,�手动�行 `npx playwright install --with-deps chromium`。 +入��会自动下载�览器或安装系统�赖。 + +```sh +# 自包�检查:曲线数学�端点折回�SVG 几何�Chromium 截图�素边界 +npm run test:toc + +# 加测真实文章:桌�进度��沉浸模�目录�移动端目录打开/关闭 +npm run test:toc -- --article http://127.0.0.1:1313/notes/example/ + +# 加测已有外部 vault:入场��顶�多个�宽�标题标签�触摸�锚点跳转 +npm run test:toc -- --vault http://127.0.0.1:1415 +``` + +`--article` 需�一个已�动�务的构建结果,文章至少有两个标题,且内容足够长, +能在 2560×1440 视�中滚动 500px。修改���先�建�端资�和 CLI,�构建测试 vault。 + +`--vault` �用 `scripts/vault-browser-test.mjs` 的本地集�检查环境,筛选 TOC 用例。 +该环境还�求中文�英文示例文章,用以下��指定文章标题: +`DAYBOOK_TEST_TOC_TITLE`�`DAYBOOK_TEST_ZH_TITLE`�`DAYBOOK_TEST_EN_TITLE`。 +TOC 示例至少需�六个标题,并有足够长的正文用于滚动和长标题检查。 +截图�结果写入 `DAYBOOK_TEST_OUTPUT_DIR`,默认 `/tmp/daybook-vault-browser`。 +这些�务和文章�由调用者准备,检查�会改动 vault �文件。 + +文件说明: + +- `run.mjs`:统一入�,任何�检查失败�返回�零退出�。 +- `reading-rail.mjs`:原有数学�SVG 和�素检查,无需站点�务。 +- `browser.mjs`:从默认�览器冒烟测试中移出的文章 TOC 检查。 +- `vault-checks.mjs`:从本地 vault 检查中归拢的 TOC 场景。 + +这些检查�覆盖 Chromium 和指定场景。模拟时间下的 SVG 几何与若干��截图 +�能�明真实滚动的�一帧都平滑;处�动画或兼容性问题时,�需在目标�览器中观察。 diff --git a/scripts/manual/toc/browser.mjs b/scripts/manual/toc/browser.mjs new file mode 100644 index 00000000..e90ca4d0 --- /dev/null +++ b/scripts/manual/toc/browser.mjs @@ -0,0 +1,46 @@ +import assert from 'node:assert/strict'; +import { chromium } from 'playwright'; + +// Optional checks against a built article with at least two headings and enough +// content to scroll. The caller supplies the full article URL. +const browser = await chromium.launch({ headless: true }); +try { + const page = await browser.newPage({ viewport: { width: 2560, height: 1440 } }); + await page.addInitScript(() => localStorage.setItem('daybook:privacy:v1', JSON.stringify({ analytics: false }))); + await page.route('**/api/privacy', route => route.fulfill({ json: { version: 1, analytics: false } })); + const errors = []; + page.on('pageerror', error => errors.push(error.message)); + await page.goto(process.env.DAYBOOK_TOC_ARTICLE_URL, { waitUntil: 'networkidle' }); + await page.waitForSelector('.post-content'); + await page.evaluate(() => document.fonts.ready); + console.log('Checking TOC Rail...'); + await page.waitForSelector('[data-reading-toc-rail-base]', { state: 'attached', timeout: 5000 }); + + const initialPath = await page.getAttribute('[data-reading-toc-rail-base]', 'd'); + await page.evaluate(() => window.scrollBy(0, 500)); + await page.waitForFunction(initial => document.querySelector('[data-reading-toc-rail-base]').getAttribute('d') !== initial, initialPath); + + console.log('Checking the outline in immersive reading mode...'); + await page.locator('[data-reader-toggle]').first().click(); + await page.waitForFunction(() => document.body.dataset.readerMode === 'immersive' && !document.querySelector('[data-note-toc-stage]').classList.contains('has-reading-rail')); + const outline = page.locator('[data-note-toc]'); + if (!await outline.isVisible() || await outline.evaluate(node => node.inert)) throw new Error('Immersive outline is hidden or inert'); + const bodyBox = await page.locator('.post-content').boundingBox(); + const tocBox = await outline.boundingBox(); + if (tocBox.x < bodyBox.x + bodyBox.width || tocBox.x + tocBox.width > 2560) throw new Error('Immersive outline overlaps the article or viewport'); + await outline.locator('a[href^="#"]').nth(1).click(); + await page.setViewportSize({ width: 390, height: 844 }); + await page.locator('[data-mobile-toc-fab]').click(); + await page.waitForSelector('.mobile-toc-sheet.is-open'); + await page.keyboard.press('Escape'); + await page.waitForFunction(() => !document.querySelector('.mobile-toc-sheet.is-open')); + if (await page.locator('body').getAttribute('data-reader-mode') !== 'immersive') throw new Error('Closing the outline also exited reader mode'); + await page.keyboard.press('Escape'); + await page.setViewportSize({ width: 2560, height: 1440 }); + await page.waitForFunction(() => !document.body.dataset.readerMode); + + assert.deepEqual(errors, []); + console.log('TOC article checks passed (rail, immersive outline and mobile sheet).'); +} finally { + await browser.close(); +} diff --git a/scripts/manual/toc/reading-rail.mjs b/scripts/manual/toc/reading-rail.mjs new file mode 100644 index 00000000..5afe4c03 --- /dev/null +++ b/scripts/manual/toc/reading-rail.mjs @@ -0,0 +1,245 @@ +import assert from "node:assert/strict"; +import test from "node:test"; + +import { + buildReadingTocRailCurve, + readingTocRailDotOffset, +} from "../../../assets/ts/toc/reading-toc-rail.ts"; + +const geometry = { + width: 208, + height: 200, + direction: -1, + lineInset: 188, + idleAmplitude: 20, + maxExtraAmplitude: 14, + bulgeHalfHeight: 50, + labelGap: 12, +}; + +function approximatelyEqual(actual, expected, epsilon = 0.000001) { + assert.ok( + Math.abs(actual - expected) <= epsilon, + `expected ${actual} to be within ${epsilon} of ${expected}`, + ); +} + +test("the wave spans the full rail and becomes straight at both endpoints", () => { + const top = buildReadingTocRailCurve(geometry, 0, 20); + assert.equal(top.topY, 0); + assert.equal(top.bottomY, 50); + assert.equal(top.effectiveAmplitude, 0); + assert.equal(top.peakX, 188); + + const middle = buildReadingTocRailCurve(geometry, 100, 20); + assert.equal(middle.topY, 50); + assert.equal(middle.bottomY, 150); + assert.equal(middle.effectiveAmplitude, 20); + assert.equal(middle.peakX, 168); + + const bottom = buildReadingTocRailCurve(geometry, 200, 20); + assert.equal(bottom.topY, 150); + assert.equal(bottom.bottomY, 200); + assert.equal(bottom.effectiveAmplitude, 0); + assert.equal(bottom.peakX, 188); +}); + +test("near-edge paths clip endpoints but retain full bezier control points", () => { + const nearTop = buildReadingTocRailCurve(geometry, 10, 20); + assert.equal(nearTop.topY, 0); + assert.equal(nearTop.bottomY, 60); + assert.equal(nearTop.effectiveAmplitude, 4); + assert.equal(nearTop.peakX, 184); + assert.match(nearTop.basePath, /C 188 -20 184 -5 184 10/); + + const nearBottom = buildReadingTocRailCurve(geometry, 190, 20); + assert.equal(nearBottom.topY, 140); + assert.equal(nearBottom.bottomY, 200); + assert.equal(nearBottom.effectiveAmplitude, 4); + assert.equal(nearBottom.peakX, 184); + assert.match(nearBottom.basePath, /C 184 205 188 220 188 200/); +}); + +test("direction mirrors only the horizontal wave geometry", () => { + const left = buildReadingTocRailCurve(geometry, 100, 20); + const right = buildReadingTocRailCurve({ ...geometry, direction: 1 }, 100, 20); + + assert.equal(left.peakX, 168); + assert.equal(right.peakX, 208); + assert.equal(right.topY, left.topY); + assert.equal(right.bottomY, left.bottomY); + assert.equal(right.effectiveAmplitude, left.effectiveAmplitude); +}); + +test("heading dots follow the same cosine-squared wave envelope", () => { + approximatelyEqual(readingTocRailDotOffset(100, 100, 50, 20, -1), -20); + approximatelyEqual(readingTocRailDotOffset(75, 100, 50, 20, -1), -10); + approximatelyEqual(readingTocRailDotOffset(125, 100, 50, 20, -1), -10); + approximatelyEqual(readingTocRailDotOffset(50, 100, 50, 20, -1), 0); + approximatelyEqual(readingTocRailDotOffset(30, 100, 50, 20, -1), 0); + approximatelyEqual(readingTocRailDotOffset(100, 100, 50, 20, 1), 20); +}); + +test("endpoint folds stay visible and the highlight follows their actual arc length", async () => { + const { readFile } = await import("node:fs/promises"); + const { build } = await import("esbuild"); + const { chromium } = await import("playwright"); + const { default: sharp } = await import("sharp"); + const { outputFiles } = await build({ + entryPoints: [new URL("../../../assets/ts/toc/reading-toc-rail.ts", import.meta.url).pathname], + bundle: true, format: "iife", globalName: "Rail", write: false, + }); + const css = (await Promise.all(["tokens.css", "components.css", "pages/note.css"].map(name => + readFile(new URL(`../../../internal/embedded/static/css/${name}`, import.meta.url), "utf8"), + ))).join("\n"); + const template = await readFile(new URL("../../../internal/embedded/templates/partials/toc.html", import.meta.url), "utf8"); + const nav = template.match(/